diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index af4d513fb135971c3216656550f6867358075db5..faaba10be036738f799ea5d0b29071784ff6a9b4 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -178,7 +178,12 @@ void GenericProject::parseProject()
     _projectIncludePaths.removeDuplicates();
 
     _generated = convertToAbsoluteFiles(projectInfo.value(QLatin1String("generated")).toStringList());
-    _defines   = projectInfo.value(QLatin1String("defines")).toStringList();
+
+    _defines.clear();
+
+    QFile configFn(configFileName());
+    if (configFn.open(QFile::ReadOnly))
+        _defines = configFn.readAll();
 
     emit fileListChanged();
 }
@@ -198,6 +203,8 @@ void GenericProject::refresh()
 
         CppTools::CppModelManagerInterface::ProjectInfo pinfo = modelManager->projectInfo(this);
         pinfo.defines = predefinedMacros;
+        pinfo.defines += '\n';
+        pinfo.defines += _defines;
 
         QStringList allIncludePaths, allFrameworkPaths;
 
@@ -259,12 +266,9 @@ QStringList GenericProject::includePaths() const
 void GenericProject::setIncludePaths(const QStringList &includePaths)
 { _includePaths = includePaths; }
 
-QStringList GenericProject::defines() const
+QByteArray GenericProject::defines() const
 { return _defines; }
 
-void GenericProject::setDefines(const QStringList &defines)
-{ _defines = defines; }
-
 void GenericProject::setToolChainId(const QString &toolChainId)
 {
     using namespace ProjectExplorer;
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 236ee752214c16ba29762add51423ba15e7c836b..54cb7473ce42fd5dd81c5218a6cb999d4437bc8f 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -90,9 +90,7 @@ public:
     QStringList includePaths() const;
     void setIncludePaths(const QStringList &includePaths);
 
-    QStringList defines() const;
-    void setDefines(const QStringList &defines);
-
+    QByteArray defines() const;
     QStringList allIncludePaths() const;
     QStringList projectIncludePaths() const;
     QStringList files() const;
@@ -124,7 +122,7 @@ private:
     QStringList _generated;
     QStringList _includePaths;
     QStringList _projectIncludePaths;
-    QStringList _defines;
+    QByteArray _defines;
 
     GenericProjectNode* _rootNode;
     ProjectExplorer::ToolChain *_toolChain;
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
index 61fba763c9749913b074f650aba5181acc253caf..7714a8e5b368a5080c7a2bcdb255b17af914f041 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp
@@ -79,7 +79,10 @@ void Manager::unregisterProject(GenericProject *project)
 void Manager::notifyChanged(const QString &fileName)
 {
     foreach (GenericProject *project, _projects) {
-        project->refresh();
+        if (fileName == project->filesFileName()        ||
+                fileName == project->includesFileName() ||
+                fileName == project->configFileName())
+            project->refresh();
     }
 }