diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 0f387d1ac4d9090547338003c199c6f183386d96..e3f8f164ad5ca63eebbf6554b1bf3d56c84f5601 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -133,10 +133,6 @@ EditorManagerPlaceHolder* EditorManagerPlaceHolder::current()
 
 namespace Core {
 
-//struct EditorHistoryItem {
-//    IFile *file;
-//    QPointer<Internal::EditorView> view;
-//};
 
 struct EditorManagerPrivate {
     explicit EditorManagerPrivate(ICore *core, QWidget *parent);
@@ -167,8 +163,6 @@ struct EditorManagerPrivate {
     QAction *m_removeAllSplitsAction;
     QAction *m_gotoOtherSplitAction;
 
-    QList<IEditor *> m_editorHistory;
-
     Internal::OpenEditorsWindow *m_windowPopup;
     Core::BaseView *m_openEditorsView;
     Internal::EditorClosingCoreListener *m_coreListener;
@@ -196,8 +190,8 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
     m_closeCurrentEditorAction(new QAction(EditorManager::tr("Close"), parent)),
     m_closeAllEditorsAction(new QAction(EditorManager::tr("Close All"), parent)),
     m_closeOtherEditorsAction(new QAction(EditorManager::tr("Close Others"), parent)),
-    m_gotoNextDocHistoryAction(new QAction(EditorManager::tr("Next Document in History"), parent)),
-    m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Document in History"), parent)),
+    m_gotoNextDocHistoryAction(new QAction(EditorManager::tr("Next Open Document in History"), parent)),
+    m_gotoPreviousDocHistoryAction(new QAction(EditorManager::tr("Previous Open Document in History"), parent)),
     m_goBackAction(new QAction(QIcon(QLatin1String(":/help/images/previous.png")), EditorManager::tr("Go Back"), parent)),
     m_goForwardAction(new QAction(QIcon(QLatin1String(":/help/images/next.png")), EditorManager::tr("Go Forward"), parent)),
     m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
@@ -455,15 +449,6 @@ QString EditorManager::defaultExternalEditor() const
 #endif
 }
 
-void EditorManager::updateEditorHistory()
-{
-    IEditor *editor = currentEditor();
-    if (!editor)
-        return;
-    m_d->m_editorHistory.removeAll(editor);
-    m_d->m_editorHistory.prepend(editor);
-}
-
 void EditorManager::removeEditor(IEditor *editor)
 {
     bool isDuplicate = m_d->m_editorModel->isDuplicate(editor);
@@ -471,9 +456,7 @@ void EditorManager::removeEditor(IEditor *editor)
     if (!isDuplicate) {
         m_d->m_core->fileManager()->removeFile(editor->file());
     }
-    m_d->m_editorHistory.removeAll(editor);
     m_d->m_core->removeContextObject(editor);
-
 }
 
 void EditorManager::handleContextChange(Core::IContext *context)
@@ -502,9 +485,9 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto
     if (editor) {
         if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor))
             splitterOrView->view()->setCurrentEditor(editor);
+        m_d->m_view->updateEditorHistory(editor); // the global view should have a complete history
     }
     updateActions();
-    updateEditorHistory();
     emit currentEditorChanged(editor);
 }
 
@@ -533,6 +516,8 @@ Core::Internal::SplitterOrView *EditorManager::currentView() const
         view = m_d->m_currentEditor?
                m_d->m_splitter->findView(m_d->m_currentEditor):
                m_d->m_splitter->findFirstView();
+    if (!view)
+        return m_d->m_splitter;
     return view;
 }
 
@@ -616,7 +601,6 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
         else
             setCurrentView(newCurrent);
     }
-    updateEditorHistory();
 }
 
 QList<IEditor*>
