       state
       (binding [*register-dep*
                 (fn [ref]
-                  (cond
-                    (satisfies? IInvalidates ref)
-                    (-add-invalidation-watch ref this sully)
-                    (satisfies? IWatchable ref)
-                    (-add-watch ref this sully)))]
+                  ((get-add-watch* ref) ref this sully))]
         (set! dirty false)
         (let [old-val state
               new-val (f)]

  cljs.core/IDeref
  (-deref [this]
    (register-dep this)
    state)

  IMeta
  (-meta [_] meta)

  ([ref getter]
   (lens ref getter (fn [_ _] (assert false "Lens does not support updates"))))
  ([ref getter setter]
   (let [lens (ReactiveLens. ref getter setter true nil nil nil)]
     (add-lens-watch lens ref)
     lens)))

(defn cursor [ref korks]
