     ch."))
 
 (defn- compscribe*
-  [outer-target subs-fn unsubs-fn
+  [outer-target source-service compscribe-service
    [endpoint direct-hooks deep-hooks :as conformed-spec] id]
   (let [;; Once intercepted, events need to go through target-mix so
         ;; that mix-ins and mix-outs have synchronous effects

  and close target-ch."
  {:arglists '([target-ch service spec id])} 
  ([target-ch service spec id]
   (compscribe target-ch
               (fn [endpoint id]
                 (subscribe service [endpoint id]))
               (fn [ch]
                 (cancel service ch))))
  ([target-ch subs-fn unsubs-fn spec id]
   (let [conformed-spec (conform-spec spec)] ;; could allow compiled
                                             ;; spec by checking for
                                             ;; ::spec metadata
     (compscribe* target-ch subs-fn unsubs-fn conformed-spec id))))

                                         (some-> (find @subs ks)
                                                 (vector)))))
                       distinct)]
            (cancel compscribe-service xch)
            (mix-out target-mix xch)
            (vswap! subs dissoc ks))