@@ -840,7 +824,7 @@ void EditorManager::closeDuplicate(Core::IEditor *editor)
 
 Core::IEditor *EditorManager::pickUnusedEditor() const
 {
-    foreach (IEditor *editor, m_d->m_editorHistory) {
+    foreach (IEditor *editor, openedEditors()) {
         SplitterOrView *view = m_d->m_splitter->findView(editor);
         if (!view || view->editor() != editor)
             return editor;
@@ -848,7 +832,6 @@ Core::IEditor *EditorManager::pickUnusedEditor() const
     return 0;
 }
 
-
 Core::IEditor *EditorManager::activateEditor(const QModelIndex &index, Internal::EditorView *view, OpenEditorFlags flags)
 {
     IEditor *editor = index.data(Qt::UserRole).value<IEditor*>();
@@ -863,7 +846,11 @@ Core::IEditor *EditorManager::activateEditor(const QModelIndex &index, Internal:
 
 Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core::IEditor *editor)
 {
-    Q_ASSERT(view && editor)            ;
+    Q_ASSERT(view && editor);
+
+    if (view->currentEditor() && view->currentEditor()->file() == editor->file())
+        editor = view->currentEditor();
+
     if (!view->hasEditor(editor)) {
         bool duplicateSupported = editor->duplicateSupported();
         if (SplitterOrView *sourceView = m_d->m_splitter->findView(editor)) {
@@ -1043,10 +1030,6 @@ void EditorManager::addEditor(IEditor *editor, bool isDuplicate)
             m_d->m_core->fileManager()->addToRecentFiles(editor->file()->fileName());
         }
     }
-
-    m_d->m_editorHistory.removeAll(editor);
-    m_d->m_editorHistory.prepend(editor);
-
     emit editorOpened(editor);
 }
 
@@ -1142,7 +1125,7 @@ IEditor *EditorManager::openEditor(Core::Internal::EditorView *view, const QStri
 
     const QList<IEditor *> editors = editorsForFileName(fileName);
     if (!editors.isEmpty()) {
-        return activateEditor(editors.first(), flags);
+        return activateEditor(view, editors.first(), flags);
     }
     QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
     IEditor *editor = createEditor(editorKind, fileName);
@@ -1422,7 +1405,8 @@ void EditorManager::gotoNextDocHistory()
     if (dialog->isVisible()) {
         dialog->selectNextEditor();
     } else {
-        dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel);
+        EditorView *view = currentView()->view();
+        dialog->setEditors(m_d->m_view, view, m_d->m_editorModel);
         dialog->selectNextEditor();
         showWindowPopup();
     }
@@ -1434,7 +1418,8 @@ void EditorManager::gotoPreviousDocHistory()
     if (dialog->isVisible()) {
         dialog->selectPreviousEditor();
     } else {
-        dialog->setEditors(m_d->m_editorHistory, m_d->m_currentEditor, m_d->m_editorModel);
+        EditorView *view = currentView()->view();
+        dialog->setEditors(m_d->m_view, view, m_d->m_editorModel);
         dialog->selectPreviousEditor();
         showWindowPopup();
     }
@@ -1489,8 +1474,8 @@ void EditorManager::updateActions()
     m_d->m_closeOtherEditorsAction->setEnabled(openedCount > 1);
     m_d->m_closeOtherEditorsAction->setText((openedCount > 1 ? tr("Close All Except %1").arg(quotedName) : tr("Close Others")));
 
-    m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0);
-    m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorHistory.count() > 0);
+    m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0);
+    m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0);
     EditorView *view  = currentEditorView();
     m_d->m_goBackAction->setEnabled(view->canGoBack());
     m_d->m_goForwardAction->setEnabled(view->canGoForward());
@@ -1513,11 +1498,6 @@ OpenEditorsModel *EditorManager::openedEditorsModel() const
     return m_d->m_editorModel;
 }
 
