         }
 
         super.openSubMenu(row);
+
+        // if we're lefting, upping or fitting make sure our submenu does so as well
+        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;
+            }
+        }
+        if (lefting) {
+            submenu.x -= submenu.getExplicitOrMeasuredWidth();
+        }
+        if (upping) {
+            submenu.y -= (submenu.getExplicitOrMeasuredHeight() - DisplayObject(row).height);
+        }
     }
 
     // from List

        if (yShow == null) {
            yShow = DisplayObject(Application.application).mouseY;
        }
        super.show(xShow, yShow);
    }

    /**

 *
 * See "Defining menu structure and data" in the Flex manual for the full list.
 */ 
public class CommandMenu extends Menu
{
    /**
     * Factory method to create a command menu.
