diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index a6f2673879381c31b9a7a72aae5561896e7dd0fa..395685c293c38f4aa97256674c2faf9048be6fa7 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -164,12 +164,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
     m_subWidgets = new BuildSettingsSubWidgets(this);
     vbox->addWidget(m_subWidgets);
 
-    QMenu *addButtonMenu = new QMenu(this);
-    addButtonMenu->addAction(tr("Create &New"),
-                             this, SLOT(createConfiguration()));
-    addButtonMenu->addAction(tr("&Clone Selected"),
-                             this, SLOT(cloneConfiguration()));
-    m_addButton->setMenu(addButtonMenu);
+    createAddButtonMenu();
 
     m_buildConfiguration = m_project->activeBuildConfiguration()->name();
 
@@ -185,6 +180,21 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
     updateBuildSettings();
 }
 
+void BuildSettingsWidget::createAddButtonMenu()
+{
+    QMenu *addButtonMenu = new QMenu(this);
+    addButtonMenu->addAction(tr("&Clone Selected"),
+                             this, SLOT(cloneConfiguration()));
+    IBuildConfigurationFactory *factory = m_project->buildConfigurationFactory();
+    if (factory) {
+        foreach (const QString &type, factory->availableCreationTypes()) {
+            QAction *action = addButtonMenu->addAction(factory->displayNameForType(type), this, SLOT(createConfiguration()));
+            action->setData(type);
+        }
+    }
+    m_addButton->setMenu(addButtonMenu);
+}
+
 void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &buildConfiguration)
 {
     for (int i=0; i<m_buildConfigurationComboBox->count(); ++i) {
@@ -256,41 +266,16 @@ void BuildSettingsWidget::activeBuildConfigurationChanged()
 
 void BuildSettingsWidget::createConfiguration()
 {
-    // TODO!
-//    bool ok;
-//    QString newBuildConfiguration = QInputDialog::getText(this, tr("New configuration"), tr("New Configuration Name:"), QLineEdit::Normal, QString(), &ok);
-//    if (!ok || newBuildConfiguration.isEmpty())
-//        return;
-//
-//    QString newDisplayName = newBuildConfiguration;
-//    // Check that the internal name is not taken and use a different one otherwise
-//    const QStringList &buildConfigurations = m_project->buildConfigurations();
-//    if (buildConfigurations.contains(newBuildConfiguration)) {
-//        int i = 2;
-//        while (buildConfigurations.contains(newBuildConfiguration + QString::number(i)))
-//            ++i;
-//        newBuildConfiguration += QString::number(i);
-//    }
-//
-//    // Check that we don't have a configuration with the same displayName
-//    QStringList displayNames;
-//    foreach (const QString &bc, buildConfigurations)
-//        displayNames << m_project->buildConfiguration(bc)->displayName();
-//
-//    if (displayNames.contains(newDisplayName)) {
-//        int i = 2;
-//        while (displayNames.contains(newDisplayName + QString::number(i)))
-//            ++i;
-//        newDisplayName += QString::number(i);
-//    }
-//
-//    if (m_project->newBuildConfiguration(newBuildConfiguration)) {
-//        m_project->addBuildConfiguration(newBuildConfiguration);
-//        m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName);
-//        m_buildConfiguration = newBuildConfiguration;
-//
-//        updateBuildSettings();
-//    }
+    QAction *action = qobject_cast<QAction *>(sender());
+    const QString &type = action->data().toString();
+    QList<BuildConfiguration *> configurations = m_project->buildConfigurationFactory()->create(type);
+    if (!configurations.isEmpty()) {
+        foreach (BuildConfiguration *configuration, configurations) {
+            m_project->addBuildConfiguration(configuration);
+        }
+        m_buildConfiguration = configurations.first()->name();
+        updateBuildSettings();
+    }
 }
 
 void BuildSettingsWidget::cloneConfiguration()
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index 1f2978fd686804c817926585021710d87ca68235..97d734949558707de10552626db28eba6419393f 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -102,6 +102,7 @@ private slots:
 private:
     void cloneConfiguration(const QString &toClone);
     void deleteConfiguration(const QString &toDelete);
+    void createAddButtonMenu();
 
     Project *m_project;
     QPushButton *m_addButton;
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 72ee7ab034559646ff7a76d8ac0fbe9fb5d00fcf..8e29e22a40dba7b865a255d7bbaa27cd6c009f64 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -242,17 +242,17 @@ Qt4BuildConfigurationFactory::~Qt4BuildConfigurationFactory()
 
 QStringList Qt4BuildConfigurationFactory::availableCreationTypes() const
 {
-    return QStringList() << "Create";
+    return QStringList() << "DefaultQt";
 }
 
 QString Qt4BuildConfigurationFactory::displayNameForType(const QString &type) const
 {
-    return tr("Create");
+    return tr("Using Default Qt Version");
 }
 
 QList<BuildConfiguration *> Qt4BuildConfigurationFactory::create(const QString &type) const
 {
-    QTC_ASSERT(type == "Create", return QList<BuildConfiguration*>());
+    QTC_ASSERT(type == "DefaultQt", return QList<BuildConfiguration*>());
     bool ok;
     QString buildConfigurationName = QInputDialog::getText(0,
                           tr("New configuration"),