-QList<IEditor*> EditorManager::editorHistory() const
-{
-    return m_d->m_editorHistory;
-}
-
 void EditorManager::addCurrentPositionToNavigationHistory(IEditor *editor, const QByteArray &saveState)
 {
     currentView()->view()->addCurrentPositionToNavigationHistory(editor, saveState);
@@ -1874,7 +1854,6 @@ void EditorManager::split(Qt::Orientation orientation)
                        : m_d->m_splitter->findFirstView();
     if (view && !view->splitter()) {
         view->split(orientation);
-        updateEditorHistory();
     }
     updateActions();
 }
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 1da33f80aa16bab2b895969457330f5a87f49d16..c5e45da9ad031fb871e56a9e50c8212befbc1632 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -36,6 +36,7 @@
 
 #include <QtGui/QWidget>
 #include <QtCore/QList>
+#include <QtCore/QPointer>
 
 QT_BEGIN_NAMESPACE
 class QSettings;
@@ -72,6 +73,8 @@ class SplitterOrView;
 
 class EditorClosingCoreListener;
 class OpenEditorsViewFactory;
+
+
 } // namespace Internal
 
 class CORE_EXPORT EditorManagerPlaceHolder : public QWidget
@@ -126,17 +129,17 @@ public:
 
     IEditor *currentEditor() const;
     IEditor *activateEditor(IEditor *editor, OpenEditorFlags flags = 0);
+    IEditor *activateEditor(const QModelIndex &index, Internal::EditorView *view = 0, OpenEditorFlags = 0);
+    IEditor *activateEditor(Core::Internal::EditorView *view, Core::IFile*file, OpenEditorFlags flags = 0);
 
     QList<IEditor*> openedEditors() const;
 
     OpenEditorsModel *openedEditorsModel() const;
-    IEditor *activateEditor(const QModelIndex &index, Internal::EditorView *view = 0, OpenEditorFlags = 0);
     void closeEditor(const QModelIndex &index);
     void closeOtherEditors(IEditor *editor);
 
     QList<IEditor*> editorsForFiles(QList<IFile*> files) const;
     //QList<EditorGroup *> editorGroups() const;
-    QList<IEditor*> editorHistory() const;
     void addCurrentPositionToNavigationHistory(IEditor *editor = 0, const QByteArray &saveState = QByteArray());
 
     bool saveEditor(IEditor *editor);
@@ -210,7 +213,6 @@ private slots:
     void gotoNextDocHistory();
     void gotoPreviousDocHistory();
     void handleContextChange(Core::IContext *context);
-    void updateEditorHistory();
     void updateActions();
     void revertToSaved();
     void makeCurrentEditorWritable();
@@ -239,11 +241,11 @@ private:
     void setCurrentEditor(IEditor *editor, bool ignoreNavigationHistory = false);
     void setCurrentView(Core::Internal::SplitterOrView *view);
     IEditor *activateEditor(Core::Internal::EditorView *view, Core::IEditor *editor, OpenEditorFlags flags = 0);
-    IEditor *activateEditor(Core::Internal::EditorView *view, Core::IFile*file, OpenEditorFlags flags = 0);
     IEditor *openEditor(Core::Internal::EditorView *view, const QString &fileName,
                         const QString &editorKind = QString(),
                         OpenEditorFlags flags = 0);
     Core::Internal::SplitterOrView *currentView() const;
+
     void closeEditor(Core::IEditor *editor);
     void closeDuplicate(Core::IEditor *editor);
     void closeView(Core::Internal::EditorView *view);
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index fab27321e5ee125276f50de9482014115d3e67f9..b19c7eacdca779765932d84b0e9bb9b676469444 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -323,6 +323,7 @@ void EditorView::setCurrentEditor(IEditor *editor)
     m_editorList->setCurrentIndex(m_model->indexOf(editor).row());
     updateEditorStatus(editor);
     updateToolBar(editor);
+    updateEditorHistory(editor);
 
     // FIXME: this keeps the editor hidden if switching from A to B and back
     if (editor != m_editorForInfoWidget) {
@@ -413,6 +414,35 @@ void EditorView::listContextMenu(QPoint pos)
     }
 }
 
