Index: trunk/src/org/openstreetmap/josm/gui/MapMover.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 7605)
+++ trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 7606)
@@ -116,13 +116,16 @@
             contentPane.getActionMap().put("MapMover.Zoomer.down", new ZoomerAction("down"));
 
-            contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-                Shortcut.registerShortcut("view:zoominalternate", tr("Map: {0}", tr("Zoom in")), KeyEvent.VK_COMMA, Shortcut.CTRL).getKeyStroke(),
-                "MapMover.Zoomer.in");
-            contentPane.getActionMap().put("MapMover.Zoomer.in", new ZoomerAction(","));
-
-            contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-                Shortcut.registerShortcut("view:zoomoutalternate", tr("Map: {0}", tr("Zoom out")), KeyEvent.VK_PERIOD, Shortcut.CTRL).getKeyStroke(),
-                "MapMover.Zoomer.out");
-            contentPane.getActionMap().put("MapMover.Zoomer.out", new ZoomerAction("."));
+            // see #10592 - Disable these alternate shortcuts on OS X because of conflict with system shortcut
+            if (!Main.isPlatformOsx()) {
+                contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                    Shortcut.registerShortcut("view:zoominalternate", tr("Map: {0}", tr("Zoom in")), KeyEvent.VK_COMMA, Shortcut.CTRL).getKeyStroke(),
+                    "MapMover.Zoomer.in");
+                contentPane.getActionMap().put("MapMover.Zoomer.in", new ZoomerAction(","));
+
+                contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                    Shortcut.registerShortcut("view:zoomoutalternate", tr("Map: {0}", tr("Zoom out")), KeyEvent.VK_PERIOD, Shortcut.CTRL).getKeyStroke(),
+                    "MapMover.Zoomer.out");
+                contentPane.getActionMap().put("MapMover.Zoomer.out", new ZoomerAction("."));
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 7605)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 7606)
@@ -413,14 +413,16 @@
         Shortcut conflict = findShortcut(requestedKey, defaultModifier);
         if (conflict != null) {
+            if (Main.isPlatformOsx()) {
+                // Try to reassign Meta to Ctrl
+                int newmodifier = findNewOsxModifier(requestedGroup);
+                if ( findShortcut(requestedKey, newmodifier) == null ) {
+                    return reassignShortcut(shortText, longText, requestedKey, conflict, requestedGroup, requestedKey, newmodifier);
+                }
+            }
             for (int m : mods) {
                 for (int k : keys) {
                     int newmodifier = getGroupModifier(m);
                     if ( findShortcut(k, newmodifier) == null ) {
-                        Shortcut newsc = new Shortcut(shortText, longText, requestedKey, m, k, newmodifier, false, false);
-                        Main.info(tr("Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''.",
-                            shortText, conflict.getShortText(), newsc.getKeyText()));
-                        newsc.saveDefault();
-                        shortcuts.put(shortText, newsc);
-                        return newsc;
+                        return reassignShortcut(shortText, longText, requestedKey, conflict, m, k, newmodifier);
                     }
                 }
@@ -436,4 +438,24 @@
     }
 
+    private static int findNewOsxModifier(int requestedGroup) {
+        switch (requestedGroup) {
+            case CTRL: return KeyEvent.CTRL_DOWN_MASK;
+            case ALT_CTRL: return KeyEvent.ALT_DOWN_MASK|KeyEvent.CTRL_DOWN_MASK;
+            case CTRL_SHIFT: return KeyEvent.CTRL_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK;
+            case ALT_CTRL_SHIFT: return KeyEvent.ALT_DOWN_MASK|KeyEvent.CTRL_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK;
+            default: return 0;
+        }
+    }
+
+    private static Shortcut reassignShortcut(String shortText, String longText, int requestedKey, Shortcut conflict,
+            int m, int k, int newmodifier) {
+        Shortcut newsc = new Shortcut(shortText, longText, requestedKey, m, k, newmodifier, false, false);
+        Main.info(tr("Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''.",
+            shortText, conflict.getShortText(), newsc.getKeyText()));
+        newsc.saveDefault();
+        shortcuts.put(shortText, newsc);
+        return newsc;
+    }
+
     /**
      * Replies the platform specific key stroke for the 'Copy' command, i.e.
