diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
index 76afbc4ac520c670a7de9be1f6a9a5fae7a1ee03..5960f19a3bae6385b2b75f260c92014fdcec9683 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
@@ -85,7 +85,8 @@ void CMakeBuildEnvironmentWidget::init(const QString &buildConfigurationName)
 
 void CMakeBuildEnvironmentWidget::environmentModelUserChangesUpdated()
 {
-    m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges());
+    m_pro->setUserEnvironmentChanges(
+            m_pro->buildConfiguration(m_buildConfiguration), m_buildEnvironmentWidget->userChanges());
 }
 
 void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked)
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index e5332601a4e569c59d5c8fe29bd631fc9fb10ca6..afd3be51152108121c5884493755bf6abeff10d6 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -584,14 +584,13 @@ QList<ProjectExplorer::EnvironmentItem> CMakeProject::userEnvironmentChanges(Bui
     return EnvironmentItem::fromStringList(configuration->value("userEnvironmentChanges").toStringList());
 }
 
-void CMakeProject::setUserEnvironmentChanges(const QString &buildConfig, const QList<ProjectExplorer::EnvironmentItem> &diff)
+void CMakeProject::setUserEnvironmentChanges(BuildConfiguration *configuration, const QList<ProjectExplorer::EnvironmentItem> &diff)
 {
-    ProjectExplorer::BuildConfiguration *bc = buildConfiguration(buildConfig);
     QStringList list = EnvironmentItem::toStringList(diff);
-    if (list == bc->value("userEnvironmentChanges"))
+    if (list == configuration->value("userEnvironmentChanges"))
         return;
-    bc->setValue("userEnvironmentChanges", list);
-    emit environmentChanged(buildConfig);
+    configuration->setValue("userEnvironmentChanges", list);
+    emit environmentChanged(configuration->name());
 }
 
 QString CMakeProject::buildDirectory(BuildConfiguration *configuration) const
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h
index 79b405e9f5f85c65f3e34208a262f3f04ec9bbb5..69081e367b481c24a76e0cb3300e0c0171ade307 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.h
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.h
@@ -101,7 +101,7 @@ public:
     //building environment
     ProjectExplorer::Environment environment(ProjectExplorer::BuildConfiguration *configuration) const;
     ProjectExplorer::Environment baseEnvironment(ProjectExplorer::BuildConfiguration *configuration) const;
-    void setUserEnvironmentChanges(const QString &buildConfig, const QList<ProjectExplorer::EnvironmentItem> &diff);
+    void setUserEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration, const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration) const;
     bool useSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration) const;
     void setUseSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration, bool b);
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 46ffaf145c887bd0b8f8332a862f3bf5fae0a12e..a6f2673879381c31b9a7a72aae5561896e7dd0fa 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -323,20 +323,8 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration)
         newBuildConfiguration += QString::number(i);
     }
 
-    // Check that we don't have a configuration with the same displayName
-    QStringList displayNames;
-    foreach (const BuildConfiguration *bc, m_project->buildConfigurations())
-        displayNames << bc->displayName();
-
-    if (displayNames.contains(newDisplayName)) {
-        int i = 2;
-        while (displayNames.contains(newDisplayName + QString::number(i)))
-            ++i;
-        newDisplayName += QString::number(i);
-    }
-
     m_project->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration);
-    m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName);
+    m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName);
 
     m_buildConfiguration = newBuildConfiguration;
     updateBuildSettings();
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index ff7a3616ee2fbd390bebaef70526314a24a71ab6..843d1ce6e128017f3e9b48359397df08f5b24336 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -509,22 +509,22 @@ EditorConfiguration *Project::editorConfiguration() const
     return m_editorConfiguration;
 }
 
-void Project::setDisplayNameFor(const QString &buildConfigurationName, const QString &displayName)
+void Project::setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName)
 {
     QStringList displayNames;
     foreach (BuildConfiguration *bc, m_buildConfigurationValues) {
-        if (bc->name() != buildConfigurationName)
+        if (bc != configuration)
             displayNames << bc->displayName();
     }
     if (displayNames.contains(displayName)) {
         int i = 2;
         while (displayNames.contains(displayName + QString::number(i)))
             ++i;
-        buildConfiguration(buildConfigurationName)->setDisplayName(displayName + QString::number(i));
+        configuration->setDisplayName(displayName + QString::number(i));
     } else {
-        buildConfiguration(buildConfigurationName)->setDisplayName(displayName);
+        configuration->setDisplayName(displayName);
     }
-    emit buildConfigurationDisplayNameChanged(buildConfigurationName);
+    emit buildConfigurationDisplayNameChanged(configuration->name());
 }
 
 QByteArray Project::predefinedMacros(const QString &) const
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index b8759b5f01e7b0d41e4327181fa703fd0e914388..80ea103118eb526b2274e972cd033f16c05aaf98 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -101,7 +101,7 @@ public:
     void copyBuildConfiguration(const QString &source, const QString &dest);
     BuildConfiguration *buildConfiguration(const QString & name) const;
     QList<BuildConfiguration *> buildConfigurations() const;
-    void setDisplayNameFor(const QString &buildConfiguration, const QString &displayName);
+    void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName);
     BuildConfiguration *activeBuildConfiguration() const;
     void setActiveBuildConfiguration(BuildConfiguration *configuration);
 
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 562689e570fdddeec45d6e393a07d44de912f085..200a74f4765664179d80f32a2522de170b712251 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -190,7 +190,8 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration)
 
 void Qt4ProjectConfigWidget::changeConfigName(const QString &newName)
 {
-    m_pro->setDisplayNameFor(m_buildConfiguration, newName);
+    m_pro->setDisplayNameFor(
+            m_pro->buildConfiguration(m_buildConfiguration), newName);
 }
 
 void Qt4ProjectConfigWidget::setupQtVersionsComboBox()