Index: trunk/src/org/openstreetmap/josm/gui/MenuScroller.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 7345)
+++ trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 7346)
@@ -21,4 +21,5 @@
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
 import javax.swing.MenuSelectionManager;
 import javax.swing.Timer;
@@ -83,5 +84,5 @@
 
             if (maxHeight > 0) {
-                result = (maxHeight/itemHeight)-2;
+                result = (maxHeight/itemHeight)-1;
             }
         }
@@ -482,9 +483,12 @@
     private void refreshMenu() {
         if (menuItems != null && menuItems.length > 0) {
+
+            int numOfNonSepItems = getNumberOfNonSeparatorItems(menuItems);
+
             firstIndex = Math.max(topFixedCount, firstIndex);
-            firstIndex = Math.min(menuItems.length - bottomFixedCount - scrollCount, firstIndex);
+            firstIndex = Math.min(numOfNonSepItems - bottomFixedCount - scrollCount, firstIndex);
 
             upItem.setEnabled(firstIndex > topFixedCount);
-            downItem.setEnabled(firstIndex + scrollCount < menuItems.length - bottomFixedCount);
+            downItem.setEnabled(firstIndex + scrollCount < numOfNonSepItems - bottomFixedCount);
 
             menu.removeAll();
@@ -540,6 +544,7 @@
         private void setMenuItems() {
             menuItems = menu.getComponents();
+            int numOfNonSepItems = getNumberOfNonSeparatorItems(menuItems);
             if (keepVisibleIndex >= topFixedCount
-                    && keepVisibleIndex <= menuItems.length - bottomFixedCount
+                    && keepVisibleIndex <= numOfNonSepItems - bottomFixedCount
                     && (keepVisibleIndex > firstIndex + scrollCount
                     || keepVisibleIndex < firstIndex)) {
@@ -547,5 +552,5 @@
                 firstIndex = Math.max(firstIndex, keepVisibleIndex - scrollCount + 1);
             }
-            if (menuItems.length > topFixedCount + scrollCount + bottomFixedCount) {
+            if (numOfNonSepItems > topFixedCount + scrollCount + bottomFixedCount) {
                 refreshMenu();
             }
@@ -639,5 +644,5 @@
         @Override
         public void mouseWheelMoved(MouseWheelEvent mwe) {
-            if (menu.getComponents().length > scrollCount) {
+            if (getNumberOfNonSeparatorItems(menu.getComponents()) > scrollCount) {
                 firstIndex += mwe.getWheelRotation();
                 refreshMenu();
@@ -646,3 +651,13 @@
         }
     }
+
+    private int getNumberOfNonSeparatorItems(Component[] items) {
+        int result = 0;
+        for (Component c : items) {
+            if (!(c instanceof JSeparator)) {
+                result++;
+            }
+        }
+        return result;
+    }
 }
