   ([ref getter]
    (lens ref getter (fn [_ _] (assert false "Lens does not support updates"))))
   ([ref getter setter]
-   (let [lens (ReactiveLens. ref getter setter nil nil nil)]
-     (add-watch ref lens
-                (fn [_ _ old-value new-value]
-                  (do-update-state lens (getter new-value))))
-     (set! (.-state lens) (getter @ref))
+   (let [lens (ReactiveLens. ref getter setter true nil nil nil)]
+     (add-lens-watch lens ref)
      lens)))
 
 (defn cursor [ref korks]

     (-remove-watch ref key)
     (sully))))

(deftype ReactiveComputation [^:mutable state ^:mutable dirty f ^:mutable deps meta
                              ^:mutable watches ^:mutable invalidation-watches sully]
  Object

         (fn [cur]
           (setter cur (f (getter cur))))))

(deftype ReactiveLens [ref getter setter dirty state meta watches]
  Object
  (equiv [this other]
    (-equiv this other))
