     errSub = bus.subscribe {
       channel: replyTo.channel
       topic: replyTo.topic.err
-    }
-    errSub.subscribe (err, envelope) ->
-      {responderId} = envelope
-      stopWaitingOn responderId
-
-      errors[responderId] =
-        err: err
-        envelope: envelope
+      callback: callback
+    }
 
     # Subscribe to the 'success' response for topicId
     # As above, we don't pass a callback immediately so that


    timeoutId = timers.setTimeout onTimeout, timeout

    # Helper to pop a specific 'responderId' from the waitingOn array
    stopWaitingOn = (responderId) ->
      _.remove waitingOn, (el) -> el is responderId

    # Subscribe to the 'err' response for topicId
    # We don't pass a callback immediately so that we can

    responders = core.responders[channel] or {}
    waitingOn = _.keys responders

    # return immediately if we have nothing to do
    if _.isEmpty waitingOn
      return done()

    # We will accumulate results in these objects, which map
    # responderId's to errors and results.
    errors = {}
    results = {}

    # Send the message
    replyTo = core.send channel, data

    # Define an 'onTimeout' callback for when we don't get a response
    # (either error or success) in the configured time.
