diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 34501726e58bd7ba3e99c18d0f941e7409537c3b..c80ce35abd3a74e1705ebef8a6d8471c01f94192 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1484,9 +1484,10 @@ void DebuggerPluginPrivate::onCurrentProjectChanged(Project *project)
     RunConfiguration *activeRc = 0;
     if (project) {
         Target *target = project->activeTarget();
-        QTC_ASSERT(target, return);
-        activeRc = target->activeRunConfiguration();
-        QTC_CHECK(activeRc);
+        if (target)
+            activeRc = target->activeRunConfiguration();
+        if (!activeRc)
+            return;
     }
     for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
         // Run controls might be deleted during exit.
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index a614271f1047e962728634aa4828d039571ad7d5..d4662199398dd1cc183e9d7017f186921542a68c 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -314,7 +314,7 @@ bool BuildManager::tasksAvailable() const
     return count > 0;
 }
 
-void BuildManager::startBuildQueue()
+void BuildManager::startBuildQueue(const QStringList &preambleMessage)
 {
     if (d->m_buildQueue.isEmpty()) {
         emit buildQueueFinished(true);
@@ -326,6 +326,8 @@ void BuildManager::startBuildQueue()
         d->m_progressFutureInterface = new QFutureInterface<void>;
         d->m_progressWatcher.setFuture(d->m_progressFutureInterface->future());
         d->m_outputWindow->clearContents();
+        foreach (const QString &str, preambleMessage)
+            addToOutputWindow(str, BuildStep::MessageOutput, BuildStep::DontAppendNewline);
         d->m_taskHub->clearTasks(Core::Id(Constants::TASK_CATEGORY_COMPILE));
         d->m_taskHub->clearTasks(Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM));
         progressManager->setApplicationLabel(QString());
@@ -537,7 +539,7 @@ bool BuildManager::buildList(BuildStepList *bsl, const QString &stepListName)
     return buildLists(QList<BuildStepList *>() << bsl, QStringList() << stepListName);
 }
 
-bool BuildManager::buildLists(QList<BuildStepList *> bsls, const QStringList &stepListNames)
+bool BuildManager::buildLists(QList<BuildStepList *> bsls, const QStringList &stepListNames, const QStringList &preambelMessage)
 {
     QList<BuildStep *> steps;
     foreach(BuildStepList *list, bsls)
@@ -559,7 +561,7 @@ bool BuildManager::buildLists(QList<BuildStepList *> bsls, const QStringList &st
 
     if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput)
         d->m_outputWindow->popup(false);
-    startBuildQueue();
+    startBuildQueue(preambelMessage);
     return true;
 }
 
diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h
index f4c98450d55e7ac98802e1bb2567e44bf2afd611..572609ef13e56946b3b50a31f348f2579194b0b5 100644
--- a/src/plugins/projectexplorer/buildmanager.h
+++ b/src/plugins/projectexplorer/buildmanager.h
@@ -60,7 +60,8 @@ public:
 
     bool tasksAvailable() const;
 
-    bool buildLists(QList<BuildStepList *> bsls, const QStringList &stepListNames);
+    bool buildLists(QList<BuildStepList *> bsls, const QStringList &stepListNames,
+                    const QStringList &preambelMessage = QStringList());
     bool buildList(BuildStepList *bsl, const QString &stepListName);
 
     bool isBuilding(Project *p);
@@ -103,7 +104,7 @@ private slots:
     void finish();
 
 private:
-    void startBuildQueue();
+    void startBuildQueue(const QStringList &preambleMessage = QStringList());
     void nextStep();
     void clearBuildQueue();
     bool buildQueueAppend(QList<BuildStep *> steps, QStringList names);
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index c9ad2820fda74045f75ec3e3718e7cf3c9935fb2..7b609fcfaab84d14cb08f53700562664e4429d23 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -73,6 +73,11 @@ QString BuildSettingsPanelFactory::displayName() const
     return QCoreApplication::translate("BuildSettingsPanelFactory", "Build Settings");
 }
 
+int BuildSettingsPanelFactory::priority() const
+{
+    return 10;
+}
+
 bool BuildSettingsPanelFactory::supports(Target *target)
 {
     return target->buildConfigurationFactory();
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h
index 7532b113a24fbeb25d642ac452adfb743bd4502b..5899bae2cf4f7982d46784f11e258d940c9d3c1b 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h
@@ -60,6 +60,7 @@ class BuildSettingsPanelFactory : public ITargetPanelFactory
 public:
     QString id() const;
     QString displayName() const;
+    int priority() const;
 
     bool supports(Target *target);
     PropertiesPanel *createPanel(Target *target);
diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
index 2162d1fe9ede6d34bed29b0d80ff4a3f12aee0ae..7d2d5f5e2cc99229e43f847f44b4dbecfa7cda75 100644
--- a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp
@@ -53,6 +53,11 @@ QString CodeStyleSettingsPanelFactory::displayName() const
     return QCoreApplication::translate("CodeStyleSettingsPanelFactory", "Code Style Settings");
 }
 
+int CodeStyleSettingsPanelFactory::priority() const
+{
+    return 40;
+}
+
 bool CodeStyleSettingsPanelFactory::supports(Project *project)
 {
     Q_UNUSED(project);
diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.h b/src/plugins/projectexplorer/codestylesettingspropertiespage.h
index a14e11c7192c6a64dd55183fdd699a955d00c19b..a032db042ef53d9d580516d68818d01db5100b61 100644
--- a/src/plugins/projectexplorer/codestylesettingspropertiespage.h
+++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.h
@@ -49,6 +49,7 @@ class CodeStyleSettingsPanelFactory : public IProjectPanelFactory
 public:
     QString id() const;
     QString displayName() const;
+    int priority() const;
     PropertiesPanel *createPanel(Project *project);
     bool supports(Project *project);
 };
diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp
index 40a251ed91f6a80decb15d8fcfc811d8043372cd..754b5a085811d17580b95ebd9bbf879c7c3cc5b2 100644
--- a/src/plugins/projectexplorer/dependenciespanel.cpp
+++ b/src/plugins/projectexplorer/dependenciespanel.cpp
@@ -275,6 +275,11 @@ QString DependenciesPanelFactory::displayName() const
     return QCoreApplication::translate("DependenciesPanelFactory", "Dependencies");
 }
 
+int DependenciesPanelFactory::priority() const
+{
+    return 50;
+}
+
 bool DependenciesPanelFactory::supports(Project *project)
 {
     Q_UNUSED(project);
diff --git a/src/plugins/projectexplorer/dependenciespanel.h b/src/plugins/projectexplorer/dependenciespanel.h
index a000e570e96967664d17dbf13eb3a18464c0c982..3cccd98d13eb11f722b1a6ba91211625c3b47160 100644
--- a/src/plugins/projectexplorer/dependenciespanel.h
+++ b/src/plugins/projectexplorer/dependenciespanel.h
@@ -61,6 +61,7 @@ public:
 
     QString id() const;
     QString displayName() const;
+    int priority() const;
     bool supports(Project *project);
     PropertiesPanel *createPanel(Project *project);
 private:
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
index e048cb2b01553a083c55283cc27ed38ee5ae3b94..ec5f9e2e2d74062bf8dbee277efa2dcafc6ca84b 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp
@@ -49,6 +49,11 @@ QString EditorSettingsPanelFactory::displayName() const
     return QCoreApplication::translate("EditorSettingsPanelFactory", "Editor Settings");
 }
 
+int EditorSettingsPanelFactory::priority() const
+{
+    return 30;
+}
+
 bool EditorSettingsPanelFactory::supports(Project *project)
 {
     Q_UNUSED(project);
diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.h b/src/plugins/projectexplorer/editorsettingspropertiespage.h
index cf3d626f52cbe62f9ed7ad97bc19942729ffa84b..fedd6f521e55f513f6cd9b35e180260ec36b6dfc 100644
--- a/src/plugins/projectexplorer/editorsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/editorsettingspropertiespage.h
@@ -49,6 +49,7 @@ class EditorSettingsPanelFactory : public IProjectPanelFactory
 public:
     QString id() const;
     QString displayName() const;
+    int priority() const;
     PropertiesPanel *createPanel(Project *project);
     bool supports(Project *project);
 };
diff --git a/src/plugins/projectexplorer/images/unconfigured.png b/src/plugins/projectexplorer/images/unconfigured.png
new file mode 100644
index 0000000000000000000000000000000000000000..7966af8d21ea70fe77daafd6b2360ec5a3e2bc98
Binary files /dev/null and b/src/plugins/projectexplorer/images/unconfigured.png differ
diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h
index 3be8d4bf10f8b513d612a71a88951db961c6998b..d78f630551735108fb1ba3c053e7a97726d41f40 100644
--- a/src/plugins/projectexplorer/iprojectproperties.h
+++ b/src/plugins/projectexplorer/iprojectproperties.h
@@ -75,6 +75,10 @@ class PROJECTEXPLORER_EXPORT IPanelFactory : public QObject
 public:
     virtual QString id() const = 0;
     virtual QString displayName() const = 0;
+    virtual int priority() const = 0;
+    static bool prioritySort(IPanelFactory *a, IPanelFactory *b)
+    { return (a->priority() == b->priority() && a->id() < b->id())
+                || a->priority() < b->priority(); }
 };
 
 class PROJECTEXPLORER_EXPORT IProjectPanelFactory : public IPanelFactory
@@ -83,6 +87,8 @@ class PROJECTEXPLORER_EXPORT IProjectPanelFactory : public IPanelFactory
 public:
     virtual bool supports(Project *project) = 0;
     virtual PropertiesPanel *createPanel(Project *project) = 0;
+signals:
+    void projectUpdated(ProjectExplorer::Project *project);
 };
 
 class PROJECTEXPLORER_EXPORT ITargetPanelFactory : public IPanelFactory
diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
index f4ce6dea351016ce1721a12c358fa27d337816b4..8608c5b780fcbc39d7c737f2d0effdf3e9d31cdf 100644
--- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp
+++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
@@ -40,6 +40,7 @@
 #include <coreplugin/ifile.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/modemanager.h>
 
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/session.h>
@@ -487,6 +488,8 @@ MiniProjectTargetSelector::MiniProjectTargetSelector(QAction *targetSelectorActi
     m_summaryLabel->setMargin(3);
     m_summaryLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop);
     m_summaryLabel->setStyleSheet(QString::fromLatin1("background: #464646;"));
+    m_summaryLabel->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+    m_summaryLabel->setTextInteractionFlags(m_summaryLabel->textInteractionFlags() | Qt::LinksAccessibleByMouse);
 
     grid->addWidget(m_summaryLabel, 0, 0, 1, 2 * LAST - 1);
 
@@ -519,6 +522,9 @@ MiniProjectTargetSelector::MiniProjectTargetSelector(QAction *targetSelectorActi
     if (m_sessionManager->startupProject())
         activeTargetChanged(m_sessionManager->startupProject()->activeTarget());
 
+    connect(m_summaryLabel, SIGNAL(linkActivated(QString)),
+            this, SLOT(switchToProjectsMode()));
+
     connect(m_sessionManager, SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
             this, SLOT(changeStartupProject(ProjectExplorer::Project*)));
 
@@ -994,6 +1000,7 @@ QSize MiniProjectTargetSelector::sizeHint() const
     static QWidget *actionBar = Core::ICore::mainWindow()->findChild<QWidget*>(QLatin1String("actionbar"));
     Q_ASSERT(actionBar);
 
+    // At least the size of the actionbar
     int alignedWithActionHeight
             = actionBar->height() - statusBar->height();
     QSize s = QWidget::sizeHint();
@@ -1057,23 +1064,55 @@ void MiniProjectTargetSelector::updateActionAndSummary()
         }
     }
     m_projectAction->setProperty("heading", projectName);
