diff --git a/share/qtcreator/templates/mobileapp/app.desktop b/share/qtcreator/templates/mobileapp/app.desktop
new file mode 100644
index 0000000000000000000000000000000000000000..e9d9304f6becf8a56f31a332162349c5b362dee5
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/app.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Name=thisApp
+Exec=/opt/bin/thisApp
+Icon=thisApp
+X-Window-Icon=
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
diff --git a/share/qtcreator/templates/mobileapp/app.pri b/share/qtcreator/templates/mobileapp/app.pri
new file mode 100644
index 0000000000000000000000000000000000000000..b46ce3227e38b6bd05706b664c2f4659d0c0f199
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/app.pri
@@ -0,0 +1,23 @@
+# This file should not be edited.
+# Following versions of Qt Creator might offer new version.
+
+INCLUDEPATH += $$PWD
+
+symbian {
+    TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
+    contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -leiksrv -lcone
+    contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices
+} else:unix {
+    maemo5 {
+        installPrefix = /opt/usr
+        desktopfile.path = /usr/share/applications/hildon
+    } else {
+        installPrefix = /usr/local
+        desktopfile.path = /usr/share/applications
+    }
+    icon.files = $${TARGET}.png
+    icon.path = /usr/share/icons/hicolor/64x64
+    desktopfile.files = $${TARGET}.desktop
+    target.path = $${installPrefix}/bin
+    INSTALLS += desktopfile icon target
+}
diff --git a/share/qtcreator/templates/mobileapp/app.pro b/share/qtcreator/templates/mobileapp/app.pro
new file mode 100644
index 0000000000000000000000000000000000000000..cd05a35c68126520de5fbff6df0bcd5c755e6944
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/app.pro
@@ -0,0 +1,18 @@
+# Avoid auto screen rotation
+# ORIENTATIONLOCK #
+DEFINES += ORIENTATIONLOCK
+
+# Needs to be defined for Symbian
+# NETWORKACCESS #
+DEFINES += NETWORKACCESS
+
+# TARGETUID3 #
+symbian:TARGET.UID3 = 0xE1111234
+
+symbian:ICON = symbianicon.svg
+
+SOURCES += main.cpp mainwindow.cpp
+HEADERS += mainwindow.h
+FORMS += mainwindow.ui
+
+include(app.pri)
diff --git a/share/qtcreator/templates/mobileapp/maemoicon.png b/share/qtcreator/templates/mobileapp/maemoicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..707d5c4e85d82959740b243a8a36d5071c277299
Binary files /dev/null and b/share/qtcreator/templates/mobileapp/maemoicon.png differ
diff --git a/share/qtcreator/templates/mobileapp/main.cpp b/share/qtcreator/templates/mobileapp/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..59b739482aabe17303e9b74ee7e9340204b22eac
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/main.cpp
@@ -0,0 +1,20 @@
+#include "mainwindow.h"
+
+#include <QtGui/QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    MainWindow mainWindow;
+    mainWindow.setOrientation(MainWindow::Auto); // ORIENTATION
+
+#ifdef Q_OS_SYMBIAN
+    mainWindow.showFullScreen();
+#elif defined(Q_WS_MAEMO_5)
+    mainWindow.showMaximized();
+#else
+    mainWindow.show();
+#endif
+    return app.exec();
+}
diff --git a/share/qtcreator/templates/mobileapp/mainwindow.cpp b/share/qtcreator/templates/mobileapp/mainwindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d08587ce9b266d289862bb5ba7bcc94adbbc4aab
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/mainwindow.cpp
@@ -0,0 +1,59 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include <QtCore/QCoreApplication>
+
+#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK)
+#include <eikenv.h>
+#include <eikappui.h>
+#include <aknenv.h>
+#include <aknappui.h>
+#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK
+
+MainWindow::MainWindow(QWidget *parent)
+    : QMainWindow(parent), ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::setOrientation(Orientation orientation)
+{
+#ifdef Q_OS_SYMBIAN
+    if (orientation != Auto) {
+#if defined(ORIENTATIONLOCK)
+        const CAknAppUiBase::TAppUiOrientation uiOrientation =
+                (orientation == LockPortrait) ? CAknAppUi::EAppUiOrientationPortrait
+                    : CAknAppUi::EAppUiOrientationLandscape;
+        CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi());
+        TRAPD(error,
+            if (appUi)
+                appUi->SetOrientationL(uiOrientation);
+        );
+#else // ORIENTATIONLOCK
+        qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation.");
+#endif // ORIENTATIONLOCK
+    }
+#elif defined(Q_WS_MAEMO_5)
+    Qt::WidgetAttribute attribute;
+    switch (orientation) {
+    case LockPortrait:
+        attribute = Qt::WA_Maemo5PortraitOrientation;
+        break;
+    case LockLandscape:
+        attribute = Qt::WA_Maemo5LandscapeOrientation;
+        break;
+    case Auto:
+    default:
+        attribute = Qt::WA_Maemo5AutoOrientation;
+        break;
+    }
+    setAttribute(attribute, true);
+#else // Q_OS_SYMBIAN
+    Q_UNUSED(orientation);
+#endif // Q_OS_SYMBIAN
+}
diff --git a/share/qtcreator/templates/mobileapp/mainwindow.h b/share/qtcreator/templates/mobileapp/mainwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..dc9813dbb775e5b6784f55a08a99db865c2c7394
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/mainwindow.h
@@ -0,0 +1,28 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QtGui/QMainWindow>
+
+namespace Ui {
+    class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+public:
+    enum Orientation {
+        LockPortrait,
+        LockLandscape,
+        Auto
+    };
+
+    MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+    void setOrientation(Orientation orientation);
+
+private:
+    Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H
diff --git a/share/qtcreator/templates/mobileapp/mainwindow.ui b/share/qtcreator/templates/mobileapp/mainwindow.ui
new file mode 100644
index 0000000000000000000000000000000000000000..d2ae706e129c1f599cf6fb8d0f115b3a82e2cc46
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/mainwindow.ui
@@ -0,0 +1,24 @@
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>200</width>
+    <height>320</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>MainWindow</string>
+  </property>
+  <widget class="QMenuBar" name="menuBar" />
+  <widget class="QToolBar" name="mainToolBar" />
+  <widget class="QWidget" name="centralWidget" />
+  <widget class="QStatusBar" name="statusBar" />
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/share/qtcreator/templates/mobileapp/symbianicon.svg b/share/qtcreator/templates/mobileapp/symbianicon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..566acfada01cfe8ab7550dc4187ff76fe34d86ae
--- /dev/null
+++ b/share/qtcreator/templates/mobileapp/symbianicon.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="44px"
+   version="1.1"
+   viewBox="0 0 44 44"
+   width="44px"
+   x="0px"
+   y="0px"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="qt.svg">
+  <metadata
+     id="metadata18">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs16">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="44 : 22 : 1"
+       inkscape:persp3d-origin="22 : 14.666667 : 1"
+       id="perspective2836" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1020"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="21.454545"
+     inkscape:cx="49.412871"
+     inkscape:cy="21.894358"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g3" />
+  <g
+     transform="matrix(0.18308778,0,0,0.18308778,6.6100946,3.2385199)"
+     id="g3">
+    <path
+       d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z"
+       style="fill:#006225"
+       id="path5"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z"
+       style="fill:#80c342"
+       id="path7" />
+    <path
+       d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z"
+       style="fill:#006225"
+       id="path11" />
+    <path
+       d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z"
+       style="fill:#006225"
+       id="path13" />
+    <path
+       id="path17"
+       style="fill:#ffffff"
+       d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z" />
+    <path
+       d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z"
+       style="fill:#006225"
+       id="path19" />
+    <path
+       id="path21"
+       style="fill:#006225"
+       d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z" />
+  </g>
+</svg>
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
index 6454625d721c72c5a5f15e6cd030a7f97d265523..b708ebd901ed2fe64ff967685472e6e6bdfec0b7 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp
@@ -187,13 +187,13 @@ QString Qt4Manager::mimeType() const
 // When removing this, also remove the inclusions of "wizards/qmlstandaloneapp.h" and QtGui/QMessageBox
 inline void updateQmlApplicationViewerFiles(const QString proFile)
 {
-    const QList<GeneratedFileInfo> updates =
+    const QList<QmlAppGeneratedFileInfo> updates =
             QmlStandaloneApp::fileUpdates(proFile);
     if (!updates.empty()) {
         // TODO Translate the folloing strings when we want to keep the code
         QString message = QLatin1String("The following files are either outdated or have been modified:");
         message.append(QLatin1String("<ul>"));
-        foreach (const GeneratedFileInfo &info, updates) {
+        foreach (const QmlAppGeneratedFileInfo &info, updates) {
             QStringList reasons;
             if (info.wasModified())
                 reasons.append(QLatin1String("modified"));
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
index 9308625298315eaa50579d8f46400c04dc7e6b8f..18136288610bfa9a6bec14ae76a97c06a290df38 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
@@ -16,7 +16,9 @@ HEADERS += qt4deployconfiguration.h \
     profilereader.h \
     wizards/qtprojectparameters.h \
     wizards/guiappwizard.h \
-    wizards/mobileguiappwizard.h \
+    wizards/mobileapp.h \
+    wizards/mobileappwizard.h \
+    wizards/mobileappwizardpages.h \
     wizards/consoleappwizard.h \
     wizards/consoleappwizarddialog.h \
     wizards/libraryparameters.h \
@@ -68,7 +70,9 @@ SOURCES += qt4projectmanagerplugin.cpp \
     profilereader.cpp \
     wizards/qtprojectparameters.cpp \
     wizards/guiappwizard.cpp \
-    wizards/mobileguiappwizard.cpp \
+    wizards/mobileapp.cpp \
+    wizards/mobileappwizard.cpp \
+    wizards/mobileappwizardpages.cpp \
     wizards/consoleappwizard.cpp \
     wizards/consoleappwizarddialog.cpp \
     wizards/libraryparameters.cpp \
@@ -116,6 +120,7 @@ FORMS += makestep.ui \
     wizards/targetsetuppage.ui \
     wizards/qmlstandaloneappwizardoptionspage.ui \
     wizards/qmlstandaloneappwizardsourcespage.ui \
+    wizards/mobileappwizardoptionspage.ui \
     librarydetailswidget.ui
 RESOURCES += qt4projectmanager.qrc \
     wizards/wizards.qrc
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index 8d69eb703f6f27f83b47615939e03f1718ff08fe..0ed226159594f1734907fc6bdb426d89ccdbd9ab 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -34,7 +34,7 @@
 #include "makestep.h"
 #include "wizards/consoleappwizard.h"
 #include "wizards/guiappwizard.h"
-#include "wizards/mobileguiappwizard.h"
+#include "wizards/mobileappwizard.h"
 #include "wizards/librarywizard.h"
 #include "wizards/testwizard.h"
 #include "wizards/emptyprojectwizard.h"
@@ -137,8 +137,8 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
     ConsoleAppWizard *consoleWizard = new ConsoleAppWizard;
     addAutoReleasedObject(consoleWizard);
 
-    MobileGuiAppWizard *mobileGuiWizard = new MobileGuiAppWizard();
-    addAutoReleasedObject(mobileGuiWizard);
+    MobileAppWizard *mobileWizard = new MobileAppWizard;
+    addAutoReleasedObject(mobileWizard);
 
     addAutoReleasedObject(new QmlStandaloneAppWizard(QmlStandaloneAppWizard::NewQmlFile));
     addAutoReleasedObject(new QmlStandaloneAppWizard(QmlStandaloneAppWizard::ImportQmlFile));
diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.cpp b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1634e1384d0c8e9f2e926b3bbee224278e7f3e76
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileapp.cpp
@@ -0,0 +1,410 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "mobileapp.h"
+
+#include <coreplugin/icore.h>
+
+#include <QtCore/QDir>
+#include <QtCore/QFile>
+#include <QtCore/QRegExp>
+#include <QtCore/QTextStream>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+const QString mainWindowBaseName(QLatin1String("mainwindow"));
+
+const QString mainWindowCppFileName(mainWindowBaseName + QLatin1String(".cpp"));
+const QString mainWindowHFileName(mainWindowBaseName + QLatin1String(".h"));
+const QString mainWindowUiFileName(mainWindowBaseName + QLatin1String(".ui"));
+const QString fileChecksum(QLatin1String("checksum"));
+const QString fileStubVersion(QLatin1String("version"));
+
+
+MobileAppGeneratedFileInfo::MobileAppGeneratedFileInfo()
+    : file(MainWindowCppFile)
+    , version(-1)
+    , dataChecksum(0)
+    , statedChecksum(0)
+{
+}
+
+bool MobileAppGeneratedFileInfo::isUpToDate() const
+{
+    return !isOutdated() && !wasModified();
+}
+
+bool MobileAppGeneratedFileInfo::isOutdated() const
+{
+    return version < MobileApp::stubVersion();
+}
+
+bool MobileAppGeneratedFileInfo::wasModified() const
+{
+    return dataChecksum != statedChecksum;
+}
+
+MobileApp::MobileApp() : m_orientation(Auto), m_networkEnabled(false)
+{
+}
+
+MobileApp::~MobileApp()
+{
+}
+
+QString MobileApp::symbianUidForPath(const QString &path)
+{
+    quint32 hash = 5381;
+    for (int i = 0; i < path.size(); ++i) {
+        const char c = path.at(i).toAscii();
+        hash ^= c + ((c - i) << i % 20) + ((c + i) << (i + 5) % 20) + ((c - 2 * i) << (i + 10) % 20) + ((c + 2 * i) << (i + 15) % 20);
+    }
+    return QString::fromLatin1("0xE")
+            + QString::fromLatin1("%1").arg(hash, 7, 16, QLatin1Char('0')).right(7);
+}
+
+void MobileApp::setOrientation(Orientation orientation)
+{
+    m_orientation = orientation;
+}
+
+MobileApp::Orientation MobileApp::orientation() const
+{
+    return m_orientation;
+}
+
+void MobileApp::setProjectName(const QString &name)
+{
+    m_projectName = name;
+}
+
+QString MobileApp::projectName() const
+{
+    return m_projectName;
+}
+
+void MobileApp::setProjectPath(const QString &path)
+{
+    m_projectPath.setFile(path);
+}
+
+void MobileApp::setSymbianSvgIcon(const QString &icon)
+{
+    m_symbianSvgIcon = icon;
+}
+
+QString MobileApp::symbianSvgIcon() const
+{
+    return path(SymbianSvgIconOrigin);
+}
+
+void MobileApp::setMaemoPngIcon(const QString &icon)
+{
+    m_maemoPngIcon = icon;
+}
+
+QString MobileApp::maemoPngIcon() const
+{
+    return path(MaemoPngIconOrigin);
+}
+
+void MobileApp::setSymbianTargetUid(const QString &uid)
+{
+    m_symbianTargetUid = uid;
+}
+
+QString MobileApp::symbianTargetUid() const
+{
+    return !m_symbianTargetUid.isEmpty() ? m_symbianTargetUid
+        : symbianUidForPath(path(AppPro));
+}
+
+void MobileApp::setNetworkEnabled(bool enabled)
+{
+    m_networkEnabled = enabled;
+}
+
+bool MobileApp::networkEnabled() const
+{
+    return m_networkEnabled;
+}
+
+
+QString MobileApp::path(Path path) const
+{
+    const QString originsRoot = templatesRoot();
+    const QString mainCppFileName = QLatin1String("main.cpp");
+    const QString symbianIconFileName = QLatin1String("symbianicon.svg");
+    const QString pathBase = m_projectPath.absoluteFilePath() + QLatin1Char('/')
+                             + m_projectName + QLatin1Char('/');
+
+    switch (path) {
+        case MainCpp:                       return pathBase + mainCppFileName;
+        case MainCppOrigin:                 return originsRoot + mainCppFileName;
+        case AppPro:                        return pathBase + m_projectName + QLatin1String(".pro");
+        case AppProOrigin:                  return originsRoot + QLatin1String("app.pro");
+        case AppProPath:                    return pathBase;
+        case AppPri:                        return pathBase + m_projectName + QLatin1String(".pri");
+        case AppPriOrigin:                  return originsRoot + QLatin1String("app.pri");
+        case Desktop:                       return pathBase + m_projectName + QLatin1String(".desktop");
+        case DesktopOrigin:                 return originsRoot + QLatin1String("app.desktop");
+        case MainWindowCpp:                 return pathBase + mainWindowCppFileName;
+        case MainWindowCppOrigin:           return originsRoot + mainWindowCppFileName;
+        case MainWindowH:                   return pathBase + mainWindowHFileName;
+        case MainWindowHOrigin:             return originsRoot + mainWindowHFileName;
+        case MainWindowUi:                  return pathBase + mainWindowUiFileName;
+        case MainWindowUiOrigin:            return originsRoot + mainWindowUiFileName;
+        case SymbianSvgIcon:                return pathBase + symbianIconFileName;
+        case SymbianSvgIconOrigin:          return !m_symbianSvgIcon.isEmpty() ? m_symbianSvgIcon
+                                                : originsRoot + symbianIconFileName;
+        case MaemoPngIcon:                  return pathBase + projectName() +  QLatin1String(".png");
+        case MaemoPngIconOrigin:            return !m_maemoPngIcon.isEmpty() ? m_maemoPngIcon
+                                                : originsRoot + QLatin1String("maemoicon.png");
+        default:                            qFatal("MobileApp::path() needs more work");
+    }
+    return QString();
+}
+
+static QString insertParameter(const QString &line, const QString &parameter)
+{
+    return QString(line).replace(QRegExp(QLatin1String("\\([^()]+\\)")),
+                                 QLatin1Char('(') + parameter + QLatin1Char(')'));
+}
+
+QByteArray MobileApp::generateMainCpp(const QString *errorMessage) const
+{
+    Q_UNUSED(errorMessage)
+
+    QFile sourceFile(path(MainCppOrigin));
+    sourceFile.open(QIODevice::ReadOnly);
+    Q_ASSERT(sourceFile.isOpen());
+    QTextStream in(&sourceFile);
+
+    QByteArray mainCppContent;
+    QTextStream out(&mainCppContent, QIODevice::WriteOnly);
+
+    QString line;
+    while (!(line = in.readLine()).isNull()) {
+        if (line.contains(QLatin1String("// ORIENTATION"))) {
+            const char *orientationString;
+            switch (m_orientation) {
+            case LockLandscape:
+                orientationString = "LockLandscape";
+                break;
+            case LockPortrait:
+                orientationString = "LockPortrait";
+                break;
+            case Auto:
+                orientationString = "Auto";
+                break;
+            }
+            line = insertParameter(line, QLatin1String("MainWindow::")
+                + QLatin1String(orientationString));
+        }
+        const int commentIndex = line.indexOf(QLatin1String(" //"));
+        if (commentIndex != -1)
+            line.truncate(commentIndex);
+        out << line << endl;
+    };
+
+    return mainCppContent;
+}
+
+QByteArray MobileApp::generateProFile(const QString *errorMessage) const
+{
+    Q_UNUSED(errorMessage)
+
+    const QChar comment = QLatin1Char('#');
+    QFile proFile(path(AppProOrigin));
+    proFile.open(QIODevice::ReadOnly);
+    Q_ASSERT(proFile.isOpen());
+    QTextStream in(&proFile);
+
+    QByteArray proFileContent;
+    QTextStream out(&proFileContent, QIODevice::WriteOnly);
+
+    QString valueOnNextLine;
+    bool uncommentNextLine = false;
+    QString line;
+    while (!(line = in.readLine()).isNull()) {
+        if (line.contains(QLatin1String("# TARGETUID3"))) {
+            valueOnNextLine = symbianTargetUid();
+        } else if (line.contains(QLatin1String("# ORIENTATIONLOCK")) && m_orientation == MobileApp::Auto) {
+            uncommentNextLine = true;
+        } else if (line.contains(QLatin1String("# NETWORKACCESS")) && !m_networkEnabled) {
+            uncommentNextLine = true;
+        }
+
+        // Remove all marker comments
+        if (line.trimmed().startsWith(comment)
+            && line.trimmed().endsWith(comment))
+            continue;
+
+        if (!valueOnNextLine.isEmpty()) {
+            out << line.left(line.indexOf(QLatin1Char('=')) + 2)
+                << QDir::fromNativeSeparators(valueOnNextLine) << endl;
+            valueOnNextLine.clear();
+            continue;
+        }
+
+        if (uncommentNextLine) {
+            out << comment << line << endl;
+            uncommentNextLine = false;
+            continue;
+        }
+        out << line << endl;
+    };
+
+    return proFileContent.replace("include(app.pri)", "include("
+        + m_projectName.toLocal8Bit() + ".pri)");
+}
+
+QByteArray MobileApp::generateDesktopFile(const QString *errorMessage) const
+{
+    Q_UNUSED(errorMessage);
+
+    QFile desktopTemplate(path(DesktopOrigin));
+    desktopTemplate.open(QIODevice::ReadOnly);
+    Q_ASSERT(desktopTemplate.isOpen());
+    QByteArray desktopFileContent = desktopTemplate.readAll();
+    return desktopFileContent.replace("thisApp", projectName().toUtf8());
+}
+
+QString MobileApp::templatesRoot()
+{
+    return Core::ICore::instance()->resourcePath() + QLatin1String("/templates/mobileapp/");
+}
+
+static Core::GeneratedFile file(const QByteArray &data, const QString &targetFile)
+{
+    Core::GeneratedFile generatedFile(targetFile);
+    generatedFile.setBinary(true);
+    generatedFile.setBinaryContents(data);
+    return generatedFile;
+}
+
+Core::GeneratedFiles MobileApp::generateFiles(QString *errorMessage) const
+{
+    Core::GeneratedFiles files;
+
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::AppProFile, errorMessage), path(AppPro)));
+    files.last().setAttributes(Core::GeneratedFile::OpenProjectAttribute);
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::DesktopFile, errorMessage), path(Desktop)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::AppPriFile, errorMessage), path(AppPri)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowCppFile, errorMessage), path(MainWindowCpp)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowHFile, errorMessage), path(MainWindowH)));
+    files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowUiFile, errorMessage), path(MainWindowUi)));
+    files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute);
+
+    return files;
+}
+
+QString MobileApp::error() const
+{
+    return m_error;
+}
+
+static QByteArray readBlob(const QString &source)
+{
+    QFile sourceFile(source);
+    sourceFile.open(QIODevice::ReadOnly);
+    Q_ASSERT(sourceFile.isOpen());
+    return sourceFile.readAll();
+}
+
+QByteArray MobileApp::generateFile(MobileAppGeneratedFileInfo::File file,
+                                          const QString *errorMessage) const
+{
+    QByteArray data;
+    const QString cFileComment = QLatin1String("//");
+    const QString proFileComment = QLatin1String("#");
+    QString comment = cFileComment;
+    bool versionAndChecksum = false;
+    switch (file) {
+        case MobileAppGeneratedFileInfo::MainCppFile:
+            data = generateMainCpp(errorMessage);
+            break;
+        case MobileAppGeneratedFileInfo::SymbianSvgIconFile:
+            data = readBlob(path(SymbianSvgIconOrigin));
+            break;
+        case MobileAppGeneratedFileInfo::MaemoPngIconFile:
+            data = readBlob(path(MaemoPngIconOrigin));
+            break;
+        case MobileAppGeneratedFileInfo::DesktopFile:
+            data = generateDesktopFile(errorMessage);
+            break;
+        case MobileAppGeneratedFileInfo::AppProFile:
+            data = generateProFile(errorMessage);
+            comment = proFileComment;
+            break;
+        case MobileAppGeneratedFileInfo::AppPriFile:
+            data = readBlob(path(AppPriOrigin));
+            comment = proFileComment;
+            versionAndChecksum = true;
+            break;
+        case MobileAppGeneratedFileInfo::MainWindowCppFile:
+            data = readBlob(path(MainWindowCppOrigin));
+            versionAndChecksum = true;
+            break;
+        case MobileAppGeneratedFileInfo::MainWindowHFile:
+            data = readBlob(path(MainWindowHOrigin));
+            versionAndChecksum = true;
+            break;
+        case MobileAppGeneratedFileInfo::MainWindowUiFile:
+            data = readBlob(path(MainWindowUiOrigin));
+            break;
+        default:
+            Q_ASSERT_X(false, Q_FUNC_INFO, "Whoops, case missing!");
+    }
+    if (!versionAndChecksum)
+        return data;
+    QByteArray versioned = data;
+    versioned.replace('\x0D', "");
+    versioned.replace('\x0A', "");
+    const quint16 checkSum = qChecksum(versioned.constData(), versioned.length());
+    const QString checkSumString = QString::number(checkSum, 16);
+    const QString versionString = QString::number(stubVersion());
+    const QChar sep = QLatin1Char(' ');
+    const QString versionLine =
+            comment + sep + fileChecksum + sep + QLatin1String("0x") + checkSumString
+            + sep + fileStubVersion + sep + versionString + QLatin1Char('\x0A');
+    return versionLine.toAscii() + data;
+}
+
+int MobileApp::stubVersion()
+{
+    return 1;
+}
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/mobileapp.h b/src/plugins/qt4projectmanager/wizards/mobileapp.h
new file mode 100644
index 0000000000000000000000000000000000000000..9452bc361f732d397910f671c40f395c5e04a934
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileapp.h
@@ -0,0 +1,143 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef MOBILEAPP_H
+#define MOBILEAPP_H
+
+#include <coreplugin/basefilewizard.h>
+
+#include <QtCore/QStringList>
+#include <QtCore/QFileInfo>
+#include <QtCore/QHash>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+struct MobileAppGeneratedFileInfo
+{
+    enum File {
+        MainCppFile,
+        AppProFile,
+        AppPriFile,
+        MainWindowCppFile,
+        MainWindowHFile,
+        MainWindowUiFile,
+        SymbianSvgIconFile,
+        MaemoPngIconFile,
+        DesktopFile
+    };
+
+    MobileAppGeneratedFileInfo();
+
+    bool isUpToDate() const;
+    bool isOutdated() const;
+    bool wasModified() const;
+
+    File file;
+    QFileInfo fileInfo;
+    int version;
+    quint16 dataChecksum;
+    quint16 statedChecksum;
+};
+
+class MobileApp: public QObject
+{
+public:
+    enum Orientation {
+        LockLandscape,
+        LockPortrait,
+        Auto
+    };
+
+    enum Path {
+        MainCpp,
+        MainCppOrigin,
+        AppPro,
+        AppProOrigin,
+        AppProPath,
+        Desktop,
+        DesktopOrigin,
+        AppPri,
+        AppPriOrigin,
+        MainWindowCpp,
+        MainWindowCppOrigin,
+        MainWindowH,
+        MainWindowHOrigin,
+        MainWindowUi,
+        MainWindowUiOrigin,
+        SymbianSvgIcon,
+        SymbianSvgIconOrigin,
+        MaemoPngIcon,
+        MaemoPngIconOrigin,
+    };
+
+    MobileApp();
+    ~MobileApp();
+
+    void setOrientation(Orientation orientation);
+    Orientation orientation() const;
+    void setProjectName(const QString &name);
+    QString projectName() const;
+    void setProjectPath(const QString &path);
+    void setSymbianSvgIcon(const QString &icon);
+    QString symbianSvgIcon() const;
+    void setMaemoPngIcon(const QString &icon);
+    QString maemoPngIcon() const;
+    void setSymbianTargetUid(const QString &uid);
+    QString symbianTargetUid() const;
+    void setNetworkEnabled(bool enabled);
+    bool networkEnabled() const;
+
+    static QString symbianUidForPath(const QString &path);
+    Core::GeneratedFiles generateFiles(QString *errorMessage) const;
+    QString path(Path path) const;
+    QString error() const;
+    QByteArray generateFile(MobileAppGeneratedFileInfo::File file,
+        const QString *errorMessage) const;
+    static int stubVersion();
+private:
+    QByteArray generateMainCpp(const QString *errorMessage) const;
+    QByteArray generateProFile(const QString *errorMessage) const;
+    QByteArray generateDesktopFile(const QString *errorMessage) const;
+    static QString templatesRoot();
+
+    QString m_projectName;
+    QFileInfo m_projectPath;
+    QString m_symbianSvgIcon;
+    QString m_maemoPngIcon;
+    QString m_symbianTargetUid;
+    Orientation m_orientation;
+    bool m_networkEnabled;
+    QString m_error;
+};
+
+} // end of namespace Internal
+} // end of namespace Qt4ProjectManager
+
+#endif // MOBILEAPP_H
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5e06c1e451da67f5223904d1b0500f21aad11c34
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
@@ -0,0 +1,164 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "mobileappwizard.h"
+#include "mobileappwizardpages.h"
+#include "mobileapp.h"
+
+#include "qt4projectmanagerconstants.h"
+
+#include <projectexplorer/baseprojectwizarddialog.h>
+#include <projectexplorer/customwizard/customwizard.h>
+#include <projectexplorer/projectexplorer.h>
+#include <coreplugin/editormanager/editormanager.h>
+
+#include <QtGui/QIcon>
+
+#include <QtCore/QTextStream>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDir>
+#include <QtCore/QFile>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+namespace {
+const QString DisplayName
+    = QCoreApplication::translate("MobileAppWizard", "Mobile Qt Application");
+const QString Description
+    = QCoreApplication::translate("MobileAppWizard",
+        "Creates a Qt application optimized for mobile devices "
+        "with a Qt Designer-based main window.\n\n"
+        "Preselects Qt for Simulator and mobile targets if available.");
+}
+
+class MobileAppWizardDialog : public ProjectExplorer::BaseProjectWizardDialog
+{
+    Q_OBJECT
+
+public:
+    explicit MobileAppWizardDialog(QWidget *parent = 0);
+
+private:
+    class MobileAppWizardOptionsPage *m_optionsPage;
+    friend class MobileAppWizard;
+};
+
+MobileAppWizardDialog::MobileAppWizardDialog(QWidget *parent)
+    : ProjectExplorer::BaseProjectWizardDialog(parent)
+{
+    setWindowTitle(DisplayName);
+    setIntroDescription(Description);
+    m_optionsPage = new MobileAppWizardOptionsPage;
+    const int optionsPagePageId = addPage(m_optionsPage);
+    wizardProgress()->item(optionsPagePageId)->setTitle(tr("App options"));
+}
+
+class MobileAppWizardPrivate
+{
+    class MobileApp *mobileApp;
+    class MobileAppWizardDialog *wizardDialog;
+    friend class MobileAppWizard;
+};
+
+MobileAppWizard::MobileAppWizard()
+    : Core::BaseFileWizard(parameters())
+    , m_d(new MobileAppWizardPrivate)
+{
+    m_d->mobileApp = new MobileApp;
+    m_d->wizardDialog = 0;
+}
+
+MobileAppWizard::~MobileAppWizard()
+{
+    delete m_d->mobileApp;
+}
+
+Core::BaseFileWizardParameters MobileAppWizard::parameters()
+{
+    Core::BaseFileWizardParameters parameters(ProjectWizard);
+    parameters.setIcon(QIcon(QLatin1String(Constants::ICON_QT_PROJECT)));
+    parameters.setDisplayName(DisplayName);
+    parameters.setId(QLatin1String("C.Qt4GuiMobile"));
+    parameters.setDescription(Description);
+    parameters.setCategory(QLatin1String(Constants::QT_APP_WIZARD_CATEGORY));
+    parameters.setDisplayCategory(QCoreApplication::translate(Constants::QT_APP_WIZARD_TR_SCOPE,
+                                                              Constants::QT_APP_WIZARD_TR_CATEGORY));
+    return parameters;
+}
+
+QWizard *MobileAppWizard::createWizardDialog(QWidget *parent,
+    const QString &defaultPath, const WizardPageList &extensionPages) const
+{
+    m_d->wizardDialog = new MobileAppWizardDialog(parent);
+
+    m_d->wizardDialog->setPath(defaultPath);
+    m_d->wizardDialog->setProjectName(MobileAppWizardDialog::uniqueProjectName(defaultPath));
+    m_d->wizardDialog->m_optionsPage->setSymbianSvgIcon(m_d->mobileApp->symbianSvgIcon());
+    m_d->wizardDialog->m_optionsPage->setMaemoPngIcon(m_d->mobileApp->maemoPngIcon());
+    m_d->wizardDialog->m_optionsPage->setOrientation(m_d->mobileApp->orientation());
+    m_d->wizardDialog->m_optionsPage->setNetworkEnabled(m_d->mobileApp->networkEnabled());
+    connect(m_d->wizardDialog, SIGNAL(introPageLeft(QString, QString)), SLOT(useProjectPath(QString, QString)));
+    foreach (QWizardPage *p, extensionPages)
+        BaseFileWizard::applyExtensionPageShortTitle(m_d->wizardDialog, m_d->wizardDialog->addPage(p));
+
+    return m_d->wizardDialog;
+}
+
+Core::GeneratedFiles MobileAppWizard::generateFiles(const QWizard *w,
+                                                           QString *errorMessage) const
+{
+    Q_UNUSED(errorMessage)
+
+    const MobileAppWizardDialog *wizard = qobject_cast<const MobileAppWizardDialog*>(w);
+
+    m_d->mobileApp->setProjectName(wizard->projectName());
+    m_d->mobileApp->setProjectPath(wizard->path());
+    m_d->mobileApp->setSymbianTargetUid(wizard->m_optionsPage->symbianUid());
+    m_d->mobileApp->setSymbianSvgIcon(wizard->m_optionsPage->symbianSvgIcon());
+    m_d->mobileApp->setOrientation(wizard->m_optionsPage->orientation());
+    m_d->mobileApp->setNetworkEnabled(wizard->m_optionsPage->networkEnabled());
+
+    return m_d->mobileApp->generateFiles(errorMessage);
+}
+
+bool MobileAppWizard::postGenerateFiles(const QWizard *wizard, const Core::GeneratedFiles &l, QString *errorMessage)
+{
+    Q_UNUSED(wizard)
+    return ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage);
+}
+
+void MobileAppWizard::useProjectPath(const QString &projectName, const QString &projectPath)
+{
+    m_d->wizardDialog->m_optionsPage->setSymbianUid(MobileApp::symbianUidForPath(projectPath + projectName));
+}
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#include "mobileappwizard.moc"
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
new file mode 100644
index 0000000000000000000000000000000000000000..cfb2b4afd6e62e64b273ff365d5adc56856c106f
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
@@ -0,0 +1,65 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef MOBILEAPPWIZARD_H
+#define MOBILEAPPWIZARD_H
+
+#include <coreplugin/basefilewizard.h>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class MobileAppWizard : public Core::BaseFileWizard
+{
+    Q_OBJECT
+
+public:
+    MobileAppWizard();
+    virtual ~MobileAppWizard();
+    static Core::BaseFileWizardParameters parameters();
+
+protected:
+    QWizard *createWizardDialog(QWidget *parent, const QString &defaultPath,
+                                const WizardPageList &extensionPages) const;
+    Core::GeneratedFiles generateFiles(const QWizard *wizard,
+                                       QString *errorMessage) const;
+    bool postGenerateFiles(const QWizard *w, const Core::GeneratedFiles &l,
+                           QString *errorMessage);
+
+private slots:
+    void useProjectPath(const QString &projectName, const QString &projectPath);
+
+private:
+    class MobileAppWizardPrivate *m_d;
+};
+
+} // end of namespace Internal
+} // end of namespace Qt4ProjectManager
+
+#endif // MOBILEAPPWIZARD_H
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui b/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui
new file mode 100644
index 0000000000000000000000000000000000000000..78878deca39ff7efce5a3f1fd077719428536a81
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardoptionspage.ui
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MobileAppWizardOptionPage</class>
+ <widget class="QWizardPage" name="MobileAppWizardOptionPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>404</width>
+    <height>548</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WizardPage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>General</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <property name="verticalSpacing">
+       <number>12</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="QLabel" name="orientationBehaviorLabel">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Orientation Behavior:</string>
+        </property>
+        <property name="buddy">
+         <cstring>orientationBehaviorComboBox</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QComboBox" name="orientationBehaviorComboBox"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTabWidget" name="platformsTabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
+       <string>Symbian specific</string>
+      </attribute>
+      <layout class="QFormLayout" name="formLayout">
+       <item row="0" column="0">
+        <widget class="QLabel" name="symbianAppIconLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Application Icon (.svg):</string>
+         </property>
+         <property name="buddy">
+          <cstring>symbianAppIconLoadToolButton</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <item>
+          <widget class="QLabel" name="symbianAppIconPreview">
+           <property name="minimumSize">
+            <size>
+             <width>45</width>
+             <height>45</height>
+            </size>
+           </property>
+           <property name="maximumSize">
+            <size>
+             <width>45</width>
+             <height>45</height>
+            </size>
+           </property>
+           <property name="frameShape">
+            <enum>QFrame::Panel</enum>
+           </property>
+           <property name="frameShadow">
+            <enum>QFrame::Sunken</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="symbianAppIconLoadToolButton">
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="symbianTargetUid3Label">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Target UID3:</string>
+         </property>
+         <property name="buddy">
+          <cstring>symbianTargetUid3LineEdit</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QLineEdit" name="symbianTargetUid3LineEdit"/>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item row="2" column="0" colspan="2">
+        <widget class="QCheckBox" name="symbianEnableNetworkChackBox">
+         <property name="text">
+          <string>Enable network access</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>Maemo specific</string>
+      </attribute>
+      <widget class="QLabel" name="maemoAppIconLabel">
+       <property name="geometry">
+        <rect>
+         <x>9</x>
+         <y>9</y>
+         <width>155</width>
+         <height>16</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Application Icon (64x64):</string>
+       </property>
+      </widget>
+      <widget class="QToolButton" name="maemoPngIconButton">
+       <property name="geometry">
+        <rect>
+         <x>171</x>
+         <y>10</y>
+         <width>71</width>
+         <height>70</height>
+        </rect>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>64</width>
+         <height>64</height>
+        </size>
+       </property>
+      </widget>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <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>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a9684d94d6b31e109f32e78f244233fd6ac1ae0f
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.cpp
@@ -0,0 +1,170 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "mobileappwizardpages.h"
+#include "ui_mobileappwizardoptionspage.h"
+#include <coreplugin/coreconstants.h>
+
+#include <QtGui/QDesktopServices>
+#include <QtGui/QFileDialog>
+#include <QtGui/QFileDialog>
+#include <QtGui/QMessageBox>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class MobileAppWizardOptionsPagePrivate
+{
+    Ui::MobileAppWizardOptionPage ui;
+    QString symbianSvgIcon;
+    QString maemoPngIcon;
+    friend class MobileAppWizardOptionsPage;
+};
+
+MobileAppWizardOptionsPage::MobileAppWizardOptionsPage(QWidget *parent)
+    : QWizardPage(parent)
+    , m_d(new MobileAppWizardOptionsPagePrivate)
+{
+    m_d->ui.setupUi(this);
+
+    const QIcon open = QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon);
+    m_d->ui.symbianAppIconLoadToolButton->setIcon(open);
+    connect(m_d->ui.symbianAppIconLoadToolButton, SIGNAL(clicked()), SLOT(openSymbianSvgIcon()));
+    connect(m_d->ui.maemoPngIconButton, SIGNAL(clicked()), this,
+        SLOT(openMaemoPngIcon()));
+
+    m_d->ui.orientationBehaviorComboBox->addItem(tr("Auto rotate orientation"),
+                                                   MobileApp::Auto);
+    m_d->ui.orientationBehaviorComboBox->addItem(tr("Lock to landscape orientation"),
+                                                   MobileApp::LockLandscape);
+    m_d->ui.orientationBehaviorComboBox->addItem(tr("Lock to portrait orientation"),
+                                                   MobileApp::LockPortrait);
+}
+
+MobileAppWizardOptionsPage::~MobileAppWizardOptionsPage()
+{
+    delete m_d;
+}
+
+void MobileAppWizardOptionsPage::setOrientation(MobileApp::Orientation orientation)
+{
+    QComboBox *const comboBox = m_d->ui.orientationBehaviorComboBox;
+    for (int i = 0; i < comboBox->count(); ++i)
+        if (comboBox->itemData(i).toInt() == static_cast<int>(orientation)) {
+            comboBox->setCurrentIndex(i);
+            break;
+        }
+}
+
+MobileApp::Orientation MobileAppWizardOptionsPage::orientation() const
+{
+    const int index = m_d->ui.orientationBehaviorComboBox->currentIndex();
+    return static_cast<MobileApp::Orientation>(m_d->ui.orientationBehaviorComboBox->itemData(index).toInt());
+}
+
+QString MobileAppWizardOptionsPage::symbianSvgIcon() const
+{
+    return m_d->symbianSvgIcon;
+}
+
+void MobileAppWizardOptionsPage::setSymbianSvgIcon(const QString &icon)
+{
+    QPixmap iconPixmap(icon);
+    if (!iconPixmap.isNull()) {
+        const int symbianIconSize = 44;
+        if (iconPixmap.height() > symbianIconSize || iconPixmap.width() > symbianIconSize)
+            iconPixmap = iconPixmap.scaledToHeight(symbianIconSize, Qt::SmoothTransformation);
+        m_d->ui.symbianAppIconPreview->setPixmap(iconPixmap);
+        m_d->symbianSvgIcon = icon;
+    }
+}
+
+QString MobileAppWizardOptionsPage::maemoPngIcon() const
+{
+    return m_d->maemoPngIcon;
+}
+
+void MobileAppWizardOptionsPage::setMaemoPngIcon(const QString &icon)
+{
+    QString error;
+    QPixmap iconPixmap(icon);
+    if (iconPixmap.isNull())
+        error = tr("The file is not a valid image.");
+    else if (iconPixmap.size() != QSize(64, 64))
+        error = tr("The icon has an invalid size.");
+    if (!error.isEmpty()) {
+        QMessageBox::warning(this, tr("Icon unusable"), error);
+    } else {
+        m_d->ui.maemoPngIconButton->setIcon(iconPixmap);
+        m_d->maemoPngIcon = icon;
+    }
+}
+
+QString MobileAppWizardOptionsPage::symbianUid() const
+{
+    return m_d->ui.symbianTargetUid3LineEdit->text();
+}
+
+void MobileAppWizardOptionsPage::setSymbianUid(const QString &uid)
+{
+    m_d->ui.symbianTargetUid3LineEdit->setText(uid);
+}
+
+void MobileAppWizardOptionsPage::setNetworkEnabled(bool enableIt)
+{
+    m_d->ui.symbianEnableNetworkChackBox->setChecked(enableIt);
+}
+
+bool MobileAppWizardOptionsPage::networkEnabled() const
+{
+    return m_d->ui.symbianEnableNetworkChackBox->isChecked();
+}
+
+void MobileAppWizardOptionsPage::openSymbianSvgIcon()
+{
+    const QString svgIcon = QFileDialog::getOpenFileName(
+            this,
+            m_d->ui.symbianAppIconLabel->text(),
+            QDesktopServices::storageLocation(QDesktopServices::PicturesLocation),
+            QLatin1String("*.svg"));
+    if (!svgIcon.isEmpty())
+        setSymbianSvgIcon(svgIcon);
+}
+
+void MobileAppWizardOptionsPage::openMaemoPngIcon()
+{
+    const QString iconPath = QFileDialog::getOpenFileName(this,
+        m_d->ui.maemoAppIconLabel->text(), m_d->maemoPngIcon,
+        QLatin1String("*.png"));
+    if (!iconPath.isEmpty())
+        setMaemoPngIcon(iconPath);
+}
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h
new file mode 100644
index 0000000000000000000000000000000000000000..cbea2f7b359523414b2201ab81a596302b69b34a
--- /dev/null
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizardpages.h
@@ -0,0 +1,71 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 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://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QMLSTANDALONEAPPWIZARDPAGES_H
+#define QMLSTANDALONEAPPWIZARDPAGES_H
+
+#include "mobileapp.h"
+
+#include <QtGui/QWizardPage>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class MobileAppWizardOptionsPage : public QWizardPage
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(MobileAppWizardOptionsPage)
+
+public:
+    explicit MobileAppWizardOptionsPage(QWidget *parent = 0);
+    virtual ~MobileAppWizardOptionsPage();
+
+    void setOrientation(MobileApp::Orientation orientation);
+    MobileApp::Orientation orientation() const;
+    QString symbianSvgIcon() const;
+    void setSymbianSvgIcon(const QString &icon);
+    QString maemoPngIcon() const;
+    void setMaemoPngIcon(const QString &icon);
+    QString symbianUid() const;
+    void setNetworkEnabled(bool enableIt);
+    bool networkEnabled() const;
+    void setSymbianUid(const QString &uid);
+
+private slots:
+    void openSymbianSvgIcon(); // Via file open dialog
+    void openMaemoPngIcon();
+
+private:
+    class MobileAppWizardOptionsPagePrivate *m_d;
+};
+
+} // end of namespace Internal
+} // end of namespace Qt4ProjectManager
+
+#endif // QMLSTANDALONEAPPWIZARDPAGES_H
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
index 6a63538199aee29df675945dfd2c95ea2556a8cd..12cfa12b1a2163f580986b50df6d5dcbdd5cf4ea 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.cpp
@@ -95,7 +95,7 @@ QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path,
     , proFile(proFile)
 {}
 
