Index: /trunk/src/org/openstreetmap/josm/gui/MapMover.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 9823)
+++ /trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 9824)
@@ -21,7 +21,12 @@
 import javax.swing.KeyStroke;
 
+import org.openstreetmap.gui.jmapviewer.JMapViewer;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -34,4 +39,27 @@
  */
 public class MapMover extends MouseAdapter implements MouseMotionListener, MouseWheelListener, Destroyable {
+
+    public static final BooleanProperty PROP_ZOOM_REVERSE_WHEEL = new BooleanProperty("zoom.reverse-wheel", false);
+
+    private static final JMapViewerUpdater jMapViewerUpdater = new JMapViewerUpdater();
+
+    private static class JMapViewerUpdater implements PreferenceChangedListener {
+
+        JMapViewerUpdater() {
+            Main.pref.addPreferenceChangeListener(this);
+            updateJMapViewer();
+        }
+
+        @Override
+        public void preferenceChanged(PreferenceChangeEvent e) {
+            if (MapMover.PROP_ZOOM_REVERSE_WHEEL.getKey().equals(e.getKey())) {
+                updateJMapViewer();
+            }
+        }
+
+        private void updateJMapViewer() {
+            JMapViewer.zoomReverseWheel = MapMover.PROP_ZOOM_REVERSE_WHEEL.get();
+        }
+    }
 
     private final class ZoomerAction extends AbstractAction {
@@ -214,5 +242,6 @@
     @Override
     public void mouseWheelMoved(MouseWheelEvent e) {
-        nc.zoomManyTimes(e.getX(), e.getY(), e.getWheelRotation());
+        int rotation = PROP_ZOOM_REVERSE_WHEEL.get() ? -e.getWheelRotation() : e.getWheelRotation();
+        nc.zoomManyTimes(e.getX(), e.getY(), rotation);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 9823)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 9824)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.gui.MapMover;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
@@ -62,4 +63,5 @@
     private final JCheckBox isoDates = new JCheckBox(tr("Display ISO dates"));
     private final JCheckBox nativeFileChoosers = new JCheckBox(tr("Use native file choosers (nicer, but do not support file filters)"));
+    private final JCheckBox zoomReverseWheel = new JCheckBox(tr("Reverse zoom with mouse wheel"));
 
     @Override
@@ -141,4 +143,9 @@
         panel.add(nativeFileChoosers, GBC.eop().insets(20, 0, 0, 0));
 
+        zoomReverseWheel.setToolTipText(
+                tr("Check if you feel opposite direction more convenient"));
+        zoomReverseWheel.setSelected(MapMover.PROP_ZOOM_REVERSE_WHEEL.get());
+        panel.add(zoomReverseWheel, GBC.eop().insets(20, 0, 0, 0));
+
         panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
 
@@ -162,4 +169,5 @@
         Main.pref.put(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
         Main.pref.put(FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.getKey(), nativeFileChoosers.isSelected());
+        Main.pref.put(MapMover.PROP_ZOOM_REVERSE_WHEEL.getKey(), zoomReverseWheel.isSelected());
         mod |= Main.pref.put("laf", ((LookAndFeelInfo) lafCombo.getSelectedItem()).getClassName());
         return mod;
