Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 11206)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 11207)
@@ -7,5 +7,4 @@
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -272,5 +271,7 @@
 
     // here we store our shortcuts
-    private static Collection<Shortcut> shortcuts = new CopyOnWriteArrayList<Shortcut>() {
+    private static ShortcutCollection shortcuts = new ShortcutCollection();
+
+    private static class ShortcutCollection extends CopyOnWriteArrayList<Shortcut> {
         @Override
         public boolean add(Shortcut shortcut) {
@@ -281,4 +282,13 @@
             }
             return super.add(shortcut);
+        }
+
+        public void replace(Shortcut newShortcut) {
+            final Optional<Shortcut> existing = findShortcutByKeyOrShortText(-1, NONE, newShortcut.shortText);
+            if (existing.isPresent()) {
+                replaceAll(sc -> existing.get() == sc ? newShortcut : sc);
+            } else {
+                add(newShortcut);
+            }
         }
     };
@@ -369,5 +379,5 @@
                 .filter(sc -> !findShortcut(sc.getAssignedKey(), sc.getAssignedModifier()).isPresent())
                 .sorted(Comparator.comparing(sc -> sc.isAssignedUser() ? 1 : sc.isAssignedDefault() ? 2 : 3))
-                .forEachOrdered(shortcuts::add);
+                .forEachOrdered(shortcuts::replace);
     }
 
