 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     Wrappers     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn make-wrapped-subproblem [nm inp-set prefix-set inner-sp output-wrap child-watch ri-fn]
+  (util/assert-is (contains? prefix-set (first (sp-name inner-sp))))
+  (let [ret (make-subproblem nm inp-set (sp-ts inner-sp)
+                             (fn [_] (throw (RuntimeException.)))
+                             ri-fn summaries/or-summary)]
+    (connect-and-watch! ret inner-sp
+      (fn [o] (set-output-set! ret (output-wrap o)))
+      (fn [inner-child] (child-watch ret inner-child)))
+    ret))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;     Output Collection     ;;;;;;;;;;;;;;;;;;;;;;;;;;
 

                   (set-output-set! s out-set)
                   (schedule-decrease! s)))) ;; TODO? 
           (do (reset! state :go) ;; Die
               (summaries/add-bound! s Double/NEGATIVE_INFINITY)))))     
     (fn summarize [s] (@sm-fn s)))))

(defmethod get-subproblem :Atomic [[_ fs :as n] inp-set] 

     (let [nm (pair-name (sp-name left-sp) right-name)
           right-sp (delay (right-sp-fn (get-output-set! left-sp)))
           right?-atom (atom false) ;; Expand on right            
           ss (summaries/make-sum-summarizer nil)
           go-right! (fn [s] 
                       (reset! right?-atom true)                          
