diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index deaac215133bd639d8da7fa9c3b6193b8daef855..273366a195b1eda0a943bdf0f8fea0b2762fb0b2 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -65,23 +65,11 @@ QString BuildSettingsPanelFactory::displayName() const
     return QCoreApplication::translate("BuildSettingsPanelFactory", "Build Settings");
 }
 
-bool BuildSettingsPanelFactory::supports(Project *project)
-{
-    return project->targets().count() == 1;
-}
-
 bool BuildSettingsPanelFactory::supports(Target *target)
 {
     return target->buildConfigurationFactory();
 }
 
-
-IPropertiesPanel *BuildSettingsPanelFactory::createPanel(Project *project)
-{
-    Q_ASSERT(supports(project));
-    return new BuildSettingsPanel(project->activeTarget());
-}
-
 IPropertiesPanel *BuildSettingsPanelFactory::createPanel(Target *target)
 {
     return new BuildSettingsPanel(target);
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index 05ceb158763c154bf53eeedd274625bdd24f3f3b..5a38dba6279143fe147a715b7137bfbd7e51ce63 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -51,14 +51,13 @@ namespace Internal {
 
 const char * const BUILDSETTINGS_PANEL_ID("ProjectExplorer.BuildSettingsPanel");
 
-class BuildSettingsPanelFactory : public IPanelFactory
+class BuildSettingsPanelFactory : public ITargetPanelFactory
 {
 public:
     QString id() const;
     QString displayName() const;
-    bool supports(Project *project);
+
     bool supports(Target *target);
-    IPropertiesPanel *createPanel(Project *project);
     IPropertiesPanel *createPanel(Target *target);
 };
 
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
index ea1846d65973d48c6c111e2aab2b429a5d2427e5..d5177af9a72b31bf2d54ed1554a453846a3f7313 100644
--- a/src/plugins/projectexplorer/dependenciespanel.cpp
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -308,22 +308,10 @@ bool DependenciesPanelFactory::supports(Project *project)
     return true;
 }
 
-bool DependenciesPanelFactory::supports(Target *target)
-{
-    Q_UNUSED(target);
-    return false;
-}
-
 IPropertiesPanel *DependenciesPanelFactory::createPanel(Project *project)
 {
     return new DependenciesPanel(m_session, project);
 }
 
-IPropertiesPanel *DependenciesPanelFactory::createPanel(Target *target)
-{
-    Q_UNUSED(target);
-    return 0;
-}
-
 } // namespace Internal
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/dependenciespanel.h b/src/plugins/projectexplorer/dependenciespanel.h
index 549251164ea0684ec4b764553a6c25849de18512..8d6833a3b31ece21cfcd54f0506247e38c27fce8 100644
--- a/src/plugins/projectexplorer/dependenciespanel.h
+++ b/src/plugins/projectexplorer/dependenciespanel.h
@@ -51,7 +51,7 @@ const char * const DEPENDENCIES_PANEL_ID("ProjectExplorer.DependenciesPanel");
 
 class DependenciesWidget;
 
-class DependenciesPanelFactory : public IPanelFactory
+class DependenciesPanelFactory : public IProjectPanelFactory
 {
 public:
     DependenciesPanelFactory(SessionManager *session);
@@ -59,10 +59,7 @@ public:
     QString id() const;
     QString displayName() const;
     bool supports(Project *project);
-    bool supports(Target *target);
     IPropertiesPanel *createPanel(Project *project);
-    IPropertiesPanel *createPanel(Target *target);
-
 private:
     SessionManager *m_session;
 };
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
index 129cc20dfdb4aafc66a6c38ac60b3d6e7449acb8..aa341aeb92073d702dbd684787bbaee7a7b23c4e 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
@@ -54,23 +54,11 @@ bool EditorSettingsPanelFactory::supports(Project *project)
     return true;
 }
 
-bool EditorSettingsPanelFactory::supports(Target *target)
-{
-    Q_UNUSED(target);
-    return false;
-}
-
 IPropertiesPanel *EditorSettingsPanelFactory::createPanel(Project *project)
 {
     return new EditorSettingsPanel(project);
 }
 
