diff --git a/src/libs/utils/detailsbutton.cpp b/src/libs/utils/detailsbutton.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..033cbb871247c872c3c1f34dd7f6f65b4ad36676
--- /dev/null
+++ b/src/libs/utils/detailsbutton.cpp
@@ -0,0 +1,21 @@
+#include "detailsbutton.h"
+
+using namespace Utils;
+
+DetailsButton::DetailsButton(QWidget *parent)
+#ifdef Q_OS_MAC
+    : QPushButton(parent)
+#else
+    : QToolButton(parent)
+#endif
+{
+#ifdef Q_OS_MAC
+    setAttribute(Qt::WA_MacSmallSize);
+    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    s.upButton->setIconSize(QSize(10, 10));
+    s.downButton->setIconSize(QSize(10, 10));
+#else
+    setCheckable(true);
+#endif
+    setText(tr("Details"));
+}
diff --git a/src/libs/utils/detailsbutton.h b/src/libs/utils/detailsbutton.h
new file mode 100644
index 0000000000000000000000000000000000000000..f8152e0740af454a7f7e012b646e23e806345d7d
--- /dev/null
+++ b/src/libs/utils/detailsbutton.h
@@ -0,0 +1,23 @@
+#ifndef DETAILSBUTTON_H
+#define DETAILSBUTTON_H
+
+#include <QtGui/QPushButton>
+#include <QtGui/QToolButton>
+
+#include "utils_global.h"
+
+namespace Utils {
+
+class QTCREATOR_UTILS_EXPORT DetailsButton
+#ifdef Q_OS_MAC
+    : public QPushButton
+#else
+    : public QToolButton
+#endif
+{
+    Q_OBJECT
+public:
+    DetailsButton(QWidget *parent=0);
+};
+}
+#endif // DETAILSBUTTON_H
diff --git a/src/libs/utils/utils.pro b/src/libs/utils/utils.pro
index 16f9ec8e60102b00164c3f5d7da00f1e20151d1a..b135ca94c140dd2c683694d4ca13c13a6535fd86 100644
--- a/src/libs/utils/utils.pro
+++ b/src/libs/utils/utils.pro
@@ -33,7 +33,8 @@ SOURCES += reloadpromptutils.cpp \
     styledbar.cpp \
     stylehelper.cpp \
     welcomemodetreewidget.cpp \
-    fancymainwindow.cpp
+    fancymainwindow.cpp \
+    detailsbutton.cpp
 win32 { 
     SOURCES += abstractprocess_win.cpp \
         consoleprocess_win.cpp \
@@ -74,7 +75,8 @@ HEADERS += utils_global.h \
     styledbar.h \
     stylehelper.h \
     welcomemodetreewidget.h \
-    fancymainwindow.h
+    fancymainwindow.h \
+    detailsbutton.h
 FORMS += filewizardpage.ui \
     projectintropage.ui \
     newclasswidget.ui \
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index cae0febb452de775987154e546ba34b4566a7178..fe9e76fc42d8ff258b418b6dd1320400dac588d9 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -35,6 +35,7 @@
 #include <projectexplorer/environment.h>
 #include <projectexplorer/debugginghelper.h>
 #include <utils/qtcassert.h>
+#include <utils/detailsbutton.h>
 #include <QtGui/QFormLayout>
 #include <QtGui/QLineEdit>
 #include <QtGui/QGroupBox>
@@ -260,9 +261,21 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *
 
     fl->addRow(tr("Working Directory:"), boxlayout);
 
+    m_detailsWidget = new QWidget(this);
+    m_detailsWidget->setLayout(fl);
+    m_detailsWidget->setVisible(false);
+
+    m_summaryLabel = new QLabel(this);
+    m_detailsButton = new Utils::DetailsButton(this);
+
+    QHBoxLayout *hbox = new QHBoxLayout();
+    hbox->addWidget(m_summaryLabel);
+    hbox->addWidget(m_detailsButton);
+
     QVBoxLayout *vbx = new QVBoxLayout(this);
     vbx->setContentsMargins(0, -1, 0, -1);
-    vbx->addLayout(fl);
+    vbx->addLayout(hbox);
+    vbx->addWidget(m_detailsWidget);
 
     QLabel *environmentLabel = new QLabel(this);
     environmentLabel->setText(tr("Run Environment"));
@@ -288,17 +301,22 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *
     baseEnvironmentLayout->addWidget(m_baseEnvironmentComboBox);
     baseEnvironmentLayout->addStretch(10);
 
+    m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget);
+    m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment());
+    m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges());
+
+    vbx->addWidget(m_environmentWidget);
+
+    updateSummary();
+
     connect(m_workingDirectoryEdit, SIGNAL(changed(QString)),
             this, SLOT(setWorkingDirectory()));
 
     connect(resetButton, SIGNAL(clicked()),
             this, SLOT(resetWorkingDirectory()));
 
-    m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget);
-    m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment());
-    m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges());
-
-    vbx->addWidget(m_environmentWidget);
+    connect(m_detailsButton, SIGNAL(clicked()),
+            this, SLOT(toggleDetails()));
 
     connect(m_environmentWidget, SIGNAL(userChangesUpdated()),
             this, SLOT(userChangesUpdated()));
@@ -312,6 +330,11 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *
 
 }
 
+void CMakeRunConfigurationWidget::toggleDetails()
+{
+    m_detailsWidget->setVisible(!m_detailsWidget->isVisible());
+}
+
 void CMakeRunConfigurationWidget::setWorkingDirectory()
 {
     if (m_ignoreChange)
@@ -365,6 +388,15 @@ void CMakeRunConfigurationWidget::userEnvironmentChangesChanged()
 void CMakeRunConfigurationWidget::setArguments(const QString &args)
 {
     m_cmakeRunConfiguration->setArguments(args);
+    updateSummary();
+}
+
+void CMakeRunConfigurationWidget::updateSummary()
+{
+    QString text = tr("Running executable: <b>%1</b> %2")
+                   .arg(QFileInfo(m_cmakeRunConfiguration->executable()).fileName(),
+                        ProjectExplorer::Environment::joinArgumentList(m_cmakeRunConfiguration->commandLineArguments()));
+    m_summaryLabel->setText(text);
 }
 
 
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 60a3071ebe3d34190e1344d627db0bb9719f9f3c..c21891ac320d95fc340227f8250ef58ac7271249 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -115,13 +115,17 @@ private slots:
 private slots:
     void baseEnvironmentComboBoxChanged(int index);
     void workingDirectoryChanged(const QString &workingDirectory);
+    void toggleDetails();
 private:
+    void updateSummary();
     bool m_ignoreChange;
     CMakeRunConfiguration *m_cmakeRunConfiguration;
     Core::Utils::PathChooser *m_workingDirectoryEdit;
     QComboBox *m_baseEnvironmentComboBox;
     ProjectExplorer::EnvironmentWidget *m_environmentWidget;
-
+    QWidget *m_detailsWidget;
+    QLabel *m_summaryLabel;
+    QAbstractButton *m_detailsButton;
 };
 
 class CMakeRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 4d7d2faccb1c89e81cf6f2581bd7793f340a492e..67e2cea81394ff81935c7bd1805ef6516fd9f3d7 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -122,7 +122,7 @@ QList<QWidget *> BuildSettingsSubWidgets::widgets() const
 }
 
 BuildSettingsSubWidgets::BuildSettingsSubWidgets(QWidget *parent)
-    : QGroupBox(parent)
+    : QWidget(parent)
 {
     new QVBoxLayout(this);
 }
@@ -141,7 +141,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
     QVBoxLayout *vbox = new QVBoxLayout(this);
     vbox->setContentsMargins(0, -1, 0, -1);
     QHBoxLayout *hbox = new QHBoxLayout();
-    hbox->addWidget(new QLabel(tr("Build Configuration:"), this));
+    hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this));
     m_buildConfigurationComboBox = new QComboBox(this);
     m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
     hbox->addWidget(m_buildConfigurationComboBox);
@@ -170,17 +170,14 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
                              this, SLOT(cloneConfiguration()));
     m_addButton->setMenu(addButtonMenu);
 
+    m_buildConfiguration = m_project->activeBuildConfiguration();
+
     connect(m_buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)),
             this, SLOT(currentIndexChanged(int)));
 
-    // TODO currentIndexChanged
-    // needs to change active configuration
-    // and set widgets
-
     connect(m_removeButton, SIGNAL(clicked()),
             this, SLOT(deleteConfiguration()));
-    connect(m_project, SIGNAL(activeBuildConfigurationChanged()),
-            this, SLOT(activeBuildConfigurationChanged()));
+
     connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)),
             this, SLOT(buildConfigurationDisplayNameChanged(const QString &)));
 
