diff --git a/src/plugins/coreplugin/actionmanager/command.cpp b/src/plugins/coreplugin/actionmanager/command.cpp
index b92720f4cd9fc57438b67159ad820d6241962b4a..6e84d29c554dfdf4cacb8f8617cd57f3b3e92629 100644
--- a/src/plugins/coreplugin/actionmanager/command.cpp
+++ b/src/plugins/coreplugin/actionmanager/command.cpp
@@ -500,7 +500,6 @@ void OverrideableAction::addOverrideAction(QAction *action, const QList<int> &co
             m_contextActionMap.insert(k, action);
         }
     }
-    action->setShortcut(OverrideableAction::action()->shortcut());
 }
 
 void OverrideableAction::actionChanged()
@@ -530,14 +529,3 @@ bool OverrideableAction::isActive() const
 {
     return m_active;
 }
-
-void OverrideableAction::setKeySequence(const QKeySequence &key)
-{
-    QMap<int, QPointer<QAction> >::const_iterator it = m_contextActionMap.constBegin();
-    QMap<int, QPointer<QAction> >::const_iterator itEnd = m_contextActionMap.constEnd();
-    while (it != itEnd) {
-        it.value()->setShortcut(key);
-        ++it;
-    }
-    Action::setKeySequence(key);
-}
diff --git a/src/plugins/coreplugin/actionmanager/command_p.h b/src/plugins/coreplugin/actionmanager/command_p.h
index accb15e4acb3cceb30a30493fe17e9b1140b0531..176866dfeeb7a3ffc48621f5c8188a591e661922 100644
--- a/src/plugins/coreplugin/actionmanager/command_p.h
+++ b/src/plugins/coreplugin/actionmanager/command_p.h
@@ -143,7 +143,6 @@ public:
     bool setCurrentContext(const QList<int> &context);
     void addOverrideAction(QAction *action, const QList<int> &context);
     bool isActive() const;
-    void setKeySequence(const QKeySequence &key);
 
 private slots:
     void actionChanged();
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index 72b92d2ef61420d2c395c249103c1dba0a9c7c5d..5761513bdda8516993151c6ecbfa3a6c6132a5c1 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -105,33 +105,8 @@ static inline QIcon designerIcon(const QString &iconName)
     return icon;
 }
 
