diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp
index 63cd16daf90f265895b8e553b1075e798ad59a56..0e664aee807e66040b1be49362d14b3e5368406d 100644
--- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp
+++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp
@@ -476,15 +476,24 @@ void IpcCommunicator::registerCurrentProjectParts()
         registerProjectsParts(projectInfo.projectParts());
 }
 
-void IpcCommunicator::registerCurrentCppEditorDocuments()
+void IpcCommunicator::restoreCppEditorDocuments()
+{
+    resetCppEditorDocumentProcessors();
+    registerVisibleCppEditorDocumentAndMarkInvisibleDirty();
+}
+
+void IpcCommunicator::resetCppEditorDocumentProcessors()
 {
     using namespace CppTools;
 
     const auto cppEditorDocuments = CppModelManager::instance()->cppEditorDocuments();
-    foreach (const CppEditorDocumentHandle *cppEditorDocument, cppEditorDocuments) {
-        if (cppEditorDocument->processor()->baseTextDocument()->isModified())
-            updateTranslationUnitFromCppEditorDocument(cppEditorDocument->filePath());
-    }
+    foreach (CppEditorDocumentHandle *cppEditorDocument, cppEditorDocuments)
+        cppEditorDocument->resetProcessor();
+}
+
+void IpcCommunicator::registerVisibleCppEditorDocumentAndMarkInvisibleDirty()
+{
+    CppTools::CppModelManager::instance()->updateCppEditorDocuments();
 }
 
 void IpcCommunicator::registerCurrentCodeModelUiHeaders()
@@ -657,8 +666,8 @@ void IpcCommunicator::initializeBackendWithCurrentData()
 {
     registerFallbackProjectPart();
     registerCurrentProjectParts();
-    registerCurrentCppEditorDocuments();
     registerCurrentCodeModelUiHeaders();
+    restoreCppEditorDocuments();
     updateTranslationUnitVisiblity();
 
     emit backendReinitialized();
diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.h b/src/plugins/clangcodemodel/clangbackendipcintegration.h
index 2f045f2abe26215dd529301c8974031c83ae665b..3d6a299c5175e78337d2f92094696205a63ec961 100644
--- a/src/plugins/clangcodemodel/clangbackendipcintegration.h
+++ b/src/plugins/clangcodemodel/clangbackendipcintegration.h
@@ -169,7 +169,9 @@ private:
     void initializeBackend();
     void initializeBackendWithCurrentData();
     void registerCurrentProjectParts();
-    void registerCurrentCppEditorDocuments();
+    void restoreCppEditorDocuments();
+    void resetCppEditorDocumentProcessors();
+    void registerVisibleCppEditorDocumentAndMarkInvisibleDirty();
     void registerCurrentCodeModelUiHeaders();
 
 
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index 1c4b91ebf0ffb1fd6b44b3b1d230e06d3285caa4..4c10343edacfada27524288aacf2a22394dbe28c 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -91,6 +91,7 @@ public:
 
     QFuture<void> updateSourceFiles(const QSet<QString> &sourceFiles,
         ProgressNotificationMode mode = ReservedProgressNotification);
+    void updateCppEditorDocuments() const;
     WorkingCopy workingCopy() const;
     QByteArray codeModelConfiguration() const;
 
@@ -209,7 +210,6 @@ private:
     void initializeModelManagerSupports();
     void delayedGC();
     void recalculateProjectPartMappings();
-    void updateCppEditorDocuments() const;
 
     void replaceSnapshot(const CPlusPlus::Snapshot &newSnapshot);
     void removeFilesFromSnapshot(const QSet<QString> &removedFiles);