             data (get-in state [:pages-data page-id])]
         (assoc state
                :workspace-data data
-               :workspace-page page)))))
+               :workspace-page page)))
+
+    ptk/WatchEvent
+    (watch [_ state stream]
+      (let [stoper (rx/filter #(or (ptk/type? ::finalize %)
+                                   (ptk/type? ::initialize-page %))
+                              stream)
+            notifier (->> stream
+                          (rx/filter (ptk/type? ::async-commit-shapes-changes))
+                          (rx/debounce 500))]
+        (->> stream
+             (rx/filter (ptk/type? ::async-commit-shapes-changes))
+             (rx/map deref)
+             (rx/mapcat identity)
+             (rx/buffer-until notifier)
+             (rx/map vec)
+             (rx/map commit-shapes-changes)
+             (rx/take-until stoper)
+             (rx/finalize #(prn "FINALIZE" %)))))))
 
 ;; --- Fetch Workspace Users
 


(defn interrupt? [e] (= e :interrupt))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Websockets Events
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; --- Initialize WebSocket

(declare fetch-users)
(declare handle-who)

  [operations]
  (s/assert ::cp/operations operations)
  (ptk/reify ::commit-shapes-changes
    ptk/UpdateEvent
    (update [_ state]
      (let [pid (get-in state [:workspace-local :page-id])
