   (equiv [this other]
     (-equiv this other))
   (rawDeref [_] state)
-  (fastDeref [this]
+  (clean [this])
+  cljs.core/IAtom
+
+  IReactive
+  (-get-binding-fns [this] fwatch-binding-info)
+
+  cljs.core/IEquiv
+  (-equiv [o other] (identical? o other))
+
+  cljs.core/IDeref
+  (-deref [this]
     (register-dep this id fwatch-binding-info) 
     state)
-  (clean [this])
-  cljs.core/IAtom
-
-  IReactive
-  (-get-binding-fns [this] fwatch-binding-info)
-
-  cljs.core/IEquiv
-  (-equiv [o other] (identical? o other))
-
-  cljs.core/IDeref
-  (-deref [this] (.fastDeref this))
 
   IMeta
   (-meta [_] meta)

                  (doseq [[key f] (.-watches this)]
                    (f key this oldVal newVal))))})

(let [core-deref cljs.core/deref]
  (set! cljs.core/deref (fn [x]
                          (if (.-fastDeref x)
                            (.fastDeref x)
                            (core-deref x)))))

(def fwatch-binding-info
  (BindingInfo.


(def rx-mixin
  #js
  {:reactiveDeref (fn reactiveDeref []
                (this-as this
                         (if (.-lazy this)
                           (register-dep this (.-id this) invalidates-binding-info)
