           else
             sendInit() unless event.isInitial()
             initSent = true
-            acc = new Some(f(acc.getOrElse(undefined), event.value()))
-            sink (event.apply(_.always(acc.get())))
+            prev = acc.getOrElse(-> undefined)
+            next = -> 
+              if lazyF
+                f(prev, event.value)
+              else
+                f(prev(), event.value())
+            acc = new Some(next)
+            sink (event.apply(next))
         else
           if event.isEnd()
             reply = sendInit()

      left[key](right)
  else
    assert "not a function or a field key: " + f, false
toOption = (v) ->
  if v instanceof Some || v == None
    v


  toProperty: (initValue) ->
    initValue = None if arguments.length == 0
    @scan(initValue, latterF, true)

  toEventStream: -> this