-GeneratedFileInfo::GeneratedFileInfo()
+QmlAppGeneratedFileInfo::QmlAppGeneratedFileInfo()
     : file(MainQmlFile)
     , version(-1)
     , dataChecksum(0)
@@ -103,17 +103,17 @@ GeneratedFileInfo::GeneratedFileInfo()
 {
 }
 
-bool GeneratedFileInfo::isUpToDate() const
+bool QmlAppGeneratedFileInfo::isUpToDate() const
 {
     return !isOutdated() && !wasModified();
 }
 
-bool GeneratedFileInfo::isOutdated() const
+bool QmlAppGeneratedFileInfo::isOutdated() const
 {
     return version < QmlStandaloneApp::stubVersion();
 }
 
-bool GeneratedFileInfo::wasModified() const
+bool QmlAppGeneratedFileInfo::wasModified() const
 {
     return dataChecksum != statedChecksum;
 }
@@ -551,20 +551,20 @@ Core::GeneratedFiles QmlStandaloneApp::generateFiles(QString *errorMessage) cons
     Core::GeneratedFiles files;
 
     if (!useExistingMainQml()) {
-        files.append(file(generateFile(GeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml)));
+        files.append(file(generateFile(QmlAppGeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml)));
         files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute);
     }
 
