     @_elementChanged true, true, true
     null
 
-  # set each property in propertySet if it is a legitimate property; otherwise it is ignored
-  setProperties: (propertySet) ->
-    metaProperties = @metaProperties
-    for property, value of propertySet
-      mp = metaProperties[property]
-      unless mp.virtual
-        @[setterName] value if setterName = mp?.setterName
-
-    propertySet
-
-  # set all properties, use propertySet values if present, otherwise use defaults
-  # TODO: this sets @parent and @children, it shouldn't, but they aren't virtual...
-  # TODO: if this is used much, it would be faster to have a concreteMetaProperties array so we don't have to test mp.virtual
-  #   this "concreteMetaProperties" array would not include parent or children
-  replaceProperties: (propertySet) ->
-    metaProperties = @metaProperties
-    for property, mp of metaProperties when !mp.virtual
-      externalName = mp.externalName
-      @[mp.setterName]? if propertySet.hasOwnProperty(externalName)
-        propertySet[externalName]
-      else
-        mp.defaultValue
-    propertySet
-
-  setProperty: (property, value) ->
-    if mp = @metaProperties[property]
-      @[mp.setterName]? value
-
-  # reset property to its default
-  resetProperty: (property) ->
-    if mp = @metaProperties[property]
-      @[mp.setterName]? mp.defaultValue
-
-  # used by Animator / Foundation.Transaction to normalize to/from values
-  preprocessProperties: (propertySet) ->
-    metaProperties = @metaProperties
-    for property, value of propertySet when mp = metaProperties[property]
-      propertySet[property] = mp.preprocessor value, @[mp.internalName]
-    propertySet
-
-  getPendingPropertyValues: (propertyNames) ->
-    ret = {}
-    for property in propertyNames when metaProp = @metaProperties[property]
-      ret[property] = @_pendingState[metaProp.internalName]
-    ret
-
-  getPropertyValues: (propertyNames) ->
-    ret = {}
-    for property in propertyNames when metaProp = @metaProperties[property]
-      ret[property] = @[metaProp.internalName]
-    ret
-
   _getChangingStateKeys: ->
     k for k, v of @_pendingState when !shallowPropsEq @[k], @_pendingState[k]
 

          @[prop] = v
    else
      mergeInto @, @_pendingState

  ######################
  #
  ######################
  @concreteProperty
    animators:
      default: null
      preprocess: (v) ->
        processed = null
        addProp = (prop, options) ->
          processed ||= {}
          processed["_" + prop] = new EasingPersistantAnimator BaseObject._propSetterName(prop), options

        if isString v
          addProp prop for prop in v.match /[a-z]+/gi
        else
          addProp prop, options for prop, options of v

        processed

  ######################
  # Public
  ######################
  constructor: (options = blankOptions)->
    super

    @_pendingState = {}
    @__stateChangeQueued = false

    @__layoutPropertiesChanged = false
    @__drawAreaChanged = true
    @__drawPropertiesChanged = true

    @_initProperties options


        preprocessAndValidate function passed to the setter
        animations

  Virtual property getter-function-only (if the 'options' passed in is actually a function)

    If you pass in a function only when defining a virtual property, you are setting the getter.
    Thus you can define a virtual property with just a getter.

  Virtual vs Concrete properties:

    * Virutal props don't have default values
