Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 4924)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 4926)
@@ -973,8 +973,11 @@
     class SortAction extends AbstractAction implements TableModelListener {
         public SortAction() {
-            putValue(SHORT_DESCRIPTION, tr("Sort the relation members"));
+            String tooltip = tr("Sort the relation members");
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort"));
             putValue(NAME, tr("Sort"));
-            //    Shortcut.register Shortcut("relationeditor:sort", tr("Relation Editor: Sort"), KeyEvent.VK_HOME, Shortcut.GROUP_MNEMONIC)
+            Shortcut sc = Shortcut.registerShortcut("relationeditor:sort", tr("Relation Editor: Sort"),
+                KeyEvent.VK_END, Shortcut.GROUP_DIRECT2);
+            sc.setAccelerator(this);
+            putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
             updateEnabledState();
         }
@@ -998,5 +1001,6 @@
             putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "reverse"));
             putValue(NAME, tr("Reverse"));
-            //   Shortcut.register Shortcut("relationeditor:reverse", tr("Relation Editor: Reverse"), KeyEvent.VK_END, Shortcut.GROUP_MNEMONIC)
+        //  Shortcut.register Shortcut("relationeditor:reverse", tr("Relation Editor: Reverse"),
+        //      KeyEvent.VK_END, Shortcut.GROUP_DIRECT2)
             updateEnabledState();
         }
@@ -1017,11 +1021,11 @@
     class MoveUpAction extends AbstractAction implements ListSelectionListener {
         public MoveUpAction() {
-            putValue(SHORT_DESCRIPTION, tr("Move the currently selected members up"));
+            String tooltip = tr("Move the currently selected members up");
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "moveup"));
             // putValue(NAME, tr("Move Up"));
-            putValue(ACCELERATOR_KEY,
-                Shortcut.registerShortcut("relationeditor:moveup", tr("Relation Editor: Move Up"), KeyEvent.VK_UP, Shortcut.GROUP_MNEMONIC)
-                    .getKeyStroke()
-            );
+            Shortcut sc = Shortcut.registerShortcut("relationeditor:moveup", tr("Relation Editor: Move Up"),
+                KeyEvent.VK_UP, Shortcut.GROUP_DIRECT2);
+            sc.setAccelerator(this);
+            putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
             setEnabled(false);
         }
@@ -1038,11 +1042,11 @@
     class MoveDownAction extends AbstractAction implements ListSelectionListener {
         public MoveDownAction() {
-            putValue(SHORT_DESCRIPTION, tr("Move the currently selected members down"));
+            String tooltip = tr("Move the currently selected members down");
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "movedown"));
             // putValue(NAME, tr("Move Down"));
-            putValue(ACCELERATOR_KEY,
-                Shortcut.registerShortcut("relationeditor:movedown", tr("Relation Editor: Move Down"), KeyEvent.VK_DOWN, Shortcut.GROUP_MNEMONIC)
-                    .getKeyStroke()
-            );
+            Shortcut sc = Shortcut.registerShortcut("relationeditor:movedown", tr("Relation Editor: Move Down"),
+                KeyEvent.VK_DOWN, Shortcut.GROUP_DIRECT2);
+            sc.setAccelerator(this);
+            putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
             setEnabled(false);
         }
@@ -1059,10 +1063,11 @@
     class RemoveAction extends AbstractAction implements ListSelectionListener {
         public RemoveAction() {
-            putValue(SHORT_DESCRIPTION, tr("Remove the currently selected members from this relation"));
+            String tooltip = tr("Remove the currently selected members from this relation");
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "remove"));
             putValue(NAME, tr("Remove"));
-            putValue(ACCELERATOR_KEY,
-                 Shortcut.registerShortcut("relationeditor:remove", tr("Relation Editor: Remove"), KeyEvent.VK_DELETE,
-                    Shortcut.GROUP_MNEMONIC).getKeyStroke());
+            Shortcut sc = Shortcut.registerShortcut("relationeditor:remove", tr("Relation Editor: Remove"),
+                KeyEvent.VK_DELETE, Shortcut.GROUP_DIRECT2);
+            sc.setAccelerator(this);
+            putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
             setEnabled(false);
         }
