Index: trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 15844)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 15845)
@@ -49,4 +49,7 @@
         this.tabpane = tabpane;
         this.subSettingMap = tabpane != null ? new HashMap<>() : null;
+        if (tabpane != null) {
+            tabpane.addMouseWheelListener(new PreferenceTabbedPane.WheelListener(tabpane));
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 15844)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 15845)
@@ -79,5 +79,5 @@
  * @author imi
  */
-public final class PreferenceTabbedPane extends JTabbedPane implements MouseWheelListener, ExpertModeChangeListener, ChangeListener {
+public final class PreferenceTabbedPane extends JTabbedPane implements ExpertModeChangeListener, ChangeListener {
 
     private final class PluginDownloadAfterTask implements Runnable {
@@ -446,5 +446,5 @@
     public PreferenceTabbedPane() {
         super(JTabbedPane.LEFT, JTabbedPane.SCROLL_TAB_LAYOUT);
-        super.addMouseWheelListener(this);
+        super.addMouseWheelListener(new WheelListener(this));
         super.getModel().addChangeListener(this);
         ExpertToggleAction.addExpertModeChangeListener(this);
@@ -578,19 +578,24 @@
      * tab strip and scrolls one tab/down or up, selecting it immediately.
      */
-    @Override
-    public void mouseWheelMoved(MouseWheelEvent wev) {
-        // Ensure the cursor is over the tab strip
-        if (super.indexAtLocation(wev.getPoint().x, wev.getPoint().y) < 0)
-            return;
-
-        // Get currently selected tab
-        int newTab = super.getSelectedIndex() + wev.getWheelRotation();
-
-        // Ensure the new tab index is sound
-        newTab = newTab < 0 ? 0 : newTab;
-        newTab = newTab >= super.getTabCount() ? super.getTabCount() - 1 : newTab;
-
-        // select new tab
-        super.setSelectedIndex(newTab);
+    static final class WheelListener implements MouseWheelListener {
+
+        final JTabbedPane tabbedPane;
+
+        WheelListener(JTabbedPane tabbedPane) {
+            this.tabbedPane = tabbedPane;
+        }
+
+        @Override
+        public void mouseWheelMoved(MouseWheelEvent wev) {
+            // Ensure the cursor is over the tab strip
+            if (tabbedPane.indexAtLocation(wev.getPoint().x, wev.getPoint().y) < 0)
+                return;
+
+            // Get currently selected tab && ensure the new tab index is sound
+            int newTab = Utils.clamp(tabbedPane.getSelectedIndex() + wev.getWheelRotation(),
+                    0, tabbedPane.getTabCount() - 1);
+
+            tabbedPane.setSelectedIndex(newTab);
+        }
     }
 
