     expr))
 
 (defmacro take-from-queue
-  [queue]
-  (println "Retrieving data from queue via:")
-  (let [expr (condp (fn [^String v ^String s] (.endsWith s v)) queue-setup
+  [obj]
+  (println "Retrieving data via:")
+  (let [queue (with-meta obj {:tag 'java.util.concurrent.BlockingQueue})
+        expr (condp (fn [^String v ^String s] (.endsWith s v)) queue-setup
                "remove-yield" `(if (not (.isEmpty ~queue))
                                  (.remove ~queue)
                                  (Thread/yield))

                                "PipelineOut"
                                (fn []
                                  (try
                                    (let [^LocalTransferContainer c (take-from-queue ^BlockingQueue @out-queue)]
                                      (if (not (nil? c))
                                        (out-fn (.getIn c) (.getOut c))))
                                    (catch InterruptedException e

    expr))

(defmacro enqueue
  [obj data enqueued-counter dropped-counter]
  (println "Enqueueing data via:")
  (let [queue (with-meta obj {:tag 'java.util.concurrent.BlockingQueue})
        expr (condp (fn [^String v ^String s] (.contains s v)) queue-setup
               "add-counted-yield" `(if (< (.size ~queue) queue-size)
                                      (do
                                        (.add ~queue ~data)