-    m_projectAction->setProperty("subtitle", buildConfig);
+    if (project && project->needsConfiguration()) {
+        m_projectAction->setProperty("subtitle", tr("Unconfigured"));
+    } else {
+        m_projectAction->setProperty("subtitle", buildConfig);
+    }
     m_projectAction->setIcon(targetIcon);
-    QString targetTip = targetName.isEmpty() ? QLatin1String("")
-        : tr("<b>Target:</b> %1<br/>").arg(targetName);
-    QString buildTip = buildConfig.isEmpty() ? QLatin1String("")
-        : tr("<b>Build:</b> %1<br/>").arg(buildConfig);
-    QString deployTip = deployConfig.isEmpty() ? QLatin1String("")
-        : tr("<b>Deploy:</b> %1<br/>").arg(deployConfig);
-    QString targetToolTip = targetToolTipText.isEmpty() ? QLatin1String("")
-        : tr("<br/>%1").arg(targetToolTipText);
-    QString toolTip = tr("<html><nobr><b>Project:</b> %1<br/>%2%3%4<b>Run:</b> %5%6</html>");
-    m_projectAction->setToolTip(toolTip.arg(projectName, targetTip, buildTip, deployTip, runConfig, targetToolTip));
+    QStringList lines;
+    lines << tr("<b>Project:</b> %1").arg(projectName);
+    if (!targetName.isEmpty())
+        lines << tr("<b>Target:</b> %1").arg(targetName);
+    if (!buildConfig.isEmpty())
+        lines << tr("<b>Build:</b> %1").arg(buildConfig);
+    if (!deployConfig.isEmpty())
+        lines << tr("<b>Deploy:</b> %1").arg(deployConfig);
+    if (!runConfig.isEmpty())
+        lines << tr("<b>Run:</b> %1").arg(runConfig);
+    if (!targetToolTipText.isEmpty())
+        lines << tr("%1").arg(targetToolTipText);
+    QString toolTip = tr("<html><nobr>%1</html>")
+            .arg(lines.join(QLatin1String("<br/>")));
+    m_projectAction->setToolTip(toolTip);
     updateSummary();
 }
 
 void MiniProjectTargetSelector::updateSummary()
 {
+    // Count the number of lines
+    int visibleLineCount = m_projectListWidget->isVisibleTo(this) ? 0 : 1;
+    for (int i = TARGET; i < LAST; ++i)
+        visibleLineCount += m_listWidgets[i]->isVisibleTo(this) ? 0 : 1;
+
+    if (visibleLineCount == LAST) {
+        m_summaryLabel->setMinimumHeight(0);
+        m_summaryLabel->setMaximumHeight(800);
+    } else {
+        if (visibleLineCount < 3) {
+            foreach (Project *p, m_sessionManager->projects()) {
+                if (p->needsConfiguration()) {
+                    visibleLineCount = 3;
+                    break;
+                }
+            }
+        }
+
+        int height = visibleLineCount * QFontMetrics(m_summaryLabel->font()).height() + m_summaryLabel->margin() *2;
+        m_summaryLabel->setMinimumHeight(height);
+        m_summaryLabel->setMaximumHeight(height);
+    }
+
     QString summary;
     if (Project *startupProject = m_sessionManager->startupProject()) {
         if (!m_projectListWidget->isVisibleTo(this))
@@ -1090,10 +1129,24 @@ void MiniProjectTargetSelector::updateSummary()
             if (!m_listWidgets[RUN]->isVisibleTo(this) && activeTarget->activeRunConfiguration())
                 summary.append(tr("Run: <b>%1</b><br/>").arg(
                                    activeTarget->activeRunConfiguration()->displayName()));
+        } else if (startupProject->needsConfiguration()) {
+            summary = tr("<style type=text/css>"
+                         "a:link {color: rgb(128, 128, 255, 240);}</style>"
+                         "The project <b>%1</b> is not yet configured<br/><br/>"
+                         "You can configure it in the <a href=\"projectmode\">Projects mode</a><br/>")
+                    .arg(startupProject->displayName());
+        } else {
+            if (!m_listWidgets[TARGET]->isVisibleTo(this))
+                summary.append("<br/>");
+            if (!m_listWidgets[BUILD]->isVisibleTo(this))
+                summary.append("<br/>");
+            if (!m_listWidgets[DEPLOY]->isVisibleTo(this))
+                summary.append("<br/>");
+            if (!m_listWidgets[RUN]->isVisibleTo(this))
+                summary.append("<br/>");
         }
     }
     m_summaryLabel->setText(summary);
-
 }
 
 void MiniProjectTargetSelector::paintEvent(QPaintEvent *)
@@ -1107,3 +1160,9 @@ void MiniProjectTargetSelector::paintEvent(QPaintEvent *)
     static QImage image(QLatin1String(":/projectexplorer/images/targetpanel_bottom.png"));
     Utils::StyleHelper::drawCornerImage(image, &painter, bottomRect, 1, 1, 1, 1);
 }
+
+void MiniProjectTargetSelector::switchToProjectsMode()
+{
+    Core::ICore::instance()->modeManager()->activateMode(Constants::MODE_SESSION);
+    hide();
+}
diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.h b/src/plugins/projectexplorer/miniprojecttargetselector.h
index 8965287447ae0b369840c18216b577c45aa0f708..b370ed4abeaf4e6a121d5a8a63c654550e953dd3 100644
--- a/src/plugins/projectexplorer/miniprojecttargetselector.h
+++ b/src/plugins/projectexplorer/miniprojecttargetselector.h
@@ -54,7 +54,6 @@ class SessionManager;
 namespace Internal {
 
 // helper classes
-
 class ListWidget : public QListWidget
 {
     Q_OBJECT
@@ -144,6 +143,7 @@ private slots:
 
     void delayedHide();
     void updateActionAndSummary();
+    void switchToProjectsMode();
 private:
     void updateProjectListVisible();
     void updateTargetListVisible();
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index d0fda764ac6eb47a8eea0e2ebc4a16ce598666ef..ce9dfbef9f08ab6df2e06bbedadf7282b378a940 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -383,4 +383,9 @@ void Project::setNamedSettings(const QString &name, QVariant &value)
     d->m_pluginSettings.insert(name, value);
 }
 
+bool Project::needsConfiguration() const
+{
+    return false;
+}
+
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index d31d106956490d980baa5193bd7bb5cd3c06b451..7e5b977b54a188ced2cebad69e2435ef6c2fc1aa 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -117,6 +117,8 @@ public:
     QVariant namedSettings(const QString &name) const;
     void setNamedSettings(const QString &name, QVariant &value);
 
+    virtual bool needsConfiguration() const;
+
 signals:
     void fileListChanged();
 
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 474834bb46ec1e97f22a94f321c6519b26878f40..2262a5289b5c3db84b97772302b98c2b071bd025 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1340,8 +1340,21 @@ QList<Project *> ProjectExplorerPlugin::openProjects(const QStringList &fileName
     }
     updateActions();
 
-    if (!openedPro.isEmpty())
-        Core::ModeManager::activateMode(QLatin1String(Core::Constants::MODE_EDIT));
+    bool switchToProjectsMode = false;
+    foreach (Project *p, openedPro) {
+        if (p->needsConfiguration()) {
+            switchToProjectsMode = true;
+            break;
+        }
+    }
+
+    if (!openedPro.isEmpty()) {
+        if (switchToProjectsMode)
+            Core::ModeManager::activateMode(QLatin1String(ProjectExplorer::Constants::MODE_SESSION));
+        else
+            Core::ModeManager::activateMode(QLatin1String(Core::Constants::MODE_EDIT));
+        Core::ModeManager::setFocusToCurrentMode();
+    }
 
     return openedPro;
 }
@@ -1812,6 +1825,12 @@ int ProjectExplorerPlugin::queue(QList<Project *> projects, QStringList stepIds)
 
     QList<BuildStepList *> stepLists;
     QStringList names;
+    QStringList preambleMessage;
+
+    foreach (Project *pro, projects)
+        if (pro && pro->needsConfiguration())
+            preambleMessage.append(tr("The project %1 is not configured, skipping it.\n")
+                                   .arg(pro->displayName()));
     foreach (const QString id, stepIds) {
         foreach (Project *pro, projects) {
             if (!pro || !pro->activeTarget())
@@ -1833,7 +1852,7 @@ int ProjectExplorerPlugin::queue(QList<Project *> projects, QStringList stepIds)
     if (stepLists.isEmpty())
         return 0;
 
-    if (!d->m_buildManager->buildLists(stepLists, names))
+    if (!d->m_buildManager->buildLists(stepLists, names, preambleMessage))
         return -1;
     return stepLists.count();
 }
@@ -1982,6 +2001,9 @@ QPair<bool, QString> ProjectExplorerPlugin::buildSettingsEnabled(Project *pro)
     } else if (d->m_buildManager->isBuilding(pro)) {
         result.first = false;
         result.second = tr("Currently building the active project.");
+    } else if (pro->needsConfiguration()) {
+        result.first = false;
+        result.second = tr("The project %1 is not configured.").arg(pro->displayName());
     } else if (!hasBuildSettings(pro)) {
         result.first = false;
         result.second = tr("Project has no build settings.");
@@ -2055,8 +2077,9 @@ bool ProjectExplorerPlugin::hasDeploySettings(Project *pro)
 {
     const QList<Project *> & projects = d->m_session->projectOrder(pro);
     foreach(Project *project, projects)
-        if (project->activeTarget()->activeDeployConfiguration() &&
-                !project->activeTarget()->activeDeployConfiguration()->stepList()->isEmpty())
+        if (project->activeTarget()
+                && project->activeTarget()->activeDeployConfiguration()
+                && !project->activeTarget()->activeDeployConfiguration()->stepList()->isEmpty())
             return true;
     return false;
 }
@@ -2066,7 +2089,9 @@ void ProjectExplorerPlugin::runProject(Project *pro, RunMode mode, const bool fo
     if (!pro)
         return;
 
-    runRunConfiguration(pro->activeTarget()->activeRunConfiguration(), mode, forceSkipDeploy);
+    if (Target *target = pro->activeTarget())
+        if (RunConfiguration *rc = target->activeRunConfiguration())
+            runRunConfiguration(rc, mode, forceSkipDeploy);
 }
 
 void ProjectExplorerPlugin::runRunConfiguration(ProjectExplorer::RunConfiguration *rc,
@@ -2285,6 +2310,9 @@ QString ProjectExplorerPlugin::cannotRunReason(Project *project, RunMode runMode
     if (!project)
         return tr("No active project.");
 
+    if (project->needsConfiguration())
+        return tr("The project %1 is not configured.").arg(project->displayName());
+
     if (!project->activeTarget())
         return tr("The project '%1' has no active target.").arg(project->displayName());
 
diff --git a/src/plugins/projectexplorer/projectexplorer.qrc b/src/plugins/projectexplorer/projectexplorer.qrc
index a4b8daf4f7d78e055c8a0a46c084caed1e588fe5..8ece0bc962b9aafb638f9d5b589b68c0d346d3c6 100644
--- a/src/plugins/projectexplorer/projectexplorer.qrc
+++ b/src/plugins/projectexplorer/projectexplorer.qrc
@@ -41,5 +41,6 @@
         <file>images/window.png</file>
         <file>images/stop_small.png</file>
         <file>images/disabledbuildstep.png</file>
+        <file>images/unconfigured.png</file>
     </qresource>
 </RCC>
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 5e904e8691cfcd005081bb017b060af80efba904..4192180396da4fe76ee1e3eae6d811f6de8e5c7d 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -142,6 +142,7 @@ PanelsWidget::PanelsWidget(QWidget *parent) :
     setWidget(m_root);
     setFrameStyle(QFrame::NoFrame);
     setWidgetResizable(true);
+    setFocusPolicy(Qt::NoFocus);
 }
 
 PanelsWidget::~PanelsWidget()
@@ -263,6 +264,12 @@ void ProjectWindow::extensionsInitialized()
         connect(fac, SIGNAL(supportedTargetIdsChanged()),
                 this, SLOT(targetFactoriesChanged()));
 
+    QList<IProjectPanelFactory *> list = ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>();
+    qSort(list.begin(), list.end(), &IPanelFactory::prioritySort);
+    foreach (IProjectPanelFactory *fac, list)
+        connect (fac, SIGNAL(projectUpdated(ProjectExplorer::Project *)),
+                 this, SLOT(projectUpdated(ProjectExplorer::Project *)));
+
 }
 
 void ProjectWindow::aboutToShutdown()
@@ -272,6 +279,15 @@ void ProjectWindow::aboutToShutdown()
     disconnect(ProjectExplorerPlugin::instance()->session(), 0, this, 0);
 }
 