@@ -189,7 +186,6 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
 
 void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &buildConfiguration)
 {
-
     for (int i=0; i<m_buildConfigurationComboBox->count(); ++i) {
         if (m_buildConfigurationComboBox->itemData(i).toString() == buildConfiguration) {
             m_buildConfigurationComboBox->setItemText(i, m_project->displayNameFor(buildConfiguration));
@@ -201,11 +197,10 @@ void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &bu
 
 void BuildSettingsWidget::updateBuildSettings()
 {
-
     // TODO save position, entry from combbox
 
     // Delete old tree items
-    m_buildConfigurationComboBox->blockSignals(true); // TODO ...
+    m_buildConfigurationComboBox->blockSignals(true);
     m_buildConfigurationComboBox->clear();
     m_subWidgets->clear();
 
@@ -224,14 +219,12 @@ void BuildSettingsWidget::updateBuildSettings()
         m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget);
 
     // Add tree items
-    QString activeBuildConfiguration = m_project->activeBuildConfiguration();
     foreach (const QString &buildConfiguration, m_project->buildConfigurations()) {
         m_buildConfigurationComboBox->addItem(m_project->displayNameFor(buildConfiguration), buildConfiguration);
-        if (buildConfiguration == activeBuildConfiguration)
+        if (buildConfiguration == m_buildConfiguration)
             m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1);
     }
 
-    // TODO ...
     m_buildConfigurationComboBox->blockSignals(false);
 
     // TODO Restore position, entry from combbox
@@ -241,22 +234,21 @@ void BuildSettingsWidget::updateBuildSettings()
 
 void BuildSettingsWidget::currentIndexChanged(int index)
 {
-    QString buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString();
-    m_project->setActiveBuildConfiguration(buildConfiguration);
+    m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString();
+    activeBuildConfigurationChanged();
 }
 
 void BuildSettingsWidget::activeBuildConfigurationChanged()
 {
-    const QString &activeBuildConfiguration = m_project->activeBuildConfiguration();
     for (int i = 0; i < m_buildConfigurationComboBox->count(); ++i) {
-        if (m_buildConfigurationComboBox->itemData(i).toString() == activeBuildConfiguration) {
+        if (m_buildConfigurationComboBox->itemData(i).toString() == m_buildConfiguration) {
             m_buildConfigurationComboBox->setCurrentIndex(i);
             break;
         }
     }
     foreach (QWidget *widget, m_subWidgets->widgets()) {
         if (BuildConfigWidget *buildStepWidget = qobject_cast<BuildConfigWidget*>(widget)) {
-            buildStepWidget->init(activeBuildConfiguration);
+            buildStepWidget->init(m_buildConfiguration);
         }
     }
 }
@@ -293,7 +285,7 @@ void BuildSettingsWidget::createConfiguration()
     m_project->addBuildConfiguration(newBuildConfiguration);
     m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName);
     m_project->newBuildConfiguration(newBuildConfiguration);
-    m_project->setActiveBuildConfiguration(newBuildConfiguration);
+    m_buildConfiguration = newBuildConfiguration;
 
     updateBuildSettings();
 }
@@ -344,9 +336,8 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration)
     m_project->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration);
     m_project->setDisplayNameFor(newBuildConfiguration, newDisplayName);
 
+    m_buildConfiguration = newBuildConfiguration;
     updateBuildSettings();
-
-    m_project->setActiveBuildConfiguration(newBuildConfiguration);
 }
 
 void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration)
@@ -363,6 +354,15 @@ void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration
         }
     }
 
+    if (m_buildConfiguration == deleteConfiguration) {
+        foreach (const QString &otherConfiguration, m_project->buildConfigurations()) {
+            if (otherConfiguration != deleteConfiguration) {
+                m_buildConfiguration = otherConfiguration;
+                break;
+            }
+        }
+    }
+
     m_project->removeBuildConfiguration(deleteConfiguration);
 
     updateBuildSettings();
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index fdb34178829984a63885e3706c3ead14f5511d42..1f2978fd686804c817926585021710d87ca68235 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -44,7 +44,7 @@ class IBuildStepFactory;
 
 namespace Internal {
 
-class BuildSettingsSubWidgets : public QGroupBox
+class BuildSettingsSubWidgets : public QWidget
 {
     Q_OBJECT
 public:
@@ -99,9 +99,7 @@ private slots:
     void cloneConfiguration();
     void deleteConfiguration();
 
-
 private:
-    void setActiveConfiguration(const QString &configuration);
     void cloneConfiguration(const QString &toClone);
     void deleteConfiguration(const QString &toDelete);
 
@@ -110,6 +108,7 @@ private:
     QPushButton *m_removeButton;
     QComboBox *m_buildConfigurationComboBox;
     BuildSettingsSubWidgets *m_subWidgets;
+    QString m_buildConfiguration;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index fa175a8f3685039f9f8a9485ec3d08acfd1f03e4..5939547f324754c730405edc70fda4fab9514631 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -35,6 +35,7 @@
 #include <coreplugin/coreconstants.h>
 #include <extensionsystem/pluginmanager.h>
 #include <utils/qtcassert.h>
+#include <utils/detailsbutton.h>
 
 #include <QtGui/QLabel>
 #include <QtGui/QPushButton>
@@ -178,16 +179,10 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step)
     s.downButton = new QToolButton(this);
     s.downButton->setArrowType(Qt::DownArrow);
 #ifdef Q_OS_MAC
-    s.detailsButton = new QPushButton(this);
-    s.detailsButton->setAttribute(Qt::WA_MacSmallSize);
-    s.detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
     s.upButton->setIconSize(QSize(10, 10));
     s.downButton->setIconSize(QSize(10, 10));
-#else
-    s.detailsButton = new QToolButton(this);
 #endif
-    s.detailsButton->setText(tr("Details"));
-
+    s.detailsButton = new Utils::DetailsButton(this);
 
     // layout
     s.hbox = new QHBoxLayout();
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index d2ce450d0364f6c475fd6796863d8e06f13c496f..0df2b30726e972ae7c6c82f12f5f45b606825314 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -33,6 +33,7 @@
 
 #include <coreplugin/icore.h>
 #include <projectexplorer/debugginghelper.h>
+#include <utils/detailsbutton.h>
 
 #include <QtGui/QCheckBox>
 #include <QtGui/QFormLayout>
@@ -91,7 +92,22 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE
 
     QVBoxLayout *vbox = new QVBoxLayout(this);
     vbox->setContentsMargins(0, -1, 0, -1);
-    vbox->addLayout(layout);
+
+    m_summaryLabel = new QLabel(this);
+
+    m_detailsButton = new Utils::DetailsButton(this);
+    connect(m_detailsButton, SIGNAL(clicked()),
+            this, SLOT(toggleDetails()));
+
+    QHBoxLayout *hbox = new QHBoxLayout();
+    hbox->addWidget(m_summaryLabel);
+    hbox->addWidget(m_detailsButton);
+    vbox->addLayout(hbox);
+
+    m_detailsWidget = new QWidget(this);
+    m_detailsWidget->setLayout(layout);
+    vbox->addWidget(m_detailsWidget);
+    m_detailsWidget->setVisible(false);
 
     QLabel *environmentLabel = new QLabel(this);
     environmentLabel->setText(tr("Run Environment"));
@@ -146,6 +162,11 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE
             this, SLOT(userEnvironmentChangesChanged()));
 }
 
