     @context = context
     @method = method
     @args = args
-    @flatDeps = null
 
   dependsOn = (o, b) ->
-    if !@flatDeps?
-      @flatDeps = {}
-      @collectDeps o
-    return @flatDeps[b.id]
+    for dep in o.internalDeps()
+      if dep is b or dep.dependsOn(b)
+        return true
 
   apply: (obs) ->
     that = @

        else
          spawn event
    composite.unsubscribe


class EventStream extends Observable

    obs.inspect = -> obs.toString()
    obs.desc = (-> { context: that.context, method: that.method, args: that.args })
    obs

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