          (aclear pushed-his)
          (aclear pushed-var->constraint->watching?)
          (aclear pushed-constraint->dirty?)
-         (aclear pushed-splitters))
+         (aclear pushed-splitters)
+         (dotimes [constraint (alength constraints)]
+           (.reset (aget constraints constraint) constraint)))
   (set-lo [this var new-lo]
           (when-not (identical? (aget los var) new-lo)
             (if (val-lt (aget his var) new-lo)

                     (loop [i 0]
                       (when (< i (alength vars))
                         (let [var (aget vars i)]
                           (aset los var (aget new-los i))
                           (if (identical? (aget new-los i) (aget his var))
                             (recur (+ i 1)))))))))))


                 pushed-los pushed-his pushed-var->constraint->watching? pushed-constraint->dirty? pushed-splitters]
  Object
  (reset [this]
         (set! depth 0)
         (set! failed? false)
         (dotimes [i (alength los)]
