         watch-id  (keyword (gensym))
         v-filter  (filter #(or (should-signal? % s-thresh) (should-collect? % c-thresh)))
         ->result  (fn [type sigs colls t0]
-                    (remove-watch! g :add-vertex watch-id)
-                    (remove-watch! g :remove-vertex watch-id)
-                    (remove-watch! g :add-edge watch-id)
+                    (remove-context-watches g watch-id)
                     (execution-result type sigs colls t0))]
     (reify
       #?@(:clj

  []
  {:collect-thresh 0
   :signal-thresh  0
   :signal-fn      parallel-signal-pass
   :collect-fn     parallel-collect-pass
   :scheduler      two-pass-scheduler
   :max-ops        1e6
   :threads        #?(:clj (inc (.availableProcessors (Runtime/getRuntime))) :cljs 1)})


        [_]
        (let [t0     (atom (now))
              active (atom (sequence v-filter (vertices g)))
              queue (atom #{})]
          (add-context-watches g watch-id queue)
          (go-loop [colls 0, sigs 0]
            ;;(warn :active-count (count @active))
            (if (seq @active)
              (if (<= (+ colls sigs) max-ops)
                (let [grp-size            (max 512 (long (/ (count @active) threads)))
                      [act' sigs' colls'] (scheduler grp-size @active)]
                  ;;(warn :auto (count @queue))
                  (reset! active (into (into #{} v-filter act') @queue))
                  (reset! queue #{})
                  (recur (long (+ colls colls')) (long (+ sigs sigs'))))
                (do (stop! _)
                    (->result :max-ops-reached sigs colls @t0)))
