     if not isFunction(delay)
       delayMs = delay
       delay = (f) -> Bacon.scheduler.setTimeout(f, delayMs)
-    withDescription this, "buffer", @withHandler (event) ->
+    withDescription(this, "buffer", @withHandler (event) ->
       buffer.push = @push
       if event.isError()
         reply = @push event

        reply = @push output
        if reply == Bacon.noMore
          return reply
      reply
  scan: (seed, f, options = {}) ->
    f_ = toCombinator(f)
    f = if options.lazyF then f_ else (x,y) -> f_(x(), y())

  errors: -> withDescription(this, "errors", @filter(-> false))
  filter: (f, args...) ->
    convertArgsToFunction this, f, args, (f) ->
      withDescription(this, "filter", f, @withHandler (event) ->
        if event.filter(f)
          @push event
        else
          Bacon.more)
  takeWhile: (f, args...) ->
    convertArgsToFunction this, f, args, (f) ->
      withDescription(this, "takeWhile", f, @withHandler (event) ->
        if event.filter(f)
          @push event
        else
          @push end()
          Bacon.noMore)
  endOnError: (f, args...) ->
    f = true if !f?
    convertArgsToFunction this, f, args, (f) ->
      withDescription(this, "endOnError", @withHandler (event) ->
        if event.isError() && f(event.error)
          @push event
          @push end()
        else
          @push event)
  take: (count) ->
    return Bacon.never() if count <= 0
    withDescription(this, "take", count, @withHandler (event) ->
      if !event.hasValue()
        @push event
      else
