diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index fbabebb959c93fbfa042009918ede313ebdcfa7b..2568cb5f3b9b312edcf2b1718070f4d0bb68b979 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -86,6 +86,7 @@ bool DesignModeCoreListener::coreAboutToClose()
 struct DesignEditorInfo {
     int widgetIndex;
     QStringList mimeTypes;
+    QList<int> context;
     bool preferredMode;
     QWidget *widget;
 };
@@ -100,6 +101,7 @@ struct DesignModePrivate {
 
     EditorManager *m_editorManager;
     QStackedWidget *m_stackWidget;
+    QList<int> m_activeContext;
 };
 
 DesignModePrivate::DesignModePrivate(DesignMode *q, EditorManager *editorManager) :
@@ -118,6 +120,9 @@ DesignMode::DesignMode(EditorManager *editorManager) :
 
     connect(editorManager, SIGNAL(currentEditorChanged(Core::IEditor*)),
             this, SLOT(currentEditorChanged(Core::IEditor*)));
+
+    connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*,Core::IMode*)),
+            this, SLOT(updateContext(Core::IMode*,Core::IMode*)));
 }
 
 DesignMode::~DesignMode()
@@ -169,13 +174,17 @@ QStringList DesignMode::registeredMimeTypes() const
     return rc;
 }
 
