diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 0daecf7c90a468373f6662925ad7dccba7f963a8..e9a3c480ab48a66c76688c4e07623933440b1637 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -582,20 +582,13 @@ void DebuggerEngine::gotoLocation(const Location &loc)
 
     const QString file = loc.fileName();
     const int line = loc.lineNumber();
-    QList<IEditor *> editors = EditorManager::instance()->editorsForFileName(file);
-    IEditor *editor = 0;
-    if (editors.isEmpty()) {
-        editor = EditorManager::openEditor(file, Core::Id(),
-            EditorManager::IgnoreNavigationHistory);
-        QTC_ASSERT(editor, return); // Unreadable file?
-        editor->setProperty(Constants::OPENED_BY_DEBUGGER, true);
-    } else {
-        editor = editors.back();
-    }
-
-    ITextEditor *texteditor = qobject_cast<ITextEditor *>(editor);
-    if (texteditor)
-        texteditor->gotoLine(line, 0);
+    bool newEditor = false;
+    IEditor *editor = EditorManager::openEditor(file, Core::Id(),
+                                                EditorManager::IgnoreNavigationHistory, &newEditor);
+    QTC_ASSERT(editor, return); // Unreadable file?
+    editor->gotoLine(line, 0);
+    if (newEditor)
+        editor->document()->setProperty(Constants::OPENED_BY_DEBUGGER, true);
 
     if (loc.needsMarker()) {
         d->m_locationMark.reset(new TextEditor::BaseTextMark(file, line));
@@ -604,9 +597,6 @@ void DebuggerEngine::gotoLocation(const Location &loc)
         d->m_locationMark->init();
     }
 
-    // FIXME: Breaks with split views.
-    if (!d->m_memoryAgent.hasVisibleEditor() || loc.needsRaise())
-        EditorManager::activateEditor(editor);
     //qDebug() << "MEMORY: " << d->m_memoryAgent.hasVisibleEditor();
 }
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 92a9b02d21c604b52bdb6fa9bb845edcc4e0642c..f501757be9c84315969c96f8496e66ba6a35ea72 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2119,29 +2119,26 @@ void DebuggerPluginPrivate::cleanupViews()
     if (!boolSetting(CloseBuffersOnExit))
         return;
 
-    EditorManager *editorManager = EditorManager::instance();
-    QTC_ASSERT(editorManager, return);
-    QList<IEditor *> toClose;
-    foreach (IEditor *editor, editorManager->openedEditors()) {
-        if (editor->property(Constants::OPENED_BY_DEBUGGER).toBool()) {
-            IDocument *doc = editor->document();
+    QList<IDocument *> toClose;
+    foreach (IDocument *document, EditorManager::documentModel()->openedDocuments()) {
+        if (document->property(Constants::OPENED_BY_DEBUGGER).toBool()) {
             bool keepIt = true;
-            if (editor->property(Constants::OPENED_WITH_DISASSEMBLY).toBool())
+            if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool())
                 keepIt = false;
-            else if (doc->isModified())
+            else if (document->isModified())
                 keepIt = true;
-            else if (doc->filePath().contains(_("qeventdispatcher")))
+            else if (document->filePath().contains(_("qeventdispatcher")))
                 keepIt = false;
             else
-                keepIt = (editor == EditorManager::currentEditor());
+                keepIt = (document == EditorManager::currentDocument());
 
             if (keepIt)
-                editor->setProperty(Constants::OPENED_BY_DEBUGGER, false);
+                document->setProperty(Constants::OPENED_BY_DEBUGGER, false);
             else
-                toClose.append(editor);
+                toClose.append(document);
         }
     }
-    editorManager->closeEditors(toClose);
+    EditorManager::closeDocuments(toClose);
 }
 
 void DebuggerPluginPrivate::setBusyCursor(bool busy)
diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp
index d56cb663088ac12cb4e3e0db3841421bd9d98572..8271ff7d6cd1af2e6cc6ae81df8e8caf0da81363 100644
--- a/src/plugins/debugger/debuggertooltipmanager.cpp
+++ b/src/plugins/debugger/debuggertooltipmanager.cpp
@@ -36,6 +36,7 @@
 
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/documentmodel.h>
 #include <texteditor/basetexteditor.h>
 
 #include <utils/tooltip/tooltip.h>
@@ -1372,7 +1373,8 @@ void DebuggerToolTipManager::debugModeEntered()
                 this, SLOT(slotUpdateVisibleToolTips()));
         connect(em, SIGNAL(editorOpened(Core::IEditor*)),
                 this, SLOT(slotEditorOpened(Core::IEditor*)));
-        foreach (IEditor *e, em->openedEditors())
+        DocumentModel *documentModel = EditorManager::documentModel();
+        foreach (IEditor *e, documentModel->editorsForDocuments(documentModel->openedDocuments()))
             slotEditorOpened(e);
         // Position tooltips delayed once all the editor placeholder layouting is done.
         if (!m_tooltips.isEmpty())