+void EditorView::updateEditorHistory(IEditor *editor)
+{
+    if (!editor)
+        return;
+    IFile *file = editor->file();
+
+    if (!file)
+        return;
+
+    QString fileName = file->fileName();
+    QByteArray state = editor->saveState();
+
+    EditLocation location;
+    location.file = file;
+    location.fileName = file->fileName();
+    location.kind = editor->kind();
+    location.state = QVariant(state);
+
+    for(int i = 0; i < m_editorHistory.size(); ++i) {
+        if (m_editorHistory.at(i).file == 0
+            || m_editorHistory.at(i).file == file
+            ){
+            m_editorHistory.removeAt(i--);
+            continue;
+        }
+    }
+    m_editorHistory.prepend(location);
+}
+
 void EditorView::addCurrentPositionToNavigationHistory(IEditor *editor, const QByteArray &saveState)
 {
     if (editor && editor != currentEditor()) {
@@ -436,29 +466,32 @@ void EditorView::addCurrentPositionToNavigationHistory(IEditor *editor, const QB
         state = saveState;
     }
 
-    EditLocation *location = new EditLocation;
-    location->file = file;
-    location->fileName = file->fileName();
-    location->kind = editor->kind();
-    location->state = QVariant(state);
+    EditLocation location;
+    location.file = file;
+    location.fileName = file->fileName();
+    location.kind = editor->kind();
+    location.state = QVariant(state);
     m_currentNavigationHistoryPosition = qMin(m_currentNavigationHistoryPosition, m_navigationHistory.size()); // paranoia
     m_navigationHistory.insert(m_currentNavigationHistoryPosition, location);
     ++m_currentNavigationHistoryPosition;
 
     while (m_navigationHistory.size() >= 30) {
         if (m_currentNavigationHistoryPosition > 15) {
-            delete m_navigationHistory.takeFirst();
+            m_navigationHistory.takeFirst();
             --m_currentNavigationHistoryPosition;
         } else {
-            delete m_navigationHistory.takeLast();
+            m_navigationHistory.takeLast();
         }
     }
 }
 
 void EditorView::copyNavigationHistoryFrom(EditorView* other)
 {
+    if (!other)
+        return;
     m_currentNavigationHistoryPosition = other->m_currentNavigationHistoryPosition;
     m_navigationHistory = other->m_navigationHistory;
+    m_editorHistory = other->m_editorHistory;
 }
 
 void EditorView::updateCurrentPositionInNavigationHistory()
@@ -470,10 +503,10 @@ void EditorView::updateCurrentPositionInNavigationHistory()
     IFile *file = editor->file();
     EditLocation *location;
     if (m_currentNavigationHistoryPosition < m_navigationHistory.size()) {
-        location = m_navigationHistory[m_currentNavigationHistoryPosition];
+        location = &m_navigationHistory[m_currentNavigationHistoryPosition];
     } else {
-        location = new EditLocation;
-        m_navigationHistory.append(location);
+        m_navigationHistory.append(EditLocation());
+        location = &m_navigationHistory[m_navigationHistory.size()-1];
     }
     location->file = file;
     location->fileName = file->fileName();
@@ -487,18 +520,18 @@ void EditorView::goBackInNavigationHistory()
     updateCurrentPositionInNavigationHistory();
     while (m_currentNavigationHistoryPosition > 0) {
         --m_currentNavigationHistoryPosition;
-        EditLocation *location = m_navigationHistory.at(m_currentNavigationHistoryPosition);
+        EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition);
         IEditor *editor;
-        if (location->file) {
-            editor = em->activateEditor(this, location->file, EditorManager::IgnoreNavigationHistory);
+        if (location.file) {
+            editor = em->activateEditor(this, location.file, EditorManager::IgnoreNavigationHistory);
         } else {
-            editor = em->openEditor(this, location->fileName, location->kind, EditorManager::IgnoreNavigationHistory);
+            editor = em->openEditor(this, location.fileName, location.kind, EditorManager::IgnoreNavigationHistory);
             if (!editor) {
-                delete m_navigationHistory.takeAt(m_currentNavigationHistoryPosition);
+                m_navigationHistory.removeAt(m_currentNavigationHistoryPosition);
                 continue;
             }
         }
-        editor->restoreState(location->state.toByteArray());
+        editor->restoreState(location.state.toByteArray());
         break;
     }
 }
