     (if (or auto-run (some? *ratom-context*))
       (do
         (notify-deref-watcher! this)
-        (if dirty?
+        (if-not (== dirty? clean)
           (run this)
           state))
       (do
-        (when dirty?
+        (when-not (== dirty? clean)
           (let [oldstate state]
             (set! state (f))
             (when-not (identical? oldstate state)

  IComputedImpl
  (-handle-change [this sender oldval newval]
    (when (and active? (not (identical? oldval newval)))
      (set! dirty? true)
      ((or auto-run run) this)))

  (-update-watching [this derefed]

    (let [oldval state]
      (set! state newval)
      (when on-set
        (set! dirty? is-dirty)
        (on-set oldval newval))
      (-notify-watches a oldval newval)
      newval))