-void DesignMode::registerDesignWidget(QWidget *widget, const QStringList &mimeTypes, bool preferDesignMode)
+void DesignMode::registerDesignWidget(QWidget *widget,
+                                      const QStringList &mimeTypes,
+                                      const QList<int> &context,
+                                      bool preferDesignMode)
 {
     int index = d->m_stackWidget->addWidget(widget);
 
     DesignEditorInfo *info = new DesignEditorInfo;
     info->preferredMode = preferDesignMode;
     info->mimeTypes = mimeTypes;
+    info->context = context;
     info->widgetIndex = index;
     info->widget = widget;
     d->m_editors.append(info);
@@ -206,12 +215,11 @@ void DesignMode::currentEditorChanged(Core::IEditor *editor)
         if (type && !type.type().isEmpty())
             mimeType = type.type();
 
-
-
-        foreach(DesignEditorInfo *editorInfo, d->m_editors) {
-            foreach(QString mime, editorInfo->mimeTypes) {
+        foreach (DesignEditorInfo *editorInfo, d->m_editors) {
+            foreach (const QString &mime, editorInfo->mimeTypes) {
                 if (mime == mimeType) {
                     d->m_stackWidget->setCurrentIndex(editorInfo->widgetIndex);
+                    setActiveContext(editorInfo->context);
                     mimeEditorAvailable = true;
                     setEnabled(true);
                     if (editorInfo->preferredMode && core->modeManager()->currentMode() != this) {
@@ -225,8 +233,10 @@ void DesignMode::currentEditorChanged(Core::IEditor *editor)
                 break;
         }
     }
-    if (!mimeEditorAvailable)
+    if (!mimeEditorAvailable) {
+        setActiveContext(QList<int>());
         setEnabled(false);
+    }
 
     if (!mimeEditorAvailable && core->modeManager()->currentMode() == this)
     {
@@ -253,4 +263,38 @@ void DesignMode::updateActions()
     emit actionsUpdated(d->m_currentEditor.data());
 }
 
+void DesignMode::updateContext(Core::IMode *newMode, Core::IMode *oldMode)
+{
+    if (newMode == this) {
+        // Apply active context
+        Core::ICore *core = Core::ICore::instance();
+        foreach (int contextId, d->m_activeContext)
+            core->addAdditionalContext(contextId);
+        core->updateContext();
+    } else if (oldMode == this) {
+        // Remove active context
+        Core::ICore *core = Core::ICore::instance();
+        foreach (int contextId, d->m_activeContext)
+            core->removeAdditionalContext(contextId);
+        core->updateContext();
+    }
+}
+
+void DesignMode::setActiveContext(const QList<int> &context)
+{
+    if (d->m_activeContext == context)
+        return;
+
+    if (ModeManager::instance()->currentMode() == this) {
+        // Update active context
+        Core::ICore *core = Core::ICore::instance();
+        foreach (int contextId, d->m_activeContext)
+            core->removeAdditionalContext(contextId);
+        foreach (int contextId, context)
+            core->addAdditionalContext(contextId);
+        core->updateContext();
+    }
+    d->m_activeContext = context;
+}
+
 } // namespace Core
diff --git a/src/plugins/coreplugin/designmode.h b/src/plugins/coreplugin/designmode.h
index 030199a065526b390cfbf97493df32eda659561f..eaeecd99323e7a3efafca89ad46ae7ce74241f42 100644
--- a/src/plugins/coreplugin/designmode.h
+++ b/src/plugins/coreplugin/designmode.h
@@ -57,7 +57,9 @@ public:
     explicit DesignMode(EditorManager *editorManager);
     virtual ~DesignMode();
 
-    void registerDesignWidget(QWidget *widget, const QStringList &mimeTypes,
+    void registerDesignWidget(QWidget *widget,
+                              const QStringList &mimeTypes,
+                              const QList<int> &context,
                               bool preferDesignMode = false);
     void unregisterDesignWidget(QWidget *widget);
 
@@ -79,8 +81,11 @@ signals:
 private slots:
     void currentEditorChanged(Core::IEditor *editor);
     void updateActions();
+    void updateContext(Core::IMode *newMode, Core::IMode *oldMode);
 
 private:
+    void setActiveContext(const QList<int> &context);
+
     DesignModePrivate *d;
     friend class Internal::DesignModeCoreListener;
 };
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index e42602bbd360be07f0db310a3d31c4a2decaade7..dbc133d29a322bf9b2e841d9c41fbb50caa33243 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -176,9 +176,7 @@ FormEditorW::FormEditorW() :
     QTC_ASSERT(m_fwm, return);
 
     Core::UniqueIDManager *idMan = Core::UniqueIDManager::instance();
-    m_contexts << idMan->uniqueIdentifier(QLatin1String(Designer::Constants::C_FORMEDITOR))
-               << idMan->uniqueIdentifier(QLatin1String(Core::Constants::C_EDITORMANAGER))
-               << idMan->uniqueIdentifier(QLatin1String(Core::Constants::C_DESIGN_MODE));
+    m_contexts << idMan->uniqueIdentifier(QLatin1String(Designer::Constants::C_FORMEDITOR));
 
     setupActions();
 
@@ -333,7 +331,7 @@ void FormEditorW::fullInit()
     m_context = new DesignerContext(m_contexts, m_modeWidget, this);
     m_core->addContextObject(m_context);
 
-    m_designMode->registerDesignWidget(m_modeWidget, QStringList(QLatin1String(FORM_MIMETYPE)));
+    m_designMode->registerDesignWidget(m_modeWidget, QStringList(QLatin1String(FORM_MIMETYPE)), m_contexts);
 
     setupViewActions();
 
@@ -428,93 +426,90 @@ void FormEditorW::setupActions()
     command->setAttribute(Core::Command::CA_Hide);
     medit->addAction(command, Core::Constants::G_EDIT_COPYPASTE);
 
-    QList<int> globalcontext;
-    globalcontext << m_core->uniqueIDManager()->uniqueIdentifier(Core::Constants::C_GLOBAL);
-
     m_actionGroupEditMode = new QActionGroup(this);
     m_actionGroupEditMode->setExclusive(true);
     connect(m_actionGroupEditMode, SIGNAL(triggered(QAction*)), this, SLOT(activateEditMode(QAction*)));
 
     m_modeActionSeparator = new QAction(this);
     m_modeActionSeparator->setSeparator(true);
-    command = am->registerAction(m_modeActionSeparator, QLatin1String("FormEditor.Sep.ModeActions"), globalcontext);
+    command = am->registerAction(m_modeActionSeparator, QLatin1String("FormEditor.Sep.ModeActions"), m_contexts);
     medit->addAction(command, Core::Constants::G_EDIT_OTHER);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.WidgetEditor"));
-    createEditModeAction(m_actionGroupEditMode, globalcontext, am, medit,
+    createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit widgets"), m_toolActionIds.back(),
                          EditModeWidgetEditor, QLatin1String("widgettool.png"), tr("F3"));
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.SignalsSlotsEditor"));
-    createEditModeAction(m_actionGroupEditMode, globalcontext, am, medit,
+    createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit signals/slots"), m_toolActionIds.back(),
                          EditModeSignalsSlotEditor, QLatin1String("signalslottool.png"), tr("F4"));
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.BuddyEditor"));
-    createEditModeAction(m_actionGroupEditMode, globalcontext, am, medit,
+    createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit buddies"), m_toolActionIds.back(),
                          EditModeBuddyEditor, QLatin1String("buddytool.png"));
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.TabOrderEditor"));
-    createEditModeAction(m_actionGroupEditMode, globalcontext, am, medit,
+    createEditModeAction(m_actionGroupEditMode, m_contexts, am, medit,
                          tr("Edit tab order"),  m_toolActionIds.back(),
                          EditModeTabOrderEditor, QLatin1String("tabordertool.png"));
 
     //tool actions
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutHorizontally"));
     const QString horizLayoutShortcut = osMac ? tr("Meta+H") : tr("Ctrl+H");
-    addToolAction(m_fwm->actionHorizontalLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionHorizontalLayout(), am, m_contexts,
                   m_toolActionIds.back(), mformtools, horizLayoutShortcut);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutVertically"));
     const QString vertLayoutShortcut = osMac ? tr("Meta+L") : tr("Ctrl+L");
-    addToolAction(m_fwm->actionVerticalLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionVerticalLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, vertLayoutShortcut);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.SplitHorizontal"));
-    addToolAction(m_fwm->actionSplitHorizontal(), am, globalcontext,
+    addToolAction(m_fwm->actionSplitHorizontal(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.SplitVertical"));
-    addToolAction(m_fwm->actionSplitVertical(), am, globalcontext,
+    addToolAction(m_fwm->actionSplitVertical(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutForm"));
-    addToolAction(m_fwm->actionFormLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionFormLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutGrid"));
     const QString gridShortcut = osMac ? tr("Meta+G") : tr("Ctrl+G");
-    addToolAction(m_fwm->actionGridLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionGridLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, gridShortcut);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutBreak"));
-    addToolAction(m_fwm->actionBreakLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionBreakLayout(), am, m_contexts,
                   m_toolActionIds.back(), mformtools);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.LayoutAdjustSize"));
     const QString adjustShortcut = osMac ? tr("Meta+J") : tr("Ctrl+J");
-    addToolAction(m_fwm->actionAdjustSize(), am, globalcontext,
+    addToolAction(m_fwm->actionAdjustSize(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools, adjustShortcut);
 
     m_toolActionIds.push_back(QLatin1String("FormEditor.SimplifyLayout"));
-    addToolAction(m_fwm->actionSimplifyLayout(), am, globalcontext,
+    addToolAction(m_fwm->actionSimplifyLayout(), am, m_contexts,
                   m_toolActionIds.back(),  mformtools);
 
     createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator1"));
 
-    addToolAction(m_fwm->actionLower(), am, globalcontext,
+    addToolAction(m_fwm->actionLower(), am, m_contexts,
                   QLatin1String("FormEditor.Lower"), mformtools);
 
-    addToolAction(m_fwm->actionRaise(), am, globalcontext,
+    addToolAction(m_fwm->actionRaise(), am, m_contexts,
                   QLatin1String("FormEditor.Raise"), mformtools);
 
     // Commands that do not go into the editor toolbar
-    createSeparator(this, am, globalcontext, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator2"));
+    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator2"));
 
     m_actionPreview = m_fwm->actionDefaultPreview();
     QTC_ASSERT(m_actionPreview, return);
-    addToolAction(m_actionPreview,  am,  globalcontext,
+    addToolAction(m_actionPreview,  am,  m_contexts,
                    QLatin1String("FormEditor.Preview"), mformtools, tr("Ctrl+Alt+R"));
 
     // Preview in style...
@@ -524,19 +519,19 @@ void FormEditorW::setupActions()
     // Form settings
     createSeparator(this, am, m_contexts,  medit, QLatin1String("FormEditor.Edit.Separator2"), Core::Constants::G_EDIT_OTHER);
 
-    createSeparator(this, am, globalcontext, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator3"));
+    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator3"));
     QAction *actionFormSettings = m_fwm->actionShowFormWindowSettingsDialog();
-    addToolAction(actionFormSettings, am, globalcontext, QLatin1String("FormEditor.FormSettings"), mformtools);
+    addToolAction(actionFormSettings, am, m_contexts, QLatin1String("FormEditor.FormSettings"), mformtools);
 
-    createSeparator(this, am, globalcontext, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator4"));
+    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.Separator4"));
     m_actionAboutPlugins = new QAction(tr("About Qt Designer plugins...."), this);
-    addToolAction(m_actionAboutPlugins,  am,  globalcontext,
+    addToolAction(m_actionAboutPlugins,  am,  m_contexts,
                    QLatin1String("FormEditor.AboutPlugins"), mformtools);
     connect(m_actionAboutPlugins,  SIGNAL(triggered()), m_fwm, SLOT(aboutPlugins()));
     m_actionAboutPlugins->setEnabled(false);
 
     // Views. Populated later on.
-    createSeparator(this, am, globalcontext, mformtools, QLatin1String("FormEditor.Menu.Tools.SeparatorViews"));
+    createSeparator(this, am, m_contexts, mformtools, QLatin1String("FormEditor.Menu.Tools.SeparatorViews"));
 
     m_viewMenu = am->createMenu(QLatin1String(M_FORMEDITOR_VIEWS));
     m_viewMenu->menu()->setTitle(tr("Views"));
@@ -639,6 +634,7 @@ QAction *FormEditorW::createEditModeAction(QActionGroup *ag,
     if (!iconName.isEmpty())
          rc->setIcon(designerIcon(iconName));
     Core::Command *command = am->registerAction(rc, name, context);
+    command->setAttribute(Core::Command::CA_Hide);
     if (!keySequence.isEmpty())
         command->setDefaultKeySequence(QKeySequence(keySequence));
     bindShortcut(command, rc);
@@ -715,12 +711,6 @@ void FormEditorW::currentEditorChanged(Core::IEditor *editor)
         QTC_ASSERT(fw, return)
         m_editorWidget->setVisibleEditor(xmlEditor);
         m_fwm->setActiveFormWindow(fw->formWindow());
-        m_actionGroupEditMode->setVisible(true);
-        m_modeActionSeparator->setVisible(true);
-    } else {
-        // Deactivate Designer if a non-form is being edited
-        m_actionGroupEditMode->setVisible(false);
-        m_modeActionSeparator->setVisible(false);
     }
 }
 
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index e7cd5fb2175f9d8e663f037a407bcc4eba1afab1..99cf54933bcdc75174c638d1485bd92a7a95dd41 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -303,7 +303,7 @@ void BauhausPlugin::extensionsInitialized()
     m_mimeTypes << "application/x-qml" << "application/javascript"
                 << "application/x-javascript" << "text/javascript";
 
-    m_designMode->registerDesignWidget(m_mainWidget, m_mimeTypes);
+    m_designMode->registerDesignWidget(m_mainWidget, m_mimeTypes, m_context->context());
     connect(m_designMode, SIGNAL(actionsUpdated(Core::IEditor*)), SLOT(updateActions(Core::IEditor*)));
 }