         reply = sub.sink event
         @removeSub sub if reply == Bacon.noMore or event.isEnd()
       true
-    catch
+    catch e
       @queue = [] # ditch queue in case of exception to avoid unexpected behavior
-      false
+      throw e
 
   pushIt: (event) ->
     unless @pushing

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

    else
      #console.log "start tx"
      rootEvent = event
      try
        result = f.apply(context, args)
        #console.log("done with tx")
        flush()
      finally
        rootEvent = undefined
        while (aftersIndex < afters.length)
          after = afters[aftersIndex]
          aftersIndex++
          after()
        aftersIndex = 0
        afters = []
      result

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