     context = options?.context ? {}                # get context or default to {}
     done = options?.done ? done                    # look for `done`
     control = new Control @, @array, context, done # create controller
+    @emit 'start', control:control
     result = control._execute()                    # starts the chain
     if control.paused?                             # a paused chain isn't done
       results = paused:control.paused              # return only paused info

  stop: (reason) ->
    @stopped = reason:reason, index:@_index, fn:@_array[@_index]
    result = context:@context
    @_chain.emit 'stop', undefined, result
    return true

  fail: (reason) ->

    results.stopped = control.stopped if control.stopped?
    results.failed  = control.failed  if control.failed?
    control._done? result.error, results
    @emit 'done', result.error, results
    return results


