     this))
 
 
-(deftype ThreadedOutputSplitter [source sinks]
-  proto/Splitter
-  (connect
-    [this sink operation-map]
-    ;; Simply puts the sink and it's operation-map into sinks vector
-    (let [m (or operation-map op/default-operations)]
-      (swap! sinks conj [sink m])))
-
-  (commit
-    [this]
-    (doseq [[sink op-map] @sinks]
-      (connect-threaded source sink op-map))
-    this))
-
-
 (defn output-splitter
   "Create and return an output-splitter for the given `source` channel."
   ([source]

  (let [a (streams/stream 10)
        b (streams/stream 10)
        c (streams/stream 10)
        splitter (output-splitter a :multi-thread)
        read (fn [x y]
               (streams/consume
                (fn [v]
                  (Thread/sleep 100)
                  (println (format "%s-%s: %s" (.getName (Thread/currentThread)) y v))) x))]

    (proto/connect splitter b op/default-operations)
    (proto/connect splitter c op/default-operations)

  ([source execution-mode]
   (cond
     (= execution-mode :single-thread) (OutputSplitter. source (atom []))
     (= execution-mode :multi-thread) (ThreadedOutputSplitter. source (atom []) (threadpool 4))
     :else (throw (ex-info (format "Don't know about '%s' execution mode."
                                   execution-mode)
                           :cause {:execution-mode execution-mode})))))
