       else
         #console.log "bouncing value immediately"
         UpdateBarrier.inTransaction(undefined, this, (->
-          reply = sink initial(@current.get().value())
+          reply = try
+            sink initial(@current.get().value())
+          catch
+            Bacon.more
         ), [])
         @maybeSubSource(sink, reply)
     else

withDescription = (desc..., obs) ->
  describe(desc...).apply(obs)

Bacon.when = (patterns...) ->
  return Bacon.never() if patterns.length == 0
  len = patterns.length
  usage = "when: expecting arguments in the form (Observable+,function)+"

  assert usage, (len % 2 == 0)
  sources = []
  pats = []
  i = 0
  while (i < len)
    patSources = _.toArray patterns[i]
    f = patterns[i + 1]
    pat = {f: (if isFunction(f) then f else (-> f)), ixs: []}
    triggerFound = false
    for s in patSources

    else
      #console.log "start tx"
      rootEvent = event
      result = f.apply(context, args)
      #console.log("done with tx")
      flush()
      rootEvent = undefined
      while (afters.length)
        theseAfters = afters
        afters = []
        for f in theseAfters
          f()
      result

  currentEventId = -> if rootEvent then rootEvent.id else undefined
