     //--------------------------------------------------------------------------
 
     //----------------------------------
-	//  basedOn
-    //----------------------------------
-
-	[Inspectable(category="General")]
-
-	/**
-	 *  The name of the view state upon which this view state is based, or
-	 *  <code>null</code> if this view state is not based on a named view state.
-	 *  If this value is <code>null</code>, the view state is based on a root
-	 *  state that consists of the properties, styles, event handlers, and
-	 *  children that you define for a component without using a State class.
-	 *
-	 *  @default null
-	 */
-	public var basedOn:String;
-
-    //----------------------------------
-	//  name
-    //----------------------------------
-
-	[Inspectable(category="General")]
+    //  basedOn
+    //----------------------------------
+
+    [Inspectable(category="General")]
+
+    /**
+     *  The name of the view state upon which this view state is based, or
+     *  <code>null</code> if this view state is not based on a named view state.
+     *  If this value is <code>null</code>, the view state is based on a root
+     *  state that consists of the properties, styles, event handlers, and
+     *  children that you define for a component without using a State class.
+     *
+     *  @default null
+     */
+    public var basedOn:String;
+
+    //----------------------------------
+    //  name
+    //----------------------------------
+
+    [Inspectable(category="General")]
 
     /**
      *  The name of the view state.
-	 *  State names must be unique for a given component.
-	 *  This property must be set.
-     */
-	public var name:String;
-
-    //----------------------------------
-	//  overrides
-    //----------------------------------
-
-	[ArrayElementType("mx.states.IOverride")]
-	[Inspectable(category="General")]
-
-	/**
-	 *  The overrides for this view state, as an Array of objects that implement
-	 *  the IOverride interface. These overrides are applied in order when the
-	 *  state is entered, and removed in reverse order when the state is exited.
-	 *
-	 *  <p>The following Flex classes implement the IOverride interface and let you
-	 *  define the view state characteristics:</p>
-	 *  <ul>
-	 * 		<li>AddChild</li>
-	 * 		<li>RemoveChild</li>
-	 * 		<li>SetEventHandler</li>
-	 * 		<li>SetProperty</li>
-	 * 		<li>SetStyle</li>
-	 *  </ul>
-	 *
-	 *  <p>The <code>overrides</code> property is the default property of the
-	 *  State class. You can omit the <code>&lt;mx:overrides&gt;</code> tag
-	 *  and its child <code>&lt;mx:Array&gt;</code>tag if you use MXML tag
-	 *  syntax to define the overrides.</p>
-	 */
-	public var overrides:Array /* of IOverride */ = [];
-
+     *  State names must be unique for a given component.
+     *  This property must be set.
+     */
+    public var name:String;
+
+    //----------------------------------
+    //  overrides
+    //----------------------------------
+
+    [ArrayElementType("mx.states.IOverride")]
+    [Inspectable(category="General")]
+
+    /**
+     *  The overrides for this view state, as an Array of objects that implement
+     *  the IOverride interface. These overrides are applied in order when the
+     *  state is entered, and removed in reverse order when the state is exited.
+     *
+     *  <p>The following Flex classes implement the IOverride interface and let you
+     *  define the view state characteristics:</p>
+     *  <ul>
+     *      <li>AddChild</li>
+     *      <li>RemoveChild</li>
+     *      <li>SetEventHandler</li>
+     *      <li>SetProperty</li>
+     *      <li>SetStyle</li>
+     *  </ul>
+     *
+     *  <p>The <code>overrides</code> property is the default property of the
+     *  State class. You can omit the <code>&lt;mx:overrides&gt;</code> tag
+     *  and its child <code>&lt;mx:Array&gt;</code>tag if you use MXML tag
+     *  syntax to define the overrides.</p>
+     */
+    public var overrides:Array /* of IOverride */ = [];
+
+    //----------------------------------
+    //  stateGroups
+    //----------------------------------
+
+    [ArrayElementType("String")]
+    [Inspectable(category="General")]
+
+    /**
+     *  The state groups that this view state belongs to as an array of String.
+     */
+    public var stateGroups:Array /* of String */ = [];
+    
     //--------------------------------------------------------------------------
     //
     //  Methods

     */
    mx_internal function initialize():void
    {
    	if (!initialized)
    	{
    		initialized = true;
    		for (var i:int = 0; i < overrides.length; i++)
    		{
    			IOverride(overrides[i]).initialize();
    		}
    	}
    }

    /**
     *  @private
     *  Dispatches the "enterState" event.
     */
	mx_internal function dispatchEnterState():void
	{
		dispatchEvent(new FlexEvent(FlexEvent.ENTER_STATE));
	}

    /**
     *  @private
     *  Dispatches the "exitState" event.
     */
	mx_internal function dispatchExitState():void
	{
		dispatchEvent(new FlexEvent(FlexEvent.EXIT_STATE));
	}
}

}

    //
    //--------------------------------------------------------------------------

    /**
     *  Constructor.
     */
    public function State(properties:Object=null)
    {
        super();
        
        // Initialize from object if provided.
        for (var p:String in properties)
        {
            this[p] = properties[p];
        }
    }

    //--------------------------------------------------------------------------
    //