-// Create an action to activate a designer tool
-static inline QAction *createEditModeAction(QActionGroup *ag,
-                                     const QList<int> &context,
-                                     Core::ActionManager *am,
-                                     Core::ActionContainer *medit,
-                                     const QString &actionName,
-                                     const QString &name,
-                                     int toolNumber,
-                                     const QString &iconName =  QString(),
-                                     const QString &keySequence = QString())
-{
-    QAction *rc = new QAction(actionName, ag);
-    rc->setCheckable(true);
-    if (!iconName.isEmpty())
-         rc->setIcon(designerIcon(iconName));
-    Core::Command *command = am->registerAction(rc, name, context);
-    if (!keySequence.isEmpty())
-        command->setDefaultKeySequence(QKeySequence(keySequence));
-    medit->addAction(command, Core::Constants::G_EDIT_OTHER);
-    rc->setData(toolNumber);
-    ag->addAction(rc);
-    return rc;
-}
-
-
-// Create a menu separato
-static inline QAction * createSeparator(QObject *parent,
+// Create a menu separator
+static inline QAction *createSeparator(QObject *parent,
                                  Core::ActionManager *am,
                                  const QList<int> &context,
                                  Core::ActionContainer *container,
@@ -145,20 +120,6 @@ static inline QAction * createSeparator(QObject *parent,
     return actSeparator;
 }
 
-// Create a tool action
-static inline void addToolAction(QAction *a,
-                   Core::ActionManager *am,
-                   const QList<int> &context,
-                   const QString &name,
-                   Core::ActionContainer *c1,
-                   const QString &keySequence = QString())
-{
-    Core::Command *command = am->registerAction(a, name, context);
-    if (!keySequence.isEmpty())
-        command->setDefaultKeySequence(QKeySequence(keySequence));
-    c1->addAction(command);
-}
-
 using namespace Designer;
 using namespace Designer::Internal;
 using namespace Designer::Constants;
@@ -237,7 +198,8 @@ FormEditorW::FormEditorW() :
     m_actionPrint(0),
     m_actionPreview(0),
     m_actionGroupPreviewInStyle(0),
-    m_actionAboutPlugins(0)
+    m_actionAboutPlugins(0),
+    m_shortcutMapper(new QSignalMapper(this))
 {
     if (Designer::Constants::Internal::debug)
         qDebug() << Q_FUNC_INFO;
@@ -270,6 +232,8 @@ FormEditorW::FormEditorW() :
 
     connect(m_core->editorManager(), SIGNAL(currentEditorChanged(Core::IEditor *)),
             this, SLOT(currentEditorChanged(Core::IEditor *)));
+    connect(m_shortcutMapper, SIGNAL(mapped(QObject *)),
+            this, SLOT(updateShortcut(QObject *)));
 }
 
 FormEditorW::~FormEditorW()
@@ -397,20 +361,21 @@ void FormEditorW::setupActions()
     mtools->addMenu(mformtools);
 
     //overridden actions
-    am->registerAction(m_fwm->actionUndo(), Core::Constants::UNDO, m_context);
-    am->registerAction(m_fwm->actionRedo(), Core::Constants::REDO, m_context);
-    am->registerAction(m_fwm->actionCut(), Core::Constants::CUT, m_context);
-    am->registerAction(m_fwm->actionCopy(), Core::Constants::COPY, m_context);
-    am->registerAction(m_fwm->actionPaste(), Core::Constants::PASTE, m_context);
-    am->registerAction(m_fwm->actionSelectAll(), Core::Constants::SELECTALL, m_context);
+    bindShortcut(am->registerAction(m_fwm->actionUndo(), Core::Constants::UNDO, m_context), m_fwm->actionUndo());
+    bindShortcut(am->registerAction(m_fwm->actionRedo(), Core::Constants::REDO, m_context), m_fwm->actionRedo());
+    bindShortcut(am->registerAction(m_fwm->actionCut(), Core::Constants::CUT, m_context), m_fwm->actionCut());
+    bindShortcut(am->registerAction(m_fwm->actionCopy(), Core::Constants::COPY, m_context), m_fwm->actionCopy());
+    bindShortcut(am->registerAction(m_fwm->actionPaste(), Core::Constants::PASTE, m_context), m_fwm->actionPaste());
+    bindShortcut(am->registerAction(m_fwm->actionSelectAll(), Core::Constants::SELECTALL, m_context), m_fwm->actionSelectAll());
 
     m_actionPrint = new QAction(this);
-    am->registerAction(m_actionPrint, Core::Constants::PRINT, m_context);
+    bindShortcut(am->registerAction(m_actionPrint, Core::Constants::PRINT, m_context), m_actionPrint);
     connect(m_actionPrint, SIGNAL(triggered()), this, SLOT(print()));
 
     //'delete' action
     command = am->registerAction(m_fwm->actionDelete(), QLatin1String("FormEditor.Edit.Delete"), m_context);
     command->setDefaultKeySequence(QKeySequence::Delete);
+    bindShortcut(command, m_fwm->actionDelete());
     command->setAttribute(Core::Command::CA_Hide);
     medit->addAction(command, Core::Constants::G_EDIT_COPYPASTE);
 
@@ -613,6 +578,7 @@ Core::ActionContainer *FormEditorW::createPreviewStyleMenu(Core::ActionManager *
         }
         name += data.toString();
         Core::Command *command = am->registerAction(a, name, m_context);
+        bindShortcut(command, a);
         if (isDeviceProfile) {
             command->setAttribute(Core::Command::CA_UpdateText);
             command->setAttribute(Core::Command::CA_NonConfigureable);
@@ -642,6 +608,56 @@ void FormEditorW::critical(const QString &errorMessage)
     QMessageBox::critical(m_core->mainWindow(), tr("Designer"),  errorMessage);
 }
 
+// Apply the command shortcut to the action and connects to the command's keySequenceChanged signal
+void FormEditorW::bindShortcut(Core::Command *command, QAction *action)
+{
+    m_commandToDesignerAction.insert(command, action);
+    connect(command, SIGNAL(keySequenceChanged()),
+            m_shortcutMapper, SLOT(map()));
+    m_shortcutMapper->setMapping(command, command);
+    updateShortcut(command);
+}
+
+// Create an action to activate a designer tool
+QAction *FormEditorW::createEditModeAction(QActionGroup *ag,
+                                     const QList<int> &context,
+                                     Core::ActionManager *am,
+                                     Core::ActionContainer *medit,
+                                     const QString &actionName,
+                                     const QString &name,
+                                     int toolNumber,
+                                     const QString &iconName,
+                                     const QString &keySequence)
+{
+    QAction *rc = new QAction(actionName, ag);
+    rc->setCheckable(true);
+    if (!iconName.isEmpty())
+         rc->setIcon(designerIcon(iconName));
+    Core::Command *command = am->registerAction(rc, name, context);
+    if (!keySequence.isEmpty())
+        command->setDefaultKeySequence(QKeySequence(keySequence));
+    bindShortcut(command, rc);
+    medit->addAction(command, Core::Constants::G_EDIT_OTHER);
+    rc->setData(toolNumber);
+    ag->addAction(rc);
+    return rc;
+}
+
+// Create a tool action
+void FormEditorW::addToolAction(QAction *a,
+                   Core::ActionManager *am,
+                   const QList<int> &context,
+                   const QString &name,
+                   Core::ActionContainer *c1,
+                   const QString &keySequence)
+{
+    Core::Command *command = am->registerAction(a, name, context);
+    if (!keySequence.isEmpty())
+        command->setDefaultKeySequence(QKeySequence(keySequence));
+    bindShortcut(command, a);
+    c1->addAction(command);
+}
+
 FormWindowEditor *FormEditorW::createFormWindowEditor(QWidget* parentWidget)
 {
     m_fwm->closeAllPreviews();
@@ -673,6 +689,17 @@ void FormEditorW::editorDestroyed()
     }
 }
 
+void FormEditorW::updateShortcut(QObject *command)
+{
+    Core::Command *c = qobject_cast<Core::Command *>(command);
+    if (!c)
+        return;
+    QAction *a = m_commandToDesignerAction.value(c);
+    if (!a)
+        return;
+    a->setShortcut(c->action()->shortcut());
+}
+
 void FormEditorW::currentEditorChanged(Core::IEditor *editor)
 {
     if (Designer::Constants::Internal::debug)
diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h
index e592cfacf287be02a429f577472c5b6779899188..b3293b520742e3345633834aaa6c2a62827e1593 100644
--- a/src/plugins/designer/formeditorw.h
+++ b/src/plugins/designer/formeditorw.h
@@ -36,6 +36,7 @@
 #include <QtCore/QObject>
 #include <QtCore/QPointer>
 #include <QtCore/QStringList>
+#include <QtCore/QSignalMapper>
 #include <QtGui/QAction>
 
 #include "designerconstants.h"
@@ -65,6 +66,7 @@ class ActionManager;
 class ActionContainer;
 class ICore;
 class IEditor;
+class Command;
 }
 
 namespace Designer {
@@ -141,6 +143,7 @@ private slots:
     void resetToDefaultLayout();
 
     void editorDestroyed();
+    void updateShortcut(QObject *command);
 
 private:
     FormEditorW();
@@ -158,6 +161,23 @@ private:
                                                    QActionGroup *actionGroup);
 
     void critical(const QString &errorMessage);
+    void bindShortcut(Core::Command *command, QAction *action);
+    QAction *createEditModeAction(QActionGroup *ag,
+                                         const QList<int> &context,
+                                         Core::ActionManager *am,
+                                         Core::ActionContainer *medit,
+                                         const QString &actionName,
+                                         const QString &name,
+                                         int toolNumber,
+                                         const QString &iconName = QString(),
+                                         const QString &keySequence = QString());
+    void addToolAction(QAction *a,
+                       Core::ActionManager *am,
+                       const QList<int> &context,
+                       const QString &name,
+                       Core::ActionContainer *c1,
+                       const QString &keySequence = QString());
+
 
     static FormEditorW *m_self;
 
@@ -184,6 +204,8 @@ private:
 
     EditorList m_formWindows;
     QStringList m_toolActionIds;
+    QSignalMapper *m_shortcutMapper;
+    QMap<Core::Command *, QAction *> m_commandToDesignerAction;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index 5134035a003baeb69b0416ad7aaff51bdfd847ca..271bc15ea2242f282f1f6919510da24d399177a1 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -34,6 +34,7 @@
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/uniqueidmanager.h>
+#include <coreplugin/actionmanager/command.h>
 #include <texteditor/basetexteditor.h>
 #include <texteditor/itexteditor.h>
 
@@ -456,9 +457,9 @@ TaskWindow::TaskWindow()
     core->addContextObject(m_taskWindowContext);
 
     m_copyAction = new QAction(QIcon(Core::Constants::ICON_COPY), tr("&Copy"), this);
-    core->actionManager()->
+    Core::Command *command = core->actionManager()->
             registerAction(m_copyAction, Core::Constants::COPY, m_taskWindowContext->context());
-    m_listview->addAction(m_copyAction);
+    m_listview->addAction(command->action());
 
     connect(m_listview->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
             tld, SLOT(currentChanged(const QModelIndex &, const QModelIndex &)));