@@ -1391,15 +1393,14 @@ void DebuggerToolTipManager::leavingDebugMode()
         hide();
         if (QWidget *topLevel = ICore::mainWindow()->topLevelWidget())
             topLevel->removeEventFilter(this);
-        if (EditorManager *em = EditorManager::instance()) {
-            foreach (IEditor *e, em->openedEditors()) {
-                if (DebuggerToolTipEditor toolTipEditor = DebuggerToolTipEditor(e)) {
-                    toolTipEditor.baseTextEditor->verticalScrollBar()->disconnect(this);
-                    toolTipEditor.textEditor->disconnect(this);
-                }
+        DocumentModel *documentModel = EditorManager::documentModel();
+        foreach (IEditor *e, documentModel->editorsForDocuments(documentModel->openedDocuments())) {
+            if (DebuggerToolTipEditor toolTipEditor = DebuggerToolTipEditor(e)) {
+                toolTipEditor.baseTextEditor->verticalScrollBar()->disconnect(this);
+                toolTipEditor.textEditor->disconnect(this);
             }
-            em->disconnect(this);
         }
+        EditorManager::instance()->disconnect(this);
         m_lastToolTipEditor = 0;
         m_lastToolTipPoint = QPoint(-1, -1);
     }
diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp
index 16cc7967033649f5c802b6710328f86c9943e865..06f57e9de9aca4f4c5db86e349bf9ecd54754cb8 100644
--- a/src/plugins/debugger/disassembleragent.cpp
+++ b/src/plugins/debugger/disassembleragent.cpp
@@ -310,8 +310,9 @@ void DisassemblerAgent::setContentsToEditor(const DisassemblerLines &contents)
                 Core::Constants::K_DEFAULT_TEXT_EDITOR_ID,
                 &titlePattern));
         QTC_ASSERT(d->editor, return);
-        d->editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
-        d->editor->setProperty(Debugger::Constants::OPENED_WITH_DISASSEMBLY, true);
+        IDocument *document = d->editor->document();
+        document->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
+        document->setProperty(Debugger::Constants::OPENED_WITH_DISASSEMBLY, true);
         d->configureMimeType();
 
         BaseTextEditorWidget *baseTextEdit =
diff --git a/src/plugins/debugger/imageviewer.cpp b/src/plugins/debugger/imageviewer.cpp
index 26d96ad406bbe3e8f0dbcef5f1549fe6336e9243..e7cfd169f75c2ca356baf6c1ff1e087be91e7322 100644
--- a/src/plugins/debugger/imageviewer.cpp
+++ b/src/plugins/debugger/imageviewer.cpp
@@ -140,7 +140,7 @@ static void openImageViewer(const QImage &image)
         temporaryFile.close();
     }
     if (Core::IEditor *e = Core::EditorManager::instance()->openEditor(fileName))
-        e->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, QVariant(true));
+        e->document()->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, QVariant(true));
 }
 
 void ImageViewer::contextMenuEvent(QContextMenuEvent *ev)
diff --git a/src/plugins/debugger/memoryagent.cpp b/src/plugins/debugger/memoryagent.cpp
index 5289b502728a7f5497208f63a7c5426ff43d8e26..735e9bc29f9372125a388e33271cba8f3535e26b 100644
--- a/src/plugins/debugger/memoryagent.cpp
+++ b/src/plugins/debugger/memoryagent.cpp
@@ -181,8 +181,8 @@ bool MemoryAgent::doCreateBinEditor(quint64 addr, unsigned flags,
                 Core::Constants::K_DEFAULT_BINARY_EDITOR_ID, &title);
     if (!editor)
         return false;
-    editor->setProperty(Constants::OPENED_BY_DEBUGGER, QVariant(true));
-    editor->setProperty(Constants::OPENED_WITH_MEMORY, QVariant(true));
+    editor->document()->setProperty(Constants::OPENED_BY_DEBUGGER, QVariant(true));
+    editor->document()->setProperty(Constants::OPENED_WITH_MEMORY, QVariant(true));
     QWidget *editorBinEditor = editor->widget();
     connectBinEditorWidget(editorBinEditor);
     MemoryView::setBinEditorReadOnly(editorBinEditor, readOnly);
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 54d2342ee848d337ae2109432a8fce98e746772c..01d8a237c7da7485ccf5c0b99f29d7aaf50054e1 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -53,7 +53,7 @@
 
 #include <utils/qtcassert.h>
 
-#include <texteditor/itexteditor.h>
+#include <texteditor/basetextdocument.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/helpmanager.h>
 #include <coreplugin/icore.h>
