     # Use `async` error propagation mechanism to break out of stream.
     Object.defineProperty Object::, "downstream",
         enumerable: no, value: (def) -> (args...) =>
-            fx = (f) => (a...) => f.apply @, cc(a)
-            cc = (a) -> _.toArray(args).concat(a)
+            cca = (a) -> _.toArray(args).concat(a)
+            fxc = (f) => (a...) => f.apply @, cca(a)
             malformed = "no POJO style definition"
             assert _.isPlainObject def, malformed
             assert targeted = _.head _.keys def

            assert threads = _.map hierarchy, resolve
            methods = _.filter threads, _.isFunction
            prepped = _.toArray _.unique methods
            applied = _.map prepped, (fn) -> fx fn
            bounded = callback?.bind(this) or (->)
            return async.series applied, bounded


            assert threads = _.map hierarchy, resolve
            methods = _.filter threads, _.isFunction
            prepped = _.unique methods.reverse()
            applied = _.map prepped, (fn) -> fxc fn
            bounded = callback?.bind(this) or (->)
            return async.series applied, bounded