-IPropertiesPanel *EditorSettingsPanelFactory::createPanel(Target *target)
-{
-    Q_UNUSED(target);
-    return 0;
-}
-
 EditorSettingsPanel::EditorSettingsPanel(Project *project) :
     m_widget(new EditorSettingsWidget(project)),
     m_icon(":/projectexplorer/images/EditorSettings.png")
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h
index de49357a8696083bb25e38fb7502b1977cd15dae..e47c2ec78d80742b30047ba184f9e3689e2e0fc2 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h
@@ -39,15 +39,13 @@ namespace Internal {
 
 const char * const EDITORSETTINGS_PANEL_ID("ProjectExplorer.EditorSettingsPanel");
 
-class EditorSettingsPanelFactory : public IPanelFactory
+class EditorSettingsPanelFactory : public IProjectPanelFactory
 {
 public:
     QString id() const;
     QString displayName() const;
-    bool supports(Project *project);
-    bool supports(Target *target);
     IPropertiesPanel *createPanel(Project *project);
-    IPropertiesPanel *createPanel(Target *target);
+    bool supports(Project *project);
 };
 
 class EditorSettingsWidget;
diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h
index 9ca68c4c395761001b9f356973e707802f6cb59f..63b7df301f7609167739ec1cc55b1e0443d7bd9d 100644
--- a/src/plugins/projectexplorer/iprojectproperties.h
+++ b/src/plugins/projectexplorer/iprojectproperties.h
@@ -47,8 +47,7 @@ class PROJECTEXPLORER_EXPORT IPropertiesPanel
 public:
     enum PanelFlag {
         NoFlag = 0x00,
-        NoLeftMargin = 0x01,
-        NoAutomaticStyle = 0x02
+        NoLeftMargin = 0x01
     };
     Q_DECLARE_FLAGS(PanelFlags, PanelFlag)
 
@@ -69,9 +68,21 @@ class PROJECTEXPLORER_EXPORT IPanelFactory : public QObject
 public:
     virtual QString id() const = 0;
     virtual QString displayName() const = 0;
+};
+
+class PROJECTEXPLORER_EXPORT IProjectPanelFactory : public IPanelFactory
+{
+    Q_OBJECT
+public:
     virtual bool supports(Project *project) = 0;
-    virtual bool supports(Target *target) = 0;
     virtual IPropertiesPanel *createPanel(Project *project) = 0;
+};
+
+class PROJECTEXPLORER_EXPORT ITargetPanelFactory : public IPanelFactory
+{
+    Q_OBJECT
+public:
+    virtual bool supports(Target *target) = 0;
     virtual IPropertiesPanel *createPanel(Target *target) = 0;
 };
 
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 40be6f84bc30fef808db7f482384d0765fdcd018..ea5d2727f4d46b1de5d74353baca1edcef9419ca 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -304,7 +304,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
 
     addAutoReleasedObject(new BuildSettingsPanelFactory);
     addAutoReleasedObject(new RunSettingsPanelFactory);
-    addAutoReleasedObject(new TargetSettingsPanelFactory);
     addAutoReleasedObject(new EditorSettingsPanelFactory);
     addAutoReleasedObject(new DependenciesPanelFactory(d->m_session));
 
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index c2cb2c28bcb2bab371c100a71aa3f6605a12fa72..b1cd90e9d3abaa755eb90c17d5b3256b04b9231f 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -72,28 +72,7 @@ const int ABOVE_HEADING_MARGIN(10);
 const int ABOVE_CONTENTS_MARGIN(4);
 const int BELOW_CONTENTS_MARGIN(16);
 
-bool skipPanelFactory(Project *project, IPanelFactory *factory)
-{
-    bool simplifyTargets(project->supportedTargetIds().count() <= 1);
-    if (simplifyTargets) {
-        // Do not show the targets list:
-        if (factory->id() == QLatin1String(TARGETSETTINGS_PANEL_ID))
-            return true;
-        // Skip build settigns if none are available anyway:
-        if (project->activeTarget() &&
-            !project->activeTarget()->buildConfigurationFactory() &&
-            factory->id() == QLatin1String(BUILDSETTINGS_PANEL_ID))
-            return true;
-    } else {
-        // Skip panels embedded into the targets panel:
-        if (factory->id() == QLatin1String(BUILDSETTINGS_PANEL_ID) ||
-            factory->id() == QLatin1String(RUNSETTINGS_PANEL_ID))
-            return true;
-    }
-    return false;
-}
-
-} // namespace
+} // anonymous namespace
 
 ///
 // OnePixelBlackLine
@@ -251,8 +230,7 @@ void PanelsWidget::addPanelWidget(IPropertiesPanel *panel, int row)
 
 ProjectWindow::ProjectWindow(QWidget *parent)
     : QWidget(parent),
-    m_currentWidget(0),
-    m_currentPanel(0)
+    m_currentWidget(0)
 {
     ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session();
 
@@ -314,10 +292,26 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project)
     }
 
     QStringList subtabs;