-    files.append(file(generateFile(GeneratedFileInfo::AppProFile, errorMessage), path(AppPro)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::AppProFile, errorMessage), path(AppPro)));
     files.last().setAttributes(Core::GeneratedFile::OpenProjectAttribute);
-    files.append(file(generateFile(GeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp)));
-    files.append(file(generateFile(GeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon)));
-    files.append(file(generateFile(GeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon)));
-    files.append(file(generateFile(GeneratedFileInfo::DesktopFile, errorMessage), path(Desktop)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::SymbianSvgIconFile, errorMessage), path(SymbianSvgIcon)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::MaemoPngIconFile, errorMessage), path(MaemoPngIcon)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::DesktopFile, errorMessage), path(Desktop)));
 
-    files.append(file(generateFile(GeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri)));
-    files.append(file(generateFile(GeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp)));
-    files.append(file(generateFile(GeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp)));
+    files.append(file(generateFile(QmlAppGeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH)));
 
     return files;
 }
@@ -593,7 +593,7 @@ static QByteArray readBlob(const QString &source)
     return sourceFile.readAll();
 }
 
-QByteArray QmlStandaloneApp::generateFile(GeneratedFileInfo::File file,
+QByteArray QmlStandaloneApp::generateFile(QmlAppGeneratedFileInfo::File file,
                                           const QString *errorMessage) const
 {
     QByteArray data;
@@ -602,35 +602,35 @@ QByteArray QmlStandaloneApp::generateFile(GeneratedFileInfo::File file,
     QString comment = cFileComment;
     bool versionAndChecksum = false;
     switch (file) {
-        case GeneratedFileInfo::MainQmlFile:
+        case QmlAppGeneratedFileInfo::MainQmlFile:
             data = readBlob(path(MainQmlOrigin));
             break;
-        case GeneratedFileInfo::MainCppFile:
+        case QmlAppGeneratedFileInfo::MainCppFile:
             data = generateMainCpp(errorMessage);
             break;
-        case GeneratedFileInfo::SymbianSvgIconFile:
+        case QmlAppGeneratedFileInfo::SymbianSvgIconFile:
             data = readBlob(path(SymbianSvgIconOrigin));
             break;
-        case GeneratedFileInfo::MaemoPngIconFile:
+        case QmlAppGeneratedFileInfo::MaemoPngIconFile:
             data = readBlob(path(MaemoPngIconOrigin));
             break;
-        case GeneratedFileInfo::DesktopFile:
+        case QmlAppGeneratedFileInfo::DesktopFile:
             data = generateDesktopFile(errorMessage);
             break;
-        case GeneratedFileInfo::AppProFile:
+        case QmlAppGeneratedFileInfo::AppProFile:
             data = generateProFile(errorMessage);
             comment = proFileComment;
             break;
-        case GeneratedFileInfo::AppViewerPriFile:
+        case QmlAppGeneratedFileInfo::AppViewerPriFile:
             data = readBlob(path(AppViewerPriOrigin));
             comment = proFileComment;
             versionAndChecksum = true;
             break;
-        case GeneratedFileInfo::AppViewerCppFile:
+        case QmlAppGeneratedFileInfo::AppViewerCppFile:
             data = readBlob(path(AppViewerCppOrigin));
             versionAndChecksum = true;
             break;
-        case GeneratedFileInfo::AppViewerHFile:
+        case QmlAppGeneratedFileInfo::AppViewerHFile:
         default:
             data = readBlob(path(AppViewerHOrigin));
             versionAndChecksum = true;
@@ -656,16 +656,16 @@ int QmlStandaloneApp::stubVersion()
     return 3;
 }
 
-static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile)
+static QList<QmlAppGeneratedFileInfo> updateableFiles(const QString &mainProFile)
 {
-    QList<GeneratedFileInfo> result;
+    QList<QmlAppGeneratedFileInfo> result;
     static const struct {
-        GeneratedFileInfo::File file;
+        QmlAppGeneratedFileInfo::File file;
         QString fileName;
     } files[] = {
-        {GeneratedFileInfo::AppViewerPriFile, appViewerPriFileName},
-        {GeneratedFileInfo::AppViewerHFile, appViewerHFileName},
-        {GeneratedFileInfo::AppViewerCppFile, appViewerCppFileName}
+        {QmlAppGeneratedFileInfo::AppViewerPriFile, appViewerPriFileName},
+        {QmlAppGeneratedFileInfo::AppViewerHFile, appViewerHFileName},
+        {QmlAppGeneratedFileInfo::AppViewerCppFile, appViewerCppFileName}
     };
     const QFileInfo mainProFileInfo(mainProFile);
     const int size = sizeof(files) / sizeof(files[0]);
@@ -674,7 +674,7 @@ static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile)
                 + QLatin1Char('/') + appViewerOriginsSubDir + files[i].fileName;
         if (!QFile::exists(fileName))
             continue;
-        GeneratedFileInfo file;
+        QmlAppGeneratedFileInfo file;
         file.file = files[i].file;
         file.fileInfo = QFileInfo(fileName);
         result.append(file);
@@ -682,11 +682,11 @@ static QList<GeneratedFileInfo> updateableFiles(const QString &mainProFile)
     return result;
 }
 
-QList<GeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFile)
+QList<QmlAppGeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFile)
 {
-    QList<GeneratedFileInfo> result;
-    foreach (const GeneratedFileInfo &file, updateableFiles(mainProFile)) {
-        GeneratedFileInfo newFile = file;
+    QList<QmlAppGeneratedFileInfo> result;
+    foreach (const QmlAppGeneratedFileInfo &file, updateableFiles(mainProFile)) {
+        QmlAppGeneratedFileInfo newFile = file;
         QFile readFile(newFile.fileInfo.absoluteFilePath());
         if (!readFile.open(QIODevice::ReadOnly))
            continue;
@@ -707,11 +707,11 @@ QList<GeneratedFileInfo> QmlStandaloneApp::fileUpdates(const QString &mainProFil
     return result;
 }
 
-bool QmlStandaloneApp::updateFiles(const QList<GeneratedFileInfo> &list, QString &error)
+bool QmlStandaloneApp::updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error)
 {
     error.clear();
     const QmlStandaloneApp app;
-    foreach (const GeneratedFileInfo &info, list) {
+    foreach (const QmlAppGeneratedFileInfo &info, list) {
         const QByteArray data = app.generateFile(info.file, &error);
         if (!error.isEmpty())
             return false;
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
index c3501708d9c7c32614233e824517e2c7fd77f56c..03deb386c215523ae88127b3cc2208d4571c6156 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneapp.h
@@ -76,7 +76,7 @@ struct QmlCppPlugin
     const QFileInfo proFile;        // .pro file for the plugin
 };
 
-struct GeneratedFileInfo
+struct QmlAppGeneratedFileInfo
 {
     enum File {
         MainQmlFile,
@@ -90,7 +90,7 @@ struct GeneratedFileInfo
         DesktopFile
     };
 
-    GeneratedFileInfo();
+    QmlAppGeneratedFileInfo();
 
     bool isUpToDate() const;
     bool isOutdated() const;
@@ -170,10 +170,10 @@ public:
     bool useExistingMainQml() const;
     QString error() const;
     const QList<QmlModule*> modules() const;
-    QByteArray generateFile(GeneratedFileInfo::File file, const QString *errorMessage) const;
+    QByteArray generateFile(QmlAppGeneratedFileInfo::File file, const QString *errorMessage) const;
     static int stubVersion();
-    static QList<GeneratedFileInfo> fileUpdates(const QString &mainProFile);
-    static bool updateFiles(const QList<GeneratedFileInfo> &list, QString &error);
+    static QList<QmlAppGeneratedFileInfo> fileUpdates(const QString &mainProFile);
+    static bool updateFiles(const QList<QmlAppGeneratedFileInfo> &list, QString &error);
 
 private:
     QByteArray generateMainCpp(const QString *errorMessage) const;