diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 667b2e009134068e6aedcb80c077af79a6e00522..9048fb90b65f2acb863808221614b8855ca64560 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -270,44 +270,43 @@ class Process: public std::unary_function<Document::Ptr, void>
 {
     QPointer<CppModelManager> _modelManager;
     Snapshot _snapshot;
-    CppModelManager::WorkingCopy _workingCopy;
     Document::Ptr _doc;
+    Document::CheckMode _mode;
 
 public:
     Process(QPointer<CppModelManager> modelManager,
-            Snapshot snapshot,
+            Document::Ptr doc,
+            const Snapshot &snapshot,
             const CppModelManager::WorkingCopy &workingCopy)
         : _modelManager(modelManager),
           _snapshot(snapshot),
-          _workingCopy(workingCopy)
-    { }
-
-    void operator()(Document::Ptr doc)
+          _doc(doc),
+          _mode(Document::FastCheck)
     {
-        _doc = doc;
-
-        Document::CheckMode mode = Document::FastCheck;
 
-        if (_workingCopy.contains(doc->fileName()))
-            mode = Document::FullCheck;
+        if (workingCopy.contains(_doc->fileName()))
+            _mode = Document::FullCheck;
+    }
 
-        doc->check(mode);
+    void operator()()
+    {
+        _doc->check(_mode);
 
-        if (mode == Document::FullCheck) {
+        if (_mode == Document::FullCheck) {
             // run the binding pass
-            NamespaceBindingPtr ns = bind(doc, _snapshot);
+            NamespaceBindingPtr ns = bind(_doc, _snapshot);
 
             // check for undefined symbols.
-            CheckUndefinedSymbols checkUndefinedSymbols(doc);
+            CheckUndefinedSymbols checkUndefinedSymbols(_doc);
             checkUndefinedSymbols.setGlobalNamespaceBinding(ns);
 
-            checkUndefinedSymbols(doc->translationUnit()->ast()); // ### FIXME
+            checkUndefinedSymbols(_doc->translationUnit()->ast()); // ### FIXME
         }
 
-        doc->releaseTranslationUnit();
+        _doc->releaseTranslationUnit();
 
         if (_modelManager)
-            _modelManager->emitDocumentUpdated(doc); // ### TODO: compress
+            _modelManager->emitDocumentUpdated(_doc); // ### TODO: compress
     }
 };
 } // end of anonymous namespace
@@ -600,9 +599,9 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, unsigned
     m_todo.remove(fileName);
 
 #ifndef ICHECK_BUILD
-    Process process(m_modelManager, snapshot, m_workingCopy);
+    Process process(m_modelManager, doc, snapshot, m_workingCopy);
 
-    process(doc);
+    process();
 
     (void) switchDocument(previousDoc);
 #else