diff --git a/src/plugins/android/androidmanifesteditor.cpp b/src/plugins/android/androidmanifesteditor.cpp
index 4b5b340bb19052f60600d5f6aa218328cc5313c7..5f1bc1e8a3993beae4473735e562edeff72378e4 100644
--- a/src/plugins/android/androidmanifesteditor.cpp
+++ b/src/plugins/android/androidmanifesteditor.cpp
@@ -73,11 +73,6 @@ Core::Id AndroidManifestEditor::id() const
     return Constants::ANDROID_MANIFEST_EDITOR_ID;
 }
 
-bool AndroidManifestEditor::isTemporary() const
-{
-    return false;
-}
-
 void AndroidManifestEditor::changeEditorPage(QAction *action)
 {
     AndroidManifestEditorWidget *editorWidget = static_cast<AndroidManifestEditorWidget *>(widget());
diff --git a/src/plugins/android/androidmanifesteditor.h b/src/plugins/android/androidmanifesteditor.h
index b6073d9005b2c37a2b27f86809d4efbf6b263272..a51acefe1bef7d0fc95da613e2cb869c3074e41d 100644
--- a/src/plugins/android/androidmanifesteditor.h
+++ b/src/plugins/android/androidmanifesteditor.h
@@ -51,7 +51,6 @@ public:
     explicit AndroidManifestEditor(AndroidManifestEditorWidget *editorWidget);
 
     Core::Id id() const;
-    bool isTemporary() const;
 
 private slots:
     void changeEditorPage(QAction *action);
diff --git a/src/plugins/bineditor/bineditor.cpp b/src/plugins/bineditor/bineditor.cpp
index 25b12f0cc6e99e35ebe968e6efa7ae964aafedb2..516c9db178be13860d70fb7a9a60564b4f2de473 100644
--- a/src/plugins/bineditor/bineditor.cpp
+++ b/src/plugins/bineditor/bineditor.cpp
@@ -1623,11 +1623,6 @@ void BinEditorWidget::asIntegers(int offset, int count, quint64 &bigEndianValue,
     }
 }
 