+void ProjectWindow::projectUpdated(Project *p)
+{
+    // Called after a project was configured
+    int index = m_tabWidget->currentIndex();
+    deregisterProject(p);
+    registerProject(p);
+    m_tabWidget->setCurrentIndex(index);
+}
+
 void ProjectWindow::targetFactoriesChanged()
 {
     bool changed = false;
@@ -290,6 +306,8 @@ void ProjectWindow::targetFactoriesChanged()
 
 bool ProjectWindow::useTargetPage(ProjectExplorer::Project *project)
 {
+    if (project->targets().isEmpty())
+        return false;
     if (project->targets().size() > 1)
         return true;
     QStringList tmp;
@@ -323,12 +341,15 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project)
 
     if (!usesTargetPage){
         // Show the target specific pages directly
-        QList<ITargetPanelFactory *> factories =
-                ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>();
+        if (project->activeTarget()) {
+            QList<ITargetPanelFactory *> factories =
+                    ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>();
+
+            qSort(factories.begin(), factories.end(), &IPanelFactory::prioritySort);
 
-        foreach (ITargetPanelFactory *factory, factories) {
-            if (factory->supports(project->activeTarget()))
-                subtabs << factory->displayName();
+            foreach (ITargetPanelFactory *factory, factories)
+                if (factory->supports(project->activeTarget()))
+                    subtabs << factory->displayName();
         }
     } else {
         // Use the Targets page
@@ -336,8 +357,8 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project)
     }
 
     // Add the project specific pages
-
     QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>();
+    qSort(factories.begin(), factories.end(), &IPanelFactory::prioritySort);
     foreach (IProjectPanelFactory *panelFactory, factories) {
         if (panelFactory->supports(project))
             subtabs << panelFactory->displayName();
@@ -404,9 +425,11 @@ void ProjectWindow::showProperties(int index, int subIndex)
             m_centralWidget->setCurrentWidget(m_currentWidget);
         }
         ++pos;
-    } else {
+    } else if (project->activeTarget()) {
         // No Targets page, target specific pages are first in the list
-        foreach (ITargetPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>()) {
+        QList<ITargetPanelFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>();
+        qSort(factories.begin(), factories.end(), &ITargetPanelFactory::prioritySort);
+        foreach (ITargetPanelFactory *panelFactory, factories) {
             if (panelFactory->supports(project->activeTarget())) {
                 if (subIndex == pos) {
                     fac = panelFactory;
@@ -418,7 +441,9 @@ void ProjectWindow::showProperties(int index, int subIndex)
     }
 
     if (!fac) {
-        foreach (IProjectPanelFactory *panelFactory, ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>()) {
+        QList<IProjectPanelFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<IProjectPanelFactory>();
+        qSort(factories.begin(), factories.end(), &IPanelFactory::prioritySort);
+        foreach (IProjectPanelFactory *panelFactory, factories) {
             if (panelFactory->supports(project)) {
                 if (subIndex == pos) {
                     fac = panelFactory;
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index 41a09d37dde38c54aae9234ac171d19423eeb805..1cf711e87e5bcf684c58d0d6e875fb601cbb26c6 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -90,6 +90,7 @@ private slots:
     void registerProject(ProjectExplorer::Project*);
     void deregisterProject(ProjectExplorer::Project*);
     void startupProjectChanged(ProjectExplorer::Project *);
+    void projectUpdated(ProjectExplorer::Project *p);
 
 private:
     bool useTargetPage(ProjectExplorer::Project *project);
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index a40521b160528b2d4447b5d9cfc1fa39e53b7c1a..de5ae10b7e3ef65ebe8c809bf792521b518fac71 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -94,6 +94,11 @@ QString RunSettingsPanelFactory::displayName() const
     return RunSettingsWidget::tr("Run Settings");
 }
 
+int RunSettingsPanelFactory::priority() const
+{
+    return 20;
+}
+
 bool RunSettingsPanelFactory::supports(Target *target)
 {
     Q_UNUSED(target);
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h
index 1d79feef4e84053054b665793d34b1053e19cac8..aa897947d0d2b8ecab4e8b3ebc23bd3b4c2a495a 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.h
@@ -67,6 +67,7 @@ class RunSettingsPanelFactory : public ITargetPanelFactory
 public:
     QString id() const;
     QString displayName() const;
+    int priority() const;
     bool supports(Target *target);
     PropertiesPanel *createPanel(Target *target);
 };
diff --git a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
index c68d3e7ffb7f85294caed1738737635339d2ab67..ba1e1d68b0fa2677723f84246e75378d6713c46c 100644
--- a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
+++ b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
@@ -1080,7 +1080,10 @@ QString InternalLibraryDetailsController::snippet() const
             ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projectForFile(proFile());
 
     // the build directory of the active build configuration
-    QDir rootBuildDir(project->activeTarget()->activeBuildConfiguration()->buildDirectory());
+    QDir rootBuildDir = rootDir; // If the project is unconfigured use the project dir
+    if (ProjectExplorer::Target *t = project->activeTarget())
+        if (ProjectExplorer::BuildConfiguration *bc = t->activeBuildConfiguration())
+            rootBuildDir = bc->buildDirectory();
 
     // the project for which we insert the snippet inside build tree
     QFileInfo pfi(rootBuildDir.filePath(proRelavitePath));
diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp
deleted file mode 100644
index 7534bbf1a5e0b0cf6484a4f0192d04ace14a82c8..0000000000000000000000000000000000000000
--- a/src/plugins/qt4projectmanager/projectloadwizard.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-**
-** GNU Lesser General Public License Usage
-**
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this file.
-** Please review the following information to ensure the GNU Lesser General
-** Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** Other Usage
-**
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**************************************************************************/
-
-#include "projectloadwizard.h"
-#include "wizards/targetsetuppage.h"
-#include "qt4project.h"
-
-#include <coreplugin/ifile.h>
-
-#include <QtGui/QCheckBox>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLabel>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QWizardPage>
-#include <QtGui/QApplication>
-
-using namespace Qt4ProjectManager;
-using namespace Qt4ProjectManager::Internal;
-
-ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::WindowFlags flags)
-    : QWizard(parent, flags), m_project(project), m_targetSetupPage(0)
-{
-    Q_ASSERT(project);
-
-    setWindowTitle(tr("Project Setup"));
-
-    m_targetSetupPage = new TargetSetupPage(this);
-    m_targetSetupPage->setProFilePath(m_project->file()->fileName());
-    m_targetSetupPage->setImportSearch(true);
-    resize(900, 450);
-
-    addPage(m_targetSetupPage);
-
-    setOption(QWizard::NoCancelButton, false);
-    setOption(QWizard::NoDefaultButton, false);
-    setOption(QWizard::NoBackButtonOnLastPage, true);
-#ifdef Q_OS_MAC
-    setButtonLayout(QList<QWizard::WizardButton>()
-                    << QWizard::CancelButton
-                    << QWizard::Stretch
-                    << QWizard::BackButton
-                    << QWizard::NextButton
-                    << QWizard::CommitButton
-                    << QWizard::FinishButton);
-#endif
-}
-
-ProjectLoadWizard::~ProjectLoadWizard()
-{
-}
-
-void ProjectLoadWizard::done(int result)
-{
-    QWizard::done(result);
-
-    if (result == Accepted)
-        applySettings();
-}
-
-void ProjectLoadWizard::applySettings()
-{
-    m_targetSetupPage->setupProject(m_project);
-}
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index efb15b6e857ba9dc114b38178f8bbf171938b4b7..677f6d5b63877da7a830e5c1c3f45998d7ebd692 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -774,7 +774,10 @@ bool Qt4PriFileNode::deploysFolder(const QString &folder) const
 
 QList<ProjectExplorer::RunConfiguration *> Qt4PriFileNode::runConfigurationsFor(Node *node)
 {
-    return m_project->activeTarget()->runConfigurationsForNode(node);
+    Qt4BaseTarget *target = m_project->activeTarget();
+    if (target)
+        return target->runConfigurationsForNode(node);
+    return QList<ProjectExplorer::RunConfiguration *>();
 }
 
 QList<Qt4PriFileNode *> Qt4PriFileNode::subProjectNodesExact() const
@@ -854,7 +857,9 @@ QList<ProjectNode::ProjectAction> Qt4PriFileNode::supportedActions(Node *node) c
     if (fileNode && fileNode->fileType() != ProjectExplorer::ProjectFileType)
         actions << Rename;
 
-    if (!m_project->activeTarget()->runConfigurationsForNode(node).isEmpty())
+
+    Qt4BaseTarget *target = m_project->activeTarget();
+    if (target && !target->runConfigurationsForNode(node).isEmpty())
         actions << HasSubProjectRunConfigurations;
 
     return actions;
@@ -2132,7 +2137,8 @@ TargetInformation Qt4ProFileNode::targetInformation(QtSupport::ProFileReader *re
             // Hmm can we find out whether it's debug or release in a saner way?
             // Theoretically it's in CONFIG
             QString qmakeBuildConfig = QLatin1String("release");
-            if (m_project->activeTarget()->activeQt4BuildConfiguration()->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild)
+            Qt4BaseTarget *target = m_project->activeTarget();
+            if (!target || target->activeQt4BuildConfiguration()->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild)
                 qmakeBuildConfig = QLatin1String("debug");
             wd += QLatin1Char('/') + qmakeBuildConfig;
         }
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index d1b09049f1d7e8efe80a70150f6ccf73eb1a1db9..00f73222c08c6a4eab048e0165769934c3cfa81f 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -39,7 +39,6 @@
 #include "qt4nodes.h"
 #include "qt4projectconfigwidget.h"
 #include "qt4projectmanagerconstants.h"
-#include "projectloadwizard.h"
 #include "qt4buildconfiguration.h"
 #include "findqt4profiles.h"
 
@@ -64,6 +63,8 @@
 #include <qtsupport/baseqtversion.h>
 #include <qtsupport/profilereader.h>
 #include <qtsupport/qtsupportconstants.h>
+#include <qtsupport/qtversionmanager.h>
+#include <qtconcurrent/QtConcurrentTools>
 
 #include <QtCore/QDebug>
 #include <QtCore/QDir>
@@ -379,20 +380,6 @@ bool Qt4Project::fromMap(const QVariantMap &map)
         }
     }
 
-    // Add buildconfigurations so we can parse the pro-files.
-    if (targets().isEmpty()) {
-        ProjectLoadWizard wizard(this);
-        wizard.exec();
-    }
-
-    if (targets().isEmpty()) {
-        qWarning() << "Unable to create targets!";
-        return false;
-    }
-
-    Q_ASSERT(activeTarget());
-    Q_ASSERT(activeTarget()->activeBuildConfiguration());
-
     m_manager->registerProject(this);
 
     m_rootProjectNode = new Qt4ProFileNode(this, m_fileInfo->fileName(), this);
@@ -480,7 +467,7 @@ void Qt4Project::updateCodeModels()
     if (debug)
         qDebug()<<"Qt4Project::updateCodeModel()";
 
-    if (!activeTarget() || !activeTarget()->activeBuildConfiguration())
+    if (activeTarget() && !activeTarget()->activeBuildConfiguration())
         return;
 
     updateCppCodeModel();
@@ -489,7 +476,15 @@ void Qt4Project::updateCodeModels()
 
 void Qt4Project::updateCppCodeModel()
 {
-    Qt4BuildConfiguration *activeBC = activeTarget()->activeQt4BuildConfiguration();
+    QtSupport::BaseQtVersion *qtVersion = 0;
+    ToolChain *tc = 0;
+    if (Qt4BaseTarget *target = activeTarget()) {
+        qtVersion = target->activeQt4BuildConfiguration()->qtVersion();
+        tc = target->activeQt4BuildConfiguration()->toolChain();
+    } else {
+        qtVersion = qt4ProjectManager()->unconfiguredSettings().version;
+        tc = qt4ProjectManager()->unconfiguredSettings().toolchain;
+    }
 
     CPlusPlus::CppModelManagerInterface *modelmanager =
         CPlusPlus::CppModelManagerInterface::instance();
@@ -503,18 +498,17 @@ void Qt4Project::updateCppCodeModel()
     QByteArray predefinedMacros;
 
     QString qtFrameworkPath;
-    if (activeBC->qtVersion())
-        qtFrameworkPath = activeBC->qtVersion()->frameworkInstallPath();
+    if (qtVersion)
+        qtFrameworkPath = qtVersion->frameworkInstallPath();
     if (!qtFrameworkPath.isEmpty())
         predefinedFrameworkPaths.append(qtFrameworkPath);
 
-    ToolChain *tc = activeBC->toolChain();
     if (tc) {
         predefinedMacros = tc->predefinedMacros();
 
         QList<HeaderPath> headers = tc->systemHeaderPaths();
-        if (activeBC->qtVersion())
-            headers.append(activeBC->qtVersion()->systemHeaderPathes());
+        if (qtVersion)
+            headers.append(qtVersion->systemHeaderPathes());
         foreach (const HeaderPath &headerPath, headers) {
             if (headerPath.kind() == HeaderPath::FrameworkHeaderPath)
                 predefinedFrameworkPaths.append(headerPath.path());
@@ -562,8 +556,8 @@ void Qt4Project::updateCppCodeModel()
     // Add mkspec directory
     if (rootQt4ProjectNode())
         allIncludePaths.append(rootQt4ProjectNode()->resolvedMkspecPath());
-    else if (activeBC->qtVersion())
-        allIncludePaths.append(activeBC->qtVersion()->mkspecPath().toString());
+    else if (qtVersion)
+        allIncludePaths.append(qtVersion->mkspecPath().toString());
 
     allIncludePaths.append(predefinedIncludePaths);
 
@@ -628,9 +622,18 @@ void Qt4Project::updateQmlJSCodeModel()
 
     bool preferDebugDump = false;
     projectInfo.tryQmlDump = false;
-    if (activeTarget() && activeTarget()->activeBuildConfiguration()) {
-        preferDebugDump = activeTarget()->activeQt4BuildConfiguration()->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild;
-        QtSupport::BaseQtVersion *qtVersion = activeTarget()->activeQt4BuildConfiguration()->qtVersion();
+
+    QtSupport::BaseQtVersion *qtVersion = 0;
+    if (Qt4BaseTarget *t = activeTarget()) {
+        if (Qt4BuildConfiguration *bc = t->activeQt4BuildConfiguration()) {
+            qtVersion = bc->qtVersion();
+            preferDebugDump = bc->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild;
+        }
+    } else {
+        qtVersion = qt4ProjectManager()->unconfiguredSettings().version;
+        preferDebugDump = qtVersion->defaultBuildConfig() & QtSupport::BaseQtVersion::DebugBuild;
+    }
+    if (qtVersion) {
         if (qtVersion && qtVersion->isValid()) {
             projectInfo.tryQmlDump = qtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT)
                     || qtVersion->type() == QLatin1String(QtSupport::Constants::SIMULATORQT);
@@ -643,9 +646,15 @@ void Qt4Project::updateQmlJSCodeModel()
     projectInfo.importPaths.removeDuplicates();
 
     if (projectInfo.tryQmlDump) {
-        const Qt4BuildConfiguration *bc = activeTarget()->activeQt4BuildConfiguration();
-        if (bc) {
-            QtSupport::QmlDumpTool::pathAndEnvironment(this, bc->qtVersion(), bc->toolChain(),
+        if (Qt4BaseTarget *target = activeTarget()) {
+            const Qt4BuildConfiguration *bc = target->activeQt4BuildConfiguration();
+            if (bc)
+                QtSupport::QmlDumpTool::pathAndEnvironment(this, bc->qtVersion(), bc->toolChain(),
+                                                           preferDebugDump, &projectInfo.qmlDumpPath,
+                                                           &projectInfo.qmlDumpEnvironment);
+        } else {
+            UnConfiguredSettings us = qt4ProjectManager()->unconfiguredSettings();
+            QtSupport::QmlDumpTool::pathAndEnvironment(this, us.version, us.toolchain,
                                                        preferDebugDump, &projectInfo.qmlDumpPath, &projectInfo.qmlDumpEnvironment);
         }
     } else {
@@ -668,7 +677,9 @@ void Qt4Project::update()
     if (debug)
         qDebug()<<"State is now Base";
     m_asyncUpdateState = Base;
-    activeTarget()->activeQt4BuildConfiguration()->setEnabled(true);
+    Qt4BaseTarget *target = activeTarget();
+    if (target)
+        target->activeQt4BuildConfiguration()->setEnabled(true);
     emit proParsingDone();
 }
 
@@ -690,7 +701,8 @@ void Qt4Project::scheduleAsyncUpdate(Qt4ProFileNode *node)
         return;
     }
 
-    activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
+    if (activeTarget() && activeTarget()->activeQt4BuildConfiguration())
+        activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
 
     if (m_asyncUpdateState == AsyncFullUpdatePending) {
         // Just postpone
@@ -760,7 +772,8 @@ void Qt4Project::scheduleAsyncUpdate()
             qDebug()<<"  update in progress, canceling and setting state to full update pending";
         m_cancelEvaluate = true;
         m_asyncUpdateState = AsyncFullUpdatePending;
-        activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
+        if (activeTarget() && activeTarget()->activeQt4BuildConfiguration())
+            activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
         m_rootProjectNode->setParseInProgressRecursive(true);
         return;
     }
@@ -768,7 +781,8 @@ void Qt4Project::scheduleAsyncUpdate()
     if (debug)
         qDebug()<<"  starting timer for full update, setting state to full update pending";
     m_partialEvaluate.clear();
-    activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
+    if (activeTarget() && activeTarget()->activeQt4BuildConfiguration())
+        activeTarget()->activeQt4BuildConfiguration()->setEnabled(false);
     m_rootProjectNode->setParseInProgressRecursive(true);
     m_asyncUpdateState = AsyncFullUpdatePending;
     m_asyncUpdateTimer.start();
@@ -816,7 +830,8 @@ void Qt4Project::decrementPendingEvaluateFutures()
         } else  if (m_asyncUpdateState != ShuttingDown){
             // After being done, we need to call:
             m_asyncUpdateState = Base;
-            activeTarget()->activeQt4BuildConfiguration()->setEnabled(true);
+            if (activeTarget() && activeTarget()->activeQt4BuildConfiguration())
+                activeTarget()->activeQt4BuildConfiguration()->setEnabled(true);
             foreach (Target *t, targets())
                 static_cast<Qt4BaseTarget *>(t)->createApplicationProFiles(true);
             updateFileList();
@@ -952,32 +967,50 @@ QtSupport::ProFileReader *Qt4Project::createProFileReader(Qt4ProFileNode *qt4Pro
         m_proFileOption = new ProFileOption;
         m_proFileOptionRefCnt = 0;
 
-        if (!bc && activeTarget())
-            bc = activeTarget()->activeQt4BuildConfiguration();
-
+        QtSupport::BaseQtVersion *qtVersion = 0;
+        ProjectExplorer::ToolChain *tc = 0;
+        Utils::Environment env = Utils::Environment::systemEnvironment();
+        QStringList qmakeArgs;
         if (bc) {
-            QtSupport::BaseQtVersion *version = bc->qtVersion();
-            if (version && version->isValid()) {
-                m_proFileOption->properties = version->versionInfo();
-                if (bc->toolChain())
-                    m_proFileOption->sysroot = bc->qtVersion()->systemRoot();
-            }
-
-            Utils::Environment env = bc->environment();
-            Utils::Environment::const_iterator eit = env.constBegin(), eend = env.constEnd();
-            for (; eit != eend; ++eit)
-                m_proFileOption->environment.insert(env.key(eit), env.value(eit));
-
-            QStringList args;
+            qtVersion = bc->qtVersion();
+            env = bc->environment();
+            tc = bc->toolChain();
             if (QMakeStep *qs = bc->qmakeStep()) {
-                args = qs->parserArguments();
+                qmakeArgs = qs->parserArguments();
                 m_proFileOption->qmakespec = qs->mkspec().toString();
             } else {
-                args = bc->configCommandLineArguments();
+                qmakeArgs = bc->configCommandLineArguments();
+            }
+        } else if (Qt4BaseTarget *target = activeTarget()) {
+            if (Qt4BuildConfiguration *bc = target->activeQt4BuildConfiguration()) {
+                qtVersion = bc->qtVersion();
+                env = bc->environment();
+                tc = bc->toolChain();
+                if (QMakeStep *qs = bc->qmakeStep()) {
+                    qmakeArgs = qs->parserArguments();
+                    m_proFileOption->qmakespec = qs->mkspec().toString();
+                } else {
+                    qmakeArgs = bc->configCommandLineArguments();
+                }
             }
-            m_proFileOption->setCommandLineArguments(args);
+        } else {
+            UnConfiguredSettings ucs = qt4ProjectManager()->unconfiguredSettings();
+            qtVersion = ucs.version;
+            tc = ucs.toolchain;
         }
 
+        if (qtVersion && qtVersion->isValid()) {
+            m_proFileOption->properties = qtVersion->versionInfo();
+            if (tc)
+                m_proFileOption->sysroot = qtVersion->systemRoot();
+        }
+
+        Utils::Environment::const_iterator eit = env.constBegin(), eend = env.constEnd();
+        for (; eit != eend; ++eit)
+            m_proFileOption->environment.insert(env.key(eit), env.value(eit));
+
+        m_proFileOption->setCommandLineArguments(qmakeArgs);
+
         QtSupport::ProFileCacheManager::instance()->incRefCount();
     }
     ++m_proFileOptionRefCnt;
@@ -1337,6 +1370,11 @@ void CentralizedFolderWatcher::delayedFolderChanged(const QString &folder)
     }
 }
 
+bool Qt4Project::needsConfiguration() const
+{
+    return targets().isEmpty();
+}
+
 /*!
   Handle special case were a subproject of the qt directory is opened, and
   qt was configured to be built as a shadow build -> also build in the sub-
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 2d225935a6b17ed2a5e9cd05639823a48a3fa9b6..26dd0ab4a56189c48695ff362e0f933cf9f2fbeb 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -57,6 +57,7 @@ class Qt4ProFileNode;
 class Qt4PriFileNode;
 class Qt4BaseTarget;
 class Qt4BuildConfiguration;
+class Qt4Manager;
 
 namespace Internal {
     class DeployHelperRunStep;
@@ -71,7 +72,6 @@ namespace Internal {
 class QMakeStep;
 class MakeStep;
 
-class Qt4Manager;
 class Qt4Project;
 class Qt4RunStep;
 
@@ -138,6 +138,8 @@ public:
     void watchFolders(const QStringList &l, Qt4PriFileNode *node);
     void unwatchFolders(const QStringList &l, Qt4PriFileNode *node);
 
+    bool needsConfiguration() const;
+
 signals:
     void proParsingDone();
     void proFileUpdated(Qt4ProjectManager::Qt4ProFileNode *node, bool, bool);
@@ -207,6 +209,7 @@ private:
 
     friend class Internal::Qt4ProjectFile;
     friend class Internal::Qt4ProjectConfigWidget;
+    friend class Qt4Manager; // to schedule a async update if the unconfigured settings change
 };
 
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index b198c077459a8c667a879cddcedd61d76b248d7a..5bdcdfc4d2175a08d9da36dd6ba84c3a393f8389 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -55,8 +55,12 @@
 #include <projectexplorer/session.h>
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/toolchainmanager.h>
+#include <projectexplorer/toolchain.h>
 #include <utils/qtcassert.h>
 #include <qtsupport/profilereader.h>
+#include <qtsupport/baseqtversion.h>
+#include <qtsupport/qtversionmanager.h>
 
 #include <QtCore/QCoreApplication>
 #include <QtCore/QDir>
@@ -141,6 +145,12 @@ void Qt4Manager::init()
         tr("Full path to the bin directory of the current project's Qt version."));
     connect(vm, SIGNAL(variableUpdateRequested(QByteArray)),
             this, SLOT(updateVariable(QByteArray)));
+
+    QSettings *settings = Core::ICore::instance()->settings();
+    settings->beginGroup("Qt4ProjectManager");
+    m_unConfiguredVersionId = settings->value("QtVersionId", -1).toInt();
+    m_unconfiguredToolChainId = settings->value("ToolChainId", QString()).toString();
+    settings->endGroup();
 }
 
 void Qt4Manager::editorChanged(Core::IEditor *editor)
@@ -191,7 +201,14 @@ void Qt4Manager::updateVariable(const QByteArray &variable)
             return;
         }
         QString value;
-        QtSupport::BaseQtVersion *qtv = qt4pro->activeTarget()->activeQt4BuildConfiguration()->qtVersion();
+        QtSupport::BaseQtVersion *qtv;
+        if (Qt4BaseTarget *t = qt4pro->activeTarget()) {
+            if (Qt4BuildConfiguration *bc = t->activeQt4BuildConfiguration())
+                qtv = bc->qtVersion();
+        } else {
+            qtv = unconfiguredSettings().version;
+        }
+
         if (qtv)
             value = qtv->versionInfo().value(QLatin1String("QT_INSTALL_BINS"));
         Core::VariableManager::instance()->insert(kInstallBins, value);
@@ -440,3 +457,57 @@ QString Qt4Manager::fileTypeId(ProjectExplorer::FileType type)
     return QString();
 }
 
+UnConfiguredSettings Qt4Manager::unconfiguredSettings() const
+{
+    if (m_unConfiguredVersionId == -1 && m_unconfiguredToolChainId.isEmpty()) {
+        // Choose a good default qtversion and try to find a toolchain that fit
+        QtSupport::BaseQtVersion *version = 0;
+        ProjectExplorer::ToolChain *toolChain = 0;
+        QList<QtSupport::BaseQtVersion *> versions = QtSupport::QtVersionManager::instance()->validVersions();
+        if (!versions.isEmpty()) {
+            version = versions.first();
+
+            foreach (ProjectExplorer::ToolChain *tc, ProjectExplorer::ToolChainManager::instance()->toolChains()) {
+                if (tc->mkspec() == version->mkspec()) {
+                    toolChain = tc;
+                    break;
+                }
+            }
+            if (!toolChain) {
+                foreach (ProjectExplorer::ToolChain *tc, ProjectExplorer::ToolChainManager::instance()->toolChains()) {
+                    if (version->qtAbis().contains(tc->targetAbi())) {
+                        toolChain = tc;
+                        break;
+                    }
+                }
+            }
+            m_unConfiguredVersionId = version->uniqueId();
+            m_unconfiguredToolChainId = toolChain->id();
+        }
+        UnConfiguredSettings us;
+        us.version = version;
+        us.toolchain = toolChain;
+        return us;
+    }
+    UnConfiguredSettings us;
+    us.version = QtSupport::QtVersionManager::instance()->version(m_unConfiguredVersionId);
+    us.toolchain = ProjectExplorer::ToolChainManager::instance()->findToolChain(m_unconfiguredToolChainId);
+    return us;
+}
+
+void Qt4Manager::setUnconfiguredSettings(const UnConfiguredSettings &setting)
+{
+    m_unConfiguredVersionId = setting.version ? setting.version->uniqueId() : -1;
+    m_unconfiguredToolChainId = setting.toolchain ? setting.toolchain->id() : QString();
+
+    QSettings *settings = Core::ICore::instance()->settings();
+    settings->beginGroup("Qt4ProjectManager");
+    settings->setValue("QtVersionId", m_unConfiguredVersionId);
+    settings->setValue("ToolChainId", m_unconfiguredToolChainId);
+    settings->endGroup();
+
+    foreach (Qt4Project *pro, m_projects)
+        if (pro->targets().isEmpty())
+            pro->scheduleAsyncUpdate();
+    emit unconfiguredSettingsChanged();
+}
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.h b/src/plugins/qt4projectmanager/qt4projectmanager.h
index 4d018c7a4915ccd2932ce39ede0880e7b21634a1..21cefe136a99e365aa38addb01fea1ab02d80313 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.h
@@ -50,10 +50,12 @@ namespace ProjectExplorer {
 class Project;
 class ProjectExplorerPlugin;
 class Node;
+class ToolChain;
 }
 
 namespace QtSupport {
 class QtVersionManager;
+class BaseQtVersion;
 }
 
 namespace Qt4ProjectManager {
@@ -62,6 +64,13 @@ namespace Internal {
 class Qt4Builder;
 class ProFileEditorWidget;
 class Qt4ProjectManagerPlugin;
+
+class UnConfiguredSettings
+{
+public:
+    QtSupport::BaseQtVersion *version;
+    ProjectExplorer::ToolChain *toolchain;
+};
 }
 
 class Qt4Project;
@@ -96,6 +105,13 @@ public:
 
     enum Action { BUILD, REBUILD, CLEAN };
 
+    /// Settings to use for codemodel if no targets exist
+    Internal::UnConfiguredSettings unconfiguredSettings() const;
+    void setUnconfiguredSettings(const Internal::UnConfiguredSettings &setting);
+
+signals:
+    void unconfiguredSettingsChanged();
+
 public slots:
     void addLibrary();
     void addLibraryContextMenu();
@@ -118,7 +134,8 @@ private:
     void runQMake(ProjectExplorer::Project *p, ProjectExplorer::Node *node);
 
     Internal::Qt4ProjectManagerPlugin *m_plugin;
-
+    mutable int m_unConfiguredVersionId;
+    mutable QString m_unconfiguredToolChainId;
     ProjectExplorer::Node *m_contextNode;
     ProjectExplorer::Project *m_contextProject;
 
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
index 2daa79eaed32d82b57ed6ce4ca99dbd9c2e0e0f1..2a13afdb9825509df5489c68e5cce3ccdaf36b2f 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
@@ -51,7 +51,6 @@ HEADERS += \
     qmakestep.h \
     qtmodulesinfo.h \
     qt4projectconfigwidget.h \
-    projectloadwizard.h \
     qtuicodemodelsupport.h \
     externaleditors.h \
     qt4buildconfiguration.h \
@@ -67,7 +66,9 @@ HEADERS += \
     winceqtversionfactory.h \
     winceqtversion.h \
     profilecompletionassist.h \
-    qt4basetargetfactory.h
+    qt4basetargetfactory.h \
+    unconfiguredprojectpanel.h \
+    unconfiguredsettingsoptionpage.h
 
 SOURCES += qt4projectmanagerplugin.cpp \
     qt4projectmanager.cpp \
@@ -113,7 +114,6 @@ SOURCES += qt4projectmanagerplugin.cpp \
     qmakestep.cpp \
     qtmodulesinfo.cpp \
     qt4projectconfigwidget.cpp \
-    projectloadwizard.cpp \
     qtuicodemodelsupport.cpp \
     externaleditors.cpp \
     qt4buildconfiguration.cpp \
@@ -125,7 +125,9 @@ SOURCES += qt4projectmanagerplugin.cpp \
     profilekeywords.cpp \
     winceqtversionfactory.cpp \
     winceqtversion.cpp \
-    profilecompletionassist.cpp
+    profilecompletionassist.cpp \
+    unconfiguredprojectpanel.cpp \
+    unconfiguredsettingsoptionpage.cpp
 
 FORMS += makestep.ui \
     qmakestep.ui \
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
index ad130464e3d5fcb679dbf8643a20d8bc5366e9fa..f34dd69022e7bca359bbed119d474b103197196b 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
@@ -101,6 +101,13 @@ const char ICON_HTML5_APP[] = ":/wizards/images/html5app.png";
 const char QMAKEVAR_QMLJSDEBUGGER_PATH[] = "QMLJSDEBUGGER_PATH";
 const char QMAKEVAR_DECLARATIVE_DEBUG[] = "CONFIG+=declarative_debug";
 
+// Unconfigured Settings page
+const char UNCONFIGURED_SETTINGS_PAGE_ID[] = "R.UnconfiguredSettings";
+const char UNCONFIGURED_SETTINGS_PAGE_NAME[] = QT_TRANSLATE_NOOP("Qt4ProjectManager", "Unconfigured Project Settings");
+
+// Unconfigured Panel
+const char UNCONFIGURED_PANEL_PAGE_ID[] = "UnconfiguredPanel";
+
 } // namespace Constants
 } // namespace Qt4ProjectManager
 
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 59527b8c58970c873dc008c7030d9c80c544d43c..93b2aeb7106568ca6345aef0326c39c913cbe151 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -36,6 +36,8 @@
 #include "qt4nodes.h"
 #include "qmakestep.h"
 #include "makestep.h"
+#include "qt4target.h"
+#include "qt4buildconfiguration.h"
 #include "wizards/consoleappwizard.h"
 #include "wizards/guiappwizard.h"
 #include "wizards/mobileappwizard.h"
@@ -60,6 +62,8 @@
 #include "qt-desktop/desktopqtversionfactory.h"
 #include "qt-desktop/simulatorqtversionfactory.h"
 #include "winceqtversionfactory.h"
+#include "unconfiguredprojectpanel.h"
+#include "unconfiguredsettingsoptionpage.h"
 
 #include <coreplugin/id.h>
 #include <coreplugin/icore.h>
@@ -90,6 +94,12 @@ using namespace Qt4ProjectManager::Internal;
 using namespace Qt4ProjectManager;
 using ProjectExplorer::Project;
 
+Qt4ProjectManagerPlugin::Qt4ProjectManagerPlugin()
+    : m_previousStartupProject(0), m_previousTarget(0)
+{
+
+}
+
 Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
 {
     //removeObject(m_embeddedPropertiesPage);
@@ -141,6 +151,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     addAutoReleasedObject(new MakeStepFactory);
 
     addAutoReleasedObject(new Qt4RunConfigurationFactory);
+    addAutoReleasedObject(new UnConfiguredSettingsOptionPage);
 
 #ifdef Q_OS_MAC
     addAutoReleasedObject(new MacDesignerExternalEditor);
@@ -160,6 +171,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
 
     addAutoReleasedObject(new ProFileCompletionAssistProvider);
     addAutoReleasedObject(new ProFileHoverHandler(this));
+    addAutoReleasedObject(new UnconfiguredProjectPanel);
 
     //menus
     Core::ActionContainer *mbuild =
@@ -217,8 +229,8 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
 
     connect(m_projectExplorer->buildManager(), SIGNAL(buildStateChanged(ProjectExplorer::Project *)),
             this, SLOT(buildStateChanged(ProjectExplorer::Project *)));
-    connect(m_projectExplorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project *)),
-            this, SLOT(currentProjectChanged()));
+    connect(m_projectExplorer->session(), SIGNAL(startupProjectChanged(ProjectExplorer::Project*)),
+            this, SLOT(startupProjectChanged()));
     connect(m_projectExplorer, SIGNAL(currentNodeChanged(ProjectExplorer::Node*,ProjectExplorer::Project*)),
             this, SLOT(currentNodeChanged(ProjectExplorer::Node*)));
 
@@ -276,14 +288,18 @@ void Qt4ProjectManagerPlugin::updateContextMenu(Project *project,
     m_cleanSubProjectContextMenu->setEnabled(false);
 
     Qt4ProFileNode *proFileNode = qobject_cast<Qt4ProFileNode *>(node);
-    if (qobject_cast<Qt4Project *>(project) && proFileNode) {
+    Qt4Project *qt4Project = qobject_cast<Qt4Project *>(project);
+    if (qt4Project && proFileNode
+            && qt4Project->activeTarget()
+            && qt4Project->activeTarget()->activeQt4BuildConfiguration()) {
         m_runQMakeActionContextMenu->setVisible(true);
         m_buildSubProjectContextMenu->setVisible(true);
         m_rebuildSubProjectContextMenu->setVisible(true);
         m_cleanSubProjectContextMenu->setVisible(true);
 
         if (!m_projectExplorer->buildManager()->isBuilding(project)) {
-            m_runQMakeActionContextMenu->setEnabled(true);
+            if (qt4Project->activeTarget()->activeQt4BuildConfiguration()->qmakeStep())
+                m_runQMakeActionContextMenu->setEnabled(true);
             m_buildSubProjectContextMenu->setEnabled(true);
             m_rebuildSubProjectContextMenu->setEnabled(true);
             m_cleanSubProjectContextMenu->setEnabled(true);
@@ -296,9 +312,49 @@ void Qt4ProjectManagerPlugin::updateContextMenu(Project *project,
     }
 }
 
-void Qt4ProjectManagerPlugin::currentProjectChanged()
+
+void Qt4ProjectManagerPlugin::startupProjectChanged()
+{
+    if (m_previousStartupProject)
+        disconnect(m_previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
+                   this, SLOT(activeTargetChanged()));
+
+    m_previousStartupProject = qobject_cast<Qt4Project *>(m_projectExplorer->session()->startupProject());
+
+    if (m_previousStartupProject)
+        connect(m_previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
+                           this, SLOT(activeTargetChanged()));
+
+    activeTargetChanged();
+}
+
+void Qt4ProjectManagerPlugin::activeTargetChanged()
+{
+    if (m_previousTarget)
+        disconnect(m_previousTarget, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
+                   this, SLOT(updateRunQMakeAction()));
+
+    m_previousTarget = m_previousStartupProject ? m_previousStartupProject->activeTarget() : 0;
+
+    if (m_previousTarget)
+        connect(m_previousTarget, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
+                this, SLOT(updateRunQMakeAction()));
+
+    updateRunQMakeAction();
+}
+
+void Qt4ProjectManagerPlugin::updateRunQMakeAction()
 {
-    m_runQMakeAction->setEnabled(!m_projectExplorer->buildManager()->isBuilding(m_projectExplorer->currentProject()));
+    bool enable = true;
+    if (m_projectExplorer->buildManager()->isBuilding(m_projectExplorer->currentProject()))
+        enable = false;
+    Qt4Project *pro = qobject_cast<Qt4Project *>(m_projectExplorer->currentProject());
+    if (!pro
+            || !pro->activeTarget()
+            || !pro->activeTarget()->activeBuildConfiguration())
+        enable = false;
+
+    m_runQMakeAction->setEnabled(enable);
 }
 
 void Qt4ProjectManagerPlugin::currentNodeChanged(ProjectExplorer::Node *node)
@@ -310,9 +366,7 @@ void Qt4ProjectManagerPlugin::buildStateChanged(ProjectExplorer::Project *pro)
 {
     ProjectExplorer::Project *currentProject = m_projectExplorer->currentProject();
     if (pro == currentProject)
-        m_runQMakeAction->setEnabled(!m_projectExplorer->buildManager()->isBuilding(currentProject));
-    if (pro == m_qt4ProjectManager->contextProject())
-        m_runQMakeActionContextMenu->setEnabled(!m_projectExplorer->buildManager()->isBuilding(pro));
+        updateRunQMakeAction();
 }
 
 void Qt4ProjectManagerPlugin::jumpToFile()
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
index c1b2e0d958d17c7422b5fd24638a51bdf680b958..c0bbe0ce3aa8b7c886b3f8c8622a9d5db96b2d10 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
@@ -49,6 +49,8 @@ namespace Qt4ProjectManager {
 
 class Qt4Manager;
 class QtVersionManager;
+class Qt4Project;
+class Qt4BaseTarget;
 
 namespace Internal {
 
@@ -59,6 +61,7 @@ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin
     Q_OBJECT
 
 public:
+    Qt4ProjectManagerPlugin();
     ~Qt4ProjectManagerPlugin();
     bool initialize(const QStringList &arguments, QString *errorMessage);
     void extensionsInitialized();
@@ -66,7 +69,9 @@ public:
 private slots:
     void updateContextMenu(ProjectExplorer::Project *project,
                            ProjectExplorer::Node *node);
-    void currentProjectChanged();
+    void startupProjectChanged();
+    void activeTargetChanged();
+    void updateRunQMakeAction();
     void currentNodeChanged(ProjectExplorer::Node *node);
     void buildStateChanged(ProjectExplorer::Project *pro);
     void jumpToFile();
@@ -86,6 +91,8 @@ private:
     ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer;
     ProFileEditorFactory *m_proFileEditorFactory;
     Qt4Manager *m_qt4ProjectManager;
+    Qt4Project *m_previousStartupProject;
+    Qt4BaseTarget *m_previousTarget;
 
     QAction *m_runQMakeAction;
     QAction *m_runQMakeActionContextMenu;
diff --git a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp
index 937bb49a602e6fe7e0b899c67186ef39b8636fe2..05a8cd819f4fa73676cd913a6872f1654d40a2bb 100644
--- a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp
+++ b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp
@@ -34,6 +34,7 @@
 #include "qt4buildconfiguration.h"
 
 #include "qt4project.h"
+#include "qt4projectmanager.h"
 #include "qt4target.h"
 #include <qtsupport/baseqtversion.h>
 
@@ -57,14 +58,28 @@ Qt4UiCodeModelSupport::~Qt4UiCodeModelSupport()
 
 QString Qt4UiCodeModelSupport::uicCommand() const
 {
-    Qt4BuildConfiguration *qt4bc = m_project->activeTarget()->activeQt4BuildConfiguration();
-    if (!qt4bc->qtVersion())
-        return QString();
-    return qt4bc->qtVersion()->uicCommand();
+    if (m_project->needsConfiguration()) {
+        UnConfiguredSettings us = m_project->qt4ProjectManager()->unconfiguredSettings();
+        if (!us.version)
+            return QString();
+        return us.version->uicCommand();
+    } else {
+        Qt4BaseTarget *target = m_project->activeTarget();
+        Qt4BuildConfiguration *qt4bc = target->activeQt4BuildConfiguration();
+        if (!qt4bc->qtVersion())
+            return QString();
+        return qt4bc->qtVersion()->uicCommand();
+    }
+    return QString();
 }
 
 QStringList Qt4UiCodeModelSupport::environment() const
 {
-    Qt4BuildConfiguration *qt4bc = m_project->activeTarget()->activeQt4BuildConfiguration();
-    return qt4bc->environment().toStringList();
+    if (m_project->needsConfiguration()) {
+        return Utils::Environment::systemEnvironment().toStringList();
+    } else {
+        Qt4BaseTarget *target = m_project->activeTarget();
+        Qt4BuildConfiguration *qt4bc = target->activeQt4BuildConfiguration();
+        return qt4bc->environment().toStringList();
+    }
 }
diff --git a/src/plugins/qt4projectmanager/unconfiguredprojectpanel.cpp b/src/plugins/qt4projectmanager/unconfiguredprojectpanel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b47bb1fee251c16a37c7df9973f4cfccd4c13cba
--- /dev/null
+++ b/src/plugins/qt4projectmanager/unconfiguredprojectpanel.cpp
@@ -0,0 +1,195 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "unconfiguredprojectpanel.h"
+#include "wizards/targetsetuppage.h"
+#include "qt4projectmanagerconstants.h"
+
+#include "qt4project.h"
+#include "qt4projectmanager.h"
+
+#include <coreplugin/ifile.h>
+#include <coreplugin/icore.h>
+#include <coreplugin/modemanager.h>
+#include <coreplugin/coreconstants.h>
+
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/toolchain.h>
+
+#include <QtGui/QLabel>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QPushButton>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+
+UnconfiguredProjectPanel::UnconfiguredProjectPanel()
+{
+}
+
+QString Qt4ProjectManager::Internal::UnconfiguredProjectPanel::id() const
+{
+    return Constants::UNCONFIGURED_PANEL_PAGE_ID;
+}
+
+QString Qt4ProjectManager::Internal::UnconfiguredProjectPanel::displayName() const
+{
+    return tr("Configure Project");
+}
+
+int UnconfiguredProjectPanel::priority() const
+{
+    return -10;
+}
+
+bool Qt4ProjectManager::Internal::UnconfiguredProjectPanel::supports(ProjectExplorer::Project *project)
+{
+    if (qobject_cast<Qt4Project *>(project) && project->targets().isEmpty())
+        return true;
+    return false;
+}
+
+ProjectExplorer::PropertiesPanel *Qt4ProjectManager::Internal::UnconfiguredProjectPanel::createPanel(ProjectExplorer::Project *project)
+{
+    ProjectExplorer::PropertiesPanel *panel = new ProjectExplorer::PropertiesPanel;
+    panel->setDisplayName(displayName());
+    // TODO the icon needs a update
+    panel->setIcon(QIcon(":/projectexplorer/images/unconfigured.png"));
+
+    TargetSetupPageWrapper *w = new TargetSetupPageWrapper(project);
+    connect (w, SIGNAL(projectUpdated(ProjectExplorer::Project*)),
+             this, SIGNAL(projectUpdated(ProjectExplorer::Project*)));
+    panel->setWidget(w);
+    return panel;
+}
+
+/////////
+/// TargetSetupPageWrapper
+////////
+
+TargetSetupPageWrapper::TargetSetupPageWrapper(ProjectExplorer::Project *project)
+    : QWidget(), m_project(qobject_cast<Qt4Project *>(project))
+{
+    QVBoxLayout *layout = new QVBoxLayout();
+    layout->setMargin(0);
+    setLayout(layout);
+
+    m_targetSetupPage = new TargetSetupPage(this);
+    m_targetSetupPage->setUseScrollArea(false);
+    m_targetSetupPage->setImportSearch(true);
+    m_targetSetupPage->setProFilePath(project->file()->fileName());
+    m_targetSetupPage->initializePage();
+    m_targetSetupPage->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    updateNoteText();
+
+    layout->addWidget(m_targetSetupPage);
+
+    // Apply row
+    QHBoxLayout *hbox = new QHBoxLayout();
+    layout->addLayout(hbox);
+    layout->setMargin(0);
+    hbox->addStretch();
+    QPushButton *button = new QPushButton(this);
+    button->setText(tr("Configure Project"));
+    hbox->addWidget(button);
+
+    layout->addStretch(10);
+
+    connect(button, SIGNAL(clicked()),
+            this, SLOT(done()));
+    connect(m_targetSetupPage, SIGNAL(noteTextLinkActivated()),
+            this, SLOT(noteTextLinkActivated()));
+    connect(m_project->qt4ProjectManager(), SIGNAL(unconfiguredSettingsChanged()),
+            this, SLOT(updateNoteText()));
+}
+
+void TargetSetupPageWrapper::updateNoteText()
+{
+    UnConfiguredSettings us = m_project->qt4ProjectManager()->unconfiguredSettings();
+
+    QString text;
+    if (us.version && us.toolchain)
+        text = tr("<p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses the Qt version: <b>%2</b> "
+                  "and the tool chain: <b>%3</b> to parse the project. You can edit "
+                  "these in the <b><a href=\"edit\">settings</a></b></p>")
+                .arg(m_project->displayName())
+                .arg(us.version->displayName())
+                .arg(us.toolchain->displayName());
+    else if (us.version)
+        text = tr("<p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses the Qt version: <b>%2</b> "
+                  "and <b>no tool chain</b> to parse the project. You can edit "
+                  "these in the <b><a href=\"edit\">settings</a></b></p>")
+                .arg(m_project->displayName())
+                .arg(us.version->displayName());
+    else if (us.toolchain)
+        text = tr("<p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses <b>no Qt version</b> "
+                  "and the tool chain: <b>%2</b> to parse the project. You can edit "
+                  "these in the <b><a href=\"edit\">settings</a></b></p>")
+                .arg(m_project->displayName())
+                .arg(us.toolchain->displayName());
+    else
+        text = tr("<p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses <b>no Qt version</b> "
+                  "and <b>no tool chain</b> to parse the project. You can edit "
+                  "these in the <b><a href=\"edit\">settings</a></b></p>")
+                .arg(m_project->displayName());
+
+    m_targetSetupPage->setNoteText(text);
+}
+
+void TargetSetupPageWrapper::keyPressEvent(QKeyEvent *event)
+{
+    if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {
+        event->accept();
+        done();
+    }
+}
+
+void TargetSetupPageWrapper::keyReleaseEvent(QKeyEvent *event)
+{
+    if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) {
+        event->accept();
+    }
+}
+
+void TargetSetupPageWrapper::done()
+{
+    m_targetSetupPage->setupProject(m_project);
+    emit projectUpdated(m_project);
+    Core::ICore::instance()->modeManager()->activateMode(QLatin1String(Core::Constants::MODE_EDIT));
+}
+
+void TargetSetupPageWrapper::noteTextLinkActivated()
+{
+    Core::ICore::instance()->showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
+                                               QLatin1String(Constants::UNCONFIGURED_SETTINGS_PAGE_ID));
+}
diff --git a/src/plugins/qt4projectmanager/projectloadwizard.h b/src/plugins/qt4projectmanager/unconfiguredprojectpanel.h
similarity index 61%
rename from src/plugins/qt4projectmanager/projectloadwizard.h
rename to src/plugins/qt4projectmanager/unconfiguredprojectpanel.h
index ba45ce6a599ab44c78d07c25a5f204c84e1525a5..cef4cbdd3e44c58276bd171080da95478df128cd 100644
--- a/src/plugins/qt4projectmanager/projectloadwizard.h
+++ b/src/plugins/qt4projectmanager/unconfiguredprojectpanel.h
@@ -30,33 +30,52 @@
 **
 **************************************************************************/
 
-#ifndef PROJECTLOADWIZARD_H
-#define PROJECTLOADWIZARD_H
+#ifndef UNCONFIGUREDPROJECTPANEL_H
+#define UNCONFIGUREDPROJECTPANEL_H
 
-#include <QtGui/QWizard>
+#include <projectexplorer/iprojectproperties.h>
+
+#include <QtCore/QString>
 
 namespace Qt4ProjectManager {
-class Qt4Project;
 class TargetSetupPage;
+class Qt4Project;
 
 namespace Internal {
 
-class ProjectLoadWizard : public QWizard
+class UnconfiguredProjectPanel : public ProjectExplorer::IProjectPanelFactory
 {
     Q_OBJECT
 public:
-    explicit ProjectLoadWizard(Qt4Project *project, QWidget * parent = 0, Qt::WindowFlags flags = 0);
-    virtual ~ProjectLoadWizard();
-    virtual void done(int result);
+    UnconfiguredProjectPanel();
+    virtual QString id() const;
+    virtual QString displayName() const;
+    int priority() const;
+    virtual bool supports(ProjectExplorer::Project *project);
+    virtual ProjectExplorer::PropertiesPanel *createPanel(ProjectExplorer::Project *project);
+};
 
-private:
-    void applySettings();
+class TargetSetupPageWrapper : public QWidget
+{
+    Q_OBJECT
+public:
+    TargetSetupPageWrapper(ProjectExplorer::Project *project);
+protected:
+    void keyReleaseEvent(QKeyEvent *event);
+    void keyPressEvent(QKeyEvent *event);
+signals:
+    void projectUpdated(ProjectExplorer::Project *project);
+private slots:
+    void done();
+    void noteTextLinkActivated();
+    void updateNoteText();
 
+private:
     Qt4Project *m_project;
     TargetSetupPage *m_targetSetupPage;
 };
 
-} // namespace Internal
-} // namespace Qt4ProjectManager
+}
+}
 
-#endif // PROJECTLOADWIZARD_H
+#endif // UNCONFIGUREDPROJECTPANEL_H
diff --git a/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.cpp b/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..44d6bb5f520e3ad413d21773a410d21536078504
--- /dev/null
+++ b/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.cpp
@@ -0,0 +1,171 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "unconfiguredsettingsoptionpage.h"
+#include "qt4projectmanagerconstants.h"
+
+#include <extensionsystem/pluginmanager.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/toolchainmanager.h>
+#include <projectexplorer/toolchain.h>
+#include <qtsupport/qtversionmanager.h>
+#include <qt4projectmanager/qt4projectmanager.h>
+
+#include <QtCore/QCoreApplication>
+#include <QtGui/QIcon>
+#include <QtGui/QComboBox>
+#include <QtGui/QLabel>
+#include <QtGui/QCheckBox>
+#include <QFormLayout>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+//////////////////////////
+// UnConfiguredSettingsWidget
+//////////////////////////
+
+UnConfiguredSettingsWidget::UnConfiguredSettingsWidget(QWidget *parent)
+    : QWidget(parent)
+{
+    QFormLayout *layout = new QFormLayout(this);
+
+    m_qtVersionComboBox = new QComboBox;
+    layout->addRow(tr("Qt Version:"), m_qtVersionComboBox);
+
+    m_toolchainComboBox = new QComboBox;
+    layout->addRow(tr("Tool Chain:"), m_toolchainComboBox);
+
+    Qt4Manager *qt4Manager = ExtensionSystem::PluginManager::instance()->getObject<Qt4Manager>();
+    Internal::UnConfiguredSettings ucs = qt4Manager->unconfiguredSettings();
+
+    QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
+    foreach (QtSupport::BaseQtVersion *version, vm->validVersions())
+        m_qtVersionComboBox->addItem(version->displayName(), version->uniqueId());
+
+    int index = ucs.version ? m_qtVersionComboBox->findData(ucs.version->uniqueId()) : 0;
+    if (index == -1)
+        index = 0;
+    if (index < m_qtVersionComboBox->count())
+        m_qtVersionComboBox->setCurrentIndex(index);
+
+
+    ProjectExplorer::ToolChainManager *tm = ProjectExplorer::ToolChainManager::instance();
+    foreach (ProjectExplorer::ToolChain *tc, tm->toolChains())
+        m_toolchainComboBox->addItem(tc->displayName(), tc->id());
+
+    index = ucs.toolchain ? m_toolchainComboBox->findData(ucs.toolchain->id()) : 0;
+    if (index == -1)
+        index = 0;
+    if (index < m_toolchainComboBox->count())
+        m_toolchainComboBox->setCurrentIndex(index);
+}
+
+void UnConfiguredSettingsWidget::apply()
+{
+    Qt4Manager *qt4Manager = ExtensionSystem::PluginManager::instance()->getObject<Qt4Manager>();
+    Internal::UnConfiguredSettings ucs;
+
+    int index = m_qtVersionComboBox->currentIndex();
+    int qtVersionId = (index != -1) ? m_qtVersionComboBox->itemData(index).toInt() : -1;
+    ucs.version = QtSupport::QtVersionManager::instance()->version(qtVersionId);
+    index = m_toolchainComboBox->currentIndex();
+    QString toolChainId = index != -1 ? m_toolchainComboBox->itemData(index).toString() : QString();
+    ucs.toolchain = ProjectExplorer::ToolChainManager::instance()->findToolChain(toolChainId);
+    qt4Manager->setUnconfiguredSettings(ucs);
+}
+
+bool UnConfiguredSettingsWidget::matches(const QString &searchKeyword)
+{
+    for (int i = 0; i < layout()->count(); ++i) {
+        if (QLabel *l = qobject_cast<QLabel *>(layout()->itemAt(i)->widget()))
+            if (l->text().contains(searchKeyword))
+                return true;
+    }
+    return false;
+}
+
+//////////////////////////
+// UnConfiguredSettingsOptionPage
+//////////////////////////
+
+UnConfiguredSettingsOptionPage::UnConfiguredSettingsOptionPage()
+{
+}
+
+QString UnConfiguredSettingsOptionPage::id() const
+{
+    return Constants::UNCONFIGURED_SETTINGS_PAGE_ID;
+}
+
+QString UnConfiguredSettingsOptionPage::displayName() const
+{
+    return QCoreApplication::translate("Qt4ProjectManager", Constants::UNCONFIGURED_SETTINGS_PAGE_NAME);
+}
+
+QString UnConfiguredSettingsOptionPage::category() const
+{
+    return QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY);
+}
+
+QString UnConfiguredSettingsOptionPage::displayCategory() const
+{
+    return QCoreApplication::translate("ProjectExplorer",
+                                       ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_TR_CATEGORY);
+}
+
+QIcon UnConfiguredSettingsOptionPage::categoryIcon() const
+{
+    return QIcon(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY_ICON);
+}
+
+bool UnConfiguredSettingsOptionPage::matches(const QString &searchKeyword) const
+{
+    return m_widget->matches(searchKeyword);
+}
+
+QWidget *UnConfiguredSettingsOptionPage::createPage(QWidget *parent)
+{
+    m_widget = new UnConfiguredSettingsWidget(parent);
+    return m_widget;
+}
+
+void UnConfiguredSettingsOptionPage::apply()
+{
+    if (m_widget)
+        m_widget->apply();
+}
+
+void UnConfiguredSettingsOptionPage::finish()
+{
+
+}
diff --git a/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.h b/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.h
new file mode 100644
index 0000000000000000000000000000000000000000..082c9f218b2c789f4994487354910701775eb9e9
--- /dev/null
+++ b/src/plugins/qt4projectmanager/unconfiguredsettingsoptionpage.h
@@ -0,0 +1,81 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#ifndef UNCONFIGUREDSETTINGSOPTIONPAGE_H
+#define UNCONFIGUREDSETTINGSOPTIONPAGE_H
+
+#include <coreplugin/dialogs/ioptionspage.h>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QCheckBox;
+QT_END_NAMESPACE
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class UnConfiguredSettingsWidget : public QWidget
+{
+public:
+    UnConfiguredSettingsWidget(QWidget *parent);
+    void apply();
+    bool matches(const QString &searchKeyword);
+private:
+    QComboBox *m_qtVersionComboBox;
+    QComboBox *m_toolchainComboBox;
+    QCheckBox *m_alwaysSkipCheckBox;
+};
+
+class UnConfiguredSettingsOptionPage : public Core::IOptionsPage
+{
+public:
+    UnConfiguredSettingsOptionPage();
+
+    QString id() const;
+    QString displayName() const;
+    QString category() const;
+    QString displayCategory() const;
+    QIcon categoryIcon() const;
+    bool matches(const QString &searcKeyword) const;
+
+    QWidget *createPage(QWidget *parent);
+    void apply();
+    void finish();
+private:
+    UnConfiguredSettingsWidget *m_widget;
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // UNCONFIGUREDSETTINGSOPTIONPAGE_H
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index c1d57acf38b66625cd746d71b18e757c72d08165..ecac81603d8ba23422bea731e8c2b9e9ca96b32b 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -35,6 +35,7 @@
 #include "ui_targetsetuppage.h"
 #include "buildconfigurationinfo.h"
 #include "qt4project.h"
+#include "qt4projectmanager.h"
 #include "qt4projectmanagerconstants.h"
 #include "qt4target.h"
 #include "qt4basetargetfactory.h"
@@ -42,6 +43,8 @@
 #include <extensionsystem/pluginmanager.h>
 #include <projectexplorer/task.h>
 #include <projectexplorer/taskhub.h>
+#include <projectexplorer/toolchainmanager.h>
+#include <projectexplorer/toolchain.h>
 #include <qtsupport/qtversionfactory.h>
 #include <utils/qtcassert.h>
 #include <utils/qtcprocess.h>
@@ -54,6 +57,7 @@ using namespace Qt4ProjectManager;
 TargetSetupPage::TargetSetupPage(QWidget *parent) :
     QWizardPage(parent),
     m_importSearch(false),
+    m_useScrollArea(true),
     m_maximumQtVersionNumber(INT_MAX, INT_MAX, INT_MAX),
     m_spacer(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding)),
     m_ui(new Internal::Ui::TargetSetupPage)
@@ -61,11 +65,14 @@ TargetSetupPage::TargetSetupPage(QWidget *parent) :
     m_ui->setupUi(this);
     QWidget *centralWidget = new QWidget(this);
     m_ui->scrollArea->setWidget(centralWidget);
-    m_layout = new QVBoxLayout;
-    centralWidget->setLayout(m_layout);
-    m_layout->addSpacerItem(m_spacer);
+    centralWidget->setLayout(new QVBoxLayout);
+    m_ui->centralWidget->setLayout(new QVBoxLayout);
+    m_ui->centralWidget->layout()->setMargin(0);
 
     setTitle(tr("Target Setup"));
+
+    connect(m_ui->descriptionLabel, SIGNAL(linkActivated(QString)),
+            this, SIGNAL(noteTextLinkActivated()));
 }
 
 void TargetSetupPage::initializePage()
@@ -130,6 +137,13 @@ void TargetSetupPage::setImportSearch(bool b)
 
 void TargetSetupPage::setupWidgets()
 {
+    QLayout *layout = 0;
+    if (m_useScrollArea)
+        layout = m_ui->scrollArea->widget()->layout();
+    else
+        layout = m_ui->centralWidget->layout();
+
+    // Target Page setup
     QList<Qt4BaseTargetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>();
     bool atLeastOneTargetSelected = false;
     foreach (Qt4BaseTargetFactory *factory, factories) {
@@ -159,7 +173,7 @@ void TargetSetupPage::setupWidgets()
                 atLeastOneTargetSelected |= selectTarget;
                 m_widgets.insert(id, widget);
                 m_factories.insert(widget, factory);
-                m_layout->addWidget(widget);
+                layout->addWidget(widget);
                 connect(widget, SIGNAL(selectedToggled()),
                         this, SIGNAL(completeChanged()));
                 connect(widget, SIGNAL(newImportBuildConfiguration(BuildConfigurationInfo)),
@@ -173,15 +187,17 @@ void TargetSetupPage::setupWidgets()
             widget->setTargetSelected(true);
     }
 
-
-    m_layout->addSpacerItem(m_spacer);
+    if (m_useScrollArea)
+        layout->addItem(m_spacer);
     if (m_widgets.isEmpty()) {
         // Oh no one can create any targets
         m_ui->scrollArea->setVisible(false);
+        m_ui->centralWidget->setVisible(false);
         m_ui->descriptionLabel->setVisible(false);
         m_ui->noValidQtVersionsLabel->setVisible(true);
     } else {
-        m_ui->scrollArea->setVisible(true);
+        m_ui->scrollArea->setVisible(m_useScrollArea);
+        m_ui->centralWidget->setVisible(!m_useScrollArea);
         m_ui->descriptionLabel->setVisible(true);
         m_ui->noValidQtVersionsLabel->setVisible(false);
     }
@@ -189,11 +205,17 @@ void TargetSetupPage::setupWidgets()
 
 void TargetSetupPage::deleteWidgets()
 {
+    QLayout *layout = 0;
+    if (m_useScrollArea)
+        layout = m_ui->scrollArea->widget()->layout();
+    else
+        layout = m_ui->centralWidget->layout();
     foreach (Qt4TargetSetupWidget *widget, m_widgets)
         delete widget;
     m_widgets.clear();
     m_factories.clear();
-    m_layout->removeItem(m_spacer);
+    if (m_useScrollArea)
+        layout->removeItem(m_spacer);
 }
 
 void TargetSetupPage::setProFilePath(const QString &path)
@@ -208,6 +230,11 @@ void TargetSetupPage::setProFilePath(const QString &path)
     setupWidgets();
 }
 
+void TargetSetupPage::setNoteText(const QString &text)
+{
+    m_ui->descriptionLabel->setText(text);
+}
+
 void TargetSetupPage::setupImportInfos()
 {
     if (m_importSearch)
@@ -251,14 +278,6 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
             project->addTarget(target);
     }
 
-    // Create a desktop target if nothing else was set up:
-    if (project->targets().isEmpty()) {
-        const QString desktopTargetId = QLatin1String(Constants::DESKTOP_TARGET_ID);
-        if (Qt4BaseTargetFactory *tf = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(desktopTargetId))
-            if (ProjectExplorer::Target *target = tf->create(project, desktopTargetId))
-                project->addTarget(target);
-    }
-
     // Select active target
     // a) Simulator target
     // b) Desktop target
@@ -276,5 +295,10 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
     if (activeTarget)
         project->setActiveTarget(activeTarget);
 
-    return !project->targets().isEmpty();
+    return true;
+}
+
+void TargetSetupPage::setUseScrollArea(bool b)
+{
+    m_useScrollArea = b;
 }
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
index ce7dd8fb030f6af9ce7745e81d11508eeb238c6e..b8351e3a3fd563aca0c376fe4c79671447552e77 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
@@ -91,11 +91,22 @@ public:
     /// Sets whether the TargetSetupPage looks on disk for builds of this project
     /// call this before \sa initializePage()
     void setImportSearch(bool b);
+
+    /// Sets whether the targetsetupage uses a scrollarea
+    /// to host the widgets from the factories
+    /// call this before \sa initializePage()
+    void setUseScrollArea(bool b);
+
     bool isComplete() const;
     bool setupProject(Qt4ProjectManager::Qt4Project *project);
     bool isTargetSelected(const QString &id) const;
     void setProFilePath(const QString &dir);
 
+    /// Overrides the summary text of the targetsetuppage
+    void setNoteText(const QString &text);
+signals:
+    void noteTextLinkActivated();
+
 private slots:
     void newImportBuildConfiguration(const BuildConfigurationInfo &info);
 
@@ -109,6 +120,7 @@ private:
     QSet<QString> m_requiredTargetFeatures;
     Core::FeatureSet m_requiredQtFeatures;
     bool m_importSearch;
+    bool m_useScrollArea;
     QtSupport::QtVersionNumber m_minimumQtVersionNumber;
     QtSupport::QtVersionNumber m_maximumQtVersionNumber;
     QString m_proFilePath;
@@ -116,7 +128,6 @@ private:
     QMap<QString, Qt4TargetSetupWidget *> m_widgets;
     QHash<Qt4TargetSetupWidget *, Qt4BaseTargetFactory *> m_factories;
 
-    QVBoxLayout *m_layout;
     QSpacerItem *m_spacer;
     Internal::Ui::TargetSetupPage *m_ui;
     QList<BuildConfigurationInfo> m_importInfos;
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.ui b/src/plugins/qt4projectmanager/wizards/targetsetuppage.ui
index 62b8f0f20ddace0f6bc807cd8b94d9317bceacfb..94aa736606a1d8f6271a52b85958a003f1dbaa11 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.ui
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.ui
@@ -6,79 +6,86 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>555</width>
-    <height>450</height>
+    <width>230</width>
+    <height>218</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
    <string>Set up Targets for Your Project</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="noValidQtVersionsLabel">
-     <property name="text">
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;No valid Qt versions found.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Please add a Qt version in &lt;span style=&quot; font-style:italic;&quot;&gt;Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run&lt;/span&gt; (&lt;span style=&quot; font-style:italic;&quot;&gt;Qt Creator &amp;gt; Preferences &amp;gt; Build &amp;amp; Run &lt;/span&gt;on Mac OS) or via the maintenance tool of the SDK.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
-      <widget class="QLabel" name="descriptionLabel">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text">
-        <string>Qt Creator can set up the following targets:</string>
-       </property>
-       <property name="wordWrap">
-        <bool>false</bool>
-       </property>
-       <property name="textInteractionFlags">
-        <set>Qt::NoTextInteraction</set>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeType">
-        <enum>QSizePolicy::MinimumExpanding</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>13</width>
-         <height>13</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <property name="margin">
+    <number>0</number>
+   </property>
    <item>
-    <widget class="QScrollArea" name="scrollArea">
-     <property name="widgetResizable">
-      <bool>true</bool>
-     </property>
-     <widget class="QWidget" name="scrollAreaWidgetContents">
-      <property name="geometry">
-       <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>541</width>
-        <height>358</height>
-       </rect>
+    <widget class="QWidget" name="setupTargetPage" native="true">
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <property name="margin">
+       <number>0</number>
       </property>
-      <layout class="QVBoxLayout" name="verticalLayout_2"/>
-     </widget>
+      <item>
+       <widget class="QLabel" name="descriptionLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Qt Creator can set up the following targets:</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="textInteractionFlags">
+         <set>Qt::LinksAccessibleByMouse</set>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="noValidQtVersionsLabel">
+        <property name="text">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;No valid Qt versions found.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Please add a Qt version in &lt;span style=&quot; font-style:italic;&quot;&gt;Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run&lt;/span&gt; (&lt;span style=&quot; font-style:italic;&quot;&gt;Qt Creator &amp;gt; Preferences &amp;gt; Build &amp;amp; Run &lt;/span&gt;on Mac OS) or via the maintenance tool of the SDK.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QWidget" name="centralWidget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QScrollArea" name="scrollArea">
+        <property name="widgetResizable">
+         <bool>true</bool>
+        </property>
+        <widget class="QWidget" name="scrollAreaWidgetContents">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>0</y>
+           <width>224</width>
+           <height>66</height>
+          </rect>
+         </property>
+        </widget>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
   </layout>
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index 8e11af254e40f08b10eedd0ab89f964c4a5bda31..611d82f379ff4f94e589701be8a33f9d09c647ca 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -75,7 +75,6 @@ public:
 
     BaseQtVersion *qtVersionForQMakeBinary(const Utils::FileName &qmakePath);
 
-    // Used by the projectloadwizard
     void addVersion(BaseQtVersion *version);
     void removeVersion(BaseQtVersion *version);