Index: trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java	(revision 4595)
+++ trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java	(revision 4604)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.KeyEventDispatcher;
@@ -21,5 +23,6 @@
 public class MultikeyActionsHandler {
 
-    private static final long DIALOG_DELAY = 2000;
+    private static final long DIALOG_DELAY = 1000;
+    private static final String STATUS_BAR_ID = new String("multikeyShortcut");
 
     private class MyKeyEventDispatcher implements KeyEventDispatcher {
@@ -31,13 +34,10 @@
 
             if (lastAction != null && e.getID() == KeyEvent.KEY_PRESSED) {
-                if (e.getKeyCode() == lastAction.shortcut.getKeyCode()) {
-                    lastAction.action.repeateLastMultikeyAction();
-                } else {
-                    int index = getIndex(e.getKeyChar());
-                    if (index >= 0) {
-                        lastAction.action.executeMultikeyAction(index);
-                    }
+                int index = getIndex(e.getKeyCode());
+                if (index >= 0) {
+                    lastAction.action.executeMultikeyAction(index, e.getKeyCode() == lastAction.shortcut.getKeyCode());
                 }
                 lastAction = null;
+                Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
                 return true;
             }
@@ -45,7 +45,9 @@
         }
 
-        private int getIndex(char lastKey) {
-            if (lastKey >= KeyEvent.VK_0 && lastKey <= KeyEvent.VK_9)
-                return lastKey - KeyEvent.VK_0;
+        private int getIndex(int lastKey) {
+            if (lastKey >= KeyEvent.VK_1 && lastKey <= KeyEvent.VK_9)
+                return lastKey - KeyEvent.VK_1;
+            else if (lastKey == KeyEvent.VK_0)
+                return 9;
             else if (lastKey >= KeyEvent.VK_A && lastKey <= KeyEvent.VK_Z)
                 return lastKey - KeyEvent.VK_A + 10;
@@ -70,4 +72,5 @@
             lastAction = this;
             timer.schedule(new MyTimerTask(lastTimestamp, lastAction), DIALOG_DELAY);
+            Main.map.statusLine.setHelpText(STATUS_BAR_ID, tr("{0}... [please type its number]", (String) action.getValue(SHORT_DESCRIPTION)));
         }
 
@@ -132,6 +135,14 @@
         layers.add(lbTitle);
 
+        char repeatKey = (char) action.shortcut.getKeyCode();
+        boolean repeatKeyUsed = false;
+
 
         for (final MultikeyInfo info: action.action.getMultikeyCombinations()) {
+
+            if (info.getShortcut() == repeatKey) {
+                repeatKeyUsed = true;
+            }
+
             JMenuItem item = new JMenuItem(formatMenuText(action.shortcut, String.valueOf(info.getShortcut()), info.getDescription()));
             item.setMnemonic(info.getShortcut());
@@ -139,5 +150,6 @@
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    action.action.executeMultikeyAction(info.getIndex());
+                    Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
+                    action.action.executeMultikeyAction(info.getIndex(), false);
                 }
             });
@@ -145,16 +157,20 @@
         }
 
-        MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
-        if (lastLayer != null) {
-            JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut,
-                    KeyEvent.getKeyText(action.shortcut.getKeyCode()),
-                    "Repeat " + lastLayer.getDescription()));
-            repeateItem.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    action.action.repeateLastMultikeyAction();
-                }
-            });
-            layers.add(repeateItem);
+        if (!repeatKeyUsed) {
+            MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
+            if (lastLayer != null) {
+                JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut,
+                        KeyEvent.getKeyText(action.shortcut.getKeyCode()),
+                        "Repeat " + lastLayer.getDescription()));
+                repeateItem.setMnemonic(action.shortcut.getKeyCode());
+                repeateItem.addActionListener(new ActionListener() {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
+                        action.action.executeMultikeyAction(-1, true);
+                    }
+                });
+                layers.add(repeateItem);
+            }
         }
 
Index: trunk/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java	(revision 4595)
+++ trunk/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java	(revision 4604)
@@ -22,6 +22,8 @@
 
         public char getShortcut() {
-            if (index < 10)
-                return (char)('0' + index);
+            if (index < 9)
+                return (char)('1' + index);
+            else if (index == 9)
+                return '0';
             else
                 return (char)('A' +  index - 10);
@@ -33,6 +35,5 @@
     }
 
-    void executeMultikeyAction(int index);
-    void repeateLastMultikeyAction();
+    void executeMultikeyAction(int index, boolean repeatLastAction);
     List<MultikeyInfo> getMultikeyCombinations();
     MultikeyInfo getLastMultikeyAction();
