Index: trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java	(revision 5663)
+++ trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java	(revision 5664)
@@ -70,14 +70,24 @@
     private Map_Rectifier_WMSmenuAction rectaction = new Map_Rectifier_WMSmenuAction();
     private int offsPos;
+    private MenuScroller menuScroller;
 
     public ImageryMenu() {
         super(tr("Imagery"));
+        setupMenuScroller();
+        MapView.addLayerChangeListener(this);
+    }
+    
+    private final void setupMenuScroller() {
         int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
         int menuItemHeight = singleOffset.getPreferredSize().height;
-        MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
-        MapView.addLayerChangeListener(this);
+        menuScroller = MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
     }
 
     public void refreshImageryMenu() {
+        if (menuScroller != null) {
+            menuScroller.dispose();
+            menuScroller = null;
+        }
+        setupMenuScroller();
         removeAll();
 
Index: trunk/src/org/openstreetmap/josm/gui/MenuScroller.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 5663)
+++ trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 5664)
@@ -1,4 +1,4 @@
 /**
- * @(#)MenuScroller.java	1.4.0 14/09/10
+ * @(#)MenuScroller.java    1.5.0 04/02/12
  */
 package org.openstreetmap.josm.gui;
@@ -10,4 +10,7 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+
 import javax.swing.Icon;
 import javax.swing.JComponent;
@@ -15,5 +18,4 @@
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
-import javax.swing.JSeparator;
 import javax.swing.MenuSelectionManager;
 import javax.swing.Timer;
@@ -41,4 +43,5 @@
     private MenuScrollItem downItem;
     private final MenuScrollListener menuListener = new MenuScrollListener();
+    private final MouseWheelListener mouseWheelListener = new MouseScrollListener();
     private int scrollCount;
     private int interval;
@@ -293,4 +296,5 @@
         this.menu = menu;
         menu.addPopupMenuListener(menuListener);
+        menu.addMouseWheelListener(mouseWheelListener);
     }
 
@@ -419,4 +423,6 @@
         if (menu != null) {
             menu.removePopupMenuListener(menuListener);
+            menu.removeMouseWheelListener(mouseWheelListener);
+            menu.setPreferredSize(null);
             menu = null;
         }
@@ -448,5 +454,5 @@
             }
             if (topFixedCount > 0) {
-                menu.add(new JSeparator());
+                menu.addSeparator();
             }
 
@@ -458,5 +464,5 @@
 
             if (bottomFixedCount > 0) {
-                menu.add(new JSeparator());
+                menu.addSeparator();
             }
             for (int i = menuItems.length - bottomFixedCount; i < menuItems.length; i++) {
@@ -475,5 +481,5 @@
         }
     }
-
+    
     private class MenuScrollListener implements PopupMenuListener {
 
@@ -590,3 +596,13 @@
         }
     }
+    
+    private class MouseScrollListener implements MouseWheelListener {
+        public void mouseWheelMoved(MouseWheelEvent mwe) {
+            if (menu.getComponents().length > scrollCount) {
+                firstIndex += mwe.getWheelRotation();
+                refreshMenu();
+            }
+            mwe.consume(); // (Comment 16, Huw)
+        }
+    }
 }
