diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index 3ad0d71e27..9d3e6eaf9b 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -33,6 +33,8 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     protected boolean ctrl;
     protected boolean alt;
     protected boolean shift;
+    /** @since xxx */
+    protected boolean meta;
 
     /**
      * Constructor for mapmodes without a menu
@@ -154,7 +156,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     }
 
     /**
-     * Update internal ctrl, alt, shift mask from given extended modifiers mask.
+     * Update internal ctrl, alt, shift, meta mask from given extended modifiers mask.
      * @param modifiers event extended modifiers mask
      * @since 12517
      */
@@ -162,6 +164,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
         ctrl = (modifiers & InputEvent.CTRL_DOWN_MASK) != 0;
         alt = (modifiers & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_GRAPH_DOWN_MASK)) != 0;
         shift = (modifiers & InputEvent.SHIFT_DOWN_MASK) != 0;
+        meta = (modifiers & InputEvent.META_DOWN_MASK) != 0;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index 6983b3d585..64526b99eb 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -346,7 +346,13 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
             if (lassoMode) {
                 c = "lasso";
             } else {
-                c = "rect" + (shift ? "_add" : (ctrl && !PlatformManager.isPlatformOsx() ? "_rm" : ""));
+                if (shift) {
+                    c = "rect_add";
+                } else if ((ctrl && !PlatformManager.isPlatformOsx()) || (meta && PlatformManager.isPlatformOsx())) {
+                    c = "rect_rm";
+                } else {
+                    c = "rect";
+                }
             }
             break;
         }
@@ -988,7 +994,7 @@ public class SelectAction extends MapMode implements ModifierExListener, KeyPres
             shift |= ds.getSelected().containsAll(prims);
         }
 
-        if (ctrl) {
+        if ((ctrl && !PlatformManager.isPlatformOsx()) || (meta && PlatformManager.isPlatformOsx())) {
             // Ctrl on an item toggles its selection status,
             // but Ctrl on an *area* just clears those items
             // out of the selection.
diff --git a/src/org/openstreetmap/josm/gui/SelectionManager.java b/src/org/openstreetmap/josm/gui/SelectionManager.java
index 602f4491f9..0f9e4a0e92 100644
--- a/src/org/openstreetmap/josm/gui/SelectionManager.java
+++ b/src/org/openstreetmap/josm/gui/SelectionManager.java
@@ -26,6 +26,7 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.gui.layer.AbstractMapViewPaintable;
 import org.openstreetmap.josm.tools.ColorHelper;
+import org.openstreetmap.josm.tools.PlatformManager;
 
 /**
  * Manages the selection of a rectangle or a lasso loop. Listening to left and right mouse button
@@ -185,7 +186,7 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
         if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() > 1 && MainApplication.getLayerManager().getActiveDataSet() != null) {
             SelectByInternalPointAction.performSelection(MainApplication.getMap().mapView.getEastNorth(e.getX(), e.getY()),
                     (e.getModifiersEx() & MouseEvent.SHIFT_DOWN_MASK) != 0,
-                    (e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) != 0);
+                    (e.getModifiersEx() & PlatformManager.getPlatform().getMenuShortcutKeyMaskEx()) != 0);
         } else if (e.getButton() == MouseEvent.BUTTON1) {
             mousePosStart = mousePos = e.getPoint();
 
