             y = r.y - getExplicitOrMeasuredHeight();
 
         } else {
-            // simply position it below the trigger
+            // position it below the trigger
             show(r.x, r.y + r.height);
         }
+    }
+
+    /**
+     * Just like our superclass's show(), except that when invoked
+     * with no args, causes the menu to show at the current mouse location
+     * instead of the top-left corner of the application.
+     */
+    override public function show (xShow :Object = null, yShow :Object = null) :void
+    {
+        if (xShow == null) {
+            xShow = DisplayObject(Application.application).mouseX;
+        }
+        if (yShow == null) {
+            yShow = DisplayObject(Application.application).mouseY;
+        }
+        super.show(xShow, yShow);
     }
 
     /**

    /**
     * Factory method to create a command menu.
     *
     * @param parent The parent of this menu.
     * @param items an array of menu items.
     */
    public static function createMenu (
        parent :DisplayObjectContainer, items :Array) :CommandMenu
    {
        var menu :CommandMenu = new CommandMenu();
        menu.tabEnabled = false;
        menu.showRoot = true;
        Menu.popUpMenu(menu, parent, items);
        return menu;
    }



import mx.controls.Menu;
import mx.core.mx_internal;
import mx.core.Application;
import mx.core.ScrollPolicy;
import mx.events.MenuEvent;

import com.dougmccune.controls.ScrollableArrowMenu;

import com.threerings.util.CommandEvent;

use namespace mx_internal;

/**
 * A pretty standard menu that can submit CommandEvents if menu items