+void CustomExecutableConfigurationWidget::toggleDetails()
+{
+    m_detailsWidget->setVisible(!m_detailsWidget->isVisible());
+}
+
 void CustomExecutableConfigurationWidget::userChangesUpdated()
 {
     m_runConfiguration->setUserEnvironmentChanges(m_environmentWidget->userChanges());
@@ -211,10 +232,18 @@ void CustomExecutableConfigurationWidget::termToggled(bool on)
 
 void CustomExecutableConfigurationWidget::changed()
 {
+    const QString &executable = m_runConfiguration->baseExecutable();
+    QString text = tr("No Executable specified.");
+    if (!executable.isEmpty())
+        text = tr("Running executable: <b>%1</b> %2").
+               arg(executable,
+                   ProjectExplorer::Environment::joinArgumentList(m_runConfiguration->commandLineArguments()));
+
+    m_summaryLabel->setText(text);
     // We triggered the change, don't update us
     if (m_ignoreChange)
         return;
-    m_executableChooser->setPath(m_runConfiguration->baseExecutable());
+    m_executableChooser->setPath(executable);
     m_commandLineArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(m_runConfiguration->commandLineArguments()));
     m_workingDirectory->setPath(m_runConfiguration->baseWorkingDirectory());
     m_useTerminalCheck->setChecked(m_runConfiguration->runMode() == ApplicationRunConfiguration::Console);
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
index a31a320d332234d4aca5792d52d982495f7d64e0..b7c579fc6c484cdbf31de4d17c4be2236743e9bc 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
@@ -161,6 +161,7 @@ private slots:
     void baseEnvironmentChanged();
     void userEnvironmentChangesChanged();
     void baseEnvironmentComboBoxChanged(int index);
+    void toggleDetails();
 private:
     bool m_ignoreChange;
     CustomExecutableRunConfiguration *m_runConfiguration;
@@ -171,6 +172,9 @@ private:
     QCheckBox *m_useTerminalCheck;
     ProjectExplorer::EnvironmentWidget *m_environmentWidget;
     QComboBox *m_baseEnvironmentComboBox;
+    QWidget  *m_detailsWidget;
+    QLabel *m_summaryLabel;
+    QAbstractButton *m_detailsButton;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
index dff15cdbd50a26e8ca66135fd9dc3346fa407a01..697681c17818ef999d212f9e3fb3d3aa555c08f9 100644
--- a/src/plugins/projectexplorer/dependenciespanel.cpp
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -31,6 +31,8 @@
 #include "project.h"
 #include "session.h"
 
+#include <utils/detailsbutton.h>
+
 #include <coreplugin/fileiconprovider.h>
 
 #include <QtCore/QVector>
@@ -230,15 +232,7 @@ DependenciesWidget::DependenciesWidget(SessionManager *session,
     m_titleLabel->setText("Dummy Text");
     hbox->addWidget(m_titleLabel);
 
-    QAbstractButton *detailsButton;
-#ifdef Q_OS_MAC
-    detailsButton = new QPushButton;
-    detailsButton->setAttribute(Qt::WA_MacSmallSize);
-    detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-#else
-    detailsButton = new QToolButton(this);
-#endif
-    detailsButton->setText(tr("Details"));
+    QAbstractButton *detailsButton = new Utils::DetailsButton(this);
     connect(detailsButton, SIGNAL(clicked()),
             this, SLOT(toggleDetails()));
 
diff --git a/src/plugins/projectexplorer/environmenteditmodel.cpp b/src/plugins/projectexplorer/environmenteditmodel.cpp
index fab5ed6ab4d9c28e75b225e02fcb08703344c339..22fbc800dffcffe1d4c3f827f3e0e18d18e2b67e 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.cpp
+++ b/src/plugins/projectexplorer/environmenteditmodel.cpp
@@ -29,6 +29,8 @@
 
 #include "environmenteditmodel.h"
 
+#include <utils/detailsbutton.h>
+
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QHeaderView>
 #include <QtGui/QToolButton>
@@ -438,15 +440,7 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails
     m_summaryText = new QLabel(this);
     m_summaryText->setText("");
 
-     QAbstractButton *detailsButton;
-#ifdef Q_OS_MAC
-    detailsButton = new QPushButton(this);
-    detailsButton->setAttribute(Qt::WA_MacSmallSize);
-    detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-#else
-    detailsButton = new QToolButton(this);
-#endif
-    detailsButton->setText(tr("Details"));
+    QAbstractButton *detailsButton = new Utils::DetailsButton(this);
 
     connect(detailsButton, SIGNAL(clicked()),
             this, SLOT(toggleDetails()));
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 4b0358652e8a4e53b11680f9f3bc3ed18c191a4f..cd7b713cdb9b7a82aa31113a5a4eaaa7021a2a68 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -112,6 +112,7 @@ void Project::addBuildConfiguration(const QString &name)
 
     for (int i = 0; i != m_cleanSteps.size(); ++i)
         m_cleanSteps.at(i)->addBuildConfiguration(name);
+    emit addedBuildConfiguration(this, name);
 }
 
 void Project::removeBuildConfiguration(const QString &name)
@@ -131,6 +132,7 @@ void Project::removeBuildConfiguration(const QString &name)
     for (int i = 0; i != m_cleanSteps.size(); ++i)
         m_cleanSteps.at(i)->removeBuildConfiguration(name);
 
+    emit removedBuildConfiguration(this, name);
 }
 
 void Project::copyBuildConfiguration(const QString &source, const QString &dest)
@@ -147,6 +149,7 @@ void Project::copyBuildConfiguration(const QString &source, const QString &dest)
 
     for (int i = 0; i != m_cleanSteps.size(); ++i)
         m_cleanSteps.at(i)->copyBuildConfiguration(source, dest);
+    emit addedBuildConfiguration(this, dest);
 }
 
 QStringList Project::buildConfigurations() const
@@ -453,7 +456,7 @@ void Project::addRunConfiguration(QSharedPointer<RunConfiguration> runConfigurat
         return;
     }
     m_runConfigurations.push_back(runConfiguration);
-    emit addedRunConfiguration(runConfiguration->name());
+    emit addedRunConfiguration(this, runConfiguration->name());
 }
 
 void Project::removeRunConfiguration(QSharedPointer<RunConfiguration> runConfiguration)
@@ -473,7 +476,7 @@ void Project::removeRunConfiguration(QSharedPointer<RunConfiguration> runConfigu
     }
 
     m_runConfigurations.removeOne(runConfiguration);
-    emit removedRunConfiguration(runConfiguration->name());    
+    emit removedRunConfiguration(this, runConfiguration->name());
 }
 
 QSharedPointer<RunConfiguration> Project::activeRunConfiguration() const
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 49e8edf04aca470d3b26fecd47c91178aed6c4ca..ad36023c2d8a8a1684611b8023b19d99d3362be2 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -147,11 +147,22 @@ public:
 
 signals:
     void fileListChanged();
+
+// TODO clean up signal names
+// might be better to also have
+// a aboutToRemoveRunConfiguration
+// and a removedBuildConfiguration
+// a runconfiguration display name changed is missing
     void activeBuildConfigurationChanged();
     void activeRunConfigurationChanged();
     void runConfigurationsEnabledStateChanged();
-    void removedRunConfiguration(const QString &name);
-    void addedRunConfiguration(const QString &name);
+
+    void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name);
+    void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name);
+
+    void removedBuildConfiguration(ProjectExplorer::Project *p, const QString &name);
+    void addedBuildConfiguration(ProjectExplorer::Project *p, const QString &name);
+
     // This signal is jut there for updating the tree list in the buildsettings wizard
     void buildConfigurationDisplayNameChanged(const QString &buildConfiguration);
     void environmentChanged(const QString &buildConfiguration);
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index a86199476b373d72a1fcb1c9614f04f95d36fe55..eb4990198056d5e3d04fb242511f7026e84268ff 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -35,6 +35,7 @@
 #include "iprojectproperties.h"
 #include "session.h"
 #include "projecttreewidget.h"
+#include "runconfiguration.h"
 
 #include <coreplugin/minisplitter.h>
 #include <coreplugin/fileiconprovider.h>
@@ -51,6 +52,9 @@
 #include <QtGui/QTreeWidget>
 #include <QtGui/QHeaderView>
 #include <QtGui/QLabel>
+#include <QtGui/QPainter>
+#include <QtGui/QPaintEvent>
+#include <utils/stylehelper.h>
 
 using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
@@ -87,6 +91,17 @@ PanelsWidget::~PanelsWidget()
     clear();
 }
 
+void PanelsWidget::addWidget(QWidget *widget)
+{
+    Panel p;
+    p.nameLabel = 0;
+    p.panelWidget = widget;
+
+    p.marginLayout = 0;
+    m_layout->insertWidget(m_layout->count() -1, widget);
+    m_panels.append(p);
+}
+
 void PanelsWidget::addWidget(const QString &name, QWidget *widget)
 {
     Panel p;
@@ -96,15 +111,15 @@ void PanelsWidget::addWidget(const QString &name, QWidget *widget)
     f.setBold(true);
     f.setPointSizeF(f.pointSizeF() * 1.4);
     p.nameLabel->setFont(f);
+
     p.panelWidget = widget;
 
-    m_layout->insertWidget(m_layout->count() -1, p.nameLabel);
+    m_layout->insertWidget(m_layout->count() - 1, p.nameLabel);
     QHBoxLayout *hboxLayout = new QHBoxLayout();
     hboxLayout->setContentsMargins(20, 0, 0, 0);
     hboxLayout->addWidget(p.panelWidget);
     p.marginLayout = hboxLayout;
     m_layout->insertLayout(m_layout->count() -1, hboxLayout);
-
     m_panels.append(p);
 }
 
@@ -118,56 +133,431 @@ void PanelsWidget::clear()
     m_panels.clear();
 }
 
