     nil)
 
   (_update-watching [this derefed]
-    (let [wg watching]
-      (set! watching derefed)
-      (doseq [w derefed]
+    (let [der (if (zero? (arr-len derefed)) nil derefed)
+          wg watching]
+      (set! watching der)
+      (doseq [w der]
         (when (or (nil? wg)
                   (== -1 (.indexOf wg w)))
           (-add-watch w this handle-reaction-change)))
       (doseq [w wg]
-        (when (or (nil? derefed)
-                  (== -1 (.indexOf derefed w)))
+        (when (or (nil? der)
+                  (== -1 (.indexOf der w)))
           (-remove-watch w this))))
     nil)
 

      (set! dirty? true)
      (doseq [w wg]
        (remove-watch w this))
      (when-not (nil? on-dispose)
        (on-dispose s)))
    nil)

  IEquiv


  IReset
  (-reset! [a newval]
    (assert (fn? (.-on-set a)) "Reaction is read only.")
    (let [oldval state]
      (set! state newval)
      (.on-set a oldval newval)
      (notify-w a oldval newval)
      newval))

