diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index 34473c5ebb55755dc36dd8734d5dbc60ddbf1336..37d48741d5cb3f563e41e7eff99c98e02658fc76 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -41,6 +41,7 @@
 #include <coreplugin/icorelistener.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <extensionsystem/pluginmanager.h>
+#include <utils/qtcassert.h>
 
 #include <QtCore/QPair>
 #include <QtCore/QFileInfo>
@@ -87,7 +88,6 @@ struct DesignEditorInfo {
     int widgetIndex;
     QStringList mimeTypes;
     QList<int> context;
-    bool preferredMode;
     QWidget *widget;
 };
 
@@ -181,13 +181,11 @@ QStringList DesignMode::registeredMimeTypes() const
   */
 void DesignMode::registerDesignWidget(QWidget *widget,
                                       const QStringList &mimeTypes,
-                                      const QList<int> &context,
-                                      bool preferDesignMode)
+                                      const QList<int> &context)
 {
     int index = d->m_stackWidget->addWidget(widget);
 
     DesignEditorInfo *info = new DesignEditorInfo;
-    info->preferredMode = preferDesignMode;
     info->mimeTypes = mimeTypes;
     info->context = context;
     info->widgetIndex = index;
@@ -209,8 +207,10 @@ void DesignMode::unregisterDesignWidget(QWidget *widget)
 // if editor changes, check if we have valid mimetype registered.
 void DesignMode::currentEditorChanged(Core::IEditor *editor)
 {
+    if (d->m_currentEditor.data() == editor)
+        return;
+
     bool mimeEditorAvailable = false;
-    bool modeActivated = false;
     Core::ICore *core = Core::ICore::instance();
 
     if (editor && editor->file()) {
@@ -227,10 +227,6 @@ void DesignMode::currentEditorChanged(Core::IEditor *editor)
                     setActiveContext(editorInfo->context);
                     mimeEditorAvailable = true;
                     setEnabled(true);
-                    if (editorInfo->preferredMode && core->modeManager()->currentMode() != this) {
-                        core->modeManager()->activateMode(Constants::MODE_DESIGN);
-                        modeActivated = true;
-                    }
                     break;
                 }
             }
@@ -238,29 +234,24 @@ void DesignMode::currentEditorChanged(Core::IEditor *editor)
                 break;
         }
     }
+    if (d->m_currentEditor)
+        disconnect(d->m_currentEditor.data(), SIGNAL(changed()), this, SLOT(updateActions()));
+
     if (!mimeEditorAvailable) {
         setActiveContext(QList<int>());
         setEnabled(false);
-    }
-
-    if (!mimeEditorAvailable && core->modeManager()->currentMode() == this)
-    {
-        // switch back to edit mode - we don't want to be here
-        core->modeManager()->activateMode(Constants::MODE_EDIT);
-    }
+        d->m_currentEditor = QWeakPointer<Core::IEditor>();
+        emit actionsUpdated(d->m_currentEditor.data());
 
-    if (d->m_currentEditor.data() == editor)
-        return;
-
-    if (d->m_currentEditor)
-        disconnect(d->m_currentEditor.data(), SIGNAL(changed()), this, SLOT(updateActions()));
+        QTC_ASSERT(core->modeManager()->currentMode() != this, core->modeManager()->activateMode(Constants::MODE_EDIT));
+    } else {
+        d->m_currentEditor = QWeakPointer<Core::IEditor>(editor);
 
-    d->m_currentEditor = QWeakPointer<Core::IEditor>(editor);
+        if (d->m_currentEditor)
+            connect(d->m_currentEditor.data(), SIGNAL(changed()), this, SLOT(updateActions()));
 
-    if (d->m_currentEditor)
-        connect(d->m_currentEditor.data(), SIGNAL(changed()), this, SLOT(updateActions()));
-
-    emit actionsUpdated(d->m_currentEditor.data());
+        emit actionsUpdated(d->m_currentEditor.data());
+    }
 }
 
 void DesignMode::updateActions()
diff --git a/src/plugins/coreplugin/designmode.h b/src/plugins/coreplugin/designmode.h
index eaeecd99323e7a3efafca89ad46ae7ce74241f42..03da5f61dee03258aad111f0b71d4c835c9c820f 100644
--- a/src/plugins/coreplugin/designmode.h
+++ b/src/plugins/coreplugin/designmode.h
@@ -59,8 +59,7 @@ public:
 
     void registerDesignWidget(QWidget *widget,
                               const QStringList &mimeTypes,
-                              const QList<int> &context,
-                              bool preferDesignMode = false);
+                              const QList<int> &context);
     void unregisterDesignWidget(QWidget *widget);
 
     QStringList registeredMimeTypes() const;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index d78c62913a9904f6cb76344435635c8060981e52..048e8a57c5c337ab99a200d248329980d0500378 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -979,7 +979,6 @@ Core::IEditor *EditorManager::activateEditor(Core::Internal::EditorView *view, C
         if (isVisible())
             editor->widget()->setFocus();
     }
-    emit currentEditorChanged(editor);
     return editor;
 }