-bool BinEditorWidget::isMemoryView() const
-{
-    return editor()->property("MemoryView").toBool();
-}
-
 void BinEditorWidget::setMarkup(const QList<Markup> &markup)
 {
     m_markup = markup;
diff --git a/src/plugins/bineditor/bineditor.h b/src/plugins/bineditor/bineditor.h
index 81b4b330453f435cafbad7209351dd910c9ab5a6..d02402da612b1adf92c96c71eec1372b8016497f 100644
--- a/src/plugins/bineditor/bineditor.h
+++ b/src/plugins/bineditor/bineditor.h
@@ -119,8 +119,6 @@ public:
 
     QString addressString(quint64 address);
 
-    bool isMemoryView() const; // Is a debugger memory view without file?
-
     static const int SearchStride = 1024 * 1024;
 
     QList<Markup> markup() const { return m_markup; }
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 7308c99c709094507fc1b1833e5f3c2383f54a14..251655ba7a1b6cb3f2bc6024a9a190dc641941cf 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -270,11 +270,12 @@ public:
 
     QString suggestedFileName() const { return QString(); }
 
-    bool isModified() const { return m_widget->isMemoryView() ? false : m_widget->isModified(); }
+    bool isModified() const { return isTemporary()/*e.g. memory view*/ ? false
+                                                                       : m_widget->isModified(); }
 
     bool isFileReadOnly() const {
         const QString fn = filePath();
-        if (m_widget->isMemoryView() || fn.isEmpty())
+        if (fn.isEmpty())
             return false;
         const QFileInfo fi(fn);
         return !fi.isWritable();
@@ -355,8 +356,6 @@ public:
 
     QWidget *toolBar() { return m_toolBar; }
 
-    bool isTemporary() const { return m_widget->isMemoryView(); }
-
 private slots:
     void updateCursorPosition(int position) {
         m_addressEdit->setText(QString::number(m_widget->baseAddress() + position, 16));
diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.h b/src/plugins/cmakeprojectmanager/cmakeeditor.h
index 3a27b9b1cd094dd0f6f4ca8781e78c3c213e1eab..529251645846a73fef2aa70e7a8650d88968c824 100644
--- a/src/plugins/cmakeprojectmanager/cmakeeditor.h
+++ b/src/plugins/cmakeprojectmanager/cmakeeditor.h
@@ -58,7 +58,6 @@ public:
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
     Core::Id id() const;
-    bool isTemporary() const { return false; }
 
 private slots:
     void markAsChanged();
diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp
index 1c1a6a859c0930464c805810df34d9d67ebf8b54..a90ab6c250c2a81545fb0b69a7409757ba8651c2 100644
--- a/src/plugins/coreplugin/documentmanager.cpp
+++ b/src/plugins/coreplugin/documentmanager.cpp
@@ -1035,7 +1035,7 @@ void DocumentManager::syncWithEditor(const QList<Core::IContext *> &context)
         return;
 
     Core::IEditor *editor = Core::EditorManager::currentEditor();
-    if (!editor || editor->isTemporary())
+    if (!editor || editor->document()->isTemporary())
         return;
     foreach (IContext *c, context) {
         if (editor->widget() == c->widget()) {
diff --git a/src/plugins/coreplugin/editormanager/documentmodel.cpp b/src/plugins/coreplugin/editormanager/documentmodel.cpp
index bd911f973722cfc2b3faae4f3e1e01b69b95e68f..f4191105fd0039fdd13038e69f871b03c5a5529e 100644
--- a/src/plugins/coreplugin/editormanager/documentmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/documentmodel.cpp
@@ -278,6 +278,14 @@ int DocumentModel::indexOfDocument(IDocument *document) const
     return -1;
 }
 
+DocumentModel::Entry *DocumentModel::entryForDocument(IDocument *document) const
+{
+    int index = indexOfDocument(document);
+    if (index < 0)
+        return 0;
+    return d->m_documents.at(index);
+}
+
 QList<IDocument *> DocumentModel::openedDocuments() const
 {
     return d->m_editors.keys();
diff --git a/src/plugins/coreplugin/editormanager/documentmodel.h b/src/plugins/coreplugin/editormanager/documentmodel.h
index 6f6789558d776d701c407b57d1cbc4451d6ae001..e2e5c309c63171d3317119b5ed8149e354eca7bd 100644
--- a/src/plugins/coreplugin/editormanager/documentmodel.h
+++ b/src/plugins/coreplugin/editormanager/documentmodel.h
@@ -77,6 +77,7 @@ public:
     int documentCount() const;
     QList<Entry *> documents() const;
     int indexOfDocument(IDocument *document) const;
+    Entry *entryForDocument(IDocument *document) const;
     QList<IDocument *> openedDocuments() const;
 
     QList<IEditor *> editorsForDocument(IDocument *document) const;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index b6742b39cb1aac8662ebf350cb87f154d6ce696a..3db507faf2388942cb6171945e168e9ff5feeae7 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1104,7 +1104,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
     foreach (IEditor *editor, acceptedEditors) {
         emit editorAboutToClose(editor);
         if (!editor->document()->filePath().isEmpty()
-                && !editor->isTemporary()) {
+                && !editor->document()->isTemporary()) {
             QByteArray state = editor->saveState();
             if (!state.isEmpty())
                 d->m_editorStates.insert(editor->document()->filePath(), QVariant(state));
@@ -1421,7 +1421,7 @@ void EditorManager::addEditor(IEditor *editor)
     bool isNewDocument = false;
     d->m_documentModel->addEditor(editor, &isNewDocument);
     if (isNewDocument) {
-        const bool isTemporary = editor->isTemporary();
+        const bool isTemporary = editor->document()->isTemporary();
         const bool addWatcher = !isTemporary;
         DocumentManager::addDocument(editor->document(), addWatcher);
         if (!isTemporary)
@@ -1834,18 +1834,12 @@ bool EditorManager::saveDocumentAs(IDocument *documentParam)
 /* Adds the file name to the recent files if there is at least one non-temporary editor for it */
 void EditorManager::addDocumentToRecentFiles(IDocument *document)
 {
-    bool isTemporary = true;
-    Id editorId;
-    QList<IEditor *> editors = editorsForDocument(document);
-    foreach (IEditor *editor, editors) {
-        if (!editor->isTemporary()) {
-            editorId = editor->id();
-            isTemporary = false;
-            break;
-        }
-    }
-    if (!isTemporary)
-        DocumentManager::addToRecentFiles(document->filePath(), editorId);
+    if (document->isTemporary())
+        return;
+    DocumentModel::Entry *entry = d->m_documentModel->entryForDocument(document);
+    if (!entry)
+        return;
+    DocumentManager::addToRecentFiles(document->filePath(), entry->id());
 }
 
 void EditorManager::gotoNextDocHistory()
@@ -2164,7 +2158,7 @@ QByteArray EditorManager::saveState() const
     QList<IEditor *> editors = openedEditors();
     foreach (IEditor *editor, editors) {
         if (!editor->document()->filePath().isEmpty()
-                && !editor->isTemporary()) {
+                && !editor->document()->isTemporary()) {
             QByteArray state = editor->saveState();
             if (!state.isEmpty())
                 d->m_editorStates.insert(editor->document()->filePath(), QVariant(state));
@@ -2176,22 +2170,15 @@ QByteArray EditorManager::saveState() const
     QList<DocumentModel::Entry *> entries = d->m_documentModel->documents();
     int entriesCount = 0;
     foreach (DocumentModel::Entry *entry, entries) {
-        // TODO: isTemporary should move to IDocument
-        IEditor *editor = entry->document
-                ? d->m_documentModel->editorsForDocument(entry->document).first()
-                : 0;
         // The editor may be 0 if it was not loaded yet: In that case it is not temporary
-        if (!editor || !editor->isTemporary())
+        if (!entry->document || !entry->document->isTemporary())
             ++entriesCount;
     }
 
     stream << entriesCount;
 
     foreach (DocumentModel::Entry *entry, entries) {
-        IEditor *editor = entry->document
-                ? d->m_documentModel->editorsForDocument(entry->document).first()
-                : 0;
-        if (!editor || !editor->isTemporary())
+        if (!entry->document || !entry->document->isTemporary())
             stream << entry->fileName() << entry->displayName() << entry->id();
     }
 
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index 7ce07f322d562293933b4a426aa8a4a249e98512..f7d6f7c22e24b0db34651c7398b633f1c6d6c669 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -737,11 +737,11 @@ QByteArray SplitterOrView::saveState() const
         IEditor* e = editor();
 
         // don't save state of temporary or ad-hoc editors
-        if (e && (e->isTemporary() || e->document()->filePath().isEmpty())) {
+        if (e && (e->document()->isTemporary() || e->document()->filePath().isEmpty())) {
             // look for another editor that is more suited
             e = 0;
             foreach (IEditor *otherEditor, editors()) {
-                if (!otherEditor->isTemporary() && !otherEditor->document()->filePath().isEmpty()) {
+                if (!otherEditor->document()->isTemporary() && !otherEditor->document()->filePath().isEmpty()) {
                     e = otherEditor;
                     break;
                 }
diff --git a/src/plugins/coreplugin/editormanager/ieditor.h b/src/plugins/coreplugin/editormanager/ieditor.h
index 529a141f27a29111e4e4cb25715e949b6ee7bc15..ca36b092ba1b6b47b2b4a907a69d06e471c4b577 100644
--- a/src/plugins/coreplugin/editormanager/ieditor.h
+++ b/src/plugins/coreplugin/editormanager/ieditor.h
@@ -62,8 +62,6 @@ public:
     virtual int currentColumn() const { return 0; }
     virtual void gotoLine(int line, int column = 0) { Q_UNUSED(line) Q_UNUSED(column) }
 
-    virtual bool isTemporary() const = 0;
-
     virtual QWidget *toolBar() = 0;
 
     virtual bool isDesignModePreferred() const { return false; }
diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp
index 8bb8f26c08006d96782bafafc4de1ac000faa3c4..9b4ce965b71446bd978be4f5a6b3cc3d65acc445 100644
--- a/src/plugins/coreplugin/idocument.cpp
+++ b/src/plugins/coreplugin/idocument.cpp
@@ -43,7 +43,11 @@
 
 namespace Core {
 
-IDocument::IDocument(QObject *parent) : QObject(parent), m_infoBar(0), m_hasWriteWarning(false), m_restored(false)
+IDocument::IDocument(QObject *parent) : QObject(parent),
+    m_temporary(false),
+    m_infoBar(0),
+    m_hasWriteWarning(false),
+    m_restored(false)
 {
 }
 
@@ -78,6 +82,25 @@ bool IDocument::isFileReadOnly() const
     return !QFileInfo(filePath()).isWritable();
 }
 
+/*!
+    Returns if the document is a temporary that should for example not be considered
+    when saving/restoring the session state, recent files, etc. Defaults to false.
+    \sa setTemporary()
+*/
+bool IDocument::isTemporary() const
+{
+    return m_temporary;
+}
+
+/*!
+    Sets if the document is \a temporary.
+    \sa isTemporary()
+*/
+void IDocument::setTemporary(bool temporary)
+{
+    m_temporary = temporary;
+}
+
 bool IDocument::autoSave(QString *errorString, const QString &fileName)
 {
     if (!save(errorString, fileName, true))
diff --git a/src/plugins/coreplugin/idocument.h b/src/plugins/coreplugin/idocument.h
index 76f095a60db2221d2c1cbe5b5d8f62106f838baa..d257626a17c1e69028f636cb03601c768fd3092c 100644
--- a/src/plugins/coreplugin/idocument.h
+++ b/src/plugins/coreplugin/idocument.h
@@ -88,6 +88,8 @@ public:
     void setDisplayName(const QString &name);
 
     virtual bool isFileReadOnly() const;
+    bool isTemporary() const;
+    void setTemporary(bool temporary);
 
     virtual QString defaultPath() const = 0;
     virtual QString suggestedFileName() const = 0;
@@ -122,6 +124,7 @@ signals:
 private:
     QString m_filePath;
     QString m_displayName;
+    bool m_temporary;
     QString m_autoSaveName;
     InfoBar *m_infoBar;
     bool m_hasWriteWarning;
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index 341d4fc87252ab645dd59c6ab836f4e0ec4af8de..0a91678e09bc6c4d67566aab68b885b1fe498e64 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -79,7 +79,6 @@ public:
     Core::IEditor *duplicate(QWidget *parent);
     Core::Id id() const;
 
-    bool isTemporary() const { return false; }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
 
     const Utils::CommentDefinition *commentDefinition() const;
diff --git a/src/plugins/debugger/debuggerinternalconstants.h b/src/plugins/debugger/debuggerinternalconstants.h
index 98118808b787788fc4728185dfccaf85225df0f5..b5ed7da1b758912b6ba740ad59e760b26ec5ab09 100644
--- a/src/plugins/debugger/debuggerinternalconstants.h
+++ b/src/plugins/debugger/debuggerinternalconstants.h
@@ -46,7 +46,6 @@ namespace Internal {
 
 const char OPENED_BY_DEBUGGER[]         = "OpenedByDebugger";
 const char OPENED_WITH_DISASSEMBLY[]    = "DisassemblerView";
-const char OPENED_WITH_MEMORY[]         = "MemoryView";
 
 // Debug action
 const char DEBUG[]                      = "Debugger.Debug";
diff --git a/src/plugins/debugger/memoryagent.cpp b/src/plugins/debugger/memoryagent.cpp
index 735e9bc29f9372125a388e33271cba8f3535e26b..84f952d3ae61efbb172d6225d49079cd5edca0cc 100644
--- a/src/plugins/debugger/memoryagent.cpp
+++ b/src/plugins/debugger/memoryagent.cpp
@@ -182,7 +182,7 @@ bool MemoryAgent::doCreateBinEditor(quint64 addr, unsigned flags,
     if (!editor)
         return false;
     editor->document()->setProperty(Constants::OPENED_BY_DEBUGGER, QVariant(true));
-    editor->document()->setProperty(Constants::OPENED_WITH_MEMORY, QVariant(true));
+    editor->document()->setTemporary(true);
     QWidget *editorBinEditor = editor->widget();
     connectBinEditorWidget(editorBinEditor);
     MemoryView::setBinEditorReadOnly(editorBinEditor, readOnly);
diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp
index b7de0a3c06cc1ea98dac8b0cfae9eb680561ef46..834c7a2a801e65d86025b35a8e17e9ea3284ef67 100644
--- a/src/plugins/designer/formwindoweditor.cpp
+++ b/src/plugins/designer/formwindoweditor.cpp
@@ -206,11 +206,6 @@ bool FormWindowEditor::restoreState(const QByteArray &state)
     return d->m_textEditor.restoreState(state);
 }
 
-bool FormWindowEditor::isTemporary() const
-{
-    return false;
-}
-
 QWidget *FormWindowEditor::toolBar()
 {
     return 0;
diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h
index 94eef91280d2f7d2af820b39d3f7fa715d732398..3cba63b2c33b834da9c5d6356a2cb052ddcc9c39 100644
--- a/src/plugins/designer/formwindoweditor.h
+++ b/src/plugins/designer/formwindoweditor.h
@@ -75,8 +75,6 @@ public:
     virtual QByteArray saveState() const;
     virtual bool restoreState(const QByteArray &state);
 
-    virtual bool isTemporary() const;
-
     virtual QWidget *toolBar();
 
     virtual bool isDesignModePreferred() const;
diff --git a/src/plugins/diffeditor/diffeditor.h b/src/plugins/diffeditor/diffeditor.h
index 5a33e151fe111aaabcbe09867e9e6ba5ce71341f..c8f49444077b803dafacaab8713dee9fc355d316 100644
--- a/src/plugins/diffeditor/diffeditor.h
+++ b/src/plugins/diffeditor/diffeditor.h
@@ -64,7 +64,6 @@ public:
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
-    bool isTemporary() const { return true; }
     DiffEditorWidget *editorWidget() const { return m_editorWidget; }
 
     QWidget *toolBar();
diff --git a/src/plugins/diffeditor/diffeditorfile.cpp b/src/plugins/diffeditor/diffeditorfile.cpp
index deeb4cd81e569d0547e88b28c2150882d23b8603..7a52f708426eb79a595dba892f55cafffa29386b 100644
--- a/src/plugins/diffeditor/diffeditorfile.cpp
+++ b/src/plugins/diffeditor/diffeditorfile.cpp
@@ -43,6 +43,7 @@ DiffEditorFile::DiffEditorFile(const QString &mimeType, QObject *parent) :
     m_modified(false)
 {
     setDisplayName(QCoreApplication::translate("DiffEditor", Constants::DIFF_EDITOR_DISPLAY_NAME));
+    setTemporary(true);
 }
 
 void DiffEditorFile::setModified(bool modified)
diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp
index 1c80c97881623824e35e182d2844564e8a4c298d..8b3b098dcbe2dfaf4393960bd9d82f90afe7acea 100644
--- a/src/plugins/diffeditor/diffeditorwidget.cpp
+++ b/src/plugins/diffeditor/diffeditorwidget.cpp
@@ -113,7 +113,6 @@ public:
     }
 
     Core::Id id() const { return "DiffViewEditor"; }
-    bool isTemporary() const { return false; }
 
 private slots:
     void slotTooltipRequested(TextEditor::ITextEditor *editor, const QPoint &globalPoint, int position);
diff --git a/src/plugins/diffeditor/diffshoweditor.cpp b/src/plugins/diffeditor/diffshoweditor.cpp
index 310acf03b7d0f623eb2970055421a0e5127529b9..2198874daac4a25fa08a61f2351e61cd4160e503 100644
--- a/src/plugins/diffeditor/diffshoweditor.cpp
+++ b/src/plugins/diffeditor/diffshoweditor.cpp
@@ -54,7 +54,6 @@ public:
     DiffShowEditorWidgetEditable(BaseTextEditorWidget *editorWidget) : BaseTextEditor(editorWidget) {}
 
     Core::Id id() const { return "DiffShowViewEditor"; }
-    bool isTemporary() const { return false; }
 };
 
 class DiffShowEditorWidget : public BaseTextEditorWidget
diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.h b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
index a2fa73a4d7afc5038ea54fb3eda0e5f183605104..e5fedd2b16a06f582d8c6bfa8deb32524b7b7a7c 100644
--- a/src/plugins/genericprojectmanager/genericprojectfileseditor.h
+++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.h
@@ -75,7 +75,6 @@ public:
     Core::Id id() const;
     bool duplicateSupported() const;
     Core::IEditor *duplicate(QWidget *parent);
-    bool isTemporary() const { return false; }
 };
 
 class ProjectFilesEditorWidget : public TextEditor::BaseTextEditorWidget
diff --git a/src/plugins/glsleditor/glsleditoreditable.h b/src/plugins/glsleditor/glsleditoreditable.h
index 3e6ce0a5292cc04efe0c94b1b7a9172fb3a06634..9b8ecd64546a2fe510e89d93f292dff89abdfb1f 100644
--- a/src/plugins/glsleditor/glsleditoreditable.h
+++ b/src/plugins/glsleditor/glsleditoreditable.h
@@ -47,7 +47,6 @@ public:
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
     Core::Id id() const;
-    bool isTemporary() const { return false; }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
 };
 
diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp
index 0bc59e5b1ed2cda47baab2f9943fc9a35d9d7cc9..3604c1195a686268ab8b491dcf337ead22445857 100644
--- a/src/plugins/imageviewer/imageviewer.cpp
+++ b/src/plugins/imageviewer/imageviewer.cpp
@@ -148,11 +148,6 @@ Core::Id ImageViewer::id() const
     return Core::Id(Constants::IMAGEVIEWER_ID);
 }
 
-bool ImageViewer::isTemporary() const
-{
-    return false;
-}
-
 QWidget *ImageViewer::toolBar()
 {
     return d->toolbar;
diff --git a/src/plugins/imageviewer/imageviewer.h b/src/plugins/imageviewer/imageviewer.h
index 1ae2e4c4e6244d923200249f778a4056c127aa3c..4ad5cbc853596bc1d74354ce91a2966315027ec9 100644
--- a/src/plugins/imageviewer/imageviewer.h
+++ b/src/plugins/imageviewer/imageviewer.h
@@ -58,7 +58,6 @@ public:
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
-    bool isTemporary() const;
     QWidget *toolBar();
 
 public slots:
diff --git a/src/plugins/pythoneditor/pythoneditor.h b/src/plugins/pythoneditor/pythoneditor.h
index 435fb08560d0ea7cd60f8510f48baaa73095fd0b..f7bf8e33b4c3f354429769d9dbd7948cad0e0403 100644
--- a/src/plugins/pythoneditor/pythoneditor.h
+++ b/src/plugins/pythoneditor/pythoneditor.h
@@ -49,7 +49,6 @@ public:
     Core::IEditor *duplicate(QWidget *parent);
 
     Core::Id id() const;
-    bool isTemporary() const { return false; }
 
     /**
       Opens file for editing, actual work performed by base class
diff --git a/src/plugins/qmljseditor/qmljseditoreditable.h b/src/plugins/qmljseditor/qmljseditoreditable.h
index 7490e871778d4457bacfc8f28b18467ad1f43f45..4ba470319ff14945aa679d24596600abf22a7d7e 100644
--- a/src/plugins/qmljseditor/qmljseditoreditable.h
+++ b/src/plugins/qmljseditor/qmljseditoreditable.h
@@ -47,7 +47,6 @@ public:
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
     Core::Id id() const;
-    bool isTemporary() const { return false; }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     bool isDesignModePreferred() const;
     void setTextCodec(QTextCodec *codec, TextCodecReason = TextCodecOtherReason);
diff --git a/src/plugins/qnx/bardescriptoreditor.cpp b/src/plugins/qnx/bardescriptoreditor.cpp
index 524ebd051a42a42253b506241adff671fa0233cc..df9d195d28337f907bf3e96ef88b1133f02f13b2 100644
--- a/src/plugins/qnx/bardescriptoreditor.cpp
+++ b/src/plugins/qnx/bardescriptoreditor.cpp
@@ -104,11 +104,6 @@ Core::Id BarDescriptorEditor::id() const
     return Constants::QNX_BAR_DESCRIPTOR_EDITOR_ID;
 }
 
-bool BarDescriptorEditor::isTemporary() const
-{
-    return false;
-}
-
 QWidget *BarDescriptorEditor::toolBar()
 {
     return m_toolBar;
diff --git a/src/plugins/qnx/bardescriptoreditor.h b/src/plugins/qnx/bardescriptoreditor.h
index 6da0419c5fe5e43e959f6e1c00c5f2b79ce41670..707cf5540cf23aab62fb1288001d20074d4c9cb1 100644
--- a/src/plugins/qnx/bardescriptoreditor.h
+++ b/src/plugins/qnx/bardescriptoreditor.h
@@ -67,7 +67,6 @@ public:
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
-    bool isTemporary() const;
     QWidget *toolBar();
 
     EditorPage activePage() const;
diff --git a/src/plugins/qt4projectmanager/profileeditor.h b/src/plugins/qt4projectmanager/profileeditor.h
index d9e4b7b839cf49d840a9218ddba92289d0308bcc..fc0a15f564ca6f52fea74508217243d4b4f57e90 100644
--- a/src/plugins/qt4projectmanager/profileeditor.h
+++ b/src/plugins/qt4projectmanager/profileeditor.h
@@ -55,7 +55,6 @@ public:
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
     Core::Id id() const;
-    bool isTemporary() const { return false; }
 };
 
 class ProFileEditorWidget : public TextEditor::BaseTextEditorWidget
diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h
index e76f1d938abb275b8a48905896b8f654d1063bbc..5a3e222005950eec34d4c26a0c04b18b24d45ea7 100644
--- a/src/plugins/resourceeditor/resourceeditorw.h
+++ b/src/plugins/resourceeditor/resourceeditorw.h
@@ -92,7 +92,6 @@ public:
     QWidget *toolBar();
 
     void setSuggestedFileName(const QString &fileName);
-    bool isTemporary() const { return false; }
 
 private slots:
     void onUndoStackChanged(bool canUndo, bool canRedo);
diff --git a/src/plugins/texteditor/plaintexteditor.h b/src/plugins/texteditor/plaintexteditor.h
index 624708f878e9840df88ac45821dc63b1bcf4beb2..05f2be6fcb06a97d01cb12adb4a3efd75ab9f6f1 100644
--- a/src/plugins/texteditor/plaintexteditor.h
+++ b/src/plugins/texteditor/plaintexteditor.h
@@ -51,7 +51,6 @@ public:
 
     bool duplicateSupported() const { return true; }
     Core::IEditor *duplicate(QWidget *parent);
-    bool isTemporary() const { return false; }
     Core::Id id() const;
 };
 
diff --git a/src/plugins/texteditor/snippets/snippeteditor.h b/src/plugins/texteditor/snippets/snippeteditor.h
index 043e81ba698ee0a8b31418ce96f28861c794098e..6e4e49f1ceae702ffdeedce2aafc885e1a9740ba 100644
--- a/src/plugins/texteditor/snippets/snippeteditor.h
+++ b/src/plugins/texteditor/snippets/snippeteditor.h
@@ -50,7 +50,6 @@ public:
 
     bool duplicateSupported() const { return false; }
     Core::IEditor *duplicate(QWidget * /* parent */ ) { return 0; }
-    bool isTemporary() const { return false; }
     Core::Id id() const;
 };
 
diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp
index f4f43966d0ef2899aeaf5e8b585db4d7fcbae3db..1b45212b71345999d1e2ac303a4621042dee4b43 100644
--- a/src/plugins/vcsbase/submiteditorfile.cpp
+++ b/src/plugins/vcsbase/submiteditorfile.cpp
@@ -44,6 +44,7 @@ SubmitEditorFile::SubmitEditorFile(const QString &mimeType, QObject *parent) :
     m_mimeType(mimeType),
     m_modified(false)
 {
+    setTemporary(true);
 }
 
 void SubmitEditorFile::setModified(bool modified)
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 680eb485c6ff28b91b41e54d5bda0a5155e29b90..0d3f2d28290b46ac33eca8ba62095ac531ddc2ee 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -151,23 +151,18 @@ public:
 
     Core::Id id() const { return m_id; }
 
-    bool isTemporary() const { return m_temporary; }
-    void setTemporary(bool t) { m_temporary = t; }
-
 signals:
     void describeRequested(const QString &source, const QString &change);
     void annotateRevisionRequested(const QString &source, const QString &change, int line);
 
 private:
     Core::Id m_id;
-    bool m_temporary;
 };
 
 VcsBaseEditor::VcsBaseEditor(VcsBaseEditorWidget *widget,
                              const VcsBaseEditorParameters *type)  :
     BaseTextEditor(widget),
-    m_id(type->id),
-    m_temporary(false)
+    m_id(type->id)
 {
     setContext(Core::Context(type->context, TextEditor::Constants::C_TEXTEDITOR));
 }
@@ -725,7 +720,7 @@ void VcsBaseEditorWidget::setForceReadOnly(bool b)
     VcsBaseEditor *eda = qobject_cast<VcsBaseEditor *>(editor());
     QTC_ASSERT(eda != 0, return);
     setReadOnly(b);
-    eda->setTemporary(b);
+    eda->document()->setTemporary(b);
 }
 
 QString VcsBaseEditorWidget::source() const
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 0752bc0cbcf16ea21188c5aa330b71527061f50a..273586ad1c20e0dcb70fe03700d7364aa29759c8 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -115,7 +115,6 @@ public:
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
-    bool isTemporary() const { return true; }
 
     QWidget *toolBar();