                 measuredMinWidth = 0;
                 measuredMinHeight = 0;
             }
-        }
+
+            // Make sure that we invalidate the display list if the measured
+            // size changes, as we always size our content at the measured size when in scale mode.
+            if (_resizeMode == _SCALE_UINT && (measuredWidth != oldMeasuredWidth || measuredHeight != oldMeasuredHeight))
+                invalidateDisplayList();
+        }
+    }
+
+    /**
+     *  @private
+     */
+    override protected function validateMatrix():void
+    {
+        // Update the stretchXY before the matrix gets validates
+        if (_resizeMode == _SCALE_UINT)
+        {
+            var stretchX:Number = 1;
+            var stretchY:Number = 1;            
+
+            if (measuredWidth != 0)
+                stretchX = width / measuredWidth;
+            if (measuredHeight != 0)
+                stretchY = height / measuredHeight;
+
+            setStretchXY(stretchX, stretchY);
+        }
+        super.validateMatrix();
     }
 
     /**

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

        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;
        
        // We need the measured values and _resizeMode affects
        // our measure (skipMeasure implementation checks resizeMode) so
        // we need to invalidate the size.
        invalidateSize();
        
        // Invalidate the display list so that our validateMatrix() gets called.
        invalidateDisplayList();
    }
    
    /**
