     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

      errSub.unsubscribe()
      successSub.unsubscribe()

      {topic} = envelope
      [condition, middle..., topicId] = topic.split('.')

      switch condition
        when 'err'


    timeoutId = timers.setTimeout onTimeout, timeout

    callback = (message, envelope) ->
      {responderId} = envelope
      _.pull waitingOn, responderId

      [condition, middle..., topicId] = envelope.topic.split('.')

      switch condition
        when 'err'
          errors[responderId] =
            err: message
            envelope: envelope
        when 'success'
          results[responderId] =
            data: message
            envelope: envelope

      if waitingOn.length is 0
        errSub.unsubscribe()
        successSub.unsubscribe()
        timers.clearTimeout timeoutId

        unless _.isEmpty errors
          err = new Error "Errors returned by responders on channel '#{channel}'"
          err.errors = errors

        done err, results

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