     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

    successSub = bus.subscribe {
      channel: replyTo.channel
      topic: replyTo.topic.success
    }
    successSub.subscribe (data, envelope) ->
      {responderId} = envelope
      stopWaitingOn responderId

      results[responderId] =
        data: data
        envelope: envelope

    bus.publish
      channel: channel
      topic: "request.#{topicId}"
      data: data
      replyTo: replyTo

    finish = ->
      return timers.setImmediate finish if waitingOn.length > 0

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

      errSub.unsubscribe()
      successSub.unsubscribe()

      done err, results

    timers.setImmediate finish

  # sends acknowledgement, error, completion to replyTo channels
  respond: (channel, service) ->

      errSub.unsubscribe()
      successSub.unsubscribe()

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

      switch condition
        when 'err'
