         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;

    protected function initAdvancedLayoutFeatures():void
    {
        var features:AdvancedLayoutFeatures = new AdvancedLayoutFeatures();

        features.layoutScaleX = scaleX;
        features.layoutScaleY = scaleY;

     */
    override public function get scaleY():Number
    {
        // if it's been set, layoutFeatures won't be null.  Otherwise, return 1 as
        // super.scaleX might be some other value since we change the width/height 
        // through scaling
        return ((_layoutFeatures == null)? 1:_layoutFeatures.layoutScaleY);
    }
    
    override public function set scaleY(value:Number):void
    {
        if (value == scaleY)
            return;
        
        if(_layoutFeatures == null) initAdvancedLayoutFeatures();
        var prevValue:Number = _layoutFeatures.layoutScaleY;
        if (prevValue == value)
            return;
            
        hasDeltaIdentityTransform = false;

        // trace("set scaleY:" + this + "value = " + value); 
        
        _layoutFeatures.layoutScaleY = value;
        invalidateTransform();

        // If we're not compatible with Flex3 (measuredWidth is pre-scale always)
        // and scaleY is changing we need to invalidate parent size and display list
        // since we are not going to detect a change in measured sizes during measure.
        invalidateParentSizeAndDisplayList();
    }
    
    /**
     *  The actual scaleY of the component.  Because scaling is used
     *  to resize the component, this is considerred an internal 
     *  implementation detail, whereas scaleY is the user-set scale
     *  of the component.
     *
     *  @private
     */
    mx_internal function get $scaleY():Number
    {
        return super.scaleY;
    }

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