 
     return makeNodeVisitorResult()
 
-    # List of patches to apply, across all actions
-    modelPatches = []
-    servicePatches = {}
-    result = undefined
-
-      if layout.action not of actions then throw new Error("Cannot find action '#{layout.action}'")
-
-      childNames = if layout.children? then [0..layout.children.length - 1] else []
-
-      if "update" of actions[layout.action]
-        [result, actionPatches] = GE.sandboxActionCall(model, assets, bindings, actions, layout.action, "update", layout.params, childNames)
-        # Concatenate patches array in place
-        patches.push(actionPatches...) 
-
-      # check which children should be activated
-      if "listActiveChildren" of actions[layout.action]
-        [activeChildren, __] = GE.sandboxActionCall(model, assets, bindings, actions, layout.action, "listActiveChildren", layout.params, childNames)
-      else
-        # By default, all children are considered active
-        activeChildren = childNames
-
-      # Continue with children
-      childSignals = []
-      for childIndex in activeChildren
-        child = layout.children[childIndex]
-        [childSignals[childIndex], childPatches] = GE.runStep(model, assets, actions, child, bindings)
-        # Concatenate patches array in place
-        patches.push(childPatches...) 
-
-      # Handle signals
-      # TODO: if handler not defined, propogate error signals upwards? How to merge them?
-      if "handleSignals" of actions[layout.action]
-        [result, actionPatches] = GE.sandboxActionCall(model, assets, bindings, actions, layout.action, "handleSignals", layout.params, childNames, childSignals)
-        # Concatenate patches array in place
-        patches.push(actionPatches...) 
-    else if "call" of layout
-      GE.sandboxFunctionCall(model, assets, bindings, layout.call, layout.params, bindings)
-    else if "bind" of layout
-      bindingSet = GE.calculateBindingSet(model.data, assets, bindings, layout.bind)
-      for newBindings in bindingSet
-        # Continue with children
-        for child in (layout.children or [])
-          [__, childPatches] = GE.runStep(model, assets, actions, child, newBindings)
-          # Concatenate patches array in place
-          patches.push(childPatches...) 
-    else if "setModel" of layout
-      setModelPatches = GE.handleSetModel(model, assets, bindings, layout.setModel)
-      # Concatenate the array in place
-      patches.push(setModelPatches...) 
-    else
-      GE.logError("Layout item is not understood")
-
-    return [result, patches]
-
   # Parameter names are always strings
-  makeModelEvaluator: (modelData, name) -> 
+  makeModelEvaluator: (constants, name) -> 
     if not name? then throw new Error("Model evaluator requires a name")
 
     [parent, key] = GE.getParentAndKey(modelData, name.split("."))

      set: (x) -> # Noop. Cannot set asset
    }

  makeConstantEvaluator: (value) ->
    return {
      get: -> return value
      set: -> # Noop. Cannot set constant value
    }


  # Compile parameter text into 'executable' object containing get()/set() methods
  # TODO: include piping expressions
  # TODO: insure that parameter constants are only JSON
  compileParameter: (modelData, assets, bindings, layoutParameter) ->
    if _.isString(layoutParameter) and layoutParameter.length > 0
      # It might be an binding to be evaluated
      if layoutParameter[0] == "$"

          layoutParameter = "#{bindingKey}#{layoutParameter.slice(endChar)}" 
        else
          # WRONG: This is a hack, but will not work for more complex expressions
          return GE.makeConstantEvaluator(constants, bindingKey)

      if layoutParameter[0] == "@"
        # The argument is optional
        # TODO: include multiple arguments? As list or map?
        [matcherName, argument] = layoutParameter.slice(1).split(":")
        if not matcherName of GE.parameterEvaluators
          throw new Error("Cannot handle evaluator #{matcherName}")
        return GE.parameterEvaluators[matcherName](constants, argument)

    # Return as a constant value
    return GE.makeConstantEvaluator(layoutParameter)