+void PanelsWidget::removeWidget(QWidget *widget)
+{
+    for(int i=0; i<m_panels.count(); ++i) {
+        const Panel & p = m_panels.at(i);
+        if (p.panelWidget == widget) {
+            if (p.marginLayout)
+                p.marginLayout->removeWidget(p.panelWidget);
+            else
+                m_layout->removeWidget(p.panelWidget);
+            delete p.nameLabel;
+            delete p.marginLayout;
+            m_panels.removeAt(i);
+            break;
+        }
+    }
+}
+
+////
+// ActiveConfigurationWidget
+////
+
+ActiveConfigurationWidget::ActiveConfigurationWidget(QWidget *parent)
+    : QWidget(parent)
+{
+    QGridLayout *grid = new QGridLayout(this);
+    RunConfigurationComboBox *runConfigurationComboBox = new RunConfigurationComboBox(this);
+    grid->addWidget(new QLabel(tr("Active Runconfiguration")), 0, 0);
+    grid->addWidget(runConfigurationComboBox, 0, 1);
+
+    SessionManager *session = ProjectExplorerPlugin::instance()->session();
+
+    int i = 0;
+    foreach(Project *p, session->projects()) {
+        ++i;
+        BuildConfigurationComboBox *buildConfigurationComboBox = new BuildConfigurationComboBox(p, this);
+        QLabel *label = new QLabel(p->name(), this);
+        grid->addWidget(label, i, 0);
+        grid->addWidget(buildConfigurationComboBox, i, 1);
+        m_buildComboBoxMap.insert(p, qMakePair(buildConfigurationComboBox, label));
+    }
+
+    connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
+            this, SLOT(projectAdded(ProjectExplorer::Project*)));
+
+    connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
+            this, SLOT(projectRemoved(ProjectExplorer::Project*)));
+
+};
+
+void ActiveConfigurationWidget::projectAdded(Project *p)
+{
+    QGridLayout *grid = static_cast<QGridLayout *>(layout());
+    BuildConfigurationComboBox *buildConfigurationComboBox = new BuildConfigurationComboBox(p, this);
+    QLabel *label = new QLabel(p->name());
+    grid->addWidget(label);
+    grid->addWidget(buildConfigurationComboBox);
+    m_buildComboBoxMap.insert(p, qMakePair(buildConfigurationComboBox, label));
+}
+
+void ActiveConfigurationWidget::projectRemoved(Project *p)
+{
+    // Find row
+
+    // TODO also remove the label...
+    QPair<BuildConfigurationComboBox *, QLabel *> pair = m_buildComboBoxMap.value(p);;
+    delete pair.first;
+    delete pair.second;
+    m_buildComboBoxMap.remove(p);
+}
+
+
+ActiveConfigurationWidget::~ActiveConfigurationWidget()
+{
+
+}
+
+////
+// RunConfigurationComboBox
+////
+
+RunConfigurationComboBox::RunConfigurationComboBox(QWidget *parent)
+    : QComboBox(parent), m_ignoreChange(false)
+{
+    setSizeAdjustPolicy(QComboBox::AdjustToContents);
+
+    SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
+
+    // Setup the treewidget
+    rebuildTree();
+
+    // Connect
+    foreach(Project *p, session->projects()) {
+        foreach(const QSharedPointer<RunConfiguration> &rc, p->runConfigurations()) {
+            connect(rc.data(), SIGNAL(nameChanged()), this, SLOT(rebuildTree()));
+        }
+        connectToProject(p);
+    }
+
+
+    connect(session, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
+            this, SLOT(activeRunConfigurationChanged()));
+
+    connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
+            this, SLOT(projectAdded(ProjectExplorer::Project*)));
+    connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
+            this, SLOT(projectRemoved(ProjectExplorer::Project*)));
+    connect(this, SIGNAL(activated(int)),
+            this, SLOT(activeItemChanged(int)));
+}
+
+RunConfigurationComboBox::~RunConfigurationComboBox()
+{
+
+}
+
+int RunConfigurationComboBox::convertTreeIndexToInt(int project, int runconfigurationIndex)
+{
+    ++runconfigurationIndex;
+    ++project;
+    for(int i=0; i<count(); ++i) {
+        if (itemData(i, Qt::UserRole).toInt() == 0) {
+            --project;
+        } else if (itemData(i, Qt::UserRole).toInt() == 1 && project == 0) {
+            --runconfigurationIndex;
+        }
+        if (runconfigurationIndex == 0) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+QPair<int, int> RunConfigurationComboBox::convertIntToTreeIndex(int index)
+{
+    int projectIndex = -1;
+    int runConfigIndex = -1;
+    for(int i = 0; i <= index; ++i) {
+        if (itemData(i, Qt::UserRole).toInt() == 0) {
+            ++projectIndex;
+            runConfigIndex = -1;
+        } else if (itemData(i, Qt::UserRole).toInt() == 1) {
+            ++runConfigIndex;
+        }
+    }
+    return qMakePair(projectIndex, runConfigIndex);
+}
+
+void RunConfigurationComboBox::activeItemChanged(int index)
+{
+    if (m_ignoreChange)
+        return;
+    m_ignoreChange = true;
+    SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
+    QPair<int, int> pair = convertIntToTreeIndex(index);
+    qDebug()<<"Active Item changed to "<<index<<"which is :"<<pair.first<<pair.second;
+    if (pair.first == -1) {
+        setCurrentIndex(-1);
+    } else {
+        if (pair.second == -1)
+            pair.second = 0;
+        QList<Project *> projects = session->projects();
+        if (pair.first < projects.count()) {
+            Project *p = projects.at(pair.first);
+            QList<QSharedPointer<RunConfiguration> > runconfigurations = p->runConfigurations();
+            if (pair.second < runconfigurations.count()) {
+                session->setStartupProject(p);
+                p->setActiveRunConfiguration(runconfigurations.at(pair.second));
+                if (currentIndex() != convertTreeIndexToInt(pair.first, pair.second))
+                    setCurrentIndex(convertTreeIndexToInt(pair.first, pair.second));
+            }
+        }
+    }
+    m_ignoreChange = false;
+}
+
+void RunConfigurationComboBox::activeRunConfigurationChanged()
+{
+    if (m_ignoreChange)
+        return;
+    m_ignoreChange = true;
+    SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
+    Project *startupProject = session->startupProject();
+    if (startupProject) {
+        int projectIndex = session->projects().indexOf(startupProject);
+        int runConfigurationIndex = startupProject->runConfigurations().indexOf(startupProject->activeRunConfiguration());        
+        setCurrentIndex(convertTreeIndexToInt(projectIndex, runConfigurationIndex));
+    } else {
+        setCurrentIndex(-1);
+    }
+    m_ignoreChange = false;
+}
+
+void RunConfigurationComboBox::addedRunConfiguration(ProjectExplorer::Project *p, const QString &name)
+{
+    QSharedPointer<RunConfiguration> runConfiguration = QSharedPointer<RunConfiguration>(0);
+    foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) {
+        if (rc->name() == name) {
+            runConfiguration = rc;
+            break;
+        }
+    }
+    if (runConfiguration) {
+        connect(runConfiguration.data(), SIGNAL(nameChanged()),
+                this, SLOT(rebuildTree()));
+    }
+    rebuildTree();
+}
+
+void RunConfigurationComboBox::removedRunConfiguration(ProjectExplorer::Project *p, const QString &name)
+{
+    QSharedPointer<RunConfiguration> runConfiguration = QSharedPointer<RunConfiguration>(0);
+    foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) {
+        if (rc->name() == name) {
+            runConfiguration = rc;
+            break;
+        }
+    }
+    if (runConfiguration) {
+        disconnect(runConfiguration.data(), SIGNAL(nameChanged()),
+                this, SLOT(rebuildTree()));
+    }
+
+    rebuildTree();
+}
+
+void RunConfigurationComboBox::projectAdded(ProjectExplorer::Project *p)
+{
+    rebuildTree();
+    foreach(const QSharedPointer<RunConfiguration> &rc, p->runConfigurations())
+        connect(rc.data(), SIGNAL(nameChanged()), this, SLOT(rebuildTree()));
+    connectToProject(p);
+}
+
+void RunConfigurationComboBox::projectRemoved(ProjectExplorer::Project *p)
+{
+    rebuildTree();
+    disconnectFromProject(p);
+}
+
+void RunConfigurationComboBox::connectToProject(ProjectExplorer::Project *p)
+{
+    connect(p, SIGNAL(activeRunConfigurationChanged()),
+            this, SLOT(activeRunConfigurationChanged()));
+    connect(p, SIGNAL(addedRunConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(addedRunConfiguration(ProjectExplorer::Project *, QString)));
+    connect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(removedRunConfiguration(ProjectExplorer::Project *, QString)));
+}
+
+void RunConfigurationComboBox::disconnectFromProject(ProjectExplorer::Project *p)
+{
+    disconnect(p, SIGNAL(activeRunConfigurationChanged()),
+            this, SLOT(activeRunConfigurationChanged()));
+    disconnect(p, SIGNAL(addedRunConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(addedRunConfiguration(ProjectExplorer::Project *, QString)));
+    disconnect(p, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(removedRunConfiguration(ProjectExplorer::Project *, QString)));
+}
+
+void RunConfigurationComboBox::rebuildTree()
+{
+    m_ignoreChange = true;
+    clear();
+    
+    SessionManager *session = ProjectExplorer::ProjectExplorerPlugin::instance()->session();
+    Project *startupProject = session->startupProject();
+    foreach(Project *p, session->projects()) {
+        addItem(p->name(), QVariant(0));
+        foreach(QSharedPointer<RunConfiguration> rc, p->runConfigurations()) {
+            addItem("  " + rc->name(), QVariant(1));
+            if ((startupProject == p) && (p->activeRunConfiguration() == rc)){
+                setCurrentIndex(count() - 1);
+            }
+        }
+    }
+    // Select the right index
+    m_ignoreChange = false;
+}
+
+////
+// BuildConfigurationComboBox
+////
+
+BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *parent)
+    : QComboBox(parent), ignoreIndexChange(false), m_project(p)
+{
+    setSizeAdjustPolicy(QComboBox::AdjustToContents);
+    foreach(const QString &buildConfiguration, p->buildConfigurations())
+        addItem(p->displayNameFor(buildConfiguration), buildConfiguration);
+
+    int index = p->buildConfigurations().indexOf(p->activeBuildConfiguration());
+    if (index != -1)
+        setCurrentIndex(index);
+
+    connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)),
+            this, SLOT(nameChanged(QString)));
+    connect(p, SIGNAL(activeBuildConfigurationChanged()),
+            this, SLOT(activeConfigurationChanged()));
+    connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, QString)));
+    connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, QString)),
+            this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, QString)));
+    connect(this, SIGNAL(activated(int)),
+            this, SLOT(changedIndex(int)));
+}
+
+BuildConfigurationComboBox::~BuildConfigurationComboBox()
+{
+
+}
+
+void BuildConfigurationComboBox::nameChanged(const QString &buildConfiguration)
+{
+    int index = nameToIndex(buildConfiguration);
+    if (index == -1)
+        return;
+    setItemText(index, m_project->displayNameFor(buildConfiguration));
+}
+
+int BuildConfigurationComboBox::nameToIndex(const QString &buildConfiguration)
+{
+    for (int i=0; i < count(); ++i)
+        if (itemData(i) == buildConfiguration)
+            return i;
+    return -1;
+}
+
+void BuildConfigurationComboBox::activeConfigurationChanged()
+{
+    int index = nameToIndex(m_project->activeBuildConfiguration());
+    if (index == -1)
+        return;
+    ignoreIndexChange = true;
+    setCurrentIndex(index);
+    ignoreIndexChange = false;
+}
+
+void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,const QString &buildConfiguration)
+{
+    ignoreIndexChange = true;
+    addItem(m_project->displayNameFor(buildConfiguration), buildConfiguration);
+    ignoreIndexChange = false;
+}
+
+void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration)
+{
+    ignoreIndexChange = true;
+    int index = nameToIndex(buildConfiguration);
+    removeItem(index);
+    ignoreIndexChange = false;
+}
+
+void BuildConfigurationComboBox::changedIndex(int newIndex)
+{
+    if (newIndex == -1)
+        return;
+    m_project->setActiveBuildConfiguration(itemData(newIndex).toString());
+}
 ///
