Index: trunk/src/org/openstreetmap/josm/gui/MapMover.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 1938)
+++ trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 1939)
@@ -1,4 +1,6 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.gui;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Cursor;
@@ -15,8 +17,9 @@
 import javax.swing.JComponent;
 import javax.swing.JPanel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.tools.PlatformHookOsx;
 import org.openstreetmap.josm.tools.Shortcut;
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import org.openstreetmap.josm.data.coor.EastNorth;
 
 /**
@@ -135,6 +138,10 @@
     @Override public void mousePressed(MouseEvent e) {
         int offMask = MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON2_DOWN_MASK;
-        if (e.getButton() == MouseEvent.BUTTON3 && (e.getModifiersEx() & offMask) == 0)
+        int macMouseMask = MouseEvent.CTRL_DOWN_MASK | MouseEvent.BUTTON1_DOWN_MASK;
+        if (e.getButton() == MouseEvent.BUTTON3 && (e.getModifiersEx() & offMask) == 0) {
             startMovement(e);
+        } else if (isPlatformOsx() && e.getModifiersEx() == macMouseMask) {
+            startMovement(e);
+        }
     }
 
@@ -143,6 +150,9 @@
      */
     @Override public void mouseReleased(MouseEvent e) {
-        if (e.getButton() == MouseEvent.BUTTON3)
+        if (e.getButton() == MouseEvent.BUTTON3) {
             endMovement();
+        } else if (isPlatformOsx() && e.getButton() == MouseEvent.BUTTON1) {
+            endMovement();
+        }
     }
 
@@ -185,6 +195,34 @@
 
     /**
-     * Does nothing. Only to satisfy MouseMotionListener
-     */
-    public void mouseMoved(MouseEvent e) {}
+     * Emulates dragging on Mac OSX
+     */
+    public void mouseMoved(MouseEvent e) {
+        if (!movementInPlace)
+            return;
+        // Mac OSX simulates with  ctrl + mouse 1  the second mouse button hence no dragging events get fired.
+        // Is only the selected mouse button pressed?
+        if (isPlatformOsx()) {
+            if (e.getModifiersEx() == MouseEvent.CTRL_DOWN_MASK) {
+                if (mousePosMove == null) {
+                    startMovement(e);
+                }
+                EastNorth center = nc.getCenter();
+                EastNorth mouseCenter = nc.getEastNorth(e.getX(), e.getY());
+                nc.zoomTo(new EastNorth(mousePosMove.east() + center.east() - mouseCenter.east(), mousePosMove.north()
+                        + center.north() - mouseCenter.north()));
+            } else {
+                endMovement();
+            }
+        }
+    }
+
+    /**
+     * Replies true if we are currently running on OSX
+     *
+     * @return true if we are currently running on OSX
+     */
+    public static boolean isPlatformOsx() {
+        return Main.platform != null && Main.platform instanceof PlatformHookOsx;
+    }
+
 }