-    foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) {
-        if (skipPanelFactory(project, panelFactory))
-            continue;
-        subtabs << panelFactory->displayName();
+    if (project->supportedTargetIds().count() <= 1) {
+        // Show the target specific pages directly
+        QList<ITargetPanelFactory *> factories =
+                ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>();
+
+        foreach (ITargetPanelFactory *factory, factories) {
+            if (factory->supports(project->activeTarget()))
+                subtabs << factory->displayName();
+        }
+    } else {
+        // Use the Targets page
+        subtabs << QCoreApplication::translate("TargetSettingsPanelFactory", "Targets");
+    }
+
+    // Add the project specific pages
+
+    QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>();
+    foreach (IProjectPanelFactory *panelFactory, factories) {
+        if (panelFactory->supports(project))
+            subtabs << panelFactory->displayName();
     }
 
     m_tabIndexToProject.insert(index, project);
@@ -378,26 +372,59 @@ void ProjectWindow::showProperties(int index, int subIndex)
 
     // Set up custom panels again:
     int pos = 0;
-    foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) {
-        if (skipPanelFactory(project, panelFactory))
-            continue;
-        if (pos == subIndex) {
+    IPanelFactory *fac = 0;
+    if (project->supportedTargetIds().count() > 1) {
+        if (subIndex == 0) {
+            // Targets page
             removeCurrentWidget();
-            IPropertiesPanel *panel(panelFactory->createPanel(project));
-            if (panel->flags() & IPropertiesPanel::NoAutomaticStyle) {
-                m_currentWidget = panel->widget();
-                m_currentPanel = panel;
-            } else {
-                PanelsWidget *panelsWidget = new PanelsWidget(m_centralWidget);
-                panelsWidget->addPropertiesPanel(panel);
-                m_currentWidget = panelsWidget;
-            }
+            m_currentWidget = new TargetSettingsPanelWidget(project);
             m_centralWidget->addWidget(m_currentWidget);
             m_centralWidget->setCurrentWidget(m_currentWidget);
-            break;
         }
         ++pos;
+    } else {
+        // No Targets page, target specific pages are first in the list
+        foreach (ITargetPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>()) {
+            if (panelFactory->supports(project->activeTarget())) {
+                if (subIndex == pos) {
+                    fac = panelFactory;
+                    break;
+                }
+                ++pos;
+            }
+        }
+    }
+
+    if (!fac) {
+        foreach (IProjectPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>()) {
+            if (panelFactory->supports(project)) {
+                if (subIndex == pos) {
+                    fac = panelFactory;
+                    break;
+                }
+                ++pos;
+            }
+        }
     }
+
+    if (fac) {
+        removeCurrentWidget();
+
+        IPropertiesPanel *panel;
+        if (ITargetPanelFactory *ipf = qobject_cast<ITargetPanelFactory *>(fac))
+            panel = ipf->createPanel(project->activeTarget());
+        else if (IProjectPanelFactory *ipf = qobject_cast<IProjectPanelFactory *>(fac))
+            panel = ipf->createPanel(project);
+        Q_ASSERT(panel);
+
+        PanelsWidget *panelsWidget = new PanelsWidget(m_centralWidget);
+        panelsWidget->addPropertiesPanel(panel);
+        m_currentWidget = panelsWidget;
+        m_centralWidget->addWidget(m_currentWidget);
+        m_centralWidget->setCurrentWidget(m_currentWidget);
+
+    }
+
     ProjectExplorerPlugin::instance()->session()->setStartupProject(project);
 }
 
@@ -405,11 +432,7 @@ void ProjectWindow::removeCurrentWidget()
 {
     if (m_currentWidget) {
         m_centralWidget->removeWidget(m_currentWidget);
-        if (m_currentPanel) {
-            delete m_currentPanel;
-            m_currentPanel = 0;
-            m_currentWidget = 0; // is deleted by the panel
-        } else if (m_currentWidget) {
+        if (m_currentWidget) {
             delete m_currentWidget;
             m_currentWidget = 0;
         }
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index cb3a81892af83b901d1feae30666753ab3fd3244..571aeccbe74f6332027155bcf57a4709b215c054 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -102,7 +102,6 @@ private:
     DoubleTabWidget *m_tabWidget;
     QStackedWidget *m_centralWidget;
     QWidget *m_currentWidget;
-    IPropertiesPanel *m_currentPanel;
     QList<ProjectExplorer::Project *> m_tabIndexToProject;
 };
 
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 73840769727b716482b74ac20ae3b9c3e68bdb43..a53e2eea60aee8a26e7c6377f481f733cb9b4c2e 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -74,23 +74,12 @@ QString RunSettingsPanelFactory::displayName() const
     return QCoreApplication::translate("RunSettingsPanelFactory", "Run Settings");
 }
 
-bool RunSettingsPanelFactory::supports(Project *project)
-{
-    return project->targets().count() == 1;
-}
-
 bool RunSettingsPanelFactory::supports(Target *target)
 {
     Q_UNUSED(target);
     return true;
 }
 
-IPropertiesPanel *RunSettingsPanelFactory::createPanel(Project *project)
-{
-    Q_ASSERT(supports(project));
-    return new RunSettingsPanel(project->activeTarget());
-}
-
 IPropertiesPanel *RunSettingsPanelFactory::createPanel(Target *target)
 {
     return new RunSettingsPanel(target);
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h
index 033d61e8a98bd8c23e77f97dfaa74a1567c1e07b..9393437a5a56ef1bee08687a3ca425d9d3552bdc 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.h
@@ -55,14 +55,12 @@ class RunSettingsPropertiesPage;
 class RunConfigurationsModel;
 class RunSettingsWidget;
 
-class RunSettingsPanelFactory : public IPanelFactory
+class RunSettingsPanelFactory : public ITargetPanelFactory
 {
 public:
     QString id() const;
     QString displayName() const;
-    bool supports(Project *project);
     bool supports(Target *target);
-    IPropertiesPanel *createPanel(Project *project);
     IPropertiesPanel *createPanel(Target *target);
 };
 
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index 7d289574d2d009e4c39d86c2a23390b91b563b0a..e9889968467263d6fce9c1b3362b222dbfa85a4e 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -47,71 +47,6 @@
 using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 
-///
-// TargetSettingsPanelFactory
-///
-
-QString TargetSettingsPanelFactory::id() const
-{
-    return QLatin1String(TARGETSETTINGS_PANEL_ID);
-}
-
-QString TargetSettingsPanelFactory::displayName() const
-{
-    return QCoreApplication::translate("TargetSettingsPanelFactory", "Targets");
-}
-
-bool TargetSettingsPanelFactory::supports(Project *project)
-{
-    Q_UNUSED(project);
-    return true;
-}
-
-bool TargetSettingsPanelFactory::supports(Target *target)
-{
-    Q_UNUSED(target);
-    return false;
-}
-
-IPropertiesPanel *TargetSettingsPanelFactory::createPanel(Project *project)
-{
-    return new TargetSettingsPanel(project);
-}
-
-IPropertiesPanel *TargetSettingsPanelFactory::createPanel(Target *target)
-{
-    Q_UNUSED(target);
-    return 0;
-}
-
-///
-// TargetSettingsPanel
-///
-
-TargetSettingsPanel::TargetSettingsPanel(Project *project) :
-    m_widget(new TargetSettingsPanelWidget(project))
-{
-}
-
-TargetSettingsPanel::~TargetSettingsPanel()
-{
-    delete m_widget;
-}
-
-QString TargetSettingsPanel::displayName() const
-{
-    return QCoreApplication::translate("TargetSettingsPanel", "Targets");
-}
-
-QWidget *TargetSettingsPanel::widget() const
-{
-    return m_widget;
-}
-
-QIcon TargetSettingsPanel::icon() const
-{
-    return QIcon();
-}
 
 ///
 // TargetSettingsWidget
@@ -223,7 +158,7 @@ void TargetSettingsPanelWidget::currentTargetChanged(int targetIndex, int subInd
     PanelsWidget *buildPanel(new PanelsWidget(m_centralWidget));
     PanelsWidget *runPanel(new PanelsWidget(m_centralWidget));
 
-    foreach (IPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IPanelFactory>()) {
+    foreach (ITargetPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>()) {
         if (panelFactory->id() == QLatin1String(BUILDSETTINGS_PANEL_ID)) {
             IPropertiesPanel *panel = panelFactory->createPanel(target);
             buildPanel->addPropertiesPanel(panel);
diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h
index 704854344e265017b07fcea557df73d24ef96868..4b26c768fb93c954f470c4a15a5550608f5a92c4 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.h
+++ b/src/plugins/projectexplorer/targetsettingspanel.h
@@ -41,38 +41,9 @@ class Target;
 
 namespace Internal {
 
-const char * const TARGETSETTINGS_PANEL_ID("ProjectExplorer.TargetSettingsPanel");
-
 class TargetSettingsWidget;
 class PanelsWidget;
 
-class TargetSettingsPanelFactory : public IPanelFactory
-{
-public:
-    QString id() const;
-    QString displayName() const;
-    bool supports(Project *project);
-    bool supports(Target *target);
-    IPropertiesPanel *createPanel(Project *project);
-    IPropertiesPanel *createPanel(Target *target);
-};
-
-class TargetSettingsPanelWidget;
-
-class TargetSettingsPanel : public IPropertiesPanel
-{
-public:
-    TargetSettingsPanel(Project *project);
-    ~TargetSettingsPanel();
-    QString displayName() const;
-    QWidget *widget() const;
-    QIcon icon() const;
-    PanelFlags flags() const { return IPropertiesPanel::NoAutomaticStyle; }
-
-private:
-    TargetSettingsPanelWidget *m_widget;
-};
-
 class TargetSettingsPanelWidget : public QWidget
 {
     Q_OBJECT