-// ProjectView
+// ProjectComboBox
 ///
 
-ProjectView::ProjectView(QWidget *parent)
-    : QTreeWidget(parent)
+ProjectComboBox::ProjectComboBox(QWidget *parent)
+    : QComboBox(parent), m_lastProject(0)
 {
-    m_sizeHint = QSize(250, 250);
-    setUniformRowHeights(true);
-    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    setSizeAdjustPolicy(QComboBox::AdjustToContents);
+    SessionManager *session = ProjectExplorerPlugin::instance()->session();
+
+    foreach(Project *p, session->projects()) {
+        addItem(p->name(), QVariant::fromValue((void *) p));
+    }
 
-    QAbstractItemModel *m = model();
-    connect(m, SIGNAL(rowsInserted(QModelIndex,int,int)),
-            this, SLOT(updateSizeHint()));
-    connect(m, SIGNAL(rowsRemoved(QModelIndex,int,int)),
-            this, SLOT(updateSizeHint()));
-    connect(m, SIGNAL(modelReset()),
-            this, SLOT(updateSizeHint()));
-    connect(m, SIGNAL(layoutChanged()),
-            this, SLOT(updateSizeHint()));
-    updateSizeHint();
+    connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
+            this, SLOT(projectRemoved(ProjectExplorer::Project*)));
+    connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)),
+            this, SLOT(projectAdded(ProjectExplorer::Project*)));
+
+    connect(this, SIGNAL(activated(int)),
+            SLOT(itemActivated(int)));
 }
 
-ProjectView::~ProjectView()
+ProjectComboBox::~ProjectComboBox()
 {
 
 }
 
-QSize ProjectView::sizeHint() const
+void ProjectComboBox::projectAdded(ProjectExplorer::Project *p)
 {
-    return m_sizeHint;
+    addItem(p->name(), QVariant::fromValue((void *) p));
+    // Comboboxes don't emit a signal
+    if (count() == 1)
+        itemActivated(0);
 }
 
-void ProjectView::updateSizeHint()
+void ProjectComboBox::projectRemoved(ProjectExplorer::Project *p)
 {
-    if (!model()) {
-        m_sizeHint = QSize(250, 250);
-        return;
+    QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects();
+    for (int i= 0; i<projects.count(); ++i)
+        if (itemData(i, Qt::UserRole).value<void *>() == (void *) p) {
+            removeItem(i);
+            break;
     }
 
-    int heightOffset = size().height() - viewport()->height();
-    int heightPerRow = sizeHintForRow(0);
-    if (heightPerRow == -1) {
-        heightPerRow = 30;
+    qDebug()<<"aboutToRemoveProject current index is"<<currentIndex();
+
+    // Comboboxes don't emit a signal if the index did't actually change
+    if (count() == 0) {
+        itemActivated(-1);
+    } else {
+        setCurrentIndex(0);
+        itemActivated(0);
     }
-    int rows = qMin(qMax(model()->rowCount(), 2), 6);
-    int height = rows * heightPerRow + heightOffset;
-    if (m_sizeHint.height() != height) {
-        m_sizeHint.setHeight(height);
-        updateGeometry();
+}
+
+void ProjectComboBox::itemActivated(int index)
+{
+    qDebug()<<"itemActivated"<<index;
+    Project *p = 0;
+    QList<Project *> projects = ProjectExplorerPlugin::instance()->session()->projects();
+    if (index != -1 && index < projects.size())
+        p = projects.at(index);
+
+    if (p != m_lastProject) {
+        m_lastProject = p;
+        emit projectChanged(p);
     }
 }
 
@@ -175,10 +565,6 @@ void ProjectView::updateSizeHint()
 // OnePixelBlackLine
 ///
 
-#include <QtGui/QPainter>
-#include <QtGui/QPaintEvent>
-#include <utils/stylehelper.h>
-
 class OnePixelBlackLine : public QWidget
 {
 public:
@@ -196,7 +582,6 @@ public:
     }
 };
 
-
 ///
 // ProjectWindow
 ///
@@ -204,46 +589,45 @@ public:
 ProjectWindow::ProjectWindow(QWidget *parent)
     : QWidget(parent), m_currentItemChanged(false)
 {
-    setWindowTitle(tr("Project Explorer"));
-    setWindowIcon(QIcon(":/projectexplorer/images/projectexplorer.png"));
-
     m_projectExplorer = ProjectExplorerPlugin::instance();
     m_session = m_projectExplorer->session();
 
-    m_treeWidget = new ProjectView(this);
-    m_treeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
-    m_treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
-    m_treeWidget->setFrameStyle(QFrame::NoFrame);
-    m_treeWidget->setRootIsDecorated(false);
-    m_treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents);
-    m_treeWidget->setHeaderLabels(QStringList()
-                                  << tr("Projects")
-                                  << tr("Startup")
-                                  << tr("Path")
-        );
-
-    connect(m_treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)),
-            this, SLOT(handleItem(QTreeWidgetItem*, int)));
-    connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem *)),
-            this, SLOT(handleCurrentItemChanged(QTreeWidgetItem*)));
-
     m_panelsWidget = new PanelsWidget(this);
 
+    m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget);
+
+    m_projectChooser = new QWidget(m_panelsWidget);
+    QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser);
+    hbox->setMargin(0);
+    hbox->addWidget(new QLabel(tr("Edit Configuration for Project:"), m_projectChooser));
+    ProjectComboBox *projectComboBox = new ProjectComboBox(m_projectChooser);
+    hbox->addWidget(projectComboBox);
+
+    m_panelsWidget->addWidget(tr("Active Configuration"), m_activeConfigurationWidget);
+
+    m_spacerBetween = new QWidget(this);
+    QVBoxLayout *vbox = new QVBoxLayout(m_spacerBetween);
+    m_spacerBetween->setLayout(vbox);
+    vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
+    vbox->addWidget(new OnePixelBlackLine(m_spacerBetween));
+    vbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed));
+
+    m_panelsWidget->addWidget(m_spacerBetween);
+
+    m_panelsWidget->addWidget(tr("Edit Configuration"), m_projectChooser);
+
     QVBoxLayout *topLevelLayout = new QVBoxLayout(this);
     topLevelLayout->setMargin(0);
     topLevelLayout->setSpacing(0);
     topLevelLayout->addWidget(new Core::Utils::StyledBar(this));
-    topLevelLayout->addWidget(m_treeWidget);
-    topLevelLayout->addWidget(new OnePixelBlackLine(this));
+
     topLevelLayout->addWidget(m_panelsWidget);
 
+    connect(projectComboBox, SIGNAL(projectChanged(ProjectExplorer::Project*)),
+            this, SLOT(showProperties(ProjectExplorer::Project*)));
+
     connect(m_session, SIGNAL(sessionLoaded()), this, SLOT(restoreStatus()));
     connect(m_session, SIGNAL(aboutToSaveSession()), this, SLOT(saveStatus()));
