diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index b34c870f78d8f5d7528538dfcaab62e6c8a4158c..df456ca8f5ec25cf0ef1e55740224570ab31b48e 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -122,7 +122,6 @@ public:
     ProjectExplorer::ToolChain::ToolChainType toolChainType() const;
     ProjectExplorer::ToolChain *toolChain(ProjectExplorer::BuildConfiguration *configuration) const;
 
-    bool parseCMakeLists();
 protected:
     virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);
     virtual bool restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &reader);
@@ -135,6 +134,7 @@ private slots:
     void slotActiveBuildConfiguration();
 
 private:
+    bool parseCMakeLists();
     void updateToolChain(const QString &compiler);
 
     void buildTree(CMakeProjectNode *rootNode, QList<ProjectExplorer::FileNode *> list);
@@ -155,6 +155,8 @@ private:
     ProjectExplorer::FileWatcher *m_watcher;
     bool m_insideFileChanged;
     QSet<QString> m_watchedFiles;
+
+    friend class CMakeBuildConfigurationFactory; // for parseCMakeLists
 };
 
 class CMakeCbpParser : public QXmlStreamReader
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index 237198e72b88142b36b457cda3f91f0f5539657f..ea2f1ebc28fd988f25ef9b8d1e6a1947ea1fd1b4 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -33,10 +33,6 @@
 
 using namespace ProjectExplorer;
 
-BuildConfiguration::BuildConfiguration()
-{
-}
-
 BuildConfiguration::BuildConfiguration(const QString &name)
     : m_name(name)
 {
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 06a5931cf7821d1ee0c79487e44ab3a1d675fd7c..306242598db003c4271223b180daf097447dac41 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -41,27 +41,30 @@
 
 namespace ProjectExplorer {
 
+class Project;
+
 class PROJECTEXPLORER_EXPORT BuildConfiguration : public QObject
 {
     Q_OBJECT
 
 public:
-    explicit BuildConfiguration();
     BuildConfiguration(const QString &name);
     BuildConfiguration(const QString &name, BuildConfiguration *source);
-    void setName(const QString &name);
     QString name() const;
     QString displayName() const;
     void setDisplayName(const QString &name);
 
     QVariant value(const QString &key) const;
     void setValue(const QString &key, QVariant value);
+
     QMap<QString, QVariant> toMap() const;
     void setValuesFromMap(QMap<QString, QVariant> map);
-
 private:
+    void setName(const QString &name);
+
     QHash<QString, QVariant> m_values;
     QString m_name;
+    friend class Project;
 };
 
 class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 5d22aaa707b52f39592ed13fb38c9b448bc8de75..1fe4d3eee6c57f2c610838e3e3820f1b08136530 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -272,6 +272,7 @@ void BuildSettingsWidget::createConfiguration()
     QAction *action = qobject_cast<QAction *>(sender());
     const QString &type = action->data().toString();
     if (m_project->buildConfigurationFactory()->create(type)) {
+        // TODO switching to last buildconfiguration in list might not be what we want
         m_buildConfiguration = m_project->buildConfigurations().last()->name();
         updateBuildSettings();
     }
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 843d1ce6e128017f3e9b48359397df08f5b24336..94a9585b023c3794857e6e71072495a596c58d67 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -216,7 +216,7 @@ bool Project::restoreSettings()
     if (!restoreSettingsImpl(reader))
         return false;
 
-    if (m_activeBuildConfiguration.isEmpty() && !m_buildConfigurations.isEmpty())
+    if (m_activeBuildConfiguration.isEmpty() && !m_buildConfigurationValues.isEmpty())
         setActiveBuildConfiguration(m_buildConfigurationValues.at(0));
 
     if (!m_activeRunConfiguration && !m_runConfigurations.isEmpty())
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 80ea103118eb526b2274e972cd033f16c05aaf98..dbdd542d70209b635e79279b4a2b8356cc507bba 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -101,6 +101,7 @@ public:
     void copyBuildConfiguration(const QString &source, const QString &dest);
     BuildConfiguration *buildConfiguration(const QString & name) const;
     QList<BuildConfiguration *> buildConfigurations() const;
+    // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead
     void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName);
     BuildConfiguration *activeBuildConfiguration() const;
     void setActiveBuildConfiguration(BuildConfiguration *configuration);
@@ -184,7 +185,6 @@ protected:
 private:
     QList<BuildStep *> m_buildSteps;
     QList<BuildStep *> m_cleanSteps;
-    QStringList m_buildConfigurations;
     QMap<QString, QVariant> m_values;
     QList<BuildConfiguration *> m_buildConfigurationValues;
     QString m_activeBuildConfiguration;