diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
index 273b1ffbe8c40d836d210634d54d0c47005f8d96..1ccb3c063cd07642d4aff4ba4467a4f9ab7f3490 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
@@ -41,6 +41,9 @@
 #include <qt4projectmanager/qt4project.h>
 #include <qt4projectmanager/qt4projectmanager.h>
 #include <qt4projectmanager/qt4projectmanagerconstants.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/customwizard/customwizard.h>
+#include <coreplugin/editormanager/editormanager.h>
 
 #include <QtGui/QIcon>
 
@@ -196,10 +199,27 @@ Core::GeneratedFiles AbstractMobileAppWizard::generateFiles(const QWizard *wizar
     return app()->generateFiles(errorMessage);
 }
 
+// TODO remove this workaround:
+// SessionManager::projectContainsFile() incorrectly returns false if the
+// file name in the .pro file (and thus also in m_projectFileCache)
+// contains relative path segments ("../").
+inline static QString fileInCurrentProject(const QString &file)
+{
+    const QStringList filesInProject =
+            ProjectExplorer::ProjectExplorerPlugin::instance()->currentProject()->files(
+                ProjectExplorer::Project::ExcludeGeneratedFiles);
+    foreach (const QString &uncleanFile, filesInProject)
+        if (QDir::cleanPath(uncleanFile) == file)
+            return uncleanFile;
+    return QString();
+}
+
 bool AbstractMobileAppWizard::postGenerateFiles(const QWizard *w,
     const Core::GeneratedFiles &l, QString *errorMessage)
 {
-    Q_UNUSED(w);
+    Q_UNUSED(w)
+    Q_UNUSED(l)
+    Q_UNUSED(errorMessage)
     Qt4Manager * const manager
         = ExtensionSystem::PluginManager::instance()->getObject<Qt4Manager>();
     Q_ASSERT(manager);
@@ -207,7 +227,14 @@ bool AbstractMobileAppWizard::postGenerateFiles(const QWizard *w,
     bool success = wizardDialog()->m_targetsPage->setupProject(&project);
     if (success) {
         project.saveSettings();
-        success = postGenerateFilesInternal(l, errorMessage);
+        success = ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage);
+        if (success) {
+            const QString fileToOpen = fileInCurrentProject(fileToOpenPostGeneration());
+            if (!fileToOpen.isEmpty()) {
+                Core::EditorManager::instance()->openEditor(fileToOpen, QString(), Core::EditorManager::ModeSwitch);
+                ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, fileToOpen);
+            }
+        }
     }
     return success;
 }
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
index eb1bafaae025d501dc0e2be3419ce54391a457bb..b0fd8b4a85759225a87ad207ec6c6fc15ebae935 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
@@ -88,6 +88,9 @@ protected:
 private slots:
     void useProjectPath(const QString &projectName, const QString &projectPath);
 
+protected:
+    virtual QString fileToOpenPostGeneration() const = 0;
+
 private:
     virtual QWizard *createWizardDialog(QWidget *parent,
         const QString &defaultPath, const WizardPageList &extensionPages) const;
@@ -102,8 +105,6 @@ private:
     virtual void projectPathChanged(const QString &path) const=0;
     virtual void prepareGenerateFiles(const QWizard *wizard,
         QString *errorMessage) const=0;
-    virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
-        QString *errorMessage)=0;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
index 7564a97abc852529c8a46e8a8e6fefd2ec688878..20390fc72a5926356c0454c90437aac0d3a5ded2 100644
--- a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp
@@ -40,11 +40,6 @@
 
 #include "qt4projectmanagerconstants.h"
 
-#include <projectexplorer/baseprojectwizarddialog.h>
-#include <projectexplorer/customwizard/customwizard.h>
-#include <projectexplorer/projectexplorer.h>
-#include <coreplugin/editormanager/editormanager.h>
-
 #include <QtCore/QCoreApplication>
 #include <QtGui/QIcon>
 
@@ -134,16 +129,11 @@ void Html5AppWizard::prepareGenerateFiles(const QWizard *w,
                           wizard->m_htmlSourcesPage->mainHtmlData());
 }
 
-bool Html5AppWizard::postGenerateFilesInternal(const Core::GeneratedFiles &l,
-    QString *errorMessage)
+QString Html5AppWizard::fileToOpenPostGeneration() const
 {
-    const bool success = ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage);
-    const QString mainHtmlFile = m_d->app->path(Html5App::MainHtml);
-    if (success && !mainHtmlFile.isEmpty()) {
-        ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, mainHtmlFile);
-        Core::EditorManager::instance()->openEditor(mainHtmlFile, QString(), Core::EditorManager::ModeSwitch);
-    }
-    return success;
+    return m_d->app->mainHtmlMode() == Html5App::ModeUrl ?
+                m_d->app->path(AbstractMobileApp::MainCpp)
+              : m_d->app->path(Html5App::MainHtml);
 }
 
 AbstractMobileApp *Html5AppWizard::app() const
