         }
         
         var popUpAsDisplayObject:DisplayObject = popUp as DisplayObject;
-                
-        var globalTL:Point = matrix.transformPoint(registrationPoint);
-        registrationPoint.y += popUpAsDisplayObject.height;
-        var globalBL:Point = matrix.transformPoint(registrationPoint);
-        registrationPoint.x += popUpAsDisplayObject.width;
-        var globalBR:Point = matrix.transformPoint(registrationPoint);
-        registrationPoint.y -= popUpAsDisplayObject.height;
-        var globalTR:Point = matrix.transformPoint(registrationPoint);
-        registrationPoint.x -= popUpAsDisplayObject.width;
-        
-        bounds.left = Math.min(globalTL.x, globalBL.x, globalBR.x, globalTR.x);
-        bounds.right = Math.max(globalTL.x, globalBL.x, globalBR.x, globalTR.x);
-        bounds.top = Math.min(globalTL.y, globalBL.y, globalBR.y, globalTR.y);
-        bounds.bottom = Math.max(globalTL.y, globalBL.y, globalBR.y, globalTR.y);
+        
+        var topLeft:Point = registrationPoint.clone();
+        var size:Point = MatrixUtil.transformBounds(popUpAsDisplayObject.width, popUpAsDisplayObject.height, matrix, topLeft);
+        bounds.left = topLeft.x;
+        bounds.top = topLeft.y;
+        bounds.width = size.x;
+        bounds.height = size.y;
     }
     
     /**

        
        if (layoutDirection == LayoutDirection.RTL)
            regPoint.x += popUpBounds.width;
        return MatrixUtil.getConcatenatedComputedMatrix(this).transformPoint(regPoint);
    }
    
    //--------------------------------------------------------------------------

        if (!popUpIsDisplayed)
            return;
                
        var m:Matrix = MatrixUtil.getConcatenatedMatrix(this, true /*excludingRootSprite*/);
         
        // Set the dimensions explicitly because UIComponents always set themselves to their
        // measured / explicit dimensions if they are parented by the SystemManager. 
