         var value:uint = resizeModeToUINT(stringValue); 
         if (_resizeMode == value)
             return;
-            
+
+        // If old value was scale, reset it            
+        if (_resizeMode == _SCALE_UINT)
+            setStretchXY(1, 1);
+
         _resizeMode = value;
         
-        if (_resizeMode == _SCALE_UINT)
-        {
-            super.scaleX = 1; 
-            super.scaleY = 1;
-        }
-
         // We need the measured values and _resizeMode affects
         // our measure (skipMeasure implementation checks resizeMode) so
         // we need to invalidate the size.
         invalidateSize();
-
-        // TODO EGeorgie: can we directly call setActualSize instead?
-        invalidateParentSizeAndDisplayList();
-    }
-
-    override protected function nonDeltaLayoutMatrix():Matrix
-    {
-        if(hasDeltaIdentityTransform)
-        	return null; 
-
-        if (resizeMode == ResizeMode.SCALE)
-        {
-            // Lose scale and skew:
-            return MatrixUtil.composeMatrix(x, y, 1, 1, rotation,
-                        transformX, transformY);
-        } 
         
-        return super.nonDeltaLayoutMatrix();
-
-    }
-    
-    /**
-     *  @private
-     */
-    override public function setActualSize(w:Number, h:Number):void
-    {
-        if (_resizeMode == _SCALE_UINT)
-        {
-            // TODO EGeorgie: make sure we don't invalidate again while
-            // setting the scale!
-            if (measuredWidth != 0)
-            {
-                $scaleX = w / measuredWidth;
-                w = measuredWidth;
-            }
-            if (measuredHeight != 0)
-            {
-                $scaleY = h / measuredHeight;
-                h = measuredHeight;
-            }
-        }
-
-        super.setActualSize(w, h);
-    }
-    
-    /**
-     *  The scaling factor of the container in the X direction. 
-     * 
-     *  <p>If <code>resizeMode</code> is set to <code>ResizeMode.SCALE</code>, 
-     *  reading this property always returns 1.0, and setting it does nothing.</p>
-     *
-     *  <p>If <code>resizeMode</code> is set to anything other than <code>ResizeMode.SCALE</code>, 
-     *  reading this property returns the current scaling factor.</p>
-     *
-     *  @copy mx.core.UIComponent#scaleX
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    override public function get scaleX():Number
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return 1;
-
-        return super.scaleX;
-    }
-
-    /**
-     *  @private
-     */    
-    override public function set scaleX(value:Number):void
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return;
-
-        super.scaleX = value;
-    }
-    
-    /**
-     *  The scaling factor of the container in the Y direction. 
-     * 
-     *  <p>If <code>resizeMode</code> is set to <code>ResizeMode.SCALE</code>, 
-     *  reading this property always returns 1.0, and setting it does nothing.</p>
-     *
-     *  <p>If <code>resizeMode</code> is set to anything other than <code>ResizeMode.SCALE</code>, 
-     *  reading this property returns the current scaling factor.</p>
-     *
-     *  @copy mx.core.UIComponent#scaleY
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    override public function get scaleY():Number
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return 1;
-
-        return super.scaleY;
-    }
-
-    /**
-     *  @private 
-     */    
-    override public function set scaleY(value:Number):void
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return;
-
-        super.scaleY = value;
-    }
-
-    [Bindable("widthChanged")]
-    [Inspectable(category="General")]
-    [PercentProxy("percentWidth")]
-    /**
-     *  The width of the container, in pixels. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    override public function get width():Number
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return super.width * $scaleX;
-
-        return super.width;
-    }
-    
-    [Bindable("heightChanged")]
-    [Inspectable(category="General")]
-    [PercentProxy("percentHeight")]
-    /**
-     *  The height of the container, in pixels. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    override public function get height():Number
-    {
-        if (_resizeMode == _SCALE_UINT)
-            return super.height * $scaleY;
-
-        return super.height;
+        // Invalidate the display list so that our validateMatrix() gets called.
+        invalidateDisplayList();
     }
     
     /**

    {
        if (_layout && layoutInvalidateSizeFlag)
        {
            super.measure();
        
            layoutInvalidateSizeFlag = false;

        {
            unscaledWidth = measuredWidth;
            unscaledHeight = measuredHeight;
        }

        super.updateDisplayList(unscaledWidth, unscaledHeight);

		if (maskChanged)