@@ -528,28 +528,25 @@ void QmlEngine::gotoLocation(const Location &location)
     if (QUrl(fileName).isLocalFile()) {
         // internal file from source files -> show generated .js
         QTC_ASSERT(m_sourceDocuments.contains(fileName), return);
-        Core::IEditor *editor = 0;
 
-        Core::EditorManager *editorManager = Core::EditorManager::instance();
         QString titlePattern = tr("JS Source for %1").arg(fileName);
-        //Check if there are open editors with the same title
-        QList<Core::IEditor *> editors = editorManager->openedEditors();
-        foreach (Core::IEditor *ed, editors) {
-            if (ed->document()->displayName() == titlePattern) {
-                editor = ed;
-                break;
+        //Check if there are open documents with the same title
+        foreach (Core::IDocument *document, Core::EditorManager::documentModel()->openedDocuments()) {
+            if (document->displayName() == titlePattern) {
+                Core::EditorManager::instance()->activateEditorForDocument(document);
+                return;
             }
         }
-        if (!editor) {
-            editor = Core::EditorManager::openEditorWithContents(QmlJSEditor::Constants::C_QMLJSEDITOR_ID,
-                                                           &titlePattern);
-            if (editor)
-                editor->setProperty(Constants::OPENED_BY_DEBUGGER, true);
-
-            updateEditor(editor, m_sourceDocuments.value(fileName));
+        Core::IEditor *editor = Core::EditorManager::openEditorWithContents(
+                    QmlJSEditor::Constants::C_QMLJSEDITOR_ID, &titlePattern);
+        if (editor) {
+            editor->document()->setProperty(Constants::OPENED_BY_DEBUGGER, true);
+            QPlainTextEdit *plainTextEdit =
+                    qobject_cast<QPlainTextEdit *>(editor->widget());
+            if (plainTextEdit)
+                plainTextEdit->setReadOnly(true);
+            updateDocument(editor->document(), m_sourceDocuments.value(fileName));
         }
-        Core::EditorManager::activateEditor(editor);
-
     } else {
         DebuggerEngine::gotoLocation(location);
     }
@@ -1299,27 +1296,22 @@ void QmlEngine::updateScriptSource(const QString &fileName, int lineOffset, int
     //update open editors
     QString titlePattern = tr("JS Source for %1").arg(fileName);
     //Check if there are open editors with the same title
-    QList<Core::IEditor *> editors = Core::EditorManager::instance()->openedEditors();
-    foreach (Core::IEditor *editor, editors) {
-        if (editor->document()->displayName() == titlePattern) {
-            updateEditor(editor, document);
+    foreach (Core::IDocument *doc, Core::EditorManager::documentModel()->openedDocuments()) {
+        if (doc->displayName() == titlePattern) {
+            updateDocument(doc, document);
             break;
         }
     }
 }
 
-void QmlEngine::updateEditor(Core::IEditor *editor, const QTextDocument *document)
+void QmlEngine::updateDocument(Core::IDocument *document, const QTextDocument *textDocument)
 {
-    TextEditor::ITextEditor *textEditor = qobject_cast<TextEditor::ITextEditor*>(editor);
-    if (!textEditor)
+    TextEditor::BaseTextDocument *baseTextDocument
+            = qobject_cast<TextEditor::BaseTextDocument *>(document);
+    if (!baseTextDocument)
         return;
 
-    QPlainTextEdit *plainTextEdit =
-            qobject_cast<QPlainTextEdit *>(editor->widget());
-    if (!plainTextEdit)
-        return;
-    plainTextEdit->setPlainText(document->toPlainText());
-    plainTextEdit->setReadOnly(true);
+    baseTextDocument->document()->setPlainText(textDocument->toPlainText());
 }
 
 bool QmlEngine::canEvaluateScript(const QString &script)
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index 0c8ef50b470d050ed306c28a45e1cac7e9cabf05..4eb3807819a42b00e58683124b3378f944f035b3 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -43,7 +43,7 @@
 #include <QTextDocument>
 
 namespace Core {
-class IEditor;
+class IDocument;
 }
 
 namespace Debugger {
@@ -181,7 +181,7 @@ private:
         const QString &oldBasePath, const QString &newBasePath) const;
     QString qmlImportPath() const;
 
-    void updateEditor(Core::IEditor *editor, const QTextDocument *document);
+    void updateDocument(Core::IDocument *document, const QTextDocument *textDocument);
     bool canEvaluateScript(const QString &script);
     bool adjustBreakpointLineAndColumn(const QString &filePath, quint32 *line,
                                        quint32 *column, bool *valid);
diff --git a/src/plugins/debugger/sourceagent.cpp b/src/plugins/debugger/sourceagent.cpp
index 16132473fc19f9858d1cb5fac0596e32943dc810..daa966204a70de2be87876662837cd7618df0655 100644
--- a/src/plugins/debugger/sourceagent.cpp
+++ b/src/plugins/debugger/sourceagent.cpp
@@ -117,7 +117,7 @@ void SourceAgent::setContent(const QString &filePath, const QString &content)
                 CppEditor::Constants::CPPEDITOR_ID,
                 &titlePattern, content));
         QTC_ASSERT(d->editor, return);
-        d->editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
+        d->editor->document()->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
 
         BaseTextEditorWidget *baseTextEdit =
                 qobject_cast<BaseTextEditorWidget *>(d->editor->widget());