diff --git a/0001-Make-the-welcome-screen-into-plugins.patch b/0001-Make-the-welcome-screen-into-plugins.patch
new file mode 100644
index 0000000000000000000000000000000000000000..84af98cdb9784056ad4d1b87f9dcf0c2fae18d3d
--- /dev/null
+++ b/0001-Make-the-welcome-screen-into-plugins.patch
@@ -0,0 +1,13132 @@
+From 2e2d936b4afbec13dfc5f08f0f3998398b7de5ab Mon Sep 17 00:00:00 2001
+From: Daniel Molkentin <daniel.molkentin@nokia.com>
+Date: Mon, 27 Jul 2009 13:55:30 +0200
+Subject: [PATCH] Make the welcome screen into plugins.
+
+This removes the all hard dependencies to and from welcome screen,
+except the one to the core plugin. More in detail:
+
+- Add IWelcomePage to add a tab to the welcome screen
+- Move tabs in the modules where they belong
+- Enables QHelpManager to open help fullscreen and contextually
+- "Getting Started" moves to Qt4ProjectManager
+- Projects & Sessions (aka "Develop") moves to ProjectExplorer
+- "Community" remains in the welcome plugin for simplicity
+---
+ 0001-Make-the-welcome-screen-into-plugins.patch    | 4384 ++++++++++++++++++++
+ ...-the-welcome-screen-into-plugins.patch.modified | 4364 +++++++++++++++++++
+ src/libs/extensionsystem/extensionsystem.pro       |   10 +-
+ src/libs/extensionsystem/iwelcomepage.cpp          |    8 +
+ src/libs/extensionsystem/iwelcomepage.h            |   31 +
+ src/libs/utils/welcomemodetreewidget.cpp           |   14 +
+ src/libs/utils/welcomemodetreewidget.h             |   11 +
+ src/plugins/coreplugin/coreplugin.h                |    5 -
+ src/plugins/help/Help.pluginspec                   |    1 -
+ src/plugins/help/help.pro                          |    1 -
+ src/plugins/help/helpplugin.cpp                    |   36 +-
+ src/plugins/help/helpplugin.h                      |   17 +-
+ src/plugins/plugins.pro                            |    3 -
+ .../projectexplorer/ProjectExplorer.pluginspec     |    1 -
+ src/plugins/projectexplorer/projectexplorer.cpp    |   36 +-
+ src/plugins/projectexplorer/projectexplorer.h      |    6 +-
+ src/plugins/projectexplorer/projectexplorer.pro    |   11 +-
+ .../projectexplorer_dependencies.pri               |    1 -
+ src/plugins/projectexplorer/projectwelcomepage.cpp |   48 +
+ src/plugins/projectexplorer/projectwelcomepage.h   |   58 +
+ .../projectexplorer/projectwelcomepagewidget.cpp   |  157 +
+ .../projectexplorer/projectwelcomepagewidget.h     |   81 +
+ .../projectexplorer/projectwelcomepagewidget.ui    |  259 ++
+ .../projectexplorer/projectwelcomeplugin.ui        |   21 +
+ .../qt4projectmanager/Qt4ProjectManager.pluginspec |    1 -
+ .../gettingstartedwelcomepage.cpp                  |   47 +
+ .../qt4projectmanager/gettingstartedwelcomepage.h  |   56 +
+ .../gettingstartedwelcomepagewidget.cpp            |  259 ++
+ .../gettingstartedwelcomepagewidget.h              |   69 +
+ .../gettingstartedwelcomepagewidget.ui             |  348 ++
+ .../qt4projectmanager/qt4projectmanager.pro        |   14 +-
+ .../qt4projectmanager_dependencies.pri             |    1 -
+ .../qt4projectmanager/qt4projectmanagerplugin.cpp  |   13 +-
+ .../qt4projectmanager/qt4projectmanagerplugin.h    |    2 +
+ src/plugins/qt4projectmanager/qtversionmanager.cpp |    9 +-
+ src/plugins/qt4projectmanager/qtversionmanager.h   |    5 +-
+ src/plugins/welcome/communitywelcomepage.cpp       |   48 +
+ src/plugins/welcome/communitywelcomepage.h         |   60 +
+ src/plugins/welcome/communitywelcomepagewidget.cpp |   79 +
+ src/plugins/welcome/communitywelcomepagewidget.h   |   64 +
+ src/plugins/welcome/communitywelcomepagewidget.ui  |  195 +
+ src/plugins/welcome/rssfetcher.cpp                 |    2 +-
+ src/plugins/welcome/rssfetcher.h                   |    2 +
+ src/plugins/welcome/welcome.pro                    |   12 +-
+ src/plugins/welcome/welcomemode.cpp                |  394 +--
+ src/plugins/welcome/welcomemode.h                  |   35 +-
+ src/plugins/welcome/welcomemode.ui                 |  872 +----
+ src/plugins/welcome/welcomeplugin.cpp              |   15 +-
+ src/plugins/welcome/welcomeplugin.h                |    5 +
+ 49 files changed, 10872 insertions(+), 1299 deletions(-)
+ create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch
+ create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch.modified
+ create mode 100644 src/libs/extensionsystem/iwelcomepage.cpp
+ create mode 100644 src/libs/extensionsystem/iwelcomepage.h
+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp
+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h
+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp
+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h
+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui
+ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui
+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
+ create mode 100644 src/plugins/welcome/communitywelcomepage.cpp
+ create mode 100644 src/plugins/welcome/communitywelcomepage.h
+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp
+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h
+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui
+
+diff --git a/0001-Make-the-welcome-screen-into-plugins.patch b/0001-Make-the-welcome-screen-into-plugins.patch
+new file mode 100644
+index 0000000..7f838eb
+--- /dev/null
++++ b/0001-Make-the-welcome-screen-into-plugins.patch
+@@ -0,0 +1,4384 @@
++From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001
++From: Daniel Molkentin <daniel.molkentin@nokia.com>
++Date: Mon, 27 Jul 2009 13:55:30 +0200
++Subject: [PATCH] Make the welcome screen into plugins.
++
++This removes the all hard dependencies to and from welcome screen,
++except the one to the core plugin. More in detail:
++
++- Add IWelcomePlugin to add a tab to the welcome screen
++- Move tabs in the modules where they belong
++- Enables QHelpManager to open help fullscreen and contextually
++- "Getting Started" moves to Qt4ProjectManager
++- Projects & Sessions (aka "Develop") moves to ProjectExplorer
++- "Community" remains in the welcome plugin for simplicity
++---
++ src/libs/aggregation/aggregation.pri               |    2 +
++ src/libs/extensionsystem/extensionsystem.pro       |   10 +-
++ src/libs/extensionsystem/iwelcomeplugin.cpp        |    8 +
++ src/libs/extensionsystem/iwelcomeplugin.h          |   31 +
++ src/libs/extensionsystem/pluginmanager.cpp         |    1 +
++ src/libs/utils/welcomemodetreewidget.cpp           |    2 +
++ src/plugins/coreplugin/coreplugin.h                |    5 -
++ src/plugins/help/Help.pluginspec                   |    1 -
++ src/plugins/help/help.pro                          |    1 -
++ src/plugins/help/helpplugin.cpp                    |   36 +-
++ src/plugins/help/helpplugin.h                      |   17 +-
++ src/plugins/plugins.pro                            |    3 -
++ .../projectexplorer/ProjectExplorer.pluginspec     |    1 -
++ src/plugins/projectexplorer/projectexplorer.cpp    |   38 +-
++ src/plugins/projectexplorer/projectexplorer.h      |    6 +-
++ src/plugins/projectexplorer/projectexplorer.pro    |   11 +-
++ .../projectexplorer_dependencies.pri               |    1 -
++ src/plugins/projectexplorer/projectwelcomepage.cpp |  170 ++++
++ src/plugins/projectexplorer/projectwelcomepage.h   |   81 ++
++ src/plugins/projectexplorer/projectwelcomepage.ui  |  254 ++++++
++ .../projectexplorer/projectwelcomeplugin.cpp       |   48 ++
++ src/plugins/projectexplorer/projectwelcomeplugin.h |   58 ++
++ .../projectexplorer/projectwelcomeplugin.ui        |   21 +
++ .../qt4projectmanager/Qt4ProjectManager.pluginspec |    1 -
++ .../gettingstartedwelcomepage.cpp                  |  271 ++++++
++ .../qt4projectmanager/gettingstartedwelcomepage.h  |   69 ++
++ .../qt4projectmanager/gettingstartedwelcomepage.ui |  343 ++++++++
++ .../gettingstartedwelcomeplugin.cpp                |   47 ++
++ .../gettingstartedwelcomeplugin.h                  |   56 ++
++ .../qt4projectmanager/qt4projectmanager.pro        |   14 +-
++ .../qt4projectmanager_dependencies.pri             |    1 -
++ .../qt4projectmanager/qt4projectmanagerplugin.cpp  |   13 +-
++ .../qt4projectmanager/qt4projectmanagerplugin.h    |    2 +
++ src/plugins/qt4projectmanager/qtversionmanager.cpp |    9 +-
++ src/plugins/qt4projectmanager/qtversionmanager.h   |    5 +-
++ src/plugins/welcome/communitywelcomepage.cpp       |   93 +++
++ src/plugins/welcome/communitywelcomepage.h         |   64 ++
++ src/plugins/welcome/communitywelcomepage.ui        |  190 +++++
++ src/plugins/welcome/communitywelcomeplugin.cpp     |   47 ++
++ src/plugins/welcome/communitywelcomeplugin.h       |   60 ++
++ src/plugins/welcome/rssfetcher.cpp                 |    2 +-
++ src/plugins/welcome/rssfetcher.h                   |    2 +
++ src/plugins/welcome/welcome.pro                    |   11 +-
++ src/plugins/welcome/welcomemode.cpp                |  409 ++-------
++ src/plugins/welcome/welcomemode.h                  |   35 +-
++ src/plugins/welcome/welcomemode.ui                 |  872 +-------------------
++ src/plugins/welcome/welcomeplugin.cpp              |   15 +-
++ src/plugins/welcome/welcomeplugin.h                |    5 +
++ 48 files changed, 2142 insertions(+), 1300 deletions(-)
++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp
++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.ui
++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.cpp
++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h
++ create mode 100644 src/plugins/welcome/communitywelcomepage.cpp
++ create mode 100644 src/plugins/welcome/communitywelcomepage.h
++ create mode 100644 src/plugins/welcome/communitywelcomepage.ui
++ create mode 100644 src/plugins/welcome/communitywelcomeplugin.cpp
++ create mode 100644 src/plugins/welcome/communitywelcomeplugin.h
++
++diff --git a/src/libs/aggregation/aggregation.pri b/src/libs/aggregation/aggregation.pri
++index a6c48c5..14f9d06 100644
++--- a/src/libs/aggregation/aggregation.pri
+++++ b/src/libs/aggregation/aggregation.pri
++@@ -1 +1,3 @@
++ LIBS *= -l$$qtLibraryTarget(Aggregation)
+++HEADERS += 
+++SOURCES += 
++diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro
++index 81f3bc8..ea5574d 100644
++--- a/src/libs/extensionsystem/extensionsystem.pro
+++++ b/src/libs/extensionsystem/extensionsystem.pro
++@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY
++ include(../../qtcreatorlibrary.pri)
++ include(extensionsystem_dependencies.pri)
++ 
++-unix:!macx:!freebsd* {
++-  LIBS += -ldl
++-}
+++unix:!macx:!freebsd*:LIBS += -ldl
++ 
++ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\"
++ 
++@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \
++     pluginspec_p.h \
++     pluginview.h \
++     pluginview_p.h \
++-    optionsparser.h
+++    optionsparser.h \
+++    iwelcomeplugin.h
++ SOURCES += pluginerrorview.cpp \
++     plugindetailsview.cpp \
++     iplugin.cpp \
++     pluginmanager.cpp \
++     pluginspec.cpp \
++     pluginview.cpp \
++-    optionsparser.cpp
+++    optionsparser.cpp \
+++    iwelcomeplugin.cpp
++ FORMS += pluginview.ui \
++     pluginerrorview.ui \
++     plugindetailsview.ui
++diff --git a/src/libs/extensionsystem/iwelcomeplugin.cpp b/src/libs/extensionsystem/iwelcomeplugin.cpp
++new file mode 100644
++index 0000000..345d77b
++--- /dev/null
+++++ b/src/libs/extensionsystem/iwelcomeplugin.cpp
++@@ -0,0 +1,8 @@
+++#include "iwelcomeplugin.h"
+++
+++using namespace ExtensionSystem;
+++
+++IWelcomePlugin::IWelcomePlugin()
+++{
+++
+++}
++diff --git a/src/libs/extensionsystem/iwelcomeplugin.h b/src/libs/extensionsystem/iwelcomeplugin.h
++new file mode 100644
++index 0000000..33546ed
++--- /dev/null
+++++ b/src/libs/extensionsystem/iwelcomeplugin.h
++@@ -0,0 +1,31 @@
+++#ifndef IWELCOMEPLUGIN_H
+++#define IWELCOMEPLUGIN_H
+++
+++
+++#include "extensionsystem_global.h"
+++
+++#include <QObject>
+++
+++namespace ExtensionSystem {
+++
+++class IWelcomePluginPrivate;
+++
+++class EXTENSIONSYSTEM_EXPORT IWelcomePlugin : public QObject
+++{
+++    Q_OBJECT
+++
+++public:
+++    IWelcomePlugin();
+++
+++    virtual QWidget *page() = 0;
+++    virtual QString title() const = 0;
+++    virtual int priority() const { return 0; }
+++
+++private:
+++    // not used atm
+++    IWelcomePluginPrivate *m_d;
+++};
+++
+++}
+++
+++#endif // IWELCOMEPLUGIN_H
++diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
++index e79d603..602314a 100644
++--- a/src/libs/extensionsystem/pluginmanager.cpp
+++++ b/src/libs/extensionsystem/pluginmanager.cpp
++@@ -34,6 +34,7 @@
++ #include "optionsparser.h"
++ #include "iplugin.h"
++ 
+++
++ #include <QtCore/QMetaProperty>
++ #include <QtCore/QDir>
++ #include <QtCore/QTextStream>
++diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp
++index 26d55a3..7ea7373 100644
++--- a/src/libs/utils/welcomemodetreewidget.cpp
+++++ b/src/libs/utils/welcomemodetreewidget.cpp
++@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) :
++     m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png"));
++     connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
++             SLOT(slotItemClicked(QTreeWidgetItem *)));
+++
+++    viewport()->setAutoFillBackground(false);
++ }
++ 
++ WelcomeModeTreeWidget::~WelcomeModeTreeWidget()
++diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
++index 04e5be4..ce487fb 100644
++--- a/src/plugins/coreplugin/coreplugin.h
+++++ b/src/plugins/coreplugin/coreplugin.h
++@@ -33,10 +33,6 @@
++ #include <extensionsystem/iplugin.h>
++ 
++ namespace Core {
++-    class IMode;
++-}
++-
++-namespace Core {
++ namespace Internal {
++ 
++ class EditMode;
++@@ -59,7 +55,6 @@ public slots:
++ 
++ private:
++     MainWindow *m_mainWindow;
++-    Core::IMode *m_welcomeMode;
++     EditMode *m_editMode;
++ };
++ 
++diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec
++index d7ccc07..29f1b46 100644
++--- a/src/plugins/help/Help.pluginspec
+++++ b/src/plugins/help/Help.pluginspec
++@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="Core" version="1.2.80"/>
++         <dependency name="Find" version="1.2.80"/>
++         <dependency name="QuickOpen" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro
++index 1f5ec55..b733a1f 100644
++--- a/src/plugins/help/help.pro
+++++ b/src/plugins/help/help.pro
++@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ include(../../plugins/find/find.pri)
++ include(../../plugins/quickopen/quickopen.pri)
++-include(../../plugins/welcome/welcome.pri)
++ QT += network
++ CONFIG += help
++ DEFINES += QT_CLUCENE_SUPPORT \
++diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
++index f6e8db8..2ff11c8 100644
++--- a/src/plugins/help/helpplugin.cpp
+++++ b/src/plugins/help/helpplugin.cpp
++@@ -87,8 +87,8 @@
++ using namespace Help;
++ using namespace Help::Internal;
++ 
++-HelpManager::HelpManager(QHelpEngine *helpEngine)
++-    : m_helpEngine(helpEngine)
+++HelpManager::HelpManager(Internal::HelpPlugin* plugin)
+++    : m_plugin(plugin)
++ {
++ }
++ 
++@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
++ {
++     bool needsSetup = false;
++     {
++-        QHelpEngineCore hc(m_helpEngine->collectionFile());
+++        QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile());
++         if (!hc.setupData())
++             qWarning() << "Could not initialize help engine:" << hc.error();
++         foreach (const QString &fileName, fileNames) {
++@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
++         }
++     }
++     if (needsSetup)
++-        m_helpEngine->setupData();
+++        m_plugin->helpEngine()->setupData();
+++}
+++
+++void HelpManager::openHelpPage(const QString& url)
+++{
+++    m_plugin->openHelpPage(url);
+++}
+++
+++void HelpManager::openContextHelpPage(const QString& url)
+++{
+++    m_plugin->openContextHelpPage(url);
++ }
++ 
++ HelpPlugin::HelpPlugin() :
++@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
++     connect(m_helpEngine, SIGNAL(setupFinished()), this,
++         SLOT(updateFilterComboBox()));
++ 
++-    addAutoReleasedObject(new HelpManager(m_helpEngine));
+++    addAutoReleasedObject(new HelpManager(this));
++ 
++     m_filterSettingsPage = new FilterSettingsPage(m_helpEngine);
++     addAutoReleasedObject(m_filterSettingsPage);
++@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
++     return true;
++ }
++ 
+++QHelpEngine* HelpPlugin::helpEngine() const
+++{
+++    return m_helpEngine;
+++}
+++
++ void HelpPlugin::createRightPaneSideBar()
++ {
++     QAction *switchToHelpMode = new QAction("Go to Help Mode", this);
++@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized()
++     updateFilterComboBox();
++     m_bookmarkManager->setupBookmarkModels();
++ 
++-    using namespace Core::Internal;
++-    using namespace Core::Constants;
++-    Welcome::WelcomeMode *welcomeMode =
++-        qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME));
++-    if (welcomeMode) {
++-        connect(welcomeMode, SIGNAL(openHelpPage(QString)), this,
++-            SLOT(openHelpPage(QString)));
++-        connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this,
++-            SLOT(openContextHelpPage(QString)));
++-    }
++-
++ #if !defined(QT_NO_WEBKIT)
++     QWebSettings* webSettings = QWebSettings::globalSettings();
++     QFont font(webSettings->fontFamily(QWebSettings::StandardFont),
++diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
++index 6ab78cf..10cf1fd 100644
++--- a/src/plugins/help/helpplugin.h
+++++ b/src/plugins/help/helpplugin.h
++@@ -63,6 +63,7 @@ class SideBarItem;
++ namespace Help {
++ namespace Internal {
++     class CentralWidget;
+++    class HelpPlugin;
++ }
++ 
++ namespace Constants {
++@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject
++ {
++     Q_OBJECT
++ public:
++-    HelpManager(QHelpEngine *helpEngine);
+++    HelpManager(Internal::HelpPlugin*);
++ 
++     void registerDocumentation(const QStringList &fileNames);
+++    void openHelpPage(const QString& url);
+++    void openContextHelpPage(const QString &url);
++ 
++ private:
++-    QHelpEngine *m_helpEngine;
+++    Internal::HelpPlugin *m_plugin;
++ };
++ 
++ namespace Internal {
++@@ -108,6 +111,12 @@ public:
++     void setIndexFilter(const QString &filter);
++     QString indexFilter() const;
++ 
+++    void openHelpPage(const QUrl& url);
+++    void openHelpPage(const QString& url);
+++    void openContextHelpPage(const QString &url);
+++
+++    QHelpEngine* helpEngine() const;
+++
++ private slots:
++     void modeChanged(Core::IMode *mode);
++     void activateContext();
++@@ -128,10 +137,6 @@ private slots:
++     void slotHideRightPane();
++     void copyFromSideBar();
++ 
++-    void openHelpPage(const QUrl& url);
++-    void openHelpPage(const QString& url);
++-    void openContextHelpPage(const QString &url);
++-
++     void updateSideBarSource();
++     void updateSideBarSource(const QUrl &newUrl);
++ 
++diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
++index 6ef52c1..b8ae5ec 100644
++--- a/src/plugins/plugins.pro
+++++ b/src/plugins/plugins.pro
++@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen
++ plugin_projectexplorer.depends += plugin_find
++ plugin_projectexplorer.depends += plugin_coreplugin
++ plugin_projectexplorer.depends += plugin_texteditor
++-plugin_projectexplorer.depends += plugin_welcome
++ 
++ plugin_qt4projectmanager.subdir = qt4projectmanager
++ plugin_qt4projectmanager.depends = plugin_texteditor
++@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools
++ plugin_qt4projectmanager.depends += plugin_cppeditor
++ plugin_qt4projectmanager.depends += plugin_help
++ plugin_qt4projectmanager.depends += plugin_designer
++-plugin_qt4projectmanager.depends += plugin_welcome
++ 
++ plugin_quickopen.subdir = quickopen
++ plugin_quickopen.depends = plugin_coreplugin
++@@ -144,7 +142,6 @@ plugin_help.subdir = help
++ plugin_help.depends = plugin_find
++ plugin_help.depends += plugin_quickopen
++ plugin_help.depends += plugin_coreplugin
++-plugin_help.depends += plugin_welcome
++ 
++ plugin_resourceeditor.subdir = resourceeditor
++ plugin_resourceeditor.depends = plugin_coreplugin
++diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
++index 6a66cfe..8b5a7c3 100644
++--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec
+++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
++@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="Find" version="1.2.80"/>
++         <dependency name="QuickOpen" version="1.2.80"/>
++         <dependency name="TextEditor" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
++index f10b628..101a2e8 100644
++--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++++ b/src/plugins/projectexplorer/projectexplorer.cpp
++@@ -57,6 +57,8 @@
++ #include "sessiondialog.h"
++ #include "buildparserfactory.h"
++ #include "projectexplorersettingspage.h"
+++#include "projectwelcomeplugin.h"
+++#include "projectwelcomepage.h"
++ 
++ #include <coreplugin/basemode.h>
++ #include <coreplugin/coreconstants.h>
++@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin()
++ 
++ ProjectExplorerPlugin::~ProjectExplorerPlugin()
++ {
+++    removeObject(m_welcomePlugin);
++     removeObject(this);
++ }
++ 
++@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++     Core::ICore *core = Core::ICore::instance();
++     Core::ActionManager *am = core->actionManager();
++ 
+++    m_welcomePlugin = new ProjectWelcomePlugin;
+++    m_welcomePage = qobject_cast<Internal::ProjectWelcomePage*>(m_welcomePlugin->page());
+++    Q_ASSERT(m_welcomePage);
+++    connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
+++    addObject(m_welcomePlugin);
++     addObject(this);
++ 
++     connect(core->fileManager(), SIGNAL(currentFileChanged(QString)),
++@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++         m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool();
++     }
++ 
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
++-        (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) {
++-        connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
++-    }
++     connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager()));
++     connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject()));
++ #if 0
++@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++             this, SLOT(determineSessionToRestoreAtStartup()));
++     connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
++ 
+++    updateWelcomePage();
+++
++     return true;
++ }
++ 
++@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager()
++     Core::ModeManager *modeManager = Core::ModeManager::instance();
++     Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME);
++     if (modeManager->currentMode() == welcomeMode)
++-    {
++-        updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode));
++-    }
+++        updateWelcomePage();
++ }
++ 
++ void ProjectExplorerPlugin::setStartupProject(Project *project)
++@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const
++ }
++ 
++ // update welcome page
++-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode)
+++void ProjectExplorerPlugin::updateWelcomePage()
++ {
++-    Welcome::WelcomeMode::WelcomePageData welcomePageData;
+++    ProjectWelcomePage::WelcomePageData welcomePageData;
++     welcomePageData.sessionList =  m_session->sessions();
++     welcomePageData.activeSession = m_session->activeSession();
++     welcomePageData.previousSession = m_session->lastSession();
++     welcomePageData.projectList = m_recentProjects;
++-    welcomeMode->updateWelcomePage(welcomePageData);
+++    m_welcomePage->updateWelcomePage(welcomePageData);
++ }
++ 
++-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
+++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *)
++ {
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode))
++-        updateWelcomePage(welcomeMode);
+++        updateWelcomePage();
++ }
++ 
++ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup()
++@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession()
++     // update welcome page
++     Core::ModeManager *modeManager = Core::ModeManager::instance();
++     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*)));
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) {
++-        updateWelcomePage(welcomeMode);
++-        connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
++-        connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
++-    }
++-
+++    connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
+++    connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
+++    
++     Core::ICore::instance()->openFiles(arguments);
++     updateActions();
++ 
++diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
++index 0f781ea..48f8c27 100644
++--- a/src/plugins/projectexplorer/projectexplorer.h
+++++ b/src/plugins/projectexplorer/projectexplorer.h
++@@ -72,6 +72,8 @@ class ApplicationOutput;
++ class OutputPane;
++ class ProjectWindow;
++ class ProjectFileFactory;
+++class ProjectWelcomePlugin;
+++class ProjectWelcomePage;
++ 
++ struct ProjectExplorerSettings
++ {
++@@ -209,7 +211,7 @@ private:
++ 
++     void updateActions();
++     void addToRecentProjects(const QString &fileName, const QString &displayName);
++-    void updateWelcomePage(Welcome::WelcomeMode *welcomeMode);
+++    void updateWelcomePage();
++     Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const;
++ 
++     static ProjectExplorerPlugin *m_instance;
++@@ -279,6 +281,8 @@ private:
++     QString m_runMode;
++     QString m_projectFilterString;
++     Internal::ProjectExplorerSettings m_projectExplorerSettings;
+++    Internal::ProjectWelcomePlugin *m_welcomePlugin;
+++    Internal::ProjectWelcomePage *m_welcomePage;
++ };
++ 
++ namespace Internal {
++diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
++index ffb0b08..4a954cc 100644
++--- a/src/plugins/projectexplorer/projectexplorer.pro
+++++ b/src/plugins/projectexplorer/projectexplorer.pro
++@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \
++     filewatcher.h \
++     debugginghelper.h \
++     abstractmakestep.h \
++-    projectexplorersettingspage.h
+++    projectexplorersettingspage.h \
+++    projectwelcomeplugin.h \
+++    projectwelcomepage.h
++ SOURCES += projectexplorer.cpp \
++     projectwindow.cpp \
++     buildmanager.cpp \
++@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \
++     filewatcher.cpp \
++     debugginghelper.cpp \
++     abstractmakestep.cpp \
++-    projectexplorersettingspage.cpp
+++    projectexplorersettingspage.cpp \
+++    projectwelcomeplugin.cpp \
+++    projectwelcomepage.cpp
++ FORMS += processstep.ui \
++     editorsettingspropertiespage.ui \
++     runsettingspropertiespage.ui \
++@@ -119,7 +123,8 @@ FORMS += processstep.ui \
++     projectwizardpage.ui \
++     buildstepspage.ui \
++     removefiledialog.ui \
++-    projectexplorersettingspage.ui
+++    projectexplorersettingspage.ui \
+++    projectwelcomepage.ui
++ win32 { 
++     SOURCES += applicationlauncher_win.cpp \
++         winguiprocess.cpp
++diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
++index ecbb7a4..674c8bb 100644
++--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri
+++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
++@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri)
++ include(../../plugins/find/find.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ include(../../plugins/texteditor/texteditor.pri)
++-include(../../plugins/welcome/welcome.pri)
++diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
++new file mode 100644
++index 0000000..ff50f38
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
++@@ -0,0 +1,170 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "projectwelcomepage.h"
+++#include "ui_projectwelcomepage.h"
+++
+++#include <coreplugin/coreconstants.h>
+++#include <coreplugin/uniqueidmanager.h>
+++#include <coreplugin/modemanager.h>
+++#include <coreplugin/icore.h>
+++#include <coreplugin/dialogs/iwizard.h>
+++
+++#include <QtCore/QFileInfo>
+++#include <QtCore/QDir>
+++#include <QtCore/QPair>
+++#include <QtGui/QLabel>
+++#include <QtGui/QTreeWidgetItem>
+++
+++#include <QtCore/QDebug>
+++
+++using namespace ProjectExplorer::Internal;
+++
+++static QString formatTitleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++bool ProjectWelcomePage::WelcomePageData::operator==(const WelcomePageData &rhs) const
+++{
+++    return previousSession == rhs.previousSession
+++        && activeSession   == rhs.activeSession
+++        && sessionList     == rhs.sessionList
+++        && projectList     == rhs.projectList;
+++}
+++
+++bool ProjectWelcomePage::WelcomePageData::operator!=(const WelcomePageData &rhs) const
+++{
+++    return previousSession != rhs.previousSession
+++        || activeSession   != rhs.activeSession
+++        || sessionList     != rhs.sessionList
+++        || projectList     != rhs.projectList;
+++}
+++
+++QDebug operator<<(QDebug dgb, const ProjectWelcomePage::WelcomePageData &d)
+++{
+++    dgb.nospace() << "PreviousSession=" << d.previousSession
+++        << " activeSession=" << d.activeSession
+++        << " sessionList=" << d.sessionList
+++        << " projectList=" << d.projectList;
+++    return dgb;
+++}
+++
+++ProjectWelcomePage::ProjectWelcomePage(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::ProjectWelcomePage)
+++{
+++    ui->setupUi(this);
+++    ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project")));
+++    ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session")));
+++    updateWelcomePage(WelcomePageData());
+++
+++    connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
+++    connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
+++    connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
+++    connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
+++
+++}
+++
+++ProjectWelcomePage::~ProjectWelcomePage()
+++{
+++    delete ui;
+++}
+++
+++void ProjectWelcomePage::updateWelcomePage(const WelcomePageData &welcomePageData)
+++{
+++    // Update only if data are modified
+++    if (welcomePageData == lastData)
+++        return;
+++    lastData = welcomePageData;
+++
+++    setUpdatesEnabled(false);
+++    ui->sessTreeWidget->clear();
+++    ui->projTreeWidget->clear();
+++
+++    if (welcomePageData.sessionList.count() > 0) {
+++        foreach (const QString &s, welcomePageData.sessionList) {
+++            QString str = s;
+++            if (s == welcomePageData.previousSession)
+++                str = tr("%1 (last session)").arg(s);
+++            ui->sessTreeWidget->addItem(str, s);
+++        }
+++        ui->sessTreeWidget->updateGeometry();
+++        ui->sessTreeWidget->show();
+++    } else {
+++        ui->sessTreeWidget->hide();
+++    }
+++
+++    typedef QPair<QString, QString> QStringPair;
+++    if (welcomePageData.projectList.count() > 0) {
+++        foreach (const QStringPair &it, welcomePageData.projectList) {
+++            QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first);
+++            const QFileInfo fi(it.first);
+++            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
+++        }
+++    } else {
+++        ui->projTreeWidget->hide();
+++    }
+++    ui->projTreeWidget->updateGeometry();
+++    setUpdatesEnabled(true);
+++}
+++
+++void ProjectWelcomePage::activateEditMode()
+++{
+++    Core::ModeManager *modeManager = Core::ModeManager::instance();
+++    if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME))
+++        modeManager->activateMode(Core::Constants::MODE_EDIT);
+++}
+++
+++
+++void ProjectWelcomePage::slotSessionClicked(const QString &data)
+++{
+++    emit requestSession(data);
+++    activateEditMode();
+++}
+++
+++void ProjectWelcomePage::slotProjectClicked(const QString &data)
+++{
+++    emit requestProject(data);
+++    activateEditMode();
+++}
+++
+++void ProjectWelcomePage::slotCreateNewProject()
+++{
+++    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
+++                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
+++}
++diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h
++new file mode 100644
++index 0000000..02e277d
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepage.h
++@@ -0,0 +1,81 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef PROJECTWELCOMEPAGE_H
+++#define PROJECTWELCOMEPAGE_H
+++
+++#include <QtGui/QWidget>
+++
+++
+++namespace ProjectExplorer {
+++    namespace Internal {
+++
+++
+++namespace Ui {
+++    class ProjectWelcomePage;
+++}
+++
+++class ProjectWelcomePage : public QWidget {
+++    Q_OBJECT
+++public:
+++    ProjectWelcomePage(QWidget *parent = 0);
+++    ~ProjectWelcomePage();
+++
+++    struct WelcomePageData{
+++        bool operator==(const WelcomePageData &rhs) const;
+++        bool operator!=(const WelcomePageData &rhs) const;
+++
+++        QString previousSession;
+++        QString activeSession;
+++        QStringList sessionList;
+++        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
+++    };
+++
+++    void updateWelcomePage(const WelcomePageData &welcomePageData);
+++
+++signals:
+++    void requestProject(const QString &project);
+++    void requestSession(const QString &session);
+++    void manageSessions();
+++
+++private slots:
+++    void slotSessionClicked(const QString &data);
+++    void slotProjectClicked(const QString &data);
+++    void slotCreateNewProject();
+++
+++private:
+++    void activateEditMode();
+++    Ui::ProjectWelcomePage *ui;
+++    WelcomePageData lastData;
+++};
+++
+++}
+++}
+++
+++#endif // PROJECTWELCOMEPAGE_H
++diff --git a/src/plugins/projectexplorer/projectwelcomepage.ui b/src/plugins/projectexplorer/projectwelcomepage.ui
++new file mode 100644
++index 0000000..cb26957
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepage.ui
++@@ -0,0 +1,254 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>ProjectExplorer::Internal::ProjectWelcomePage</class>
+++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePage">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>667</width>
+++    <height>365</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QHBoxLayout" name="horizontalLayout">
+++   <item>
+++    <widget class="QFrame" name="recentSessionsFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="minimumSize">
+++      <size>
+++       <width>270</width>
+++       <height>130</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_3">
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <property name="verticalSpacing">
+++       <number>3</number>
+++      </property>
+++      <item row="0" column="0" colspan="3">
+++       <widget class="QLabel" name="recentSessionsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="3">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++      <item row="3" column="0">
+++       <widget class="QPushButton" name="manageSessionsButton">
+++        <property name="focusPolicy">
+++         <enum>Qt::TabFocus</enum>
+++        </property>
+++        <property name="text">
+++         <string>Manage Sessions...</string>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="4" column="0">
+++       <spacer name="verticalSpacer">
+++        <property name="orientation">
+++         <enum>Qt::Vertical</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>20</width>
+++          <height>40</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item>
+++    <widget class="QFrame" name="recentProjectsFrame">
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_5">
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <property name="verticalSpacing">
+++       <number>3</number>
+++      </property>
+++      <property name="rightMargin">
+++       <number>9</number>
+++      </property>
+++      <item row="0" column="0" colspan="3">
+++       <widget class="QLabel" name="projTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="3">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++      <item row="3" column="0">
+++       <widget class="QPushButton" name="createNewProjectButton">
+++        <property name="focusPolicy">
+++         <enum>Qt::TabFocus</enum>
+++        </property>
+++        <property name="text">
+++         <string>Create New Project...</string>
+++        </property>
+++        <property name="flat">
+++         <bool>false</bool>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="4" column="0">
+++       <spacer name="verticalSpacer_2">
+++        <property name="orientation">
+++         <enum>Qt::Vertical</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>20</width>
+++          <height>40</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.cpp b/src/plugins/projectexplorer/projectwelcomeplugin.cpp
++new file mode 100644
++index 0000000..d850c8f
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomeplugin.cpp
++@@ -0,0 +1,48 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "projectwelcomeplugin.h"
+++#include "projectwelcomepage.h"
+++
+++namespace ProjectExplorer {
+++namespace Internal {
+++
+++ProjectWelcomePlugin::ProjectWelcomePlugin()
+++ : m_page(new ProjectWelcomePage)
+++{
+++
+++}
+++
+++QWidget* ProjectWelcomePlugin::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace ProjectExplorer
++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.h b/src/plugins/projectexplorer/projectwelcomeplugin.h
++new file mode 100644
++index 0000000..af55a7d
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomeplugin.h
++@@ -0,0 +1,58 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef PROJECTWELCOMEPLUGIN_H
+++#define PROJECTWELCOMEPLUGIN_H
+++
+++#include <extensionsystem/iwelcomeplugin.h>
+++
+++namespace ProjectExplorer {
+++namespace Internal {
+++
+++class ProjectWelcomePage;
+++
+++class ProjectWelcomePlugin : public ExtensionSystem::IWelcomePlugin
+++{
+++    Q_OBJECT
+++public:
+++    ProjectWelcomePlugin();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Develop"); }
+++    int priority() const { return 20; }
+++private:
+++    ProjectWelcomePage *m_page;
+++
+++
+++};
+++
+++} // namespace Internal
+++} // namespace ProjectExplorer
+++
+++#endif // PROJECTWELCOMEPLUGIN_H
++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui
++new file mode 100644
++index 0000000..7f7c84b
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui
++@@ -0,0 +1,21 @@
+++<ui version="4.0" >
+++ <author/>
+++ <comment/>
+++ <exportmacro/>
+++ <class>ProjectWelcomePlugin</class>
+++ <widget class="QWidget" name="ProjectWelcomePlugin" >
+++  <property name="geometry" >
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>400</width>
+++    <height>300</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle" >
+++   <string>Form</string>
+++  </property>
+++ </widget>
+++ <pixmapfunction/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
++index 3b515bd..c4b8d44 100644
++--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
+++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
++@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="CppEditor" version="1.2.80"/>
++         <dependency name="Help" version="1.2.80"/>
++         <dependency name="Designer" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++new file mode 100644
++index 0000000..ca1db4c
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++@@ -0,0 +1,271 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "gettingstartedwelcomepage.h"
+++#include "ui_gettingstartedwelcomepage.h"
+++
+++#include <coreplugin/icore.h>
+++#include <coreplugin/coreconstants.h>
+++
+++#include <extensionsystem/pluginmanager.h>
+++
+++#include <help/helpplugin.h>
+++
+++#include <QtCore/QDateTime>
+++#include <QtCore/QDir>
+++#include <QtCore/QFileInfo>
+++#include <QtCore/QDebug>
+++#include <QtCore/QUrl>
+++#include <QtCore/QXmlStreamReader>
+++#include <QtGui/QFont>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++GettingStartedWelcomePage::GettingStartedWelcomePage(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::GettingStartedWelcomePage)
+++{
+++    ui->setupUi(this);
+++    ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
+++    ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
+++    ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
+++    ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
+++
+++    connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&)));
+++    connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
+++    connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
+++
+++    ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
+++                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+++    ui->tutorialTreeWidget->addItem(tr("Creating an address book"),
+++                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Understanding widgets"),
+++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Building with qmake"),
+++                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Writing test cases"),
+++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
+++
+++    srand(QDateTime::currentDateTime().toTime_t());
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = rand()%tips.count();
+++
+++    QTextDocument *doc = ui->didYouKnowTextBrowser->document();
+++    doc->setDefaultStyleSheet("a:link {color:black;}");
+++    ui->didYouKnowTextBrowser->setDocument(doc);
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++
+++    connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
+++    connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
+++
+++}
+++
+++GettingStartedWelcomePage::~GettingStartedWelcomePage()
+++{
+++    delete ui;
+++}
+++
+++void GettingStartedWelcomePage::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+++{
+++    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
+++    if (!QFile::exists(demoxml)) {
+++        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
+++        if (!QFile::exists(demoxml))
+++            return;
+++    }
+++
+++    QFile description(demoxml);
+++    if (!description.open(QFile::ReadOnly))
+++        return;
+++
+++    ui->examplesComboBox->clear();
+++    ui->examplesComboBox->setEnabled(true);
+++
+++    ui->examplesComboBox->addItem(tr("Choose an example..."));
+++    QFont f = font();
+++    f.setItalic(true);
+++    ui->examplesComboBox->setItemData(0, f, Qt::FontRole);
+++    f.setItalic(false);
+++    bool inExamples = false;
+++    QString dirName;
+++    QXmlStreamReader reader(&description);
+++    while (!reader.atEnd()) {
+++        switch (reader.readNext()) {
+++            case QXmlStreamReader::StartElement:
+++            if (reader.name() == "category") {
+++                QString name = reader.attributes().value(QLatin1String("name")).toString();
+++                if (name.contains("tutorial"))
+++                    break;
+++                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
+++                ui->examplesComboBox->addItem(name);
+++                f.setBold(true);
+++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole);
+++                f.setBold(false);
+++                inExamples = true;
+++            }
+++            if (inExamples && reader.name() == "example") {
+++                QString name = reader.attributes().value(QLatin1String("name")).toString();
+++                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
+++                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
+++                QString fileName = examplePath + relativeProPath;
+++                if (!QFile::exists(fileName))
+++                    fileName = sourcePath + "/examples" + relativeProPath;
+++                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
+++
+++                ui->examplesComboBox->addItem("  " + name, fileName);
+++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+++            }
+++            break;
+++            case QXmlStreamReader::EndElement:
+++            if (reader.name() == "category")
+++                inExamples = false;
+++            break;
+++            default:
+++            break;
+++        }
+++    }
+++}
+++
+++void GettingStartedWelcomePage::slotEnableExampleButton(int index)
+++{
+++    QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString();
+++    ui->openExampleButton->setEnabled(!fileName.isEmpty());
+++}
+++
+++void GettingStartedWelcomePage::slotOpenExample()
+++{
+++    QComboBox *box = ui->examplesComboBox;
+++    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
+++    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
+++    QStringList files;
+++    QFileInfo fi(proFile);
+++    QString tryFile = fi.path() + "/main.cpp";
+++    files << proFile;
+++    if(!QFile::exists(tryFile))
+++        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
+++    if(QFile::exists(tryFile))
+++        files << tryFile;
+++    Core::ICore::instance()->openFiles(files);
+++    slotOpenContextHelpPage(helpFile);
+++}
+++
+++void GettingStartedWelcomePage::slotOpenHelpPage(const QString& url)
+++{
+++    Help::HelpManager *helpManager
+++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+++    Q_ASSERT(helpManager);
+++    helpManager->openHelpPage(url);
+++}
+++void GettingStartedWelcomePage::slotOpenContextHelpPage(const QString& url)
+++{
+++    Help::HelpManager *helpManager
+++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+++    Q_ASSERT(helpManager);
+++    helpManager->openContextHelpPage(url);
+++}
+++
+++void GettingStartedWelcomePage::slotNextTip()
+++{
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = ((m_currentTip+1)%tips.count());
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++}
+++
+++void GettingStartedWelcomePage::slotPrevTip()
+++{
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = ((m_currentTip-1)+tips.count())%tips.count();
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++}
+++
+++QStringList GettingStartedWelcomePage::tipsOfTheDay()
+++{
+++    static QStringList tips;
+++    if (tips.isEmpty()) {
+++        QString altShortcut =
+++#ifdef Q_WS_MAC
+++            tr("Cmd", "Shortcut key");
+++#else
+++            tr("Alt", "Shortcut key");
+++#endif
+++        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
+++                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
+++                       "<li></li><li>6 - Output</li></ul>"));
+++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+++        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
+++        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
+++                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));
+++        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
+++                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
+++                        "and code completion."));
+++        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
+++                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
+++        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
+++        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
+++        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
+++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+++        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
+++                       "on the buttons at the window bottom:"
+++                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
+++                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
+++        tips.append(tr("You can quickly search methods, classes, help and more using the "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
+++        tips.append(tr("You can add custom build steps in the "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
+++        tips.append(tr("Within a session, you can add "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
+++        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
+++        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
+++                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
+++                       "target in the combo box."));
+++        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
+++                       "revision control systems</a> such as Subversion, Perforce and Git."));
+++        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
+++    }
+++    return tips;
+++}
+++
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++new file mode 100644
++index 0000000..a40df28
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++@@ -0,0 +1,69 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef GETTINGSTARTEDWELCOMEPAGE_H
+++#define GETTINGSTARTEDWELCOMEPAGE_H
+++
+++#include <QWidget>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++namespace Ui {
+++    class GettingStartedWelcomePage;
+++}
+++
+++class GettingStartedWelcomePage : public QWidget {
+++    Q_OBJECT
+++public:
+++    GettingStartedWelcomePage(QWidget *parent = 0);
+++    ~GettingStartedWelcomePage();
+++
+++ public slots:
+++    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
+++
+++private slots:
+++    void slotOpenHelpPage(const QString& url);
+++    void slotOpenContextHelpPage(const QString& url);
+++    void slotEnableExampleButton(int);
+++    void slotOpenExample();
+++    void slotNextTip();
+++    void slotPrevTip();
+++
+++private:
+++    QStringList tipsOfTheDay();
+++
+++    Ui::GettingStartedWelcomePage *ui;
+++    int m_currentTip;
+++};
+++
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
+++#endif // GETTINGSTARTEDWELCOMEPAGE_H
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui
++new file mode 100644
++index 0000000..8bfebb0
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui
++@@ -0,0 +1,343 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePage</class>
+++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePage">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>646</width>
+++    <height>361</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QGridLayout" name="gridLayout">
+++   <item row="0" column="0" rowspan="2">
+++    <widget class="QFrame" name="tutorialsFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_6">
+++      <item row="0" column="0">
+++       <widget class="QLabel" name="tutorialsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item row="0" column="1">
+++    <widget class="QFrame" name="demosExamplesFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_8">
+++      <property name="rightMargin">
+++       <number>8</number>
+++      </property>
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <item row="0" column="0" colspan="4">
+++       <widget class="QLabel" name="demoTitleLabel">
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0">
+++       <widget class="QComboBox" name="examplesComboBox">
+++        <property name="enabled">
+++         <bool>false</bool>
+++        </property>
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <item>
+++         <property name="text">
+++          <string>Examples not installed</string>
+++         </property>
+++        </item>
+++       </widget>
+++      </item>
+++      <item row="1" column="2">
+++       <widget class="QToolButton" name="openExampleButton">
+++        <property name="enabled">
+++         <bool>false</bool>
+++        </property>
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="text">
+++         <string>Open</string>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="1">
+++       <spacer name="horizontalSpacer">
+++        <property name="orientation">
+++         <enum>Qt::Horizontal</enum>
+++        </property>
+++        <property name="sizeType">
+++         <enum>QSizePolicy::Fixed</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>6</width>
+++          <height>6</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item row="1" column="1">
+++    <widget class="QFrame" name="didyouKnowFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_11">
+++      <property name="rightMargin">
+++       <number>9</number>
+++      </property>
+++      <item row="0" column="0">
+++       <widget class="QLabel" name="didYouKnowTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="2">
+++       <widget class="QTextBrowser" name="didYouKnowTextBrowser">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="frameShadow">
+++         <enum>QFrame::Plain</enum>
+++        </property>
+++        <property name="verticalScrollBarPolicy">
+++         <enum>Qt::ScrollBarAlwaysOff</enum>
+++        </property>
+++        <property name="horizontalScrollBarPolicy">
+++         <enum>Qt::ScrollBarAlwaysOff</enum>
+++        </property>
+++        <property name="openExternalLinks">
+++         <bool>true</bool>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="0" column="1">
+++       <layout class="QGridLayout" name="gridLayout_10">
+++        <property name="spacing">
+++         <number>0</number>
+++        </property>
+++        <item row="0" column="0" colspan="2">
+++         <spacer name="verticalSpacer_4">
+++          <property name="orientation">
+++           <enum>Qt::Vertical</enum>
+++          </property>
+++          <property name="sizeType">
+++           <enum>QSizePolicy::Preferred</enum>
+++          </property>
+++          <property name="sizeHint" stdset="0">
+++           <size>
+++            <width>20</width>
+++            <height>2</height>
+++           </size>
+++          </property>
+++         </spacer>
+++        </item>
+++        <item row="1" column="0">
+++         <widget class="QToolButton" name="prevTipBtn">
+++          <property name="styleSheet">
+++           <string notr="true">QToolButton{
+++	border-right:solid 0 px;
+++	height:16px;
+++	width:12px;
+++}
+++</string>
+++          </property>
+++          <property name="text">
+++           <string/>
+++          </property>
+++          <property name="icon">
+++           <iconset resource="../welcome/welcome.qrc">
+++            <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
+++          </property>
+++          <property name="arrowType">
+++           <enum>Qt::NoArrow</enum>
+++          </property>
+++         </widget>
+++        </item>
+++        <item row="1" column="1">
+++         <widget class="QToolButton" name="nextTipBtn">
+++          <property name="styleSheet">
+++           <string notr="true">QToolButton{
+++	border-left:solid 0 px;
+++	height:16px;
+++	width:12px;
+++}
+++</string>
+++          </property>
+++          <property name="text">
+++           <string/>
+++          </property>
+++          <property name="icon">
+++           <iconset resource="../welcome/welcome.qrc">
+++            <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
+++          </property>
+++          <property name="arrowType">
+++           <enum>Qt::NoArrow</enum>
+++          </property>
+++         </widget>
+++        </item>
+++        <item row="2" column="0" colspan="2">
+++         <spacer name="verticalSpacer_3">
+++          <property name="orientation">
+++           <enum>Qt::Vertical</enum>
+++          </property>
+++          <property name="sizeHint" stdset="0">
+++           <size>
+++            <width>20</width>
+++            <height>2</height>
+++           </size>
+++          </property>
+++         </spacer>
+++        </item>
+++       </layout>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources>
+++  <include location="../welcome/welcome.qrc"/>
+++ </resources>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp
++new file mode 100644
++index 0000000..a68f80d
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp
++@@ -0,0 +1,47 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "gettingstartedwelcomeplugin.h"
+++#include "gettingstartedwelcomepage.h"
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin()
+++        : m_page(new GettingStartedWelcomePage)
+++{
+++}
+++
+++QWidget* GettingStartedWelcomePlugin::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h
++new file mode 100644
++index 0000000..f8760df
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h
++@@ -0,0 +1,56 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H
+++#define GETTINGSTARTEDWELCOMEPLUGIN_H
+++
+++#include <extensionsystem/iwelcomeplugin.h>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++class GettingStartedWelcomePage;
+++
+++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePlugin
+++{
+++public:
+++    GettingStartedWelcomePlugin();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Getting Started");}
+++    int priority() const { return 10; }
+++
+++private:
+++    GettingStartedWelcomePage *m_page;
+++};
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
+++
+++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
++index 6b69139..c9335d5 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
++@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager
++ QT += network
++ include(../../qtcreatorplugin.pri)
++ include(qt4projectmanager_dependencies.pri)
++-
++ HEADERS += qt4projectmanagerplugin.h \
++     qt4projectmanager.h \
++     qt4project.h \
++@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \
++     qtversionmanager.h \
++     qtoptionspage.h \
++     qtuicodemodelsupport.h \
++-    externaleditors.h
+++    externaleditors.h \
+++    gettingstartedwelcomepage.h \
+++    gettingstartedwelcomeplugin.h
++ SOURCES += qt4projectmanagerplugin.cpp \
++     qt4projectmanager.cpp \
++     qt4project.cpp \
++@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \
++     qtversionmanager.cpp \
++     qtoptionspage.cpp \
++     qtuicodemodelsupport.cpp \
++-    externaleditors.cpp
+++    externaleditors.cpp \
+++    gettingstartedwelcomepage.cpp \
+++    gettingstartedwelcomeplugin.cpp
++ FORMS += makestep.ui \
++     qmakestep.ui \
++     qt4projectconfigwidget.ui \
++     embeddedpropertiespage.ui \
++     qtversionmanager.ui \
++-    showbuildlog.ui
+++    showbuildlog.ui \
+++    gettingstartedwelcomepage.ui
++ RESOURCES += qt4projectmanager.qrc \
++     wizards/wizards.qrc
++-
++ include(../../shared/proparser/proparser.pri)
++ include(qt-s60/qt-s60.pri)
++ include(customwidgetwizard/customwidgetwizard.pri)
++-
++ DEFINES += QT_NO_CAST_TO_ASCII
++ OTHER_FILES += Qt4ProjectManager.pluginspec
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
++index e1bd37d..9a49315 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
+++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
++@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri)
++ include(../../plugins/cppeditor/cppeditor.pri)
++ include(../../plugins/help/help.pri)
++ include(../../plugins/designer/designer.pri)
++-include(../../plugins/welcome/welcome.pri)
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
++index f740c27..8c87b8d 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
++@@ -44,6 +44,8 @@
++ #include "qtversionmanager.h"
++ #include "qtoptionspage.h"
++ #include "externaleditors.h"
+++#include "gettingstartedwelcomeplugin.h"
+++#include "gettingstartedwelcomepage.h"
++ 
++ #ifdef QTCREATOR_WITH_S60
++ #include "qt-s60/s60manager.h"
++@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
++     delete m_proFileEditorFactory;
++     removeObject(m_qt4ProjectManager);
++     delete m_qt4ProjectManager;
+++    removeObject(m_welcomePlugin);
+++    delete m_welcomePlugin;
++ }
++ /*
++ static Core::Command *createSeparator(Core::ActionManager *am,
++@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
++     m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance();
++     Core::ActionManager *am = core->actionManager();
++ 
++-    addAutoReleasedObject(new QtVersionManager());
+++    QtVersionManager *mgr = new QtVersionManager();
+++    addAutoReleasedObject(mgr);
++     addAutoReleasedObject(new QtOptionsPage());
++ 
+++    m_welcomePlugin = new GettingStartedWelcomePlugin;
+++    addObject(m_welcomePlugin);
+++    GettingStartedWelcomePage *gswp =
+++            static_cast<GettingStartedWelcomePage*>(m_welcomePlugin->page());
+++    connect(mgr, SIGNAL(updateExamples(QString,QString,QString)),
+++            gswp, SLOT(updateExamples(QString,QString,QString)));
++ 
++     //create and register objects
++     m_qt4ProjectManager = new Qt4Manager(this);
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
++index 18781bc..84a5fbd 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
++@@ -49,6 +49,7 @@ class MakeStepFactory;
++ class GccParserFactory;
++ class MsvcParserFactory;
++ class EmbeddedPropertiesPage;
+++class GettingStartedWelcomePlugin;
++ 
++ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin
++ {
++@@ -81,6 +82,7 @@ private:
++ 
++     QAction *m_runQMakeAction;
++     QAction *m_runQMakeActionContextMenu;
+++    GettingStartedWelcomePlugin *m_welcomePlugin;
++ };
++ 
++ } // namespace Internal
++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
++index aa65520..6bce576 100644
++--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
++@@ -42,7 +42,6 @@
++ #include <coreplugin/coreconstants.h>
++ #include <coreplugin/icore.h>
++ #include <coreplugin/modemanager.h>
++-#include <welcome/welcomemode.h>
++ #include <extensionsystem/pluginmanager.h>
++ #include <help/helpplugin.h>
++ #include <utils/qtcassert.h>
++@@ -51,6 +50,7 @@
++ #include <QtCore/QProcess>
++ #include <QtCore/QSettings>
++ #include <QtCore/QTime>
+++#include <QtCore/QTimer>
++ #include <QtGui/QApplication>
++ #include <QtGui/QDesktopServices>
++ 
++@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager()
++     writeVersionsIntoSettings();
++ 
++     updateDocumentation();
++-    updateExamples();
+++    // cannot call from ctor, needs to get connected extenernally first
+++    QTimer::singleShot(0, this, SLOT(updateExamples()));
++ }
++ 
++ QtVersionManager::~QtVersionManager()
++@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples()
++         if (version->hasDemos())
++             demosPath = version->demosPath();
++         if (!examplesPath.isEmpty() && !demosPath.isEmpty()) {
++-            if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
++-                    (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME)))
++-                welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath());
+++            emit updateExamples(examplesPath, demosPath, version->sourcePath());
++             return;
++         }
++     }
++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
++index 0f2144c..fb7a33b 100644
++--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++++ b/src/plugins/qt4projectmanager/qtversionmanager.h
++@@ -201,6 +201,10 @@ public:
++ signals:
++     void defaultQtVersionChanged();
++     void qtVersionsChanged();
+++    void updateExamples(QString, QString, QString);
+++
+++private slots:
+++    void updateExamples();
++ private:
++     static QString findQMakeLine(const QString &directory);
++     static QString trimLine(const QString line);
++@@ -215,7 +219,6 @@ private:
++     void addNewVersionsFromInstaller();
++     void updateSystemVersion();
++     void updateDocumentation();
++-    void updateExamples();
++ 
++     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
++     void updateUniqueIdToIndexMap();
++diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp
++new file mode 100644
++index 0000000..d3127e0
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepage.cpp
++@@ -0,0 +1,93 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "communitywelcomepage.h"
+++#include "ui_communitywelcomepage.h"
+++
+++#include "rssfetcher.h"
+++
+++#include <QtGui/QDesktopServices>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++CommunityWelcomePage::CommunityWelcomePage(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::CommunityWelcomePage),
+++    m_rssFetcher(new RSSFetcher(7))
+++{
+++    ui->setupUi(this);
+++    ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
+++    ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
+++
+++    connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+++    connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+++
+++    connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
+++        ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
+++    //: Add localized feed here only if one exists
+++    m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
+++
+++    ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
+++    ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
+++}
+++
+++CommunityWelcomePage::~CommunityWelcomePage()
+++{
+++    delete m_rssFetcher;
+++    delete ui;
+++}
+++
+++
+++void CommunityWelcomePage::slotUrlClicked(const QString &data)
+++{
+++    QDesktopServices::openUrl(QUrl(data));
+++}
+++
+++
+++
+++} // namespace Internal
+++} // namespace Welcome
++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h
++new file mode 100644
++index 0000000..d9c81b2
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepage.h
++@@ -0,0 +1,64 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef COMMUNITYWELCOMEPAGE_H
+++#define COMMUNITYWELCOMEPAGE_H
+++
+++#include <QWidget>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++class RSSFetcher;
+++
+++namespace Ui {
+++    class CommunityWelcomePage;
+++}
+++
+++class CommunityWelcomePage : public QWidget
+++{
+++    Q_OBJECT
+++
+++public:
+++    CommunityWelcomePage(QWidget *parent = 0);
+++    ~CommunityWelcomePage();
+++
+++private slots:
+++    void slotUrlClicked(const QString &data);
+++
+++
+++private:
+++    RSSFetcher *m_rssFetcher;
+++    Ui::CommunityWelcomePage *ui;
+++};
+++
+++
+++} // namespace Internal
+++} // namespace Welcome
+++#endif // COMMUNITYWELCOMEPAGE_H
++diff --git a/src/plugins/welcome/communitywelcomepage.ui b/src/plugins/welcome/communitywelcomepage.ui
++new file mode 100644
++index 0000000..707412c
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepage.ui
++@@ -0,0 +1,190 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>Welcome::Internal::CommunityWelcomePage</class>
+++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePage">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>667</width>
+++    <height>352</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QHBoxLayout" name="horizontalLayout">
+++   <item>
+++    <widget class="QFrame" name="labsFrame">
+++     <property name="frameShape">
+++      <enum>QFrame::NoFrame</enum>
+++     </property>
+++     <property name="frameShadow">
+++      <enum>QFrame::Plain</enum>
+++     </property>
+++     <layout class="QVBoxLayout" name="verticalLayout_2">
+++      <item>
+++       <widget class="QLabel" name="labsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item>
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="minimumSize">
+++         <size>
+++          <width>340</width>
+++          <height>0</height>
+++         </size>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item>
+++    <widget class="QFrame" name="sitesFrame">
+++     <property name="frameShape">
+++      <enum>QFrame::NoFrame</enum>
+++     </property>
+++     <property name="frameShadow">
+++      <enum>QFrame::Plain</enum>
+++     </property>
+++     <layout class="QVBoxLayout" name="verticalLayout_3">
+++      <item>
+++       <widget class="QLabel" name="sitesTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item>
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/welcome/communitywelcomeplugin.cpp b/src/plugins/welcome/communitywelcomeplugin.cpp
++new file mode 100644
++index 0000000..7a0dd61
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomeplugin.cpp
++@@ -0,0 +1,47 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "communitywelcomeplugin.h"
+++#include "communitywelcomepage.h"
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++CommunityWelcomePlugin::CommunityWelcomePlugin()
+++        : m_page(new CommunityWelcomePage)
+++{
+++}
+++
+++QWidget* CommunityWelcomePlugin::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace WelcomePlugin
++diff --git a/src/plugins/welcome/communitywelcomeplugin.h b/src/plugins/welcome/communitywelcomeplugin.h
++new file mode 100644
++index 0000000..fd97e0e
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomeplugin.h
++@@ -0,0 +1,60 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef COMMUNITYWELCOMEPLUGIN_H
+++#define COMMUNITYWELCOMEPLUGIN_H
+++
+++#include "welcome_global.h"
+++
+++#include <extensionsystem/iwelcomeplugin.h>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++class CommunityWelcomePage;
+++
+++class WELCOME_EXPORT CommunityWelcomePlugin : public ExtensionSystem::IWelcomePlugin
+++{
+++    Q_OBJECT
+++public:
+++    CommunityWelcomePlugin();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Community"); }
+++    int priority() const { return 30; }
+++
+++private:
+++    CommunityWelcomePage *m_page;
+++
+++};
+++
+++} // namespace Internal
+++} // namespace Welcome
+++
+++#endif // COMMUNITYWELCOMEPLUGIN_H
++diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp
++index f5fc756..7254c2d 100644
++--- a/src/plugins/welcome/rssfetcher.cpp
+++++ b/src/plugins/welcome/rssfetcher.cpp
++@@ -43,7 +43,7 @@
++ #include <sys/utsname.h>
++ #endif
++ 
++-using namespace Welcome;
+++using namespace Welcome::Internal;
++ 
++ static const QString getOsString()
++ {
++diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h
++index 9267fdb..54ef87d 100644
++--- a/src/plugins/welcome/rssfetcher.h
+++++ b/src/plugins/welcome/rssfetcher.h
++@@ -35,6 +35,7 @@
++ #include <QtNetwork/QHttp>
++ 
++ namespace Welcome {
+++namespace Internal {
++ 
++ class RSSFetcher : public QObject
++ {
++@@ -69,6 +70,7 @@ private:
++ };
++ 
++ } // namespace Welcome
+++} // namespace Internal
++ 
++ #endif // RSSFETCHER_H
++ 
++diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro
++index 11d48e8..b5bbd1c 100644
++--- a/src/plugins/welcome/welcome.pro
+++++ b/src/plugins/welcome/welcome.pro
++@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ HEADERS += welcomeplugin.h \
++     welcomemode.h \
++-    rssfetcher.h
+++    rssfetcher.h \
+++    communitywelcomepage.h \
+++    communitywelcomeplugin.h
++ SOURCES += welcomeplugin.cpp \
++     welcomemode.cpp \
++-    rssfetcher.cpp
++-FORMS += welcomemode.ui
+++    rssfetcher.cpp \
+++    communitywelcomepage.cpp \
+++    communitywelcomeplugin.cpp
+++FORMS += welcomemode.ui \
+++    communitywelcomepage.ui
++ RESOURCES += welcome.qrc
++ DEFINES += WELCOME_LIBRARY
++ OTHER_FILES += Welcome.pluginspec
++diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp
++index bc6a876..b47cb36 100644
++--- a/src/plugins/welcome/welcomemode.cpp
+++++ b/src/plugins/welcome/welcomemode.cpp
++@@ -28,11 +28,10 @@
++ **************************************************************************/
++ 
++ #include "welcomemode.h"
++-#include "rssfetcher.h"
+++#include <extensionsystem/pluginmanager.h>
+++#include <extensionsystem/iwelcomeplugin.h>
++ 
++ #include <coreplugin/icore.h>
++-#include <coreplugin/dialogs/iwizard.h>
++-
++ #include <coreplugin/coreconstants.h>
++ #include <coreplugin/uniqueidmanager.h>
++ #include <coreplugin/modemanager.h>
++@@ -41,24 +40,38 @@
++ #include <utils/styledbar.h>
++ #include <utils/welcomemodetreewidget.h>
++ 
++-#include <QtGui/QDesktopServices>
++ #include <QtGui/QMouseEvent>
++ #include <QtGui/QScrollArea>
++ #include <QtGui/QButtonGroup>
+++#include <QtGui/QDesktopServices>
+++#include <QtGui/QToolButton>
++ 
++-#include <QtCore/QDateTime>
++-#include <QtCore/QDir>
++-#include <QtCore/QFileInfo>
++-#include <QtCore/QDebug>
++-#include <QtCore/QUrl>
++ #include <QtCore/QSettings>
+++#include <QtCore/QUrl>
+++#include <QtCore/QDebug>
++ 
++ #include <cstdlib>
++ 
++ #include "ui_welcomemode.h"
++ 
+++using namespace ExtensionSystem;
+++
++ namespace Welcome {
++ 
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
++ struct WelcomeModePrivate
++ {
++     WelcomeModePrivate();
++@@ -66,10 +79,9 @@ struct WelcomeModePrivate
++     QScrollArea *m_scrollArea;
++     QWidget *m_widget;
++     QWidget *m_welcomePage;
++-    QButtonGroup *btnGrp;
++-    Ui::WelcomePage ui;
++-    RSSFetcher *rssFetcher;
++-    WelcomeMode::WelcomePageData lastData;
+++    QMap<QAbstractButton*, QWidget*> buttonMap;
+++    QHBoxLayout * buttonLayout;
+++    Ui::WelcomeMode ui;
++     int currentTip;
++ };
++ 
++@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate()
++ {
++ }
++ 
++-// ---  WelcomePageData
++-
++-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const
++-{
++-    return previousSession == rhs.previousSession
++-        && activeSession   == rhs.activeSession
++-        && sessionList     == rhs.sessionList
++-        && projectList     == rhs.projectList;
++-}
++-
++-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const
++-{
++-    return previousSession != rhs.previousSession
++-        || activeSession   != rhs.activeSession
++-        || sessionList     != rhs.sessionList
++-        || projectList     != rhs.projectList;
++-}
++-
++-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d)
++-{
++-    dgb.nospace() << "PreviousSession=" << d.previousSession
++-        << " activeSession=" << d.activeSession
++-        << " sessionList=" << d.sessionList
++-        << " projectList=" << d.projectList;
++-    return dgb;
++-}
++-
++-// Format a title + ruler for title labels
++-static inline QString titleLabel(const QString &text)
++-{
++-    QString  rc = QLatin1String(
++-    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
++-    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
++-    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
++-    "<span style=\" font-size:x-large; color:#555555;\">");
++-    rc += text;
++-    rc += QLatin1String("</span></p><hr/></body></html>");
++-    return rc;
++-}
++-
++ // ---  WelcomeMode
++ WelcomeMode::WelcomeMode() :
++     m_d(new WelcomeModePrivate)
++@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() :
++     l->setMargin(0);
++     l->setSpacing(0);
++     l->addWidget(new Core::Utils::StyledBar(m_d->m_widget));
++-    m_d->rssFetcher = new RSSFetcher(7, this);
++     m_d->m_welcomePage = new QWidget(m_d->m_widget);
++     m_d->ui.setupUi(m_d->m_welcomePage);
++-    m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project")));
++-    m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session")));
++-    m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
++-    m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
++-    m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
++-    m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
++-    m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
++-    m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
++     m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect);
++     m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);
++     l->addWidget(m_d->m_welcomePage);
++@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() :
++     m_d->m_scrollArea->setWidget(m_d->m_widget);
++     m_d->m_scrollArea->setWidgetResizable(true);
++ 
++-    updateWelcomePage(WelcomePageData());
++-
++-    m_d->btnGrp = new QButtonGroup(this);
++-    m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0);
++-    m_d->btnGrp->addButton(m_d->ui.developSectButton, 1);
++-    m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2);
++-
++-    connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int)));
+++    PluginManager *pluginManager = PluginManager::instance();
+++    connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject)));
++ 
++     connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback()));
++-    connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
++-    connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
++-    connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
++-    connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
++-    connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++-    connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++-    connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&)));
++-    connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
++-    connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
++-
++-    connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
++-        m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
++-
++-    //: Add localized feed here only if one exists
++-    m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
++-
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
++-
++-    m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
++-                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"),
++-                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"),
++-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"),
++-                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"),
++-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
++-
++-    srand(QDateTime::currentDateTime().toTime_t());
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = rand()%tips.count();
++-
++-    QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document();
++-    doc->setDefaultStyleSheet("a:link {color:black;}");
++-    m_d->ui.didYouKnowTextBrowser->setDocument(doc);
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-
++-    connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
++-    connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
++ 
++-    QSettings *settings = Core::ICore::instance()->settings();
++-    int id = settings->value("General/WelcomeTab", 0).toInt();
++-    m_d->btnGrp->button(id)->setChecked(true);
++-    m_d->ui.stackedWidget->setCurrentIndex(id);
++ }
++ 
++ WelcomeMode::~WelcomeMode()
++ {
++     QSettings *settings = Core::ICore::instance()->settings();
++-    settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId());
+++    settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex());
++     delete m_d->m_widget;
++     delete m_d;
++ }
++@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const
++     return contexts;
++ }
++ 
++-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData)
++-{
++-    // Update only if data are modified
++-    if (welcomePageData == m_d->lastData)
++-        return;
++-    m_d->lastData = welcomePageData;
++-
++-    m_d->m_widget->setUpdatesEnabled(false);
++-    m_d->ui.sessTreeWidget->clear();
++-    m_d->ui.projTreeWidget->clear();
++-
++-    if (welcomePageData.sessionList.count() > 0) {
++-        foreach (const QString &s, welcomePageData.sessionList) {
++-            QString str = s;
++-            if (s == welcomePageData.previousSession)
++-                str = tr("%1 (last session)").arg(s);
++-            m_d->ui.sessTreeWidget->addItem(str, s);
++-        }
++-        m_d->ui.sessTreeWidget->updateGeometry();
++-        m_d->ui.sessTreeWidget->show();
++-    } else {
++-        m_d->ui.sessTreeWidget->hide();
++-    }
++-
++-    typedef QPair<QString, QString> QStringPair;
++-    if (welcomePageData.projectList.count() > 0) {
++-        foreach (const QStringPair &it, welcomePageData.projectList) {
++-            QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first);
++-            const QFileInfo fi(it.first);
++-            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
++-        }
++-    } else {
++-        m_d->ui.projTreeWidget->hide();
++-    }
++-    m_d->ui.projTreeWidget->updateGeometry();
++-    m_d->m_widget->setUpdatesEnabled(true);
++-}
++-
++-void WelcomeMode::activateEditMode()
++-{
++-    Core::ModeManager *modeManager = Core::ModeManager::instance();
++-    if (modeManager->currentMode() == this)
++-        modeManager->activateMode(Core::Constants::MODE_EDIT);
++-}
++-
++-void WelcomeMode::slotSessionClicked(const QString &data)
++-{
++-    emit requestSession(data);
++-    activateEditMode();
++-}
++-
++-void WelcomeMode::slotProjectClicked(const QString &data)
++-{
++-    emit requestProject(data);
++-    activateEditMode();
++-}
++-
++-void WelcomeMode::slotUrlClicked(const QString &data)
+++bool sortFunction(IWelcomePlugin * a, IWelcomePlugin *b)
++ {
++-    QDesktopServices::openUrl(QUrl(data));
+++    return a->priority() < b->priority();
++ }
++ 
++-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+++void WelcomeMode::initPlugins()
++ {
++-    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
++-    if (!QFile::exists(demoxml)) {
++-        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
++-        if (!QFile::exists(demoxml))
++-            return;
+++    m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame);
+++    m_d->buttonLayout->setMargin(0);
+++    m_d->buttonLayout->setSpacing(0);
+++    delete m_d->ui.stackedWidget->currentWidget();
+++    QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>();
+++    qSort(plugins.begin(), plugins.end(), &sortFunction);
+++    foreach(IWelcomePlugin* plugin, plugins) {    
+++        QToolButton * btn = new QToolButton;
+++        btn->setCheckable(true);
+++        btn->setText(plugin->title());
+++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+++        btn->setAutoExclusive(true);
+++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+++        m_d->ui.stackedWidget->addWidget(plugin->page());
+++        m_d->buttonLayout->addWidget(btn);
+++        m_d->buttonMap.insert(btn, plugin->page());
++     }
+++    m_d->buttonLayout->addSpacing(5);
++ 
++-    QFile description(demoxml);
++-    if (!description.open(QFile::ReadOnly))
++-        return;
++-
++-    m_d->ui.examplesComboBox->clear();
++-    m_d->ui.examplesComboBox->setEnabled(true);
++-
++-    m_d->ui.examplesComboBox->addItem(tr("Choose an example..."));
++-    QFont f = widget()->font();
++-    f.setItalic(true);
++-    m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole);
++-    f.setItalic(false);
++-    bool inExamples = false;
++-    QString dirName;
++-    QXmlStreamReader reader(&description);
++-    while (!reader.atEnd()) {
++-        switch (reader.readNext()) {
++-            case QXmlStreamReader::StartElement:
++-            if (reader.name() == "category") {
++-                QString name = reader.attributes().value(QLatin1String("name")).toString();
++-                if (name.contains("tutorial"))
++-                    break;
++-                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
++-                m_d->ui.examplesComboBox->addItem(name);
++-                f.setBold(true);
++-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole);
++-                f.setBold(false);
++-                inExamples = true;
++-            }
++-            if (inExamples && reader.name() == "example") {
++-                QString name = reader.attributes().value(QLatin1String("name")).toString();
++-                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
++-                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
++-                QString fileName = examplePath + relativeProPath;
++-                if (!QFile::exists(fileName))
++-                    fileName = sourcePath + "/examples" + relativeProPath;
++-                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
++-
++-                m_d->ui.examplesComboBox->addItem("  " + name, fileName);
++-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+++    QSettings *settings = Core::ICore::instance()->settings();
+++    int tabId = settings->value("General/WelcomeTab", 0).toInt();
+++
+++    int pluginCount = m_d->ui.stackedWidget->count();
+++    if (tabId < pluginCount) {
+++        //qDebug() << tabId;
+++        m_d->ui.stackedWidget->setCurrentIndex(tabId);
+++        QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap);
+++        while (it.hasNext())
+++            if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) {
+++                it.key()->setChecked(true);
+++                break;
++             }
++-            break;
++-            case QXmlStreamReader::EndElement:
++-            if (reader.name() == "category")
++-                inExamples = false;
++-            break;
++-            default:
++-            break;
++-        }
++     }
+++
++ }
++ 
++-void WelcomeMode::slotEnableExampleButton(int index)
++-{
++-    QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString();
++-    m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty());
+++void WelcomeMode::welcomePluginAdded(QObject *obj)
+++{
+++    if (IWelcomePlugin *plugin = qobject_cast<IWelcomePlugin*>(obj))
+++    {
+++        QToolButton * btn = new QToolButton;
+++        btn->setCheckable(true);
+++        btn->setAutoExclusive(true);
+++        btn->setText(plugin->title());
+++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+++        int insertPos = 0;
+++        QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>();
+++        foreach (IWelcomePlugin* p, plugins) {
+++            if (plugin->priority() < p->priority())
+++                insertPos++;
+++            else
+++                break;
+++        }
+++        m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page());
+++        m_d->buttonMap.insert(btn, plugin->page());
+++        m_d->buttonLayout->insertWidget(insertPos, btn);
+++    }
++ }
++ 
++-void WelcomeMode::slotOpenExample()
+++void WelcomeMode::showClickedPage()
++ {
++-    QComboBox *box = m_d->ui.examplesComboBox;
++-    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
++-    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
++-    QStringList files;
++-    QFileInfo fi(proFile);
++-    QString tryFile = fi.path() + "/main.cpp";
++-    files << proFile;
++-    if(!QFile::exists(tryFile))
++-        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
++-    if(QFile::exists(tryFile))
++-        files << tryFile;
++-    Core::ICore::instance()->openFiles(files);
++-    emit openContextHelpPage(helpFile);
+++    QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender());
+++    QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn);
+++    if (it.value())
+++        m_d->ui.stackedWidget->setCurrentWidget(it.value());
++ }
++ 
++ void WelcomeMode::slotFeedback()
++@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback()
++             "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view")));
++ }
++ 
++-void WelcomeMode::slotCreateNewProject()
++-{
++-    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
++-                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
++-}
++-
++-void WelcomeMode::slotNextTip()
++-{
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = ((m_d->currentTip+1)%tips.count());
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-}
++-
++-void WelcomeMode::slotPrevTip()
++-{
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count();
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-}
++-
++-QStringList WelcomeMode::tipsOfTheDay()
++-{
++-    static QStringList tips;
++-    if (tips.isEmpty()) {
++-        QString altShortcut =
++-#ifdef Q_WS_MAC
++-            tr("Cmd", "Shortcut key");
++-#else
++-            tr("Alt", "Shortcut key");
++-#endif
++-        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
++-                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
++-                       "<li></li><li>6 - Output</li></ul>"));
++-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++-        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
++-        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
++-                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));                       
++-        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
++-                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
++-                        "and code completion."));
++-        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
++-                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
++-        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
++-        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
++-        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
++-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++-        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
++-                       "on the buttons at the window bottom:"
++-                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
++-                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
++-        tips.append(tr("You can quickly search methods, classes, help and more using the "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
++-        tips.append(tr("You can add custom build steps in the "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
++-        tips.append(tr("Within a session, you can add "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
++-        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
++-        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
++-                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
++-                       "target in the combo box."));
++-        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
++-                       "revision control systems</a> such as Subversion, Perforce and Git."));
++-        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
++-    }
++-    return tips;
++-}
++ 
++ } // namespace Welcome
++diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h
++index 0555ce6..1576d24 100644
++--- a/src/plugins/welcome/welcomemode.h
+++++ b/src/plugins/welcome/welcomemode.h
++@@ -54,18 +54,6 @@ public:
++     WelcomeMode();
++     ~WelcomeMode();
++ 
++-    struct WelcomePageData{
++-        bool operator==(const WelcomePageData &rhs) const;
++-        bool operator!=(const WelcomePageData &rhs) const;
++-
++-        QString previousSession;
++-        QString activeSession;
++-        QStringList sessionList;
++-        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
++-    };
++-
++-    void updateWelcomePage(const WelcomePageData &welcomePageData);
++-
++     // IMode
++     QString name() const;
++     QIcon icon() const;
++@@ -75,31 +63,14 @@ public:
++     QList<int> context() const;
++     void activated();
++     QString contextHelpId() const { return QLatin1String("Qt Creator"); }
++-
++-    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
++-
++-signals:
++-    void requestProject(const QString &project);
++-    void requestSession(const QString &session);
++-    void openHelpPage(const QString& url);
++-    void openContextHelpPage(const QString& url);
++-    void manageSessions();
+++    void initPlugins();
++ 
++ private slots:
++     void slotFeedback();
++-    void slotSessionClicked(const QString &data);
++-    void slotProjectClicked(const QString &data);
++-    void slotUrlClicked(const QString &data);
++-    void slotEnableExampleButton(int);
++-    void slotOpenExample();
++-    void slotCreateNewProject();
++-    void slotNextTip();
++-    void slotPrevTip();
+++    void welcomePluginAdded(QObject*);
+++    void showClickedPage();
++ 
++ private:
++-    void activateEditMode();
++-    QStringList tipsOfTheDay();
++-
++     WelcomeModePrivate *m_d;
++ };
++ 
++diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui
++index c70aabb..e1c18bd 100644
++--- a/src/plugins/welcome/welcomemode.ui
+++++ b/src/plugins/welcome/welcomemode.ui
++@@ -1,7 +1,7 @@
++ <?xml version="1.0" encoding="UTF-8"?>
++ <ui version="4.0">
++- <class>Welcome::WelcomePage</class>
++- <widget class="QWidget" name="Core::Utils::WelcomePage">
+++ <class>Welcome::WelcomeMode</class>
+++ <widget class="QWidget" name="Welcome::WelcomeMode">
++   <property name="geometry">
++    <rect>
++     <x>0</x>
++@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{
++              <verstretch>0</verstretch>
++             </sizepolicy>
++            </property>
+++           <property name="minimumSize">
+++            <size>
+++             <width>0</width>
+++             <height>10</height>
+++            </size>
+++           </property>
++            <property name="font">
++             <font>
++              <weight>50</weight>
++@@ -238,129 +244,6 @@ QToolButton:pressed {
++            <property name="frameShadow">
++             <enum>QFrame::Plain</enum>
++            </property>
++-           <layout class="QGridLayout" name="gridLayout_2">
++-            <property name="margin">
++-             <number>0</number>
++-            </property>
++-            <property name="spacing">
++-             <number>0</number>
++-            </property>
++-            <item row="0" column="0">
++-             <widget class="QToolButton" name="gettingStartedSectButton">
++-              <property name="enabled">
++-               <bool>true</bool>
++-              </property>
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="styleSheet">
++-               <string notr="true"/>
++-              </property>
++-              <property name="text">
++-               <string>Getting Started</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-              <property name="checked">
++-               <bool>true</bool>
++-              </property>
++-              <property name="autoExclusive">
++-               <bool>false</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="1">
++-             <widget class="QToolButton" name="developSectButton">
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="text">
++-               <string>Develop</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-              <property name="autoExclusive">
++-               <bool>false</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="2">
++-             <widget class="QToolButton" name="communitySectButton">
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="styleSheet">
++-               <string notr="true"/>
++-              </property>
++-              <property name="text">
++-               <string>Community</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="3">
++-             <spacer name="horizontalSpacer_2">
++-              <property name="orientation">
++-               <enum>Qt::Horizontal</enum>
++-              </property>
++-              <property name="sizeType">
++-               <enum>QSizePolicy::Fixed</enum>
++-              </property>
++-              <property name="sizeHint" stdset="0">
++-               <size>
++-                <width>5</width>
++-                <height>20</height>
++-               </size>
++-              </property>
++-             </spacer>
++-            </item>
++-           </layout>
++           </widget>
++          </item>
++          <item>
++@@ -368,575 +251,7 @@ QToolButton:pressed {
++            <property name="currentIndex">
++             <number>0</number>
++            </property>
++-           <widget class="QWidget" name="gettingStartedPage">
++-            <layout class="QGridLayout" name="gridLayout_9">
++-             <property name="leftMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="topMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="rightMargin">
++-              <number>12</number>
++-             </property>
++-             <property name="bottomMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="spacing">
++-              <number>24</number>
++-             </property>
++-             <item row="0" column="0" rowspan="2">
++-              <widget class="QFrame" name="tutorialsFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_6">
++-                <item row="0" column="0">
++-                 <widget class="QLabel" name="tutorialsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="1">
++-              <widget class="QFrame" name="demosExamplesFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_8">
++-                <property name="rightMargin">
++-                 <number>8</number>
++-                </property>
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <item row="0" column="0" colspan="4">
++-                 <widget class="QLabel" name="demoTitleLabel">
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0">
++-                 <widget class="QComboBox" name="examplesComboBox">
++-                  <property name="enabled">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <item>
++-                   <property name="text">
++-                    <string>Examples not installed</string>
++-                   </property>
++-                  </item>
++-                 </widget>
++-                </item>
++-                <item row="1" column="2">
++-                 <widget class="QToolButton" name="openExampleButton">
++-                  <property name="enabled">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="text">
++-                   <string>Open</string>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="1">
++-                 <spacer name="horizontalSpacer">
++-                  <property name="orientation">
++-                   <enum>Qt::Horizontal</enum>
++-                  </property>
++-                  <property name="sizeType">
++-                   <enum>QSizePolicy::Fixed</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>6</width>
++-                    <height>6</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="1" column="1">
++-              <widget class="QFrame" name="didyouKnowFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_11">
++-                <property name="rightMargin">
++-                 <number>9</number>
++-                </property>
++-                <item row="0" column="0">
++-                 <widget class="QLabel" name="didYouKnowTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="2">
++-                 <widget class="QTextBrowser" name="didYouKnowTextBrowser">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="frameShadow">
++-                   <enum>QFrame::Plain</enum>
++-                  </property>
++-                  <property name="verticalScrollBarPolicy">
++-                   <enum>Qt::ScrollBarAlwaysOff</enum>
++-                  </property>
++-                  <property name="horizontalScrollBarPolicy">
++-                   <enum>Qt::ScrollBarAlwaysOff</enum>
++-                  </property>
++-                  <property name="openExternalLinks">
++-                   <bool>true</bool>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="0" column="1">
++-                 <layout class="QGridLayout" name="gridLayout_10">
++-                  <property name="spacing">
++-                   <number>0</number>
++-                  </property>
++-                  <item row="0" column="0" colspan="2">
++-                   <spacer name="verticalSpacer_4">
++-                    <property name="orientation">
++-                     <enum>Qt::Vertical</enum>
++-                    </property>
++-                    <property name="sizeType">
++-                     <enum>QSizePolicy::Preferred</enum>
++-                    </property>
++-                    <property name="sizeHint" stdset="0">
++-                     <size>
++-                      <width>20</width>
++-                      <height>2</height>
++-                     </size>
++-                    </property>
++-                   </spacer>
++-                  </item>
++-                  <item row="1" column="0">
++-                   <widget class="QToolButton" name="prevTipBtn">
++-                    <property name="styleSheet">
++-                     <string notr="true">QToolButton{
++-	border-right:solid 0 px;
++-	height:16px;
++-	width:12px;
++-}
++-</string>
++-                    </property>
++-                    <property name="text">
++-                     <string/>
++-                    </property>
++-                    <property name="icon">
++-                     <iconset resource="welcome.qrc">
++-                      <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
++-                    </property>
++-                    <property name="arrowType">
++-                     <enum>Qt::NoArrow</enum>
++-                    </property>
++-                   </widget>
++-                  </item>
++-                  <item row="1" column="1">
++-                   <widget class="QToolButton" name="nextTipBtn">
++-                    <property name="styleSheet">
++-                     <string notr="true">QToolButton{
++-	border-left:solid 0 px;
++-	height:16px;
++-	width:12px;
++-}
++-</string>
++-                    </property>
++-                    <property name="text">
++-                     <string/>
++-                    </property>
++-                    <property name="icon">
++-                     <iconset resource="welcome.qrc">
++-                      <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
++-                    </property>
++-                    <property name="arrowType">
++-                     <enum>Qt::NoArrow</enum>
++-                    </property>
++-                   </widget>
++-                  </item>
++-                  <item row="2" column="0" colspan="2">
++-                   <spacer name="verticalSpacer_3">
++-                    <property name="orientation">
++-                     <enum>Qt::Vertical</enum>
++-                    </property>
++-                    <property name="sizeHint" stdset="0">
++-                     <size>
++-                      <width>20</width>
++-                      <height>2</height>
++-                     </size>
++-                    </property>
++-                   </spacer>
++-                  </item>
++-                 </layout>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-            </layout>
++-           </widget>
++-           <widget class="QWidget" name="developPage">
++-            <layout class="QGridLayout" name="gridLayout_4">
++-             <property name="margin">
++-              <number>18</number>
++-             </property>
++-             <property name="spacing">
++-              <number>24</number>
++-             </property>
++-             <item row="0" column="0">
++-              <widget class="QFrame" name="recentSessionsFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="minimumSize">
++-                <size>
++-                 <width>270</width>
++-                 <height>130</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_3">
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <property name="verticalSpacing">
++-                 <number>3</number>
++-                </property>
++-                <item row="0" column="0" colspan="3">
++-                 <widget class="QLabel" name="recentSessionsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="3">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-                <item row="3" column="0">
++-                 <widget class="QPushButton" name="manageSessionsButton">
++-                  <property name="focusPolicy">
++-                   <enum>Qt::TabFocus</enum>
++-                  </property>
++-                  <property name="text">
++-                   <string>Manage Sessions...</string>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="4" column="0">
++-                 <spacer name="verticalSpacer">
++-                  <property name="orientation">
++-                   <enum>Qt::Vertical</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>20</width>
++-                    <height>40</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="2">
++-              <widget class="QFrame" name="recentProjectsFrame">
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_5">
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <property name="verticalSpacing">
++-                 <number>3</number>
++-                </property>
++-                <property name="rightMargin">
++-                 <number>9</number>
++-                </property>
++-                <item row="0" column="0" colspan="3">
++-                 <widget class="QLabel" name="projTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="3">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-                <item row="3" column="0">
++-                 <widget class="QPushButton" name="createNewProjectButton">
++-                  <property name="focusPolicy">
++-                   <enum>Qt::TabFocus</enum>
++-                  </property>
++-                  <property name="text">
++-                   <string>Create New Project...</string>
++-                  </property>
++-                  <property name="flat">
++-                   <bool>true</bool>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="4" column="0">
++-                 <spacer name="verticalSpacer_2">
++-                  <property name="orientation">
++-                   <enum>Qt::Vertical</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>20</width>
++-                    <height>40</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-            </layout>
++-           </widget>
++-           <widget class="QWidget" name="communityPage">
+++           <widget class="QWidget" name="widget">
++             <layout class="QGridLayout" name="gridLayout_7">
++              <property name="margin">
++               <number>18</number>
++@@ -944,168 +259,6 @@ QToolButton:pressed {
++              <property name="spacing">
++               <number>24</number>
++              </property>
++-             <item row="0" column="0">
++-              <widget class="QFrame" name="labsFrame">
++-               <property name="frameShape">
++-                <enum>QFrame::NoFrame</enum>
++-               </property>
++-               <property name="frameShadow">
++-                <enum>QFrame::Plain</enum>
++-               </property>
++-               <layout class="QVBoxLayout" name="verticalLayout_2">
++-                <item>
++-                 <widget class="QLabel" name="labsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item>
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="minimumSize">
++-                   <size>
++-                    <width>340</width>
++-                    <height>0</height>
++-                   </size>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="1">
++-              <widget class="QFrame" name="sitesFrame">
++-               <property name="frameShape">
++-                <enum>QFrame::NoFrame</enum>
++-               </property>
++-               <property name="frameShadow">
++-                <enum>QFrame::Plain</enum>
++-               </property>
++-               <layout class="QVBoxLayout" name="verticalLayout_3">
++-                <item>
++-                 <widget class="QLabel" name="sitesTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item>
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++             </layout>
++            </widget>
++           </widget>
++@@ -1219,13 +372,6 @@ QToolButton:pressed {
++    </item>
++   </layout>
++  </widget>
++- <customwidgets>
++-  <customwidget>
++-   <class>Core::Utils::WelcomeModeTreeWidget</class>
++-   <extends>QTreeWidget</extends>
++-   <header>utils/welcomemodetreewidget.h</header>
++-  </customwidget>
++- </customwidgets>
++  <resources>
++   <include location="welcome.qrc"/>
++  </resources>
++diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
++index e9743a9..544e36a 100644
++--- a/src/plugins/welcome/welcomeplugin.cpp
+++++ b/src/plugins/welcome/welcomeplugin.cpp
++@@ -31,6 +31,8 @@
++ 
++ #include "welcomemode.h"
++ 
+++#include "communitywelcomeplugin.h"
+++
++ #include <coreplugin/actionmanager/actionmanager.h>
++ #include <coreplugin/basemode.h>
++ #include <coreplugin/coreconstants.h>
++@@ -45,11 +47,10 @@
++ #include <QtGui/QMessageBox>
++ #include <QtGui/QPushButton>
++ 
++-using namespace Welcome;
++-
+++using namespace Welcome::Internal;
++ 
++ WelcomePlugin::WelcomePlugin()
++-  : m_welcomeMode(0)
+++  : m_welcomeMode(0), m_communityWelcomePlugin(0)
++ {
++ }
++ 
++@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin()
++         removeObject(m_welcomeMode);
++         delete m_welcomeMode;
++     }
+++    if (m_communityWelcomePlugin) {
+++        removeObject(m_communityWelcomePlugin);
+++        delete m_communityWelcomePlugin;
+++    }
++ }
++ 
++ /*! Initializes the plugin. Returns true on success.
++@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
++     Q_UNUSED(arguments)
++     Q_UNUSED(error_message)
++ 
+++    m_communityWelcomePlugin = new Internal::CommunityWelcomePlugin;
+++    addObject(m_communityWelcomePlugin);
+++
++     m_welcomeMode = new WelcomeMode;
++     addObject(m_welcomeMode);
++ 
++@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
++ */
++ void WelcomePlugin::extensionsInitialized()
++ {
+++    m_welcomeMode->initPlugins();
++     Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName());
++ }
++ 
++diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h
++index 970ec39..9855595 100644
++--- a/src/plugins/welcome/welcomeplugin.h
+++++ b/src/plugins/welcome/welcomeplugin.h
++@@ -36,6 +36,9 @@ namespace Welcome {
++ 
++ class WelcomeMode;
++ 
+++namespace Internal {
+++class CommunityWelcomePlugin;
+++
++ class WelcomePlugin
++   : public ExtensionSystem::IPlugin
++ {
++@@ -51,8 +54,10 @@ public:
++ 
++ private:
++     WelcomeMode *m_welcomeMode;
+++    Internal::CommunityWelcomePlugin *m_communityWelcomePlugin;
++ };
++ 
++ } // namespace Welcome
+++} // namespace Internal
++ 
++ #endif // WELCOMEPLUGIN_H
++-- 
++1.6.3.msysgit.0
++
+diff --git a/0001-Make-the-welcome-screen-into-plugins.patch.modified b/0001-Make-the-welcome-screen-into-plugins.patch.modified
+new file mode 100644
+index 0000000..3ccea00
+--- /dev/null
++++ b/0001-Make-the-welcome-screen-into-plugins.patch.modified
+@@ -0,0 +1,4364 @@
++From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001
++From: Daniel Molkentin <daniel.molkentin@nokia.com>
++Date: Mon, 27 Jul 2009 13:55:30 +0200
++Subject: [PATCH] Make the welcome screen into plugins.
++
++This removes the all hard dependencies to and from welcome screen,
++except the one to the core plugin. More in detail:
++
++- Add IWelcomePage to add a tab to the welcome screen
++- Move tabs in the modules where they belong
++- Enables QHelpManager to open help fullscreen and contextually
++- "Getting Started" moves to Qt4ProjectManager
++- Projects & Sessions (aka "Develop") moves to ProjectExplorer
++- "Community" remains in the welcome plugin for simplicity
++---
++ src/libs/aggregation/aggregation.pri               |    2 +
++ src/libs/extensionsystem/extensionsystem.pro       |   10 +-
++ src/libs/extensionsystem/iwelcomepage.cpp          |    8 +
++ src/libs/extensionsystem/iwelcomepage.h            |   31 +
++ src/libs/extensionsystem/pluginmanager.cpp         |    1 +
++ src/libs/utils/welcomemodetreewidget.cpp           |    2 +
++ src/plugins/coreplugin/coreplugin.h                |    5 -
++ src/plugins/help/Help.pluginspec                   |    1 -
++ src/plugins/help/help.pro                          |    1 -
++ src/plugins/help/helpplugin.cpp                    |   36 +-
++ src/plugins/help/helpplugin.h                      |   17 +-
++ src/plugins/plugins.pro                            |    3 -
++ .../projectexplorer/ProjectExplorer.pluginspec     |    1 -
++ src/plugins/projectexplorer/projectexplorer.cpp    |   38 +-
++ src/plugins/projectexplorer/projectexplorer.h      |    6 +-
++ src/plugins/projectexplorer/projectexplorer.pro    |   11 +-
++ .../projectexplorer_dependencies.pri               |    1 -
++ src/plugins/projectexplorer/projectwelcomepagewidget.cpp |  170 ++++
++ src/plugins/projectexplorer/projectwelcomepagewidget.h   |   81 ++
++ src/plugins/projectexplorer/projectwelcomepagewidget.ui  |  254 ++++++
++ .../projectexplorer/projectwelcomepage.cpp       |   48 ++
++ src/plugins/projectexplorer/projectwelcomepage.h |   58 ++
++ .../projectexplorer/projectwelcomeplugin.ui        |   21 +
++ .../qt4projectmanager/Qt4ProjectManager.pluginspec |    1 -
++ .../gettingstartedwelcomepagewidget.cpp                  |  271 ++++++
++ .../qt4projectmanager/gettingstartedwelcomepagewidget.h  |   69 ++
++ .../qt4projectmanager/gettingstartedwelcomepagewidget.ui |  343 ++++++++
++ .../gettingstartedwelcomepage.cpp                |   47 ++
++ .../gettingstartedwelcomepage.h                  |   56 ++
++ .../qt4projectmanager/qt4projectmanager.pro        |   14 +-
++ .../qt4projectmanager_dependencies.pri             |    1 -
++ .../qt4projectmanager/qt4projectmanagerplugin.cpp  |   13 +-
++ .../qt4projectmanager/qt4projectmanagerplugin.h    |    2 +
++ src/plugins/qt4projectmanager/qtversionmanager.cpp |    9 +-
++ src/plugins/qt4projectmanager/qtversionmanager.h   |    5 +-
++ src/plugins/welcome/communitywelcomepagewidget.cpp       |   93 +++
++ src/plugins/welcome/communitywelcomepagewidget.h         |   64 ++
++ src/plugins/welcome/communitywelcomepagewidget.ui        |  190 +++++
++ src/plugins/welcome/communitywelcomepage.h     |   47 ++
++ src/plugins/welcome/communitywelcomepage.h       |   60 ++
++ src/plugins/welcome/rssfetcher.cpp                 |    2 +-
++ src/plugins/welcome/rssfetcher.h                   |    2 +
++ src/plugins/welcome/welcome.pro                    |   11 +-
++ src/plugins/welcome/welcomemode.cpp                |  409 ++-------
++ src/plugins/welcome/welcomemode.h                  |   35 +-
++ src/plugins/welcome/welcomemode.ui                 |  872 +-------------------
++ src/plugins/welcome/welcomeplugin.cpp              |   15 +-
++ src/plugins/welcome/welcomeplugin.h                |    5 +
++ 48 files changed, 2142 insertions(+), 1300 deletions(-)
++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp
++ create mode 100644 src/libs/extensionsystem/iwelcomepage.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp
++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h
++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp
++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h
++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui
++ create mode 100644 src/plugins/welcome/communitywelcomepage.h
++ create mode 100644 src/plugins/welcome/communitywelcomepage.h
++
++diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro
++index 81f3bc8..ea5574d 100644
++--- a/src/libs/extensionsystem/extensionsystem.pro
+++++ b/src/libs/extensionsystem/extensionsystem.pro
++@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY
++ include(../../qtcreatorlibrary.pri)
++ include(extensionsystem_dependencies.pri)
++ 
++-unix:!macx:!freebsd* {
++-  LIBS += -ldl
++-}
+++unix:!macx:!freebsd*:LIBS += -ldl
++ 
++ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\"
++ 
++@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \
++     pluginspec_p.h \
++     pluginview.h \
++     pluginview_p.h \
++-    optionsparser.h
+++    optionsparser.h \
+++    iwelcomeplugin.h
++ SOURCES += pluginerrorview.cpp \
++     plugindetailsview.cpp \
++     iplugin.cpp \
++     pluginmanager.cpp \
++     pluginspec.cpp \
++     pluginview.cpp \
++-    optionsparser.cpp
+++    optionsparser.cpp \
+++    iwelcomepage.cpp
++ FORMS += pluginview.ui \
++     pluginerrorview.ui \
++     plugindetailsview.ui
++diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp
++new file mode 100644
++index 0000000..345d77b
++--- /dev/null
+++++ b/src/libs/extensionsystem/iwelcomepage.cpp
++@@ -0,0 +1,8 @@
+++#include "iwelcomepage.h"
+++
+++using namespace ExtensionSystem;
+++
+++IWelcomePage::IWelcomePage()
+++{
+++
+++}
++diff --git a/src/libs/extensionsystem/iwelcomepage b/src/libs/extensionsystem/iwelcomepage.h
++new file mode 100644
++index 0000000..33546ed
++--- /dev/null
+++++ b/src/libs/extensionsystem/iwelcomepage.h
++@@ -0,0 +1,31 @@
+++#ifndef IWELCOMEPAGE_H
+++#define IWELCOMEPAGE_H
+++
+++
+++#include "extensionsystem_global.h"
+++
+++#include <QObject>
+++
+++namespace ExtensionSystem {
+++
+++class IWelcomePagePrivate;
+++
+++class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject
+++{
+++    Q_OBJECT
+++
+++public:
+++    IWelcomePage();
+++
+++    virtual QWidget *page() = 0;
+++    virtual QString title() const = 0;
+++    virtual int priority() const { return 0; }
+++
+++private:
+++    // not used atm
+++    IWelcomePagePrivate *m_d;
+++};
+++
+++}
+++
+++#endif // IWELCOMEPAGE_H
++diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp
++index 26d55a3..7ea7373 100644
++--- a/src/libs/utils/welcomemodetreewidget.cpp
+++++ b/src/libs/utils/welcomemodetreewidget.cpp
++@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) :
++     m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png"));
++     connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
++             SLOT(slotItemClicked(QTreeWidgetItem *)));
+++
+++    viewport()->setAutoFillBackground(false);
++ }
++ 
++ WelcomeModeTreeWidget::~WelcomeModeTreeWidget()
++diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
++index 04e5be4..ce487fb 100644
++--- a/src/plugins/coreplugin/coreplugin.h
+++++ b/src/plugins/coreplugin/coreplugin.h
++@@ -33,10 +33,6 @@
++ #include <extensionsystem/iplugin.h>
++ 
++ namespace Core {
++-    class IMode;
++-}
++-
++-namespace Core {
++ namespace Internal {
++ 
++ class EditMode;
++@@ -59,7 +55,6 @@ public slots:
++ 
++ private:
++     MainWindow *m_mainWindow;
++-    Core::IMode *m_welcomeMode;
++     EditMode *m_editMode;
++ };
++ 
++diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec
++index d7ccc07..29f1b46 100644
++--- a/src/plugins/help/Help.pluginspec
+++++ b/src/plugins/help/Help.pluginspec
++@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="Core" version="1.2.80"/>
++         <dependency name="Find" version="1.2.80"/>
++         <dependency name="QuickOpen" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro
++index 1f5ec55..b733a1f 100644
++--- a/src/plugins/help/help.pro
+++++ b/src/plugins/help/help.pro
++@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ include(../../plugins/find/find.pri)
++ include(../../plugins/quickopen/quickopen.pri)
++-include(../../plugins/welcome/welcome.pri)
++ QT += network
++ CONFIG += help
++ DEFINES += QT_CLUCENE_SUPPORT \
++diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
++index f6e8db8..2ff11c8 100644
++--- a/src/plugins/help/helpplugin.cpp
+++++ b/src/plugins/help/helpplugin.cpp
++@@ -87,8 +87,8 @@
++ using namespace Help;
++ using namespace Help::Internal;
++ 
++-HelpManager::HelpManager(QHelpEngine *helpEngine)
++-    : m_helpEngine(helpEngine)
+++HelpManager::HelpManager(Internal::HelpPlugin* plugin)
+++    : m_plugin(plugin)
++ {
++ }
++ 
++@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
++ {
++     bool needsSetup = false;
++     {
++-        QHelpEngineCore hc(m_helpEngine->collectionFile());
+++        QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile());
++         if (!hc.setupData())
++             qWarning() << "Could not initialize help engine:" << hc.error();
++         foreach (const QString &fileName, fileNames) {
++@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
++         }
++     }
++     if (needsSetup)
++-        m_helpEngine->setupData();
+++        m_plugin->helpEngine()->setupData();
+++}
+++
+++void HelpManager::openHelpPage(const QString& url)
+++{
+++    m_plugin->openHelpPage(url);
+++}
+++
+++void HelpManager::openContextHelpPage(const QString& url)
+++{
+++    m_plugin->openContextHelpPage(url);
++ }
++ 
++ HelpPlugin::HelpPlugin() :
++@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
++     connect(m_helpEngine, SIGNAL(setupFinished()), this,
++         SLOT(updateFilterComboBox()));
++ 
++-    addAutoReleasedObject(new HelpManager(m_helpEngine));
+++    addAutoReleasedObject(new HelpManager(this));
++ 
++     m_filterSettingsPage = new FilterSettingsPage(m_helpEngine);
++     addAutoReleasedObject(m_filterSettingsPage);
++@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
++     return true;
++ }
++ 
+++QHelpEngine* HelpPlugin::helpEngine() const
+++{
+++    return m_helpEngine;
+++}
+++
++ void HelpPlugin::createRightPaneSideBar()
++ {
++     QAction *switchToHelpMode = new QAction("Go to Help Mode", this);
++@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized()
++     updateFilterComboBox();
++     m_bookmarkManager->setupBookmarkModels();
++ 
++-    using namespace Core::Internal;
++-    using namespace Core::Constants;
++-    Welcome::WelcomeMode *welcomeMode =
++-        qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME));
++-    if (welcomeMode) {
++-        connect(welcomeMode, SIGNAL(openHelpPage(QString)), this,
++-            SLOT(openHelpPage(QString)));
++-        connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this,
++-            SLOT(openContextHelpPage(QString)));
++-    }
++-
++ #if !defined(QT_NO_WEBKIT)
++     QWebSettings* webSettings = QWebSettings::globalSettings();
++     QFont font(webSettings->fontFamily(QWebSettings::StandardFont),
++diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
++index 6ab78cf..10cf1fd 100644
++--- a/src/plugins/help/helpplugin.h
+++++ b/src/plugins/help/helpplugin.h
++@@ -63,6 +63,7 @@ class SideBarItem;
++ namespace Help {
++ namespace Internal {
++     class CentralWidget;
+++    class HelpPlugin;
++ }
++ 
++ namespace Constants {
++@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject
++ {
++     Q_OBJECT
++ public:
++-    HelpManager(QHelpEngine *helpEngine);
+++    HelpManager(Internal::HelpPlugin*);
++ 
++     void registerDocumentation(const QStringList &fileNames);
+++    void openHelpPage(const QString& url);
+++    void openContextHelpPage(const QString &url);
++ 
++ private:
++-    QHelpEngine *m_helpEngine;
+++    Internal::HelpPlugin *m_plugin;
++ };
++ 
++ namespace Internal {
++@@ -108,6 +111,12 @@ public:
++     void setIndexFilter(const QString &filter);
++     QString indexFilter() const;
++ 
+++    void openHelpPage(const QUrl& url);
+++    void openHelpPage(const QString& url);
+++    void openContextHelpPage(const QString &url);
+++
+++    QHelpEngine* helpEngine() const;
+++
++ private slots:
++     void modeChanged(Core::IMode *mode);
++     void activateContext();
++@@ -128,10 +137,6 @@ private slots:
++     void slotHideRightPane();
++     void copyFromSideBar();
++ 
++-    void openHelpPage(const QUrl& url);
++-    void openHelpPage(const QString& url);
++-    void openContextHelpPage(const QString &url);
++-
++     void updateSideBarSource();
++     void updateSideBarSource(const QUrl &newUrl);
++ 
++diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
++index 6ef52c1..b8ae5ec 100644
++--- a/src/plugins/plugins.pro
+++++ b/src/plugins/plugins.pro
++@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen
++ plugin_projectexplorer.depends += plugin_find
++ plugin_projectexplorer.depends += plugin_coreplugin
++ plugin_projectexplorer.depends += plugin_texteditor
++-plugin_projectexplorer.depends += plugin_welcome
++ 
++ plugin_qt4projectmanager.subdir = qt4projectmanager
++ plugin_qt4projectmanager.depends = plugin_texteditor
++@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools
++ plugin_qt4projectmanager.depends += plugin_cppeditor
++ plugin_qt4projectmanager.depends += plugin_help
++ plugin_qt4projectmanager.depends += plugin_designer
++-plugin_qt4projectmanager.depends += plugin_welcome
++ 
++ plugin_quickopen.subdir = quickopen
++ plugin_quickopen.depends = plugin_coreplugin
++@@ -144,7 +142,6 @@ plugin_help.subdir = help
++ plugin_help.depends = plugin_find
++ plugin_help.depends += plugin_quickopen
++ plugin_help.depends += plugin_coreplugin
++-plugin_help.depends += plugin_welcome
++ 
++ plugin_resourceeditor.subdir = resourceeditor
++ plugin_resourceeditor.depends = plugin_coreplugin
++diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
++index 6a66cfe..8b5a7c3 100644
++--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec
+++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
++@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="Find" version="1.2.80"/>
++         <dependency name="QuickOpen" version="1.2.80"/>
++         <dependency name="TextEditor" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
++index f10b628..101a2e8 100644
++--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++++ b/src/plugins/projectexplorer/projectexplorer.cpp
++@@ -57,6 +57,8 @@
++ #include "sessiondialog.h"
++ #include "buildparserfactory.h"
++ #include "projectexplorersettingspage.h"
+++#include "projectwelcomepage.h"
+++#include "projectwelcomepagewidget.h"
++ 
++ #include <coreplugin/basemode.h>
++ #include <coreplugin/coreconstants.h>
++@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin()
++ 
++ ProjectExplorerPlugin::~ProjectExplorerPlugin()
++ {
+++    removeObject(m_welcomePlugin);
++     removeObject(this);
++ }
++ 
++@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++     Core::ICore *core = Core::ICore::instance();
++     Core::ActionManager *am = core->actionManager();
++ 
+++    m_welcomePlugin = new ProjectWelcomePage;
+++    m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page());
+++    Q_ASSERT(m_welcomePage);
+++    connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
+++    addObject(m_welcomePlugin);
++     addObject(this);
++ 
++     connect(core->fileManager(), SIGNAL(currentFileChanged(QString)),
++@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++         m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool();
++     }
++ 
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
++-        (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) {
++-        connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
++-    }
++     connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager()));
++     connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject()));
++ #if 0
++@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
++             this, SLOT(determineSessionToRestoreAtStartup()));
++     connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
++ 
+++    updateWelcomePage();
+++
++     return true;
++ }
++ 
++@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager()
++     Core::ModeManager *modeManager = Core::ModeManager::instance();
++     Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME);
++     if (modeManager->currentMode() == welcomeMode)
++-    {
++-        updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode));
++-    }
+++        updateWelcomePage();
++ }
++ 
++ void ProjectExplorerPlugin::setStartupProject(Project *project)
++@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const
++ }
++ 
++ // update welcome page
++-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode)
+++void ProjectExplorerPlugin::updateWelcomePage()
++ {
++-    Welcome::WelcomeMode::WelcomePageData welcomePageData;
+++    ProjectWelcomePageWidget::WelcomePageData welcomePageData;
++     welcomePageData.sessionList =  m_session->sessions();
++     welcomePageData.activeSession = m_session->activeSession();
++     welcomePageData.previousSession = m_session->lastSession();
++     welcomePageData.projectList = m_recentProjects;
++-    welcomeMode->updateWelcomePage(welcomePageData);
+++    m_welcomePage->updateWelcomePage(welcomePageData);
++ }
++ 
++-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
+++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *)
++ {
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode))
++-        updateWelcomePage(welcomeMode);
+++        updateWelcomePage();
++ }
++
++ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup()
++@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession()
++     // update welcome page
++     Core::ModeManager *modeManager = Core::ModeManager::instance();
++     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*)));
++-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) {
++-        updateWelcomePage(welcomeMode);
++-        connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
++-        connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
++-    }
++-
+++    connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
+++    connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
+++
++     Core::ICore::instance()->openFiles(arguments);
++     updateActions();
++
++diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
++index 0f781ea..48f8c27 100644
++--- a/src/plugins/projectexplorer/projectexplorer.h
+++++ b/src/plugins/projectexplorer/projectexplorer.h
++@@ -72,6 +72,8 @@ class ApplicationOutput;
++ class OutputPane;
++ class ProjectWindow;
++ class ProjectFileFactory;
+++class ProjectWelcomePage;
+++class ProjectWelcomePageWidget;
++
++ struct ProjectExplorerSettings
++ {
++@@ -209,7 +211,7 @@ private:
++ 
++     void updateActions();
++     void addToRecentProjects(const QString &fileName, const QString &displayName);
++-    void updateWelcomePage(Welcome::WelcomeMode *welcomeMode);
+++    void updateWelcomePage();
++     Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const;
++
++     static ProjectExplorerPlugin *m_instance;
++@@ -279,6 +281,8 @@ private:
++     QString m_runMode;
++     QString m_projectFilterString;
++     Internal::ProjectExplorerSettings m_projectExplorerSettings;
+++    Internal::ProjectWelcomePage *m_welcomePlugin;
+++    Internal::ProjectWelcomePageWidget *m_welcomePage;
++ };
++ 
++ namespace Internal {
++diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
++index ffb0b08..4a954cc 100644
++--- a/src/plugins/projectexplorer/projectexplorer.pro
+++++ b/src/plugins/projectexplorer/projectexplorer.pro
++@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \
++     filewatcher.h \
++     debugginghelper.h \
++     abstractmakestep.h \
++-    projectexplorersettingspage.h
+++    projectexplorersettingspage.h \
+++    projectwelcomepage.h \
+++    projectwelcomepagewidget.h
++ SOURCES += projectexplorer.cpp \
++     projectwindow.cpp \
++     buildmanager.cpp \
++@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \
++     filewatcher.cpp \
++     debugginghelper.cpp \
++     abstractmakestep.cpp \
++-    projectexplorersettingspage.cpp
+++    projectexplorersettingspage.cpp \
+++    projectwelcomepage.cpp \
+++    projectwelcomepagewidget.cpp
++ FORMS += processstep.ui \
++     editorsettingspropertiespage.ui \
++     runsettingspropertiespage.ui \
++@@ -119,7 +123,8 @@ FORMS += processstep.ui \
++     projectwizardpage.ui \
++     buildstepspage.ui \
++     removefiledialog.ui \
++-    projectexplorersettingspage.ui
+++    projectexplorersettingspage.ui \
+++    projectwelcomepagewidget.ui
++ win32 { 
++     SOURCES += applicationlauncher_win.cpp \
++         winguiprocess.cpp
++diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
++index ecbb7a4..674c8bb 100644
++--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri
+++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
++@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri)
++ include(../../plugins/find/find.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ include(../../plugins/texteditor/texteditor.pri)
++-include(../../plugins/welcome/welcome.pri)
++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
++new file mode 100644
++index 0000000..ff50f38
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
++@@ -0,0 +1,170 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "projectwelcomepagewidget.h"
+++#include "ui_projectwelcomepagewidget.h"
+++
+++#include <coreplugin/coreconstants.h>
+++#include <coreplugin/uniqueidmanager.h>
+++#include <coreplugin/modemanager.h>
+++#include <coreplugin/icore.h>
+++#include <coreplugin/dialogs/iwizard.h>
+++
+++#include <QtCore/QFileInfo>
+++#include <QtCore/QDir>
+++#include <QtCore/QPair>
+++#include <QtGui/QLabel>
+++#include <QtGui/QTreeWidgetItem>
+++
+++#include <QtCore/QDebug>
+++
+++using namespace ProjectExplorer::Internal;
+++
+++static QString formatTitleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const
+++{
+++    return previousSession == rhs.previousSession
+++        && activeSession   == rhs.activeSession
+++        && sessionList     == rhs.sessionList
+++        && projectList     == rhs.projectList;
+++}
+++
+++bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const
+++{
+++    return previousSession != rhs.previousSession
+++        || activeSession   != rhs.activeSession
+++        || sessionList     != rhs.sessionList
+++        || projectList     != rhs.projectList;
+++}
+++
+++QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d)
+++{
+++    dgb.nospace() << "PreviousSession=" << d.previousSession
+++        << " activeSession=" << d.activeSession
+++        << " sessionList=" << d.sessionList
+++        << " projectList=" << d.projectList;
+++    return dgb;
+++}
+++
+++ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::ProjectWelcomePageWidget)
+++{
+++    ui->setupUi(this);
+++    ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project")));
+++    ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session")));
+++    updateWelcomePage(WelcomePageData());
+++
+++    connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
+++    connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
+++    connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
+++    connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
+++
+++}
+++
+++ProjectWelcomePageWidget::~ProjectWelcomePageWidget()
+++{
+++    delete ui;
+++}
+++
+++void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData)
+++{
+++    // Update only if data are modified
+++    if (welcomePageData == lastData)
+++        return;
+++    lastData = welcomePageData;
+++
+++    setUpdatesEnabled(false);
+++    ui->sessTreeWidget->clear();
+++    ui->projTreeWidget->clear();
+++
+++    if (welcomePageData.sessionList.count() > 0) {
+++        foreach (const QString &s, welcomePageData.sessionList) {
+++            QString str = s;
+++            if (s == welcomePageData.previousSession)
+++                str = tr("%1 (last session)").arg(s);
+++            ui->sessTreeWidget->addItem(str, s);
+++        }
+++        ui->sessTreeWidget->updateGeometry();
+++        ui->sessTreeWidget->show();
+++    } else {
+++        ui->sessTreeWidget->hide();
+++    }
+++
+++    typedef QPair<QString, QString> QStringPair;
+++    if (welcomePageData.projectList.count() > 0) {
+++        foreach (const QStringPair &it, welcomePageData.projectList) {
+++            QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first);
+++            const QFileInfo fi(it.first);
+++            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
+++        }
+++    } else {
+++        ui->projTreeWidget->hide();
+++    }
+++    ui->projTreeWidget->updateGeometry();
+++    setUpdatesEnabled(true);
+++}
+++
+++void ProjectWelcomePageWidget::activateEditMode()
+++{
+++    Core::ModeManager *modeManager = Core::ModeManager::instance();
+++    if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME))
+++        modeManager->activateMode(Core::Constants::MODE_EDIT);
+++}
+++
+++
+++void ProjectWelcomePageWidget::slotSessionClicked(const QString &data)
+++{
+++    emit requestSession(data);
+++    activateEditMode();
+++}
+++
+++void ProjectWelcomePageWidget::slotProjectClicked(const QString &data)
+++{
+++    emit requestProject(data);
+++    activateEditMode();
+++}
+++
+++void ProjectWelcomePageWidget::slotCreateNewProject()
+++{
+++    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
+++                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
+++}
++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h
++new file mode 100644
++index 0000000..02e277d
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h
++@@ -0,0 +1,81 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef PROJECTWELCOMEPAGEWIDGET_H
+++#define PROJECTWELCOMEPAGEWIDGET_H
+++
+++#include <QtGui/QWidget>
+++
+++
+++namespace ProjectExplorer {
+++    namespace Internal {
+++
+++
+++namespace Ui {
+++    class ProjectWelcomePageWidget;
+++}
+++
+++class ProjectWelcomePageWidget : public QWidget {
+++    Q_OBJECT
+++public:
+++    ProjectWelcomePageWidget(QWidget *parent = 0);
+++    ~ProjectWelcomePageWidget();
+++
+++    struct WelcomePageData{
+++        bool operator==(const WelcomePageData &rhs) const;
+++        bool operator!=(const WelcomePageData &rhs) const;
+++
+++        QString previousSession;
+++        QString activeSession;
+++        QStringList sessionList;
+++        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
+++    };
+++
+++    void updateWelcomePage(const WelcomePageData &welcomePageData);
+++
+++signals:
+++    void requestProject(const QString &project);
+++    void requestSession(const QString &session);
+++    void manageSessions();
+++
+++private slots:
+++    void slotSessionClicked(const QString &data);
+++    void slotProjectClicked(const QString &data);
+++    void slotCreateNewProject();
+++
+++private:
+++    void activateEditMode();
+++    Ui::ProjectWelcomePageWidget *ui;
+++    WelcomePageData lastData;
+++};
+++
+++}
+++}
+++
+++#endif // PROJECTWELCOMEPAGEWIDGET_H
++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
++new file mode 100644
++index 0000000..cb26957
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
++@@ -0,0 +1,254 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class>
+++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>667</width>
+++    <height>365</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QHBoxLayout" name="horizontalLayout">
+++   <item>
+++    <widget class="QFrame" name="recentSessionsFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="minimumSize">
+++      <size>
+++       <width>270</width>
+++       <height>130</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_3">
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <property name="verticalSpacing">
+++       <number>3</number>
+++      </property>
+++      <item row="0" column="0" colspan="3">
+++       <widget class="QLabel" name="recentSessionsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="3">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++      <item row="3" column="0">
+++       <widget class="QPushButton" name="manageSessionsButton">
+++        <property name="focusPolicy">
+++         <enum>Qt::TabFocus</enum>
+++        </property>
+++        <property name="text">
+++         <string>Manage Sessions...</string>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="4" column="0">
+++       <spacer name="verticalSpacer">
+++        <property name="orientation">
+++         <enum>Qt::Vertical</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>20</width>
+++          <height>40</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item>
+++    <widget class="QFrame" name="recentProjectsFrame">
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_5">
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <property name="verticalSpacing">
+++       <number>3</number>
+++      </property>
+++      <property name="rightMargin">
+++       <number>9</number>
+++      </property>
+++      <item row="0" column="0" colspan="3">
+++       <widget class="QLabel" name="projTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="3">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++      <item row="3" column="0">
+++       <widget class="QPushButton" name="createNewProjectButton">
+++        <property name="focusPolicy">
+++         <enum>Qt::TabFocus</enum>
+++        </property>
+++        <property name="text">
+++         <string>Create New Project...</string>
+++        </property>
+++        <property name="flat">
+++         <bool>false</bool>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="4" column="0">
+++       <spacer name="verticalSpacer_2">
+++        <property name="orientation">
+++         <enum>Qt::Vertical</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>20</width>
+++          <height>40</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
++new file mode 100644
++index 0000000..d850c8f
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
++@@ -0,0 +1,48 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "projectwelcomepage.h"
+++#include "projectwelcomepagewidget.h"
+++
+++namespace ProjectExplorer {
+++namespace Internal {
+++
+++ProjectWelcomePage::ProjectWelcomePage()
+++ : m_page(new ProjectWelcomePageWidget)
+++{
+++
+++}
+++
+++QWidget* ProjectWelcomePage::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace ProjectExplorer
++diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h
++new file mode 100644
++index 0000000..af55a7d
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomepage.h
++@@ -0,0 +1,58 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef PROJECTWELCOMEPAGE_H
+++#define PROJECTWELCOMEPAGE_H
+++
+++#include <extensionsystem/iwelcomepage.h>
+++
+++namespace ProjectExplorer {
+++namespace Internal {
+++
+++class ProjectWelcomePageWidget;
+++
+++class ProjectWelcomePage : public ExtensionSystem::IWelcomePage
+++{
+++    Q_OBJECT
+++public:
+++    ProjectWelcomePage();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Develop"); }
+++    int priority() const { return 20; }
+++private:
+++    ProjectWelcomePageWidget *m_page;
+++
+++
+++};
+++
+++} // namespace Internal
+++} // namespace ProjectExplorer
+++
+++#endif // PROJECTWELCOMEPAGE_H
++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui
++new file mode 100644
++index 0000000..7f7c84b
++--- /dev/null
+++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui
++@@ -0,0 +1,21 @@
+++<ui version="4.0" >
+++ <author/>
+++ <comment/>
+++ <exportmacro/>
+++ <class>ProjectWelcomePage</class>
+++ <widget class="QWidget" name="ProjectWelcomePage" >
+++  <property name="geometry" >
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>400</width>
+++    <height>300</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle" >
+++   <string>Form</string>
+++  </property>
+++ </widget>
+++ <pixmapfunction/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
++index 3b515bd..c4b8d44 100644
++--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
+++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
++@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
++         <dependency name="CppEditor" version="1.2.80"/>
++         <dependency name="Help" version="1.2.80"/>
++         <dependency name="Designer" version="1.2.80"/>
++-        <dependency name="Welcome" version="1.2.80"/>
++     </dependencyList>
++ </plugin>
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
++new file mode 100644
++index 0000000..ca1db4c
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
++@@ -0,0 +1,271 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "gettingstartedwelcomepagewidget.h"
+++#include "ui_gettingstartedwelcomepagewidget.h"
+++
+++#include <coreplugin/icore.h>
+++#include <coreplugin/coreconstants.h>
+++
+++#include <extensionsystem/pluginmanager.h>
+++
+++#include <help/helpplugin.h>
+++
+++#include <QtCore/QDateTime>
+++#include <QtCore/QDir>
+++#include <QtCore/QFileInfo>
+++#include <QtCore/QDebug>
+++#include <QtCore/QUrl>
+++#include <QtCore/QXmlStreamReader>
+++#include <QtGui/QFont>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::GettingStartedWelcomePageWidget)
+++{
+++    ui->setupUi(this);
+++    ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
+++    ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
+++    ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
+++    ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
+++
+++    connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&)));
+++    connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
+++    connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
+++
+++    ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
+++                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+++    ui->tutorialTreeWidget->addItem(tr("Creating an address book"),
+++                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Understanding widgets"),
+++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Building with qmake"),
+++                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
+++    ui->tutorialTreeWidget->addItem(tr("Writing test cases"),
+++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
+++
+++    srand(QDateTime::currentDateTime().toTime_t());
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = rand()%tips.count();
+++
+++    QTextDocument *doc = ui->didYouKnowTextBrowser->document();
+++    doc->setDefaultStyleSheet("a:link {color:black;}");
+++    ui->didYouKnowTextBrowser->setDocument(doc);
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++
+++    connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
+++    connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
+++
+++}
+++
+++GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget()
+++{
+++    delete ui;
+++}
+++
+++void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+++{
+++    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
+++    if (!QFile::exists(demoxml)) {
+++        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
+++        if (!QFile::exists(demoxml))
+++            return;
+++    }
+++
+++    QFile description(demoxml);
+++    if (!description.open(QFile::ReadOnly))
+++        return;
+++
+++    ui->examplesComboBox->clear();
+++    ui->examplesComboBox->setEnabled(true);
+++
+++    ui->examplesComboBox->addItem(tr("Choose an example..."));
+++    QFont f = font();
+++    f.setItalic(true);
+++    ui->examplesComboBox->setItemData(0, f, Qt::FontRole);
+++    f.setItalic(false);
+++    bool inExamples = false;
+++    QString dirName;
+++    QXmlStreamReader reader(&description);
+++    while (!reader.atEnd()) {
+++        switch (reader.readNext()) {
+++            case QXmlStreamReader::StartElement:
+++            if (reader.name() == "category") {
+++                QString name = reader.attributes().value(QLatin1String("name")).toString();
+++                if (name.contains("tutorial"))
+++                    break;
+++                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
+++                ui->examplesComboBox->addItem(name);
+++                f.setBold(true);
+++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole);
+++                f.setBold(false);
+++                inExamples = true;
+++            }
+++            if (inExamples && reader.name() == "example") {
+++                QString name = reader.attributes().value(QLatin1String("name")).toString();
+++                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
+++                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
+++                QString fileName = examplePath + relativeProPath;
+++                if (!QFile::exists(fileName))
+++                    fileName = sourcePath + "/examples" + relativeProPath;
+++                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
+++
+++                ui->examplesComboBox->addItem("  " + name, fileName);
+++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+++            }
+++            break;
+++            case QXmlStreamReader::EndElement:
+++            if (reader.name() == "category")
+++                inExamples = false;
+++            break;
+++            default:
+++            break;
+++        }
+++    }
+++}
+++
+++void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index)
+++{
+++    QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString();
+++    ui->openExampleButton->setEnabled(!fileName.isEmpty());
+++}
+++
+++void GettingStartedWelcomePageWidget::slotOpenExample()
+++{
+++    QComboBox *box = ui->examplesComboBox;
+++    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
+++    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
+++    QStringList files;
+++    QFileInfo fi(proFile);
+++    QString tryFile = fi.path() + "/main.cpp";
+++    files << proFile;
+++    if(!QFile::exists(tryFile))
+++        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
+++    if(QFile::exists(tryFile))
+++        files << tryFile;
+++    Core::ICore::instance()->openFiles(files);
+++    slotOpenContextHelpPage(helpFile);
+++}
+++
+++void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url)
+++{
+++    Help::HelpManager *helpManager
+++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+++    Q_ASSERT(helpManager);
+++    helpManager->openHelpPage(url);
+++}
+++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url)
+++{
+++    Help::HelpManager *helpManager
+++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+++    Q_ASSERT(helpManager);
+++    helpManager->openContextHelpPage(url);
+++}
+++
+++void GettingStartedWelcomePageWidget::slotNextTip()
+++{
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = ((m_currentTip+1)%tips.count());
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++}
+++
+++void GettingStartedWelcomePageWidget::slotPrevTip()
+++{
+++    QStringList tips = tipsOfTheDay();
+++    m_currentTip = ((m_currentTip-1)+tips.count())%tips.count();
+++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+++}
+++
+++QStringList GettingStartedWelcomePageWidget::tipsOfTheDay()
+++{
+++    static QStringList tips;
+++    if (tips.isEmpty()) {
+++        QString altShortcut =
+++#ifdef Q_WS_MAC
+++            tr("Cmd", "Shortcut key");
+++#else
+++            tr("Alt", "Shortcut key");
+++#endif
+++        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
+++                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
+++                       "<li></li><li>6 - Output</li></ul>"));
+++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+++        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
+++        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
+++                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));
+++        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
+++                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
+++                        "and code completion."));
+++        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
+++                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
+++        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
+++        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
+++        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
+++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+++        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
+++                       "on the buttons at the window bottom:"
+++                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
+++                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
+++        tips.append(tr("You can quickly search methods, classes, help and more using the "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
+++        tips.append(tr("You can add custom build steps in the "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
+++        tips.append(tr("Within a session, you can add "
+++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
+++        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
+++        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
+++                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
+++                       "target in the combo box."));
+++        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
+++                       "revision control systems</a> such as Subversion, Perforce and Git."));
+++        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
+++    }
+++    return tips;
+++}
+++
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
++new file mode 100644
++index 0000000..a40df28
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
++@@ -0,0 +1,69 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H
+++#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H
+++
+++#include <QWidget>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++namespace Ui {
+++    class GettingStartedWelcomePageWidget;
+++}
+++
+++class GettingStartedWelcomePageWidget : public QWidget {
+++    Q_OBJECT
+++public:
+++    GettingStartedWelcomePageWidget(QWidget *parent = 0);
+++    ~GettingStartedWelcomePageWidget();
+++
+++ public slots:
+++    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
+++
+++private slots:
+++    void slotOpenHelpPage(const QString& url);
+++    void slotOpenContextHelpPage(const QString& url);
+++    void slotEnableExampleButton(int);
+++    void slotOpenExample();
+++    void slotNextTip();
+++    void slotPrevTip();
+++
+++private:
+++    QStringList tipsOfTheDay();
+++
+++    Ui::GettingStartedWelcomePageWidget *ui;
+++    int m_currentTip;
+++};
+++
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
+++#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
++new file mode 100644
++index 0000000..8bfebb0
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
++@@ -0,0 +1,343 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class>
+++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>646</width>
+++    <height>361</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QGridLayout" name="gridLayout">
+++   <item row="0" column="0" rowspan="2">
+++    <widget class="QFrame" name="tutorialsFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_6">
+++      <item row="0" column="0">
+++       <widget class="QLabel" name="tutorialsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0">
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item row="0" column="1">
+++    <widget class="QFrame" name="demosExamplesFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_8">
+++      <property name="rightMargin">
+++       <number>8</number>
+++      </property>
+++      <property name="horizontalSpacing">
+++       <number>0</number>
+++      </property>
+++      <item row="0" column="0" colspan="4">
+++       <widget class="QLabel" name="demoTitleLabel">
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0">
+++       <widget class="QComboBox" name="examplesComboBox">
+++        <property name="enabled">
+++         <bool>false</bool>
+++        </property>
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <item>
+++         <property name="text">
+++          <string>Examples not installed</string>
+++         </property>
+++        </item>
+++       </widget>
+++      </item>
+++      <item row="1" column="2">
+++       <widget class="QToolButton" name="openExampleButton">
+++        <property name="enabled">
+++         <bool>false</bool>
+++        </property>
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="text">
+++         <string>Open</string>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="1">
+++       <spacer name="horizontalSpacer">
+++        <property name="orientation">
+++         <enum>Qt::Horizontal</enum>
+++        </property>
+++        <property name="sizeType">
+++         <enum>QSizePolicy::Fixed</enum>
+++        </property>
+++        <property name="sizeHint" stdset="0">
+++         <size>
+++          <width>6</width>
+++          <height>6</height>
+++         </size>
+++        </property>
+++       </spacer>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item row="1" column="1">
+++    <widget class="QFrame" name="didyouKnowFrame">
+++     <property name="sizePolicy">
+++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++       <horstretch>0</horstretch>
+++       <verstretch>0</verstretch>
+++      </sizepolicy>
+++     </property>
+++     <property name="maximumSize">
+++      <size>
+++       <width>400</width>
+++       <height>16777215</height>
+++      </size>
+++     </property>
+++     <property name="styleSheet">
+++      <string/>
+++     </property>
+++     <layout class="QGridLayout" name="gridLayout_11">
+++      <property name="rightMargin">
+++       <number>9</number>
+++      </property>
+++      <item row="0" column="0">
+++       <widget class="QLabel" name="didYouKnowTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="1" column="0" colspan="2">
+++       <widget class="QTextBrowser" name="didYouKnowTextBrowser">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="frameShadow">
+++         <enum>QFrame::Plain</enum>
+++        </property>
+++        <property name="verticalScrollBarPolicy">
+++         <enum>Qt::ScrollBarAlwaysOff</enum>
+++        </property>
+++        <property name="horizontalScrollBarPolicy">
+++         <enum>Qt::ScrollBarAlwaysOff</enum>
+++        </property>
+++        <property name="openExternalLinks">
+++         <bool>true</bool>
+++        </property>
+++       </widget>
+++      </item>
+++      <item row="0" column="1">
+++       <layout class="QGridLayout" name="gridLayout_10">
+++        <property name="spacing">
+++         <number>0</number>
+++        </property>
+++        <item row="0" column="0" colspan="2">
+++         <spacer name="verticalSpacer_4">
+++          <property name="orientation">
+++           <enum>Qt::Vertical</enum>
+++          </property>
+++          <property name="sizeType">
+++           <enum>QSizePolicy::Preferred</enum>
+++          </property>
+++          <property name="sizeHint" stdset="0">
+++           <size>
+++            <width>20</width>
+++            <height>2</height>
+++           </size>
+++          </property>
+++         </spacer>
+++        </item>
+++        <item row="1" column="0">
+++         <widget class="QToolButton" name="prevTipBtn">
+++          <property name="styleSheet">
+++           <string notr="true">QToolButton{
+++	border-right:solid 0 px;
+++	height:16px;
+++	width:12px;
+++}
+++</string>
+++          </property>
+++          <property name="text">
+++           <string/>
+++          </property>
+++          <property name="icon">
+++           <iconset resource="../welcome/welcome.qrc">
+++            <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
+++          </property>
+++          <property name="arrowType">
+++           <enum>Qt::NoArrow</enum>
+++          </property>
+++         </widget>
+++        </item>
+++        <item row="1" column="1">
+++         <widget class="QToolButton" name="nextTipBtn">
+++          <property name="styleSheet">
+++           <string notr="true">QToolButton{
+++	border-left:solid 0 px;
+++	height:16px;
+++	width:12px;
+++}
+++</string>
+++          </property>
+++          <property name="text">
+++           <string/>
+++          </property>
+++          <property name="icon">
+++           <iconset resource="../welcome/welcome.qrc">
+++            <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
+++          </property>
+++          <property name="arrowType">
+++           <enum>Qt::NoArrow</enum>
+++          </property>
+++         </widget>
+++        </item>
+++        <item row="2" column="0" colspan="2">
+++         <spacer name="verticalSpacer_3">
+++          <property name="orientation">
+++           <enum>Qt::Vertical</enum>
+++          </property>
+++          <property name="sizeHint" stdset="0">
+++           <size>
+++            <width>20</width>
+++            <height>2</height>
+++           </size>
+++          </property>
+++         </spacer>
+++        </item>
+++       </layout>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources>
+++  <include location="../welcome/welcome.qrc"/>
+++ </resources>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++new file mode 100644
++index 0000000..a68f80d
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
++@@ -0,0 +1,47 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "gettingstartedwelcomepage.h"
+++#include "gettingstartedwelcomepagewidget.h"
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin()
+++        : m_page(new GettingStartedWelcomePageWidget)
+++{
+++}
+++
+++QWidget* GettingStartedWelcomePlugin::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++new file mode 100644
++index 0000000..f8760df
++--- /dev/null
+++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
++@@ -0,0 +1,56 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H
+++#define GETTINGSTARTEDWELCOMEPLUGIN_H
+++
+++#include <extensionsystem/iwelcomepage.h>
+++
+++namespace Qt4ProjectManager {
+++namespace Internal {
+++
+++class GettingStartedWelcomePageWidget;
+++
+++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePage
+++{
+++public:
+++    GettingStartedWelcomePlugin();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Getting Started");}
+++    int priority() const { return 10; }
+++
+++private:
+++    GettingStartedWelcomePageWidget *m_page;
+++};
+++
+++} // namespace Internal
+++} // namespace Qt4ProjectManager
+++
+++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
++index 6b69139..c9335d5 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
++@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager
++ QT += network
++ include(../../qtcreatorplugin.pri)
++ include(qt4projectmanager_dependencies.pri)
++-
++ HEADERS += qt4projectmanagerplugin.h \
++     qt4projectmanager.h \
++     qt4project.h \
++@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \
++     qtversionmanager.h \
++     qtoptionspage.h \
++     qtuicodemodelsupport.h \
++-    externaleditors.h
+++    externaleditors.h \
+++    gettingstartedwelcomepagewidget.h \
+++    gettingstartedwelcomepage.h
++ SOURCES += qt4projectmanagerplugin.cpp \
++     qt4projectmanager.cpp \
++     qt4project.cpp \
++@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \
++     qtversionmanager.cpp \
++     qtoptionspage.cpp \
++     qtuicodemodelsupport.cpp \
++-    externaleditors.cpp
+++    externaleditors.cpp \
+++    gettingstartedwelcomepagewidget.cpp \
+++    gettingstartedwelcomepage.cpp
++ FORMS += makestep.ui \
++     qmakestep.ui \
++     qt4projectconfigwidget.ui \
++     embeddedpropertiespage.ui \
++     qtversionmanager.ui \
++-    showbuildlog.ui
+++    showbuildlog.ui \
+++    gettingstartedwelcomepagewidget.ui
++ RESOURCES += qt4projectmanager.qrc \
++     wizards/wizards.qrc
++-
++ include(../../shared/proparser/proparser.pri)
++ include(qt-s60/qt-s60.pri)
++ include(customwidgetwizard/customwidgetwizard.pri)
++-
++ DEFINES += QT_NO_CAST_TO_ASCII
++ OTHER_FILES += Qt4ProjectManager.pluginspec
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
++index e1bd37d..9a49315 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
+++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
++@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri)
++ include(../../plugins/cppeditor/cppeditor.pri)
++ include(../../plugins/help/help.pri)
++ include(../../plugins/designer/designer.pri)
++-include(../../plugins/welcome/welcome.pri)
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
++index f740c27..8c87b8d 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
++@@ -44,6 +44,8 @@
++ #include "qtversionmanager.h"
++ #include "qtoptionspage.h"
++ #include "externaleditors.h"
+++#include "gettingstartedwelcomepage.h"
+++#include "gettingstartedwelcomepagewidget.h"
++ 
++ #ifdef QTCREATOR_WITH_S60
++ #include "qt-s60/s60manager.h"
++@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
++     delete m_proFileEditorFactory;
++     removeObject(m_qt4ProjectManager);
++     delete m_qt4ProjectManager;
+++    removeObject(m_welcomePlugin);
+++    delete m_welcomePlugin;
++ }
++ /*
++ static Core::Command *createSeparator(Core::ActionManager *am,
++@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
++     m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance();
++     Core::ActionManager *am = core->actionManager();
++ 
++-    addAutoReleasedObject(new QtVersionManager());
+++    QtVersionManager *mgr = new QtVersionManager();
+++    addAutoReleasedObject(mgr);
++     addAutoReleasedObject(new QtOptionsPage());
++ 
+++    m_welcomePlugin = new GettingStartedWelcomePlugin;
+++    addObject(m_welcomePlugin);
+++    GettingStartedWelcomePageWidget *gswp =
+++            static_cast<GettingStartedWelcomePageWidget*>(m_welcomePlugin->page());
+++    connect(mgr, SIGNAL(updateExamples(QString,QString,QString)),
+++            gswp, SLOT(updateExamples(QString,QString,QString)));
++ 
++     //create and register objects
++     m_qt4ProjectManager = new Qt4Manager(this);
++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
++index 18781bc..84a5fbd 100644
++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
++@@ -49,6 +49,7 @@ class MakeStepFactory;
++ class GccParserFactory;
++ class MsvcParserFactory;
++ class EmbeddedPropertiesPage;
+++class GettingStartedWelcomePlugin;
++ 
++ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin
++ {
++@@ -81,6 +82,7 @@ private:
++ 
++     QAction *m_runQMakeAction;
++     QAction *m_runQMakeActionContextMenu;
+++    GettingStartedWelcomePlugin *m_welcomePlugin;
++ };
++ 
++ } // namespace Internal
++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
++index aa65520..6bce576 100644
++--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
++@@ -42,7 +42,6 @@
++ #include <coreplugin/coreconstants.h>
++ #include <coreplugin/icore.h>
++ #include <coreplugin/modemanager.h>
++-#include <welcome/welcomemode.h>
++ #include <extensionsystem/pluginmanager.h>
++ #include <help/helpplugin.h>
++ #include <utils/qtcassert.h>
++@@ -51,6 +50,7 @@
++ #include <QtCore/QProcess>
++ #include <QtCore/QSettings>
++ #include <QtCore/QTime>
+++#include <QtCore/QTimer>
++ #include <QtGui/QApplication>
++ #include <QtGui/QDesktopServices>
++ 
++@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager()
++     writeVersionsIntoSettings();
++ 
++     updateDocumentation();
++-    updateExamples();
+++    // cannot call from ctor, needs to get connected extenernally first
+++    QTimer::singleShot(0, this, SLOT(updateExamples()));
++ }
++ 
++ QtVersionManager::~QtVersionManager()
++@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples()
++         if (version->hasDemos())
++             demosPath = version->demosPath();
++         if (!examplesPath.isEmpty() && !demosPath.isEmpty()) {
++-            if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
++-                    (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME)))
++-                welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath());
+++            emit updateExamples(examplesPath, demosPath, version->sourcePath());
++             return;
++         }
++     }
++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
++index 0f2144c..fb7a33b 100644
++--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++++ b/src/plugins/qt4projectmanager/qtversionmanager.h
++@@ -201,6 +201,10 @@ public:
++ signals:
++     void defaultQtVersionChanged();
++     void qtVersionsChanged();
+++    void updateExamples(QString, QString, QString);
+++
+++private slots:
+++    void updateExamples();
++ private:
++     static QString findQMakeLine(const QString &directory);
++     static QString trimLine(const QString line);
++@@ -215,7 +219,6 @@ private:
++     void addNewVersionsFromInstaller();
++     void updateSystemVersion();
++     void updateDocumentation();
++-    void updateExamples();
++ 
++     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
++     void updateUniqueIdToIndexMap();
++diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp
++new file mode 100644
++index 0000000..d3127e0
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepagewidget.cpp
++@@ -0,0 +1,93 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "communitywelcomepagewidget.h"
+++#include "ui_communitywelcomepagewidget.h"
+++
+++#include "rssfetcher.h"
+++
+++#include <QtGui/QDesktopServices>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
+++CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) :
+++    QWidget(parent),
+++    ui(new Ui::CommunityWelcomePageWidget),
+++    m_rssFetcher(new RSSFetcher(7))
+++{
+++    ui->setupUi(this);
+++    ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
+++    ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
+++
+++    connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+++    connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+++
+++    connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
+++        ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
+++    //: Add localized feed here only if one exists
+++    m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
+++
+++    ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
+++    ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
+++    ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
+++}
+++
+++CommunityWelcomePageWidget::~CommunityWelcomePageWidget()
+++{
+++    delete m_rssFetcher;
+++    delete ui;
+++}
+++
+++
+++void CommunityWelcomePageWidget::slotUrlClicked(const QString &data)
+++{
+++    QDesktopServices::openUrl(QUrl(data));
+++}
+++
+++
+++
+++} // namespace Internal
+++} // namespace Welcome
++diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h
++new file mode 100644
++index 0000000..d9c81b2
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepagewidget.h
++@@ -0,0 +1,64 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef COMMUNITYWELCOMEPAGEWIDGET_H
+++#define COMMUNITYWELCOMEPAGEWIDGET_H
+++
+++#include <QWidget>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++class RSSFetcher;
+++
+++namespace Ui {
+++    class CommunityWelcomePageWidget;
+++}
+++
+++class CommunityWelcomePageWidget : public QWidget
+++{
+++    Q_OBJECT
+++
+++public:
+++    CommunityWelcomePageWidget(QWidget *parent = 0);
+++    ~CommunityWelcomePageWidget();
+++
+++private slots:
+++    void slotUrlClicked(const QString &data);
+++
+++
+++private:
+++    RSSFetcher *m_rssFetcher;
+++    Ui::CommunityWelcomePageWidget *ui;
+++};
+++
+++
+++} // namespace Internal
+++} // namespace Welcome
+++#endif // COMMUNITYWELCOMEPAGEWIDGET_H
++diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui
++new file mode 100644
++index 0000000..707412c
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepagewidget.ui
++@@ -0,0 +1,190 @@
+++<?xml version="1.0" encoding="UTF-8"?>
+++<ui version="4.0">
+++ <class>Welcome::Internal::CommunityWelcomePageWidget</class>
+++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget">
+++  <property name="geometry">
+++   <rect>
+++    <x>0</x>
+++    <y>0</y>
+++    <width>667</width>
+++    <height>352</height>
+++   </rect>
+++  </property>
+++  <property name="windowTitle">
+++   <string>Form</string>
+++  </property>
+++  <layout class="QHBoxLayout" name="horizontalLayout">
+++   <item>
+++    <widget class="QFrame" name="labsFrame">
+++     <property name="frameShape">
+++      <enum>QFrame::NoFrame</enum>
+++     </property>
+++     <property name="frameShadow">
+++      <enum>QFrame::Plain</enum>
+++     </property>
+++     <layout class="QVBoxLayout" name="verticalLayout_2">
+++      <item>
+++       <widget class="QLabel" name="labsTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item>
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="minimumSize">
+++         <size>
+++          <width>340</width>
+++          <height>0</height>
+++         </size>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++   <item>
+++    <widget class="QFrame" name="sitesFrame">
+++     <property name="frameShape">
+++      <enum>QFrame::NoFrame</enum>
+++     </property>
+++     <property name="frameShadow">
+++      <enum>QFrame::Plain</enum>
+++     </property>
+++     <layout class="QVBoxLayout" name="verticalLayout_3">
+++      <item>
+++       <widget class="QLabel" name="sitesTitleLabel">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="alignment">
+++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+++        </property>
+++       </widget>
+++      </item>
+++      <item>
+++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
+++        <property name="sizePolicy">
+++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+++          <horstretch>0</horstretch>
+++          <verstretch>0</verstretch>
+++         </sizepolicy>
+++        </property>
+++        <property name="focusPolicy">
+++         <enum>Qt::NoFocus</enum>
+++        </property>
+++        <property name="frameShape">
+++         <enum>QFrame::NoFrame</enum>
+++        </property>
+++        <property name="selectionMode">
+++         <enum>QAbstractItemView::NoSelection</enum>
+++        </property>
+++        <property name="verticalScrollMode">
+++         <enum>QAbstractItemView::ScrollPerPixel</enum>
+++        </property>
+++        <property name="rootIsDecorated">
+++         <bool>false</bool>
+++        </property>
+++        <property name="uniformRowHeights">
+++         <bool>true</bool>
+++        </property>
+++        <property name="allColumnsShowFocus">
+++         <bool>true</bool>
+++        </property>
+++        <property name="columnCount">
+++         <number>2</number>
+++        </property>
+++        <attribute name="headerVisible">
+++         <bool>false</bool>
+++        </attribute>
+++        <attribute name="headerDefaultSectionSize">
+++         <number>24</number>
+++        </attribute>
+++        <attribute name="headerMinimumSectionSize">
+++         <number>0</number>
+++        </attribute>
+++        <column>
+++         <property name="text">
+++          <string notr="true">1</string>
+++         </property>
+++        </column>
+++        <column>
+++         <property name="text">
+++          <string notr="true">2</string>
+++         </property>
+++        </column>
+++       </widget>
+++      </item>
+++     </layout>
+++    </widget>
+++   </item>
+++  </layout>
+++ </widget>
+++ <customwidgets>
+++  <customwidget>
+++   <class>Core::Utils::WelcomeModeTreeWidget</class>
+++   <extends>QTreeWidget</extends>
+++   <header>utils/welcomemodetreewidget.h</header>
+++  </customwidget>
+++ </customwidgets>
+++ <resources/>
+++ <connections/>
+++</ui>
++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h
++new file mode 100644
++index 0000000..7a0dd61
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepage.h
++@@ -0,0 +1,47 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#include "communitywelcomepage.h"
+++#include "communitywelcomepagewidget.h"
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++CommunityWelcomePage::CommunityWelcomePage()
+++        : m_page(new CommunityWelcomePageWidget)
+++{
+++}
+++
+++QWidget* CommunityWelcomePage::page()
+++{
+++    return m_page;
+++}
+++
+++} // namespace Internal
+++} // namespace WelcomePlugin
++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h
++new file mode 100644
++index 0000000..fd97e0e
++--- /dev/null
+++++ b/src/plugins/welcome/communitywelcomepage.h
++@@ -0,0 +1,60 @@
+++/**************************************************************************
+++**
+++** This file is part of Qt Creator
+++**
+++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+++**
+++** Contact: Nokia Corporation (qt-info@nokia.com)
+++**
+++** Commercial Usage
+++**
+++** Licensees holding valid Qt Commercial licenses may use this file in
+++** accordance with the Qt Commercial License Agreement provided with the
+++** Software or, alternatively, in accordance with the terms contained in
+++** a written agreement between you and Nokia.
+++**
+++** GNU Lesser General Public License Usage
+++**
+++** Alternatively, 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.
+++**
+++** If you are unsure which license is appropriate for your use, please
+++** contact the sales department at http://www.qtsoftware.com/contact.
+++**
+++**************************************************************************/
+++
+++#ifndef COMMUNITYWELCOMEPAGE_H
+++#define COMMUNITYWELCOMEPAGE_H
+++
+++#include "welcome_global.h"
+++
+++#include <extensionsystem/iwelcomepage.h>
+++
+++namespace Welcome {
+++namespace Internal {
+++
+++class CommunityWelcomePageWidget;
+++
+++class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage
+++{
+++    Q_OBJECT
+++public:
+++    CommunityWelcomePage();
+++
+++    QWidget *page();
+++    QString title() const { return tr("Community"); }
+++    int priority() const { return 30; }
+++
+++private:
+++    CommunityWelcomePageWidget *m_page;
+++
+++};
+++
+++} // namespace Internal
+++} // namespace Welcome
+++
+++#endif // COMMUNITYWELCOMEPAGE_H
++diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp
++index f5fc756..7254c2d 100644
++--- a/src/plugins/welcome/rssfetcher.cpp
+++++ b/src/plugins/welcome/rssfetcher.cpp
++@@ -43,7 +43,7 @@
++ #include <sys/utsname.h>
++ #endif
++ 
++-using namespace Welcome;
+++using namespace Welcome::Internal;
++ 
++ static const QString getOsString()
++ {
++diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h
++index 9267fdb..54ef87d 100644
++--- a/src/plugins/welcome/rssfetcher.h
+++++ b/src/plugins/welcome/rssfetcher.h
++@@ -35,6 +35,7 @@
++ #include <QtNetwork/QHttp>
++ 
++ namespace Welcome {
+++namespace Internal {
++ 
++ class RSSFetcher : public QObject
++ {
++@@ -69,6 +70,7 @@ private:
++ };
++ 
++ } // namespace Welcome
+++} // namespace Internal
++ 
++ #endif // RSSFETCHER_H
++ 
++diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro
++index 11d48e8..b5bbd1c 100644
++--- a/src/plugins/welcome/welcome.pro
+++++ b/src/plugins/welcome/welcome.pro
++@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri)
++ include(../../plugins/coreplugin/coreplugin.pri)
++ HEADERS += welcomeplugin.h \
++     welcomemode.h \
++-    rssfetcher.h
+++    rssfetcher.h \
+++    communitywelcomepagewidget.h \
+++    communitywelcomepage.h
++ SOURCES += welcomeplugin.cpp \
++     welcomemode.cpp \
++-    rssfetcher.cpp
++-FORMS += welcomemode.ui
+++    rssfetcher.cpp \
+++    communitywelcomepagewidget.cpp \
+++    communitywelcomepage.h
+++FORMS += welcomemode.ui \
+++    communitywelcomepagewidget.ui
++ RESOURCES += welcome.qrc
++ DEFINES += WELCOME_LIBRARY
++ OTHER_FILES += Welcome.pluginspec
++diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp
++index bc6a876..b47cb36 100644
++--- a/src/plugins/welcome/welcomemode.cpp
+++++ b/src/plugins/welcome/welcomemode.cpp
++@@ -28,11 +28,10 @@
++ **************************************************************************/
++ 
++ #include "welcomemode.h"
++-#include "rssfetcher.h"
+++#include <extensionsystem/pluginmanager.h>
+++#include <extensionsystem/iwelcomepage.h>
++ 
++ #include <coreplugin/icore.h>
++-#include <coreplugin/dialogs/iwizard.h>
++-
++ #include <coreplugin/coreconstants.h>
++ #include <coreplugin/uniqueidmanager.h>
++ #include <coreplugin/modemanager.h>
++@@ -41,24 +40,38 @@
++ #include <utils/styledbar.h>
++ #include <utils/welcomemodetreewidget.h>
++ 
++-#include <QtGui/QDesktopServices>
++ #include <QtGui/QMouseEvent>
++ #include <QtGui/QScrollArea>
++ #include <QtGui/QButtonGroup>
+++#include <QtGui/QDesktopServices>
+++#include <QtGui/QToolButton>
++ 
++-#include <QtCore/QDateTime>
++-#include <QtCore/QDir>
++-#include <QtCore/QFileInfo>
++-#include <QtCore/QDebug>
++-#include <QtCore/QUrl>
++ #include <QtCore/QSettings>
+++#include <QtCore/QUrl>
+++#include <QtCore/QDebug>
++ 
++ #include <cstdlib>
++ 
++ #include "ui_welcomemode.h"
++ 
+++using namespace ExtensionSystem;
+++
++ namespace Welcome {
++ 
+++// TODO: remove
+++static QString titleLabel(const QString &text)
+++{
+++    // TODO: do not hardcode here
+++    QString  rc = QLatin1String(
+++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+++    "<span style=\" font-size:x-large; color:#555555;\">");
+++    rc += text;
+++    rc += QLatin1String("</span></p><hr/></body></html>");
+++    return rc;
+++}
+++
++ struct WelcomeModePrivate
++ {
++     WelcomeModePrivate();
++@@ -66,10 +79,9 @@ struct WelcomeModePrivate
++     QScrollArea *m_scrollArea;
++     QWidget *m_widget;
++     QWidget *m_welcomePage;
++-    QButtonGroup *btnGrp;
++-    Ui::WelcomePage ui;
++-    RSSFetcher *rssFetcher;
++-    WelcomeMode::WelcomePageData lastData;
+++    QMap<QAbstractButton*, QWidget*> buttonMap;
+++    QHBoxLayout * buttonLayout;
+++    Ui::WelcomeMode ui;
++     int currentTip;
++ };
++ 
++@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate()
++ {
++ }
++ 
++-// ---  WelcomePageData
++-
++-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const
++-{
++-    return previousSession == rhs.previousSession
++-        && activeSession   == rhs.activeSession
++-        && sessionList     == rhs.sessionList
++-        && projectList     == rhs.projectList;
++-}
++-
++-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const
++-{
++-    return previousSession != rhs.previousSession
++-        || activeSession   != rhs.activeSession
++-        || sessionList     != rhs.sessionList
++-        || projectList     != rhs.projectList;
++-}
++-
++-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d)
++-{
++-    dgb.nospace() << "PreviousSession=" << d.previousSession
++-        << " activeSession=" << d.activeSession
++-        << " sessionList=" << d.sessionList
++-        << " projectList=" << d.projectList;
++-    return dgb;
++-}
++-
++-// Format a title + ruler for title labels
++-static inline QString titleLabel(const QString &text)
++-{
++-    QString  rc = QLatin1String(
++-    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
++-    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
++-    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
++-    "<span style=\" font-size:x-large; color:#555555;\">");
++-    rc += text;
++-    rc += QLatin1String("</span></p><hr/></body></html>");
++-    return rc;
++-}
++-
++ // ---  WelcomeMode
++ WelcomeMode::WelcomeMode() :
++     m_d(new WelcomeModePrivate)
++@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() :
++     l->setMargin(0);
++     l->setSpacing(0);
++     l->addWidget(new Core::Utils::StyledBar(m_d->m_widget));
++-    m_d->rssFetcher = new RSSFetcher(7, this);
++     m_d->m_welcomePage = new QWidget(m_d->m_widget);
++     m_d->ui.setupUi(m_d->m_welcomePage);
++-    m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project")));
++-    m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session")));
++-    m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
++-    m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
++-    m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
++-    m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
++-    m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
++-    m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false);
++-    m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
++     m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect);
++     m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);
++     l->addWidget(m_d->m_welcomePage);
++@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() :
++     m_d->m_scrollArea->setWidget(m_d->m_widget);
++     m_d->m_scrollArea->setWidgetResizable(true);
++ 
++-    updateWelcomePage(WelcomePageData());
++-
++-    m_d->btnGrp = new QButtonGroup(this);
++-    m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0);
++-    m_d->btnGrp->addButton(m_d->ui.developSectButton, 1);
++-    m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2);
++-
++-    connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int)));
+++    PluginManager *pluginManager = PluginManager::instance();
+++    connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject)));
++ 
++     connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback()));
++-    connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
++-    connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
++-    connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
++-    connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
++-    connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++-    connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++-    connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&)));
++-    connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
++-    connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
++-
++-    connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
++-        m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
++-
++-    //: Add localized feed here only if one exists
++-    m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
++-
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
++-    m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
++-
++-    m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
++-                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"),
++-                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"),
++-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"),
++-                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
++-    m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"),
++-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
++-
++-    srand(QDateTime::currentDateTime().toTime_t());
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = rand()%tips.count();
++-
++-    QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document();
++-    doc->setDefaultStyleSheet("a:link {color:black;}");
++-    m_d->ui.didYouKnowTextBrowser->setDocument(doc);
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-
++-    connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
++-    connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
++ 
++-    QSettings *settings = Core::ICore::instance()->settings();
++-    int id = settings->value("General/WelcomeTab", 0).toInt();
++-    m_d->btnGrp->button(id)->setChecked(true);
++-    m_d->ui.stackedWidget->setCurrentIndex(id);
++ }
++ 
++ WelcomeMode::~WelcomeMode()
++ {
++     QSettings *settings = Core::ICore::instance()->settings();
++-    settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId());
+++    settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex());
++     delete m_d->m_widget;
++     delete m_d;
++ }
++@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const
++     return contexts;
++ }
++ 
++-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData)
++-{
++-    // Update only if data are modified
++-    if (welcomePageData == m_d->lastData)
++-        return;
++-    m_d->lastData = welcomePageData;
++-
++-    m_d->m_widget->setUpdatesEnabled(false);
++-    m_d->ui.sessTreeWidget->clear();
++-    m_d->ui.projTreeWidget->clear();
++-
++-    if (welcomePageData.sessionList.count() > 0) {
++-        foreach (const QString &s, welcomePageData.sessionList) {
++-            QString str = s;
++-            if (s == welcomePageData.previousSession)
++-                str = tr("%1 (last session)").arg(s);
++-            m_d->ui.sessTreeWidget->addItem(str, s);
++-        }
++-        m_d->ui.sessTreeWidget->updateGeometry();
++-        m_d->ui.sessTreeWidget->show();
++-    } else {
++-        m_d->ui.sessTreeWidget->hide();
++-    }
++-
++-    typedef QPair<QString, QString> QStringPair;
++-    if (welcomePageData.projectList.count() > 0) {
++-        foreach (const QStringPair &it, welcomePageData.projectList) {
++-            QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first);
++-            const QFileInfo fi(it.first);
++-            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
++-        }
++-    } else {
++-        m_d->ui.projTreeWidget->hide();
++-    }
++-    m_d->ui.projTreeWidget->updateGeometry();
++-    m_d->m_widget->setUpdatesEnabled(true);
++-}
++-
++-void WelcomeMode::activateEditMode()
++-{
++-    Core::ModeManager *modeManager = Core::ModeManager::instance();
++-    if (modeManager->currentMode() == this)
++-        modeManager->activateMode(Core::Constants::MODE_EDIT);
++-}
++-
++-void WelcomeMode::slotSessionClicked(const QString &data)
++-{
++-    emit requestSession(data);
++-    activateEditMode();
++-}
++-
++-void WelcomeMode::slotProjectClicked(const QString &data)
++-{
++-    emit requestProject(data);
++-    activateEditMode();
++-}
++-
++-void WelcomeMode::slotUrlClicked(const QString &data)
+++bool sortFunction(IWelcomePage * a, IWelcomePage *b)
++ {
++-    QDesktopServices::openUrl(QUrl(data));
+++    return a->priority() < b->priority();
++ }
++ 
++-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+++void WelcomeMode::initPlugins()
++ {
++-    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
++-    if (!QFile::exists(demoxml)) {
++-        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
++-        if (!QFile::exists(demoxml))
++-            return;
+++    m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame);
+++    m_d->buttonLayout->setMargin(0);
+++    m_d->buttonLayout->setSpacing(0);
+++    delete m_d->ui.stackedWidget->currentWidget();
+++    QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
+++    qSort(plugins.begin(), plugins.end(), &sortFunction);
+++    foreach (IWelcomePage* plugin, plugins) {
+++        QToolButton * btn = new QToolButton;
+++        btn->setCheckable(true);
+++        btn->setText(plugin->title());
+++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+++        btn->setAutoExclusive(true);
+++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+++        m_d->ui.stackedWidget->addWidget(plugin->page());
+++        m_d->buttonLayout->addWidget(btn);
+++        m_d->buttonMap.insert(btn, plugin->page());
++     }
+++    m_d->buttonLayout->addSpacing(5);
++ 
++-    QFile description(demoxml);
++-    if (!description.open(QFile::ReadOnly))
++-        return;
++-
++-    m_d->ui.examplesComboBox->clear();
++-    m_d->ui.examplesComboBox->setEnabled(true);
++-
++-    m_d->ui.examplesComboBox->addItem(tr("Choose an example..."));
++-    QFont f = widget()->font();
++-    f.setItalic(true);
++-    m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole);
++-    f.setItalic(false);
++-    bool inExamples = false;
++-    QString dirName;
++-    QXmlStreamReader reader(&description);
++-    while (!reader.atEnd()) {
++-        switch (reader.readNext()) {
++-            case QXmlStreamReader::StartElement:
++-            if (reader.name() == "category") {
++-                QString name = reader.attributes().value(QLatin1String("name")).toString();
++-                if (name.contains("tutorial"))
++-                    break;
++-                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
++-                m_d->ui.examplesComboBox->addItem(name);
++-                f.setBold(true);
++-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole);
++-                f.setBold(false);
++-                inExamples = true;
++-            }
++-            if (inExamples && reader.name() == "example") {
++-                QString name = reader.attributes().value(QLatin1String("name")).toString();
++-                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
++-                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
++-                QString fileName = examplePath + relativeProPath;
++-                if (!QFile::exists(fileName))
++-                    fileName = sourcePath + "/examples" + relativeProPath;
++-                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
++-
++-                m_d->ui.examplesComboBox->addItem("  " + name, fileName);
++-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+++    QSettings *settings = Core::ICore::instance()->settings();
+++    int tabId = settings->value("General/WelcomeTab", 0).toInt();
+++
+++    int pluginCount = m_d->ui.stackedWidget->count();
+++    if (tabId < pluginCount) {
+++        //qDebug() << tabId;
+++        m_d->ui.stackedWidget->setCurrentIndex(tabId);
+++        QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap);
+++        while (it.hasNext())
+++            if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) {
+++                it.key()->setChecked(true);
+++                break;
++             }
++-            break;
++-            case QXmlStreamReader::EndElement:
++-            if (reader.name() == "category")
++-                inExamples = false;
++-            break;
++-            default:
++-            break;
++-        }
++     }
+++
++ }
++ 
++-void WelcomeMode::slotEnableExampleButton(int index)
++-{
++-    QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString();
++-    m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty());
+++void WelcomeMode::welcomePluginAdded(QObject *obj)
+++{
+++    if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj))
+++    {
+++        QToolButton * btn = new QToolButton;
+++        btn->setCheckable(true);
+++        btn->setAutoExclusive(true);
+++        btn->setText(plugin->title());
+++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+++        int insertPos = 0;
+++        QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
+++        foreach (IWelcomePage* p, plugins) {
+++            if (plugin->priority() < p->priority())
+++                insertPos++;
+++            else
+++                break;
+++        }
+++        m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page());
+++        m_d->buttonMap.insert(btn, plugin->page());
+++        m_d->buttonLayout->insertWidget(insertPos, btn);
+++    }
++ }
++ 
++-void WelcomeMode::slotOpenExample()
+++void WelcomeMode::showClickedPage()
++ {
++-    QComboBox *box = m_d->ui.examplesComboBox;
++-    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
++-    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
++-    QStringList files;
++-    QFileInfo fi(proFile);
++-    QString tryFile = fi.path() + "/main.cpp";
++-    files << proFile;
++-    if(!QFile::exists(tryFile))
++-        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
++-    if(QFile::exists(tryFile))
++-        files << tryFile;
++-    Core::ICore::instance()->openFiles(files);
++-    emit openContextHelpPage(helpFile);
+++    QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender());
+++    QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn);
+++    if (it.value())
+++        m_d->ui.stackedWidget->setCurrentWidget(it.value());
++ }
++ 
++ void WelcomeMode::slotFeedback()
++@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback()
++             "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view")));
++ }
++ 
++-void WelcomeMode::slotCreateNewProject()
++-{
++-    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
++-                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
++-}
++-
++-void WelcomeMode::slotNextTip()
++-{
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = ((m_d->currentTip+1)%tips.count());
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-}
++-
++-void WelcomeMode::slotPrevTip()
++-{
++-    QStringList tips = tipsOfTheDay();
++-    m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count();
++-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
++-}
++-
++-QStringList WelcomeMode::tipsOfTheDay()
++-{
++-    static QStringList tips;
++-    if (tips.isEmpty()) {
++-        QString altShortcut =
++-#ifdef Q_WS_MAC
++-            tr("Cmd", "Shortcut key");
++-#else
++-            tr("Alt", "Shortcut key");
++-#endif
++-        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
++-                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
++-                       "<li></li><li>6 - Output</li></ul>"));
++-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++-        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
++-        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
++-                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));                       
++-        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
++-                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
++-                        "and code completion."));
++-        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
++-                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
++-        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
++-        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
++-        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
++-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++-        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
++-                       "on the buttons at the window bottom:"
++-                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
++-                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
++-        tips.append(tr("You can quickly search methods, classes, help and more using the "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
++-        tips.append(tr("You can add custom build steps in the "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
++-        tips.append(tr("Within a session, you can add "
++-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
++-        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
++-        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
++-                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
++-                       "target in the combo box."));
++-        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
++-                       "revision control systems</a> such as Subversion, Perforce and Git."));
++-        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
++-    }
++-    return tips;
++-}
++ 
++ } // namespace Welcome
++diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h
++index 0555ce6..1576d24 100644
++--- a/src/plugins/welcome/welcomemode.h
+++++ b/src/plugins/welcome/welcomemode.h
++@@ -54,18 +54,6 @@ public:
++     WelcomeMode();
++     ~WelcomeMode();
++ 
++-    struct WelcomePageData{
++-        bool operator==(const WelcomePageData &rhs) const;
++-        bool operator!=(const WelcomePageData &rhs) const;
++-
++-        QString previousSession;
++-        QString activeSession;
++-        QStringList sessionList;
++-        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
++-    };
++-
++-    void updateWelcomePage(const WelcomePageData &welcomePageData);
++-
++     // IMode
++     QString name() const;
++     QIcon icon() const;
++@@ -75,31 +63,14 @@ public:
++     QList<int> context() const;
++     void activated();
++     QString contextHelpId() const { return QLatin1String("Qt Creator"); }
++-
++-    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
++-
++-signals:
++-    void requestProject(const QString &project);
++-    void requestSession(const QString &session);
++-    void openHelpPage(const QString& url);
++-    void openContextHelpPage(const QString& url);
++-    void manageSessions();
+++    void initPlugins();
++ 
++ private slots:
++     void slotFeedback();
++-    void slotSessionClicked(const QString &data);
++-    void slotProjectClicked(const QString &data);
++-    void slotUrlClicked(const QString &data);
++-    void slotEnableExampleButton(int);
++-    void slotOpenExample();
++-    void slotCreateNewProject();
++-    void slotNextTip();
++-    void slotPrevTip();
+++    void welcomePluginAdded(QObject*);
+++    void showClickedPage();
++ 
++ private:
++-    void activateEditMode();
++-    QStringList tipsOfTheDay();
++-
++     WelcomeModePrivate *m_d;
++ };
++ 
++diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui
++index c70aabb..e1c18bd 100644
++--- a/src/plugins/welcome/welcomemode.ui
+++++ b/src/plugins/welcome/welcomemode.ui
++@@ -1,7 +1,7 @@
++ <?xml version="1.0" encoding="UTF-8"?>
++ <ui version="4.0">
++- <class>Welcome::WelcomePage</class>
++- <widget class="QWidget" name="Core::Utils::WelcomePage">
+++ <class>Welcome::WelcomeMode</class>
+++ <widget class="QWidget" name="Welcome::WelcomeMode">
++   <property name="geometry">
++    <rect>
++     <x>0</x>
++@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{
++              <verstretch>0</verstretch>
++             </sizepolicy>
++            </property>
+++           <property name="minimumSize">
+++            <size>
+++             <width>0</width>
+++             <height>10</height>
+++            </size>
+++           </property>
++            <property name="font">
++             <font>
++              <weight>50</weight>
++@@ -238,129 +244,6 @@ QToolButton:pressed {
++            <property name="frameShadow">
++             <enum>QFrame::Plain</enum>
++            </property>
++-           <layout class="QGridLayout" name="gridLayout_2">
++-            <property name="margin">
++-             <number>0</number>
++-            </property>
++-            <property name="spacing">
++-             <number>0</number>
++-            </property>
++-            <item row="0" column="0">
++-             <widget class="QToolButton" name="gettingStartedSectButton">
++-              <property name="enabled">
++-               <bool>true</bool>
++-              </property>
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="styleSheet">
++-               <string notr="true"/>
++-              </property>
++-              <property name="text">
++-               <string>Getting Started</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-              <property name="checked">
++-               <bool>true</bool>
++-              </property>
++-              <property name="autoExclusive">
++-               <bool>false</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="1">
++-             <widget class="QToolButton" name="developSectButton">
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="text">
++-               <string>Develop</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-              <property name="autoExclusive">
++-               <bool>false</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="2">
++-             <widget class="QToolButton" name="communitySectButton">
++-              <property name="sizePolicy">
++-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
++-                <horstretch>0</horstretch>
++-                <verstretch>0</verstretch>
++-               </sizepolicy>
++-              </property>
++-              <property name="minimumSize">
++-               <size>
++-                <width>0</width>
++-                <height>0</height>
++-               </size>
++-              </property>
++-              <property name="font">
++-               <font>
++-                <pointsize>-1</pointsize>
++-               </font>
++-              </property>
++-              <property name="styleSheet">
++-               <string notr="true"/>
++-              </property>
++-              <property name="text">
++-               <string>Community</string>
++-              </property>
++-              <property name="checkable">
++-               <bool>true</bool>
++-              </property>
++-             </widget>
++-            </item>
++-            <item row="0" column="3">
++-             <spacer name="horizontalSpacer_2">
++-              <property name="orientation">
++-               <enum>Qt::Horizontal</enum>
++-              </property>
++-              <property name="sizeType">
++-               <enum>QSizePolicy::Fixed</enum>
++-              </property>
++-              <property name="sizeHint" stdset="0">
++-               <size>
++-                <width>5</width>
++-                <height>20</height>
++-               </size>
++-              </property>
++-             </spacer>
++-            </item>
++-           </layout>
++           </widget>
++          </item>
++          <item>
++@@ -368,575 +251,7 @@ QToolButton:pressed {
++            <property name="currentIndex">
++             <number>0</number>
++            </property>
++-           <widget class="QWidget" name="gettingStartedPage">
++-            <layout class="QGridLayout" name="gridLayout_9">
++-             <property name="leftMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="topMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="rightMargin">
++-              <number>12</number>
++-             </property>
++-             <property name="bottomMargin">
++-              <number>18</number>
++-             </property>
++-             <property name="spacing">
++-              <number>24</number>
++-             </property>
++-             <item row="0" column="0" rowspan="2">
++-              <widget class="QFrame" name="tutorialsFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_6">
++-                <item row="0" column="0">
++-                 <widget class="QLabel" name="tutorialsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="1">
++-              <widget class="QFrame" name="demosExamplesFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_8">
++-                <property name="rightMargin">
++-                 <number>8</number>
++-                </property>
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <item row="0" column="0" colspan="4">
++-                 <widget class="QLabel" name="demoTitleLabel">
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0">
++-                 <widget class="QComboBox" name="examplesComboBox">
++-                  <property name="enabled">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <item>
++-                   <property name="text">
++-                    <string>Examples not installed</string>
++-                   </property>
++-                  </item>
++-                 </widget>
++-                </item>
++-                <item row="1" column="2">
++-                 <widget class="QToolButton" name="openExampleButton">
++-                  <property name="enabled">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="text">
++-                   <string>Open</string>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="1">
++-                 <spacer name="horizontalSpacer">
++-                  <property name="orientation">
++-                   <enum>Qt::Horizontal</enum>
++-                  </property>
++-                  <property name="sizeType">
++-                   <enum>QSizePolicy::Fixed</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>6</width>
++-                    <height>6</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="1" column="1">
++-              <widget class="QFrame" name="didyouKnowFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="maximumSize">
++-                <size>
++-                 <width>400</width>
++-                 <height>16777215</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_11">
++-                <property name="rightMargin">
++-                 <number>9</number>
++-                </property>
++-                <item row="0" column="0">
++-                 <widget class="QLabel" name="didYouKnowTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="2">
++-                 <widget class="QTextBrowser" name="didYouKnowTextBrowser">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="frameShadow">
++-                   <enum>QFrame::Plain</enum>
++-                  </property>
++-                  <property name="verticalScrollBarPolicy">
++-                   <enum>Qt::ScrollBarAlwaysOff</enum>
++-                  </property>
++-                  <property name="horizontalScrollBarPolicy">
++-                   <enum>Qt::ScrollBarAlwaysOff</enum>
++-                  </property>
++-                  <property name="openExternalLinks">
++-                   <bool>true</bool>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="0" column="1">
++-                 <layout class="QGridLayout" name="gridLayout_10">
++-                  <property name="spacing">
++-                   <number>0</number>
++-                  </property>
++-                  <item row="0" column="0" colspan="2">
++-                   <spacer name="verticalSpacer_4">
++-                    <property name="orientation">
++-                     <enum>Qt::Vertical</enum>
++-                    </property>
++-                    <property name="sizeType">
++-                     <enum>QSizePolicy::Preferred</enum>
++-                    </property>
++-                    <property name="sizeHint" stdset="0">
++-                     <size>
++-                      <width>20</width>
++-                      <height>2</height>
++-                     </size>
++-                    </property>
++-                   </spacer>
++-                  </item>
++-                  <item row="1" column="0">
++-                   <widget class="QToolButton" name="prevTipBtn">
++-                    <property name="styleSheet">
++-                     <string notr="true">QToolButton{
++-	border-right:solid 0 px;
++-	height:16px;
++-	width:12px;
++-}
++-</string>
++-                    </property>
++-                    <property name="text">
++-                     <string/>
++-                    </property>
++-                    <property name="icon">
++-                     <iconset resource="welcome.qrc">
++-                      <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
++-                    </property>
++-                    <property name="arrowType">
++-                     <enum>Qt::NoArrow</enum>
++-                    </property>
++-                   </widget>
++-                  </item>
++-                  <item row="1" column="1">
++-                   <widget class="QToolButton" name="nextTipBtn">
++-                    <property name="styleSheet">
++-                     <string notr="true">QToolButton{
++-	border-left:solid 0 px;
++-	height:16px;
++-	width:12px;
++-}
++-</string>
++-                    </property>
++-                    <property name="text">
++-                     <string/>
++-                    </property>
++-                    <property name="icon">
++-                     <iconset resource="welcome.qrc">
++-                      <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
++-                    </property>
++-                    <property name="arrowType">
++-                     <enum>Qt::NoArrow</enum>
++-                    </property>
++-                   </widget>
++-                  </item>
++-                  <item row="2" column="0" colspan="2">
++-                   <spacer name="verticalSpacer_3">
++-                    <property name="orientation">
++-                     <enum>Qt::Vertical</enum>
++-                    </property>
++-                    <property name="sizeHint" stdset="0">
++-                     <size>
++-                      <width>20</width>
++-                      <height>2</height>
++-                     </size>
++-                    </property>
++-                   </spacer>
++-                  </item>
++-                 </layout>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-            </layout>
++-           </widget>
++-           <widget class="QWidget" name="developPage">
++-            <layout class="QGridLayout" name="gridLayout_4">
++-             <property name="margin">
++-              <number>18</number>
++-             </property>
++-             <property name="spacing">
++-              <number>24</number>
++-             </property>
++-             <item row="0" column="0">
++-              <widget class="QFrame" name="recentSessionsFrame">
++-               <property name="sizePolicy">
++-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                 <horstretch>0</horstretch>
++-                 <verstretch>0</verstretch>
++-                </sizepolicy>
++-               </property>
++-               <property name="minimumSize">
++-                <size>
++-                 <width>270</width>
++-                 <height>130</height>
++-                </size>
++-               </property>
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_3">
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <property name="verticalSpacing">
++-                 <number>3</number>
++-                </property>
++-                <item row="0" column="0" colspan="3">
++-                 <widget class="QLabel" name="recentSessionsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="3">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-                <item row="3" column="0">
++-                 <widget class="QPushButton" name="manageSessionsButton">
++-                  <property name="focusPolicy">
++-                   <enum>Qt::TabFocus</enum>
++-                  </property>
++-                  <property name="text">
++-                   <string>Manage Sessions...</string>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="4" column="0">
++-                 <spacer name="verticalSpacer">
++-                  <property name="orientation">
++-                   <enum>Qt::Vertical</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>20</width>
++-                    <height>40</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="2">
++-              <widget class="QFrame" name="recentProjectsFrame">
++-               <property name="styleSheet">
++-                <string/>
++-               </property>
++-               <layout class="QGridLayout" name="gridLayout_5">
++-                <property name="horizontalSpacing">
++-                 <number>0</number>
++-                </property>
++-                <property name="verticalSpacing">
++-                 <number>3</number>
++-                </property>
++-                <property name="rightMargin">
++-                 <number>9</number>
++-                </property>
++-                <item row="0" column="0" colspan="3">
++-                 <widget class="QLabel" name="projTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="1" column="0" colspan="3">
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-                <item row="3" column="0">
++-                 <widget class="QPushButton" name="createNewProjectButton">
++-                  <property name="focusPolicy">
++-                   <enum>Qt::TabFocus</enum>
++-                  </property>
++-                  <property name="text">
++-                   <string>Create New Project...</string>
++-                  </property>
++-                  <property name="flat">
++-                   <bool>true</bool>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item row="4" column="0">
++-                 <spacer name="verticalSpacer_2">
++-                  <property name="orientation">
++-                   <enum>Qt::Vertical</enum>
++-                  </property>
++-                  <property name="sizeHint" stdset="0">
++-                   <size>
++-                    <width>20</width>
++-                    <height>40</height>
++-                   </size>
++-                  </property>
++-                 </spacer>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-            </layout>
++-           </widget>
++-           <widget class="QWidget" name="communityPage">
+++           <widget class="QWidget" name="widget">
++             <layout class="QGridLayout" name="gridLayout_7">
++              <property name="margin">
++               <number>18</number>
++@@ -944,168 +259,6 @@ QToolButton:pressed {
++              <property name="spacing">
++               <number>24</number>
++              </property>
++-             <item row="0" column="0">
++-              <widget class="QFrame" name="labsFrame">
++-               <property name="frameShape">
++-                <enum>QFrame::NoFrame</enum>
++-               </property>
++-               <property name="frameShadow">
++-                <enum>QFrame::Plain</enum>
++-               </property>
++-               <layout class="QVBoxLayout" name="verticalLayout_2">
++-                <item>
++-                 <widget class="QLabel" name="labsTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item>
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="minimumSize">
++-                   <size>
++-                    <width>340</width>
++-                    <height>0</height>
++-                   </size>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++-             <item row="0" column="1">
++-              <widget class="QFrame" name="sitesFrame">
++-               <property name="frameShape">
++-                <enum>QFrame::NoFrame</enum>
++-               </property>
++-               <property name="frameShadow">
++-                <enum>QFrame::Plain</enum>
++-               </property>
++-               <layout class="QVBoxLayout" name="verticalLayout_3">
++-                <item>
++-                 <widget class="QLabel" name="sitesTitleLabel">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="alignment">
++-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++-                  </property>
++-                 </widget>
++-                </item>
++-                <item>
++-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
++-                  <property name="sizePolicy">
++-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++-                    <horstretch>0</horstretch>
++-                    <verstretch>0</verstretch>
++-                   </sizepolicy>
++-                  </property>
++-                  <property name="focusPolicy">
++-                   <enum>Qt::NoFocus</enum>
++-                  </property>
++-                  <property name="frameShape">
++-                   <enum>QFrame::NoFrame</enum>
++-                  </property>
++-                  <property name="selectionMode">
++-                   <enum>QAbstractItemView::NoSelection</enum>
++-                  </property>
++-                  <property name="verticalScrollMode">
++-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
++-                  </property>
++-                  <property name="rootIsDecorated">
++-                   <bool>false</bool>
++-                  </property>
++-                  <property name="uniformRowHeights">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="allColumnsShowFocus">
++-                   <bool>true</bool>
++-                  </property>
++-                  <property name="columnCount">
++-                   <number>2</number>
++-                  </property>
++-                  <attribute name="headerVisible">
++-                   <bool>false</bool>
++-                  </attribute>
++-                  <attribute name="headerDefaultSectionSize">
++-                   <number>24</number>
++-                  </attribute>
++-                  <attribute name="headerMinimumSectionSize">
++-                   <number>0</number>
++-                  </attribute>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">1</string>
++-                   </property>
++-                  </column>
++-                  <column>
++-                   <property name="text">
++-                    <string notr="true">2</string>
++-                   </property>
++-                  </column>
++-                 </widget>
++-                </item>
++-               </layout>
++-              </widget>
++-             </item>
++             </layout>
++            </widget>
++           </widget>
++@@ -1219,13 +372,6 @@ QToolButton:pressed {
++    </item>
++   </layout>
++  </widget>
++- <customwidgets>
++-  <customwidget>
++-   <class>Core::Utils::WelcomeModeTreeWidget</class>
++-   <extends>QTreeWidget</extends>
++-   <header>utils/welcomemodetreewidget.h</header>
++-  </customwidget>
++- </customwidgets>
++  <resources>
++   <include location="welcome.qrc"/>
++  </resources>
++diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
++index e9743a9..544e36a 100644
++--- a/src/plugins/welcome/welcomeplugin.cpp
+++++ b/src/plugins/welcome/welcomeplugin.cpp
++@@ -31,6 +31,8 @@
++ 
++ #include "welcomemode.h"
++ 
+++#include "communitywelcomepage.h"
+++
++ #include <coreplugin/actionmanager/actionmanager.h>
++ #include <coreplugin/basemode.h>
++ #include <coreplugin/coreconstants.h>
++@@ -45,11 +47,10 @@
++ #include <QtGui/QMessageBox>
++ #include <QtGui/QPushButton>
++ 
++-using namespace Welcome;
++-
+++using namespace Welcome::Internal;
++ 
++ WelcomePlugin::WelcomePlugin()
++-  : m_welcomeMode(0)
+++  : m_welcomeMode(0), m_communityWelcomePlugin(0)
++ {
++ }
++ 
++@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin()
++         removeObject(m_welcomeMode);
++         delete m_welcomeMode;
++     }
+++    if (m_communityWelcomePlugin) {
+++        removeObject(m_communityWelcomePlugin);
+++        delete m_communityWelcomePlugin;
+++    }
++ }
++ 
++ /*! Initializes the plugin. Returns true on success.
++@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
++     Q_UNUSED(arguments)
++     Q_UNUSED(error_message)
++ 
+++    m_communityWelcomePlugin = new Internal::CommunityWelcomePage;
+++    addObject(m_communityWelcomePlugin);
+++
++     m_welcomeMode = new WelcomeMode;
++     addObject(m_welcomeMode);
++ 
++@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
++ */
++ void WelcomePlugin::extensionsInitialized()
++ {
+++    m_welcomeMode->initPlugins();
++     Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName());
++ }
++ 
++diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h
++index 970ec39..9855595 100644
++--- a/src/plugins/welcome/welcomeplugin.h
+++++ b/src/plugins/welcome/welcomeplugin.h
++@@ -36,6 +36,9 @@ namespace Welcome {
++ 
++ class WelcomeMode;
++ 
+++namespace Internal {
+++class CommunityWelcomePage;
+++
++ class WelcomePlugin
++   : public ExtensionSystem::IPlugin
++ {
++@@ -51,8 +54,10 @@ public:
++ 
++ private:
++     WelcomeMode *m_welcomeMode;
+++    Internal::CommunityWelcomePage *m_communityWelcomePlugin;
++ };
++ 
++ } // namespace Welcome
+++} // namespace Internal
++ 
++ #endif // WELCOMEPLUGIN_H
++-- 
++1.6.3.msysgit.0
++
+diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro
+index 81f3bc8..b5fed62 100644
+--- a/src/libs/extensionsystem/extensionsystem.pro
++++ b/src/libs/extensionsystem/extensionsystem.pro
+@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY
+ include(../../qtcreatorlibrary.pri)
+ include(extensionsystem_dependencies.pri)
+ 
+-unix:!macx:!freebsd* {
+-  LIBS += -ldl
+-}
++unix:!macx:!freebsd*:LIBS += -ldl
+ 
+ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\"
+ 
+@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \
+     pluginspec_p.h \
+     pluginview.h \
+     pluginview_p.h \
+-    optionsparser.h
++    optionsparser.h \
++    iwelcomepage.h
+ SOURCES += pluginerrorview.cpp \
+     plugindetailsview.cpp \
+     iplugin.cpp \
+     pluginmanager.cpp \
+     pluginspec.cpp \
+     pluginview.cpp \
+-    optionsparser.cpp
++    optionsparser.cpp \
++    iwelcomepage.cpp
+ FORMS += pluginview.ui \
+     pluginerrorview.ui \
+     plugindetailsview.ui
+diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp
+new file mode 100644
+index 0000000..1297037
+--- /dev/null
++++ b/src/libs/extensionsystem/iwelcomepage.cpp
+@@ -0,0 +1,8 @@
++#include "iwelcomepage.h"
++
++using namespace ExtensionSystem;
++
++IWelcomePage::IWelcomePage()
++{
++
++}
+diff --git a/src/libs/extensionsystem/iwelcomepage.h b/src/libs/extensionsystem/iwelcomepage.h
+new file mode 100644
+index 0000000..e4e5e6f
+--- /dev/null
++++ b/src/libs/extensionsystem/iwelcomepage.h
+@@ -0,0 +1,31 @@
++#ifndef IWELCOMEPAGE_H
++#define IWELCOMEPAGE_H
++
++
++#include "extensionsystem_global.h"
++
++#include <QObject>
++
++namespace ExtensionSystem {
++
++class IWelcomePagePrivate;
++
++class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject
++{
++    Q_OBJECT
++
++public:
++    IWelcomePage();
++
++    virtual QWidget *page() = 0;
++    virtual QString title() const = 0;
++    virtual int priority() const { return 0; }
++
++private:
++    // not used atm
++    IWelcomePagePrivate *m_d;
++};
++
++}
++
++#endif // IWELCOMEPAGE_H
+diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp
+index 26d55a3..ff68ccc 100644
+--- a/src/libs/utils/welcomemodetreewidget.cpp
++++ b/src/libs/utils/welcomemodetreewidget.cpp
+@@ -36,6 +36,18 @@
+ namespace Core {
+     namespace Utils {
+ 
++void WelcomeModeLabel::setStyledText(const QString &text)
++{
++    QString  rc = QLatin1String(
++    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
++    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
++    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
++    "<span style=\" font-size:x-large; color:#555555;\">");
++    rc += text;
++    rc += QLatin1String("</span></p><hr/></body></html>");
++    setText(rc);
++}
++
+ struct WelcomeModeTreeWidgetPrivate
+ {
+     WelcomeModeTreeWidgetPrivate() {}
+@@ -48,6 +60,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) :
+     m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png"));
+     connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
+             SLOT(slotItemClicked(QTreeWidgetItem *)));
++
++    viewport()->setAutoFillBackground(false);
+ }
+ 
+ WelcomeModeTreeWidget::~WelcomeModeTreeWidget()
+diff --git a/src/libs/utils/welcomemodetreewidget.h b/src/libs/utils/welcomemodetreewidget.h
+index d26bc22..8237613 100644
+--- a/src/libs/utils/welcomemodetreewidget.h
++++ b/src/libs/utils/welcomemodetreewidget.h
+@@ -33,11 +33,22 @@
+ #include "utils_global.h"
+ 
+ #include <QtGui/QTreeWidget>
++#include <QtGui/QLabel>
+ 
+ namespace Core {
+   namespace Utils {
+ 
+ struct WelcomeModeTreeWidgetPrivate;
++struct WelcomeModeLabelPrivate;
++
++class QTCREATOR_UTILS_EXPORT WelcomeModeLabel : public QLabel
++{
++    Q_OBJECT
++public:
++    WelcomeModeLabel(QWidget *parent) : QLabel(parent) {};
++    void setStyledText(const QString &text);
++    WelcomeModeLabelPrivate *m_d;
++};
+ 
+ class QTCREATOR_UTILS_EXPORT WelcomeModeTreeWidget : public QTreeWidget
+ {
+diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
+index 04e5be4..ce487fb 100644
+--- a/src/plugins/coreplugin/coreplugin.h
++++ b/src/plugins/coreplugin/coreplugin.h
+@@ -33,10 +33,6 @@
+ #include <extensionsystem/iplugin.h>
+ 
+ namespace Core {
+-    class IMode;
+-}
+-
+-namespace Core {
+ namespace Internal {
+ 
+ class EditMode;
+@@ -59,7 +55,6 @@ public slots:
+ 
+ private:
+     MainWindow *m_mainWindow;
+-    Core::IMode *m_welcomeMode;
+     EditMode *m_editMode;
+ };
+ 
+diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec
+index d7ccc07..29f1b46 100644
+--- a/src/plugins/help/Help.pluginspec
++++ b/src/plugins/help/Help.pluginspec
+@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
+         <dependency name="Core" version="1.2.80"/>
+         <dependency name="Find" version="1.2.80"/>
+         <dependency name="QuickOpen" version="1.2.80"/>
+-        <dependency name="Welcome" version="1.2.80"/>
+     </dependencyList>
+ </plugin>
+diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro
+index 1f5ec55..b733a1f 100644
+--- a/src/plugins/help/help.pro
++++ b/src/plugins/help/help.pro
+@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
+ include(../../plugins/coreplugin/coreplugin.pri)
+ include(../../plugins/find/find.pri)
+ include(../../plugins/quickopen/quickopen.pri)
+-include(../../plugins/welcome/welcome.pri)
+ QT += network
+ CONFIG += help
+ DEFINES += QT_CLUCENE_SUPPORT \
+diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
+index f6e8db8..2ff11c8 100644
+--- a/src/plugins/help/helpplugin.cpp
++++ b/src/plugins/help/helpplugin.cpp
+@@ -87,8 +87,8 @@
+ using namespace Help;
+ using namespace Help::Internal;
+ 
+-HelpManager::HelpManager(QHelpEngine *helpEngine)
+-    : m_helpEngine(helpEngine)
++HelpManager::HelpManager(Internal::HelpPlugin* plugin)
++    : m_plugin(plugin)
+ {
+ }
+ 
+@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
+ {
+     bool needsSetup = false;
+     {
+-        QHelpEngineCore hc(m_helpEngine->collectionFile());
++        QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile());
+         if (!hc.setupData())
+             qWarning() << "Could not initialize help engine:" << hc.error();
+         foreach (const QString &fileName, fileNames) {
+@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
+         }
+     }
+     if (needsSetup)
+-        m_helpEngine->setupData();
++        m_plugin->helpEngine()->setupData();
++}
++
++void HelpManager::openHelpPage(const QString& url)
++{
++    m_plugin->openHelpPage(url);
++}
++
++void HelpManager::openContextHelpPage(const QString& url)
++{
++    m_plugin->openContextHelpPage(url);
+ }
+ 
+ HelpPlugin::HelpPlugin() :
+@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
+     connect(m_helpEngine, SIGNAL(setupFinished()), this,
+         SLOT(updateFilterComboBox()));
+ 
+-    addAutoReleasedObject(new HelpManager(m_helpEngine));
++    addAutoReleasedObject(new HelpManager(this));
+ 
+     m_filterSettingsPage = new FilterSettingsPage(m_helpEngine);
+     addAutoReleasedObject(m_filterSettingsPage);
+@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
+     return true;
+ }
+ 
++QHelpEngine* HelpPlugin::helpEngine() const
++{
++    return m_helpEngine;
++}
++
+ void HelpPlugin::createRightPaneSideBar()
+ {
+     QAction *switchToHelpMode = new QAction("Go to Help Mode", this);
+@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized()
+     updateFilterComboBox();
+     m_bookmarkManager->setupBookmarkModels();
+ 
+-    using namespace Core::Internal;
+-    using namespace Core::Constants;
+-    Welcome::WelcomeMode *welcomeMode =
+-        qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME));
+-    if (welcomeMode) {
+-        connect(welcomeMode, SIGNAL(openHelpPage(QString)), this,
+-            SLOT(openHelpPage(QString)));
+-        connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this,
+-            SLOT(openContextHelpPage(QString)));
+-    }
+-
+ #if !defined(QT_NO_WEBKIT)
+     QWebSettings* webSettings = QWebSettings::globalSettings();
+     QFont font(webSettings->fontFamily(QWebSettings::StandardFont),
+diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
+index 6ab78cf..10cf1fd 100644
+--- a/src/plugins/help/helpplugin.h
++++ b/src/plugins/help/helpplugin.h
+@@ -63,6 +63,7 @@ class SideBarItem;
+ namespace Help {
+ namespace Internal {
+     class CentralWidget;
++    class HelpPlugin;
+ }
+ 
+ namespace Constants {
+@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject
+ {
+     Q_OBJECT
+ public:
+-    HelpManager(QHelpEngine *helpEngine);
++    HelpManager(Internal::HelpPlugin*);
+ 
+     void registerDocumentation(const QStringList &fileNames);
++    void openHelpPage(const QString& url);
++    void openContextHelpPage(const QString &url);
+ 
+ private:
+-    QHelpEngine *m_helpEngine;
++    Internal::HelpPlugin *m_plugin;
+ };
+ 
+ namespace Internal {
+@@ -108,6 +111,12 @@ public:
+     void setIndexFilter(const QString &filter);
+     QString indexFilter() const;
+ 
++    void openHelpPage(const QUrl& url);
++    void openHelpPage(const QString& url);
++    void openContextHelpPage(const QString &url);
++
++    QHelpEngine* helpEngine() const;
++
+ private slots:
+     void modeChanged(Core::IMode *mode);
+     void activateContext();
+@@ -128,10 +137,6 @@ private slots:
+     void slotHideRightPane();
+     void copyFromSideBar();
+ 
+-    void openHelpPage(const QUrl& url);
+-    void openHelpPage(const QString& url);
+-    void openContextHelpPage(const QString &url);
+-
+     void updateSideBarSource();
+     void updateSideBarSource(const QUrl &newUrl);
+ 
+diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
+index 6ef52c1..b8ae5ec 100644
+--- a/src/plugins/plugins.pro
++++ b/src/plugins/plugins.pro
+@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen
+ plugin_projectexplorer.depends += plugin_find
+ plugin_projectexplorer.depends += plugin_coreplugin
+ plugin_projectexplorer.depends += plugin_texteditor
+-plugin_projectexplorer.depends += plugin_welcome
+ 
+ plugin_qt4projectmanager.subdir = qt4projectmanager
+ plugin_qt4projectmanager.depends = plugin_texteditor
+@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools
+ plugin_qt4projectmanager.depends += plugin_cppeditor
+ plugin_qt4projectmanager.depends += plugin_help
+ plugin_qt4projectmanager.depends += plugin_designer
+-plugin_qt4projectmanager.depends += plugin_welcome
+ 
+ plugin_quickopen.subdir = quickopen
+ plugin_quickopen.depends = plugin_coreplugin
+@@ -144,7 +142,6 @@ plugin_help.subdir = help
+ plugin_help.depends = plugin_find
+ plugin_help.depends += plugin_quickopen
+ plugin_help.depends += plugin_coreplugin
+-plugin_help.depends += plugin_welcome
+ 
+ plugin_resourceeditor.subdir = resourceeditor
+ plugin_resourceeditor.depends = plugin_coreplugin
+diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
+index 6a66cfe..8b5a7c3 100644
+--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec
++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
+@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
+         <dependency name="Find" version="1.2.80"/>
+         <dependency name="QuickOpen" version="1.2.80"/>
+         <dependency name="TextEditor" version="1.2.80"/>
+-        <dependency name="Welcome" version="1.2.80"/>
+     </dependencyList>
+ </plugin>
+diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
+index f10b628..c9a692c 100644
+--- a/src/plugins/projectexplorer/projectexplorer.cpp
++++ b/src/plugins/projectexplorer/projectexplorer.cpp
+@@ -57,6 +57,8 @@
+ #include "sessiondialog.h"
+ #include "buildparserfactory.h"
+ #include "projectexplorersettingspage.h"
++#include "projectwelcomepage.h"
++#include "projectwelcomepagewidget.h"
+ 
+ #include <coreplugin/basemode.h>
+ #include <coreplugin/coreconstants.h>
+@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin()
+ 
+ ProjectExplorerPlugin::~ProjectExplorerPlugin()
+ {
++    removeObject(m_welcomePlugin);
+     removeObject(this);
+ }
+ 
+@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
+     Core::ICore *core = Core::ICore::instance();
+     Core::ActionManager *am = core->actionManager();
+ 
++    m_welcomePlugin = new ProjectWelcomePage;
++    m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page());
++    Q_ASSERT(m_welcomePage);
++    connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
++    addObject(m_welcomePlugin);
+     addObject(this);
+ 
+     connect(core->fileManager(), SIGNAL(currentFileChanged(QString)),
+@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
+         m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool();
+     }
+ 
+-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
+-        (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) {
+-        connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
+-    }
+     connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager()));
+     connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject()));
+ #if 0
+@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
+             this, SLOT(determineSessionToRestoreAtStartup()));
+     connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
+ 
++    updateWelcomePage();
++
+     return true;
+ }
+ 
+@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager()
+     Core::ModeManager *modeManager = Core::ModeManager::instance();
+     Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME);
+     if (modeManager->currentMode() == welcomeMode)
+-    {
+-        updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode));
+-    }
++        updateWelcomePage();
+ }
+ 
+ void ProjectExplorerPlugin::setStartupProject(Project *project)
+@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const
+ }
+ 
+ // update welcome page
+-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode)
++void ProjectExplorerPlugin::updateWelcomePage()
+ {
+-    Welcome::WelcomeMode::WelcomePageData welcomePageData;
++    ProjectWelcomePageWidget::WelcomePageData welcomePageData;
+     welcomePageData.sessionList =  m_session->sessions();
+     welcomePageData.activeSession = m_session->activeSession();
+     welcomePageData.previousSession = m_session->lastSession();
+     welcomePageData.projectList = m_recentProjects;
+-    welcomeMode->updateWelcomePage(welcomePageData);
++    m_welcomePage->updateWelcomePage(welcomePageData);
+ }
+ 
+-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *)
+ {
+-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode))
+-        updateWelcomePage(welcomeMode);
++        updateWelcomePage();
+ }
+ 
+ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup()
+@@ -1080,11 +1083,8 @@ void ProjectExplorerPlugin::restoreSession()
+     // update welcome page
+     Core::ModeManager *modeManager = Core::ModeManager::instance();
+     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*)));
+-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) {
+-        updateWelcomePage(welcomeMode);
+-        connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
+-        connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
+-    }
++    connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
++    connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
+ 
+     Core::ICore::instance()->openFiles(arguments);
+     updateActions();
+diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
+index 0f781ea..c3251c0 100644
+--- a/src/plugins/projectexplorer/projectexplorer.h
++++ b/src/plugins/projectexplorer/projectexplorer.h
+@@ -72,6 +72,8 @@ class ApplicationOutput;
+ class OutputPane;
+ class ProjectWindow;
+ class ProjectFileFactory;
++class ProjectWelcomePage;
++class ProjectWelcomePageWidget;
+ 
+ struct ProjectExplorerSettings
+ {
+@@ -209,7 +211,7 @@ private:
+ 
+     void updateActions();
+     void addToRecentProjects(const QString &fileName, const QString &displayName);
+-    void updateWelcomePage(Welcome::WelcomeMode *welcomeMode);
++    void updateWelcomePage();
+     Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const;
+ 
+     static ProjectExplorerPlugin *m_instance;
+@@ -279,6 +281,8 @@ private:
+     QString m_runMode;
+     QString m_projectFilterString;
+     Internal::ProjectExplorerSettings m_projectExplorerSettings;
++    Internal::ProjectWelcomePage *m_welcomePlugin;
++    Internal::ProjectWelcomePageWidget *m_welcomePage;
+ };
+ 
+ namespace Internal {
+diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
+index ffb0b08..9e73399 100644
+--- a/src/plugins/projectexplorer/projectexplorer.pro
++++ b/src/plugins/projectexplorer/projectexplorer.pro
+@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \
+     filewatcher.h \
+     debugginghelper.h \
+     abstractmakestep.h \
+-    projectexplorersettingspage.h
++    projectexplorersettingspage.h \
++    projectwelcomepage.h \
++    projectwelcomepagewidget.h
+ SOURCES += projectexplorer.cpp \
+     projectwindow.cpp \
+     buildmanager.cpp \
+@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \
+     filewatcher.cpp \
+     debugginghelper.cpp \
+     abstractmakestep.cpp \
+-    projectexplorersettingspage.cpp
++    projectexplorersettingspage.cpp \
++    projectwelcomepage.cpp \
++    projectwelcomepagewidget.cpp
+ FORMS += processstep.ui \
+     editorsettingspropertiespage.ui \
+     runsettingspropertiespage.ui \
+@@ -119,7 +123,8 @@ FORMS += processstep.ui \
+     projectwizardpage.ui \
+     buildstepspage.ui \
+     removefiledialog.ui \
+-    projectexplorersettingspage.ui
++    projectexplorersettingspage.ui \
++    projectwelcomepagewidget.ui
+ win32 { 
+     SOURCES += applicationlauncher_win.cpp \
+         winguiprocess.cpp
+diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
+index ecbb7a4..674c8bb 100644
+--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri
++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
+@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri)
+ include(../../plugins/find/find.pri)
+ include(../../plugins/coreplugin/coreplugin.pri)
+ include(../../plugins/texteditor/texteditor.pri)
+-include(../../plugins/welcome/welcome.pri)
+diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
+new file mode 100644
+index 0000000..ad1c3e9
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
+@@ -0,0 +1,48 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "projectwelcomepage.h"
++#include "projectwelcomepagewidget.h"
++
++namespace ProjectExplorer {
++namespace Internal {
++
++ProjectWelcomePage::ProjectWelcomePage()
++ : m_page(new ProjectWelcomePageWidget)
++{
++
++}
++
++QWidget* ProjectWelcomePage::page()
++{
++    return m_page;
++}
++
++} // namespace Internal
++} // namespace ProjectExplorer
+diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h
+new file mode 100644
+index 0000000..6185dd5
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomepage.h
+@@ -0,0 +1,58 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef PROJECTWELCOMEPAGE_H
++#define PROJECTWELCOMEPAGE_H
++
++#include <extensionsystem/iwelcomepage.h>
++
++namespace ProjectExplorer {
++namespace Internal {
++
++class ProjectWelcomePageWidget;
++
++class ProjectWelcomePage : public ExtensionSystem::IWelcomePage
++{
++    Q_OBJECT
++public:
++    ProjectWelcomePage();
++
++    QWidget *page();
++    QString title() const { return tr("Develop"); }
++    int priority() const { return 20; }
++private:
++    ProjectWelcomePageWidget *m_page;
++
++
++};
++
++} // namespace Internal
++} // namespace ProjectExplorer
++
++#endif // PROJECTWELCOMEPAGE_H
+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
+new file mode 100644
+index 0000000..fe824a7
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
+@@ -0,0 +1,157 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "projectwelcomepagewidget.h"
++#include "ui_projectwelcomepagewidget.h"
++
++#include <coreplugin/coreconstants.h>
++#include <coreplugin/uniqueidmanager.h>
++#include <coreplugin/modemanager.h>
++#include <coreplugin/icore.h>
++#include <coreplugin/dialogs/iwizard.h>
++
++#include <QtCore/QFileInfo>
++#include <QtCore/QDir>
++#include <QtCore/QPair>
++#include <QtGui/QLabel>
++#include <QtGui/QTreeWidgetItem>
++
++#include <QtCore/QDebug>
++
++using namespace ProjectExplorer::Internal;
++
++bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const
++{
++    return previousSession == rhs.previousSession
++        && activeSession   == rhs.activeSession
++        && sessionList     == rhs.sessionList
++        && projectList     == rhs.projectList;
++}
++
++bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const
++{
++    return previousSession != rhs.previousSession
++        || activeSession   != rhs.activeSession
++        || sessionList     != rhs.sessionList
++        || projectList     != rhs.projectList;
++}
++
++QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d)
++{
++    dgb.nospace() << "PreviousSession=" << d.previousSession
++        << " activeSession=" << d.activeSession
++        << " sessionList=" << d.sessionList
++        << " projectList=" << d.projectList;
++    return dgb;
++}
++
++ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) :
++    QWidget(parent),
++    ui(new Ui::ProjectWelcomePageWidget)
++{
++    ui->setupUi(this);
++    ui->projTitleLabel->setStyledText(tr("Open Recent Project"));
++    ui->recentSessionsTitleLabel->setStyledText(tr("Resume Session"));
++    updateWelcomePage(WelcomePageData());
++
++    connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
++    connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
++    connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
++    connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
++
++}
++
++ProjectWelcomePageWidget::~ProjectWelcomePageWidget()
++{
++    delete ui;
++}
++
++void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData)
++{
++    // Update only if data are modified
++    if (welcomePageData == lastData)
++        return;
++    lastData = welcomePageData;
++
++    setUpdatesEnabled(false);
++    ui->sessTreeWidget->clear();
++    ui->projTreeWidget->clear();
++
++    if (welcomePageData.sessionList.count() > 0) {
++        foreach (const QString &s, welcomePageData.sessionList) {
++            QString str = s;
++            if (s == welcomePageData.previousSession)
++                str = tr("%1 (last session)").arg(s);
++            ui->sessTreeWidget->addItem(str, s);
++        }
++        ui->sessTreeWidget->updateGeometry();
++        ui->sessTreeWidget->show();
++    } else {
++        ui->sessTreeWidget->hide();
++    }
++
++    typedef QPair<QString, QString> QStringPair;
++    if (welcomePageData.projectList.count() > 0) {
++        foreach (const QStringPair &it, welcomePageData.projectList) {
++            QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first);
++            const QFileInfo fi(it.first);
++            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
++        }
++    } else {
++        ui->projTreeWidget->hide();
++    }
++    ui->projTreeWidget->updateGeometry();
++    setUpdatesEnabled(true);
++}
++
++void ProjectWelcomePageWidget::activateEditMode()
++{
++    Core::ModeManager *modeManager = Core::ModeManager::instance();
++    if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME))
++        modeManager->activateMode(Core::Constants::MODE_EDIT);
++}
++
++
++void ProjectWelcomePageWidget::slotSessionClicked(const QString &data)
++{
++    emit requestSession(data);
++    activateEditMode();
++}
++
++void ProjectWelcomePageWidget::slotProjectClicked(const QString &data)
++{
++    emit requestProject(data);
++    activateEditMode();
++}
++
++void ProjectWelcomePageWidget::slotCreateNewProject()
++{
++    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
++                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
++}
+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h
+new file mode 100644
+index 0000000..ac94986
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h
+@@ -0,0 +1,81 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef PROJECTWELCOMEPAGEWIDGET_H
++#define PROJECTWELCOMEPAGEWIDGET_H
++
++#include <QtGui/QWidget>
++
++
++namespace ProjectExplorer {
++    namespace Internal {
++
++
++namespace Ui {
++    class ProjectWelcomePageWidget;
++}
++
++class ProjectWelcomePageWidget : public QWidget {
++    Q_OBJECT
++public:
++    ProjectWelcomePageWidget(QWidget *parent = 0);
++    ~ProjectWelcomePageWidget();
++
++    struct WelcomePageData{
++        bool operator==(const WelcomePageData &rhs) const;
++        bool operator!=(const WelcomePageData &rhs) const;
++
++        QString previousSession;
++        QString activeSession;
++        QStringList sessionList;
++        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
++    };
++
++    void updateWelcomePage(const WelcomePageData &welcomePageData);
++
++signals:
++    void requestProject(const QString &project);
++    void requestSession(const QString &session);
++    void manageSessions();
++
++private slots:
++    void slotSessionClicked(const QString &data);
++    void slotProjectClicked(const QString &data);
++    void slotCreateNewProject();
++
++private:
++    void activateEditMode();
++    Ui::ProjectWelcomePageWidget *ui;
++    WelcomePageData lastData;
++};
++
++}
++}
++
++#endif // PROJECTWELCOMEPAGEWIDGET_H
+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
+new file mode 100644
+index 0000000..38558d4
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
+@@ -0,0 +1,259 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<ui version="4.0">
++ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class>
++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget">
++  <property name="geometry">
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>667</width>
++    <height>365</height>
++   </rect>
++  </property>
++  <property name="windowTitle">
++   <string>Form</string>
++  </property>
++  <layout class="QHBoxLayout" name="horizontalLayout">
++   <item>
++    <widget class="QFrame" name="recentSessionsFrame">
++     <property name="sizePolicy">
++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++       <horstretch>0</horstretch>
++       <verstretch>0</verstretch>
++      </sizepolicy>
++     </property>
++     <property name="minimumSize">
++      <size>
++       <width>270</width>
++       <height>130</height>
++      </size>
++     </property>
++     <property name="styleSheet">
++      <string/>
++     </property>
++     <layout class="QGridLayout" name="gridLayout_3">
++      <property name="horizontalSpacing">
++       <number>0</number>
++      </property>
++      <property name="verticalSpacing">
++       <number>3</number>
++      </property>
++      <item row="0" column="0" colspan="3">
++       <widget class="Core::Utils::WelcomeModeLabel" name="recentSessionsTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0" colspan="3">
++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="focusPolicy">
++         <enum>Qt::NoFocus</enum>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="selectionMode">
++         <enum>QAbstractItemView::NoSelection</enum>
++        </property>
++        <property name="verticalScrollMode">
++         <enum>QAbstractItemView::ScrollPerPixel</enum>
++        </property>
++        <property name="rootIsDecorated">
++         <bool>false</bool>
++        </property>
++        <property name="uniformRowHeights">
++         <bool>true</bool>
++        </property>
++        <property name="allColumnsShowFocus">
++         <bool>true</bool>
++        </property>
++        <property name="columnCount">
++         <number>2</number>
++        </property>
++        <attribute name="headerVisible">
++         <bool>false</bool>
++        </attribute>
++        <attribute name="headerDefaultSectionSize">
++         <number>24</number>
++        </attribute>
++        <attribute name="headerMinimumSectionSize">
++         <number>0</number>
++        </attribute>
++        <column>
++         <property name="text">
++          <string notr="true">1</string>
++         </property>
++        </column>
++        <column>
++         <property name="text">
++          <string notr="true">2</string>
++         </property>
++        </column>
++       </widget>
++      </item>
++      <item row="3" column="0">
++       <widget class="QPushButton" name="manageSessionsButton">
++        <property name="focusPolicy">
++         <enum>Qt::TabFocus</enum>
++        </property>
++        <property name="text">
++         <string>Manage Sessions...</string>
++        </property>
++       </widget>
++      </item>
++      <item row="4" column="0">
++       <spacer name="verticalSpacer">
++        <property name="orientation">
++         <enum>Qt::Vertical</enum>
++        </property>
++        <property name="sizeHint" stdset="0">
++         <size>
++          <width>20</width>
++          <height>40</height>
++         </size>
++        </property>
++       </spacer>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item>
++    <widget class="QFrame" name="recentProjectsFrame">
++     <property name="styleSheet">
++      <string/>
++     </property>
++     <layout class="QGridLayout" name="gridLayout_5">
++      <property name="horizontalSpacing">
++       <number>0</number>
++      </property>
++      <property name="verticalSpacing">
++       <number>3</number>
++      </property>
++      <property name="rightMargin">
++       <number>9</number>
++      </property>
++      <item row="0" column="0" colspan="3">
++       <widget class="Core::Utils::WelcomeModeLabel" name="projTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0" colspan="3">
++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="focusPolicy">
++         <enum>Qt::NoFocus</enum>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="selectionMode">
++         <enum>QAbstractItemView::NoSelection</enum>
++        </property>
++        <property name="verticalScrollMode">
++         <enum>QAbstractItemView::ScrollPerPixel</enum>
++        </property>
++        <property name="rootIsDecorated">
++         <bool>false</bool>
++        </property>
++        <property name="uniformRowHeights">
++         <bool>true</bool>
++        </property>
++        <property name="allColumnsShowFocus">
++         <bool>true</bool>
++        </property>
++        <property name="columnCount">
++         <number>2</number>
++        </property>
++        <attribute name="headerVisible">
++         <bool>false</bool>
++        </attribute>
++        <attribute name="headerDefaultSectionSize">
++         <number>24</number>
++        </attribute>
++        <attribute name="headerMinimumSectionSize">
++         <number>0</number>
++        </attribute>
++        <column>
++         <property name="text">
++          <string notr="true">1</string>
++         </property>
++        </column>
++        <column>
++         <property name="text">
++          <string notr="true">2</string>
++         </property>
++        </column>
++       </widget>
++      </item>
++      <item row="3" column="0">
++       <widget class="QPushButton" name="createNewProjectButton">
++        <property name="focusPolicy">
++         <enum>Qt::TabFocus</enum>
++        </property>
++        <property name="text">
++         <string>Create New Project...</string>
++        </property>
++        <property name="flat">
++         <bool>false</bool>
++        </property>
++       </widget>
++      </item>
++      <item row="4" column="0">
++       <spacer name="verticalSpacer_2">
++        <property name="orientation">
++         <enum>Qt::Vertical</enum>
++        </property>
++        <property name="sizeHint" stdset="0">
++         <size>
++          <width>20</width>
++          <height>40</height>
++         </size>
++        </property>
++       </spacer>
++      </item>
++     </layout>
++    </widget>
++   </item>
++  </layout>
++ </widget>
++ <customwidgets>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeTreeWidget</class>
++   <extends>QTreeWidget</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeLabel</class>
++   <extends>QLabel</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++ </customwidgets>
++ <resources/>
++ <connections/>
++</ui>
+diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui
+new file mode 100644
+index 0000000..9ad7e16
+--- /dev/null
++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui
+@@ -0,0 +1,21 @@
++<ui version="4.0" >
++ <author/>
++ <comment/>
++ <exportmacro/>
++ <class>ProjectWelcomePage</class>
++ <widget class="QWidget" name="ProjectWelcomePage" >
++  <property name="geometry" >
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>400</width>
++    <height>300</height>
++   </rect>
++  </property>
++  <property name="windowTitle" >
++   <string>Form</string>
++  </property>
++ </widget>
++ <pixmapfunction/>
++ <connections/>
++</ui>
+diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
+index 3b515bd..c4b8d44 100644
+--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
+@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
+         <dependency name="CppEditor" version="1.2.80"/>
+         <dependency name="Help" version="1.2.80"/>
+         <dependency name="Designer" version="1.2.80"/>
+-        <dependency name="Welcome" version="1.2.80"/>
+     </dependencyList>
+ </plugin>
+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
+new file mode 100644
+index 0000000..379d459
+--- /dev/null
++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
+@@ -0,0 +1,47 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "gettingstartedwelcomepage.h"
++#include "gettingstartedwelcomepagewidget.h"
++
++namespace Qt4ProjectManager {
++namespace Internal {
++
++GettingStartedWelcomePage::GettingStartedWelcomePage()
++        : m_page(new GettingStartedWelcomePageWidget)
++{
++}
++
++QWidget* GettingStartedWelcomePage::page()
++{
++    return m_page;
++}
++
++} // namespace Internal
++} // namespace Qt4ProjectManager
+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
+new file mode 100644
+index 0000000..2534f7a
+--- /dev/null
++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
+@@ -0,0 +1,56 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H
++#define GETTINGSTARTEDWELCOMEPLUGIN_H
++
++#include <extensionsystem/iwelcomepage.h>
++
++namespace Qt4ProjectManager {
++namespace Internal {
++
++class GettingStartedWelcomePageWidget;
++
++class GettingStartedWelcomePage : public ExtensionSystem::IWelcomePage
++{
++public:
++    GettingStartedWelcomePage();
++
++    QWidget *page();
++    QString title() const { return tr("Getting Started");}
++    int priority() const { return 10; }
++
++private:
++    GettingStartedWelcomePageWidget *m_page;
++};
++
++} // namespace Internal
++} // namespace Qt4ProjectManager
++
++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H
+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
+new file mode 100644
+index 0000000..41dd90d
+--- /dev/null
++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
+@@ -0,0 +1,259 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "gettingstartedwelcomepagewidget.h"
++#include "ui_gettingstartedwelcomepagewidget.h"
++
++#include <coreplugin/icore.h>
++#include <coreplugin/coreconstants.h>
++
++#include <extensionsystem/pluginmanager.h>
++
++#include <help/helpplugin.h>
++
++#include <QtCore/QDateTime>
++#include <QtCore/QDir>
++#include <QtCore/QFileInfo>
++#include <QtCore/QDebug>
++#include <QtCore/QUrl>
++#include <QtCore/QXmlStreamReader>
++#include <QtGui/QFont>
++
++namespace Qt4ProjectManager {
++namespace Internal {
++
++// TODO: remove
++
++GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) :
++    QWidget(parent),
++    ui(new Ui::GettingStartedWelcomePageWidget)
++{
++    ui->setupUi(this);
++    ui->tutorialsTitleLabel->setStyledText(tr("Tutorials"));
++    ui->demoTitleLabel->setStyledText(tr("Explore Qt Examples"));
++    ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
++    ui->didYouKnowTitleLabel->setStyledText(tr("Did You Know?"));
++
++    connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&)));
++    connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
++    connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
++
++    ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
++                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
++    ui->tutorialTreeWidget->addItem(tr("Creating an address book"),
++                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
++    ui->tutorialTreeWidget->addItem(tr("Understanding widgets"),
++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
++    ui->tutorialTreeWidget->addItem(tr("Building with qmake"),
++                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
++    ui->tutorialTreeWidget->addItem(tr("Writing test cases"),
++                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
++
++    srand(QDateTime::currentDateTime().toTime_t());
++    QStringList tips = tipsOfTheDay();
++    m_currentTip = rand()%tips.count();
++
++    QTextDocument *doc = ui->didYouKnowTextBrowser->document();
++    doc->setDefaultStyleSheet("a:link {color:black;}");
++    ui->didYouKnowTextBrowser->setDocument(doc);
++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
++
++    connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
++    connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
++
++}
++
++GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget()
++{
++    delete ui;
++}
++
++void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
++{
++    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
++    if (!QFile::exists(demoxml)) {
++        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
++        if (!QFile::exists(demoxml))
++            return;
++    }
++
++    QFile description(demoxml);
++    if (!description.open(QFile::ReadOnly))
++        return;
++
++    ui->examplesComboBox->clear();
++    ui->examplesComboBox->setEnabled(true);
++
++    ui->examplesComboBox->addItem(tr("Choose an example..."));
++    QFont f = font();
++    f.setItalic(true);
++    ui->examplesComboBox->setItemData(0, f, Qt::FontRole);
++    f.setItalic(false);
++    bool inExamples = false;
++    QString dirName;
++    QXmlStreamReader reader(&description);
++    while (!reader.atEnd()) {
++        switch (reader.readNext()) {
++            case QXmlStreamReader::StartElement:
++            if (reader.name() == "category") {
++                QString name = reader.attributes().value(QLatin1String("name")).toString();
++                if (name.contains("tutorial"))
++                    break;
++                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
++                ui->examplesComboBox->addItem(name);
++                f.setBold(true);
++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole);
++                f.setBold(false);
++                inExamples = true;
++            }
++            if (inExamples && reader.name() == "example") {
++                QString name = reader.attributes().value(QLatin1String("name")).toString();
++                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
++                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
++                QString fileName = examplePath + relativeProPath;
++                if (!QFile::exists(fileName))
++                    fileName = sourcePath + "/examples" + relativeProPath;
++                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
++
++                ui->examplesComboBox->addItem("  " + name, fileName);
++                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
++            }
++            break;
++            case QXmlStreamReader::EndElement:
++            if (reader.name() == "category")
++                inExamples = false;
++            break;
++            default:
++            break;
++        }
++    }
++}
++
++void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index)
++{
++    QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString();
++    ui->openExampleButton->setEnabled(!fileName.isEmpty());
++}
++
++void GettingStartedWelcomePageWidget::slotOpenExample()
++{
++    QComboBox *box = ui->examplesComboBox;
++    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
++    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
++    QStringList files;
++    QFileInfo fi(proFile);
++    QString tryFile = fi.path() + "/main.cpp";
++    files << proFile;
++    if(!QFile::exists(tryFile))
++        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
++    if(QFile::exists(tryFile))
++        files << tryFile;
++    Core::ICore::instance()->openFiles(files);
++    slotOpenContextHelpPage(helpFile);
++}
++
++void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url)
++{
++    Help::HelpManager *helpManager
++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
++    Q_ASSERT(helpManager);
++    helpManager->openHelpPage(url);
++}
++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url)
++{
++    Help::HelpManager *helpManager
++        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
++    Q_ASSERT(helpManager);
++    helpManager->openContextHelpPage(url);
++}
++
++void GettingStartedWelcomePageWidget::slotNextTip()
++{
++    QStringList tips = tipsOfTheDay();
++    m_currentTip = ((m_currentTip+1)%tips.count());
++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
++}
++
++void GettingStartedWelcomePageWidget::slotPrevTip()
++{
++    QStringList tips = tipsOfTheDay();
++    m_currentTip = ((m_currentTip-1)+tips.count())%tips.count();
++    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
++}
++
++QStringList GettingStartedWelcomePageWidget::tipsOfTheDay()
++{
++    static QStringList tips;
++    if (tips.isEmpty()) {
++        QString altShortcut =
++#ifdef Q_WS_MAC
++            tr("Cmd", "Shortcut key");
++#else
++            tr("Alt", "Shortcut key");
++#endif
++        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
++                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
++                       "<li></li><li>6 - Output</li></ul>"));
++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
++        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
++                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));
++        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
++                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
++                        "and code completion."));
++        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
++                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
++        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
++        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
++        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
++        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
++        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
++                       "on the buttons at the window bottom:"
++                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
++                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
++        tips.append(tr("You can quickly search methods, classes, help and more using the "
++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
++        tips.append(tr("You can add custom build steps in the "
++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
++        tips.append(tr("Within a session, you can add "
++                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
++        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
++        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
++                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
++                       "target in the combo box."));
++        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
++                       "revision control systems</a> such as Subversion, Perforce and Git."));
++        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
++    }
++    return tips;
++}
++
++
++} // namespace Internal
++} // namespace Qt4ProjectManager
+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
+new file mode 100644
+index 0000000..fdc6ec0
+--- /dev/null
++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
+@@ -0,0 +1,69 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H
++#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H
++
++#include <QWidget>
++
++namespace Qt4ProjectManager {
++namespace Internal {
++
++namespace Ui {
++    class GettingStartedWelcomePageWidget;
++}
++
++class GettingStartedWelcomePageWidget : public QWidget {
++    Q_OBJECT
++public:
++    GettingStartedWelcomePageWidget(QWidget *parent = 0);
++    ~GettingStartedWelcomePageWidget();
++
++ public slots:
++    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
++
++private slots:
++    void slotOpenHelpPage(const QString& url);
++    void slotOpenContextHelpPage(const QString& url);
++    void slotEnableExampleButton(int);
++    void slotOpenExample();
++    void slotNextTip();
++    void slotPrevTip();
++
++private:
++    QStringList tipsOfTheDay();
++
++    Ui::GettingStartedWelcomePageWidget *ui;
++    int m_currentTip;
++};
++
++
++} // namespace Internal
++} // namespace Qt4ProjectManager
++#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H
+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
+new file mode 100644
+index 0000000..e4dc34b
+--- /dev/null
++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
+@@ -0,0 +1,348 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<ui version="4.0">
++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class>
++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget">
++  <property name="geometry">
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>646</width>
++    <height>361</height>
++   </rect>
++  </property>
++  <property name="windowTitle">
++   <string>Form</string>
++  </property>
++  <layout class="QGridLayout" name="gridLayout">
++   <item row="0" column="0" rowspan="2">
++    <widget class="QFrame" name="tutorialsFrame">
++     <property name="sizePolicy">
++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++       <horstretch>0</horstretch>
++       <verstretch>0</verstretch>
++      </sizepolicy>
++     </property>
++     <property name="maximumSize">
++      <size>
++       <width>400</width>
++       <height>16777215</height>
++      </size>
++     </property>
++     <property name="styleSheet">
++      <string/>
++     </property>
++     <layout class="QGridLayout" name="gridLayout_6">
++      <item row="0" column="0">
++       <widget class="Core::Utils::WelcomeModeLabel" name="tutorialsTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0">
++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="focusPolicy">
++         <enum>Qt::NoFocus</enum>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="selectionMode">
++         <enum>QAbstractItemView::NoSelection</enum>
++        </property>
++        <property name="verticalScrollMode">
++         <enum>QAbstractItemView::ScrollPerPixel</enum>
++        </property>
++        <property name="rootIsDecorated">
++         <bool>false</bool>
++        </property>
++        <property name="uniformRowHeights">
++         <bool>true</bool>
++        </property>
++        <property name="allColumnsShowFocus">
++         <bool>true</bool>
++        </property>
++        <property name="columnCount">
++         <number>2</number>
++        </property>
++        <attribute name="headerVisible">
++         <bool>false</bool>
++        </attribute>
++        <attribute name="headerDefaultSectionSize">
++         <number>24</number>
++        </attribute>
++        <attribute name="headerMinimumSectionSize">
++         <number>0</number>
++        </attribute>
++        <column>
++         <property name="text">
++          <string notr="true">1</string>
++         </property>
++        </column>
++        <column>
++         <property name="text">
++          <string notr="true">2</string>
++         </property>
++        </column>
++       </widget>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item row="0" column="1">
++    <widget class="QFrame" name="demosExamplesFrame">
++     <property name="sizePolicy">
++      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++       <horstretch>0</horstretch>
++       <verstretch>0</verstretch>
++      </sizepolicy>
++     </property>
++     <property name="maximumSize">
++      <size>
++       <width>400</width>
++       <height>16777215</height>
++      </size>
++     </property>
++     <property name="styleSheet">
++      <string/>
++     </property>
++     <layout class="QGridLayout" name="gridLayout_8">
++      <property name="rightMargin">
++       <number>8</number>
++      </property>
++      <property name="horizontalSpacing">
++       <number>0</number>
++      </property>
++      <item row="0" column="0" colspan="4">
++       <widget class="Core::Utils::WelcomeModeLabel" name="demoTitleLabel">
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0">
++       <widget class="QComboBox" name="examplesComboBox">
++        <property name="enabled">
++         <bool>false</bool>
++        </property>
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <item>
++         <property name="text">
++          <string>Examples not installed</string>
++         </property>
++        </item>
++       </widget>
++      </item>
++      <item row="1" column="2">
++       <widget class="QToolButton" name="openExampleButton">
++        <property name="enabled">
++         <bool>false</bool>
++        </property>
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="text">
++         <string>Open</string>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="1">
++       <spacer name="horizontalSpacer">
++        <property name="orientation">
++         <enum>Qt::Horizontal</enum>
++        </property>
++        <property name="sizeType">
++         <enum>QSizePolicy::Fixed</enum>
++        </property>
++        <property name="sizeHint" stdset="0">
++         <size>
++          <width>6</width>
++          <height>6</height>
++         </size>
++        </property>
++       </spacer>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item row="1" column="1">
++    <widget class="QFrame" name="didyouKnowFrame">
++     <property name="sizePolicy">
++      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++       <horstretch>0</horstretch>
++       <verstretch>0</verstretch>
++      </sizepolicy>
++     </property>
++     <property name="maximumSize">
++      <size>
++       <width>400</width>
++       <height>16777215</height>
++      </size>
++     </property>
++     <property name="styleSheet">
++      <string/>
++     </property>
++     <layout class="QGridLayout" name="gridLayout_11">
++      <property name="rightMargin">
++       <number>9</number>
++      </property>
++      <item row="0" column="0">
++       <widget class="Core::Utils::WelcomeModeLabel" name="didYouKnowTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0" colspan="2">
++       <widget class="QTextBrowser" name="didYouKnowTextBrowser">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="frameShadow">
++         <enum>QFrame::Plain</enum>
++        </property>
++        <property name="verticalScrollBarPolicy">
++         <enum>Qt::ScrollBarAlwaysOff</enum>
++        </property>
++        <property name="horizontalScrollBarPolicy">
++         <enum>Qt::ScrollBarAlwaysOff</enum>
++        </property>
++        <property name="openExternalLinks">
++         <bool>true</bool>
++        </property>
++       </widget>
++      </item>
++      <item row="0" column="1">
++       <layout class="QGridLayout" name="gridLayout_10">
++        <property name="spacing">
++         <number>0</number>
++        </property>
++        <item row="0" column="0" colspan="2">
++         <spacer name="verticalSpacer_4">
++          <property name="orientation">
++           <enum>Qt::Vertical</enum>
++          </property>
++          <property name="sizeType">
++           <enum>QSizePolicy::Preferred</enum>
++          </property>
++          <property name="sizeHint" stdset="0">
++           <size>
++            <width>20</width>
++            <height>2</height>
++           </size>
++          </property>
++         </spacer>
++        </item>
++        <item row="1" column="0">
++         <widget class="QToolButton" name="prevTipBtn">
++          <property name="styleSheet">
++           <string notr="true">QToolButton{
++	border-right:solid 0 px;
++	height:16px;
++	width:12px;
++}
++</string>
++          </property>
++          <property name="text">
++           <string/>
++          </property>
++          <property name="icon">
++           <iconset resource="../welcome/welcome.qrc">
++            <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
++          </property>
++          <property name="arrowType">
++           <enum>Qt::NoArrow</enum>
++          </property>
++         </widget>
++        </item>
++        <item row="1" column="1">
++         <widget class="QToolButton" name="nextTipBtn">
++          <property name="styleSheet">
++           <string notr="true">QToolButton{
++	border-left:solid 0 px;
++	height:16px;
++	width:12px;
++}
++</string>
++          </property>
++          <property name="text">
++           <string/>
++          </property>
++          <property name="icon">
++           <iconset resource="../welcome/welcome.qrc">
++            <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
++          </property>
++          <property name="arrowType">
++           <enum>Qt::NoArrow</enum>
++          </property>
++         </widget>
++        </item>
++        <item row="2" column="0" colspan="2">
++         <spacer name="verticalSpacer_3">
++          <property name="orientation">
++           <enum>Qt::Vertical</enum>
++          </property>
++          <property name="sizeHint" stdset="0">
++           <size>
++            <width>20</width>
++            <height>2</height>
++           </size>
++          </property>
++         </spacer>
++        </item>
++       </layout>
++      </item>
++     </layout>
++    </widget>
++   </item>
++  </layout>
++ </widget>
++ <customwidgets>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeTreeWidget</class>
++   <extends>QTreeWidget</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeLabel</class>
++   <extends>QLabel</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++ </customwidgets>
++ <resources>
++  <include location="../welcome/welcome.qrc"/>
++ </resources>
++ <connections/>
++</ui>
+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
+index 6b69139..a85ffce 100644
+--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
+@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager
+ QT += network
+ include(../../qtcreatorplugin.pri)
+ include(qt4projectmanager_dependencies.pri)
+-
+ HEADERS += qt4projectmanagerplugin.h \
+     qt4projectmanager.h \
+     qt4project.h \
+@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \
+     qtversionmanager.h \
+     qtoptionspage.h \
+     qtuicodemodelsupport.h \
+-    externaleditors.h
++    externaleditors.h \
++    gettingstartedwelcomepagewidget.h \
++    gettingstartedwelcomepage.h
+ SOURCES += qt4projectmanagerplugin.cpp \
+     qt4projectmanager.cpp \
+     qt4project.cpp \
+@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \
+     qtversionmanager.cpp \
+     qtoptionspage.cpp \
+     qtuicodemodelsupport.cpp \
+-    externaleditors.cpp
++    externaleditors.cpp \
++    gettingstartedwelcomepagewidget.cpp \
++    gettingstartedwelcomepage.cpp
+ FORMS += makestep.ui \
+     qmakestep.ui \
+     qt4projectconfigwidget.ui \
+     embeddedpropertiespage.ui \
+     qtversionmanager.ui \
+-    showbuildlog.ui
++    showbuildlog.ui \
++    gettingstartedwelcomepagewidget.ui
+ RESOURCES += qt4projectmanager.qrc \
+     wizards/wizards.qrc
+-
+ include(../../shared/proparser/proparser.pri)
+ include(qt-s60/qt-s60.pri)
+ include(customwidgetwizard/customwidgetwizard.pri)
+-
+ DEFINES += QT_NO_CAST_TO_ASCII
+ OTHER_FILES += Qt4ProjectManager.pluginspec
+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
+index e1bd37d..9a49315 100644
+--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
+@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri)
+ include(../../plugins/cppeditor/cppeditor.pri)
+ include(../../plugins/help/help.pri)
+ include(../../plugins/designer/designer.pri)
+-include(../../plugins/welcome/welcome.pri)
+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+index f740c27..e2dde77 100644
+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+@@ -44,6 +44,8 @@
+ #include "qtversionmanager.h"
+ #include "qtoptionspage.h"
+ #include "externaleditors.h"
++#include "gettingstartedwelcomepage.h"
++#include "gettingstartedwelcomepagewidget.h"
+ 
+ #ifdef QTCREATOR_WITH_S60
+ #include "qt-s60/s60manager.h"
+@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
+     delete m_proFileEditorFactory;
+     removeObject(m_qt4ProjectManager);
+     delete m_qt4ProjectManager;
++    removeObject(m_welcomePage);
++    delete m_welcomePage;
+ }
+ /*
+ static Core::Command *createSeparator(Core::ActionManager *am,
+@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
+     m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance();
+     Core::ActionManager *am = core->actionManager();
+ 
+-    addAutoReleasedObject(new QtVersionManager());
++    QtVersionManager *mgr = new QtVersionManager();
++    addAutoReleasedObject(mgr);
+     addAutoReleasedObject(new QtOptionsPage());
+ 
++    m_welcomePage = new GettingStartedWelcomePage;
++    addObject(m_welcomePage);
++    GettingStartedWelcomePageWidget *gswp =
++            static_cast<GettingStartedWelcomePageWidget*>(m_welcomePage->page());
++    connect(mgr, SIGNAL(updateExamples(QString,QString,QString)),
++            gswp, SLOT(updateExamples(QString,QString,QString)));
+ 
+     //create and register objects
+     m_qt4ProjectManager = new Qt4Manager(this);
+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+index 18781bc..5e3e016 100644
+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+@@ -49,6 +49,7 @@ class MakeStepFactory;
+ class GccParserFactory;
+ class MsvcParserFactory;
+ class EmbeddedPropertiesPage;
++class GettingStartedWelcomePage;
+ 
+ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin
+ {
+@@ -81,6 +82,7 @@ private:
+ 
+     QAction *m_runQMakeAction;
+     QAction *m_runQMakeActionContextMenu;
++    GettingStartedWelcomePage *m_welcomePage;
+ };
+ 
+ } // namespace Internal
+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
+index aa65520..6bce576 100644
+--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
+@@ -42,7 +42,6 @@
+ #include <coreplugin/coreconstants.h>
+ #include <coreplugin/icore.h>
+ #include <coreplugin/modemanager.h>
+-#include <welcome/welcomemode.h>
+ #include <extensionsystem/pluginmanager.h>
+ #include <help/helpplugin.h>
+ #include <utils/qtcassert.h>
+@@ -51,6 +50,7 @@
+ #include <QtCore/QProcess>
+ #include <QtCore/QSettings>
+ #include <QtCore/QTime>
++#include <QtCore/QTimer>
+ #include <QtGui/QApplication>
+ #include <QtGui/QDesktopServices>
+ 
+@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager()
+     writeVersionsIntoSettings();
+ 
+     updateDocumentation();
+-    updateExamples();
++    // cannot call from ctor, needs to get connected extenernally first
++    QTimer::singleShot(0, this, SLOT(updateExamples()));
+ }
+ 
+ QtVersionManager::~QtVersionManager()
+@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples()
+         if (version->hasDemos())
+             demosPath = version->demosPath();
+         if (!examplesPath.isEmpty() && !demosPath.isEmpty()) {
+-            if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
+-                    (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME)))
+-                welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath());
++            emit updateExamples(examplesPath, demosPath, version->sourcePath());
+             return;
+         }
+     }
+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
+index 0f2144c..fb7a33b 100644
+--- a/src/plugins/qt4projectmanager/qtversionmanager.h
++++ b/src/plugins/qt4projectmanager/qtversionmanager.h
+@@ -201,6 +201,10 @@ public:
+ signals:
+     void defaultQtVersionChanged();
+     void qtVersionsChanged();
++    void updateExamples(QString, QString, QString);
++
++private slots:
++    void updateExamples();
+ private:
+     static QString findQMakeLine(const QString &directory);
+     static QString trimLine(const QString line);
+@@ -215,7 +219,6 @@ private:
+     void addNewVersionsFromInstaller();
+     void updateSystemVersion();
+     void updateDocumentation();
+-    void updateExamples();
+ 
+     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
+     void updateUniqueIdToIndexMap();
+diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp
+new file mode 100644
+index 0000000..0337fb1
+--- /dev/null
++++ b/src/plugins/welcome/communitywelcomepage.cpp
+@@ -0,0 +1,48 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "communitywelcomepage.h"
++#include "communitywelcomepagewidget.h"
++
++
++namespace Welcome {
++namespace Internal {
++
++CommunityWelcomePage::CommunityWelcomePage()
++        : m_page(new CommunityWelcomePageWidget)
++{
++}
++
++QWidget* CommunityWelcomePage::page()
++{
++    return m_page;
++}
++
++} // namespace Internal
++} // namespace Welcome
+diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h
+new file mode 100644
+index 0000000..b6c047c
+--- /dev/null
++++ b/src/plugins/welcome/communitywelcomepage.h
+@@ -0,0 +1,60 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef COMMUNITYWELCOMEPAGE_H
++#define COMMUNITYWELCOMEPAGE_H
++
++#include "welcome_global.h"
++
++#include <extensionsystem/iwelcomepage.h>
++
++namespace Welcome {
++namespace Internal {
++
++class CommunityWelcomePageWidget;
++
++class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage
++{
++    Q_OBJECT
++public:
++    CommunityWelcomePage();
++
++    QWidget *page();
++    QString title() const { return tr("Community"); }
++    int priority() const { return 30; }
++
++private:
++    CommunityWelcomePageWidget *m_page;
++
++};
++
++} // namespace Internal
++} // namespace Welcome
++
++#endif // COMMUNITYWELCOMEPAGE_H
+diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp
+new file mode 100644
+index 0000000..40c72fe
+--- /dev/null
++++ b/src/plugins/welcome/communitywelcomepagewidget.cpp
+@@ -0,0 +1,79 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#include "communitywelcomepagewidget.h"
++#include "ui_communitywelcomepagewidget.h"
++
++#include "rssfetcher.h"
++
++#include <QtGui/QDesktopServices>
++
++namespace Welcome {
++namespace Internal {
++
++CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) :
++    QWidget(parent),
++    ui(new Ui::CommunityWelcomePageWidget),
++    m_rssFetcher(new RSSFetcher(7))
++{
++    ui->setupUi(this);
++    ui->labsTitleLabel->setStyledText(tr("News From the Qt Labs"));
++    ui->sitesTitleLabel->setStyledText(tr("Qt Websites"));
++
++    connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++    connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
++
++    connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
++        ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
++    //: Add localized feed here only if one exists
++    m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
++
++    ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
++    ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
++    ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
++    ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
++    ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
++}
++
++CommunityWelcomePageWidget::~CommunityWelcomePageWidget()
++{
++    delete m_rssFetcher;
++    delete ui;
++}
++
++
++void CommunityWelcomePageWidget::slotUrlClicked(const QString &data)
++{
++    QDesktopServices::openUrl(QUrl(data));
++}
++
++
++
++} // namespace Internal
++} // namespace Welcome
+diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h
+new file mode 100644
+index 0000000..8da68fe
+--- /dev/null
++++ b/src/plugins/welcome/communitywelcomepagewidget.h
+@@ -0,0 +1,64 @@
++/**************************************************************************
++**
++** This file is part of Qt Creator
++**
++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
++**
++** Contact: Nokia Corporation (qt-info@nokia.com)
++**
++** Commercial Usage
++**
++** Licensees holding valid Qt Commercial licenses may use this file in
++** accordance with the Qt Commercial License Agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Nokia.
++**
++** GNU Lesser General Public License Usage
++**
++** Alternatively, 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.
++**
++** If you are unsure which license is appropriate for your use, please
++** contact the sales department at http://www.qtsoftware.com/contact.
++**
++**************************************************************************/
++
++#ifndef COMMUNITYWELCOMEPAGEWIDGET_H
++#define COMMUNITYWELCOMEPAGEWIDGET_H
++
++#include <QWidget>
++
++namespace Welcome {
++namespace Internal {
++
++class RSSFetcher;
++
++namespace Ui {
++    class CommunityWelcomePageWidget;
++}
++
++class CommunityWelcomePageWidget : public QWidget
++{
++    Q_OBJECT
++
++public:
++    CommunityWelcomePageWidget(QWidget *parent = 0);
++    ~CommunityWelcomePageWidget();
++
++private slots:
++    void slotUrlClicked(const QString &data);
++
++
++private:
++    RSSFetcher *m_rssFetcher;
++    Ui::CommunityWelcomePageWidget *ui;
++};
++
++
++} // namespace Internal
++} // namespace Welcome
++#endif // COMMUNITYWELCOMEPAGEWIDGET_H
+diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui
+new file mode 100644
+index 0000000..7d05f30
+--- /dev/null
++++ b/src/plugins/welcome/communitywelcomepagewidget.ui
+@@ -0,0 +1,195 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<ui version="4.0">
++ <class>Welcome::Internal::CommunityWelcomePageWidget</class>
++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget">
++  <property name="geometry">
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>667</width>
++    <height>352</height>
++   </rect>
++  </property>
++  <property name="windowTitle">
++   <string>Form</string>
++  </property>
++  <layout class="QHBoxLayout" name="horizontalLayout">
++   <item>
++    <widget class="QFrame" name="labsFrame">
++     <property name="frameShape">
++      <enum>QFrame::NoFrame</enum>
++     </property>
++     <property name="frameShadow">
++      <enum>QFrame::Plain</enum>
++     </property>
++     <layout class="QVBoxLayout" name="verticalLayout_2">
++      <item>
++       <widget class="Core::Utils::WelcomeModeLabel" name="labsTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item>
++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="minimumSize">
++         <size>
++          <width>340</width>
++          <height>0</height>
++         </size>
++        </property>
++        <property name="focusPolicy">
++         <enum>Qt::NoFocus</enum>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="selectionMode">
++         <enum>QAbstractItemView::NoSelection</enum>
++        </property>
++        <property name="verticalScrollMode">
++         <enum>QAbstractItemView::ScrollPerPixel</enum>
++        </property>
++        <property name="rootIsDecorated">
++         <bool>false</bool>
++        </property>
++        <property name="uniformRowHeights">
++         <bool>true</bool>
++        </property>
++        <property name="allColumnsShowFocus">
++         <bool>true</bool>
++        </property>
++        <property name="columnCount">
++         <number>2</number>
++        </property>
++        <attribute name="headerVisible">
++         <bool>false</bool>
++        </attribute>
++        <attribute name="headerDefaultSectionSize">
++         <number>24</number>
++        </attribute>
++        <attribute name="headerMinimumSectionSize">
++         <number>0</number>
++        </attribute>
++        <column>
++         <property name="text">
++          <string notr="true">1</string>
++         </property>
++        </column>
++        <column>
++         <property name="text">
++          <string notr="true">2</string>
++         </property>
++        </column>
++       </widget>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item>
++    <widget class="QFrame" name="sitesFrame">
++     <property name="frameShape">
++      <enum>QFrame::NoFrame</enum>
++     </property>
++     <property name="frameShadow">
++      <enum>QFrame::Plain</enum>
++     </property>
++     <layout class="QVBoxLayout" name="verticalLayout_3">
++      <item>
++       <widget class="Core::Utils::WelcomeModeLabel" name="sitesTitleLabel">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="alignment">
++         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++        </property>
++       </widget>
++      </item>
++      <item>
++       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
++        <property name="sizePolicy">
++         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="focusPolicy">
++         <enum>Qt::NoFocus</enum>
++        </property>
++        <property name="frameShape">
++         <enum>QFrame::NoFrame</enum>
++        </property>
++        <property name="selectionMode">
++         <enum>QAbstractItemView::NoSelection</enum>
++        </property>
++        <property name="verticalScrollMode">
++         <enum>QAbstractItemView::ScrollPerPixel</enum>
++        </property>
++        <property name="rootIsDecorated">
++         <bool>false</bool>
++        </property>
++        <property name="uniformRowHeights">
++         <bool>true</bool>
++        </property>
++        <property name="allColumnsShowFocus">
++         <bool>true</bool>
++        </property>
++        <property name="columnCount">
++         <number>2</number>
++        </property>
++        <attribute name="headerVisible">
++         <bool>false</bool>
++        </attribute>
++        <attribute name="headerDefaultSectionSize">
++         <number>24</number>
++        </attribute>
++        <attribute name="headerMinimumSectionSize">
++         <number>0</number>
++        </attribute>
++        <column>
++         <property name="text">
++          <string notr="true">1</string>
++         </property>
++        </column>
++        <column>
++         <property name="text">
++          <string notr="true">2</string>
++         </property>
++        </column>
++       </widget>
++      </item>
++     </layout>
++    </widget>
++   </item>
++  </layout>
++ </widget>
++ <customwidgets>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeTreeWidget</class>
++   <extends>QTreeWidget</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++  <customwidget>
++   <class>Core::Utils::WelcomeModeLabel</class>
++   <extends>QLabel</extends>
++   <header>utils/welcomemodetreewidget.h</header>
++  </customwidget>
++ </customwidgets>
++ <resources/>
++ <connections/>
++</ui>
+diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp
+index f5fc756..7254c2d 100644
+--- a/src/plugins/welcome/rssfetcher.cpp
++++ b/src/plugins/welcome/rssfetcher.cpp
+@@ -43,7 +43,7 @@
+ #include <sys/utsname.h>
+ #endif
+ 
+-using namespace Welcome;
++using namespace Welcome::Internal;
+ 
+ static const QString getOsString()
+ {
+diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h
+index 9267fdb..54ef87d 100644
+--- a/src/plugins/welcome/rssfetcher.h
++++ b/src/plugins/welcome/rssfetcher.h
+@@ -35,6 +35,7 @@
+ #include <QtNetwork/QHttp>
+ 
+ namespace Welcome {
++namespace Internal {
+ 
+ class RSSFetcher : public QObject
+ {
+@@ -69,6 +70,7 @@ private:
+ };
+ 
+ } // namespace Welcome
++} // namespace Internal
+ 
+ #endif // RSSFETCHER_H
+ 
+diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro
+index 11d48e8..0ad5a50 100644
+--- a/src/plugins/welcome/welcome.pro
++++ b/src/plugins/welcome/welcome.pro
+@@ -5,11 +5,17 @@ include(../../qtcreatorplugin.pri)
+ include(../../plugins/coreplugin/coreplugin.pri)
+ HEADERS += welcomeplugin.h \
+     welcomemode.h \
+-    rssfetcher.h
++    rssfetcher.h \
++    communitywelcomepagewidget.h \
++    communitywelcomepage.h
+ SOURCES += welcomeplugin.cpp \
+     welcomemode.cpp \
+-    rssfetcher.cpp
+-FORMS += welcomemode.ui
++    rssfetcher.cpp \
++    communitywelcomepagewidget.cpp \
++    communitywelcomepage.cpp \
++    communitywelcomepage.cpp
++FORMS += welcomemode.ui \
++    communitywelcomepagewidget.ui
+ RESOURCES += welcome.qrc
+ DEFINES += WELCOME_LIBRARY
+ OTHER_FILES += Welcome.pluginspec
+diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp
+index bc6a876..72dbb10 100644
+--- a/src/plugins/welcome/welcomemode.cpp
++++ b/src/plugins/welcome/welcomemode.cpp
+@@ -28,11 +28,10 @@
+ **************************************************************************/
+ 
+ #include "welcomemode.h"
+-#include "rssfetcher.h"
++#include <extensionsystem/pluginmanager.h>
++#include <extensionsystem/iwelcomepage.h>
+ 
+ #include <coreplugin/icore.h>
+-#include <coreplugin/dialogs/iwizard.h>
+-
+ #include <coreplugin/coreconstants.h>
+ #include <coreplugin/uniqueidmanager.h>
+ #include <coreplugin/modemanager.h>
+@@ -41,22 +40,22 @@
+ #include <utils/styledbar.h>
+ #include <utils/welcomemodetreewidget.h>
+ 
+-#include <QtGui/QDesktopServices>
+ #include <QtGui/QMouseEvent>
+ #include <QtGui/QScrollArea>
+ #include <QtGui/QButtonGroup>
++#include <QtGui/QDesktopServices>
++#include <QtGui/QToolButton>
+ 
+-#include <QtCore/QDateTime>
+-#include <QtCore/QDir>
+-#include <QtCore/QFileInfo>
+-#include <QtCore/QDebug>
+-#include <QtCore/QUrl>
+ #include <QtCore/QSettings>
++#include <QtCore/QUrl>
++#include <QtCore/QDebug>
+ 
+ #include <cstdlib>
+ 
+ #include "ui_welcomemode.h"
+ 
++using namespace ExtensionSystem;
++
+ namespace Welcome {
+ 
+ struct WelcomeModePrivate
+@@ -66,10 +65,9 @@ struct WelcomeModePrivate
+     QScrollArea *m_scrollArea;
+     QWidget *m_widget;
+     QWidget *m_welcomePage;
+-    QButtonGroup *btnGrp;
+-    Ui::WelcomePage ui;
+-    RSSFetcher *rssFetcher;
+-    WelcomeMode::WelcomePageData lastData;
++    QMap<QAbstractButton*, QWidget*> buttonMap;
++    QHBoxLayout * buttonLayout;
++    Ui::WelcomeMode ui;
+     int currentTip;
+ };
+ 
+@@ -77,46 +75,6 @@ WelcomeModePrivate::WelcomeModePrivate()
+ {
+ }
+ 
+-// ---  WelcomePageData
+-
+-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const
+-{
+-    return previousSession == rhs.previousSession
+-        && activeSession   == rhs.activeSession
+-        && sessionList     == rhs.sessionList
+-        && projectList     == rhs.projectList;
+-}
+-
+-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const
+-{
+-    return previousSession != rhs.previousSession
+-        || activeSession   != rhs.activeSession
+-        || sessionList     != rhs.sessionList
+-        || projectList     != rhs.projectList;
+-}
+-
+-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d)
+-{
+-    dgb.nospace() << "PreviousSession=" << d.previousSession
+-        << " activeSession=" << d.activeSession
+-        << " sessionList=" << d.sessionList
+-        << " projectList=" << d.projectList;
+-    return dgb;
+-}
+-
+-// Format a title + ruler for title labels
+-static inline QString titleLabel(const QString &text)
+-{
+-    QString  rc = QLatin1String(
+-    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+-    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+-    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+-    "<span style=\" font-size:x-large; color:#555555;\">");
+-    rc += text;
+-    rc += QLatin1String("</span></p><hr/></body></html>");
+-    return rc;
+-}
+-
+ // ---  WelcomeMode
+ WelcomeMode::WelcomeMode() :
+     m_d(new WelcomeModePrivate)
+@@ -126,22 +84,8 @@ WelcomeMode::WelcomeMode() :
+     l->setMargin(0);
+     l->setSpacing(0);
+     l->addWidget(new Core::Utils::StyledBar(m_d->m_widget));
+-    m_d->rssFetcher = new RSSFetcher(7, this);
+     m_d->m_welcomePage = new QWidget(m_d->m_widget);
+     m_d->ui.setupUi(m_d->m_welcomePage);
+-    m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project")));
+-    m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session")));
+-    m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
+-    m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
+-    m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
+-    m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
+-    m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
+-    m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false);
+-    m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false);
+-    m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false);
+-    m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false);
+-    m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false);
+-    m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
+     m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect);
+     m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);
+     l->addWidget(m_d->m_welcomePage);
+@@ -151,71 +95,17 @@ WelcomeMode::WelcomeMode() :
+     m_d->m_scrollArea->setWidget(m_d->m_widget);
+     m_d->m_scrollArea->setWidgetResizable(true);
+ 
+-    updateWelcomePage(WelcomePageData());
+-
+-    m_d->btnGrp = new QButtonGroup(this);
+-    m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0);
+-    m_d->btnGrp->addButton(m_d->ui.developSectButton, 1);
+-    m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2);
+-
+-    connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int)));
++    PluginManager *pluginManager = PluginManager::instance();
++    connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject)));
+ 
+     connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback()));
+-    connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
+-    connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
+-    connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
+-    connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
+-    connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+-    connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+-    connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&)));
+-    connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
+-    connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
+-
+-    connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
+-        m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
+-
+-    //: Add localized feed here only if one exists
+-    m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
+-
+-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
+-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
+-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
+-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
+-    m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
+-
+-    m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
+-                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+-    m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"),
+-                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
+-    m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"),
+-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
+-    m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"),
+-                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
+-    m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"),
+-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
+-
+-    srand(QDateTime::currentDateTime().toTime_t());
+-    QStringList tips = tipsOfTheDay();
+-    m_d->currentTip = rand()%tips.count();
+-
+-    QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document();
+-    doc->setDefaultStyleSheet("a:link {color:black;}");
+-    m_d->ui.didYouKnowTextBrowser->setDocument(doc);
+-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
+-
+-    connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
+-    connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
+ 
+-    QSettings *settings = Core::ICore::instance()->settings();
+-    int id = settings->value("General/WelcomeTab", 0).toInt();
+-    m_d->btnGrp->button(id)->setChecked(true);
+-    m_d->ui.stackedWidget->setCurrentIndex(id);
+ }
+ 
+ WelcomeMode::~WelcomeMode()
+ {
+     QSettings *settings = Core::ICore::instance()->settings();
+-    settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId());
++    settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex());
+     delete m_d->m_widget;
+     delete m_d;
+ }
+@@ -252,150 +142,78 @@ QList<int> WelcomeMode::context() const
+     return contexts;
+ }
+ 
+-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData)
+-{
+-    // Update only if data are modified
+-    if (welcomePageData == m_d->lastData)
+-        return;
+-    m_d->lastData = welcomePageData;
+-
+-    m_d->m_widget->setUpdatesEnabled(false);
+-    m_d->ui.sessTreeWidget->clear();
+-    m_d->ui.projTreeWidget->clear();
+-
+-    if (welcomePageData.sessionList.count() > 0) {
+-        foreach (const QString &s, welcomePageData.sessionList) {
+-            QString str = s;
+-            if (s == welcomePageData.previousSession)
+-                str = tr("%1 (last session)").arg(s);
+-            m_d->ui.sessTreeWidget->addItem(str, s);
+-        }
+-        m_d->ui.sessTreeWidget->updateGeometry();
+-        m_d->ui.sessTreeWidget->show();
+-    } else {
+-        m_d->ui.sessTreeWidget->hide();
+-    }
+-
+-    typedef QPair<QString, QString> QStringPair;
+-    if (welcomePageData.projectList.count() > 0) {
+-        foreach (const QStringPair &it, welcomePageData.projectList) {
+-            QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first);
+-            const QFileInfo fi(it.first);
+-            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
+-        }
+-    } else {
+-        m_d->ui.projTreeWidget->hide();
+-    }
+-    m_d->ui.projTreeWidget->updateGeometry();
+-    m_d->m_widget->setUpdatesEnabled(true);
+-}
+-
+-void WelcomeMode::activateEditMode()
+-{
+-    Core::ModeManager *modeManager = Core::ModeManager::instance();
+-    if (modeManager->currentMode() == this)
+-        modeManager->activateMode(Core::Constants::MODE_EDIT);
+-}
+-
+-void WelcomeMode::slotSessionClicked(const QString &data)
+-{
+-    emit requestSession(data);
+-    activateEditMode();
+-}
+-
+-void WelcomeMode::slotProjectClicked(const QString &data)
++bool sortFunction(IWelcomePage * a, IWelcomePage *b)
+ {
+-    emit requestProject(data);
+-    activateEditMode();
++    return a->priority() < b->priority();
+ }
+ 
+-void WelcomeMode::slotUrlClicked(const QString &data)
++void WelcomeMode::initPlugins()
+ {
+-    QDesktopServices::openUrl(QUrl(data));
+-}
+-
+-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+-{
+-    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
+-    if (!QFile::exists(demoxml)) {
+-        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
+-        if (!QFile::exists(demoxml))
+-            return;
++    m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame);
++    m_d->buttonLayout->setMargin(0);
++    m_d->buttonLayout->setSpacing(0);
++    delete m_d->ui.stackedWidget->currentWidget();
++    QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
++    qSort(plugins.begin(), plugins.end(), &sortFunction);
++    foreach (IWelcomePage* plugin, plugins) {
++        QToolButton * btn = new QToolButton;
++        btn->setCheckable(true);
++        btn->setText(plugin->title());
++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
++        btn->setAutoExclusive(true);
++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
++        m_d->ui.stackedWidget->addWidget(plugin->page());
++        m_d->buttonLayout->addWidget(btn);
++        m_d->buttonMap.insert(btn, plugin->page());
+     }
++    m_d->buttonLayout->addSpacing(5);
+ 
+-    QFile description(demoxml);
+-    if (!description.open(QFile::ReadOnly))
+-        return;
+-
+-    m_d->ui.examplesComboBox->clear();
+-    m_d->ui.examplesComboBox->setEnabled(true);
+-
+-    m_d->ui.examplesComboBox->addItem(tr("Choose an example..."));
+-    QFont f = widget()->font();
+-    f.setItalic(true);
+-    m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole);
+-    f.setItalic(false);
+-    bool inExamples = false;
+-    QString dirName;
+-    QXmlStreamReader reader(&description);
+-    while (!reader.atEnd()) {
+-        switch (reader.readNext()) {
+-            case QXmlStreamReader::StartElement:
+-            if (reader.name() == "category") {
+-                QString name = reader.attributes().value(QLatin1String("name")).toString();
+-                if (name.contains("tutorial"))
+-                    break;
+-                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
+-                m_d->ui.examplesComboBox->addItem(name);
+-                f.setBold(true);
+-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole);
+-                f.setBold(false);
+-                inExamples = true;
+-            }
+-            if (inExamples && reader.name() == "example") {
+-                QString name = reader.attributes().value(QLatin1String("name")).toString();
+-                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
+-                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
+-                QString fileName = examplePath + relativeProPath;
+-                if (!QFile::exists(fileName))
+-                    fileName = sourcePath + "/examples" + relativeProPath;
+-                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
+-
+-                m_d->ui.examplesComboBox->addItem("  " + name, fileName);
+-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
++    QSettings *settings = Core::ICore::instance()->settings();
++    int tabId = settings->value("General/WelcomeTab", 0).toInt();
++
++    int pluginCount = m_d->ui.stackedWidget->count();
++    if (tabId < pluginCount) {
++        m_d->ui.stackedWidget->setCurrentIndex(tabId);
++        QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap);
++        while (it.hasNext())
++            if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) {
++                it.key()->setChecked(true);
++                break;
+             }
+-            break;
+-            case QXmlStreamReader::EndElement:
+-            if (reader.name() == "category")
+-                inExamples = false;
+-            break;
+-            default:
+-            break;
+-        }
+     }
++
+ }
+ 
+-void WelcomeMode::slotEnableExampleButton(int index)
+-{
+-    QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString();
+-    m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty());
++void WelcomeMode::welcomePluginAdded(QObject *obj)
++{
++    if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj))
++    {
++        QToolButton * btn = new QToolButton;
++        btn->setCheckable(true);
++        btn->setAutoExclusive(true);
++        btn->setText(plugin->title());
++        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
++        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
++        int insertPos = 0;
++        QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
++        foreach (IWelcomePage* p, plugins) {
++            if (plugin->priority() < p->priority())
++                insertPos++;
++            else
++                break;
++        }
++        m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page());
++        m_d->buttonMap.insert(btn, plugin->page());
++        m_d->buttonLayout->insertWidget(insertPos, btn);
++    }
+ }
+ 
+-void WelcomeMode::slotOpenExample()
++void WelcomeMode::showClickedPage()
+ {
+-    QComboBox *box = m_d->ui.examplesComboBox;
+-    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
+-    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
+-    QStringList files;
+-    QFileInfo fi(proFile);
+-    QString tryFile = fi.path() + "/main.cpp";
+-    files << proFile;
+-    if(!QFile::exists(tryFile))
+-        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
+-    if(QFile::exists(tryFile))
+-        files << tryFile;
+-    Core::ICore::instance()->openFiles(files);
+-    emit openContextHelpPage(helpFile);
++    QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender());
++    QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn);
++    if (it.value())
++        m_d->ui.stackedWidget->setCurrentWidget(it.value());
+ }
+ 
+ void WelcomeMode::slotFeedback()
+@@ -404,71 +222,5 @@ void WelcomeMode::slotFeedback()
+             "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view")));
+ }
+ 
+-void WelcomeMode::slotCreateNewProject()
+-{
+-    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
+-                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
+-}
+-
+-void WelcomeMode::slotNextTip()
+-{
+-    QStringList tips = tipsOfTheDay();
+-    m_d->currentTip = ((m_d->currentTip+1)%tips.count());
+-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
+-}
+-
+-void WelcomeMode::slotPrevTip()
+-{
+-    QStringList tips = tipsOfTheDay();
+-    m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count();
+-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
+-}
+-
+-QStringList WelcomeMode::tipsOfTheDay()
+-{
+-    static QStringList tips;
+-    if (tips.isEmpty()) {
+-        QString altShortcut =
+-#ifdef Q_WS_MAC
+-            tr("Cmd", "Shortcut key");
+-#else
+-            tr("Alt", "Shortcut key");
+-#endif
+-        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
+-                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
+-                       "<li></li><li>6 - Output</li></ul>"));
+-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+-        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
+-        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
+-                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));                       
+-        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
+-                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
+-                        "and code completion."));
+-        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
+-                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
+-        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
+-        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
+-        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
+-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+-        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
+-                       "on the buttons at the window bottom:"
+-                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
+-                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
+-        tips.append(tr("You can quickly search methods, classes, help and more using the "
+-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
+-        tips.append(tr("You can add custom build steps in the "
+-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
+-        tips.append(tr("Within a session, you can add "
+-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
+-        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
+-        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
+-                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
+-                       "target in the combo box."));
+-        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
+-                       "revision control systems</a> such as Subversion, Perforce and Git."));
+-        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
+-    }
+-    return tips;
+-}
+ 
+ } // namespace Welcome
+diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h
+index 0555ce6..1576d24 100644
+--- a/src/plugins/welcome/welcomemode.h
++++ b/src/plugins/welcome/welcomemode.h
+@@ -54,18 +54,6 @@ public:
+     WelcomeMode();
+     ~WelcomeMode();
+ 
+-    struct WelcomePageData{
+-        bool operator==(const WelcomePageData &rhs) const;
+-        bool operator!=(const WelcomePageData &rhs) const;
+-
+-        QString previousSession;
+-        QString activeSession;
+-        QStringList sessionList;
+-        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
+-    };
+-
+-    void updateWelcomePage(const WelcomePageData &welcomePageData);
+-
+     // IMode
+     QString name() const;
+     QIcon icon() const;
+@@ -75,31 +63,14 @@ public:
+     QList<int> context() const;
+     void activated();
+     QString contextHelpId() const { return QLatin1String("Qt Creator"); }
+-
+-    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
+-
+-signals:
+-    void requestProject(const QString &project);
+-    void requestSession(const QString &session);
+-    void openHelpPage(const QString& url);
+-    void openContextHelpPage(const QString& url);
+-    void manageSessions();
++    void initPlugins();
+ 
+ private slots:
+     void slotFeedback();
+-    void slotSessionClicked(const QString &data);
+-    void slotProjectClicked(const QString &data);
+-    void slotUrlClicked(const QString &data);
+-    void slotEnableExampleButton(int);
+-    void slotOpenExample();
+-    void slotCreateNewProject();
+-    void slotNextTip();
+-    void slotPrevTip();
++    void welcomePluginAdded(QObject*);
++    void showClickedPage();
+ 
+ private:
+-    void activateEditMode();
+-    QStringList tipsOfTheDay();
+-
+     WelcomeModePrivate *m_d;
+ };
+ 
+diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui
+index c70aabb..e1c18bd 100644
+--- a/src/plugins/welcome/welcomemode.ui
++++ b/src/plugins/welcome/welcomemode.ui
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <ui version="4.0">
+- <class>Welcome::WelcomePage</class>
+- <widget class="QWidget" name="Core::Utils::WelcomePage">
++ <class>Welcome::WelcomeMode</class>
++ <widget class="QWidget" name="Welcome::WelcomeMode">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
++           <property name="minimumSize">
++            <size>
++             <width>0</width>
++             <height>10</height>
++            </size>
++           </property>
+            <property name="font">
+             <font>
+              <weight>50</weight>
+@@ -238,129 +244,6 @@ QToolButton:pressed {
+            <property name="frameShadow">
+             <enum>QFrame::Plain</enum>
+            </property>
+-           <layout class="QGridLayout" name="gridLayout_2">
+-            <property name="margin">
+-             <number>0</number>
+-            </property>
+-            <property name="spacing">
+-             <number>0</number>
+-            </property>
+-            <item row="0" column="0">
+-             <widget class="QToolButton" name="gettingStartedSectButton">
+-              <property name="enabled">
+-               <bool>true</bool>
+-              </property>
+-              <property name="sizePolicy">
+-               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="minimumSize">
+-               <size>
+-                <width>0</width>
+-                <height>0</height>
+-               </size>
+-              </property>
+-              <property name="font">
+-               <font>
+-                <pointsize>-1</pointsize>
+-               </font>
+-              </property>
+-              <property name="styleSheet">
+-               <string notr="true"/>
+-              </property>
+-              <property name="text">
+-               <string>Getting Started</string>
+-              </property>
+-              <property name="checkable">
+-               <bool>true</bool>
+-              </property>
+-              <property name="checked">
+-               <bool>true</bool>
+-              </property>
+-              <property name="autoExclusive">
+-               <bool>false</bool>
+-              </property>
+-             </widget>
+-            </item>
+-            <item row="0" column="1">
+-             <widget class="QToolButton" name="developSectButton">
+-              <property name="sizePolicy">
+-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="minimumSize">
+-               <size>
+-                <width>0</width>
+-                <height>0</height>
+-               </size>
+-              </property>
+-              <property name="font">
+-               <font>
+-                <pointsize>-1</pointsize>
+-               </font>
+-              </property>
+-              <property name="text">
+-               <string>Develop</string>
+-              </property>
+-              <property name="checkable">
+-               <bool>true</bool>
+-              </property>
+-              <property name="autoExclusive">
+-               <bool>false</bool>
+-              </property>
+-             </widget>
+-            </item>
+-            <item row="0" column="2">
+-             <widget class="QToolButton" name="communitySectButton">
+-              <property name="sizePolicy">
+-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="minimumSize">
+-               <size>
+-                <width>0</width>
+-                <height>0</height>
+-               </size>
+-              </property>
+-              <property name="font">
+-               <font>
+-                <pointsize>-1</pointsize>
+-               </font>
+-              </property>
+-              <property name="styleSheet">
+-               <string notr="true"/>
+-              </property>
+-              <property name="text">
+-               <string>Community</string>
+-              </property>
+-              <property name="checkable">
+-               <bool>true</bool>
+-              </property>
+-             </widget>
+-            </item>
+-            <item row="0" column="3">
+-             <spacer name="horizontalSpacer_2">
+-              <property name="orientation">
+-               <enum>Qt::Horizontal</enum>
+-              </property>
+-              <property name="sizeType">
+-               <enum>QSizePolicy::Fixed</enum>
+-              </property>
+-              <property name="sizeHint" stdset="0">
+-               <size>
+-                <width>5</width>
+-                <height>20</height>
+-               </size>
+-              </property>
+-             </spacer>
+-            </item>
+-           </layout>
+           </widget>
+          </item>
+          <item>
+@@ -368,575 +251,7 @@ QToolButton:pressed {
+            <property name="currentIndex">
+             <number>0</number>
+            </property>
+-           <widget class="QWidget" name="gettingStartedPage">
+-            <layout class="QGridLayout" name="gridLayout_9">
+-             <property name="leftMargin">
+-              <number>18</number>
+-             </property>
+-             <property name="topMargin">
+-              <number>18</number>
+-             </property>
+-             <property name="rightMargin">
+-              <number>12</number>
+-             </property>
+-             <property name="bottomMargin">
+-              <number>18</number>
+-             </property>
+-             <property name="spacing">
+-              <number>24</number>
+-             </property>
+-             <item row="0" column="0" rowspan="2">
+-              <widget class="QFrame" name="tutorialsFrame">
+-               <property name="sizePolicy">
+-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                 <horstretch>0</horstretch>
+-                 <verstretch>0</verstretch>
+-                </sizepolicy>
+-               </property>
+-               <property name="maximumSize">
+-                <size>
+-                 <width>400</width>
+-                 <height>16777215</height>
+-                </size>
+-               </property>
+-               <property name="styleSheet">
+-                <string/>
+-               </property>
+-               <layout class="QGridLayout" name="gridLayout_6">
+-                <item row="0" column="0">
+-                 <widget class="QLabel" name="tutorialsTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="0">
+-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="focusPolicy">
+-                   <enum>Qt::NoFocus</enum>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="selectionMode">
+-                   <enum>QAbstractItemView::NoSelection</enum>
+-                  </property>
+-                  <property name="verticalScrollMode">
+-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
+-                  </property>
+-                  <property name="rootIsDecorated">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="uniformRowHeights">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="allColumnsShowFocus">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="columnCount">
+-                   <number>2</number>
+-                  </property>
+-                  <attribute name="headerVisible">
+-                   <bool>false</bool>
+-                  </attribute>
+-                  <attribute name="headerDefaultSectionSize">
+-                   <number>24</number>
+-                  </attribute>
+-                  <attribute name="headerMinimumSectionSize">
+-                   <number>0</number>
+-                  </attribute>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">1</string>
+-                   </property>
+-                  </column>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">2</string>
+-                   </property>
+-                  </column>
+-                 </widget>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-             <item row="0" column="1">
+-              <widget class="QFrame" name="demosExamplesFrame">
+-               <property name="sizePolicy">
+-                <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+-                 <horstretch>0</horstretch>
+-                 <verstretch>0</verstretch>
+-                </sizepolicy>
+-               </property>
+-               <property name="maximumSize">
+-                <size>
+-                 <width>400</width>
+-                 <height>16777215</height>
+-                </size>
+-               </property>
+-               <property name="styleSheet">
+-                <string/>
+-               </property>
+-               <layout class="QGridLayout" name="gridLayout_8">
+-                <property name="rightMargin">
+-                 <number>8</number>
+-                </property>
+-                <property name="horizontalSpacing">
+-                 <number>0</number>
+-                </property>
+-                <item row="0" column="0" colspan="4">
+-                 <widget class="QLabel" name="demoTitleLabel">
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="0">
+-                 <widget class="QComboBox" name="examplesComboBox">
+-                  <property name="enabled">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <item>
+-                   <property name="text">
+-                    <string>Examples not installed</string>
+-                   </property>
+-                  </item>
+-                 </widget>
+-                </item>
+-                <item row="1" column="2">
+-                 <widget class="QToolButton" name="openExampleButton">
+-                  <property name="enabled">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="text">
+-                   <string>Open</string>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="1">
+-                 <spacer name="horizontalSpacer">
+-                  <property name="orientation">
+-                   <enum>Qt::Horizontal</enum>
+-                  </property>
+-                  <property name="sizeType">
+-                   <enum>QSizePolicy::Fixed</enum>
+-                  </property>
+-                  <property name="sizeHint" stdset="0">
+-                   <size>
+-                    <width>6</width>
+-                    <height>6</height>
+-                   </size>
+-                  </property>
+-                 </spacer>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-             <item row="1" column="1">
+-              <widget class="QFrame" name="didyouKnowFrame">
+-               <property name="sizePolicy">
+-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                 <horstretch>0</horstretch>
+-                 <verstretch>0</verstretch>
+-                </sizepolicy>
+-               </property>
+-               <property name="maximumSize">
+-                <size>
+-                 <width>400</width>
+-                 <height>16777215</height>
+-                </size>
+-               </property>
+-               <property name="styleSheet">
+-                <string/>
+-               </property>
+-               <layout class="QGridLayout" name="gridLayout_11">
+-                <property name="rightMargin">
+-                 <number>9</number>
+-                </property>
+-                <item row="0" column="0">
+-                 <widget class="QLabel" name="didYouKnowTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="0" colspan="2">
+-                 <widget class="QTextBrowser" name="didYouKnowTextBrowser">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="frameShadow">
+-                   <enum>QFrame::Plain</enum>
+-                  </property>
+-                  <property name="verticalScrollBarPolicy">
+-                   <enum>Qt::ScrollBarAlwaysOff</enum>
+-                  </property>
+-                  <property name="horizontalScrollBarPolicy">
+-                   <enum>Qt::ScrollBarAlwaysOff</enum>
+-                  </property>
+-                  <property name="openExternalLinks">
+-                   <bool>true</bool>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="0" column="1">
+-                 <layout class="QGridLayout" name="gridLayout_10">
+-                  <property name="spacing">
+-                   <number>0</number>
+-                  </property>
+-                  <item row="0" column="0" colspan="2">
+-                   <spacer name="verticalSpacer_4">
+-                    <property name="orientation">
+-                     <enum>Qt::Vertical</enum>
+-                    </property>
+-                    <property name="sizeType">
+-                     <enum>QSizePolicy::Preferred</enum>
+-                    </property>
+-                    <property name="sizeHint" stdset="0">
+-                     <size>
+-                      <width>20</width>
+-                      <height>2</height>
+-                     </size>
+-                    </property>
+-                   </spacer>
+-                  </item>
+-                  <item row="1" column="0">
+-                   <widget class="QToolButton" name="prevTipBtn">
+-                    <property name="styleSheet">
+-                     <string notr="true">QToolButton{
+-	border-right:solid 0 px;
+-	height:16px;
+-	width:12px;
+-}
+-</string>
+-                    </property>
+-                    <property name="text">
+-                     <string/>
+-                    </property>
+-                    <property name="icon">
+-                     <iconset resource="welcome.qrc">
+-                      <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
+-                    </property>
+-                    <property name="arrowType">
+-                     <enum>Qt::NoArrow</enum>
+-                    </property>
+-                   </widget>
+-                  </item>
+-                  <item row="1" column="1">
+-                   <widget class="QToolButton" name="nextTipBtn">
+-                    <property name="styleSheet">
+-                     <string notr="true">QToolButton{
+-	border-left:solid 0 px;
+-	height:16px;
+-	width:12px;
+-}
+-</string>
+-                    </property>
+-                    <property name="text">
+-                     <string/>
+-                    </property>
+-                    <property name="icon">
+-                     <iconset resource="welcome.qrc">
+-                      <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
+-                    </property>
+-                    <property name="arrowType">
+-                     <enum>Qt::NoArrow</enum>
+-                    </property>
+-                   </widget>
+-                  </item>
+-                  <item row="2" column="0" colspan="2">
+-                   <spacer name="verticalSpacer_3">
+-                    <property name="orientation">
+-                     <enum>Qt::Vertical</enum>
+-                    </property>
+-                    <property name="sizeHint" stdset="0">
+-                     <size>
+-                      <width>20</width>
+-                      <height>2</height>
+-                     </size>
+-                    </property>
+-                   </spacer>
+-                  </item>
+-                 </layout>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-            </layout>
+-           </widget>
+-           <widget class="QWidget" name="developPage">
+-            <layout class="QGridLayout" name="gridLayout_4">
+-             <property name="margin">
+-              <number>18</number>
+-             </property>
+-             <property name="spacing">
+-              <number>24</number>
+-             </property>
+-             <item row="0" column="0">
+-              <widget class="QFrame" name="recentSessionsFrame">
+-               <property name="sizePolicy">
+-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                 <horstretch>0</horstretch>
+-                 <verstretch>0</verstretch>
+-                </sizepolicy>
+-               </property>
+-               <property name="minimumSize">
+-                <size>
+-                 <width>270</width>
+-                 <height>130</height>
+-                </size>
+-               </property>
+-               <property name="styleSheet">
+-                <string/>
+-               </property>
+-               <layout class="QGridLayout" name="gridLayout_3">
+-                <property name="horizontalSpacing">
+-                 <number>0</number>
+-                </property>
+-                <property name="verticalSpacing">
+-                 <number>3</number>
+-                </property>
+-                <item row="0" column="0" colspan="3">
+-                 <widget class="QLabel" name="recentSessionsTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="0" colspan="3">
+-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="focusPolicy">
+-                   <enum>Qt::NoFocus</enum>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="selectionMode">
+-                   <enum>QAbstractItemView::NoSelection</enum>
+-                  </property>
+-                  <property name="verticalScrollMode">
+-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
+-                  </property>
+-                  <property name="rootIsDecorated">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="uniformRowHeights">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="allColumnsShowFocus">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="columnCount">
+-                   <number>2</number>
+-                  </property>
+-                  <attribute name="headerVisible">
+-                   <bool>false</bool>
+-                  </attribute>
+-                  <attribute name="headerDefaultSectionSize">
+-                   <number>24</number>
+-                  </attribute>
+-                  <attribute name="headerMinimumSectionSize">
+-                   <number>0</number>
+-                  </attribute>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">1</string>
+-                   </property>
+-                  </column>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">2</string>
+-                   </property>
+-                  </column>
+-                 </widget>
+-                </item>
+-                <item row="3" column="0">
+-                 <widget class="QPushButton" name="manageSessionsButton">
+-                  <property name="focusPolicy">
+-                   <enum>Qt::TabFocus</enum>
+-                  </property>
+-                  <property name="text">
+-                   <string>Manage Sessions...</string>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="4" column="0">
+-                 <spacer name="verticalSpacer">
+-                  <property name="orientation">
+-                   <enum>Qt::Vertical</enum>
+-                  </property>
+-                  <property name="sizeHint" stdset="0">
+-                   <size>
+-                    <width>20</width>
+-                    <height>40</height>
+-                   </size>
+-                  </property>
+-                 </spacer>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-             <item row="0" column="2">
+-              <widget class="QFrame" name="recentProjectsFrame">
+-               <property name="styleSheet">
+-                <string/>
+-               </property>
+-               <layout class="QGridLayout" name="gridLayout_5">
+-                <property name="horizontalSpacing">
+-                 <number>0</number>
+-                </property>
+-                <property name="verticalSpacing">
+-                 <number>3</number>
+-                </property>
+-                <property name="rightMargin">
+-                 <number>9</number>
+-                </property>
+-                <item row="0" column="0" colspan="3">
+-                 <widget class="QLabel" name="projTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="1" column="0" colspan="3">
+-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="focusPolicy">
+-                   <enum>Qt::NoFocus</enum>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="selectionMode">
+-                   <enum>QAbstractItemView::NoSelection</enum>
+-                  </property>
+-                  <property name="verticalScrollMode">
+-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
+-                  </property>
+-                  <property name="rootIsDecorated">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="uniformRowHeights">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="allColumnsShowFocus">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="columnCount">
+-                   <number>2</number>
+-                  </property>
+-                  <attribute name="headerVisible">
+-                   <bool>false</bool>
+-                  </attribute>
+-                  <attribute name="headerDefaultSectionSize">
+-                   <number>24</number>
+-                  </attribute>
+-                  <attribute name="headerMinimumSectionSize">
+-                   <number>0</number>
+-                  </attribute>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">1</string>
+-                   </property>
+-                  </column>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">2</string>
+-                   </property>
+-                  </column>
+-                 </widget>
+-                </item>
+-                <item row="3" column="0">
+-                 <widget class="QPushButton" name="createNewProjectButton">
+-                  <property name="focusPolicy">
+-                   <enum>Qt::TabFocus</enum>
+-                  </property>
+-                  <property name="text">
+-                   <string>Create New Project...</string>
+-                  </property>
+-                  <property name="flat">
+-                   <bool>true</bool>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item row="4" column="0">
+-                 <spacer name="verticalSpacer_2">
+-                  <property name="orientation">
+-                   <enum>Qt::Vertical</enum>
+-                  </property>
+-                  <property name="sizeHint" stdset="0">
+-                   <size>
+-                    <width>20</width>
+-                    <height>40</height>
+-                   </size>
+-                  </property>
+-                 </spacer>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-            </layout>
+-           </widget>
+-           <widget class="QWidget" name="communityPage">
++           <widget class="QWidget" name="widget">
+             <layout class="QGridLayout" name="gridLayout_7">
+              <property name="margin">
+               <number>18</number>
+@@ -944,168 +259,6 @@ QToolButton:pressed {
+              <property name="spacing">
+               <number>24</number>
+              </property>
+-             <item row="0" column="0">
+-              <widget class="QFrame" name="labsFrame">
+-               <property name="frameShape">
+-                <enum>QFrame::NoFrame</enum>
+-               </property>
+-               <property name="frameShadow">
+-                <enum>QFrame::Plain</enum>
+-               </property>
+-               <layout class="QVBoxLayout" name="verticalLayout_2">
+-                <item>
+-                 <widget class="QLabel" name="labsTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item>
+-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="minimumSize">
+-                   <size>
+-                    <width>340</width>
+-                    <height>0</height>
+-                   </size>
+-                  </property>
+-                  <property name="focusPolicy">
+-                   <enum>Qt::NoFocus</enum>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="selectionMode">
+-                   <enum>QAbstractItemView::NoSelection</enum>
+-                  </property>
+-                  <property name="verticalScrollMode">
+-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
+-                  </property>
+-                  <property name="rootIsDecorated">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="uniformRowHeights">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="allColumnsShowFocus">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="columnCount">
+-                   <number>2</number>
+-                  </property>
+-                  <attribute name="headerVisible">
+-                   <bool>false</bool>
+-                  </attribute>
+-                  <attribute name="headerDefaultSectionSize">
+-                   <number>24</number>
+-                  </attribute>
+-                  <attribute name="headerMinimumSectionSize">
+-                   <number>0</number>
+-                  </attribute>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">1</string>
+-                   </property>
+-                  </column>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">2</string>
+-                   </property>
+-                  </column>
+-                 </widget>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+-             <item row="0" column="1">
+-              <widget class="QFrame" name="sitesFrame">
+-               <property name="frameShape">
+-                <enum>QFrame::NoFrame</enum>
+-               </property>
+-               <property name="frameShadow">
+-                <enum>QFrame::Plain</enum>
+-               </property>
+-               <layout class="QVBoxLayout" name="verticalLayout_3">
+-                <item>
+-                 <widget class="QLabel" name="sitesTitleLabel">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="alignment">
+-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+-                  </property>
+-                 </widget>
+-                </item>
+-                <item>
+-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
+-                  <property name="sizePolicy">
+-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                    <horstretch>0</horstretch>
+-                    <verstretch>0</verstretch>
+-                   </sizepolicy>
+-                  </property>
+-                  <property name="focusPolicy">
+-                   <enum>Qt::NoFocus</enum>
+-                  </property>
+-                  <property name="frameShape">
+-                   <enum>QFrame::NoFrame</enum>
+-                  </property>
+-                  <property name="selectionMode">
+-                   <enum>QAbstractItemView::NoSelection</enum>
+-                  </property>
+-                  <property name="verticalScrollMode">
+-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
+-                  </property>
+-                  <property name="rootIsDecorated">
+-                   <bool>false</bool>
+-                  </property>
+-                  <property name="uniformRowHeights">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="allColumnsShowFocus">
+-                   <bool>true</bool>
+-                  </property>
+-                  <property name="columnCount">
+-                   <number>2</number>
+-                  </property>
+-                  <attribute name="headerVisible">
+-                   <bool>false</bool>
+-                  </attribute>
+-                  <attribute name="headerDefaultSectionSize">
+-                   <number>24</number>
+-                  </attribute>
+-                  <attribute name="headerMinimumSectionSize">
+-                   <number>0</number>
+-                  </attribute>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">1</string>
+-                   </property>
+-                  </column>
+-                  <column>
+-                   <property name="text">
+-                    <string notr="true">2</string>
+-                   </property>
+-                  </column>
+-                 </widget>
+-                </item>
+-               </layout>
+-              </widget>
+-             </item>
+             </layout>
+            </widget>
+           </widget>
+@@ -1219,13 +372,6 @@ QToolButton:pressed {
+    </item>
+   </layout>
+  </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>Core::Utils::WelcomeModeTreeWidget</class>
+-   <extends>QTreeWidget</extends>
+-   <header>utils/welcomemodetreewidget.h</header>
+-  </customwidget>
+- </customwidgets>
+  <resources>
+   <include location="welcome.qrc"/>
+  </resources>
+diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
+index e9743a9..e7906f1 100644
+--- a/src/plugins/welcome/welcomeplugin.cpp
++++ b/src/plugins/welcome/welcomeplugin.cpp
+@@ -31,6 +31,8 @@
+ 
+ #include "welcomemode.h"
+ 
++#include "communitywelcomepage.h"
++
+ #include <coreplugin/actionmanager/actionmanager.h>
+ #include <coreplugin/basemode.h>
+ #include <coreplugin/coreconstants.h>
+@@ -45,11 +47,10 @@
+ #include <QtGui/QMessageBox>
+ #include <QtGui/QPushButton>
+ 
+-using namespace Welcome;
+-
++using namespace Welcome::Internal;
+ 
+ WelcomePlugin::WelcomePlugin()
+-  : m_welcomeMode(0)
++  : m_welcomeMode(0), m_communityWelcomePage(0)
+ {
+ }
+ 
+@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin()
+         removeObject(m_welcomeMode);
+         delete m_welcomeMode;
+     }
++    if (m_communityWelcomePage) {
++        removeObject(m_communityWelcomePage);
++        delete m_communityWelcomePage;
++    }
+ }
+ 
+ /*! Initializes the plugin. Returns true on success.
+@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
+     Q_UNUSED(arguments)
+     Q_UNUSED(error_message)
+ 
++    m_communityWelcomePage = new Internal::CommunityWelcomePage;
++    addObject(m_communityWelcomePage);
++
+     m_welcomeMode = new WelcomeMode;
+     addObject(m_welcomeMode);
+ 
+@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
+ */
+ void WelcomePlugin::extensionsInitialized()
+ {
++    m_welcomeMode->initPlugins();
+     Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName());
+ }
+ 
+diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h
+index 970ec39..54275b0 100644
+--- a/src/plugins/welcome/welcomeplugin.h
++++ b/src/plugins/welcome/welcomeplugin.h
+@@ -36,6 +36,9 @@ namespace Welcome {
+ 
+ class WelcomeMode;
+ 
++namespace Internal {
++class CommunityWelcomePage;
++
+ class WelcomePlugin
+   : public ExtensionSystem::IPlugin
+ {
+@@ -51,8 +54,10 @@ public:
+ 
+ private:
+     WelcomeMode *m_welcomeMode;
++    Internal::CommunityWelcomePage *m_communityWelcomePage;
+ };
+ 
+ } // namespace Welcome
++} // namespace Internal
+ 
+ #endif // WELCOMEPLUGIN_H
+-- 
+1.6.3.msysgit.0
+
diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro
index 81f3bc8fc79284e905bd1ff1171ad66fc82d007a..b5fed62800b68341cfb6f7ca712bc162d37fc3e0 100644
--- a/src/libs/extensionsystem/extensionsystem.pro
+++ b/src/libs/extensionsystem/extensionsystem.pro
@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY
 include(../../qtcreatorlibrary.pri)
 include(extensionsystem_dependencies.pri)
 
-unix:!macx:!freebsd* {
-  LIBS += -ldl
-}
+unix:!macx:!freebsd*:LIBS += -ldl
 
 DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\"
 
@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \
     pluginspec_p.h \
     pluginview.h \
     pluginview_p.h \
-    optionsparser.h
+    optionsparser.h \
+    iwelcomepage.h
 SOURCES += pluginerrorview.cpp \
     plugindetailsview.cpp \
     iplugin.cpp \
     pluginmanager.cpp \
     pluginspec.cpp \
     pluginview.cpp \
-    optionsparser.cpp
+    optionsparser.cpp \
+    iwelcomepage.cpp
 FORMS += pluginview.ui \
     pluginerrorview.ui \
     plugindetailsview.ui
diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1297037988940c2a41e5c34d990e1d975b99afb9
--- /dev/null
+++ b/src/libs/extensionsystem/iwelcomepage.cpp
@@ -0,0 +1,8 @@
+#include "iwelcomepage.h"
+
+using namespace ExtensionSystem;
+
+IWelcomePage::IWelcomePage()
+{
+
+}
diff --git a/src/libs/extensionsystem/iwelcomepage.h b/src/libs/extensionsystem/iwelcomepage.h
new file mode 100644
index 0000000000000000000000000000000000000000..e4e5e6f1d65c1bb9f0b58f263c840f3d018af409
--- /dev/null
+++ b/src/libs/extensionsystem/iwelcomepage.h
@@ -0,0 +1,31 @@
+#ifndef IWELCOMEPAGE_H
+#define IWELCOMEPAGE_H
+
+
+#include "extensionsystem_global.h"
+
+#include <QObject>
+
+namespace ExtensionSystem {
+
+class IWelcomePagePrivate;
+
+class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject
+{
+    Q_OBJECT
+
+public:
+    IWelcomePage();
+
+    virtual QWidget *page() = 0;
+    virtual QString title() const = 0;
+    virtual int priority() const { return 0; }
+
+private:
+    // not used atm
+    IWelcomePagePrivate *m_d;
+};
+
+}
+
+#endif // IWELCOMEPAGE_H
diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp
index 26d55a3bd9fece0dfee4835c9c2ce996bb6fc2ff..ff68cccdf26c3435e9924b848df8dcd356137b43 100644
--- a/src/libs/utils/welcomemodetreewidget.cpp
+++ b/src/libs/utils/welcomemodetreewidget.cpp
@@ -36,6 +36,18 @@
 namespace Core {
     namespace Utils {
 
+void WelcomeModeLabel::setStyledText(const QString &text)
+{
+    QString  rc = QLatin1String(
+    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
+    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
+    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
+    "<span style=\" font-size:x-large; color:#555555;\">");
+    rc += text;
+    rc += QLatin1String("</span></p><hr/></body></html>");
+    setText(rc);
+}
+
 struct WelcomeModeTreeWidgetPrivate
 {
     WelcomeModeTreeWidgetPrivate() {}
@@ -48,6 +60,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) :
     m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png"));
     connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
             SLOT(slotItemClicked(QTreeWidgetItem *)));
+
+    viewport()->setAutoFillBackground(false);
 }
 
 WelcomeModeTreeWidget::~WelcomeModeTreeWidget()
diff --git a/src/libs/utils/welcomemodetreewidget.h b/src/libs/utils/welcomemodetreewidget.h
index d26bc22735414500be7b44fa9daea3532732eaaf..82376132379402f2f9a6da184280068bf3295888 100644
--- a/src/libs/utils/welcomemodetreewidget.h
+++ b/src/libs/utils/welcomemodetreewidget.h
@@ -33,11 +33,22 @@
 #include "utils_global.h"
 
 #include <QtGui/QTreeWidget>
+#include <QtGui/QLabel>
 
 namespace Core {
   namespace Utils {
 
 struct WelcomeModeTreeWidgetPrivate;
+struct WelcomeModeLabelPrivate;
+
+class QTCREATOR_UTILS_EXPORT WelcomeModeLabel : public QLabel
+{
+    Q_OBJECT
+public:
+    WelcomeModeLabel(QWidget *parent) : QLabel(parent) {};
+    void setStyledText(const QString &text);
+    WelcomeModeLabelPrivate *m_d;
+};
 
 class QTCREATOR_UTILS_EXPORT WelcomeModeTreeWidget : public QTreeWidget
 {
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 04e5be49b473dd5b79b0b150c09eb7cf662c1f3f..ce487fbc8dcad5f05c31b0dfc10ef43fd07ab8b6 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -32,10 +32,6 @@
 
 #include <extensionsystem/iplugin.h>
 
-namespace Core {
-    class IMode;
-}
-
 namespace Core {
 namespace Internal {
 
@@ -59,7 +55,6 @@ public slots:
 
 private:
     MainWindow *m_mainWindow;
-    Core::IMode *m_welcomeMode;
     EditMode *m_editMode;
 };
 
diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec
index d7ccc070fdcb4a82bd2187d2128b99750ce35abe..29f1b469610e06a42d032f837120afd170dc9939 100644
--- a/src/plugins/help/Help.pluginspec
+++ b/src/plugins/help/Help.pluginspec
@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
         <dependency name="Core" version="1.2.80"/>
         <dependency name="Find" version="1.2.80"/>
         <dependency name="QuickOpen" version="1.2.80"/>
-        <dependency name="Welcome" version="1.2.80"/>
     </dependencyList>
 </plugin>
diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro
index 1f5ec5585ea406961f5235b77c2d37c9a3f3caca..b733a1fa70de08e961cb26c9d0f4a90c01a612b0 100644
--- a/src/plugins/help/help.pro
+++ b/src/plugins/help/help.pro
@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri)
 include(../../plugins/coreplugin/coreplugin.pri)
 include(../../plugins/find/find.pri)
 include(../../plugins/quickopen/quickopen.pri)
-include(../../plugins/welcome/welcome.pri)
 QT += network
 CONFIG += help
 DEFINES += QT_CLUCENE_SUPPORT \
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index f6e8db8fb33d7374bfd8f09df026510f6689460b..2ff11c8072c02e29fb10cd245ad25bd20d9a5c8f 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -87,8 +87,8 @@
 using namespace Help;
 using namespace Help::Internal;
 
-HelpManager::HelpManager(QHelpEngine *helpEngine)
-    : m_helpEngine(helpEngine)
+HelpManager::HelpManager(Internal::HelpPlugin* plugin)
+    : m_plugin(plugin)
 {
 }
 
@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
 {
     bool needsSetup = false;
     {
-        QHelpEngineCore hc(m_helpEngine->collectionFile());
+        QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile());
         if (!hc.setupData())
             qWarning() << "Could not initialize help engine:" << hc.error();
         foreach (const QString &fileName, fileNames) {
@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames)
         }
     }
     if (needsSetup)
-        m_helpEngine->setupData();
+        m_plugin->helpEngine()->setupData();
+}
+
+void HelpManager::openHelpPage(const QString& url)
+{
+    m_plugin->openHelpPage(url);
+}
+
+void HelpManager::openContextHelpPage(const QString& url)
+{
+    m_plugin->openContextHelpPage(url);
 }
 
 HelpPlugin::HelpPlugin() :
@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
     connect(m_helpEngine, SIGNAL(setupFinished()), this,
         SLOT(updateFilterComboBox()));
 
-    addAutoReleasedObject(new HelpManager(m_helpEngine));
+    addAutoReleasedObject(new HelpManager(this));
 
     m_filterSettingsPage = new FilterSettingsPage(m_helpEngine);
     addAutoReleasedObject(m_filterSettingsPage);
@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
     return true;
 }
 
+QHelpEngine* HelpPlugin::helpEngine() const
+{
+    return m_helpEngine;
+}
+
 void HelpPlugin::createRightPaneSideBar()
 {
     QAction *switchToHelpMode = new QAction("Go to Help Mode", this);
@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized()
     updateFilterComboBox();
     m_bookmarkManager->setupBookmarkModels();
 
-    using namespace Core::Internal;
-    using namespace Core::Constants;
-    Welcome::WelcomeMode *welcomeMode =
-        qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME));
-    if (welcomeMode) {
-        connect(welcomeMode, SIGNAL(openHelpPage(QString)), this,
-            SLOT(openHelpPage(QString)));
-        connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this,
-            SLOT(openContextHelpPage(QString)));
-    }
-
 #if !defined(QT_NO_WEBKIT)
     QWebSettings* webSettings = QWebSettings::globalSettings();
     QFont font(webSettings->fontFamily(QWebSettings::StandardFont),
diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h
index 6ab78cfc34177f3bf3cbba22fce7fb2e77b24e7c..10cf1fdf2ffd704b71307fec0c82233ab1132ef1 100644
--- a/src/plugins/help/helpplugin.h
+++ b/src/plugins/help/helpplugin.h
@@ -63,6 +63,7 @@ class SideBarItem;
 namespace Help {
 namespace Internal {
     class CentralWidget;
+    class HelpPlugin;
 }
 
 namespace Constants {
@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject
 {
     Q_OBJECT
 public:
-    HelpManager(QHelpEngine *helpEngine);
+    HelpManager(Internal::HelpPlugin*);
 
     void registerDocumentation(const QStringList &fileNames);
+    void openHelpPage(const QString& url);
+    void openContextHelpPage(const QString &url);
 
 private:
-    QHelpEngine *m_helpEngine;
+    Internal::HelpPlugin *m_plugin;
 };
 
 namespace Internal {
@@ -108,6 +111,12 @@ public:
     void setIndexFilter(const QString &filter);
     QString indexFilter() const;
 
+    void openHelpPage(const QUrl& url);
+    void openHelpPage(const QString& url);
+    void openContextHelpPage(const QString &url);
+
+    QHelpEngine* helpEngine() const;
+
 private slots:
     void modeChanged(Core::IMode *mode);
     void activateContext();
@@ -128,10 +137,6 @@ private slots:
     void slotHideRightPane();
     void copyFromSideBar();
 
-    void openHelpPage(const QUrl& url);
-    void openHelpPage(const QString& url);
-    void openContextHelpPage(const QString &url);
-
     void updateSideBarSource();
     void updateSideBarSource(const QUrl &newUrl);
 
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 6ef52c1591c1659263fe60320db8d071b8de3587..b8ae5ecafaccc396bb91b80812ebcb408b6c9949 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen
 plugin_projectexplorer.depends += plugin_find
 plugin_projectexplorer.depends += plugin_coreplugin
 plugin_projectexplorer.depends += plugin_texteditor
-plugin_projectexplorer.depends += plugin_welcome
 
 plugin_qt4projectmanager.subdir = qt4projectmanager
 plugin_qt4projectmanager.depends = plugin_texteditor
@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools
 plugin_qt4projectmanager.depends += plugin_cppeditor
 plugin_qt4projectmanager.depends += plugin_help
 plugin_qt4projectmanager.depends += plugin_designer
-plugin_qt4projectmanager.depends += plugin_welcome
 
 plugin_quickopen.subdir = quickopen
 plugin_quickopen.depends = plugin_coreplugin
@@ -144,7 +142,6 @@ plugin_help.subdir = help
 plugin_help.depends = plugin_find
 plugin_help.depends += plugin_quickopen
 plugin_help.depends += plugin_coreplugin
-plugin_help.depends += plugin_welcome
 
 plugin_resourceeditor.subdir = resourceeditor
 plugin_resourceeditor.depends = plugin_coreplugin
diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
index 6a66cfe1b88d29c04450e72b6a055fd0991e9628..8b5a7c317a7623c63c5280808a1743454e03b8c5 100644
--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec
+++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec
@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
         <dependency name="Find" version="1.2.80"/>
         <dependency name="QuickOpen" version="1.2.80"/>
         <dependency name="TextEditor" version="1.2.80"/>
-        <dependency name="Welcome" version="1.2.80"/>
     </dependencyList>
 </plugin>
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index f10b628aadd64e636167b9a542a6ef966bdd0904..c9a692c3e71819bf9ec46ff2e538cfc8e92e4e63 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -57,6 +57,8 @@
 #include "sessiondialog.h"
 #include "buildparserfactory.h"
 #include "projectexplorersettingspage.h"
+#include "projectwelcomepage.h"
+#include "projectwelcomepagewidget.h"
 
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin()
 
 ProjectExplorerPlugin::~ProjectExplorerPlugin()
 {
+    removeObject(m_welcomePlugin);
     removeObject(this);
 }
 
@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
     Core::ICore *core = Core::ICore::instance();
     Core::ActionManager *am = core->actionManager();
 
+    m_welcomePlugin = new ProjectWelcomePage;
+    m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page());
+    Q_ASSERT(m_welcomePage);
+    connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
+    addObject(m_welcomePlugin);
     addObject(this);
 
     connect(core->fileManager(), SIGNAL(currentFileChanged(QString)),
@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
         m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool();
     }
 
-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
-        (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) {
-        connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager()));
-    }
     connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager()));
     connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject()));
 #if 0
@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
             this, SLOT(determineSessionToRestoreAtStartup()));
     connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
 
+    updateWelcomePage();
+
     return true;
 }
 
@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager()
     Core::ModeManager *modeManager = Core::ModeManager::instance();
     Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME);
     if (modeManager->currentMode() == welcomeMode)
-    {
-        updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode));
-    }
+        updateWelcomePage();
 }
 
 void ProjectExplorerPlugin::setStartupProject(Project *project)
@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const
 }
 
 // update welcome page
-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode)
+void ProjectExplorerPlugin::updateWelcomePage()
 {
-    Welcome::WelcomeMode::WelcomePageData welcomePageData;
+    ProjectWelcomePageWidget::WelcomePageData welcomePageData;
     welcomePageData.sessionList =  m_session->sessions();
     welcomePageData.activeSession = m_session->activeSession();
     welcomePageData.previousSession = m_session->lastSession();
     welcomePageData.projectList = m_recentProjects;
-    welcomeMode->updateWelcomePage(welcomePageData);
+    m_welcomePage->updateWelcomePage(welcomePageData);
 }
 
-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
+void ProjectExplorerPlugin::currentModeChanged(Core::IMode *)
 {
-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode))
-        updateWelcomePage(welcomeMode);
+        updateWelcomePage();
 }
 
 void ProjectExplorerPlugin::determineSessionToRestoreAtStartup()
@@ -1080,11 +1083,8 @@ void ProjectExplorerPlugin::restoreSession()
     // update welcome page
     Core::ModeManager *modeManager = Core::ModeManager::instance();
     connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*)));
-    if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) {
-        updateWelcomePage(welcomeMode);
-        connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
-        connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
-    }
+    connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
+    connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString)));
 
     Core::ICore::instance()->openFiles(arguments);
     updateActions();
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 0f781eac882cf7b87b82a21abafdc2bc8446c32a..c3251c0e37c389f29da7aadf606cb58ff75af1c1 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -72,6 +72,8 @@ class ApplicationOutput;
 class OutputPane;
 class ProjectWindow;
 class ProjectFileFactory;
+class ProjectWelcomePage;
+class ProjectWelcomePageWidget;
 
 struct ProjectExplorerSettings
 {
@@ -209,7 +211,7 @@ private:
 
     void updateActions();
     void addToRecentProjects(const QString &fileName, const QString &displayName);
-    void updateWelcomePage(Welcome::WelcomeMode *welcomeMode);
+    void updateWelcomePage();
     Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const;
 
     static ProjectExplorerPlugin *m_instance;
@@ -279,6 +281,8 @@ private:
     QString m_runMode;
     QString m_projectFilterString;
     Internal::ProjectExplorerSettings m_projectExplorerSettings;
+    Internal::ProjectWelcomePage *m_welcomePlugin;
+    Internal::ProjectWelcomePageWidget *m_welcomePage;
 };
 
 namespace Internal {
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index ffb0b081efc5df4cdb991fb069baf131fc96f679..9e733990dd95bb8ea2cf03bc8446c317e02a3057 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \
     filewatcher.h \
     debugginghelper.h \
     abstractmakestep.h \
-    projectexplorersettingspage.h
+    projectexplorersettingspage.h \
+    projectwelcomepage.h \
+    projectwelcomepagewidget.h
 SOURCES += projectexplorer.cpp \
     projectwindow.cpp \
     buildmanager.cpp \
@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \
     filewatcher.cpp \
     debugginghelper.cpp \
     abstractmakestep.cpp \
-    projectexplorersettingspage.cpp
+    projectexplorersettingspage.cpp \
+    projectwelcomepage.cpp \
+    projectwelcomepagewidget.cpp
 FORMS += processstep.ui \
     editorsettingspropertiespage.ui \
     runsettingspropertiespage.ui \
@@ -119,7 +123,8 @@ FORMS += processstep.ui \
     projectwizardpage.ui \
     buildstepspage.ui \
     removefiledialog.ui \
-    projectexplorersettingspage.ui
+    projectexplorersettingspage.ui \
+    projectwelcomepagewidget.ui
 win32 { 
     SOURCES += applicationlauncher_win.cpp \
         winguiprocess.cpp
diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
index ecbb7a4b976eacaa587f99cd39f5ed64a42f8d4b..674c8bbb362f8727a5284f915e046a8db44f538a 100644
--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri
+++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri
@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri)
 include(../../plugins/find/find.pri)
 include(../../plugins/coreplugin/coreplugin.pri)
 include(../../plugins/texteditor/texteditor.pri)
-include(../../plugins/welcome/welcome.pri)
diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ad1c3e97c4703d316bef458708c08e17e5fe7a3d
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
@@ -0,0 +1,48 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "projectwelcomepage.h"
+#include "projectwelcomepagewidget.h"
+
+namespace ProjectExplorer {
+namespace Internal {
+
+ProjectWelcomePage::ProjectWelcomePage()
+ : m_page(new ProjectWelcomePageWidget)
+{
+
+}
+
+QWidget* ProjectWelcomePage::page()
+{
+    return m_page;
+}
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h
new file mode 100644
index 0000000000000000000000000000000000000000..6185dd57caf4fee6ef3ecfb5df66233e3cf77572
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomepage.h
@@ -0,0 +1,58 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef PROJECTWELCOMEPAGE_H
+#define PROJECTWELCOMEPAGE_H
+
+#include <extensionsystem/iwelcomepage.h>
+
+namespace ProjectExplorer {
+namespace Internal {
+
+class ProjectWelcomePageWidget;
+
+class ProjectWelcomePage : public ExtensionSystem::IWelcomePage
+{
+    Q_OBJECT
+public:
+    ProjectWelcomePage();
+
+    QWidget *page();
+    QString title() const { return tr("Develop"); }
+    int priority() const { return 20; }
+private:
+    ProjectWelcomePageWidget *m_page;
+
+
+};
+
+} // namespace Internal
+} // namespace ProjectExplorer
+
+#endif // PROJECTWELCOMEPAGE_H
diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fe824a71ad79a43c31550caf4226634bb6b8d5e4
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp
@@ -0,0 +1,157 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "projectwelcomepagewidget.h"
+#include "ui_projectwelcomepagewidget.h"
+
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/uniqueidmanager.h>
+#include <coreplugin/modemanager.h>
+#include <coreplugin/icore.h>
+#include <coreplugin/dialogs/iwizard.h>
+
+#include <QtCore/QFileInfo>
+#include <QtCore/QDir>
+#include <QtCore/QPair>
+#include <QtGui/QLabel>
+#include <QtGui/QTreeWidgetItem>
+
+#include <QtCore/QDebug>
+
+using namespace ProjectExplorer::Internal;
+
+bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const
+{
+    return previousSession == rhs.previousSession
+        && activeSession   == rhs.activeSession
+        && sessionList     == rhs.sessionList
+        && projectList     == rhs.projectList;
+}
+
+bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const
+{
+    return previousSession != rhs.previousSession
+        || activeSession   != rhs.activeSession
+        || sessionList     != rhs.sessionList
+        || projectList     != rhs.projectList;
+}
+
+QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d)
+{
+    dgb.nospace() << "PreviousSession=" << d.previousSession
+        << " activeSession=" << d.activeSession
+        << " sessionList=" << d.sessionList
+        << " projectList=" << d.projectList;
+    return dgb;
+}
+
+ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::ProjectWelcomePageWidget)
+{
+    ui->setupUi(this);
+    ui->projTitleLabel->setStyledText(tr("Open Recent Project"));
+    ui->recentSessionsTitleLabel->setStyledText(tr("Resume Session"));
+    updateWelcomePage(WelcomePageData());
+
+    connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
+    connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
+    connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
+    connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
+
+}
+
+ProjectWelcomePageWidget::~ProjectWelcomePageWidget()
+{
+    delete ui;
+}
+
+void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData)
+{
+    // Update only if data are modified
+    if (welcomePageData == lastData)
+        return;
+    lastData = welcomePageData;
+
+    setUpdatesEnabled(false);
+    ui->sessTreeWidget->clear();
+    ui->projTreeWidget->clear();
+
+    if (welcomePageData.sessionList.count() > 0) {
+        foreach (const QString &s, welcomePageData.sessionList) {
+            QString str = s;
+            if (s == welcomePageData.previousSession)
+                str = tr("%1 (last session)").arg(s);
+            ui->sessTreeWidget->addItem(str, s);
+        }
+        ui->sessTreeWidget->updateGeometry();
+        ui->sessTreeWidget->show();
+    } else {
+        ui->sessTreeWidget->hide();
+    }
+
+    typedef QPair<QString, QString> QStringPair;
+    if (welcomePageData.projectList.count() > 0) {
+        foreach (const QStringPair &it, welcomePageData.projectList) {
+            QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first);
+            const QFileInfo fi(it.first);
+            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
+        }
+    } else {
+        ui->projTreeWidget->hide();
+    }
+    ui->projTreeWidget->updateGeometry();
+    setUpdatesEnabled(true);
+}
+
+void ProjectWelcomePageWidget::activateEditMode()
+{
+    Core::ModeManager *modeManager = Core::ModeManager::instance();
+    if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME))
+        modeManager->activateMode(Core::Constants::MODE_EDIT);
+}
+
+
+void ProjectWelcomePageWidget::slotSessionClicked(const QString &data)
+{
+    emit requestSession(data);
+    activateEditMode();
+}
+
+void ProjectWelcomePageWidget::slotProjectClicked(const QString &data)
+{
+    emit requestProject(data);
+    activateEditMode();
+}
+
+void ProjectWelcomePageWidget::slotCreateNewProject()
+{
+    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
+                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
+}
diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..ac94986c18e6fffcb610c26853a6a8281f5dc029
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h
@@ -0,0 +1,81 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef PROJECTWELCOMEPAGEWIDGET_H
+#define PROJECTWELCOMEPAGEWIDGET_H
+
+#include <QtGui/QWidget>
+
+
+namespace ProjectExplorer {
+    namespace Internal {
+
+
+namespace Ui {
+    class ProjectWelcomePageWidget;
+}
+
+class ProjectWelcomePageWidget : public QWidget {
+    Q_OBJECT
+public:
+    ProjectWelcomePageWidget(QWidget *parent = 0);
+    ~ProjectWelcomePageWidget();
+
+    struct WelcomePageData{
+        bool operator==(const WelcomePageData &rhs) const;
+        bool operator!=(const WelcomePageData &rhs) const;
+
+        QString previousSession;
+        QString activeSession;
+        QStringList sessionList;
+        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
+    };
+
+    void updateWelcomePage(const WelcomePageData &welcomePageData);
+
+signals:
+    void requestProject(const QString &project);
+    void requestSession(const QString &session);
+    void manageSessions();
+
+private slots:
+    void slotSessionClicked(const QString &data);
+    void slotProjectClicked(const QString &data);
+    void slotCreateNewProject();
+
+private:
+    void activateEditMode();
+    Ui::ProjectWelcomePageWidget *ui;
+    WelcomePageData lastData;
+};
+
+}
+}
+
+#endif // PROJECTWELCOMEPAGEWIDGET_H
diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
new file mode 100644
index 0000000000000000000000000000000000000000..38558d441bd95fce838aa8b118916cc108403b81
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class>
+ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>667</width>
+    <height>365</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <item>
+    <widget class="QFrame" name="recentSessionsFrame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>270</width>
+       <height>130</height>
+      </size>
+     </property>
+     <property name="styleSheet">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <property name="horizontalSpacing">
+       <number>0</number>
+      </property>
+      <property name="verticalSpacing">
+       <number>3</number>
+      </property>
+      <item row="0" column="0" colspan="3">
+       <widget class="Core::Utils::WelcomeModeLabel" name="recentSessionsTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="3">
+       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerPixel</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <property name="columnCount">
+         <number>2</number>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <attribute name="headerDefaultSectionSize">
+         <number>24</number>
+        </attribute>
+        <attribute name="headerMinimumSectionSize">
+         <number>0</number>
+        </attribute>
+        <column>
+         <property name="text">
+          <string notr="true">1</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true">2</string>
+         </property>
+        </column>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QPushButton" name="manageSessionsButton">
+        <property name="focusPolicy">
+         <enum>Qt::TabFocus</enum>
+        </property>
+        <property name="text">
+         <string>Manage Sessions...</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <spacer name="verticalSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>40</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="recentProjectsFrame">
+     <property name="styleSheet">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_5">
+      <property name="horizontalSpacing">
+       <number>0</number>
+      </property>
+      <property name="verticalSpacing">
+       <number>3</number>
+      </property>
+      <property name="rightMargin">
+       <number>9</number>
+      </property>
+      <item row="0" column="0" colspan="3">
+       <widget class="Core::Utils::WelcomeModeLabel" name="projTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="3">
+       <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerPixel</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <property name="columnCount">
+         <number>2</number>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <attribute name="headerDefaultSectionSize">
+         <number>24</number>
+        </attribute>
+        <attribute name="headerMinimumSectionSize">
+         <number>0</number>
+        </attribute>
+        <column>
+         <property name="text">
+          <string notr="true">1</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true">2</string>
+         </property>
+        </column>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QPushButton" name="createNewProjectButton">
+        <property name="focusPolicy">
+         <enum>Qt::TabFocus</enum>
+        </property>
+        <property name="text">
+         <string>Create New Project...</string>
+        </property>
+        <property name="flat">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <spacer name="verticalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>40</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeTreeWidget</class>
+   <extends>QTreeWidget</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeLabel</class>
+   <extends>QLabel</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui
new file mode 100644
index 0000000000000000000000000000000000000000..9ad7e162b0a16d0d069a5d29b6710198edda57a3
--- /dev/null
+++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui
@@ -0,0 +1,21 @@
+<ui version="4.0" >
+ <author/>
+ <comment/>
+ <exportmacro/>
+ <class>ProjectWelcomePage</class>
+ <widget class="QWidget" name="ProjectWelcomePage" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+ </widget>
+ <pixmapfunction/>
+ <connections/>
+</ui>
diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
index 3b515bd60e5d0608d4ecb3cbba608c2e934f560f..c4b8d4455f451e09e642f749f06816878464c875 100644
--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
+++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec
@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
         <dependency name="CppEditor" version="1.2.80"/>
         <dependency name="Help" version="1.2.80"/>
         <dependency name="Designer" version="1.2.80"/>
-        <dependency name="Welcome" version="1.2.80"/>
     </dependencyList>
 </plugin>
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..379d45902111c2c9b67964c98555d10983519f72
--- /dev/null
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp
@@ -0,0 +1,47 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "gettingstartedwelcomepage.h"
+#include "gettingstartedwelcomepagewidget.h"
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+GettingStartedWelcomePage::GettingStartedWelcomePage()
+        : m_page(new GettingStartedWelcomePageWidget)
+{
+}
+
+QWidget* GettingStartedWelcomePage::page()
+{
+    return m_page;
+}
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
new file mode 100644
index 0000000000000000000000000000000000000000..2534f7ae0ca19edd6a60adb14f7db98534bc9d2f
--- /dev/null
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h
@@ -0,0 +1,56 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H
+#define GETTINGSTARTEDWELCOMEPLUGIN_H
+
+#include <extensionsystem/iwelcomepage.h>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class GettingStartedWelcomePageWidget;
+
+class GettingStartedWelcomePage : public ExtensionSystem::IWelcomePage
+{
+public:
+    GettingStartedWelcomePage();
+
+    QWidget *page();
+    QString title() const { return tr("Getting Started");}
+    int priority() const { return 10; }
+
+private:
+    GettingStartedWelcomePageWidget *m_page;
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // GETTINGSTARTEDWELCOMEPLUGIN_H
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..41dd90da34a3ec1020822a48f48461afb570c44b
--- /dev/null
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
@@ -0,0 +1,259 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "gettingstartedwelcomepagewidget.h"
+#include "ui_gettingstartedwelcomepagewidget.h"
+
+#include <coreplugin/icore.h>
+#include <coreplugin/coreconstants.h>
+
+#include <extensionsystem/pluginmanager.h>
+
+#include <help/helpplugin.h>
+
+#include <QtCore/QDateTime>
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+#include <QtCore/QDebug>
+#include <QtCore/QUrl>
+#include <QtCore/QXmlStreamReader>
+#include <QtGui/QFont>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+// TODO: remove
+
+GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::GettingStartedWelcomePageWidget)
+{
+    ui->setupUi(this);
+    ui->tutorialsTitleLabel->setStyledText(tr("Tutorials"));
+    ui->demoTitleLabel->setStyledText(tr("Explore Qt Examples"));
+    ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
+    ui->didYouKnowTitleLabel->setStyledText(tr("Did You Know?"));
+
+    connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&)));
+    connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
+    connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
+
+    ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
+                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
+    ui->tutorialTreeWidget->addItem(tr("Creating an address book"),
+                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
+    ui->tutorialTreeWidget->addItem(tr("Understanding widgets"),
+                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
+    ui->tutorialTreeWidget->addItem(tr("Building with qmake"),
+                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
+    ui->tutorialTreeWidget->addItem(tr("Writing test cases"),
+                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
+
+    srand(QDateTime::currentDateTime().toTime_t());
+    QStringList tips = tipsOfTheDay();
+    m_currentTip = rand()%tips.count();
+
+    QTextDocument *doc = ui->didYouKnowTextBrowser->document();
+    doc->setDefaultStyleSheet("a:link {color:black;}");
+    ui->didYouKnowTextBrowser->setDocument(doc);
+    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+
+    connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
+    connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
+
+}
+
+GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget()
+{
+    delete ui;
+}
+
+void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
+{
+    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
+    if (!QFile::exists(demoxml)) {
+        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
+        if (!QFile::exists(demoxml))
+            return;
+    }
+
+    QFile description(demoxml);
+    if (!description.open(QFile::ReadOnly))
+        return;
+
+    ui->examplesComboBox->clear();
+    ui->examplesComboBox->setEnabled(true);
+
+    ui->examplesComboBox->addItem(tr("Choose an example..."));
+    QFont f = font();
+    f.setItalic(true);
+    ui->examplesComboBox->setItemData(0, f, Qt::FontRole);
+    f.setItalic(false);
+    bool inExamples = false;
+    QString dirName;
+    QXmlStreamReader reader(&description);
+    while (!reader.atEnd()) {
+        switch (reader.readNext()) {
+            case QXmlStreamReader::StartElement:
+            if (reader.name() == "category") {
+                QString name = reader.attributes().value(QLatin1String("name")).toString();
+                if (name.contains("tutorial"))
+                    break;
+                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
+                ui->examplesComboBox->addItem(name);
+                f.setBold(true);
+                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole);
+                f.setBold(false);
+                inExamples = true;
+            }
+            if (inExamples && reader.name() == "example") {
+                QString name = reader.attributes().value(QLatin1String("name")).toString();
+                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
+                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
+                QString fileName = examplePath + relativeProPath;
+                if (!QFile::exists(fileName))
+                    fileName = sourcePath + "/examples" + relativeProPath;
+                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
+
+                ui->examplesComboBox->addItem("  " + name, fileName);
+                ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+            }
+            break;
+            case QXmlStreamReader::EndElement:
+            if (reader.name() == "category")
+                inExamples = false;
+            break;
+            default:
+            break;
+        }
+    }
+}
+
+void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index)
+{
+    QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString();
+    ui->openExampleButton->setEnabled(!fileName.isEmpty());
+}
+
+void GettingStartedWelcomePageWidget::slotOpenExample()
+{
+    QComboBox *box = ui->examplesComboBox;
+    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
+    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
+    QStringList files;
+    QFileInfo fi(proFile);
+    QString tryFile = fi.path() + "/main.cpp";
+    files << proFile;
+    if(!QFile::exists(tryFile))
+        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
+    if(QFile::exists(tryFile))
+        files << tryFile;
+    Core::ICore::instance()->openFiles(files);
+    slotOpenContextHelpPage(helpFile);
+}
+
+void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url)
+{
+    Help::HelpManager *helpManager
+        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+    Q_ASSERT(helpManager);
+    helpManager->openHelpPage(url);
+}
+void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url)
+{
+    Help::HelpManager *helpManager
+        = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>();
+    Q_ASSERT(helpManager);
+    helpManager->openContextHelpPage(url);
+}
+
+void GettingStartedWelcomePageWidget::slotNextTip()
+{
+    QStringList tips = tipsOfTheDay();
+    m_currentTip = ((m_currentTip+1)%tips.count());
+    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+}
+
+void GettingStartedWelcomePageWidget::slotPrevTip()
+{
+    QStringList tips = tipsOfTheDay();
+    m_currentTip = ((m_currentTip-1)+tips.count())%tips.count();
+    ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip));
+}
+
+QStringList GettingStartedWelcomePageWidget::tipsOfTheDay()
+{
+    static QStringList tips;
+    if (tips.isEmpty()) {
+        QString altShortcut =
+#ifdef Q_WS_MAC
+            tr("Cmd", "Shortcut key");
+#else
+            tr("Alt", "Shortcut key");
+#endif
+        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
+                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
+                       "<li></li><li>6 - Output</li></ul>"));
+        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
+        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
+                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));
+        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
+                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
+                        "and code completion."));
+        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
+                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
+        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
+        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
+        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
+        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
+        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
+                       "on the buttons at the window bottom:"
+                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
+                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
+        tips.append(tr("You can quickly search methods, classes, help and more using the "
+                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
+        tips.append(tr("You can add custom build steps in the "
+                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
+        tips.append(tr("Within a session, you can add "
+                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
+        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
+        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
+                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
+                       "target in the combo box."));
+        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
+                       "revision control systems</a> such as Subversion, Perforce and Git."));
+        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
+    }
+    return tips;
+}
+
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..fdc6ec01602eb44edd92c00235147f6103cf5799
--- /dev/null
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
@@ -0,0 +1,69 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H
+#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H
+
+#include <QWidget>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+namespace Ui {
+    class GettingStartedWelcomePageWidget;
+}
+
+class GettingStartedWelcomePageWidget : public QWidget {
+    Q_OBJECT
+public:
+    GettingStartedWelcomePageWidget(QWidget *parent = 0);
+    ~GettingStartedWelcomePageWidget();
+
+ public slots:
+    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
+
+private slots:
+    void slotOpenHelpPage(const QString& url);
+    void slotOpenContextHelpPage(const QString& url);
+    void slotEnableExampleButton(int);
+    void slotOpenExample();
+    void slotNextTip();
+    void slotPrevTip();
+
+private:
+    QStringList tipsOfTheDay();
+
+    Ui::GettingStartedWelcomePageWidget *ui;
+    int m_currentTip;
+};
+
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
new file mode 100644
index 0000000000000000000000000000000000000000..e4dc34ba355ebb0cc81d0eeb9b3d5432daceb87e
--- /dev/null
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class>
+ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>646</width>
+    <height>361</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" rowspan="2">
+    <widget class="QFrame" name="tutorialsFrame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>400</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="styleSheet">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_6">
+      <item row="0" column="0">
+       <widget class="Core::Utils::WelcomeModeLabel" name="tutorialsTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerPixel</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <property name="columnCount">
+         <number>2</number>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <attribute name="headerDefaultSectionSize">
+         <number>24</number>
+        </attribute>
+        <attribute name="headerMinimumSectionSize">
+         <number>0</number>
+        </attribute>
+        <column>
+         <property name="text">
+          <string notr="true">1</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true">2</string>
+         </property>
+        </column>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QFrame" name="demosExamplesFrame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>400</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="styleSheet">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_8">
+      <property name="rightMargin">
+       <number>8</number>
+      </property>
+      <property name="horizontalSpacing">
+       <number>0</number>
+      </property>
+      <item row="0" column="0" colspan="4">
+       <widget class="Core::Utils::WelcomeModeLabel" name="demoTitleLabel">
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QComboBox" name="examplesComboBox">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <item>
+         <property name="text">
+          <string>Examples not installed</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QToolButton" name="openExampleButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Open</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>6</width>
+          <height>6</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QFrame" name="didyouKnowFrame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>400</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="styleSheet">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_11">
+      <property name="rightMargin">
+       <number>9</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="Core::Utils::WelcomeModeLabel" name="didYouKnowTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QTextBrowser" name="didYouKnowTextBrowser">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="frameShadow">
+         <enum>QFrame::Plain</enum>
+        </property>
+        <property name="verticalScrollBarPolicy">
+         <enum>Qt::ScrollBarAlwaysOff</enum>
+        </property>
+        <property name="horizontalScrollBarPolicy">
+         <enum>Qt::ScrollBarAlwaysOff</enum>
+        </property>
+        <property name="openExternalLinks">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <layout class="QGridLayout" name="gridLayout_10">
+        <property name="spacing">
+         <number>0</number>
+        </property>
+        <item row="0" column="0" colspan="2">
+         <spacer name="verticalSpacer_4">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeType">
+           <enum>QSizePolicy::Preferred</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>2</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item row="1" column="0">
+         <widget class="QToolButton" name="prevTipBtn">
+          <property name="styleSheet">
+           <string notr="true">QToolButton{
+	border-right:solid 0 px;
+	height:16px;
+	width:12px;
+}
+</string>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+          <property name="icon">
+           <iconset resource="../welcome/welcome.qrc">
+            <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
+          </property>
+          <property name="arrowType">
+           <enum>Qt::NoArrow</enum>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QToolButton" name="nextTipBtn">
+          <property name="styleSheet">
+           <string notr="true">QToolButton{
+	border-left:solid 0 px;
+	height:16px;
+	width:12px;
+}
+</string>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+          <property name="icon">
+           <iconset resource="../welcome/welcome.qrc">
+            <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
+          </property>
+          <property name="arrowType">
+           <enum>Qt::NoArrow</enum>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0" colspan="2">
+         <spacer name="verticalSpacer_3">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>2</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeTreeWidget</class>
+   <extends>QTreeWidget</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeLabel</class>
+   <extends>QLabel</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="../welcome/welcome.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
index 6b691397ac3ed5577adc29e50ba43eeff0db954f..a85ffcef011e6fdc409e650dc4f098070f9b18e6 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager
 QT += network
 include(../../qtcreatorplugin.pri)
 include(qt4projectmanager_dependencies.pri)
-
 HEADERS += qt4projectmanagerplugin.h \
     qt4projectmanager.h \
     qt4project.h \
@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \
     qtversionmanager.h \
     qtoptionspage.h \
     qtuicodemodelsupport.h \
-    externaleditors.h
+    externaleditors.h \
+    gettingstartedwelcomepagewidget.h \
+    gettingstartedwelcomepage.h
 SOURCES += qt4projectmanagerplugin.cpp \
     qt4projectmanager.cpp \
     qt4project.cpp \
@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \
     qtversionmanager.cpp \
     qtoptionspage.cpp \
     qtuicodemodelsupport.cpp \
-    externaleditors.cpp
+    externaleditors.cpp \
+    gettingstartedwelcomepagewidget.cpp \
+    gettingstartedwelcomepage.cpp
 FORMS += makestep.ui \
     qmakestep.ui \
     qt4projectconfigwidget.ui \
     embeddedpropertiespage.ui \
     qtversionmanager.ui \
-    showbuildlog.ui
+    showbuildlog.ui \
+    gettingstartedwelcomepagewidget.ui
 RESOURCES += qt4projectmanager.qrc \
     wizards/wizards.qrc
-
 include(../../shared/proparser/proparser.pri)
 include(qt-s60/qt-s60.pri)
 include(customwidgetwizard/customwidgetwizard.pri)
-
 DEFINES += QT_NO_CAST_TO_ASCII
 OTHER_FILES += Qt4ProjectManager.pluginspec
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
index e1bd37df3667b4a76b8d069736bf44339bdd93dc..9a493156ad5a2d69369b1f77fa1f3c33dd960d9b 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
+++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri
@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri)
 include(../../plugins/cppeditor/cppeditor.pri)
 include(../../plugins/help/help.pri)
 include(../../plugins/designer/designer.pri)
-include(../../plugins/welcome/welcome.pri)
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index f740c2775635a894853a2c3060864097ddd63006..e2dde775053ae0140e57be17fc1d6f764d1d3c6b 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -44,6 +44,8 @@
 #include "qtversionmanager.h"
 #include "qtoptionspage.h"
 #include "externaleditors.h"
+#include "gettingstartedwelcomepage.h"
+#include "gettingstartedwelcomepagewidget.h"
 
 #ifdef QTCREATOR_WITH_S60
 #include "qt-s60/s60manager.h"
@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin()
     delete m_proFileEditorFactory;
     removeObject(m_qt4ProjectManager);
     delete m_qt4ProjectManager;
+    removeObject(m_welcomePage);
+    delete m_welcomePage;
 }
 /*
 static Core::Command *createSeparator(Core::ActionManager *am,
@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance();
     Core::ActionManager *am = core->actionManager();
 
-    addAutoReleasedObject(new QtVersionManager());
+    QtVersionManager *mgr = new QtVersionManager();
+    addAutoReleasedObject(mgr);
     addAutoReleasedObject(new QtOptionsPage());
 
+    m_welcomePage = new GettingStartedWelcomePage;
+    addObject(m_welcomePage);
+    GettingStartedWelcomePageWidget *gswp =
+            static_cast<GettingStartedWelcomePageWidget*>(m_welcomePage->page());
+    connect(mgr, SIGNAL(updateExamples(QString,QString,QString)),
+            gswp, SLOT(updateExamples(QString,QString,QString)));
 
     //create and register objects
     m_qt4ProjectManager = new Qt4Manager(this);
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
index 18781bc82c98c0d4db1014695e349b2f74cdb921..5e3e016ce6115a1d0c60fdcd1f04017ba8fd3038 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h
@@ -49,6 +49,7 @@ class MakeStepFactory;
 class GccParserFactory;
 class MsvcParserFactory;
 class EmbeddedPropertiesPage;
+class GettingStartedWelcomePage;
 
 class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin
 {
@@ -81,6 +82,7 @@ private:
 
     QAction *m_runQMakeAction;
     QAction *m_runQMakeActionContextMenu;
+    GettingStartedWelcomePage *m_welcomePage;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index aa655204ffc4c42b032a97d160ae6c1b4e10568e..6bce576c7f8720363477bfa668d27be06d606478 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -42,7 +42,6 @@
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/modemanager.h>
-#include <welcome/welcomemode.h>
 #include <extensionsystem/pluginmanager.h>
 #include <help/helpplugin.h>
 #include <utils/qtcassert.h>
@@ -51,6 +50,7 @@
 #include <QtCore/QProcess>
 #include <QtCore/QSettings>
 #include <QtCore/QTime>
+#include <QtCore/QTimer>
 #include <QtGui/QApplication>
 #include <QtGui/QDesktopServices>
 
@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager()
     writeVersionsIntoSettings();
 
     updateDocumentation();
-    updateExamples();
+    // cannot call from ctor, needs to get connected extenernally first
+    QTimer::singleShot(0, this, SLOT(updateExamples()));
 }
 
 QtVersionManager::~QtVersionManager()
@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples()
         if (version->hasDemos())
             demosPath = version->demosPath();
         if (!examplesPath.isEmpty() && !demosPath.isEmpty()) {
-            if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>
-                    (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME)))
-                welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath());
+            emit updateExamples(examplesPath, demosPath, version->sourcePath());
             return;
         }
     }
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 0f2144c250076f03063c1ac872e53d058c76e682..fb7a33b412dad9e0b122cdb138b4dd23db0d3636 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -201,6 +201,10 @@ public:
 signals:
     void defaultQtVersionChanged();
     void qtVersionsChanged();
+    void updateExamples(QString, QString, QString);
+
+private slots:
+    void updateExamples();
 private:
     static QString findQMakeLine(const QString &directory);
     static QString trimLine(const QString line);
@@ -215,7 +219,6 @@ private:
     void addNewVersionsFromInstaller();
     void updateSystemVersion();
     void updateDocumentation();
-    void updateExamples();
 
     static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list);
     void updateUniqueIdToIndexMap();
diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0337fb113b1d71ea8a8a656da9bee8af1bd5b230
--- /dev/null
+++ b/src/plugins/welcome/communitywelcomepage.cpp
@@ -0,0 +1,48 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "communitywelcomepage.h"
+#include "communitywelcomepagewidget.h"
+
+
+namespace Welcome {
+namespace Internal {
+
+CommunityWelcomePage::CommunityWelcomePage()
+        : m_page(new CommunityWelcomePageWidget)
+{
+}
+
+QWidget* CommunityWelcomePage::page()
+{
+    return m_page;
+}
+
+} // namespace Internal
+} // namespace Welcome
diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h
new file mode 100644
index 0000000000000000000000000000000000000000..b6c047c3d7253a833c364670839ec16aa81c9eb0
--- /dev/null
+++ b/src/plugins/welcome/communitywelcomepage.h
@@ -0,0 +1,60 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef COMMUNITYWELCOMEPAGE_H
+#define COMMUNITYWELCOMEPAGE_H
+
+#include "welcome_global.h"
+
+#include <extensionsystem/iwelcomepage.h>
+
+namespace Welcome {
+namespace Internal {
+
+class CommunityWelcomePageWidget;
+
+class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage
+{
+    Q_OBJECT
+public:
+    CommunityWelcomePage();
+
+    QWidget *page();
+    QString title() const { return tr("Community"); }
+    int priority() const { return 30; }
+
+private:
+    CommunityWelcomePageWidget *m_page;
+
+};
+
+} // namespace Internal
+} // namespace Welcome
+
+#endif // COMMUNITYWELCOMEPAGE_H
diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..40c72fed57f3455e47ff4bb8b3eb74cff1f0fb32
--- /dev/null
+++ b/src/plugins/welcome/communitywelcomepagewidget.cpp
@@ -0,0 +1,79 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "communitywelcomepagewidget.h"
+#include "ui_communitywelcomepagewidget.h"
+
+#include "rssfetcher.h"
+
+#include <QtGui/QDesktopServices>
+
+namespace Welcome {
+namespace Internal {
+
+CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::CommunityWelcomePageWidget),
+    m_rssFetcher(new RSSFetcher(7))
+{
+    ui->setupUi(this);
+    ui->labsTitleLabel->setStyledText(tr("News From the Qt Labs"));
+    ui->sitesTitleLabel->setStyledText(tr("Qt Websites"));
+
+    connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+    connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
+
+    connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
+        ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
+    //: Add localized feed here only if one exists
+    m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
+
+    ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
+    ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
+    ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
+    ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
+    ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
+}
+
+CommunityWelcomePageWidget::~CommunityWelcomePageWidget()
+{
+    delete m_rssFetcher;
+    delete ui;
+}
+
+
+void CommunityWelcomePageWidget::slotUrlClicked(const QString &data)
+{
+    QDesktopServices::openUrl(QUrl(data));
+}
+
+
+
+} // namespace Internal
+} // namespace Welcome
diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..8da68feebf260efb078a1baa0bf61fd998dc08b4
--- /dev/null
+++ b/src/plugins/welcome/communitywelcomepagewidget.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef COMMUNITYWELCOMEPAGEWIDGET_H
+#define COMMUNITYWELCOMEPAGEWIDGET_H
+
+#include <QWidget>
+
+namespace Welcome {
+namespace Internal {
+
+class RSSFetcher;
+
+namespace Ui {
+    class CommunityWelcomePageWidget;
+}
+
+class CommunityWelcomePageWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    CommunityWelcomePageWidget(QWidget *parent = 0);
+    ~CommunityWelcomePageWidget();
+
+private slots:
+    void slotUrlClicked(const QString &data);
+
+
+private:
+    RSSFetcher *m_rssFetcher;
+    Ui::CommunityWelcomePageWidget *ui;
+};
+
+
+} // namespace Internal
+} // namespace Welcome
+#endif // COMMUNITYWELCOMEPAGEWIDGET_H
diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui
new file mode 100644
index 0000000000000000000000000000000000000000..7d05f30d70d6206caef42bbc319aca3783a23fe5
--- /dev/null
+++ b/src/plugins/welcome/communitywelcomepagewidget.ui
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Welcome::Internal::CommunityWelcomePageWidget</class>
+ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>667</width>
+    <height>352</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <item>
+    <widget class="QFrame" name="labsFrame">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Plain</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="Core::Utils::WelcomeModeLabel" name="labsTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>340</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerPixel</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <property name="columnCount">
+         <number>2</number>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <attribute name="headerDefaultSectionSize">
+         <number>24</number>
+        </attribute>
+        <attribute name="headerMinimumSectionSize">
+         <number>0</number>
+        </attribute>
+        <column>
+         <property name="text">
+          <string notr="true">1</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true">2</string>
+         </property>
+        </column>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="sitesFrame">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Plain</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="Core::Utils::WelcomeModeLabel" name="sitesTitleLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::NoFrame</enum>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::NoSelection</enum>
+        </property>
+        <property name="verticalScrollMode">
+         <enum>QAbstractItemView::ScrollPerPixel</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="uniformRowHeights">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <property name="columnCount">
+         <number>2</number>
+        </property>
+        <attribute name="headerVisible">
+         <bool>false</bool>
+        </attribute>
+        <attribute name="headerDefaultSectionSize">
+         <number>24</number>
+        </attribute>
+        <attribute name="headerMinimumSectionSize">
+         <number>0</number>
+        </attribute>
+        <column>
+         <property name="text">
+          <string notr="true">1</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true">2</string>
+         </property>
+        </column>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeTreeWidget</class>
+   <extends>QTreeWidget</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+  <customwidget>
+   <class>Core::Utils::WelcomeModeLabel</class>
+   <extends>QLabel</extends>
+   <header>utils/welcomemodetreewidget.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp
index f5fc756c9bb1f2262c192d9d64c312dd222c8c57..7254c2d00b9792101f397524cc42afde1c731a0e 100644
--- a/src/plugins/welcome/rssfetcher.cpp
+++ b/src/plugins/welcome/rssfetcher.cpp
@@ -43,7 +43,7 @@
 #include <sys/utsname.h>
 #endif
 
-using namespace Welcome;
+using namespace Welcome::Internal;
 
 static const QString getOsString()
 {
diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h
index 9267fdb47aeacb1d943a15f2df541970c66269cb..54ef87d7b619e0fcc80d4de7d42cde2868e9d41c 100644
--- a/src/plugins/welcome/rssfetcher.h
+++ b/src/plugins/welcome/rssfetcher.h
@@ -35,6 +35,7 @@
 #include <QtNetwork/QHttp>
 
 namespace Welcome {
+namespace Internal {
 
 class RSSFetcher : public QObject
 {
@@ -69,6 +70,7 @@ private:
 };
 
 } // namespace Welcome
+} // namespace Internal
 
 #endif // RSSFETCHER_H
 
diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro
index 11d48e82bc987a564de740073a287d016d452d6f..fb5cfc9e748b5c40b043bfc40e17300f802b2a50 100644
--- a/src/plugins/welcome/welcome.pro
+++ b/src/plugins/welcome/welcome.pro
@@ -5,11 +5,17 @@ include(../../qtcreatorplugin.pri)
 include(../../plugins/coreplugin/coreplugin.pri)
 HEADERS += welcomeplugin.h \
     welcomemode.h \
-    rssfetcher.h
+    rssfetcher.h \
+    communitywelcomepagewidget.h \
+    communitywelcomepage.h
 SOURCES += welcomeplugin.cpp \
     welcomemode.cpp \
-    rssfetcher.cpp
-FORMS += welcomemode.ui
+    rssfetcher.cpp \
+    communitywelcomepagewidget.cpp \
+    communitywelcomepage.cpp
+
+FORMS += welcomemode.ui \
+    communitywelcomepagewidget.ui
 RESOURCES += welcome.qrc
 DEFINES += WELCOME_LIBRARY
 OTHER_FILES += Welcome.pluginspec
diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp
index bc6a87682843442940698c018c78b2cf79246a83..6e973eb59da6cb78c7e2e084f30eb7331863f38c 100644
--- a/src/plugins/welcome/welcomemode.cpp
+++ b/src/plugins/welcome/welcomemode.cpp
@@ -28,11 +28,10 @@
 **************************************************************************/
 
 #include "welcomemode.h"
-#include "rssfetcher.h"
+#include <extensionsystem/pluginmanager.h>
+#include <extensionsystem/iwelcomepage.h>
 
 #include <coreplugin/icore.h>
-#include <coreplugin/dialogs/iwizard.h>
-
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/modemanager.h>
@@ -41,22 +40,22 @@
 #include <utils/styledbar.h>
 #include <utils/welcomemodetreewidget.h>
 
-#include <QtGui/QDesktopServices>
 #include <QtGui/QMouseEvent>
 #include <QtGui/QScrollArea>
 #include <QtGui/QButtonGroup>
+#include <QtGui/QDesktopServices>
+#include <QtGui/QToolButton>
 
-#include <QtCore/QDateTime>
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
-#include <QtCore/QDebug>
-#include <QtCore/QUrl>
 #include <QtCore/QSettings>
+#include <QtCore/QUrl>
+#include <QtCore/QDebug>
 
 #include <cstdlib>
 
 #include "ui_welcomemode.h"
 
+using namespace ExtensionSystem;
+
 namespace Welcome {
 
 struct WelcomeModePrivate
@@ -66,10 +65,9 @@ struct WelcomeModePrivate
     QScrollArea *m_scrollArea;
     QWidget *m_widget;
     QWidget *m_welcomePage;
-    QButtonGroup *btnGrp;
-    Ui::WelcomePage ui;
-    RSSFetcher *rssFetcher;
-    WelcomeMode::WelcomePageData lastData;
+    QMap<QAbstractButton*, QWidget*> buttonMap;
+    QHBoxLayout * buttonLayout;
+    Ui::WelcomeMode ui;
     int currentTip;
 };
 
@@ -77,46 +75,6 @@ WelcomeModePrivate::WelcomeModePrivate()
 {
 }
 
-// ---  WelcomePageData
-
-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const
-{
-    return previousSession == rhs.previousSession
-        && activeSession   == rhs.activeSession
-        && sessionList     == rhs.sessionList
-        && projectList     == rhs.projectList;
-}
-
-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const
-{
-    return previousSession != rhs.previousSession
-        || activeSession   != rhs.activeSession
-        || sessionList     != rhs.sessionList
-        || projectList     != rhs.projectList;
-}
-
-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d)
-{
-    dgb.nospace() << "PreviousSession=" << d.previousSession
-        << " activeSession=" << d.activeSession
-        << " sessionList=" << d.sessionList
-        << " projectList=" << d.projectList;
-    return dgb;
-}
-
-// Format a title + ruler for title labels
-static inline QString titleLabel(const QString &text)
-{
-    QString  rc = QLatin1String(
-    "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
-    "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">"
-    "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
-    "<span style=\" font-size:x-large; color:#555555;\">");
-    rc += text;
-    rc += QLatin1String("</span></p><hr/></body></html>");
-    return rc;
-}
-
 // ---  WelcomeMode
 WelcomeMode::WelcomeMode() :
     m_d(new WelcomeModePrivate)
@@ -126,22 +84,8 @@ WelcomeMode::WelcomeMode() :
     l->setMargin(0);
     l->setSpacing(0);
     l->addWidget(new Core::Utils::StyledBar(m_d->m_widget));
-    m_d->rssFetcher = new RSSFetcher(7, this);
     m_d->m_welcomePage = new QWidget(m_d->m_widget);
     m_d->ui.setupUi(m_d->m_welcomePage);
-    m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project")));
-    m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session")));
-    m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials")));
-    m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples")));
-    m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?")));
-    m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs")));
-    m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites")));
-    m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false);
-    m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false);
-    m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false);
-    m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false);
-    m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false);
-    m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false);
     m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect);
     m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect);
     l->addWidget(m_d->m_welcomePage);
@@ -151,71 +95,17 @@ WelcomeMode::WelcomeMode() :
     m_d->m_scrollArea->setWidget(m_d->m_widget);
     m_d->m_scrollArea->setWidgetResizable(true);
 
-    updateWelcomePage(WelcomePageData());
-
-    m_d->btnGrp = new QButtonGroup(this);
-    m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0);
-    m_d->btnGrp->addButton(m_d->ui.developSectButton, 1);
-    m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2);
-
-    connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int)));
+    PluginManager *pluginManager = PluginManager::instance();
+    connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject*)));
 
     connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback()));
-    connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions()));
-    connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject()));
-    connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString)));
-    connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString)));
-    connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-    connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString)));
-    connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&)));
-    connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample()));
-    connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int)));
-
-    connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)),
-        m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString)));
-
-    //: Add localized feed here only if one exists
-    m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed")));
-
-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com"));
-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com"));
-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org"));
-    m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org"));
-    m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196"));
-
-    m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"),
-                                        QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR));
-    m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"),
-                                        QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html"));
-    m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"),
-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html"));
-    m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"),
-                                        QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html"));
-    m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"),
-                                        QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html"));
-
-    srand(QDateTime::currentDateTime().toTime_t());
-    QStringList tips = tipsOfTheDay();
-    m_d->currentTip = rand()%tips.count();
-
-    QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document();
-    doc->setDefaultStyleSheet("a:link {color:black;}");
-    m_d->ui.didYouKnowTextBrowser->setDocument(doc);
-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
-
-    connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip()));
-    connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip()));
 
-    QSettings *settings = Core::ICore::instance()->settings();
-    int id = settings->value("General/WelcomeTab", 0).toInt();
-    m_d->btnGrp->button(id)->setChecked(true);
-    m_d->ui.stackedWidget->setCurrentIndex(id);
 }
 
 WelcomeMode::~WelcomeMode()
 {
     QSettings *settings = Core::ICore::instance()->settings();
-    settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId());
+    settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex());
     delete m_d->m_widget;
     delete m_d;
 }
@@ -252,150 +142,78 @@ QList<int> WelcomeMode::context() const
     return contexts;
 }
 
-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData)
-{
-    // Update only if data are modified
-    if (welcomePageData == m_d->lastData)
-        return;
-    m_d->lastData = welcomePageData;
-
-    m_d->m_widget->setUpdatesEnabled(false);
-    m_d->ui.sessTreeWidget->clear();
-    m_d->ui.projTreeWidget->clear();
-
-    if (welcomePageData.sessionList.count() > 0) {
-        foreach (const QString &s, welcomePageData.sessionList) {
-            QString str = s;
-            if (s == welcomePageData.previousSession)
-                str = tr("%1 (last session)").arg(s);
-            m_d->ui.sessTreeWidget->addItem(str, s);
-        }
-        m_d->ui.sessTreeWidget->updateGeometry();
-        m_d->ui.sessTreeWidget->show();
-    } else {
-        m_d->ui.sessTreeWidget->hide();
-    }
-
-    typedef QPair<QString, QString> QStringPair;
-    if (welcomePageData.projectList.count() > 0) {
-        foreach (const QStringPair &it, welcomePageData.projectList) {
-            QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first);
-            const QFileInfo fi(it.first);
-            item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath()));
-        }
-    } else {
-        m_d->ui.projTreeWidget->hide();
-    }
-    m_d->ui.projTreeWidget->updateGeometry();
-    m_d->m_widget->setUpdatesEnabled(true);
-}
-
-void WelcomeMode::activateEditMode()
-{
-    Core::ModeManager *modeManager = Core::ModeManager::instance();
-    if (modeManager->currentMode() == this)
-        modeManager->activateMode(Core::Constants::MODE_EDIT);
-}
-
-void WelcomeMode::slotSessionClicked(const QString &data)
-{
-    emit requestSession(data);
-    activateEditMode();
-}
-
-void WelcomeMode::slotProjectClicked(const QString &data)
+bool sortFunction(IWelcomePage * a, IWelcomePage *b)
 {
-    emit requestProject(data);
-    activateEditMode();
+    return a->priority() < b->priority();
 }
 
-void WelcomeMode::slotUrlClicked(const QString &data)
+void WelcomeMode::initPlugins()
 {
-    QDesktopServices::openUrl(QUrl(data));
-}
-
-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath)
-{
-    QString demoxml = demosPath + "/qtdemo/xml/examples.xml";
-    if (!QFile::exists(demoxml)) {
-        demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml";
-        if (!QFile::exists(demoxml))
-            return;
+    m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame);
+    m_d->buttonLayout->setMargin(0);
+    m_d->buttonLayout->setSpacing(0);
+    delete m_d->ui.stackedWidget->currentWidget();
+    QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
+    qSort(plugins.begin(), plugins.end(), &sortFunction);
+    foreach (IWelcomePage* plugin, plugins) {
+        QToolButton * btn = new QToolButton;
+        btn->setCheckable(true);
+        btn->setText(plugin->title());
+        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+        btn->setAutoExclusive(true);
+        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+        m_d->ui.stackedWidget->addWidget(plugin->page());
+        m_d->buttonLayout->addWidget(btn);
+        m_d->buttonMap.insert(btn, plugin->page());
     }
+    m_d->buttonLayout->addSpacing(5);
 
-    QFile description(demoxml);
-    if (!description.open(QFile::ReadOnly))
-        return;
-
-    m_d->ui.examplesComboBox->clear();
-    m_d->ui.examplesComboBox->setEnabled(true);
-
-    m_d->ui.examplesComboBox->addItem(tr("Choose an example..."));
-    QFont f = widget()->font();
-    f.setItalic(true);
-    m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole);
-    f.setItalic(false);
-    bool inExamples = false;
-    QString dirName;
-    QXmlStreamReader reader(&description);
-    while (!reader.atEnd()) {
-        switch (reader.readNext()) {
-            case QXmlStreamReader::StartElement:
-            if (reader.name() == "category") {
-                QString name = reader.attributes().value(QLatin1String("name")).toString();
-                if (name.contains("tutorial"))
-                    break;
-                dirName = reader.attributes().value(QLatin1String("dirname")).toString();
-                m_d->ui.examplesComboBox->addItem(name);
-                f.setBold(true);
-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole);
-                f.setBold(false);
-                inExamples = true;
-            }
-            if (inExamples && reader.name() == "example") {
-                QString name = reader.attributes().value(QLatin1String("name")).toString();
-                QString fn = reader.attributes().value(QLatin1String("filename")).toString();
-                QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro";
-                QString fileName = examplePath + relativeProPath;
-                if (!QFile::exists(fileName))
-                    fileName = sourcePath + "/examples" + relativeProPath;
-                QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html";
-
-                m_d->ui.examplesComboBox->addItem("  " + name, fileName);
-                m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1);
+    QSettings *settings = Core::ICore::instance()->settings();
+    int tabId = settings->value("General/WelcomeTab", 0).toInt();
+
+    int pluginCount = m_d->ui.stackedWidget->count();
+    if (tabId < pluginCount) {
+        m_d->ui.stackedWidget->setCurrentIndex(tabId);
+        QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap);
+        while (it.hasNext())
+            if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) {
+                it.key()->setChecked(true);
+                break;
             }
-            break;
-            case QXmlStreamReader::EndElement:
-            if (reader.name() == "category")
-                inExamples = false;
-            break;
-            default:
-            break;
-        }
     }
+
 }
 
-void WelcomeMode::slotEnableExampleButton(int index)
-{
-    QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString();
-    m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty());
+void WelcomeMode::welcomePluginAdded(QObject *obj)
+{
+    if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj))
+    {
+        QToolButton * btn = new QToolButton;
+        btn->setCheckable(true);
+        btn->setAutoExclusive(true);
+        btn->setText(plugin->title());
+        btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+        connect (btn, SIGNAL(clicked()), SLOT(showClickedPage()));
+        int insertPos = 0;
+        QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>();
+        foreach (IWelcomePage* p, plugins) {
+            if (plugin->priority() < p->priority())
+                insertPos++;
+            else
+                break;
+        }
+        m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page());
+        m_d->buttonMap.insert(btn, plugin->page());
+        m_d->buttonLayout->insertWidget(insertPos, btn);
+    }
 }
 
-void WelcomeMode::slotOpenExample()
+void WelcomeMode::showClickedPage()
 {
-    QComboBox *box = m_d->ui.examplesComboBox;
-    QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString();
-    QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString();
-    QStringList files;
-    QFileInfo fi(proFile);
-    QString tryFile = fi.path() + "/main.cpp";
-    files << proFile;
-    if(!QFile::exists(tryFile))
-        tryFile = fi.path() + '/' + fi.baseName() + ".cpp";
-    if(QFile::exists(tryFile))
-        files << tryFile;
-    Core::ICore::instance()->openFiles(files);
-    emit openContextHelpPage(helpFile);
+    QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender());
+    QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn);
+    if (it.value())
+        m_d->ui.stackedWidget->setCurrentWidget(it.value());
 }
 
 void WelcomeMode::slotFeedback()
@@ -404,71 +222,5 @@ void WelcomeMode::slotFeedback()
             "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view")));
 }
 
-void WelcomeMode::slotCreateNewProject()
-{
-    Core::ICore::instance()->showNewItemDialog(tr("New Project..."),
-                                               Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard));
-}
-
-void WelcomeMode::slotNextTip()
-{
-    QStringList tips = tipsOfTheDay();
-    m_d->currentTip = ((m_d->currentTip+1)%tips.count());
-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
-}
-
-void WelcomeMode::slotPrevTip()
-{
-    QStringList tips = tipsOfTheDay();
-    m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count();
-    m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip));
-}
-
-QStringList WelcomeMode::tipsOfTheDay()
-{
-    static QStringList tips;
-    if (tips.isEmpty()) {
-        QString altShortcut =
-#ifdef Q_WS_MAC
-            tr("Cmd", "Shortcut key");
-#else
-            tr("Alt", "Shortcut key");
-#endif
-        tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>"
-                       "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>"
-                       "<li></li><li>6 - Output</li></ul>"));
-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
-        tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut));
-        tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting &quot;Whole Words&quot; "
-                       "or &quot;Case Sensitive&quot;. Simply click on the icons on the right end of the line edit."));                       
-        tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\""
-                       ">external libraries</a>, Qt Creator will automatically offer syntax highlighting "
-                        "and code completion."));
-        tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> "
-                       "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>."));
-        tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>."));
-        tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator &lt;sessionname&gt;</tt>."));
-        tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>."));
-        //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac)
-        tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted "
-                       "on the buttons at the window bottom:"
-                       "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>"
-                       "<li>4 - Compile Output</li></ul>").arg(altShortcut));
-        tips.append(tr("You can quickly search methods, classes, help and more using the "
-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>)."));
-        tips.append(tr("You can add custom build steps in the "
-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>."));
-        tips.append(tr("Within a session, you can add "
-                       "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects."));
-        tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>."));
-        tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> "
-                       "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new "
-                       "target in the combo box."));
-        tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">"
-                       "revision control systems</a> such as Subversion, Perforce and Git."));
-        tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file."));
-    }
-    return tips;
-}
 
 } // namespace Welcome
diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h
index 0555ce60f30ce1fa2fb640f8236045fc607eb684..1576d2489b3b0036bb198d833c537b97e8e1eb36 100644
--- a/src/plugins/welcome/welcomemode.h
+++ b/src/plugins/welcome/welcomemode.h
@@ -54,18 +54,6 @@ public:
     WelcomeMode();
     ~WelcomeMode();
 
-    struct WelcomePageData{
-        bool operator==(const WelcomePageData &rhs) const;
-        bool operator!=(const WelcomePageData &rhs) const;
-
-        QString previousSession;
-        QString activeSession;
-        QStringList sessionList;
-        QList<QPair<QString, QString> > projectList; // pair of filename, displayname
-    };
-
-    void updateWelcomePage(const WelcomePageData &welcomePageData);
-
     // IMode
     QString name() const;
     QIcon icon() const;
@@ -75,31 +63,14 @@ public:
     QList<int> context() const;
     void activated();
     QString contextHelpId() const { return QLatin1String("Qt Creator"); }
-
-    void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath);
-
-signals:
-    void requestProject(const QString &project);
-    void requestSession(const QString &session);
-    void openHelpPage(const QString& url);
-    void openContextHelpPage(const QString& url);
-    void manageSessions();
+    void initPlugins();
 
 private slots:
     void slotFeedback();
-    void slotSessionClicked(const QString &data);
-    void slotProjectClicked(const QString &data);
-    void slotUrlClicked(const QString &data);
-    void slotEnableExampleButton(int);
-    void slotOpenExample();
-    void slotCreateNewProject();
-    void slotNextTip();
-    void slotPrevTip();
+    void welcomePluginAdded(QObject*);
+    void showClickedPage();
 
 private:
-    void activateEditMode();
-    QStringList tipsOfTheDay();
-
     WelcomeModePrivate *m_d;
 };
 
diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui
index c70aabbafa596945238dac13f671c0e704f899fe..e1c18bde915df9ad104b728a87fae44a5dccf400 100644
--- a/src/plugins/welcome/welcomemode.ui
+++ b/src/plugins/welcome/welcomemode.ui
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>Welcome::WelcomePage</class>
- <widget class="QWidget" name="Core::Utils::WelcomePage">
+ <class>Welcome::WelcomeMode</class>
+ <widget class="QWidget" name="Welcome::WelcomeMode">
   <property name="geometry">
    <rect>
     <x>0</x>
@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>10</height>
+            </size>
+           </property>
            <property name="font">
             <font>
              <weight>50</weight>
@@ -238,129 +244,6 @@ QToolButton:pressed {
            <property name="frameShadow">
             <enum>QFrame::Plain</enum>
            </property>
-           <layout class="QGridLayout" name="gridLayout_2">
-            <property name="margin">
-             <number>0</number>
-            </property>
-            <property name="spacing">
-             <number>0</number>
-            </property>
-            <item row="0" column="0">
-             <widget class="QToolButton" name="gettingStartedSectButton">
-              <property name="enabled">
-               <bool>true</bool>
-              </property>
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>0</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="font">
-               <font>
-                <pointsize>-1</pointsize>
-               </font>
-              </property>
-              <property name="styleSheet">
-               <string notr="true"/>
-              </property>
-              <property name="text">
-               <string>Getting Started</string>
-              </property>
-              <property name="checkable">
-               <bool>true</bool>
-              </property>
-              <property name="checked">
-               <bool>true</bool>
-              </property>
-              <property name="autoExclusive">
-               <bool>false</bool>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <widget class="QToolButton" name="developSectButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>0</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="font">
-               <font>
-                <pointsize>-1</pointsize>
-               </font>
-              </property>
-              <property name="text">
-               <string>Develop</string>
-              </property>
-              <property name="checkable">
-               <bool>true</bool>
-              </property>
-              <property name="autoExclusive">
-               <bool>false</bool>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="2">
-             <widget class="QToolButton" name="communitySectButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>0</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="font">
-               <font>
-                <pointsize>-1</pointsize>
-               </font>
-              </property>
-              <property name="styleSheet">
-               <string notr="true"/>
-              </property>
-              <property name="text">
-               <string>Community</string>
-              </property>
-              <property name="checkable">
-               <bool>true</bool>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="3">
-             <spacer name="horizontalSpacer_2">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeType">
-               <enum>QSizePolicy::Fixed</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>5</width>
-                <height>20</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-           </layout>
           </widget>
          </item>
          <item>
@@ -368,575 +251,7 @@ QToolButton:pressed {
            <property name="currentIndex">
             <number>0</number>
            </property>
-           <widget class="QWidget" name="gettingStartedPage">
-            <layout class="QGridLayout" name="gridLayout_9">
-             <property name="leftMargin">
-              <number>18</number>
-             </property>
-             <property name="topMargin">
-              <number>18</number>
-             </property>
-             <property name="rightMargin">
-              <number>12</number>
-             </property>
-             <property name="bottomMargin">
-              <number>18</number>
-             </property>
-             <property name="spacing">
-              <number>24</number>
-             </property>
-             <item row="0" column="0" rowspan="2">
-              <widget class="QFrame" name="tutorialsFrame">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>400</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="styleSheet">
-                <string/>
-               </property>
-               <layout class="QGridLayout" name="gridLayout_6">
-                <item row="0" column="0">
-                 <widget class="QLabel" name="tutorialsTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="0">
-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="focusPolicy">
-                   <enum>Qt::NoFocus</enum>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="selectionMode">
-                   <enum>QAbstractItemView::NoSelection</enum>
-                  </property>
-                  <property name="verticalScrollMode">
-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
-                  </property>
-                  <property name="rootIsDecorated">
-                   <bool>false</bool>
-                  </property>
-                  <property name="uniformRowHeights">
-                   <bool>true</bool>
-                  </property>
-                  <property name="allColumnsShowFocus">
-                   <bool>true</bool>
-                  </property>
-                  <property name="columnCount">
-                   <number>2</number>
-                  </property>
-                  <attribute name="headerVisible">
-                   <bool>false</bool>
-                  </attribute>
-                  <attribute name="headerDefaultSectionSize">
-                   <number>24</number>
-                  </attribute>
-                  <attribute name="headerMinimumSectionSize">
-                   <number>0</number>
-                  </attribute>
-                  <column>
-                   <property name="text">
-                    <string notr="true">1</string>
-                   </property>
-                  </column>
-                  <column>
-                   <property name="text">
-                    <string notr="true">2</string>
-                   </property>
-                  </column>
-                 </widget>
-                </item>
-               </layout>
-              </widget>
-             </item>
-             <item row="0" column="1">
-              <widget class="QFrame" name="demosExamplesFrame">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>400</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="styleSheet">
-                <string/>
-               </property>
-               <layout class="QGridLayout" name="gridLayout_8">
-                <property name="rightMargin">
-                 <number>8</number>
-                </property>
-                <property name="horizontalSpacing">
-                 <number>0</number>
-                </property>
-                <item row="0" column="0" colspan="4">
-                 <widget class="QLabel" name="demoTitleLabel">
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="0">
-                 <widget class="QComboBox" name="examplesComboBox">
-                  <property name="enabled">
-                   <bool>false</bool>
-                  </property>
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <item>
-                   <property name="text">
-                    <string>Examples not installed</string>
-                   </property>
-                  </item>
-                 </widget>
-                </item>
-                <item row="1" column="2">
-                 <widget class="QToolButton" name="openExampleButton">
-                  <property name="enabled">
-                   <bool>false</bool>
-                  </property>
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="text">
-                   <string>Open</string>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="1">
-                 <spacer name="horizontalSpacer">
-                  <property name="orientation">
-                   <enum>Qt::Horizontal</enum>
-                  </property>
-                  <property name="sizeType">
-                   <enum>QSizePolicy::Fixed</enum>
-                  </property>
-                  <property name="sizeHint" stdset="0">
-                   <size>
-                    <width>6</width>
-                    <height>6</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-               </layout>
-              </widget>
-             </item>
-             <item row="1" column="1">
-              <widget class="QFrame" name="didyouKnowFrame">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="maximumSize">
-                <size>
-                 <width>400</width>
-                 <height>16777215</height>
-                </size>
-               </property>
-               <property name="styleSheet">
-                <string/>
-               </property>
-               <layout class="QGridLayout" name="gridLayout_11">
-                <property name="rightMargin">
-                 <number>9</number>
-                </property>
-                <item row="0" column="0">
-                 <widget class="QLabel" name="didYouKnowTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="0" colspan="2">
-                 <widget class="QTextBrowser" name="didYouKnowTextBrowser">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="frameShadow">
-                   <enum>QFrame::Plain</enum>
-                  </property>
-                  <property name="verticalScrollBarPolicy">
-                   <enum>Qt::ScrollBarAlwaysOff</enum>
-                  </property>
-                  <property name="horizontalScrollBarPolicy">
-                   <enum>Qt::ScrollBarAlwaysOff</enum>
-                  </property>
-                  <property name="openExternalLinks">
-                   <bool>true</bool>
-                  </property>
-                 </widget>
-                </item>
-                <item row="0" column="1">
-                 <layout class="QGridLayout" name="gridLayout_10">
-                  <property name="spacing">
-                   <number>0</number>
-                  </property>
-                  <item row="0" column="0" colspan="2">
-                   <spacer name="verticalSpacer_4">
-                    <property name="orientation">
-                     <enum>Qt::Vertical</enum>
-                    </property>
-                    <property name="sizeType">
-                     <enum>QSizePolicy::Preferred</enum>
-                    </property>
-                    <property name="sizeHint" stdset="0">
-                     <size>
-                      <width>20</width>
-                      <height>2</height>
-                     </size>
-                    </property>
-                   </spacer>
-                  </item>
-                  <item row="1" column="0">
-                   <widget class="QToolButton" name="prevTipBtn">
-                    <property name="styleSheet">
-                     <string notr="true">QToolButton{
-	border-right:solid 0 px;
-	height:16px;
-	width:12px;
-}
-</string>
-                    </property>
-                    <property name="text">
-                     <string/>
-                    </property>
-                    <property name="icon">
-                     <iconset resource="welcome.qrc">
-                      <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
-                    </property>
-                    <property name="arrowType">
-                     <enum>Qt::NoArrow</enum>
-                    </property>
-                   </widget>
-                  </item>
-                  <item row="1" column="1">
-                   <widget class="QToolButton" name="nextTipBtn">
-                    <property name="styleSheet">
-                     <string notr="true">QToolButton{
-	border-left:solid 0 px;
-	height:16px;
-	width:12px;
-}
-</string>
-                    </property>
-                    <property name="text">
-                     <string/>
-                    </property>
-                    <property name="icon">
-                     <iconset resource="welcome.qrc">
-                      <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
-                    </property>
-                    <property name="arrowType">
-                     <enum>Qt::NoArrow</enum>
-                    </property>
-                   </widget>
-                  </item>
-                  <item row="2" column="0" colspan="2">
-                   <spacer name="verticalSpacer_3">
-                    <property name="orientation">
-                     <enum>Qt::Vertical</enum>
-                    </property>
-                    <property name="sizeHint" stdset="0">
-                     <size>
-                      <width>20</width>
-                      <height>2</height>
-                     </size>
-                    </property>
-                   </spacer>
-                  </item>
-                 </layout>
-                </item>
-               </layout>
-              </widget>
-             </item>
-            </layout>
-           </widget>
-           <widget class="QWidget" name="developPage">
-            <layout class="QGridLayout" name="gridLayout_4">
-             <property name="margin">
-              <number>18</number>
-             </property>
-             <property name="spacing">
-              <number>24</number>
-             </property>
-             <item row="0" column="0">
-              <widget class="QFrame" name="recentSessionsFrame">
-               <property name="sizePolicy">
-                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                 <horstretch>0</horstretch>
-                 <verstretch>0</verstretch>
-                </sizepolicy>
-               </property>
-               <property name="minimumSize">
-                <size>
-                 <width>270</width>
-                 <height>130</height>
-                </size>
-               </property>
-               <property name="styleSheet">
-                <string/>
-               </property>
-               <layout class="QGridLayout" name="gridLayout_3">
-                <property name="horizontalSpacing">
-                 <number>0</number>
-                </property>
-                <property name="verticalSpacing">
-                 <number>3</number>
-                </property>
-                <item row="0" column="0" colspan="3">
-                 <widget class="QLabel" name="recentSessionsTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="0" colspan="3">
-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="focusPolicy">
-                   <enum>Qt::NoFocus</enum>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="selectionMode">
-                   <enum>QAbstractItemView::NoSelection</enum>
-                  </property>
-                  <property name="verticalScrollMode">
-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
-                  </property>
-                  <property name="rootIsDecorated">
-                   <bool>false</bool>
-                  </property>
-                  <property name="uniformRowHeights">
-                   <bool>true</bool>
-                  </property>
-                  <property name="allColumnsShowFocus">
-                   <bool>true</bool>
-                  </property>
-                  <property name="columnCount">
-                   <number>2</number>
-                  </property>
-                  <attribute name="headerVisible">
-                   <bool>false</bool>
-                  </attribute>
-                  <attribute name="headerDefaultSectionSize">
-                   <number>24</number>
-                  </attribute>
-                  <attribute name="headerMinimumSectionSize">
-                   <number>0</number>
-                  </attribute>
-                  <column>
-                   <property name="text">
-                    <string notr="true">1</string>
-                   </property>
-                  </column>
-                  <column>
-                   <property name="text">
-                    <string notr="true">2</string>
-                   </property>
-                  </column>
-                 </widget>
-                </item>
-                <item row="3" column="0">
-                 <widget class="QPushButton" name="manageSessionsButton">
-                  <property name="focusPolicy">
-                   <enum>Qt::TabFocus</enum>
-                  </property>
-                  <property name="text">
-                   <string>Manage Sessions...</string>
-                  </property>
-                 </widget>
-                </item>
-                <item row="4" column="0">
-                 <spacer name="verticalSpacer">
-                  <property name="orientation">
-                   <enum>Qt::Vertical</enum>
-                  </property>
-                  <property name="sizeHint" stdset="0">
-                   <size>
-                    <width>20</width>
-                    <height>40</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-               </layout>
-              </widget>
-             </item>
-             <item row="0" column="2">
-              <widget class="QFrame" name="recentProjectsFrame">
-               <property name="styleSheet">
-                <string/>
-               </property>
-               <layout class="QGridLayout" name="gridLayout_5">
-                <property name="horizontalSpacing">
-                 <number>0</number>
-                </property>
-                <property name="verticalSpacing">
-                 <number>3</number>
-                </property>
-                <property name="rightMargin">
-                 <number>9</number>
-                </property>
-                <item row="0" column="0" colspan="3">
-                 <widget class="QLabel" name="projTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item row="1" column="0" colspan="3">
-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="focusPolicy">
-                   <enum>Qt::NoFocus</enum>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="selectionMode">
-                   <enum>QAbstractItemView::NoSelection</enum>
-                  </property>
-                  <property name="verticalScrollMode">
-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
-                  </property>
-                  <property name="rootIsDecorated">
-                   <bool>false</bool>
-                  </property>
-                  <property name="uniformRowHeights">
-                   <bool>true</bool>
-                  </property>
-                  <property name="allColumnsShowFocus">
-                   <bool>true</bool>
-                  </property>
-                  <property name="columnCount">
-                   <number>2</number>
-                  </property>
-                  <attribute name="headerVisible">
-                   <bool>false</bool>
-                  </attribute>
-                  <attribute name="headerDefaultSectionSize">
-                   <number>24</number>
-                  </attribute>
-                  <attribute name="headerMinimumSectionSize">
-                   <number>0</number>
-                  </attribute>
-                  <column>
-                   <property name="text">
-                    <string notr="true">1</string>
-                   </property>
-                  </column>
-                  <column>
-                   <property name="text">
-                    <string notr="true">2</string>
-                   </property>
-                  </column>
-                 </widget>
-                </item>
-                <item row="3" column="0">
-                 <widget class="QPushButton" name="createNewProjectButton">
-                  <property name="focusPolicy">
-                   <enum>Qt::TabFocus</enum>
-                  </property>
-                  <property name="text">
-                   <string>Create New Project...</string>
-                  </property>
-                  <property name="flat">
-                   <bool>true</bool>
-                  </property>
-                 </widget>
-                </item>
-                <item row="4" column="0">
-                 <spacer name="verticalSpacer_2">
-                  <property name="orientation">
-                   <enum>Qt::Vertical</enum>
-                  </property>
-                  <property name="sizeHint" stdset="0">
-                   <size>
-                    <width>20</width>
-                    <height>40</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-               </layout>
-              </widget>
-             </item>
-            </layout>
-           </widget>
-           <widget class="QWidget" name="communityPage">
+           <widget class="QWidget" name="widget">
             <layout class="QGridLayout" name="gridLayout_7">
              <property name="margin">
               <number>18</number>
@@ -944,168 +259,6 @@ QToolButton:pressed {
              <property name="spacing">
               <number>24</number>
              </property>
-             <item row="0" column="0">
-              <widget class="QFrame" name="labsFrame">
-               <property name="frameShape">
-                <enum>QFrame::NoFrame</enum>
-               </property>
-               <property name="frameShadow">
-                <enum>QFrame::Plain</enum>
-               </property>
-               <layout class="QVBoxLayout" name="verticalLayout_2">
-                <item>
-                 <widget class="QLabel" name="labsTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="minimumSize">
-                   <size>
-                    <width>340</width>
-                    <height>0</height>
-                   </size>
-                  </property>
-                  <property name="focusPolicy">
-                   <enum>Qt::NoFocus</enum>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="selectionMode">
-                   <enum>QAbstractItemView::NoSelection</enum>
-                  </property>
-                  <property name="verticalScrollMode">
-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
-                  </property>
-                  <property name="rootIsDecorated">
-                   <bool>false</bool>
-                  </property>
-                  <property name="uniformRowHeights">
-                   <bool>true</bool>
-                  </property>
-                  <property name="allColumnsShowFocus">
-                   <bool>true</bool>
-                  </property>
-                  <property name="columnCount">
-                   <number>2</number>
-                  </property>
-                  <attribute name="headerVisible">
-                   <bool>false</bool>
-                  </attribute>
-                  <attribute name="headerDefaultSectionSize">
-                   <number>24</number>
-                  </attribute>
-                  <attribute name="headerMinimumSectionSize">
-                   <number>0</number>
-                  </attribute>
-                  <column>
-                   <property name="text">
-                    <string notr="true">1</string>
-                   </property>
-                  </column>
-                  <column>
-                   <property name="text">
-                    <string notr="true">2</string>
-                   </property>
-                  </column>
-                 </widget>
-                </item>
-               </layout>
-              </widget>
-             </item>
-             <item row="0" column="1">
-              <widget class="QFrame" name="sitesFrame">
-               <property name="frameShape">
-                <enum>QFrame::NoFrame</enum>
-               </property>
-               <property name="frameShadow">
-                <enum>QFrame::Plain</enum>
-               </property>
-               <layout class="QVBoxLayout" name="verticalLayout_3">
-                <item>
-                 <widget class="QLabel" name="sitesTitleLabel">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment">
-                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="focusPolicy">
-                   <enum>Qt::NoFocus</enum>
-                  </property>
-                  <property name="frameShape">
-                   <enum>QFrame::NoFrame</enum>
-                  </property>
-                  <property name="selectionMode">
-                   <enum>QAbstractItemView::NoSelection</enum>
-                  </property>
-                  <property name="verticalScrollMode">
-                   <enum>QAbstractItemView::ScrollPerPixel</enum>
-                  </property>
-                  <property name="rootIsDecorated">
-                   <bool>false</bool>
-                  </property>
-                  <property name="uniformRowHeights">
-                   <bool>true</bool>
-                  </property>
-                  <property name="allColumnsShowFocus">
-                   <bool>true</bool>
-                  </property>
-                  <property name="columnCount">
-                   <number>2</number>
-                  </property>
-                  <attribute name="headerVisible">
-                   <bool>false</bool>
-                  </attribute>
-                  <attribute name="headerDefaultSectionSize">
-                   <number>24</number>
-                  </attribute>
-                  <attribute name="headerMinimumSectionSize">
-                   <number>0</number>
-                  </attribute>
-                  <column>
-                   <property name="text">
-                    <string notr="true">1</string>
-                   </property>
-                  </column>
-                  <column>
-                   <property name="text">
-                    <string notr="true">2</string>
-                   </property>
-                  </column>
-                 </widget>
-                </item>
-               </layout>
-              </widget>
-             </item>
             </layout>
            </widget>
           </widget>
@@ -1219,13 +372,6 @@ QToolButton:pressed {
    </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>Core::Utils::WelcomeModeTreeWidget</class>
-   <extends>QTreeWidget</extends>
-   <header>utils/welcomemodetreewidget.h</header>
-  </customwidget>
- </customwidgets>
  <resources>
   <include location="welcome.qrc"/>
  </resources>
diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp
index e9743a9428c394fe89e9892e772e3927e0e786e9..e7906f14bcf0fd41066a7e72ebd05a1e1ef6ab98 100644
--- a/src/plugins/welcome/welcomeplugin.cpp
+++ b/src/plugins/welcome/welcomeplugin.cpp
@@ -31,6 +31,8 @@
 
 #include "welcomemode.h"
 
+#include "communitywelcomepage.h"
+
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/basemode.h>
 #include <coreplugin/coreconstants.h>
@@ -45,11 +47,10 @@
 #include <QtGui/QMessageBox>
 #include <QtGui/QPushButton>
 
-using namespace Welcome;
-
+using namespace Welcome::Internal;
 
 WelcomePlugin::WelcomePlugin()
-  : m_welcomeMode(0)
+  : m_welcomeMode(0), m_communityWelcomePage(0)
 {
 }
 
@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin()
         removeObject(m_welcomeMode);
         delete m_welcomeMode;
     }
+    if (m_communityWelcomePage) {
+        removeObject(m_communityWelcomePage);
+        delete m_communityWelcomePage;
+    }
 }
 
 /*! Initializes the plugin. Returns true on success.
@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
     Q_UNUSED(arguments)
     Q_UNUSED(error_message)
 
+    m_communityWelcomePage = new Internal::CommunityWelcomePage;
+    addObject(m_communityWelcomePage);
+
     m_welcomeMode = new WelcomeMode;
     addObject(m_welcomeMode);
 
@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess
 */
 void WelcomePlugin::extensionsInitialized()
 {
+    m_welcomeMode->initPlugins();
     Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName());
 }
 
diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h
index 970ec399500b5174398ffe45fb4b0af85eaf3f73..54275b045cb26a319aab301638743c2ec4cb0a5c 100644
--- a/src/plugins/welcome/welcomeplugin.h
+++ b/src/plugins/welcome/welcomeplugin.h
@@ -36,6 +36,9 @@ namespace Welcome {
 
 class WelcomeMode;
 
+namespace Internal {
+class CommunityWelcomePage;
+
 class WelcomePlugin
   : public ExtensionSystem::IPlugin
 {
@@ -51,8 +54,10 @@ public:
 
 private:
     WelcomeMode *m_welcomeMode;
+    Internal::CommunityWelcomePage *m_communityWelcomePage;
 };
 
 } // namespace Welcome
+} // namespace Internal
 
 #endif // WELCOMEPLUGIN_H
diff --git a/tests/manual/trk/trkserver.cpp b/tests/manual/trk/trkserver.cpp
index c36169b059154de862d270bc194d5106bedac79f..83cea50c3968b473f757bc57126d40411e3d37f4 100644
--- a/tests/manual/trk/trkserver.cpp
+++ b/tests/manual/trk/trkserver.cpp
@@ -118,7 +118,7 @@ public:
     void setServerName(const QString &name) { m_serverName = name; }
     void setMemoryDumpName(const QString &source) { m_memoryDumpName = source; }
     void setVerbose(int v) { m_verbose = v; }
-    void startServer();
+    bool startServer();
 
 private slots:
     void handleConnection();
@@ -157,25 +157,29 @@ TrkServer::~TrkServer()
     m_server.close();
 }
 
-void TrkServer::startServer()
+bool TrkServer::startServer()
 {
     QFile file(m_memoryDumpName);
-    file.open(QIODevice::ReadOnly);
+    if (!file.open(QIODevice::ReadOnly)) {
+        logMessage(QString::fromLatin1("Unable to read %1: %2").arg(m_memoryDumpName, file.errorString()), true);
+        return false;
+    }
     m_memoryData = file.readAll();
     file.close();
 
     logMessage(QString("Read %1 bytes of data from %2")
-        .arg(m_memoryData.size()).arg(m_memoryDumpName));
+        .arg(m_memoryData.size()).arg(m_memoryDumpName), true);
 
     m_lastSent = 0;
     if (!m_server.listen(m_serverName)) {
         logMessage(QString("Error: Unable to start the TRK server %1: %2.")
             .arg(m_serverName).arg(m_server.errorString()), true);
-        return;
+        return false;
     }
 
     logMessage("The TRK server '" + m_serverName + "'is running. Run the adapter now.", true);
     connect(&m_server, SIGNAL(newConnection()), this, SLOT(handleConnection()));
+    return true;
 }
 
 void TrkServer::logMessage(const QString &msg, bool force)
@@ -384,7 +388,8 @@ int main(int argc, char *argv[])
     server.setServerName(options.serverName);
     server.setMemoryDumpName(options.dumpName);
     server.setVerbose(options.verbose);
-    server.startServer();
+    if (!server.startServer())
+        return -1;
 
     return app.exec();
 }