             // A. Bottom Left Placment
             // B. Bottom Right Placement
             // C. Top Right Placement
-            var screen:Rectangle = systemManager.screen;
-
-            if (screen.width > dd.getExplicitOrMeasuredWidth() + point.x &&
-                screen.height < dd.getExplicitOrMeasuredHeight() + point.y)
+            var sm:ISystemManager = systemManager.topLevelSystemManager;
+            var sbRoot:DisplayObject = sm.getSandboxRoot();
+            var screen:Rectangle;
+
+            if (sm != sbRoot)
+            {
+                var request:InterManagerRequest = new InterManagerRequest(InterManagerRequest.SYSTEM_MANAGER_REQUEST, 
+                                        false, false,
+                                        "getVisibleApplicationRect"); 
+                sbRoot.dispatchEvent(request);
+                screen = Rectangle(request.value);
+            }
+            else
+                screen = sm.getVisibleApplicationRect();
+
+            if (screen.right > dd.getExplicitOrMeasuredWidth() + point.x &&
+                screen.bottom < dd.getExplicitOrMeasuredHeight() + point.y)
             {
                 xVal = point.x
                 yVal = point.y - dd.getExplicitOrMeasuredHeight();
                 openPos = 1;
             }
-            else if (screen.width < dd.getExplicitOrMeasuredWidth() + point.x &&
-                     screen.height < dd.getExplicitOrMeasuredHeight() + point.y)
+            else if (screen.right < dd.getExplicitOrMeasuredWidth() + point.x &&
+                     screen.bottom < dd.getExplicitOrMeasuredHeight() + point.y)
             {
                 xVal = point.x - dd.getExplicitOrMeasuredWidth() + downArrowButton.width;
                 yVal = point.y - dd.getExplicitOrMeasuredHeight();
                 openPos = 2;
             }
-            else if (screen.width < dd.getExplicitOrMeasuredWidth() + point.x &&
-                     screen.height > dd.getExplicitOrMeasuredHeight() + point.y)
+            else if (screen.right < dd.getExplicitOrMeasuredWidth() + point.x &&
+                     screen.bottom > dd.getExplicitOrMeasuredHeight() + point.y)
             {
                 xVal = point.x - dd.getExplicitOrMeasuredWidth() + downArrowButton.width;
                 yVal = point.y + unscaledHeight;

                //downArrowButton.enabled = false;
                openPos = 0;

            UIComponentGlobals.layoutManager.validateClient(dd, true);
            dd.move(xVal, yVal);
            Object(dd).setActualSize(dd.getExplicitOrMeasuredWidth(),dd.getExplicitOrMeasuredHeight());

        }

package mx.controls
{

import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
