      */
     protected function invalidateSkinState():void
     {
-        if ((invalidateFlags & STATE_DIRTY) != 0)
+        if (skinStateIsDirty)
             return; // State is already invalidated
 
-        invalidateFlags |= STATE_DIRTY;
-        if (parent && UIComponentGlobals.layoutManager)
-            UIComponentGlobals.layoutManager.invalidateProperties(this);
-    }
-
-    // TODO EGeorgie: we're not supposed to override UIComponent:validateProperties,
-    // but we'll do so here for now, until we figure out how we refactor UIComponent for flex4 
-    /** 
-     *  @private
-     */
-    override public function validateProperties():void
-    {
-        super.validateProperties();
-
-        if ((invalidateFlags & STATE_DIRTY) != 0)
-            commitSkinState( getUpdatedSkinState() );
-        invalidateFlags &= ~STATE_DIRTY;
+        skinStateIsDirty = true;
+        invalidateProperties();
     }
 
     /**

        skinObject.currentState = newState;
    }

    private const STATE_DIRTY:int= 0x00000001;
    
    /**
     *  @private
     *  invalidation flags.
     */
    protected var invalidateFlags:int;  

    //--------------------------------------------------------------------------
    //
    //  Methods - Skin/Behavior lifecycle
    //
    //--------------------------------------------------------------------------
    
    /**
     *  Load the skin for the component. This method should not be called
     *  directly. Typically, subclasses will not need to override this method.
     */
    protected function loadSkin():void
    {
        // Factory
        var skinClassFactory:IFactory = getStyle("skinFactory") as IFactory;        
        
        if (skinClassFactory)
            skinObject = skinClassFactory.newInstance() as Skin;
        
        // Class
        if (!skinObject)

package flex.core
{

import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.utils.*;

import mx.core.IFactory;
import mx.core.UIComponent;
import mx.core.mx_internal;
import mx.events.PropertyChangeEvent;

