         return menu;
     }
 
+    /**
+     * The mx.controls.Menu class overrides setting and getting the verticalScrollPolicy
+     * basically setting the verticalScrollPolicy did nothing, and getting it always returned
+     * ScrollPolicy.OFF.  So that's not going to work if we want the menu to scroll. Here we 
+     * reinstate the verticalScrollPolicy setter, and keep a local copy of the value in a 
+     * protected variable _verticalScrollPolicy.
+     * 
+     * This setter is basically a copy of what ScrollControlBase and ListBase do.
+     */
+    override public function set verticalScrollPolicy (value :String) :void 
+    {
+        var newPolicy :String = value.toLowerCase();
+
+        itemsSizeChanged = true;
+
+        if (_verticalScrollPolicy != newPolicy)
+        {
+            _verticalScrollPolicy = newPolicy;
+            dispatchEvent(new Event("verticalScrollPolicyChanged"));
+        }
+
+        invalidateDisplayList();
+    }
+
+    override public function get verticalScrollPolicy () :String
+    {
+        return _verticalScrollPolicy;
+    }
+
     public function CommandMenu ()
     {
         super();

        }

        PopUpUtil.fitInRect(this, _fitting || screen);
    }

    /**

        PopUpUtil.fitInRect(submenu, _fitting || screen);
    }

    override protected function measure () :void
    {
        super.measure();

        if (measuredHeight > this.maxHeight) {
            measuredHeight = this.maxHeight;
        }

        if (verticalScrollPolicy == ScrollPolicy.ON || verticalScrollPolicy == ScrollPolicy.AUTO) {
            if (verticalScrollBar) {
                measuredMinWidth = measuredWidth = measuredWidth + verticalScrollBar.minWidth;
            }
        }

        commitProperties();
    }

    // from List
    override protected function makeListData (data :Object, uid :String, rowNum :int) :BaseListData
    {
