 
     createGetter (-> target), 0
 
-  createBoundVariableScope = (parentFinder, varName, boundValue, notify) ->
+  rootVariableFinder = ((varName) -> throw 'unknown variable ' + varName)
+
+  createBoundVariableFinder = (parentFinder, varName, boundValue, notify) ->
     createGetter = (subPath) ->
       createPathGetter boundValue, subPath
 
-    createScopeWithFinder (name, callback) ->
+    (name, callback) ->
       if name is varName
         callback createGetter, notify
       else
         parentFinder name, callback
 
-  createMutableVariableScope = (parentFinder, varName, varValue) ->
+  createMutableVariableFinder = (parentFinder, varName, varValue) ->
     varNotify = createNotifier()
     createGetter = (subPath) ->
       createPathGetter varValue, subPath
 
-    createScopeWithFinder (name, callback) ->
+    (name, callback) ->
       if name is varName
         callback createGetter, varNotify
       else
         parentFinder name, callback
 
-  createScopeWithFinder = (variableFinder) ->
+  createScope = (variableFinder) ->
     {
       bind: (subName, path, subTemplate) ->
         viewInstance = this


    undefined # prevent stray output

  initialScope = createBoundVariableScope ((varName) -> throw 'unknown variable ' + varName), '_', rootModel, modelNotify

  runTemplate Object.prototype, initialScope, rootTemplate

            newValue = getter()
            if newValue isnt value
              value = newValue
              runTemplate viewInstance, createScope(createBoundVariableFinder(variableFinder, subName, value, notify)), subTemplate

          runTemplate viewInstance, createScope(createBoundVariableFinder(variableFinder, subName, value, notify)), subTemplate

          { clear: clear }