-
-    connect(m_session, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project*)));
-    connect(m_session, SIGNAL(projectAdded(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetProjectAdded(ProjectExplorer::Project*)));
-    connect(m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetProjectRemoved(ProjectExplorer::Project*)));
-    connect(m_session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), this, SLOT(updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project*)));
 }
 
 ProjectWindow::~ProjectWindow()
@@ -252,36 +636,30 @@ ProjectWindow::~ProjectWindow()
 
 void ProjectWindow::restoreStatus()
 {
-    if (!m_treeWidget->currentItem() && m_treeWidget->topLevelItemCount()) {
-        m_treeWidget->setCurrentItem(m_treeWidget->topLevelItem(0), 0, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
-    }
-
     // TODO
-//    const QVariant lastPanel = m_session->value(QLatin1String("ProjectWindow/Panel"));
-//    if (lastPanel.isValid()) {
-//        const int index = lastPanel.toInt();
-//        if (index < m_panelsTabWidget->count())
-//            m_panelsTabWidget->setCurrentIndex(index);
-//    }
-//
-//    if ((m_panelsTabWidget->currentIndex() == -1) && m_panelsTabWidget->count())
-//        m_panelsTabWidget->setCurrentIndex(0);
 }
 
 void ProjectWindow::saveStatus()
 {
     // TODO
-//    m_session->setValue(QLatin1String("ProjectWindow/Panel"), m_panelsTabWidget->currentIndex());
 }
 
-void ProjectWindow::showProperties(ProjectExplorer::Project *project, const QModelIndex & /* subIndex */)
+void ProjectWindow::showProperties(Project *project)
 {
     if (debug)
         qDebug() << "ProjectWindow - showProperties called";
 
+    m_panelsWidget->removeWidget(m_activeConfigurationWidget);
+    m_panelsWidget->removeWidget(m_spacerBetween);
+    m_panelsWidget->removeWidget(m_projectChooser);
+
     // Remove the tabs from the tab widget first
     m_panelsWidget->clear();
 
+    m_panelsWidget->addWidget(tr("Active Configuration"), m_activeConfigurationWidget);
+    m_panelsWidget->addWidget(m_spacerBetween);
+    m_panelsWidget->addWidget(tr("Edit Configuration"), m_projectChooser);
+
     if (project) {
         QList<IPanelFactory *> pages =
                 ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>();
@@ -296,65 +674,6 @@ void ProjectWindow::showProperties(ProjectExplorer::Project *project, const QMod
     }
 }
 
-void ProjectWindow::updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project *startupProject)
-{
-    int count = m_treeWidget->topLevelItemCount();
-    for (int i = 0; i < count; ++i) {
-        QTreeWidgetItem *item = m_treeWidget->topLevelItem(i);
-        if (Project *project = findProject(item->data(2, Qt::UserRole).toString())) {
-            bool checked = (startupProject == project);
-            if (item->checkState(1) != (checked ? Qt::Checked : Qt::Unchecked))
-                item->setCheckState(1, checked ? Qt::Checked : Qt::Unchecked);
-        } else {
-            item->setCheckState(1, Qt::Unchecked);
-        }
-    }
-}
-
-void ProjectWindow::updateTreeWidgetProjectAdded(ProjectExplorer::Project *projectAdded)
-{
-    int position = m_session->projects().indexOf(projectAdded);
-    const QFileInfo fileInfo(projectAdded->file()->fileName());
-
-    QTreeWidgetItem *item = new QTreeWidgetItem();
-    item->setText(0, projectAdded->name());
-    item->setIcon(0, Core::FileIconProvider::instance()->icon(fileInfo));
-    item->setData(2, Qt::UserRole, fileInfo.filePath());
-    item->setText(2, QDir::toNativeSeparators(fileInfo.filePath()));
-
-    if (projectAdded->isApplication()) {
-        bool checked = (m_session->startupProject() == projectAdded);
-        item->setCheckState(1, checked ? Qt::Checked : Qt::Unchecked);
-    }
-
-    m_treeWidget->insertTopLevelItem(position, item);
-}
-
-void ProjectWindow::updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project *projectRemoved) {
-    int count = m_treeWidget->topLevelItemCount();
-    for (int i = 0; i < count; ++i) {
-        QTreeWidgetItem *item = m_treeWidget->topLevelItem(i);
-        if (item->data(2, Qt::UserRole).toString() == QFileInfo(projectRemoved->file()->fileName()).filePath()) {
-            if (m_treeWidget->currentItem() == item) {
-                    m_treeWidget->setCurrentItem(0);
-            }
-        }
-    }
-}
-
-void ProjectWindow::updateTreeWidgetProjectRemoved(ProjectExplorer::Project *projectRemoved)
-{    
-    int count = m_treeWidget->topLevelItemCount();
-    for (int i = 0; i < count; ++i) {
-        QTreeWidgetItem *item = m_treeWidget->topLevelItem(i);
-        if (item->data(2, Qt::UserRole).toString() == QFileInfo(projectRemoved->file()->fileName()).filePath()) {
-            QTreeWidgetItem *it = m_treeWidget->takeTopLevelItem(i);
-            delete it;
-            break;
-        }
-    }
-}
-
 Project *ProjectWindow::findProject(const QString &path) const
 {
     QList<Project*> projects = m_session->projects();
@@ -363,44 +682,3 @@ Project *ProjectWindow::findProject(const QString &path) const
             return project;
     return 0;
 }
-
-
-void ProjectWindow::handleCurrentItemChanged(QTreeWidgetItem *current)
-{
-    if (m_currentItemChanged)
-        return;
-    m_currentItemChanged = true;
-    if (current) {
-        QString path = current->data(2, Qt::UserRole).toString();
-        if (Project *project = findProject(path)) {
-            m_projectExplorer->setCurrentFile(project, path);
-            showProperties(project, QModelIndex());
-            m_currentItemChanged = false;
-            return;
-        }
-    }
-    showProperties(0, QModelIndex());
-    m_currentItemChanged = false;
-}
-
-
-void ProjectWindow::handleItem(QTreeWidgetItem *item, int column)
-{
-    if (!item || column != 1) // startup project
-        return;
-
-    const QString path = item->data(2, Qt::UserRole).toString();
-    Project *project = findProject(path);
-    // Project no longer exists
-    if (!project)
-        return;
-     if (!(item->checkState(1) == Qt::Checked)) { // is now unchecked
-         if (m_session->startupProject() == project) {
-             item->setCheckState(1, Qt::Checked); // uncheck not supported
-         }
-     } else if (project && project->isApplication()) { // is now checked
-         m_session->setStartupProject(project);
-     } else {
-         item->setCheckState(1, Qt::Unchecked); // check not supported
-     }
-}
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index 237d9a2fc0bba9e1cac989203a5bc42806836bc3..6b39e19d6ee02f8970f303f438d0fa6ae28cd7b3 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -32,15 +32,16 @@
 
 #include <QtGui/QWidget>
 #include <QtGui/QScrollArea>
-#include <QtGui/QTreeWidget>
+#include <QtGui/QComboBox>
+#include <QtCore/QPair>
 
 QT_BEGIN_NAMESPACE
 class QLabel;
 class QVBoxLayout;
 class QModelIndex;
 class QTabWidget;
-class QTreeWidgetItem;
 class QHBoxLayout;
+class QComboBox;
 QT_END_NAMESPACE
 
 namespace ProjectExplorer {
@@ -59,7 +60,9 @@ public:
     PanelsWidget(QWidget *parent);
     ~PanelsWidget();
     // Adds a widget
+    void addWidget(QWidget *widget);
     void addWidget(const QString &name, QWidget *widget);
+    void removeWidget(QWidget *widget);
 
     // Removes all widgets and deletes them
     void clear();
@@ -75,18 +78,76 @@ private:
     QList<Panel> m_panels;
 };
 
+class BuildConfigurationComboBox : public QComboBox
+{
+    Q_OBJECT
+public:
+    BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0);
+    ~BuildConfigurationComboBox();
+private slots:
+    void nameChanged(const QString &buildConfiguration);
+    void activeConfigurationChanged();
+    void addedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration);
+    void removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration);
+    void changedIndex(int newIndex);
+private:
+    int nameToIndex(const QString &buildConfiguration);
+    bool ignoreIndexChange;
+    ProjectExplorer::Project *m_project;
+};
 
