             (new-reactive-id)
             this
             ckey
-            (fn [this] (get (.rawDeref this) ckey))
-            (fn [this f & args]
+            (fn [cur] (get (.rawDeref this) ckey))
+            (fn [cur f & args]
               (.updateChild this ckey f args))
-            (fn [this]
-              (set! child-cursors (update child-cursors ckey conj this)))
-            (fn [this]
+            (fn [cur]
+              (set! child-cursors (update child-cursors ckey conj cur)))
+            (fn [cur]
               (set! child-cursors
                     (update child-cursors ckey
                             (fn [cursors]
-                              (let [cursors (remove #(= % this) cursors)]
+                              (let [cursors (remove #(= % cur) cursors)]
                                 (when-not (empty? cursors)
                                   cursors))))))
             nil

                     (.activate this))
        (unregisterOne [this]
                       (set! watchers (dec watchers))
                       (when (.-auto-clean this) (.clean this)))
        (addFWatch [this key f]
                   (when-not (aget (.-fwatches this) key)
                     (aset (.-fwatches this) key f)

       (#'clojure.core/setup-reference (ReactiveExpression. f false) options))

     (defmacro reactive [& body]
       `(freactive.core/reactive*
         (fn reactive-computation-fn []
           ~@body)))

