   #  chain.remove 3
   #  chain.remove 'some-id'
   #  chain.remove fn1
-  remove: (which) ->
+  remove: (which, reason) ->
 
     # find it based on the selector. may return an error
     index = @_findIndex which


    # use sub-operation so the select() stuff can also use the sub-operation.
    # select() one passes the function first and then the index
    @_remove null, index

  # used by both chain.remove() and chain.select(...).remove()
  _remove: (_, index) ->

    # by default, return an empty object because we didn't remove anything
    result = result:false

    # if we found it tho
    if index > -1

    # if they called control.stop() or control.fail() then include that info
    results.stopped = control.stopped if control.stopped?
    results.failed  = control.failed  if control.failed?
    # also include functions removed during this execution run by `control`
    results.removed = control.removed if control.removed?

    # call the done function if one exists
    control._done? result.error, results
