     //----------------------------------
     //  states
     //----------------------------------
+    
+    private var _states:Array /* of State */ = [];
 
     [Inspectable(arrayType="mx.states.State")]
     [ArrayElementType("mx.states.State")]
-
+    
     /**
      *  The view states that are defined for this component.
      *  You can specify the <code>states</code> property only on the root
      *  of the application or on the root tag of an MXML component.
      *  The compiler generates an error if you specify it on any other control.
      */
-    public var states:Array /* of State */ = [];
-
+    public function get states():Array
+    {
+        return _states;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set states(value:Array):void
+    {
+        _states = value;
+    }
+    
     //----------------------------------
     //  transitions
     //----------------------------------

        return !stateName || stateName == "";
    }

    /**
     *  @private
     *  Commit a pending current state change.

            if (!indices)
            {
                parentDocument[id] = this;
                
                // TODO: Determine if we want "idAssigned" to be an event or
                // callback function. If this is changed, it alse needs to be
                // updated in:
                // modules/compiler/src/java/flex2/compiler/mxml/rep/init/ValueInitializer.java
                var e:PropertyChangeEvent = new PropertyChangeEvent("idAssigned");
                e.source = parentDocument;
                e.property = id;
                e.oldValue = null;
                e.newValue = this;
                parentDocument.dispatchEvent(e);
            }
            else
            {
