          (with-overloaded-ugens
            (let [form# ~@ugen-form
                  n-chans# (count form#)
-                 inst-bus# (audio-bus n-chans#)]
+                 inst-bus# (or (:bus (get @instruments* ~sname)) (audio-bus n-chans#))]
              (out inst-bus# form#)
              [~sname
               ~params


(defmacro inst
  [sname & args]
  `(let [[sname# params# ugens# constants# n-chans# inst-bus#] (pre-inst inst-bus# ~sname ~@args)
         container-group# (or (:group (get @instruments* sname#))
                              (group :tail @inst-group*))
         instance-group#  (or (:instance-group (get @instruments* sname#))
                              (group :head container-group#))
         fx-group#        (or (:fx-group (get @instruments* sname#))
                              (group :tail container-group#))
         imixer#    (or (:mixer (get @instruments* sname#))
                        (inst-mixer :tgt container-group# :pos :tail :in-bus inst-bus#))
         sdef#      (synthdef sname# params# ugens# constants#)
         arg-names# (map :name params#)

  (dosync (ref-set instruments* {})))

(defmacro pre-inst
  [& args]
  (let [[sname params param-proxies ugen-form] (normalize-synth-args args)]
    `(let [~@param-proxies]
       (binding [*ugens* []
