           reply = sink end()
           unsubAll() if reply == Bacon.noMore
       initialSent = false
-      combiningSink = (markEnd, setValue, stream) => (unsubAll) ->
+      combiningSink = (stream, index) => (unsubAll) ->
         stream.subscribeInternal (event) =>
           if (event.isEnd())
-            markEnd()
+            ends[index] = true
             checkEnd(unsubAll)
             Bacon.noMore
           else if event.isError()

            unsubAll() if reply == Bacon.noMore
            reply
          else
            setValue(event.value)
            if _.all(values, ((x) -> x != None))
              if initialSent and event.isInitial()
                # don't send duplicate Initial

                reply
            else
              Bacon.more
      subs = for stream, index in streams 
        do (stream, index) ->
          stream = Bacon.constant(stream) if not (stream instanceof Observable)
          combiningSink stream, index
      compositeUnsubscribe subs...
  else
    Bacon.constant([])
