 import flexlib.controls.ScrollableArrowMenu;
 
 import com.threerings.util.CommandEvent;
+
+import com.threerings.flex.PopUpUtil;
 
 import com.threerings.flex.menuClasses.CommandMenuItemRenderer;
 import com.threerings.flex.menuClasses.CommandListData;

    }

    /**
     * Shows the menu at the current mouse coordinates, popping upwards or leftwards as necessary
     * to fit the menu into the supplied bounds.
     */
    public function popUpIn (bounds :Rectangle) :void
    {
        var mx :int = DisplayObject(Application.application).mouseX;
        var my :int = DisplayObject(Application.application).mouseY;

        // show it at zero zero so that it is layed out and measured
        show(0, 0);
        _fitting = bounds;

        // then determine if we need to point it leftwards or upwards
        if (mx + getExplicitOrMeasuredWidth() > bounds.right) {
            mx -= getExplicitOrMeasuredWidth();
        }
        if (mx < bounds.left) {
            mx = Math.max(bounds.right - getExplicitOrMeasuredWidth(), bounds.left);
        }
        // if we've poped out of the boundaries, just snap it to the lower right corner
        if (my + getExplicitOrMeasuredHeight() > bounds.bottom) {
            my -= getExplicitOrMeasuredHeight();
        }
        if (my < bounds.top) {
            my = Math.max(bounds.bottom - getExplicitOrMeasuredHeight(), bounds.top);
        }

        // finally move it to the correct position
        x = mx;
        y = my;
    }

    /**
     * Shows the menu at the specified mouse coordinates.
     */
    public function popUpAt (mx :int, my :int, popUpwards :Boolean = false,

        if (_upping) {
            y = y - getExplicitOrMeasuredHeight();
        }

        PopUpUtil.fit(this);
    }

    /**
