         newClass.extend
           className: json.className
           classHierarchy: json.className + " " + superclass.classHierarchy
-      newClass.genericIfClassIs = json.className  if json.genericSupport
+      if json.genericSupport
+        newClass.genericIfClassIs = json.className 
+        ###
+             Create a copy of the JSON that doesn't include the reserved keys
+             (which go on the class). We use the remaining JSON values as
+             "inherited" on the class' prototype for use by render(). 
+        ###
       inherited = copyExcludingKeys(json,
         className: true
         genericSupport: true

        inherited: inherited
        tag: json.tag
    else
      newClass.className = `undefined`
      newClass::inherited = null
    newClass

  _checkForElementInsertion: (event) ->
    callbacksReady = []
    i = 0
    while i < Control._elementInsertionCallbacks.length
      element = Control._elementInsertionCallbacks[i].element
      if isElementInDocument(element)
        callbacksReady = callbacksReady.concat(Control._elementInsertionCallbacks[i])
        Control._elementInsertionCallbacks.splice i, 1
      else
        i++
    Control._stopListeningForElementInsertion()  if Control._elementInsertionCallbacks.length is 0
    i = 0
    while i < callbacksReady.length

      throw "Unable to find a class called \"" + value + "\"."  unless classFn
    classFn

    # Return true if the given element is a control.
  isControl: (element) ->
    Control(element).control() isnt `undefined`

  ###
  Return a function that applies another function to each control in a
  jQuery array.
  
  If the inner function returns a defined value, then the function is
  assumed to be a property getter, and that result is return immediately.
  Otherwise, "this" is returned to permit chaining.
  ###
  iterator: (fn) ->
    ->
      args = arguments
