        s
        (if (= :Atomic (first (sp-name inner-sp)))
          (let [ret (get-subproblem (sp-name s) ni)]
-           (add-subsuming-sp! ret inner-sp)
+           (add-subsuming-sp! (canonicalize ret) inner-sp)
            ret)
          (make-output-collecting-subproblem (refine-input inner-sp ni)))))))
 

    (assert (nil? @out-set-atom))
    (reset! out-set-atom o)
    (summaries/summary-changed-local! s)
    (when (underived? s) 
      (summaries/summary-changed! (sp-ts s)))    
    (doseq [w output-watchers] (w s))
    (doseq [c (get-children s), w (doall (seq child-watchers))] (w s c)))


(defn- add-sp-child! [sp child-sp up?]
;  (println sp child-sp) (Thread/sleep 100)
  (when (canonical? sp)
    (summaries/connect-subsumed! (sp-ts sp) (sp-ts child-sp))
    ;; TODO: propagate!
    )
