         else
           spawn event
     composite.unsubscribe
+  extraDeps = []
+  result.internalDeps = ->
+    extraDeps.concat(root)
+  result
 
 
 class EventStream extends Observable

    @context = context
    @method = method
    @args = args
    @flatDeps = null

  dependsOn = (o, b) ->
    if !@flatDeps?
      @flatDeps = {}
      @collectDeps o
    return @flatDeps[b.id]

  apply: (obs) ->
    that = @

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

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