 
     # 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
+    @_remove null, index, reason
 
   # used by both chain.remove() and chain.select(...).remove()
-  _remove: (_, index) ->
+  _remove: (_, index, reason = true) ->
 
     # by default, return an empty object because we didn't remove anything
-    result = result:false
+    result = result:false, reason:reason
 
     # if we found it tho
     if index > -1

      # for it, return the expected properties which call the function which
      # provides the error result.
      return ops =
        error  : error
        disable: returnError
        enable : returnError
        remove : returnError

    chain = this

    # create two spots in args for our 'fn' and 'index'
    # (index 0, delete zero, add in two '')
    args.splice 0, 0, '', ''

    # when doing the remove action on a function it messes up the `for fn,index`
    # iteration loop.
    # So, i pulled index out separately, and, I use array length changes to
    # affect the index value. then it doesn't go up one when we just removed
    # a function. and, it would go up if we added one, tho, I don't have an
    # add action as part of select() stuff.

    # length at the start of the first operation, and, index starts at zero.
    length = chain.array.length
    index = 0

    # let's remember the results of each action
    results = []

    for fn in chain.array

      # apply the action to the function only if the selector say so
      if selector fn, index
        # put both of them in there as the first two args in the slots we created above
        args[0] = fn
        args[1] = index

        # call the action with the `chain` as the `this` and our args
        result = action.apply chain, args

        # compare length before the action and after the action
        diff = chain.array.length - length

        # apply the difference to the index.
        # when we remove one it's -1 so we reduce the index.
        index += diff

        # and then update the length
        length = chain.array.length

        # gather each action's results
        results.push result

      # we do the normal increment by one for the loop.
      # Note: this must happen every loop iteration
      index++

    # all done  TODO: how to gather results of action to return here...
    return result:true, results:results

  # create a selector function capable of selecting the desired member functions
  # and then apply the utility functions to them.
