         if (trackSizeChanges)
         {
             var currentBounds:Rectangle = bounds;
-            currentBounds.width *= scaleX;
-            currentBounds.height *= scaleY;
+            
+            // secretScale is the amount we scaled by to change the width and height
+            var secretScaleX:Number = mx_internal::$scaleX/scaleX;
+            var secretScaleY:Number = mx_internal::$scaleY/scaleY;
+            
+            // take secret scale into account as it's our real width/height
+            currentBounds.width *= secretScaleX;
+            currentBounds.height *= secretScaleY;
 
             if (isNaN(oldWidth))
                 oldWidth = _width = currentBounds.width;

    {
        return _maintainProjectionCenter;
    }

    
    /**
     *  The transform matrix that is used to calculate the component's layout relative to its siblings. This matrix

        
        // Use scaleX/scaleY to change our size since the new size is based
        // on our measured size, which can be different than our actual size.
        super.scaleX = scaleX*(newWidth / measuredWidth);
        super.scaleY = scaleY*(newHeight / measuredHeight);
    }

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