@@ -1395,12 +1400,11 @@
     class DownloadIncompleteMembersAction extends AbstractAction implements TableModelListener {
         public DownloadIncompleteMembersAction() {
-            putValue(SHORT_DESCRIPTION, tr("Download all incomplete members"));
+            String tooltip = tr("Download all incomplete members");
             putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincomplete"));
             putValue(NAME, tr("Download Members"));
-            putValue(ACCELERATOR_KEY,
-                Shortcut.registerShortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"), KeyEvent.VK_HOME, Shortcut.GROUP_MNEMONIC)
-                    .getKeyStroke()
-            );
-                
+            Shortcut sc = Shortcut.registerShortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"),
+                KeyEvent.VK_HOME, Shortcut.GROUP_DIRECT2);
+            sc.setAccelerator(this);
+            putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
             updateEnabledState();
         }
@@ -1431,5 +1435,6 @@
             putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincompleteselected"));
             putValue(NAME, tr("Download Members"));
-        //  Shortcut.register Shortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"), KeyEvent.VK_K, Shortcut.GROUP_MNEMONIC);
+        //  Shortcut.register Shortcut("relationeditor:downloadincomplete", tr("Relation Editor: Download Members"),
+        //      KeyEvent.VK_K, Shortcut.GROUP_DIRECT2)
             updateEnabledState();
         }
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(revision 4924)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(revision 4926)
@@ -84,4 +84,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_MNEMONIC,KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_DIRECT2, KeyEvent.ALT_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_DIRECT3, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
 
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_NONE,       -1);
@@ -93,4 +94,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_MNEMONIC,   KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT2,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.SHIFT_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT3,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
 
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_NONE,       -1);
@@ -102,4 +104,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_MNEMONIC,   KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_DIRECT2,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.CTRL_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_DIRECT3,    KeyEvent.META_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK);
 
         return groups;
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 4924)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 4926)
@@ -58,4 +58,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_MNEMONIC,KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_DIRECT2, KeyEvent.ALT_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_DEFAULT+Shortcut.GROUP_DIRECT3, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
 
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_NONE,       -1);
@@ -67,4 +68,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_MNEMONIC,   KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT2,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.SHIFT_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT3,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
 
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_NONE,       -1);
@@ -76,4 +78,5 @@
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_MNEMONIC,   KeyEvent.ALT_DOWN_MASK);
         setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_DIRECT2,    KeyEvent.ALT_DOWN_MASK  | KeyEvent.CTRL_DOWN_MASK);
+        setupGroup(groups, load, Shortcut.GROUPS_ALT2+Shortcut.GROUP_DIRECT3,    KeyEvent.META_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK);
 
         return groups;
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 4924)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 4926)
@@ -14,4 +14,5 @@
 import java.util.Map;
 
+import javax.swing.AbstractAction;
 import javax.swing.AbstractButton;
 import javax.swing.JMenu;
@@ -212,4 +213,12 @@
         }
     }
+    /**
+     * use this to set a actions's accelerator
+     */
+    public void setAccelerator(AbstractAction action) {
+        if (getKeyStroke() != null) {
+            action.putValue(AbstractAction.ACCELERATOR_KEY, getKeyStroke());
+        }
+    }
 
     /**
@@ -309,5 +318,9 @@
      */
     public static final int GROUP_DIRECT2 = 7;
-    public static final int GROUP__MAX = 8;
+    /**
+     * for direct access, remaining modifiers.
+     */
+    public static final int GROUP_DIRECT3 = 8;
+    public static final int GROUP__MAX = 9;
     public static final int GROUP_RESERVED = 1000;
     public static final int GROUPS_DEFAULT = 0;
