     new Property describe(desc || "scan", this, seed, f), subscribe
 
   fold: (seed, f) =>
-    @scan(seed, f).sampledBy(@filter(false).mapEnd().toProperty()).withDescription("fold", this, seed, f)
+    withDescription("fold", this, seed, f, @scan(seed, f).sampledBy(@filter(false).mapEnd().toProperty()))
 
   zip: (other, f = Array) ->
     Bacon.zipWith([this,other], f)


  awaiting: (other) ->
    this.toEventStream().map(true).merge(other.toEventStream().map(false)).toProperty(false)

  withDescription: ->
    this.withHandler describe(arguments...), (event) -> @push event

Observable :: reduce = Observable :: fold


  if streams.length
    sources = for s in streams
      new Source(s, true, false, s.subscribeInternal)
    withDescription("combineAsArray", streams, Bacon.when(sources, ((xs...) -> xs), describe("combineAsArray", streams)).toProperty())
  else
    Bacon.constant([])