diff --git a/src/plugins/qt4projectmanager/wizards/html5appwizard.h b/src/plugins/qt4projectmanager/wizards/html5appwizard.h
index 499b89ef46b60472a866afce60d63833ccaa8d26..9454faa9b86bef7f1ffa097ae969420a18dc67b6 100644
--- a/src/plugins/qt4projectmanager/wizards/html5appwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/html5appwizard.h
@@ -47,6 +47,9 @@ public:
     Html5AppWizard();
     virtual ~Html5AppWizard();
 
+protected:
+    QString fileToOpenPostGeneration() const;
+
 private:
     static Core::BaseFileWizardParameters parameters();
 
@@ -56,8 +59,6 @@ private:
     virtual void projectPathChanged(const QString &path) const;
     virtual void prepareGenerateFiles(const QWizard *wizard,
         QString *errorMessage) const;
-    virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
-        QString *errorMessage);
 
     class Html5AppWizardPrivate *m_d;
 };
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
index d8fbeea4ff456261dc4c6b1c1ec825493b0339ae..ac6407e1beda57330e0cb2ab317ae38afa40e492 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
@@ -39,10 +39,6 @@
 
 #include "qt4projectmanagerconstants.h"
 
-#include <projectexplorer/customwizard/customwizard.h>
-#include <projectexplorer/projectexplorer.h>
-#include <coreplugin/editormanager/editormanager.h>
-
 #include <QtCore/QCoreApplication>
 #include <QtGui/QIcon>
 
@@ -123,10 +119,9 @@ void MobileAppWizard::prepareGenerateFiles(const QWizard *w,
     Q_UNUSED(errorMessage)
 }
 
-bool MobileAppWizard::postGenerateFilesInternal(const Core::GeneratedFiles &l,
-    QString *errorMessage)
+QString MobileAppWizard::fileToOpenPostGeneration() const
 {
-    return ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage);
+    return QString();
 }
 
 AbstractMobileApp *MobileAppWizard::app() const
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
index 0b3435debea04b31cf0fa9afb948820b98da8027..e2112f8470b2f4e82e8c119f98f1539fb4a195ee 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
@@ -47,6 +47,9 @@ public:
     MobileAppWizard();
     virtual ~MobileAppWizard();
 
+protected:
+    QString fileToOpenPostGeneration() const;
+
 private:
     static Core::BaseFileWizardParameters parameters();
 
@@ -56,8 +59,6 @@ private:
     virtual void projectPathChanged(const QString &path) const;
     virtual void prepareGenerateFiles(const QWizard *wizard,
         QString *errorMessage) const;
-    virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
-        QString *errorMessage);
 
     class MobileAppWizardPrivate *m_d;
 };
diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
index 2c216bdaa8150f451b1e2170da70e6e7d746cf00..b3b5f31df48b26b85e60743711bfc9abae6eb0a6 100644
--- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp
@@ -40,11 +40,6 @@
 
 #include "qt4projectmanagerconstants.h"
 
-#include <projectexplorer/baseprojectwizarddialog.h>
-#include <projectexplorer/customwizard/customwizard.h>
-#include <projectexplorer/projectexplorer.h>
-#include <coreplugin/editormanager/editormanager.h>
-
 #include <QtCore/QCoreApplication>
 #include <QtGui/QIcon>
 
@@ -152,16 +147,9 @@ void QtQuickAppWizard::prepareGenerateFiles(const QWizard *w,
     }
 }
 
-bool QtQuickAppWizard::postGenerateFilesInternal(const Core::GeneratedFiles &l,
-    QString *errorMessage)
+QString QtQuickAppWizard::fileToOpenPostGeneration() const
 {
-    const bool success = ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage);
-    const QString mainQmlFile = m_d->app->path(QtQuickApp::MainQml);
-    if (success && !mainQmlFile.isEmpty()) {
-        ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, mainQmlFile);
-        Core::EditorManager::instance()->openEditor(mainQmlFile, QString(), Core::EditorManager::ModeSwitch);
-    }
-    return success;
+    return m_d->app->path(QtQuickApp::MainQml);
 }
 
 AbstractMobileApp *QtQuickAppWizard::app() const
diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
index b1ad159e79b35ed34278422acb4b5565b031dd7a..7ad97e8c474f6ee9a989e9572a2d4f7a1a1fe47b 100644
--- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.h
@@ -47,6 +47,9 @@ public:
     QtQuickAppWizard();
     virtual ~QtQuickAppWizard();
 
+protected:
+    QString fileToOpenPostGeneration() const;
+
 private:
     static Core::BaseFileWizardParameters parameters();
 
@@ -56,8 +59,6 @@ private:
     virtual void projectPathChanged(const QString &path) const;
     virtual void prepareGenerateFiles(const QWizard *wizard,
         QString *errorMessage) const;
-    virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
-        QString *errorMessage);
 
     class QtQuickAppWizardPrivate *m_d;
 };