     resultingPromise = tools.objectCreate(overrideLayer)
 
     overrides.forEach (name) ->
-      superMethod = resolvedObject[name]
       overrideLayer[name] = (args...) ->
-        Z superMethod.apply(this, args)
+        Z resolvedObject[name].apply(this, args)
 
-    tools.pairs(funcsToApply).forEach ([name, func]) ->
+    tools.pairs(mixedIn).forEach ([name, func]) ->
       resultingPromise[name] = (args...) ->
         Z resultingPromise.then (resolved) ->
           func.apply({ value: resolved }, args)


  Z.mixin = tools.proc (hash) ->
    tools.pairs(hash).forEach ([name, func]) ->
      funcsToApply[name] = func

  Z



init = ->

  mixedIn = {}

  Z = (obj) ->
    resolvedObject = resolveCompletely(obj)
