diff --git a/src/libs/utils/wizard.cpp b/src/libs/utils/wizard.cpp
index 90d7a1746b2a744c22357673a82c5b4156535e3c..2c6340e1184848f6bf659c4d2f7e8d47da56eb20 100644
--- a/src/libs/utils/wizard.cpp
+++ b/src/libs/utils/wizard.cpp
@@ -337,6 +337,12 @@ WizardProgress *Wizard::wizardProgress() const
     return d->m_wizardProgress;
 }
 
+bool Wizard::validateCurrentPage()
+{
+    emit nextClicked();
+    return QWizard::validateCurrentPage();
+}
+
 void Wizard::_q_currentPageChanged(int pageId)
 {
     Q_D(Wizard);
diff --git a/src/libs/utils/wizard.h b/src/libs/utils/wizard.h
index 94993deb30aec23905048cdca6bee73216b32157..e116637a449877ae65fe9743030c4dfb5fef4e21 100644
--- a/src/libs/utils/wizard.h
+++ b/src/libs/utils/wizard.h
@@ -57,6 +57,11 @@ public:
     void setStartId(int pageId);
 
     WizardProgress *wizardProgress() const;
+    virtual bool validateCurrentPage();
+
+signals:
+    void nextClicked(); /* workaround for QWizard behavior where page->initialize is
+                           called before currentIdChanged */
 
 private slots:
     void _q_currentPageChanged(int pageId);
diff --git a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
index dfb3ff6b50c47d7018b4cabb131bd78be432f014..ed63b5351b0ad24a41e3a25b85cf7ffda4401e2b 100644
--- a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
+++ b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
@@ -44,14 +44,12 @@ struct BaseProjectWizardDialogPrivate {
     const int desiredIntroPageId;
     Utils::ProjectIntroPage *introPage;
     int introPageId;
-    int lastId;
 };
 
 BaseProjectWizardDialogPrivate::BaseProjectWizardDialogPrivate(Utils::ProjectIntroPage *page, int id) :
     desiredIntroPageId(id),
     introPage(page),
-    introPageId(-1),
-    lastId(-1)
+    introPageId(-1)
 {
 }
 
@@ -82,7 +80,7 @@ void BaseProjectWizardDialog::init()
     }
     wizardProgress()->item(d->introPageId)->setTitle(tr("Location"));
     connect(this, SIGNAL(accepted()), this, SLOT(slotAccepted()));
-    connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotBaseCurrentIdChanged(int)));
+    connect(this, SIGNAL(nextClicked()), this, SLOT(nextClicked()));
 }
 
 BaseProjectWizardDialog::~BaseProjectWizardDialog()
@@ -125,12 +123,11 @@ void BaseProjectWizardDialog::slotAccepted()
     }
 }
 
-void BaseProjectWizardDialog::slotBaseCurrentIdChanged(int id)
+void BaseProjectWizardDialog::nextClicked()
 {
-    if (d->lastId == d->introPageId) {
-        emit introPageLeft(d->introPage->projectName(), d->introPage->path());
+    if (currentId() == d->introPageId) {
+        emit projectParametersChanged(d->introPage->projectName(), d->introPage->path());
     }
-    d->lastId = id;
 }
 
 Utils::ProjectIntroPage *BaseProjectWizardDialog::introPage() const
diff --git a/src/plugins/projectexplorer/baseprojectwizarddialog.h b/src/plugins/projectexplorer/baseprojectwizarddialog.h
index 32f47d96e35bf999f2916d1058f577b70c611dd8..7dc8d1b0d9b68cdec652a6b1c363984a284b4513 100644
--- a/src/plugins/projectexplorer/baseprojectwizarddialog.h
+++ b/src/plugins/projectexplorer/baseprojectwizarddialog.h
@@ -73,14 +73,14 @@ public slots:
     void setProjectName(const QString &name);
 
 signals:
-    void introPageLeft(const QString &projectName, const QString &path);
+    void projectParametersChanged(const QString &projectName, const QString &path);
 
 protected:
     Utils::ProjectIntroPage *introPage() const;
 
 private slots:
     void slotAccepted();
-    void slotBaseCurrentIdChanged(int);
+    void nextClicked();
 
 private:
     void init();
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp
index dbc6878f5206d1abd0848b203c913a983f562ea8..6037198d1123be2cd209efeb27a42de0ba57c7db 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp
@@ -503,7 +503,7 @@ void CustomProjectWizard::initProjectWizardDialog(BaseProjectWizardDialog *w,
     w->setPath(defaultPath);
     w->setProjectName(BaseProjectWizardDialog::uniqueProjectName(defaultPath));
 
-    connect(w, SIGNAL(introPageLeft(QString,QString)), this, SLOT(introPageLeft(QString,QString)));
+    connect(w, SIGNAL(projectParametersChanged(QString,QString)), this, SLOT(projectParametersChanged(QString,QString)));
 
     if (CustomWizardPrivate::verbose)
         qDebug() << "initProjectWizardDialog" << w << w->pageIds();
@@ -549,7 +549,7 @@ bool CustomProjectWizard::postGenerateFiles(const QWizard *, const Core::Generat
     return CustomProjectWizard::postGenerateOpen(l, errorMessage);
 }
 
-void CustomProjectWizard::introPageLeft(const QString &project, const QString & path)
+void CustomProjectWizard::projectParametersChanged(const QString &project, const QString & path)
 {
     // Make '%ProjectName%' available in base replacements.
     context()->baseReplacements.insert(QLatin1String("ProjectName"), project);
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.h b/src/plugins/projectexplorer/customwizard/customwizard.h
index 4ebaf0f557fe4e587f7aa2c94e7b2485ebda092d..63b2461b0829362bb83a383e6441b6d5ccf4e332 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.h
+++ b/src/plugins/projectexplorer/customwizard/customwizard.h
@@ -170,7 +170,7 @@ protected:
                                  const WizardPageList &extensionPages) const;
 
 private slots:
-    void introPageLeft(const QString &project, const QString &path);
+    void projectParametersChanged(const QString &project, const QString &path);
 };
 
 } // namespace ProjectExplorer
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
index 8ada0a6ddd188245e0ae7bd3a67fde0ac59f6b5c..e7807197ce4ae1799b44cd5befe4d44669be68fb 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
@@ -72,7 +72,7 @@ QWizard *AbstractMobileAppWizard::createWizardDialog(QWidget *parent,
     wdlg->m_optionsPage->setMaemoPngIcon(app()->maemoPngIcon());
     wdlg->m_optionsPage->setOrientation(app()->orientation());
     wdlg->m_optionsPage->setNetworkEnabled(app()->networkEnabled());
-    connect(wdlg, SIGNAL(introPageLeft(QString, QString)),
+    connect(wdlg, SIGNAL(projectParametersChanged(QString, QString)),
         SLOT(useProjectPath(QString, QString)));
     foreach (QWizardPage *p, extensionPages)
         BaseFileWizard::applyExtensionPageShortTitle(wdlg, wdlg->addPage(p));
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
index 25c43e6048ec9ca7dd33cd46ff4a04b65531b786..7bd2b84f5f461ebc8a93cd91b7de67a19fd29742 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
@@ -212,7 +212,7 @@ void BaseQt4ProjectWizardDialog::init(bool showModulesPage)
 {
     if (showModulesPage)
         m_modulesPage = new ModulesPage;
-    connect(this, SIGNAL(introPageLeft(QString,QString)),
+    connect(this, SIGNAL(projectParametersChanged(QString,QString)),
             this, SLOT(generateProfileName(QString,QString)));
 }