@@ -510,19 +543,19 @@ void EditorView::goForwardInNavigationHistory()
     if (m_currentNavigationHistoryPosition >= m_navigationHistory.size()-1)
         return;
     ++m_currentNavigationHistoryPosition;
-    EditLocation *location = m_navigationHistory.at(m_currentNavigationHistoryPosition);
+    EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition);
     IEditor *editor;
-    if (location->file) {
-        editor = em->activateEditor(this, location->file, EditorManager::IgnoreNavigationHistory);
+    if (location.file) {
+        editor = em->activateEditor(this, location.file, EditorManager::IgnoreNavigationHistory);
     } else {
-        editor = em->openEditor(this, location->fileName, location->kind, EditorManager::IgnoreNavigationHistory);
+        editor = em->openEditor(this, location.fileName, location.kind, EditorManager::IgnoreNavigationHistory);
         if (!editor) {
             //TODO
-            qDebug() << Q_FUNC_INFO << "can't open file" << location->fileName;
+            qDebug() << Q_FUNC_INFO << "can't open file" << location.fileName;
             return;
         }
     }
-    editor->restoreState(location->state.toByteArray());
+    editor->restoreState(location.state.toByteArray());
 }
 
 
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 343c4e073f982a0ab5b23cf8b9ef83a058c5a83c..35ddcb6ad82c3148ab9d6d323b953457754b2399 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -131,22 +131,22 @@ private:
     QList<IEditor *> m_editors;
     QMap<QWidget *, IEditor *> m_widgetEditorMap;
 
-    QList<EditLocation *> m_navigationHistory;
-    void clearNavigationHistory() {
-        qDeleteAll(m_navigationHistory);
-        m_navigationHistory.clear();
-    }
+    QList<EditLocation> m_navigationHistory;
+    QList<EditLocation> m_editorHistory;
     int m_currentNavigationHistoryPosition;
     void updateCurrentPositionInNavigationHistory();
 
+
 public:
     inline bool canGoForward() const { return m_currentNavigationHistoryPosition < m_navigationHistory.size()-1; }
     inline bool canGoBack() const { return m_currentNavigationHistoryPosition > 0; }
     void goBackInNavigationHistory();
     void goForwardInNavigationHistory();
     void addCurrentPositionToNavigationHistory(IEditor *editor = 0, const QByteArray &saveState = QByteArray());
+    inline QList<EditLocation> editorHistory() const { return m_editorHistory; }
 
     void copyNavigationHistoryFrom(EditorView* other);
+    void updateEditorHistory(IEditor *editor);
 };
 
 class SplitterOrView  : public QWidget
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
index 82bad267ba1d94328ed6a6842f3250eda2b36b2d..601900b288bd9705676759e7fb1c63dabab24f4c 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
@@ -281,6 +281,14 @@ QModelIndex OpenEditorsModel::indexOf(IEditor *editor) const
     return createIndex(idx, 0);
 }
 
