             oldScaleY = scaleY;
         }
         
-        // FIXME(hmuller) - if this component's layout has changed, or its parent 
-        // layout has changed, or if its layout no longer matches one of
-        // its non-UIComponent children, then we need to validateLayoutDirection().
-        if (true)
-        {
-            invalidateLayoutDirection();
+        if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_4_0)
+        {
+            // If this component's layout direction has changed, or its parent's layoutDirection
+            // has changed, then call invalidateLayoutDirection().
+            
+            const thisLayoutDirection:String = layoutDirection;
+            const parentUIC:UIComponent = parent as UIComponent;
+            
+            if ((oldLayoutDirection != layoutDirection) ||
+                (parentUIC && (parentUIC.layoutDirection != parentUIC.oldLayoutDirection)))
+                invalidateLayoutDirection();
         }
         
         // Typically state changes occur immediately, but during

      
        //  If this is a leaf node, then we're done.  If not, the styleChanged() machinery
        //  (via commitProperties()) will deal with UIComponent children.   We have to 
        //  deal with other ILayoutDirection children, like GraphicElements, here.

        if (!(this is IVisualElementContainer))
            return;

    //----------------------------------
    
    /**
     *  Checked at commitProperties() time to see if our layoutDirection has changed,
     *  or our parent's layoutDirection has changed.  This variable is reset after the 
     *  entire validateProperties() phase is complete so that it's possible for a child
     *  to check if its parent's layoutDirection has changed, see commitProperties().
     *  The flag is cleared in validateDisplayList().
     */
    private var oldLayoutDirection:String = null;
    
    /**
     *  @inheritDoc
     */
    public function get layoutDirection():String
    {
