diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index e4bbb6bd1e701c20eac0586209fe83c4e12f42b0..483c0e6525da35351a141fcddaf6fb75a02c5dd8 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -583,8 +583,12 @@ IEditor *EditorManagerPrivate::openEditor(EditorView *view, const QString &fileN
     }
 
     EditorManager::EditorFactoryList factories = EditorManagerPrivate::findFactories(Id(), fn);
-    if (editorId.isValid())
-        std::stable_partition(factories.begin(), factories.end(), Utils::equal(&IEditorFactory::id, editorId));
+    if (editorId.isValid()) {
+        if (IEditorFactory *factory = findById<IEditorFactory>(editorId)) {
+            factories.removeOne(factory);
+            factories.push_front(factory);
+        }
+    }
 
     IEditor *editor = 0;
     auto overrideCursor = Utils::OverrideCursor(QCursor(Qt::WaitCursor));