diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp
index 919b5b2a10cdd85db49e5ade9387f071448e4090..5101e2085478ae8768211e5b6ab9ad2a60f09399 100644
--- a/src/plugins/analyzerbase/analyzermanager.cpp
+++ b/src/plugins/analyzerbase/analyzermanager.cpp
@@ -102,7 +102,6 @@ public:
         setIcon(QIcon(QLatin1String(":/images/analyzer_mode.png")));
         setPriority(P_MODE_ANALYZE);
         setId(MODE_ANALYZE);
-        setType(MODE_EDIT_TYPE);
     }
 
     ~AnalyzerMode()
diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp
index ebf104bc97557ff08d7d542699b01a0822337adb..3614e74529b54eebb3c5f7597604c0effee16861 100644
--- a/src/plugins/bazaar/bazaarplugin.cpp
+++ b/src/plugins/bazaar/bazaarplugin.cpp
@@ -540,9 +540,7 @@ void BazaarPlugin::showCommitWidget(const QList<VcsBase::VcsBaseClient::StatusIt
         return;
     }
 
-    Core::IEditor *editor = Core::EditorManager::openEditor(saver.fileName(),
-                                                            Constants::COMMIT_ID,
-                                                            Core::EditorManager::ModeSwitch);
+    Core::IEditor *editor = Core::EditorManager::openEditor(saver.fileName(), Constants::COMMIT_ID);
     if (!editor) {
         outputWindow->appendError(tr("Unable to create an editor for the commit."));
         return;
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index d7614bf67ecb6e7a85cd913e06ca6ca8dfdc78d3..ee881e3e4b4df6471aae61fc3c441bb30496a40d 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -687,9 +687,7 @@ QString ClearCasePlugin::ccGetFileActivity(const QString &workingDir, const QStr
 ClearCaseSubmitEditor *ClearCasePlugin::openClearCaseSubmitEditor(const QString &fileName, bool isUcm)
 {
     Core::IEditor *editor =
-            Core::EditorManager::openEditor(fileName,
-                                                        Constants::CLEARCASECHECKINEDITOR_ID,
-                                                        Core::EditorManager::ModeSwitch);
+            Core::EditorManager::openEditor(fileName, Constants::CLEARCASECHECKINEDITOR_ID);
     ClearCaseSubmitEditor *submitEditor = qobject_cast<ClearCaseSubmitEditor*>(editor);
     QTC_CHECK(submitEditor);
     submitEditor->registerActions(m_submitUndoAction, m_submitRedoAction, m_checkInSelectedAction, m_checkInDiffAction);
@@ -932,7 +930,7 @@ void ClearCasePlugin::ccDiffWithPred(const QString &workingDir, const QStringLis
         // Show in the same editor if diff has been executed before
         if (Core::IEditor *existingEditor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
             existingEditor->createNew(result);
-            Core::EditorManager::activateEditor(existingEditor, Core::EditorManager::ModeSwitch);
+            Core::EditorManager::activateEditor(existingEditor);
             setDiffBaseDirectory(existingEditor, workingDir);
             return;
         }
@@ -1192,7 +1190,7 @@ void ClearCasePlugin::history(const QString &workingDir,
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(response.stdOut);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cc history %1").arg(id);
         const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, files);
@@ -1305,7 +1303,7 @@ void ClearCasePlugin::vcsAnnotate(const QString &workingDir, const QString &file
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(res);
         VcsBase::VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cc annotate %1").arg(id);
         Core::IEditor *newEditor = showOutputInEditor(title, res, VcsBase::AnnotateOutput, source, codec);
@@ -1341,7 +1339,7 @@ void ClearCasePlugin::describe(const QString &source, const QString &changeNr)
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::DiffOutput, source, QStringList(), changeNr);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(description);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cc describe %1").arg(id);
         Core::IEditor *newEditor = showOutputInEditor(title, description, VcsBase::DiffOutput, source, codec);
@@ -1413,7 +1411,7 @@ Core::IEditor *ClearCasePlugin::showOutputInEditor(const QString& title, const Q
     if (codec)
         e->setCodec(codec);
     Core::IEditor *ie = e->editor();
-    Core::EditorManager::activateEditor(ie, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(ie);
     return ie;
 }
 
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index cd6bbc1441af40ead4a40a3599b43ac82ca88caa..d0c9d91718f624041dd06571c52a4dde18df3995 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -650,7 +650,7 @@ bool BaseFileWizard::postGenerateOpenEditors(const GeneratedFiles &l, QString *e
 {
     foreach (const Core::GeneratedFile &file, l) {
         if (file.attributes() & Core::GeneratedFile::OpenEditorAttribute) {
-            if (!Core::EditorManager::openEditor(file.path(), file.editorId(), Core::EditorManager::ModeSwitch )) {
+            if (!Core::EditorManager::openEditor(file.path(), file.editorId())) {
                 if (errorMessage)
                     *errorMessage = tr("Failed to open an editor for '%1'.").arg(QDir::toNativeSeparators(file.path()));
                 return false;
diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index 47f173495469519f981ddbb028ef42499f2a2444..a591d995fc677e74056ef20d9198c37f12b78132 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -120,7 +120,6 @@ DesignMode::DesignMode()
     setIcon(QIcon(QLatin1String(":/fancyactionbar/images/mode_Design.png")));
     setPriority(Constants::P_MODE_DESIGN);
     setId(Constants::MODE_DESIGN);
-    setType(Constants::MODE_DESIGN_TYPE);
 
     ExtensionSystem::PluginManager::addObject(d->m_coreListener);
 
diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp
index cee77d0225ae3f677f0730060d2242d148bb2bf2..72297973940999e0ff6ee65819b0874465982d02 100644
--- a/src/plugins/coreplugin/documentmanager.cpp
+++ b/src/plugins/coreplugin/documentmanager.cpp
@@ -1382,7 +1382,7 @@ void DocumentManager::executeOpenWithMenuAction(QAction *action)
                 return;
         }
 
-        EditorManager::openEditor(entry.fileName, entry.editorFactory->id(), EditorManager::ModeSwitch);
+        EditorManager::openEditor(entry.fileName, entry.editorFactory->id());
         return;
     }
     if (entry.externalEditor)
diff --git a/src/plugins/coreplugin/editmode.cpp b/src/plugins/coreplugin/editmode.cpp
index 77ddd25ae720cba9d527bd607a9a6188a1f3dfe9..1a6072e978d6608385e9d2939d209f2f5f3071dd 100644
--- a/src/plugins/coreplugin/editmode.cpp
+++ b/src/plugins/coreplugin/editmode.cpp
@@ -55,7 +55,6 @@ EditMode::EditMode() :
     setIcon(QIcon(QLatin1String(":/fancyactionbar/images/mode_Edit.png")));
     setPriority(Constants::P_MODE_EDIT);
     setId(Constants::MODE_EDIT);
-    setType(Constants::MODE_EDIT_TYPE);
 
     m_rightSplitWidgetLayout->setSpacing(0);
     m_rightSplitWidgetLayout->setMargin(0);
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 4101fba001aeaf41b148a5aec99a18e16966d4d7..47f64a2d60d5aa3dcc6e220e82bf1a429ec4fc97 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -698,15 +698,15 @@ void EditorManager::splitNewWindow(Internal::EditorView *view)
     context->setContext(Context(Constants::C_EDITORMANAGER));
     context->setWidget(splitter);
     ICore::addContextObject(context);
+    m_instance->d->m_root.append(splitter);
+    m_instance->d->m_rootContext.append(context);
+    connect(splitter, SIGNAL(destroyed(QObject*)), m_instance, SLOT(rootDestroyed(QObject*)));
     splitter->show();
     ICore::raiseWindow(splitter);
     if (newEditor)
         m_instance->activateEditor(splitter->view(), newEditor, IgnoreNavigationHistory);
     else
         splitter->view()->setFocus();
-    m_instance->d->m_root.append(splitter);
-    m_instance->d->m_rootContext.append(context);
-    connect(splitter, SIGNAL(destroyed(QObject*)), m_instance, SLOT(rootDestroyed(QObject*)));
     m_instance->updateActions();
 }
 
@@ -1049,15 +1049,15 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
         if (!newCurrent)
             newCurrent = pickUnusedEditor();
         if (newCurrent) {
-            activateEditor(view, newCurrent, NoActivate);
+            activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
         } else {
             QModelIndex idx = d->m_editorModel->firstRestoredEditor();
             if (idx.isValid()) {
-                activateEditorForIndex(view, idx, NoActivate);
+                activateEditorForIndex(view, idx, DoNotChangeCurrentEditor);
             } else {
                 const QList<IEditor *> editors = d->m_editorModel->editors();
                 if (!editors.isEmpty())
-                    activateEditor(view, editors.last(), NoActivate);
+                    activateEditor(view, editors.last(), DoNotChangeCurrentEditor);
             }
         }
     }
@@ -1112,11 +1112,11 @@ void EditorManager::closeDuplicate(Core::IEditor *editor)
         if (!newCurrent)
             newCurrent = pickUnusedEditor();
         if (newCurrent) {
-            activateEditor(view, newCurrent, NoActivate);
+            activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
         } else {
             QModelIndex idx = d->m_editorModel->firstRestoredEditor();
             if (idx.isValid())
-                activateEditorForIndex(view, idx, NoActivate);
+                activateEditorForIndex(view, idx, DoNotChangeCurrentEditor);
         }
     }
 
@@ -1221,13 +1221,22 @@ Core::IEditor *EditorManager::activateEditor(Core::Internal::EditorView *view, C
 
     editor = placeEditor(view, editor);
 
-    if (!(flags & NoActivate)) {
+    if (!(flags & DoNotChangeCurrentEditor)) {
         setCurrentEditor(editor, (flags & IgnoreNavigationHistory));
-        if (flags & ModeSwitch)
-            switchToPreferedMode();
-        if (isVisible()) {
-            editor->widget()->setFocus();
-            ICore::raiseWindow(editor->widget());
+        if (!(flags & DoNotMakeVisible)) {
+            // switch to design mode?
+            if (editor->isDesignModePreferred()) {
+                ModeManager::activateMode(Core::Constants::MODE_DESIGN);
+                ModeManager::setFocusToCurrentMode();
+            } else {
+                int rootIndex;
+                findRoot(view, &rootIndex);
+                if (rootIndex == 0) // main window --> we might need to switch mode
+                    if (!editor->widget()->isVisible())
+                        ModeManager::activateMode(Core::Constants::MODE_EDIT);
+                editor->widget()->setFocus();
+                ICore::raiseWindow(editor->widget());
+            }
         }
     }
     return editor;
@@ -1572,22 +1581,6 @@ QStringList EditorManager::getOpenFileNames() const
 }
 
 
-/// Empty mode == figure out the correct mode from the editor
-/// forcePrefered = true, switch to the mode even if the editor is visible in another mode
-/// forcePrefered = false, only switch if it is not visible
-void EditorManager::switchToPreferedMode()
-{
-    Id preferedMode;
-    // Figure out preferred mode for editor
-    if (d->m_currentEditor)
-        preferedMode = d->m_currentEditor->preferredModeType();
-
-    if (!preferedMode.isValid())
-        preferedMode = Id(Constants::MODE_EDIT_TYPE);
-
-    ModeManager::activateModeType(preferedMode);
-}
-
 IEditor *EditorManager::openEditorWithContents(const Id &editorId,
                                         QString *titlePattern,
                                         const QString &contents)
@@ -2191,7 +2184,7 @@ bool EditorManager::restoreState(const QByteArray &state)
                 continue;
             QFileInfo rfi(autoSaveName(fileName));
             if (rfi.exists() && fi.lastModified() < rfi.lastModified())
-                openEditor(fileName, id);
+                openEditor(fileName, id, DoNotMakeVisible);
             else
                 d->m_editorModel->addRestoredEditor(fileName, displayName, id);
         }
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index b3bae535e4afbb11c562224bccecc9f44093bac4..38cb29cf88804aec5802c3539e7db394c5a39199 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -107,9 +107,9 @@ public:
     static EditorToolBar *createToolBar(QWidget *parent = 0);
 
     enum OpenEditorFlag {
-        NoActivate = 1,
+        DoNotChangeCurrentEditor = 1,
         IgnoreNavigationHistory = 2,
-        ModeSwitch = 4,
+        DoNotMakeVisible = 4,
         CanContainLineNumber = 8,
         OpenInOtherSplit = 16
     };
@@ -278,7 +278,6 @@ private:
     static void splitNewWindow(Internal::EditorView *view);
     IEditor *pickUnusedEditor() const;
     void addDocumentToRecentFiles(IDocument *document);
-    void switchToPreferedMode();
     void updateAutoSave();
     void setCloseSplitEnabled(Internal::SplitterOrView *splitterOrView, bool enable);
     void updateMakeWritableWarning();
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index 30cbb9c0233dfb163835f0e76f4b550e4e66a182..6bd6009b3d23f8864e58a647c66ef0e89714dbea 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -299,7 +299,7 @@ IEditor *EditorView::currentEditor() const
 void EditorView::listSelectionActivated(int index)
 {
     QAbstractItemModel *model = EditorManager::instance()->openedEditorsModel();
-    EditorManager::instance()->activateEditorForIndex(this, model->index(index, 0), Core::EditorManager::ModeSwitch);
+    EditorManager::instance()->activateEditorForIndex(this, model->index(index, 0));
 }
 
 void EditorView::splitHorizontally()
@@ -465,11 +465,11 @@ void EditorView::goBackInNavigationHistory()
         IEditor *editor = 0;
         if (location.document) {
             editor = em->activateEditorForDocument(this, location.document,
-                                        EditorManager::IgnoreNavigationHistory | EditorManager::ModeSwitch);
+                                        EditorManager::IgnoreNavigationHistory);
         }
         if (!editor) {
             editor = em->openEditor(this, location.fileName, location.id,
-                                    EditorManager::IgnoreNavigationHistory | EditorManager::ModeSwitch);
+                                    EditorManager::IgnoreNavigationHistory);
             if (!editor) {
                 m_navigationHistory.removeAt(m_currentNavigationHistoryPosition);
                 continue;
@@ -492,7 +492,7 @@ void EditorView::goForwardInNavigationHistory()
     IEditor *editor = 0;
     if (location.document) {
         editor = em->activateEditorForDocument(this, location.document,
-                                    EditorManager::IgnoreNavigationHistory | EditorManager::ModeSwitch);
+                                    EditorManager::IgnoreNavigationHistory);
     }
     if (!editor) {
         editor = em->openEditor(this, location.fileName, location.id, EditorManager::IgnoreNavigationHistory);
@@ -784,13 +784,13 @@ void SplitterOrView::restoreState(const QByteArray &state)
         if (!QFile::exists(fileName))
             return;
         IEditor *e = em->openEditor(view(), fileName, Id::fromString(id), Core::EditorManager::IgnoreNavigationHistory
-                                    | Core::EditorManager::NoActivate);
+                                    | Core::EditorManager::DoNotChangeCurrentEditor);
 
         if (!e) {
             QModelIndex idx = em->openedEditorsModel()->firstRestoredEditor();
             if (idx.isValid())
                 em->activateEditorForIndex(view(), idx, Core::EditorManager::IgnoreNavigationHistory
-                                    | Core::EditorManager::NoActivate);
+                                    | Core::EditorManager::DoNotChangeCurrentEditor);
         }
 
         if (e) {
diff --git a/src/plugins/coreplugin/editormanager/ieditor.h b/src/plugins/coreplugin/editormanager/ieditor.h
index d4203131362ab3ac6e5d330d913c5fd6074554ca..f2c64f7a9bdd4c98709db98a6e42cd543e60843f 100644
--- a/src/plugins/coreplugin/editormanager/ieditor.h
+++ b/src/plugins/coreplugin/editormanager/ieditor.h
@@ -68,7 +68,7 @@ public:
 
     virtual QWidget *toolBar() = 0;
 
-    virtual Id preferredModeType() const { return Id(); }
+    virtual bool isDesignModePreferred() const { return false; }
 
 signals:
     void changed();
diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
index 9a4624684660a0f3f351279fb9cd58040bd02d7f..0b6dacba5bd959fc60b87c2b76af91b7a27b54c4 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
@@ -189,7 +189,7 @@ void OpenEditorsWidget::handleClicked(const QModelIndex &index)
 void OpenEditorsWidget::activateEditor(const QModelIndex &index)
 {
     selectionModel()->select(index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
-    EditorManager::instance()->activateEditorForIndex(index, EditorManager::ModeSwitch);
+    EditorManager::instance()->activateEditorForIndex(index);
 }
 
 void OpenEditorsWidget::closeEditor(const QModelIndex &index)
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index e7caecf71116aa4bebc64da6a9125d0c0851a65b..1367c799a5a407085c73aa1fcb1c0888ae2b2dba 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -225,11 +225,10 @@ void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item)
         return;
     if (IDocument *document = item->data(0, Qt::UserRole).value<IDocument*>()) {
         EditorView *view = item->data(0, Qt::UserRole+1).value<EditorView*>();
-        EditorManager::instance()->activateEditorForDocument(view, document, EditorManager::ModeSwitch);
+        EditorManager::instance()->activateEditorForDocument(view, document);
     } else {
         if (!EditorManager::openEditor(
-                    item->toolTip(0), item->data(0, Qt::UserRole+2).value<Core::Id>(),
-                    Core::EditorManager::ModeSwitch)) {
+                    item->toolTip(0), item->data(0, Qt::UserRole+2).value<Core::Id>())) {
             EditorManager::instance()->openedEditorsModel()->removeEditor(item->toolTip(0));
             delete item;
         }
diff --git a/src/plugins/coreplugin/editortoolbar.cpp b/src/plugins/coreplugin/editortoolbar.cpp
index 900f370e297f5838847654bcadd64b0c0a4fdffe..9fd7e2ca82867aca7790b3a8b39bc1afcd6c8748 100644
--- a/src/plugins/coreplugin/editortoolbar.cpp
+++ b/src/plugins/coreplugin/editortoolbar.cpp
@@ -311,7 +311,7 @@ void EditorToolBar::changeActiveEditor(int row)
 {
     EditorManager *em = ICore::editorManager();
     QAbstractItemModel *model = d->m_editorList->model();
-    em->activateEditorForIndex(model->index(row, 0), EditorManager::ModeSwitch);
+    em->activateEditorForIndex(model->index(row, 0));
 }
 
 void EditorToolBar::listContextMenu(QPoint pos)
diff --git a/src/plugins/coreplugin/imode.h b/src/plugins/coreplugin/imode.h
index 232b0bf51f081ac668c040b03cbf5324e7d22fb9..ea9de058a22ffc21fa0e01f5caff16c24f998099 100644
--- a/src/plugins/coreplugin/imode.h
+++ b/src/plugins/coreplugin/imode.h
@@ -49,7 +49,6 @@ public:
     QIcon icon() const { return m_icon; }
     int priority() const { return m_priority; }
     Id id() const { return m_id; }
-    Id type() const { return m_type; }
     bool isEnabled() const;
 
     void setEnabled(bool enabled);
@@ -57,7 +56,6 @@ public:
     void setIcon(const QIcon &icon) { m_icon = icon; }
     void setPriority(int priority) { m_priority = priority; }
     void setId(Id id) { m_id = id; }
-    void setType(Id type) { m_type = type; }
 
 signals:
     void enabledStateChanged(bool enabled);
@@ -67,7 +65,6 @@ private:
     QIcon m_icon;
     int m_priority;
     Id m_id;
-    Id m_type;
     bool m_isEnabled;
 };
 
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 64f90435a62a628e524e1a209f70c1f0621270b6..6ae0d92318d3c52a6dd6b201763d46ccbe840151 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -861,8 +861,6 @@ IDocument *MainWindow::openFiles(const QStringList &fileNames, ICore::OpenFilesF
             }
         } else {
             QFlags<EditorManager::OpenEditorFlag> emFlags;
-            if (flags & ICore::SwitchMode)
-                emFlags = EditorManager::ModeSwitch;
             if (flags & ICore::CanContainLineNumbers)
                 emFlags |=  EditorManager::CanContainLineNumber;
             IEditor *editor = EditorManager::openEditor(absoluteFilePath, Id(), emFlags);
@@ -1005,7 +1003,7 @@ void MainWindow::openFileWith()
         if (isExternal)
             EditorManager::openExternalEditor(fileName, editorId);
         else
-            EditorManager::openEditor(fileName, editorId, Core::EditorManager::ModeSwitch);
+            EditorManager::openEditor(fileName, editorId);
     }
 }
 
@@ -1289,7 +1287,7 @@ void MainWindow::openRecentFile()
 {
     if (const QAction *action = qobject_cast<const QAction*>(sender())) {
         const DocumentManager::RecentFile file = action->data().value<DocumentManager::RecentFile>();
-        EditorManager::openEditor(file.first, file.second, EditorManager::ModeSwitch);
+        EditorManager::openEditor(file.first, file.second);
     }
 }
 
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 894d3af0575040b5895c6519062165d75bb08453..b278f08c48f0331935281e4defdd2ec7b70a7f66 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -150,21 +150,6 @@ IMode *ModeManager::mode(Id id)
     return 0;
 }
 
-void ModeManager::activateModeType(Id type)
-{
-    if (currentMode() && currentMode()->type() == type)
-        return;
-    int index = -1;
-    for (int i = 0; i < d->m_modes.count(); ++i) {
-        if (d->m_modes.at(i)->type() == type) {
-            index = i;
-            break;
-        }
-    }
-    if (index != -1)
-        d->m_modeStack->setCurrentIndex(index);
-}
-
 void ModeManager::slotActivateMode(int id)
 {
     m_instance->activateMode(Id::fromUniqueIdentifier(id));
@@ -333,10 +318,10 @@ void ModeManager::setFocusToCurrentMode()
     QWidget *widget = mode->widget();
     if (widget) {
         QWidget *focusWidget = widget->focusWidget();
-        if (focusWidget)
-            focusWidget->setFocus();
-        else
-            widget->setFocus();
+        if (!focusWidget)
+            focusWidget = widget;
+        focusWidget->setFocus();
+        ICore::raiseWindow(focusWidget);
     }
 }
 
diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h
index caf17cada03250c1d38024e73141d680c21c1967..f053f98d9f6ae037e83472679455342808f2ae28 100644
--- a/src/plugins/coreplugin/modemanager.h
+++ b/src/plugins/coreplugin/modemanager.h
@@ -65,7 +65,6 @@ public:
     static void addProjectSelector(QAction *action);
     static void addWidget(QWidget *widget);
 
-    static void activateModeType(Id type);
     static void activateMode(Id id);
     static void setFocusToCurrentMode();
     static bool isModeSelectorVisible();
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index 2d1409c5e9b70eede0698bc8da174ca72db861ca..12102111d1ba0ab31a6957912226c8f5e43c1a0d 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -380,7 +380,7 @@ void CodepasterPlugin::finishFetch(const QString &titleDescription,
     const QString fileName = saver.fileName();
     m_fetchedSnippets.push_back(fileName);
     // Open editor with title.
-    Core::IEditor *editor = EditorManager::openEditor(fileName, Core::Id(), EditorManager::ModeSwitch);
+    Core::IEditor *editor = EditorManager::openEditor(fileName);
     QTC_ASSERT(editor, return);
     editor->setDisplayName(titleDescription);
 }
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index e49af606fa7ee6fe03d71c1302ff1248fd5d0322..ae80aa425ed09d8a8b2b3a587ed4f6c2fdbf310a 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1992,7 +1992,7 @@ bool CPPEditorWidget::openCppEditorAt(const Link &link, bool inNextSplit)
     if (!link.hasValidTarget())
         return false;
 
-    Core::EditorManager::OpenEditorFlags flags = Core::EditorManager::ModeSwitch;
+    Core::EditorManager::OpenEditorFlags flags;
     if (inNextSplit)
         flags |= Core::EditorManager::OpenInOtherSplit;
     return Core::EditorManager::openEditorAt(link.targetFileName,
diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
index b26042d0a683544a2df61de9d85af91cf8327e01..e7aa07ac901db6dbc2000186e02a70bf3fea5413 100644
--- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
+++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp
@@ -110,8 +110,7 @@ QList<Locator::FilterEntry> CppCurrentDocumentFilter::matchesFor(QFutureInterfac
 void CppCurrentDocumentFilter::accept(Locator::FilterEntry selection) const
 {
     ModelItemInfo info = qvariant_cast<CppTools::ModelItemInfo>(selection.internalData);
-    Core::EditorManager::openEditorAt(info.fileName, info.line, info.column,
-                                      Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditorAt(info.fileName, info.line, info.column);
 }
 
 void CppCurrentDocumentFilter::refresh(QFutureInterface<void> &future)
diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp
index c0ebe30a330fa9be5db2d341e007c37a0200cd6e..1c0c49904d91fe465ef15c53c3f63befc8eacc45 100644
--- a/src/plugins/cpptools/cppfilesettingspage.cpp
+++ b/src/plugins/cpptools/cppfilesettingspage.cpp
@@ -305,8 +305,7 @@ void CppFileSettingsWidget::slotEdit()
         setLicenseTemplatePath(path);
     }
     // Edit (now) existing file with C++
-    Core::EditorManager::openEditor(path, CppEditor::Constants::CPPEDITOR_ID,
-                                    Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditor(path, CppEditor::Constants::CPPEDITOR_ID);
 }
 
 // --------------- CppFileSettingsPage
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index f27d92081d2b00b1d7c709107da365ae8322747b..bcf590c0d9f13fa9d9e5e05786d0eb44f27c5c58 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -510,12 +510,9 @@ void CppFindReferences::openEditor(const Find::SearchResultItem &item)
 {
     if (item.path.size() > 0) {
         Core::EditorManager::openEditorAt(QDir::fromNativeSeparators(item.path.first()),
-                                              item.lineNumber, item.textMarkPos,
-                                              Core::Id(),
-                                              Core::EditorManager::ModeSwitch);
+                                              item.lineNumber, item.textMarkPos);
     } else {
-        Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text),
-                                        Core::Id(), Core::EditorManager::ModeSwitch);
+        Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text));
     }
 }
 
diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp
index e2ea80f0d2fbab824d8bea7eb0ca851a66a62eef..0117a7d98121cd246b24b8bc3fe4a27c81547a47 100644
--- a/src/plugins/cpptools/cpplocatorfilter.cpp
+++ b/src/plugins/cpptools/cpplocatorfilter.cpp
@@ -177,8 +177,7 @@ QList<Locator::FilterEntry> CppLocatorFilter::matchesFor(QFutureInterface<Locato
 void CppLocatorFilter::accept(Locator::FilterEntry selection) const
 {
     ModelItemInfo info = qvariant_cast<CppTools::ModelItemInfo>(selection.internalData);
-    Core::EditorManager::openEditorAt(info.fileName, info.line, info.column,
-                                      Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditorAt(info.fileName, info.line, info.column);
 }
 
 void CppLocatorFilter::reset()
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index af579bb5a7ebaa7a908476071631050c7927fc86..93b2a804824e553ba264ade6711f63efa3ab542f 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -164,8 +164,7 @@ void CppToolsPlugin::switchHeaderSourceInNextSplit()
     QString otherFile = correspondingHeaderOrSource(
                 Core::EditorManager::currentEditor()->document()->fileName());
     if (!otherFile.isEmpty())
-        Core::EditorManager::openEditor(otherFile, Core::Id(), Core::EditorManager::OpenInOtherSplit
-                                        | Core::EditorManager::ModeSwitch);
+        Core::EditorManager::openEditor(otherFile, Core::Id(), Core::EditorManager::OpenInOtherSplit);
 }
 
 static QStringList findFilesInProject(const QString &name,
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index b3cadb5e17388e18931cf9c024921ff411fa18cb..85ffd0a65c719d1f3479df67efb1ffcd41268c7c 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -592,7 +592,7 @@ void CvsPlugin::cvsDiff(const CvsDiffParameters &p)
     const QString tag = VcsBaseEditorWidget::editorTag(DiffOutput, p.workingDir, p.files);
     if (IEditor *existingEditor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
         existingEditor->createNew(output);
-        EditorManager::activateEditor(existingEditor, EditorManager::ModeSwitch);
+        EditorManager::activateEditor(existingEditor);
         setDiffBaseDirectory(existingEditor, p.workingDir);
         return;
     }
@@ -615,8 +615,7 @@ void CvsPlugin::cvsDiff(const CvsDiffParameters &p)
 
 CvsSubmitEditor *CvsPlugin::openCVSSubmitEditor(const QString &fileName)
 {
-    IEditor *editor = EditorManager::openEditor(fileName, Constants::CVSCOMMITEDITOR_ID,
-                                                EditorManager::ModeSwitch);
+    IEditor *editor = EditorManager::openEditor(fileName, Constants::CVSCOMMITEDITOR_ID);
     CvsSubmitEditor *submitEditor = qobject_cast<CvsSubmitEditor*>(editor);
     QTC_CHECK(submitEditor);
     submitEditor->registerActions(m_submitUndoAction, m_submitRedoAction, m_submitCurrentLogAction, m_submitDiffAction);
@@ -861,7 +860,7 @@ void CvsPlugin::filelog(const QString &workingDir,
     const QString tag = VcsBaseEditorWidget::editorTag(LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(response.stdOut);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cvs log %1").arg(id);
         Core::IEditor *newEditor = showOutputInEditor(title, response.stdOut, LogOutput, source, codec);
@@ -1004,7 +1003,7 @@ void CvsPlugin::annotate(const QString &workingDir, const QString &file,
     if (IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(response.stdOut);
         VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
-        EditorManager::activateEditor(editor, EditorManager::ModeSwitch);
+        EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cvs annotate %1").arg(id);
         IEditor *newEditor = showOutputInEditor(title, response.stdOut, AnnotateOutput, source, codec);
@@ -1199,7 +1198,7 @@ bool CvsPlugin::describe(const QString &repositoryPath,
     const QString commitId = entries.front().revisions.front().commitId;
     if (IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(commitId)) {
         editor->createNew(output);
-        EditorManager::activateEditor(editor, EditorManager::ModeSwitch);
+        EditorManager::activateEditor(editor);
         setDiffBaseDirectory(editor, repositoryPath);
     } else {
         const QString title = QString::fromLatin1("cvs describe %1").arg(commitId);
@@ -1285,7 +1284,7 @@ IEditor *CvsPlugin::showOutputInEditor(const QString& title, const QString &outp
     if (codec)
         e->setCodec(codec);
     IEditor *ie = e->editor();
-    EditorManager::activateEditor(ie, EditorManager::ModeSwitch);
+    EditorManager::activateEditor(ie);
     return ie;
 }
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 4dca818a7cff5206c9061a441785499c87eb0365..aada6367c994d4164d29eb0fa98e3615a4b4a7eb 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -508,7 +508,6 @@ public:
         setIcon(QIcon(QLatin1String(":/fancyactionbar/images/mode_Debug.png")));
         setPriority(85);
         setId(MODE_DEBUG);
-        setType(CC::MODE_EDIT_TYPE);
     }
 
     ~DebugMode()
diff --git a/src/plugins/debugger/qml/qmlinspectoradapter.cpp b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
index b167f344cd37d0b4238d1d88e4e257373e507a21..20d9219b6afad05721009654bd482cfc437f89b9 100644
--- a/src/plugins/debugger/qml/qmlinspectoradapter.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
@@ -472,8 +472,7 @@ void QmlInspectorAdapter::jumpToObjectDefinitionInEditor(
 {
     const QString fileName = m_engine->toFileInProject(objSource.url());
 
-    Core::EditorManager::openEditorAt(fileName, objSource.lineNumber(),
-                                      0, Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditorAt(fileName, objSource.lineNumber());
     if (debugId != -1 && debugId != m_currentSelectedDebugId) {
         m_currentSelectedDebugId = debugId;
         m_currentSelectedDebugName = agent()->displayName(debugId);
diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp
index 5bedf6a41c431b9d89e77add1845fd433fdbfd25..e435c95cdb6a5461526f72e4a23a34bd7c7ba5fb 100644
--- a/src/plugins/designer/formeditorw.cpp
+++ b/src/plugins/designer/formeditorw.cpp
@@ -912,7 +912,7 @@ void FormEditorW::switchSourceForm()
 {
     const QString fileToOpen = otherFile();
     if (!fileToOpen.isEmpty())
-        Core::EditorManager::openEditor(fileToOpen, Core::Id(), Core::EditorManager::ModeSwitch);
+        Core::EditorManager::openEditor(fileToOpen);
 }
 
 } // namespace Internal
diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp
index 6ed794e19cbc5267d74d5ec6b49a76f24c4e4ec9..d6234089ee3427543d1f893d91ab54ca3488caa7 100644
--- a/src/plugins/designer/formwindoweditor.cpp
+++ b/src/plugins/designer/formwindoweditor.cpp
@@ -259,9 +259,9 @@ TextEditor::PlainTextEditor *FormWindowEditor::textEditor()
     return &d->m_textEditor;
 }
 
-Core::Id FormWindowEditor::preferredModeType() const
+bool FormWindowEditor::isDesignModePreferred() const
 {
-    return Core::Id(Core::Constants::MODE_DESIGN_TYPE);
+    return true;
 }
 
 } // namespace Designer
diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h
index 05f8f786fa734b6ecdb323dddfb69ba1801b28fe..a04f417d16a331dfa7e1c7cf1d0e4ba9039c9a71 100644
--- a/src/plugins/designer/formwindoweditor.h
+++ b/src/plugins/designer/formwindoweditor.h
@@ -81,7 +81,7 @@ public:
 
     virtual QWidget *toolBar();
 
-    virtual Core::Id preferredModeType() const;
+    virtual bool isDesignModePreferred() const;
 
     // For uic code model support
     QString contents() const;
diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp
index 1fbb5a9d2c34d164400178de81ad87f30d72f02e..956c1bc51d8957e51709b1c53e259165020107db 100644
--- a/src/plugins/designer/qtcreatorintegration.cpp
+++ b/src/plugins/designer/qtcreatorintegration.cpp
@@ -270,7 +270,9 @@ static Document::Ptr findDefinition(Function *functionDeclaration, int *line)
 
 static inline ITextEditor *editableAt(const QString &fileName, int line, int column)
 {
-    return qobject_cast<ITextEditor *>(Core::EditorManager::openEditorAt(fileName, line, column));
+    return qobject_cast<ITextEditor *>(Core::EditorManager::openEditorAt(fileName, line, column,
+                                                                         Core::Id(),
+                                                                         Core::EditorManager::DoNotMakeVisible));
 }
 
 static void addDeclaration(const Snapshot &snapshot,
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index 7df9f4bb4d541a08d3c14342d0a29f5ba927eab7..6ca9090f03d35275f2caab3964fb875d7724017e 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -142,7 +142,7 @@ void DiffEditorPlugin::diff()
     if (!editor)
         return;
 
-    Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(editor);
 
     DiffEditorWidget *editorWidget = editor->editorWidget();
 
diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp
index 31256f3f3ac5f6229eaac933b43fb2fb4590ad4d..4bce0b3466244f114b22a9fcc3e38da395fdf182 100644
--- a/src/plugins/diffeditor/diffeditorwidget.cpp
+++ b/src/plugins/diffeditor/diffeditorwidget.cpp
@@ -374,7 +374,7 @@ void DiffViewEditorWidget::jumpToOriginalFile(const QTextCursor &cursor)
     const QDir dir(m_workingDirectory);
     const QString fileName = dir.absoluteFilePath(it.value().fileName);
 
-    Core::IEditor *ed = Core::EditorManager::openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::IEditor *ed = Core::EditorManager::openEditor(fileName);
     if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
         editor->gotoLine(lineNr, position);
 }
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 6596c2a413127c2de4ebd8ddbf658de3af9833f3..45bcf40495ebc7ccc82cdf189028785e854fbeb8 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -816,7 +816,7 @@ VcsBase::VcsBaseEditorWidget *GitClient::findExistingVCSEditor(const char *regis
         return 0;
 
     // Exists already
-    Core::EditorManager::activateEditor(outputEditor, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(outputEditor);
     outputEditor->createNew(m_msgWait);
     rc = VcsBase::VcsBaseEditorWidget::getVcsBaseEditor(outputEditor);
 
@@ -829,7 +829,7 @@ DiffEditor::DiffEditor *GitClient::findExistingOrOpenNewDiffEditor(const char *r
     Core::IEditor *outputEditor = locateEditor(registerDynamicProperty, dynamicPropertyValue);
     if (outputEditor) {
         // Exists already
-        Core::EditorManager::activateEditor(outputEditor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(outputEditor);
         outputEditor->createNew(m_msgWait);
     }
 
@@ -840,7 +840,7 @@ DiffEditor::DiffEditor *GitClient::findExistingOrOpenNewDiffEditor(const char *r
         editor = qobject_cast<DiffEditor::DiffEditor *>(
                     Core::EditorManager::openEditorWithContents(editorId, &title, m_msgWait));
         editor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch); // should probably go outside this block
+        Core::EditorManager::activateEditor(editor); // should probably go outside this block
     }
     return editor;
 }
@@ -881,7 +881,7 @@ VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(const Core::Id &id,
     }
 
     rc->setForceReadOnly(true);
-    Core::EditorManager::activateEditor(outputEditor, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(outputEditor);
 
     if (configWidget)
         rc->setConfigurationWidget(configWidget);
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 1f0cc2d097253da260f42970a73419f7d89cd7ac..1520e34ce26f9764ba03df881feb551c205a1d2c 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -975,8 +975,7 @@ void GitPlugin::updateVersionWarning()
 
 Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const CommitData &cd)
 {
-    Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::GITSUBMITEDITOR_ID,
-                                                Core::EditorManager::ModeSwitch);
+    Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::GITSUBMITEDITOR_ID);
     GitSubmitEditor *submitEditor = qobject_cast<GitSubmitEditor*>(editor);
     QTC_ASSERT(submitEditor, return 0);
     setSubmitEditor(submitEditor);
diff --git a/src/plugins/helloworld/helloworldplugin.cpp b/src/plugins/helloworld/helloworldplugin.cpp
index 25d64aeb46165d0c6cb7db520eddf72a0856c1b4..ea781f40267f568b69967272f9252b97b6ba3882 100644
--- a/src/plugins/helloworld/helloworldplugin.cpp
+++ b/src/plugins/helloworld/helloworldplugin.cpp
@@ -60,7 +60,6 @@ public:
         setIcon(QIcon());
         setPriority(0);
         setId("HelloWorld.HelloWorldMode");
-        setType("HelloWorld.HelloWorldMode");
         setContextHelpId(QString());
     }
 };
diff --git a/src/plugins/locator/basefilefilter.cpp b/src/plugins/locator/basefilefilter.cpp
index 14166a5bdf8aeac4a203b1ad8d941d385fd90962..8cd2a96e40b88e48c5e9052b7e6649e23c7ede89 100644
--- a/src/plugins/locator/basefilefilter.cpp
+++ b/src/plugins/locator/basefilefilter.cpp
@@ -100,7 +100,7 @@ QList<FilterEntry> BaseFileFilter::matchesFor(QFutureInterface<Locator::FilterEn
 void BaseFileFilter::accept(Locator::FilterEntry selection) const
 {
     EditorManager::openEditor(selection.internalData.toString(), Id(),
-                              EditorManager::ModeSwitch | EditorManager::CanContainLineNumber);
+                              EditorManager::CanContainLineNumber);
 }
 
 void BaseFileFilter::generateFileNames()
diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp
index 212d494b3d5b254938bf7c76890cf2fb9c660faa..4e7af5c91b7a4bac0fd69c44b7783f113832a622 100644
--- a/src/plugins/locator/filesystemfilter.cpp
+++ b/src/plugins/locator/filesystemfilter.cpp
@@ -115,7 +115,7 @@ void FileSystemFilter::accept(FilterEntry selection) const
         return;
     }
     EditorManager::openEditor(selection.internalData.toString(), Id(),
-                              EditorManager::ModeSwitch | EditorManager::CanContainLineNumber);
+                              EditorManager::CanContainLineNumber);
 }
 
 bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp
index f208a65ecf42af2a4f35c7b0f55cdb81c1e3c711..c626b2de94883b06e81ffd8aba481d6957c3a789 100644
--- a/src/plugins/locator/opendocumentsfilter.cpp
+++ b/src/plugins/locator/opendocumentsfilter.cpp
@@ -106,5 +106,5 @@ void OpenDocumentsFilter::refresh(QFutureInterface<void> &future)
 void OpenDocumentsFilter::accept(FilterEntry selection) const
 {
     EditorManager::openEditor(selection.internalData.toString(), Id(),
-                              EditorManager::ModeSwitch | EditorManager::CanContainLineNumber);
+                              EditorManager::CanContainLineNumber);
 }
diff --git a/src/plugins/madde/maemopackagecreationwidget.cpp b/src/plugins/madde/maemopackagecreationwidget.cpp
index 0511985bb00fd62a1c53c0ab4b05863e351861f6..90a1661d25d9a84dc4c74348109d398cdbeb640b 100644
--- a/src/plugins/madde/maemopackagecreationwidget.cpp
+++ b/src/plugins/madde/maemopackagecreationwidget.cpp
@@ -263,8 +263,7 @@ void MaemoPackageCreationWidget::editDebianFile()
 
 void MaemoPackageCreationWidget::editFile(const QString &filePath)
 {
-    Core::EditorManager::openEditor(filePath, Core::Id(),
-        Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditor(filePath);
 }
 
 } // namespace Internal
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index e53009f4b48b681e1be9eb5f5891061cea16f273..12db4d74c5453cd8e6d4b8f2218d7d2798cfcf20 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -558,8 +558,7 @@ void MercurialPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &s
     }
 
     Core::IEditor *editor = Core::EditorManager::openEditor(saver.fileName(),
-                                                            Constants::COMMIT_ID,
-                                                            Core::EditorManager::ModeSwitch);
+                                                            Constants::COMMIT_ID);
     if (!editor) {
         outputWindow->appendError(tr("Unable to create an editor for the commit."));
         return;
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 70c573c8830e094d4c947ff27c83f3782f21cddc..8fd5957c804fdeb17a03a9cd433f4a5e9180131c 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -649,8 +649,7 @@ void PerforcePlugin::startSubmitProject()
 
 Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, const QStringList &depotFileNames)
 {
-    Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::PERFORCE_SUBMIT_EDITOR_ID,
-                                                      Core::EditorManager::ModeSwitch);
+    Core::IEditor *editor = Core::EditorManager::openEditor(fileName, Constants::PERFORCE_SUBMIT_EDITOR_ID);
     PerforceSubmitEditor *submitEditor = static_cast<PerforceSubmitEditor*>(editor);
     setSubmitEditor(submitEditor);
     submitEditor->restrictToProjectFiles(depotFileNames);
@@ -1180,7 +1179,7 @@ Core::IEditor *PerforcePlugin::showOutputInEditor(const QString &title, const QS
     if (codec)
         e->setCodec(codec);
     Core::IEditor *ie = e->editor();
-    Core::EditorManager::activateEditor(ie, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(ie);
     return ie;
 }
 
@@ -1262,7 +1261,7 @@ void PerforcePlugin::p4Diff(const PerforceDiffParameters &p)
 
     if (existingEditor) {
         existingEditor->createNew(result.stdOut);
-        Core::EditorManager::activateEditor(existingEditor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(existingEditor);
         return;
     }
     // Create new editor
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index 0d498a4f7a1da4b4200eb3913c9d3594b7e5bad7..09a069eae4c5f1cb73918e5f28306e9cab155072 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -261,7 +261,7 @@ void FolderNavigationWidget::openItem(const QModelIndex &srcIndex)
         return;
     }
     // Open file.
-    Core::EditorManager::openEditor(m_fileSystemModel->filePath(srcIndex), Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditor(m_fileSystemModel->filePath(srcIndex));
 }
 
 void FolderNavigationWidget::setCurrentTitle(QString dirName, const QString &fullPath)
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index e89ce9496771a6ad0f5742f546b224640d94f43d..d25442b026739626d2338ac6eec0f9cd8a1f0859 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -265,7 +265,6 @@ public:
         setIcon(QIcon(QLatin1String(":/fancyactionbar/images/mode_Project.png")));
         setPriority(Constants::P_MODE_SESSION);
         setId(Constants::MODE_SESSION);
-        setType(Core::Id());
         setContextHelpId(QLatin1String("Managing Projects"));
     }
 };
@@ -2873,7 +2872,7 @@ void ProjectExplorerPlugin::removeProject()
 void ProjectExplorerPlugin::openFile()
 {
     QTC_ASSERT(d->m_currentNode, return);
-    Core::EditorManager::openEditor(d->m_currentNode->path(), Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditor(d->m_currentNode->path());
 }
 
 void ProjectExplorerPlugin::searchOnFileSystem()
diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index 51f77f56d593d4bec98464250c3662ca0dd05df9..2df69b1bd664b176eb2ad3b93c64b3cda000b4ff 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -372,7 +372,7 @@ void ProjectTreeWidget::openItem(const QModelIndex &mainIndex)
     Node *node = m_model->nodeForIndex(mainIndex);
     if (node->nodeType() != FileNodeType)
         return;
-    IEditor *editor = EditorManager::openEditor(node->path(), Id(), EditorManager::ModeSwitch);
+    IEditor *editor = EditorManager::openEditor(node->path());
     if (node->line() >= 0)
         editor->gotoLine(node->line());
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorcrumblebar.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorcrumblebar.cpp
index a90b169458b77cd2b12113de612ea11dd7154b0f..d9e22c9bb967e8deebf9e67ec96f1ea957e6374d 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorcrumblebar.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorcrumblebar.cpp
@@ -120,7 +120,8 @@ void FormEditorCrumbleBar::onCrumblePathElementClicked(const QVariant &data)
     } else {
         crumblePath()->popElement();
         nextFileIsCalledInternally();
-        Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName);
+        Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName, Core::Id(),
+                                        Core::EditorManager::DoNotMakeVisible);
         if (!clickedCrumbleBarInfo.componentId.isEmpty()) {
             currentDesignDocument()->changeToSubComponent(
                         currentDesignDocument()->rewriterView()->modelNodeForId(clickedCrumbleBarInfo.componentId));
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index 63c54a28e0e8895962e25fb457c782c4d02bd964..9a93b93a01c45fd97882ca67b05172bacce3690e 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -309,7 +309,7 @@ void DesignDocument::changeToSubComponent(const ModelNode &componentNode)
 
 void DesignDocument::changeToExternalSubComponent(const QString &fileName)
 {
-    Core::EditorManager::openEditor(fileName);
+    Core::EditorManager::openEditor(fileName, Core::Id(), Core::EditorManager::DoNotMakeVisible);
 }
 
 void DesignDocument::goIntoSelectedComponent()
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 61ee53a0837e143c9b3494dbec9c0ae286426b10..deec645b3eefc2e09c4e575d72ca3701ac83a424 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -289,7 +289,8 @@ void NavigatorView::changeToComponent(const QModelIndex &index)
     if (index.isValid() && m_treeModel->data(index, Qt::UserRole).isValid()) {
         ModelNode doubleClickNode = m_treeModel->nodeForIndex(index);
         if (doubleClickNode.metaInfo().isFileComponent())
-            Core::EditorManager::openEditor(doubleClickNode.metaInfo().componentFileName());
+            Core::EditorManager::openEditor(doubleClickNode.metaInfo().componentFileName(),
+                                            Core::Id(), Core::EditorManager::DoNotMakeVisible);
     }
 }
 
diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp
index 029e5e082a0c843ba34265bdd2465b86502b67e8..874587a64c9c92948ec398c99527d49346042920 100644
--- a/src/plugins/qmldesigner/designersettings.cpp
+++ b/src/plugins/qmldesigner/designersettings.cpp
@@ -35,8 +35,7 @@
 using namespace QmlDesigner;
 
 DesignerSettings::DesignerSettings()
-    : openDesignMode(QmlDesigner::Constants::QML_OPENDESIGNMODE_DEFAULT),
-    itemSpacing(0),
+    : itemSpacing(0),
     containerPadding(0),
     canvasWidth(10000),
     canvasHeight(10000),
@@ -50,9 +49,6 @@ void DesignerSettings::fromSettings(QSettings *settings)
 {
     settings->beginGroup(QLatin1String(QmlDesigner::Constants::QML_SETTINGS_GROUP));
     settings->beginGroup(QLatin1String(QmlDesigner::Constants::QML_DESIGNER_SETTINGS_GROUP));
-    openDesignMode = settings->value(
-            QLatin1String(QmlDesigner::Constants::QML_OPENDESIGNMODE_SETTINGS_KEY),
-            bool(QmlDesigner::Constants::QML_OPENDESIGNMODE_DEFAULT)).toBool();
     itemSpacing = settings->value(
             QLatin1String(QmlDesigner::Constants::QML_ITEMSPACING_KEY), QVariant(6)).toInt();
     containerPadding = settings->value(
@@ -76,7 +72,6 @@ void DesignerSettings::toSettings(QSettings *settings) const
 {
     settings->beginGroup(QLatin1String(QmlDesigner::Constants::QML_SETTINGS_GROUP));
     settings->beginGroup(QLatin1String(QmlDesigner::Constants::QML_DESIGNER_SETTINGS_GROUP));
-    settings->setValue(QLatin1String(QmlDesigner::Constants::QML_OPENDESIGNMODE_SETTINGS_KEY), openDesignMode);
     settings->setValue(QLatin1String(QmlDesigner::Constants::QML_ITEMSPACING_KEY), itemSpacing);
     settings->setValue(QLatin1String(QmlDesigner::Constants::QML_CONTAINERPADDING_KEY), containerPadding);
     settings->setValue(QLatin1String(QmlDesigner::Constants::QML_CANVASWIDTH_KEY), canvasWidth);
@@ -92,8 +87,7 @@ void DesignerSettings::toSettings(QSettings *settings) const
 
 bool DesignerSettings::equals(const DesignerSettings &other) const
 {
-    return openDesignMode == other.openDesignMode
-            && containerPadding == other.containerPadding
+    return containerPadding == other.containerPadding
             && canvasWidth == other.canvasWidth
             && canvasHeight == other.canvasHeight
             && warningsInDesigner == other.warningsInDesigner
diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h
index d38927a19b7b4a4b9948047a58bf9a70145d07ce..a42d47155a77090e50197acbc81060528986c984 100644
--- a/src/plugins/qmldesigner/designersettings.h
+++ b/src/plugins/qmldesigner/designersettings.h
@@ -47,7 +47,6 @@ public:
     void toSettings(QSettings *) const;
 
     bool equals(const DesignerSettings &other) const;
-    bool openDesignMode;
     int itemSpacing;
     int containerPadding;
     int canvasWidth;
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index d01ae232b5e738273e750a71c763c4d3dca3ba3a..b8df512dc7cdb67345fe4bdb844712fbc4cc2b06 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -451,7 +451,8 @@ void DesignModeWidget::toolBarOnGoBackClicked()
     if (m_navigatorHistoryCounter > 0) {
         --m_navigatorHistoryCounter;
         m_keepNavigatorHistory = true;
-        Core::EditorManager::openEditor(m_navigatorHistory.at(m_navigatorHistoryCounter));
+        Core::EditorManager::openEditor(m_navigatorHistory.at(m_navigatorHistoryCounter),
+                                        Core::Id(), Core::EditorManager::DoNotMakeVisible);
         m_keepNavigatorHistory = false;
     }
 }
@@ -461,7 +462,8 @@ void DesignModeWidget::toolBarOnGoForwardClicked()
     if (m_navigatorHistoryCounter < (m_navigatorHistory.size() - 1)) {
         ++m_navigatorHistoryCounter;
         m_keepNavigatorHistory = true;
-        Core::EditorManager::openEditor(m_navigatorHistory.at(m_navigatorHistoryCounter));
+        Core::EditorManager::openEditor(m_navigatorHistory.at(m_navigatorHistoryCounter),
+                                        Core::Id(), Core::EditorManager::DoNotMakeVisible);
         m_keepNavigatorHistory = false;
     }
 }
diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h
index b083ee829139aea684351e6b8594c1022e0b3ece..366eef44490513ff7bacdccf2e2fd93195d52051 100644
--- a/src/plugins/qmldesigner/qmldesignerconstants.h
+++ b/src/plugins/qmldesigner/qmldesignerconstants.h
@@ -53,7 +53,6 @@ const char GO_INTO_COMPONENT[] = "QmlDesigner.GoIntoComponent";
 // This setting is also accessed by the QMlJsEditor.
 const char QML_SETTINGS_GROUP[] = "QML";
 const char QML_DESIGNER_SETTINGS_GROUP[] = "Designer";
-const char QML_OPENDESIGNMODE_SETTINGS_KEY[] = "OpenDesignMode";
 const char QML_ITEMSPACING_KEY[] = "ItemSpacing";
 const char QML_CONTAINERPADDING_KEY[] = "ContainerPadding";
 const char QML_CANVASWIDTH_KEY[] = "CanvasWidth";
@@ -64,7 +63,6 @@ const char QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY[] = "WarnAboutQtQuickFeatures
 const char QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY[] = "WarnAboutQtQuickDesignerFeaturesInCodeEditor";
 const char QML_SHOW_DEBUGVIEW[] = "ShowQtQuickDesignerDebugView";
 const char QML_ENABLE_DEBUGVIEW[] = "EnableQtQuickDesignerDebugView";
-enum { QML_OPENDESIGNMODE_DEFAULT = 0 }; // 0 for text mode, 1 for design mode
 
 const char SETTINGS_CATEGORY_QML_ICON[] = ":/core/images/category_qml.png";
 
diff --git a/src/plugins/qmljseditor/qmljseditoreditable.cpp b/src/plugins/qmljseditor/qmljseditoreditable.cpp
index ee75f356c1f1532b18a9109074ac7327581955ae..8af4f1a5cba73a9c1e32ad1c608361c28e6b23f6 100644
--- a/src/plugins/qmljseditor/qmljseditoreditable.cpp
+++ b/src/plugins/qmljseditor/qmljseditoreditable.cpp
@@ -33,7 +33,6 @@
 
 #include <qmljstools/qmljstoolsconstants.h>
 #include <texteditor/texteditorconstants.h>
-#include <qmldesigner/qmldesignerconstants.h>
 #include <projectexplorer/projectexplorerconstants.h>
 
 #include <coreplugin/mimedatabase.h>
@@ -52,41 +51,13 @@ QmlJSEditorEditable::QmlJSEditorEditable(QmlJSTextEditorWidget *editor)
     m_context.add(ProjectExplorer::Constants::LANG_QMLJS);
 }
 
-// Use preferred mode from Bauhaus settings
-static bool openInDesignMode()
-{
-    static bool bauhausDetected = false;
-    static bool bauhausPresent = false;
-    // Check if Bauhaus is loaded, that is, a Design mode widget is
-    // registered for the QML mime type.
-    if (!bauhausDetected) {
-        if (const Core::IMode *dm = Core::ModeManager::mode(Core::Constants::MODE_DESIGN))
-            if (const Core::DesignMode *designMode = qobject_cast<const Core::DesignMode *>(dm))
-                bauhausPresent = designMode->registeredMimeTypes().contains(QLatin1String(QmlJSTools::Constants::QML_MIMETYPE));
-        bauhausDetected =  true;
-    }
-    if (!bauhausPresent)
-        return false;
-
-    return bool(QmlDesigner::Constants::QML_OPENDESIGNMODE_DEFAULT);
-}
-
-Core::Id QmlJSEditorEditable::preferredModeType() const
+bool QmlJSEditorEditable::isDesignModePreferred() const
 {
+    // stay in design mode if we are there
     Core::IMode *mode = Core::ModeManager::currentMode();
-    if (mode && (mode->type() == Core::Constants::MODE_DESIGN_TYPE
-                || mode->type() == Core::Constants::MODE_EDIT_TYPE))
-    {
-        return mode->type();
-    }
-
-    // if we are in other mode than edit or design, use the hard-coded default.
-    // because the editor opening decision is modal, it would be confusing to
-    // have the user also access to this failsafe setting.
-    if (editorWidget()->mimeType() == QLatin1String(QmlJSTools::Constants::QML_MIMETYPE)
-        && openInDesignMode())
-        return Core::Id(Core::Constants::MODE_DESIGN_TYPE);
-    return Core::Id();
+    if (mode && mode->id() == Core::Constants::MODE_DESIGN)
+        return true;
+    return false;
 }
 
 void QmlJSEditorEditable::setTextCodec(QTextCodec *codec, TextCodecReason reason)
diff --git a/src/plugins/qmljseditor/qmljseditoreditable.h b/src/plugins/qmljseditor/qmljseditoreditable.h
index ac7d161588a586e2a2ab5920ef0121c4b2dcaf2f..07550c50e455f09fdea510b79bb52b4eeb701b76 100644
--- a/src/plugins/qmljseditor/qmljseditoreditable.h
+++ b/src/plugins/qmljseditor/qmljseditoreditable.h
@@ -49,7 +49,7 @@ public:
     Core::Id id() const;
     bool isTemporary() const { return false; }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
-    Core::Id preferredModeType() const;
+    bool isDesignModePreferred() const;
     void setTextCodec(QTextCodec *codec, TextCodecReason = TextCodecOtherReason);
 
     const Utils::CommentDefinition *commentDefinition() const;
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index e5aa05c2e77489af168756bc95a73aa042d01150..af0d7b461b937e686ff9a80b5846472144ef0b06 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -985,11 +985,9 @@ void FindReferences::openEditor(const Find::SearchResultItem &item)
 {
     if (item.path.size() > 0) {
         Core::EditorManager::openEditorAt(QDir::fromNativeSeparators(item.path.first()),
-                                              item.lineNumber, item.textMarkPos, Core::Id(),
-                                              Core::EditorManager::ModeSwitch);
+                                              item.lineNumber, item.textMarkPos);
     } else {
-        Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text),
-                                        Core::Id(), Core::EditorManager::ModeSwitch);
+        Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text));
     }
 }
 
diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
index 13710f5dd0d87a75a2209542ff8ca15fd5d5a369..33c1eb935635c754273337ac67b1b1314b490c11 100644
--- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp
+++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp
@@ -111,6 +111,5 @@ QList<Locator::FilterEntry> FunctionFilter::matchesFor(QFutureInterface<Locator:
 void FunctionFilter::accept(Locator::FilterEntry selection) const
 {
     const LocatorData::Entry entry = qvariant_cast<LocatorData::Entry>(selection.internalData);
-    Core::EditorManager::openEditorAt(entry.fileName, entry.line, entry.column,
-                                      Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditorAt(entry.fileName, entry.line, entry.column);
 }
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index 33926d2363679747030891e0e2b9ff6310f16848..b3d2c3d0d99d08049bcad4799422767373693875 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -247,7 +247,8 @@ void Qt4Manager::addLibrary(const QString &fileName, ProFileEditorWidget *editor
         editable = editor->editor();
     } else {
         editable = qobject_cast<TextEditor::BaseTextEditor *>
-                (Core::EditorManager::openEditor(fileName, Qt4ProjectManager::Constants::PROFILE_EDITOR_ID));
+                (Core::EditorManager::openEditor(fileName, Qt4ProjectManager::Constants::PROFILE_EDITOR_ID,
+                                                 Core::EditorManager::DoNotMakeVisible));
     }
     if (!editable)
         return;
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
index d7ca07f3a1d05f5b4d37f391bd50713095715b6f..a6c5d62a8e3bc2613bffed6dd8ff6886398046e7 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
@@ -283,7 +283,7 @@ bool AbstractMobileAppWizard::postGenerateFiles(const QWizard *w,
     if (success) {
         const QString fileToOpen = fileToOpenPostGeneration();
         if (!fileToOpen.isEmpty()) {
-            Core::EditorManager::openEditor(fileToOpen, Core::Id(), Core::EditorManager::ModeSwitch);
+            Core::EditorManager::openEditor(fileToOpen);
             ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, fileToOpen);
         }
     }
diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
index c40aebeb0482616cbb1dc0b6d033dd23bc5492f2..0ad1763da3f49a28d63203a5dc4d8559f817e8e8 100644
--- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
+++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
@@ -431,7 +431,7 @@ void ExamplesWelcomePage::openProject(const QString &projectFile, const QStringL
         Core::ICore::openFiles(filesToOpen);
         if (project->needsConfiguration())
             project->configureAsExampleProject(platforms);
-        Core::ModeManager::activateModeType(Core::Constants::MODE_EDIT_TYPE);
+        Core::ModeManager::activateMode(Core::Constants::MODE_EDIT);
         if (help.isValid())
             Core::ICore::helpManager()->handleHelpRequest(help.toString() + QLatin1String("?view=split"));
     }
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index 82d0dcc8919407ce66de443f409f26cfdede28de..1c4ffd624d33effb922fb86cf4c7c594896cb92c 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -234,7 +234,7 @@ void QtOutputFormatter::handleLink(const QString &href)
 
         if (!fileName.isEmpty()) {
             fileName = m_projectFinder.findFile(QUrl::fromLocalFile(fileName));
-            Core::EditorManager::openEditorAt(fileName, line, 0);
+            Core::EditorManager::openEditorAt(fileName, line);
             return;
         }
     }
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 4251930b63e1b35151f93ea719358ae1e6fda915..5d03160596ed7f990bbd2120f6304b3d77d00ac9 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -589,7 +589,7 @@ void SubversionPlugin::svnDiff(const Subversion::Internal::SubversionDiffParamet
     // Show in the same editor if diff has been executed before
     if (Core::IEditor *existingEditor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         existingEditor->createNew(response.stdOut);
-        Core::EditorManager::activateEditor(existingEditor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(existingEditor);
         setDiffBaseDirectory(existingEditor, p.workingDir);
         return;
     }
@@ -613,8 +613,7 @@ void SubversionPlugin::svnDiff(const Subversion::Internal::SubversionDiffParamet
 SubversionSubmitEditor *SubversionPlugin::openSubversionSubmitEditor(const QString &fileName)
 {
     Core::IEditor *editor = Core::EditorManager::openEditor(fileName,
-                                                            Constants::SUBVERSIONCOMMITEDITOR_ID,
-                                                            Core::EditorManager::ModeSwitch);
+                                                            Constants::SUBVERSIONCOMMITEDITOR_ID);
     SubversionSubmitEditor *submitEditor = qobject_cast<SubversionSubmitEditor*>(editor);
     QTC_CHECK(submitEditor);
     setSubmitEditor(submitEditor);
@@ -901,7 +900,7 @@ void SubversionPlugin::filelog(const QString &workingDir,
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(response.stdOut);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn log %1").arg(id);
         const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, files);
@@ -979,7 +978,7 @@ void SubversionPlugin::vcsAnnotate(const QString &workingDir, const QString &fil
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(response.stdOut);
         VcsBase::VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn annotate %1").arg(id);
         Core::IEditor *newEditor = showOutputInEditor(title, response.stdOut, VcsBase::AnnotateOutput, source, codec);
@@ -1044,7 +1043,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr)
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::DiffOutput, source, QStringList(), changeNr);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->createNew(description);
-        Core::EditorManager::activateEditor(editor, Core::EditorManager::ModeSwitch);
+        Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn describe %1#%2").arg(fi.fileName(), changeNr);
         Core::IEditor *newEditor = showOutputInEditor(title, description, VcsBase::DiffOutput, source, codec);
@@ -1189,7 +1188,7 @@ Core::IEditor *SubversionPlugin::showOutputInEditor(const QString &title, const
     if (codec)
         e->setCodec(codec);
     Core::IEditor *ie = e->editor();
-    Core::EditorManager::activateEditor(ie, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(ie);
     return ie;
 }
 
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index baf1318dc103dd1f94024c09d97944988720cd71..250eae2ddcc0132a9ded5c8f81d139e9936d3dd8 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -312,12 +312,9 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
     if (item.path.size() > 0) {
         openedEditor = Core::EditorManager::openEditorAt(QDir::fromNativeSeparators(item.path.first()),
                                                          item.lineNumber,
-                                                         item.textMarkPos,
-                                                         Core::Id(),
-                                                         Core::EditorManager::ModeSwitch);
+                                                         item.textMarkPos);
     } else {
-        openedEditor = Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text),
-                                                        Core::Id(), Core::EditorManager::ModeSwitch);
+        openedEditor = Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text));
     }
     if (d->m_currentFindSupport)
         d->m_currentFindSupport->clearResults();
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index ab343d4ad4e4156bb647488e296e03db21fd8ef5..a9aa9e97dd012311f2ac9708e5343b659eb61f12 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -4899,8 +4899,7 @@ bool BaseTextEditorWidget::openLink(const Link &link, bool inNextSplit)
         return true;
     }
 