+QString OpenEditorsModel::displayNameForFile(IFile *file) const
+{
+    for (int i = 0; i < m_editors.count(); ++i)
+        if (m_editors.at(i).editor && m_editors.at(i).editor->file() == file)
+            return m_editors.at(i).editor->displayName();
+    return QString();
+}
+
 void OpenEditorsModel::itemChanged()
 {
     emitDataChanged(qobject_cast<IEditor*>(sender()));
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.h b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
index 9172f2e29ee040f244912bae5ece5aa2163ab5ab..deaf14c953af025eebb6032d3c4d510c8be0f0dd 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.h
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
@@ -37,6 +37,7 @@
 namespace Core {
 
 class IEditor;
+class IFile;
 
 class CORE_EXPORT OpenEditorsModel : public QAbstractItemModel
 {
@@ -81,6 +82,8 @@ public:
     void makeOriginal(IEditor *duplicate);
     QModelIndex indexOf(IEditor *editor) const;
 
+    QString displayNameForFile(IFile *file) const;
+
 private slots:
     void itemChanged();
 
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index 2684ca09755bc51149cd224e1ca447ac49a2e081..4db7b369af8e41b8f3ef40946bb65678c13704db 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -34,7 +34,8 @@
 
 #include <QtGui/QHeaderView>
 
-Q_DECLARE_METATYPE(Core::IEditor *)
+Q_DECLARE_METATYPE(Core::Internal::EditorView*)
+Q_DECLARE_METATYPE(Core::IFile *)
 
 using namespace Core;
 using namespace Core::Internal;
@@ -188,41 +189,68 @@ void OpenEditorsWindow::centerOnItem(int selectedIndex)
     }
 }
 
-void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model)
+void OpenEditorsWindow::setEditors(EditorView *mainView, EditorView *view, OpenEditorsModel *model)
 {
     static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png"));
     static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png"));
 
     m_editorList->clear();
+    bool first = true;
 
-    QList<IEditor *> doneList;
-    QList<IFile *>doneFileList;
-    foreach (IEditor *editor, editors) {
-        if (doneList.contains(editor))
+    QSet<IFile*> filesDone;
+    foreach (const EditLocation &hi, view->editorHistory()) {
+        if (hi.file == 0 || filesDone.contains(hi.file))
             continue;
-        doneList += editor;
-        if (!editor->widget()->isVisible() && doneFileList.contains(editor->file()))
-            continue;
-        doneFileList += editor->file();
+        filesDone.insert(hi.file.data());
 
         QTreeWidgetItem *item = new QTreeWidgetItem();
 
-        QString title = editor->displayName();
-        if (editor->file()->isModified())
+        QString title = model->displayNameForFile(hi.file);
+        if (hi.file && hi.file->isModified())
             title += tr("*");
-        item->setIcon(0, editor->file()->isReadOnly() ? lockedIcon : emptyIcon);
+        item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon);
         item->setText(0, title);
-        item->setToolTip(0, editor->file()->fileName());
-        item->setData(0, Qt::UserRole, QVariant::fromValue(editor));
+        item->setToolTip(0, hi.file->fileName());
+        item->setData(0, Qt::UserRole, QVariant::fromValue(hi.file.data()));
+        item->setData(0, Qt::UserRole+1, QVariant::fromValue(view));
         item->setTextAlignment(0, Qt::AlignLeft);
 
         m_editorList->addTopLevelItem(item);
 
-        if (editor == current)
+        if (first){
             m_editorList->setCurrentItem(item);
-
+            first = false;
+        }
     }
 
+    // add missing editors from the main view
+    if (mainView != view) {
+        foreach (const EditLocation &hi, mainView->editorHistory()) {
+            if (hi.file == 0 || filesDone.contains(hi.file))
+                continue;
+            filesDone.insert(hi.file.data());
+
+            QTreeWidgetItem *item = new QTreeWidgetItem();
+
+            QString title = model->displayNameForFile(hi.file);
+            if (hi.file && hi.file->isModified())
+                title += tr("*");
+            item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon);
+            item->setText(0, title);
+            item->setToolTip(0, hi.file->fileName());
+            item->setData(0, Qt::UserRole, QVariant::fromValue(hi.file.data()));
+            item->setData(0, Qt::UserRole+1, QVariant::fromValue(view));
+            item->setTextAlignment(0, Qt::AlignLeft);
+
+            m_editorList->addTopLevelItem(item);
+
+            if (first){
+                m_editorList->setCurrentItem(item);
+                first = false;
+            }
+        }
+}
+
     // add purely restored editors which are not initialised yet
     foreach (OpenEditorsModel::Entry entry, model->entries()) {
         if (entry.editor)
@@ -232,7 +260,7 @@ void OpenEditorsWindow::setEditors(const QList<IEditor *>&editors, IEditor *curr
         item->setIcon(0, emptyIcon);
         item->setText(0, title);
         item->setToolTip(0, entry.fileName());
-        item->setData(0, Qt::UserRole+1, QVariant::fromValue(entry.kind()));
+        item->setData(0, Qt::UserRole+2, QVariant::fromValue(entry.kind()));
         item->setTextAlignment(0, Qt::AlignLeft);
 
         m_editorList->addTopLevelItem(item);
@@ -244,10 +272,12 @@ void OpenEditorsWindow::selectEditor(QTreeWidgetItem *item)
 {
     if (!item)
         return;
-    if (IEditor *editor = item->data(0, Qt::UserRole).value<IEditor*>())
-        EditorManager::instance()->activateEditor(editor);
-    else
-        EditorManager::instance()->openEditor(item->toolTip(0), item->data(0, Qt::UserRole+1).toByteArray());
+    if (IFile *file = item->data(0, Qt::UserRole).value<IFile*>()) {
+        EditorView *view = item->data(0, Qt::UserRole+1).value<EditorView*>();
+        EditorManager::instance()->activateEditor(view, file);
+    } else {
+        EditorManager::instance()->openEditor(item->toolTip(0), item->data(0, Qt::UserRole+2).toByteArray());
+    }
 }
 
 void OpenEditorsWindow::editorClicked(QTreeWidgetItem *item)
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.h b/src/plugins/coreplugin/editormanager/openeditorswindow.h
index 21f53bdf429529bffb1a142e4f4baabbd39fa39e..7ce25c1ac6498a42f8c645da9cf82dd89229b915 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.h
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.h
@@ -44,6 +44,9 @@ class OpenEditorsModel;
 
 namespace Internal {
 
+class EditorHistoryItem;
+class EditorView;
+
 class OpenEditorsWindow : public QWidget
 {
     Q_OBJECT
@@ -54,7 +57,7 @@ public:
     OpenEditorsWindow(QWidget *parent = 0);
     ~OpenEditorsWindow() {}
 
-    void setEditors(const QList<IEditor *>&editors, IEditor *current, OpenEditorsModel *model);
+    void setEditors(EditorView *mainView, EditorView *view, OpenEditorsModel *model);
 
     bool event(QEvent *e);
     bool eventFilter(QObject *src, QEvent *e);
diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp
index df8f7352adbf6b28307223f4e3e7c55f5964ea9a..1a4803ca71d6bc84adf4302ac951d22f63c59383 100644
--- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp
+++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.cpp
@@ -256,11 +256,6 @@ QList<Core::IEditor*> EditorManagerPrototype::openedEditors() const
     return callee()->openedEditors();
 }
 
-QList<Core::IEditor*> EditorManagerPrototype::editorHistory() const
-{
-    return callee()->editorHistory();
-}
-
 QList<Core::IEditor*> EditorManagerPrototype::editorsForFiles(QList<Core::IFile*> files) const
 {
     return callee()->editorsForFiles(files);
diff --git a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h
index a8d386bbf96596d0151503e5e2faac8b1014dcfd..52bad34648337272240ecb2cb72060aadf946d54 100644
--- a/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h
+++ b/src/plugins/coreplugin/scriptmanager/qworkbench_wrapper.h
@@ -165,7 +165,6 @@ class EditorManagerPrototype : public QObject, public QScriptable
     Q_OBJECT
     Q_PROPERTY(Core::IEditor* currentEditor READ currentEditor WRITE activateEditor DESIGNABLE false SCRIPTABLE true STORED false)
     Q_PROPERTY(QList<Core::IEditor*> openedEditors READ openedEditors DESIGNABLE false SCRIPTABLE true STORED false)
-    Q_PROPERTY(QList<Core::IEditor*> editorHistory  READ editorHistory DESIGNABLE false SCRIPTABLE true STORED false)
 public:
     typedef  Core::EditorManager EditorManager;