       (set! norun? true)
       (doseq [w watching]
         (when (and (instance? Reaction w)
-                   (not (== (.-dirtyness w) clean)))
-          (when-not (-check-clean w)
-            ((or (.-auto-run w) run) w))))
+                   (not (-check-clean w)))
+          (if-some [ar (.-auto-run w)]
+            (ar w)
+            (run w))))
       (set! norun? false)
       (when (== dirtyness maybe-dirty)
         (set! dirtyness clean)))

                      dirty)]
      (when (> new-dirty old-dirty)
        (set! dirtyness new-dirty)
        (if (some? auto-run)
          (when-not norun?
            (if-not (identical? auto-run run)
              (auto-run this)
              (when-not (-check-clean this)
                (auto-run this))))
          (-notify-watches this state state)))))

  (-update-watching [this derefed]
    (doseq [w derefed]


(defprotocol IComputedImpl
  (-peek-at [this])
  (^boolean -check-clean [this])
  (-handle-change [this sender oldval newval])
  (-update-watching [this derefed]))

