diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp
index e1e0bd8c50923a318b4f18568f4f26fc7bd962bd..481e2c715a962449279ce1ebe6ee8d3d7d9e8159 100644
--- a/src/libs/cplusplus/FastPreprocessor.cpp
+++ b/src/libs/cplusplus/FastPreprocessor.cpp
@@ -38,10 +38,20 @@ FastPreprocessor::FastPreprocessor(const Snapshot &snapshot)
 
 QByteArray FastPreprocessor::run(QString fileName, const QString &source)
 {
+    if (Document::Ptr doc = _snapshot.value(fileName)) {
+        _merged.insert(fileName);
+
+        foreach (const Document::Include &i, doc->includes())
+            mergeEnvironment(i.fileName());
+    }
+
     const QByteArray preprocessed = _preproc(fileName, source);
     return preprocessed;
 }
 
+void FastPreprocessor::sourceNeeded(QString &fileName, IncludeType, unsigned)
+{ mergeEnvironment(fileName); }
+
 void FastPreprocessor::mergeEnvironment(const QString &fileName)
 {
     if (! _merged.contains(fileName)) {
diff --git a/src/libs/cplusplus/FastPreprocessor.h b/src/libs/cplusplus/FastPreprocessor.h
index bbdbd535ba010ca5834c4a3494ba7b31df99a614..c7e6e2f8b1c8c2032c31174dfe3d4a44b0b73d19 100644
--- a/src/libs/cplusplus/FastPreprocessor.h
+++ b/src/libs/cplusplus/FastPreprocessor.h
@@ -54,8 +54,7 @@ public:
     QByteArray run(QString fileName, const QString &source);
 
     // CPlusPlus::Client
-    virtual void sourceNeeded(QString &fileName, IncludeType, unsigned)
-    { mergeEnvironment(fileName); }
+    virtual void sourceNeeded(QString &fileName, IncludeType, unsigned);
 
     virtual void macroAdded(const Macro &) {}