-class ProjectView : public QTreeWidget
+class ActiveConfigurationWidget : public QWidget
 {
     Q_OBJECT
 public:
-    ProjectView (QWidget *parent);
-    ~ProjectView ();
-    virtual QSize sizeHint() const;
+    ActiveConfigurationWidget(QWidget *parent = 0);
+    ~ActiveConfigurationWidget();
 private slots:
-    void updateSizeHint();
+    void projectAdded(ProjectExplorer::Project*);
+    void projectRemoved(ProjectExplorer::Project*);
 private:
-    QSize m_sizeHint;
+    QMap<ProjectExplorer::Project *, QPair<BuildConfigurationComboBox *, QLabel *> > m_buildComboBoxMap;
+};
+
+class RunConfigurationComboBox : public QComboBox
+{
+    Q_OBJECT
+public:
+    RunConfigurationComboBox(QWidget *parent = 0);
+    ~RunConfigurationComboBox();
+private slots:
+    void activeRunConfigurationChanged();
+    void activeItemChanged(int);
+    void addedRunConfiguration(ProjectExplorer::Project *p, const QString &);
+    void removedRunConfiguration(ProjectExplorer::Project *p, const QString &);
+    void projectAdded(ProjectExplorer::Project*);
+    void projectRemoved(ProjectExplorer::Project*);
+    void rebuildTree();
+private:
+    int convertTreeIndexToInt(int project, int runconfigurationIndex);
+    QPair<int, int> convertIntToTreeIndex(int index);
+    void connectToProject(ProjectExplorer::Project *p);
+    void disconnectFromProject(ProjectExplorer::Project *p);
+
+    bool m_ignoreChange;
+};
+
+class ProjectComboBox : public QComboBox
+{
+    Q_OBJECT
+public:
+    ProjectComboBox(QWidget *parent);
+    ~ProjectComboBox();
+
+signals:
+    void projectChanged(ProjectExplorer::Project *);
+
+private slots:
+    void projectAdded(ProjectExplorer::Project*);
+    void projectRemoved(ProjectExplorer::Project*);
+    void itemActivated(int);
+private:
+    ProjectExplorer::Project *m_lastProject;
 };
 
 class ProjectWindow : public QWidget
@@ -98,23 +159,18 @@ public:
     ~ProjectWindow();
 
 private slots:
-    void showProperties(ProjectExplorer::Project *project, const QModelIndex &subIndex);
+    void showProperties(ProjectExplorer::Project *project);
     void restoreStatus();
     void saveStatus();
 
-    void updateTreeWidgetStatupProjectChanged(ProjectExplorer::Project *startupProject);
-    void updateTreeWidgetProjectAdded(ProjectExplorer::Project *addedProject);
-    void updateTreeWidgetProjectRemoved(ProjectExplorer::Project *removedProject);
-    void updateTreeWidgetAboutToRemoveProject(ProjectExplorer::Project *removedProject);
-
-    void handleItem(QTreeWidgetItem *item, int column);
-    void handleCurrentItemChanged(QTreeWidgetItem *);
-
 private:
+    void updateRunConfigurationsComboBox();
     SessionManager *m_session;
     ProjectExplorerPlugin *m_projectExplorer;
 
-    ProjectView* m_treeWidget;
+    ActiveConfigurationWidget *m_activeConfigurationWidget;
+    QWidget *m_spacerBetween;
+    QWidget *m_projectChooser;
     PanelsWidget *m_panelsWidget;
 
     Project *findProject(const QString &path) const;
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index e6923faa5087648f3acc3947fdf21f1912b3c364..ef4390de5e8abf7b2e4de5b60813d0beae4a9329 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -173,7 +173,6 @@ void RunConfigurationsModel::setRunConfigurations(const QList<QSharedPointer<Run
 RunSettingsWidget::RunSettingsWidget(Project *project)
     : m_project(project),
       m_runConfigurationsModel(new RunConfigurationsModel(this)),
-      m_enabledRunConfigurationsModel(new RunConfigurationsModel(this)),
       m_runConfigurationWidget(0)
 {
     m_ui = new Ui::RunSettingsPropertiesPage;
@@ -185,25 +184,17 @@ RunSettingsWidget::RunSettingsWidget(Project *project)
     m_ui->removeToolButton->setIcon(QIcon(Core::Constants::ICON_MINUS));
     m_ui->removeToolButton->setText(tr("Remove"));
     m_ui->runConfigurationCombo->setModel(m_runConfigurationsModel);
-    m_ui->activeRunConfigurationCombo->setModel(m_enabledRunConfigurationsModel);
 
     connect(m_addMenu, SIGNAL(aboutToShow()),
             this, SLOT(aboutToShowAddMenu()));
     connect(m_ui->runConfigurationCombo, SIGNAL(currentIndexChanged(int)),
             this, SLOT(showRunConfigurationWidget(int)));
-    connect(m_ui->activeRunConfigurationCombo, SIGNAL(activated(int)),
-            this, SLOT(activateRunConfiguration(int)));
     connect(m_ui->removeToolButton, SIGNAL(clicked(bool)),
             this, SLOT(removeRunConfiguration()));
 
-    connect(m_project, SIGNAL(removedRunConfiguration(QString)),
+    connect(m_project, SIGNAL(removedRunConfiguration(ProjectExplorer::Project *, QString)),
             this, SLOT(initRunConfigurationComboBox()));
-    connect(m_project, SIGNAL(addedRunConfiguration(QString)),
-            this, SLOT(initRunConfigurationComboBox()));
-
-    connect(m_project, SIGNAL(activeRunConfigurationChanged()),
-            this, SLOT(activeRunConfigurationChanged()));
-    connect(m_project, SIGNAL(runConfigurationsEnabledStateChanged()),
+    connect(m_project, SIGNAL(addedRunConfiguration(ProjectExplorer::Project *, QString)),
             this, SLOT(initRunConfigurationComboBox()));
 
     initRunConfigurationComboBox();
@@ -292,9 +283,6 @@ void RunSettingsWidget::initRunConfigurationComboBox()
         if (runConfigurations.at(i)->isEnabled())
             enabledRunConfigurations.append(runConfigurations.at(i));
     }
-    m_enabledRunConfigurationsModel->setRunConfigurations(enabledRunConfigurations);
-    m_ui->activeRunConfigurationCombo->setCurrentIndex(
-            enabledRunConfigurations.indexOf(activeRunConfiguration));
     m_ui->removeToolButton->setEnabled(runConfigurations.size() > 1);
 }
 
@@ -307,20 +295,7 @@ void RunSettingsWidget::showRunConfigurationWidget(int index)
     // Update the run configuration configuration widget
     delete m_runConfigurationWidget;
     m_runConfigurationWidget = selectedRunConfiguration->configurationWidget();
-    m_ui->groupBox->layout()->addWidget(m_runConfigurationWidget);
-}
-
-void RunSettingsWidget::activateRunConfiguration(int index)
-{
-    m_project->setActiveRunConfiguration(m_enabledRunConfigurationsModel->runConfigurations().at(index));
-}
-
-void RunSettingsWidget::activeRunConfigurationChanged()
-{
-    QSharedPointer<RunConfiguration> active = m_project->activeRunConfiguration();
-    int index = m_enabledRunConfigurationsModel->runConfigurations().indexOf(active);
-    if (index >= 0)
-        m_ui->activeRunConfigurationCombo->setCurrentIndex(index);
+    layout()->addWidget(m_runConfigurationWidget);
 }
 
 void RunSettingsWidget::nameChanged()
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h
index 58e2a94e6dd97632147a57ed95f5fe2b0648433c..5990779914a57155028ce47f2b6db88daa4de40e 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.h
@@ -78,12 +78,9 @@ private slots:
     void removeRunConfiguration();
     void nameChanged();
     void initRunConfigurationComboBox();
-    void activateRunConfiguration(int index);
-    void activeRunConfigurationChanged();
 private:
     Project *m_project;
     RunConfigurationsModel *m_runConfigurationsModel;
-    RunConfigurationsModel *m_enabledRunConfigurationsModel;
     Ui::RunSettingsPropertiesPage *m_ui;
     QWidget *m_runConfigurationWidget;
     QMenu *m_addMenu;
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.ui b/src/plugins/projectexplorer/runsettingspropertiespage.ui
index f72388829ecbd9dd27d4c3ace9ec50af7efd16fa..e95e8e4b76567fbc0e63a1caba81a8d784500d2e 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.ui
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.ui
@@ -6,98 +6,58 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>621</width>
-    <height>300</height>
+    <width>416</width>
+    <height>35</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_3">
+    <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
-      <layout class="QFormLayout" name="formLayout">
-       <property name="fieldGrowthPolicy">
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
+      <widget class="QLabel" name="label">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
        </property>
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_2">
-         <property name="text">
-          <string>Active run configuration:</string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="activeRunConfigurationCombo">
-         <property name="maximumSize">
-          <size>
-           <width>500</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="sizeAdjustPolicy">
-          <enum>QComboBox::AdjustToContents</enum>
-         </property>
-         <property name="minimumContentsLength">
-          <number>15</number>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="label">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Edit run configuration:</string>
-         </property>
-         <property name="buddy">
-          <cstring>runConfigurationCombo</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <widget class="QComboBox" name="runConfigurationCombo">
-           <property name="maximumSize">
-            <size>
-             <width>500</width>
-             <height>16777215</height>
-            </size>
-           </property>
-           <property name="sizeAdjustPolicy">
-            <enum>QComboBox::AdjustToContents</enum>
-           </property>
-           <property name="minimumContentsLength">
-            <number>15</number>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="addToolButton">
-           <property name="text">
-            <string>+</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="removeToolButton">
-           <property name="text">
-            <string>-</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-      </layout>
+       <property name="text">
+        <string>Edit run configuration:</string>
+       </property>
+       <property name="buddy">
+        <cstring>runConfigurationCombo</cstring>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="runConfigurationCombo">
+       <property name="maximumSize">
+        <size>
+         <width>500</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="sizeAdjustPolicy">
+        <enum>QComboBox::AdjustToContents</enum>
+       </property>
+       <property name="minimumContentsLength">
+        <number>15</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="addToolButton">
+       <property name="text">
+        <string>+</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="removeToolButton">
+       <property name="text">
+        <string>-</string>
+       </property>
+      </widget>
      </item>
      <item>
       <spacer name="horizontalSpacer">
@@ -106,7 +66,7 @@
        </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>40</width>
+         <width>39</width>
          <height>20</height>
         </size>
        </property>
@@ -114,14 +74,6 @@
      </item>
     </layout>
    </item>
-   <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_2"/>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 0d9c79159a99bdd880ecc87942bdcb0782475da4..f9615936b2560acde6eaf82631af324d3fe40f85 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -36,6 +36,7 @@
 #include "qt4projectmanager.h"
 #include "ui_qt4projectconfigwidget.h"
 
+#include <utils/detailsbutton.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/mainwindow.h>
 #include <projectexplorer/projectexplorerconstants.h>
@@ -79,15 +80,7 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project)
     m_ui->detailsWidget->setVisible(false);
     m_ui->titleLabel->setText("");
 
