 DepCache = (->
   flatDeps = {}
   
-  dependsOn = (b) ->
-    myDeps = flatDeps[this.id]
+  dependsOn = (orig, o) ->
+    myDeps = flatDeps[orig.id]
     if !myDeps
-      myDeps = flatDeps[this.id] = {}
-      collectDeps this, this
-    return myDeps[b.id]
+      myDeps = flatDeps[orig.id] = {}
+      collectDeps orig, orig
+    myDeps[o.id]
   
   collectDeps = (orig, o) ->
     for dep in o.internalDeps()


  withDescription: ->
    describe(arguments...).apply(this)

Observable :: reduce = Observable :: fold
Observable :: assign = Observable :: onValue


    deps = _.cached (-> findDeps([that.context].concat(that.args)))
    obs.internalDeps = obs.internalDeps || deps
    obs.deps = deps

    obs.toString = (-> _.toString(that.context) + "." + _.toString(that.method) + "(" + _.map(_.toString, that.args) + ")")
