         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 "start tx"
      rootEvent = event
      result = f.apply(context, args)
      #console.log("done with tx")
      flush()
      rootEvent = undefined
      while (aftersIndex < afters.length)
        after = afters[aftersIndex]
        aftersIndex++
        after()
      aftersIndex = 0
      afters = []
      result

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

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