-    QAbstractButton *detailsButton;
-#ifdef Q_OS_MAC
-    detailsButton = new QPushButton;
-    detailsButton->setAttribute(Qt::WA_MacSmallSize);
-    detailsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-#else
-    detailsButton = new QToolButton;
-#endif
-    detailsButton->setText(tr("Details"));
+    QAbstractButton *detailsButton = new Utils::DetailsButton(this);
     QHBoxLayout *layout = new QHBoxLayout;
     layout->setMargin(0);
     layout->setSpacing(0);
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 22a7efbd13ff30a2040933a60f0fd0b0c8487a84..a4e7d7203778e960c9a0995810a515c46f59df8c 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -212,6 +212,7 @@ void Qt4ProjectManagerPlugin::updateContextMenu(Project *project,
     m_runQMakeActionContextMenu->setEnabled(false);
 
     if (qobject_cast<Qt4Project *>(project)) {
+        m_runQMakeActionContextMenu->setVisible(true);
         if (!m_projectExplorer->buildManager()->isBuilding(project))
             m_runQMakeActionContextMenu->setEnabled(true);
     }
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index ba550ffb09e72fb4ce2873c101c740a8e84bed94..33f832f70ce72a23b6f3e839590e1a96a3248cdf 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -41,13 +41,13 @@
 #include <projectexplorer/buildstep.h>
 #include <projectexplorer/environmenteditmodel.h>
 #include <utils/qtcassert.h>
+#include <utils/detailsbutton.h>
 
 #include <QtGui/QFormLayout>
 #include <QtGui/QInputDialog>
 #include <QtGui/QLabel>
 #include <QtGui/QCheckBox>
 #include <QtGui/QToolButton>
-#include <QtGui/QGroupBox>
 #include <QtGui/QComboBox>
 
 using namespace Qt4ProjectManager::Internal;
@@ -163,9 +163,25 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
             this, SLOT(usingDyldImageSuffixToggled(bool)));
 #endif
 
-    QVBoxLayout *vbox = new QVBoxLayout(this);
-    vbox->setContentsMargins(0, -1, 0, -1);
-    vbox->addLayout(toplayout);
+    m_detailsWidget = new QWidget(this);
+    m_detailsWidget->setVisible(false);
+    QVBoxLayout *vboxTopLayout = new QVBoxLayout(this);
+    vboxTopLayout->setContentsMargins(0, -1, 0, -1);
+    m_summaryLabel = new QLabel(this);
+    m_summaryLabel->setText("This is a summary");
+    m_detailsButton = new Utils::DetailsButton(this);
+
+    connect(m_detailsButton, SIGNAL(clicked()),
+            this, SLOT(toggleDetails()));
+
+    QHBoxLayout *detailsLayout = new QHBoxLayout();
+    detailsLayout->addWidget(m_summaryLabel);
+    detailsLayout->addWidget(m_detailsButton);
+
+    vboxTopLayout->addLayout(detailsLayout);
+
+    vboxTopLayout->addWidget(m_detailsWidget);
+    m_detailsWidget->setLayout(toplayout);
 
     QLabel *environmentLabel = new QLabel(this);
     environmentLabel->setText(tr("Run Environment"));
@@ -173,7 +189,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
     f.setBold(true);
     f.setPointSizeF(f.pointSizeF() *1.2);
     environmentLabel->setFont(f);
-    vbox->addWidget(environmentLabel);
+    vboxTopLayout->addWidget(environmentLabel);
 
     QWidget *baseEnvironmentWidget = new QWidget;
     QHBoxLayout *baseEnvironmentLayout = new QHBoxLayout(baseEnvironmentWidget);
@@ -195,7 +211,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
     m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment());
     m_environmentWidget->setUserChanges(m_qt4RunConfiguration->userEnvironmentChanges());
     m_environmentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    vbox->addWidget(m_environmentWidget);
+    vboxTopLayout->addWidget(m_environmentWidget);
 
     connect(m_workingDirectoryEdit, SIGNAL(changed(QString)),
             this, SLOT(setWorkingDirectory()));
@@ -234,6 +250,22 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
             this, SLOT(baseEnvironmentChanged()));
 }
 
+void Qt4RunConfigurationWidget::toggleDetails()
+{
+    m_detailsWidget->setVisible(!m_detailsWidget->isVisible());
+}
+
+void Qt4RunConfigurationWidget::updateSummary()
+{
+    const QString &filename = QFileInfo(m_qt4RunConfiguration->executable()).fileName();
+    const QString &arguments = ProjectExplorer::Environment::joinArgumentList(m_qt4RunConfiguration->commandLineArguments());
+    QString text = tr("Running executable: <b>%1</b> %2 %3").arg(
+            filename,
+            arguments,
+            m_qt4RunConfiguration->runMode() == ApplicationRunConfiguration::Console ? tr("(in terminal)") : "");
+    m_summaryLabel->setText(text);
+}
+
 void Qt4RunConfigurationWidget::baseEnvironmentComboBoxChanged(int index)
 {
     m_ignoreChange = true;
@@ -319,8 +351,10 @@ void Qt4RunConfigurationWidget::workingDirectoryChanged(const QString &workingDi
 
 void Qt4RunConfigurationWidget::commandLineArgumentsChanged(const QString &args)
 {
-    if (!m_ignoreChange)
-        m_argumentsLineEdit->setText(args);
+    updateSummary();
+    if (m_ignoreChange)
+        return;
+    m_argumentsLineEdit->setText(args);
 }
 
 void Qt4RunConfigurationWidget::nameChanged(const QString &name)
@@ -331,6 +365,7 @@ void Qt4RunConfigurationWidget::nameChanged(const QString &name)
 
 void Qt4RunConfigurationWidget::runModeChanged(ApplicationRunConfiguration::RunMode runMode)
 {
+    updateSummary();
     if (!m_ignoreChange)
         m_useTerminalCheck->setChecked(runMode == ApplicationRunConfiguration::Console);
 }
@@ -343,6 +378,7 @@ void Qt4RunConfigurationWidget::usingDyldImageSuffixChanged(bool state)
 
 void Qt4RunConfigurationWidget::effectiveTargetInformationChanged()
 {
+    updateSummary();
     if (m_isShown) {
         m_executableLabel->setText(QDir::toNativeSeparators(m_qt4RunConfiguration->executable()));
         m_ignoreChange = true;
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index 252c7df8a432a2c33bc5d9621e8b92a5c119c3d4..343e240196c7978d462a514b745c98c521f21ca0 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -36,6 +36,7 @@
 #include <projectexplorer/environmenteditmodel.h>
 #include <QtCore/QStringList>
 #include <QtGui/QWidget>
+#include <QtGui/QToolButton>
 
 QT_BEGIN_NAMESPACE
 class QWidget;
@@ -167,7 +168,10 @@ private slots:
     void usingDyldImageSuffixToggled(bool);
     void usingDyldImageSuffixChanged(bool);
     void baseEnvironmentComboBoxChanged(int index);
+
+    void toggleDetails();
 private:
+    void updateSummary();
     Qt4RunConfiguration *m_qt4RunConfiguration;
     bool m_ignoreChange;
     QLabel *m_executableLabel;
@@ -178,6 +182,9 @@ private:
     QCheckBox *m_usingDyldImageSuffix;
 
     QComboBox *m_baseEnvironmentComboBox;
+    QWidget *m_detailsWidget;
+    QToolButton *m_detailsButton;
+    QLabel *m_summaryLabel;
 
     ProjectExplorer::EnvironmentWidget *m_environmentWidget;
     bool m_isShown;