   (get-children        [s]  "List current outputs, for debugging only.")
   (add-child-watcher!  [s w] "Add a watcher to be notified of all child sps.")
 
-  (subsuming-sps       [ts] "subproblems with same name, >= inp-set") 
-  (add-subsuming-sp!   [ts subsuming-sp]) 
+  (subsuming-sps       [s] "subproblems with same name, >= inp-set") 
+  (add-subsuming-sp!   [s subsuming-sp]) 
 
   (refine-input        [s refined-input-set] "Return a child sp. Must have output.")
 

       s
       (if (= :Atomic (first (sp-name inner-sp)))
         (let [ret (get-subproblem (sp-name s) ni)]
           (add-subsuming-sp! (sp-ts ret) inner-sp) ;; TODO: new syntax?
           ret)
         (make-output-collecting-subproblem (refine-input inner-sp ni)))))))


  (add-child-watcher!  [s w]
    (.add child-watchers w)                   
    (doseq [c (get-children s)] (swap! *out-count* inc) (w s c)))
  (add-sp-child!*      [s c] ;; TODO: wait if output not set yet, send them above?
    (util/assert-is (and (not (identical? s c)) (get-output-set s) (get-output-set c)))
    (.add child-list c)
    (summaries/summary-changed-local! s)
    (when (underived? s)
      (summaries/connect! (sp-ts s) (sp-ts c))
      (summaries/summary-changed! (sp-ts s))) ;; TODO: remove this overhead from atomic.   
    (doseq [w (doall (seq child-watchers))] (swap! *out-count* inc) (w s c)))

  (subsuming-sps [s] (keys subsuming-sp-set))
