Index: trunk/src/org/openstreetmap/josm/tools/KeyboardUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/KeyboardUtils.java	(revision 14016)
+++ trunk/src/org/openstreetmap/josm/tools/KeyboardUtils.java	(revision 14017)
@@ -181,5 +181,5 @@
                 } else if (!"LU".equals(l.getCountry())) {
                     // France and Belgium, https://en.wikipedia.org/wiki/AZERTY
-                    result.add('²'); // 10000B2
+                    result.add('²');
                 }
                 // BÉPO, https://en.wikipedia.org/wiki/Keyboard_layout#B%C3%89PO
@@ -202,5 +202,5 @@
             case "de": // German
                 // https://en.wikipedia.org/wiki/German_keyboard_layout
-                result.add('^');
+                result.add((char) KeyEvent.VK_DEAD_CIRCUMFLEX);
                 break;
             case "cs": // Czech
@@ -213,10 +213,4 @@
                 // Hungary, https://en.wikipedia.org/wiki/QWERTZ#Hungary
                 result.add('0');
-                break;
-            case "pl": // Polish
-                // Poland, https://en.wikipedia.org/wiki/QWERTZ#Poland
-                result.add('µ');
-                result.add('^');
-                result.add('˛'); // https://en.wikipedia.org/wiki/Ogonek
                 break;
             case "bs": // Bosnian
@@ -243,9 +237,10 @@
             case "et": // Estonian
                 // https://en.wikipedia.org/wiki/QWERTY#Estonian
-                result.add('ˇ'); // https://en.wikipedia.org/wiki/Caron
+                result.add((char) KeyEvent.VK_DEAD_CARON); // https://en.wikipedia.org/wiki/Caron
                 break;
             case "is": // Icelandic
                 // https://en.wikipedia.org/wiki/Icelandic_keyboard_layout
                 result.add('°'); // https://en.wikipedia.org/wiki/Ring_(diacritic)
+                // FIXME It doesn't work with Java 8: [KEY_PRESSED,keyCode=0,keyChar=Undefined keyChar,extendedKeyCode=0x0]
                 break;
             case "es": // Spanish
@@ -290,4 +285,5 @@
                 // https://en.wikipedia.org/wiki/QWERTY#Spain,_also_known_as_Spanish_(International_sort)
                 result.add('º'); // https://en.wikipedia.org/wiki/Ordinal_indicator
+                // FIXME It doesn't work with Java 8: [KEY_PRESSED,keyCode=0,keyChar=Undefined keyChar,extendedKeyCode=0x0]
                 break;
             default:
@@ -303,6 +299,6 @@
             // Add default US QWERTY keys, https://en.wikipedia.org/wiki/QWERTY
             // Works also for Dvorak, https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
-            result.add('`');
-            result.add('~');
+            result.add('`'); // On US QWERTY, this is not a dead key
+            result.add((char) KeyEvent.VK_DEAD_GRAVE); // On International QWERTY, this is a dead key
             return result;
         }
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 14016)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 14017)
@@ -462,9 +462,14 @@
                     new StringBuilder(shortText).append(" (").append(i).append(')').toString(), longText,
                     // Add extended keyCode if not a regular one
-                    regularKeyCodes.containsKey(code) ? regularKeyCodes.get(code) : c | KeyboardUtils.EXTENDED_KEYCODE_FLAG,
+                    regularKeyCodes.containsKey(code) ? regularKeyCodes.get(code) :
+                        isDeadKey(code) ? code : c | KeyboardUtils.EXTENDED_KEYCODE_FLAG,
                     requestedGroup));
             i++;
         }
         return result;
+    }
+
+    static boolean isDeadKey(int keyCode) {
+        return KeyEvent.VK_DEAD_GRAVE <= keyCode && keyCode <= KeyEvent.VK_DEAD_SEMIVOICED_SOUND;
     }
 
