         if (yShow == null) {
             yShow = DisplayObject(Application.application).mouseY;
         }
+
         super.show(xShow, yShow);
+
+        // reposition now that we know our size
+        if (_lefting) {
+            y = x - getExplicitOrMeasuredWidth();
+        }
+        if (_upping) {
+            y = y - getExplicitOrMeasuredHeight();
+        }
     }
 
     /**

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

        }

        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