-    return Core::EditorManager::openEditorAt(link.targetFileName, link.targetLine, link.targetColumn,
-                                             Core::Id(), Core::EditorManager::ModeSwitch);
+    return Core::EditorManager::openEditorAt(link.targetFileName, link.targetLine, link.targetColumn);
 }
 
 void BaseTextEditorWidget::updateLink(QMouseEvent *e)
diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp
index bec075131da0004ce2d97053c6eab18d4401333e..b6dd394ceab9154799762bb9f35d38dadd34f4e3 100644
--- a/src/plugins/texteditor/linenumberfilter.cpp
+++ b/src/plugins/texteditor/linenumberfilter.cpp
@@ -97,9 +97,7 @@ void LineNumberFilter::accept(FilterEntry selection) const
             data.first = currLine;
         }
         editor->gotoLine(data.first, data.second);
-        editor->widget()->setFocus();
-        ICore::raiseWindow(editor->widget());
-        Core::ModeManager::activateModeType(Id(Core::Constants::MODE_EDIT_TYPE));
+        Core::EditorManager::activateEditor(editor);
     }
 }
 
diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp
index 8ca3a3cc8d75560b837b158b4427e9b19d11e23e..e8b73f582a12d744ad025df18d34a160cf9b5016 100644
--- a/src/plugins/texteditor/refactoringchanges.cpp
+++ b/src/plugins/texteditor/refactoringchanges.cpp
@@ -136,7 +136,7 @@ BaseTextEditorWidget *RefactoringChanges::openEditor(const QString &fileName, bo
 {
     Core::EditorManager::OpenEditorFlags flags = Core::EditorManager::IgnoreNavigationHistory;
     if (!activate)
-        flags |= Core::EditorManager::NoActivate;
+        flags |= Core::EditorManager::DoNotChangeCurrentEditor;
     if (line != -1) {
         // openEditorAt uses a 1-based line and a 0-based column!
         column -= 1;
diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp
index e47a350424655690bf2e26d5a3617225af86a485..ce2da09161fb0d74c0433ae993770e2f1fc76f01 100644
--- a/src/plugins/texteditor/texteditorplugin.cpp
+++ b/src/plugins/texteditor/texteditorplugin.cpp
@@ -137,7 +137,7 @@ void ScratchFileWizard::createFile()
     file.setAutoRemove(false);
     QTC_ASSERT(file.open(), return; );
     file.close();
-    Core::EditorManager::openEditor(file.fileName(), Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::EditorManager::openEditor(file.fileName());
 }
 
 // ExtensionSystem::PluginInterface
diff --git a/src/plugins/vcsbase/cleandialog.cpp b/src/plugins/vcsbase/cleandialog.cpp
index ed8a46bd78f89e9156ac58dd057b2e4a1a950d4a..b5366102ae34125c5ab3afde42aa587eea173c29 100644
--- a/src/plugins/vcsbase/cleandialog.cpp
+++ b/src/plugins/vcsbase/cleandialog.cpp
@@ -279,7 +279,7 @@ void CleanDialog::slotDoubleClicked(const QModelIndex &index)
     if (const QStandardItem *item = d->m_filesModel->itemFromIndex(index))
         if (!item->data(Internal::isDirectoryRole).toBool()) {
             const QString fname = item->data(Internal::fileNameRole).toString();
-            Core::EditorManager::openEditor(fname, Core::Id(), Core::EditorManager::ModeSwitch);
+            Core::EditorManager::openEditor(fname);
     }
 }
 
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 059dff26c0f0a509887bbaea6b66d2accafa6d94..bf4b8ce6e1301ce0a9137f8a7a6700d00fc8711e 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -576,7 +576,7 @@ VcsBase::VcsBaseEditorWidget *VcsBaseClient::createVcsEditor(Core::Id kind, QStr
     }
 
     baseEditor->setForceReadOnly(true);
-    Core::EditorManager::activateEditor(outputEditor, Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(outputEditor);
     return baseEditor;
 }
 
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index b6d6d15f4dba691b836621de3fec0752fcf4966e..321cca7e32d71b4e3346238afaa47576c63c51a2 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -1115,7 +1115,7 @@ void VcsBaseEditorWidget::jumpToChangeFromDiff(QTextCursor cursor)
     if (!exists)
         return;
 
-    Core::IEditor *ed = Core::EditorManager::openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
+    Core::IEditor *ed = Core::EditorManager::openEditor(fileName);
     if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed))
         editor->gotoLine(chunkStart + lineCount);
 }
diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
index 3728253f556ced95b93d73ec5ebb28279c29c069..9dd32497ed7d6d5c4363dc673f8f726015b4c3a4 100644
--- a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
@@ -189,7 +189,7 @@ void OutputWindowPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
         }
         if (action == openAction) {
             const QString fileName = action->data().toString();
-            Core::EditorManager::openEditor(fileName, Core::Id(), Core::EditorManager::ModeSwitch);
+            Core::EditorManager::openEditor(fileName);
         }
     }
     delete menu;
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index c56f846928663bc05beb5a5fe589c45e4d9af1a9..9022b65c2163b0c619e1cbe68224131746a7a2de 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -691,9 +691,7 @@ bool VcsBasePlugin::raiseSubmitEditor() const
 {
     if (!d->m_submitEditor)
         return false;
-    Core::EditorManager::activateEditor(
-                d->m_submitEditor,
-                Core::EditorManager::IgnoreNavigationHistory | Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(d->m_submitEditor, Core::EditorManager::IgnoreNavigationHistory);
     return true;
 }
 
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index d71c8866f9a5b89f7be9e4cdb22759f39bbd5f29..b4c7e3e2d5cd833842a449f11f2892ef2834014a 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -573,8 +573,7 @@ VcsBaseSubmitEditor::PromptSubmitResult
 {
     SubmitEditorWidget *submitWidget = static_cast<SubmitEditorWidget *>(this->widget());
 
-    Core::EditorManager::activateEditor(
-                this, Core::EditorManager::IgnoreNavigationHistory | Core::EditorManager::ModeSwitch);
+    Core::EditorManager::activateEditor(this, Core::EditorManager::IgnoreNavigationHistory);
 
     QString errorMessage;
     QMessageBox::StandardButton answer = QMessageBox::Yes;
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index 36c53cda76418beb74b87213e4136604109d70dc..8e5b1ddfa95026c55f1fb3370114cb648586d16e 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -143,7 +143,6 @@ WelcomeMode::WelcomeMode() :
     setIcon(qtLogo);
     setPriority(Core::Constants::P_MODE_WELCOME);
     setId(Core::Constants::MODE_WELCOME);
-    setType(Core::Constants::MODE_WELCOME_TYPE);
     setContextHelpId(QLatin1String("Qt Creator Manual"));
     setContext(Core::Context(Core::Constants::C_WELCOME_MODE));