   (setq smex-ido-cache (smex-convert-for-ido smex-cache)))
 
 (defun smex-convert-for-ido (command-items)
-  (mapcar (lambda (command-item) (symbol-name (car command-item))) command-items))
+  (mapcar (lambda (command-item)
+            (let* ((command (car command-item))
+                   (keybinding (smex-find-keybinding command))
+                   (command-name (symbol-name command)))
+              (if keybinding
+                  (format "%s (%s)" command-name keybinding)
+                command-name)))
+          command-items))
 
 (defun smex-restore-history ()
   "Rearranges `smex-cache' according to `smex-history'"

    (setq commands (mapcar #'symbol-name commands))
    (smex-read-and-run commands)))

(defun smex-completing-read (choices initial-input)
  (let ((ido-completion-map ido-completion-map)
        (ido-setup-hook (cons 'smex-prepare-ido-bindings ido-setup-hook))

        (ido-enable-flex-matching smex-flex-matching)
        (ido-max-prospects 10)
        (minibuffer-completion-table choices))
    (smex-extract-command-name
     (ido-completing-read (smex-prompt-with-prefix-arg) choices nil nil
                          initial-input 'extended-command-history (car choices)))))

(defun smex-prompt-with-prefix-arg ()
  (if (not current-prefix-arg)
