         var submenu :Menu = IMenuItemRenderer(row).menu;
         var lefting :Boolean = _lefting;
         var upping :Boolean = _upping;
-        if (_fitting != null) {
-            if (submenu.x + submenu.getExplicitOrMeasuredWidth() > _fitting.right) {
-                lefting = true;
-            }
-            if (submenu.y + submenu.getExplicitOrMeasuredHeight() > _fitting.bottom) {
-                upping = true;
-            }
-        }
+        var fitting :Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
+        if (submenu.x + submenu.getExplicitOrMeasuredWidth() > fitting.right) {
+            lefting = true;
+        }
+        if (submenu.y + submenu.getExplicitOrMeasuredHeight() > fitting.bottom) {
+            upping = true;
+        }
+
         if (lefting) {
             submenu.x -= submenu.getExplicitOrMeasuredWidth();
         }
         if (upping) {
-            submenu.y -= (submenu.getExplicitOrMeasuredHeight() - DisplayObject(row).height);
-        }
-        // if we've poped out of the boundaries, just snap it to the lower right corner
-        if (_fitting != null) {
-            if (submenu.x < _fitting.left) {
-                submenu.x = Math.max(
-                        _fitting.right - submenu.getExplicitOrMeasuredWidth(), _fitting.left);
-            }
-            if (submenu.y < _fitting.top) {
-                submenu.y = Math.max(
-                        _fitting.bottom - submenu.getExplicitOrMeasuredHeight(), _fitting.top);
-            }
+            var displayObj :DisplayObject = DisplayObject(row);
+            var rowLoc :Point = displayObj.localToGlobal(new Point(row.x, row.y));
+            submenu.y = rowLoc.y - submenu.getExplicitOrMeasuredHeight() + displayObj.height;
+        }
+
+        // if we've poped out of the boundaries, just snap it to the lower right corner, or upper
+        // if upping, left if lefting
+        if (submenu.x < fitting.left) {
+            submenu.x = lefting ? 0 : Math.max(
+                    fitting.right - submenu.getExplicitOrMeasuredWidth(), fitting.left);
+        }
+        if (submenu.y < fitting.top) {
+            submenu.y = upping ? 0 : Math.max(
+                    fitting.bottom - submenu.getExplicitOrMeasuredHeight(), fitting.top);
         }
     }
 

    }

    protected var _dispatcher :IEventDispatcher;
    protected var _fitting :Rectangle;
    protected var _lefting :Boolean = false;
    protected var _upping :Boolean = false;
}

    {
        _upping = popUpwards;
        _lefting = popLeftwards;
        show(mx, my);
    }

