     @method = method
     @args = args
 
-  dependsOn = (o, b) ->
-    for dep in o.internalDeps()
-      if dep is b or dep.dependsOn(b)
-        return true
-
   apply: (obs) ->
     that = @
 
     deps = _.cached (-> findDeps([that.context].concat(that.args)))
     obs.internalDeps = obs.internalDeps || deps
-    obs.dependsOn = (b) -> dependsOn.call(that, obs, b)
+    obs.dependsOn = (b) -> UpdateBarrier.dependsOn.call(that, obs, b)
     obs.deps = deps
 
     obs.toString = (-> _.toString(that.context) + "." + _.toString(that.method) + "(" + _.map(_.toString, that.args) + ")")

    spawn = (event) ->
      child = makeObservable(f event.value())
      extraDeps.push(child)
      composite.add (unsubAll, unsubMe) -> child.subscribeInternal (event) ->
        if event.isEnd()
          _.remove(child, extraDeps)
          checkQueue()
          checkEnd(unsubMe)
          Bacon.noMore

        while (afters.length)
          f = afters.splice(0, 1)[0]
          f()
        flatDeps = {}
      result

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