diff --git a/src/libs/qmljs/qmljscompletioncontextfinder.cpp b/src/libs/qmljs/qmljscompletioncontextfinder.cpp
index 0fd7ab856b193b9fe818c3c1b3ee853cf49d6f26..645472c220340e682f008bcf670036e3ef889793 100644
--- a/src/libs/qmljs/qmljscompletioncontextfinder.cpp
+++ b/src/libs/qmljs/qmljscompletioncontextfinder.cpp
@@ -31,6 +31,9 @@ CompletionContextFinder::CompletionContextFinder(const QTextCursor &cursor)
             break;
     }
 
+    if (m_startTokenIndex == yyLinizerState.tokens.size() - 1 && yyLinizerState.insertedSemicolon)
+        --m_startTokenIndex;
+
     getQmlObjectTypeName(m_startTokenIndex);
     checkBinding();
 }
diff --git a/src/libs/qmljs/qmljsindenter.cpp b/src/libs/qmljs/qmljsindenter.cpp
index 49b95ebc86a2e84d62f8a31d7b30bf14af43359f..ba941c0e07c3e10f8a6337bf8a51ce74431adcf3 100644
--- a/src/libs/qmljs/qmljsindenter.cpp
+++ b/src/libs/qmljs/qmljsindenter.cpp
@@ -569,6 +569,9 @@ int QmlJSIndenter::indentForStandaloneLine()
 */
 int QmlJSIndenter::indentForBottomLine(QTextBlock begin, QTextBlock end, QChar typedIn)
 {
+    if (begin == end)
+        return 0;
+
     const QTextBlock last = end.previous();
 
     initialize(begin, last);
diff --git a/src/libs/qmljs/qmljslineinfo.cpp b/src/libs/qmljs/qmljslineinfo.cpp
index 29f74443ad92a286830d4fc11f99918088a448c6..5bae0d727c5789febba8c8c54ea4e1d76eee9b15 100644
--- a/src/libs/qmljs/qmljslineinfo.cpp
+++ b/src/libs/qmljs/qmljslineinfo.cpp
@@ -208,6 +208,7 @@ QString LineInfo::trimmedCodeLine(const QString &t)
             const Token sc(trimmed.size(), 1, Token::Semicolon);
             yyLinizerState.tokens.append(sc);
             trimmed.append(QLatin1Char(';'));
+            yyLinizerState.insertedSemicolon = true;
         }
     }
 
@@ -276,6 +277,8 @@ bool LineInfo::readLine()
             (firstNonWhiteSpace(yyLinizerState.line) == QLatin1Char('{'));
 
     do {
+        yyLinizerState.insertedSemicolon = false;
+
         if (yyLinizerState.iter == yyProgram.firstBlock()) {
             yyLinizerState.line.clear();
             return false;
@@ -332,6 +335,7 @@ void LineInfo::startLinizer()
 {
     yyLinizerState.braceDepth = 0;
     yyLinizerState.pendingRightBrace = false;
+    yyLinizerState.insertedSemicolon = false;
 
     yyLine = &yyLinizerState.line;
     yyBraceDepth = &yyLinizerState.braceDepth;
@@ -564,9 +568,6 @@ bool LineInfo::isContinuationLine()
 
 void LineInfo::initialize(QTextBlock begin, QTextBlock end)
 {
-    if (begin == end)
-        return;
-
     yyProgram = Program(begin, end);
     startLinizer();
 }
diff --git a/src/libs/qmljs/qmljslineinfo.h b/src/libs/qmljs/qmljslineinfo.h
index 2112e313f0a890b4ec3e0b49cc6012c7d9a75db5..8173f9ddc72ff4891db8fd3c99887b421d58d32f 100644
--- a/src/libs/qmljs/qmljslineinfo.h
+++ b/src/libs/qmljs/qmljslineinfo.h
@@ -84,12 +84,14 @@ protected:
         LinizerState()
             : braceDepth(0),
               leftBraceFollows(false),
-              pendingRightBrace(false)
+              pendingRightBrace(false),
+              insertedSemicolon(false)
         { }
 
         int braceDepth;
         bool leftBraceFollows;
         bool pendingRightBrace;
+        bool insertedSemicolon;
         QString line;
         QList<Token> tokens;
         QTextBlock iter;
diff --git a/src/plugins/debugger/registerpostmortemaction.cpp b/src/plugins/debugger/registerpostmortemaction.cpp
index 4398a1d977284a69f020dbbbde145e19fc255bec..b18e09c2ac6e939d743323ba608384b710516922 100644
--- a/src/plugins/debugger/registerpostmortemaction.cpp
+++ b/src/plugins/debugger/registerpostmortemaction.cpp
@@ -79,6 +79,8 @@ RegisterPostMortemAction::RegisterPostMortemAction(QObject *parent) : Utils::Sav
 
 void RegisterPostMortemAction::readSettings(const QSettings *)
 {
+    Q_UNUSED(debuggerRegistryValueNameC); // avoid warning from MinGW
+
     bool registered = false;
     HKEY handle = 0;
     QString errorMessage;
diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp
index a5a5d15f5759d0e72df7a21d6b8cf298d381ccb9..aae8b16863bacd34d8b44cdcc7ad806761683285 100644
--- a/src/plugins/qmljseditor/qmljscodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp
@@ -690,7 +690,6 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
 
         if (contextFinder.isInRhsOfBinding() && qmlScopeType) {
             doQmlKeywordCompletion = false;
-            qDebug() << "property name: " << contextFinder.bindingPropertyName();
 
             if (!contextFinder.bindingPropertyName().isEmpty()) {
                 const Interpreter::Value *value = qmlScopeType;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
index 95181658a659b7f58c006be688b7ce59544ceb8b..8633d8dcf34d1716ad98ad801055a8fe6243ee67 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h
@@ -96,6 +96,7 @@ const char * const DESKTOP_TARGET_ID("Qt4ProjectManager.Target.DesktopTarget");
 const char * const S60_EMULATOR_TARGET_ID("Qt4ProjectManager.Target.S60EmulatorTarget");
 const char * const S60_DEVICE_TARGET_ID("Qt4ProjectManager.Target.S60DeviceTarget");
 const char * const MAEMO_DEVICE_TARGET_ID("Qt4ProjectManager.Target.MaemoDeviceTarget");
+const char * const QT_SIMULATOR_TARGET_ID("Qt4ProjectManager.Target.QtSimulatorTarget");
 
 } // namespace Constants
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index 26cafa8ba1564b267889553900355728a490c2d0..784897f64613a8800b0b0270e80efa7feb930375 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -65,6 +65,8 @@ QString displayNameForId(const QString &id) {
         return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Symbian Device", "Qt4 Symbian Device target display name");
     if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
         return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Maemo", "Qt4 Maemo target display name");
+    if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+        return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Qt Simulator", "Qt4 Simulator target display name");
     return QString();
 }
 
@@ -77,6 +79,8 @@ QIcon iconForId(const QString &id) {
         return QIcon(":/projectexplorer/images/SymbianDevice.png");
     if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
         return QIcon(":/projectexplorer/images/MaemoDevice.png");
+    if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+        return QIcon(":/projectexplorer/images/SymbianEmulator.png");
     return QIcon();
 }
 
@@ -315,7 +319,8 @@ Qt4BuildConfigurationFactory *Qt4Target::buildConfigurationFactory() const
 
 void Qt4Target::addRunConfigurationForPath(const QString &proFilePath)
 {
-    if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID))
+    if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID) ||
+        id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
         addRunConfiguration(new Qt4RunConfiguration(this, proFilePath));
     else if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
         addRunConfiguration(new S60EmulatorRunConfiguration(this, proFilePath));
@@ -370,6 +375,8 @@ QString Qt4Target::defaultBuildDirectory() const
         shortName = QLatin1String("symbian");
     else if (id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
         shortName = QLatin1String("maemo");
+    else if (id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+        shortName = QLatin1String("simulator");
 
     // currently we can't have the build directory to be deeper then the source directory
     // since that is broken in qmake
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp
index 26b27def1c608ac0f504151da504294a9185672d..12c42f4b85d09024c88700065d98df5242453bce 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.cpp
+++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp
@@ -528,6 +528,8 @@ void QtOptionsPageWidget::showEnvironmentPage(QTreeWidgetItem *item)
                 envs = tr("Symbian", "Qt Version is meant for Symbian");
             else if (targets.contains(Constants::MAEMO_DEVICE_TARGET_ID))
                 envs = tr("Maemo", "Qt Version is meant for Maemo");
+            else if (targets.contains(Constants::QT_SIMULATOR_TARGET_ID))
+                envs = tr("Qt Simulator", "Qt Version is meant for Qt Simulator");
             else
                 envs = tr("unkown", "No idea what this Qt Version is meant for!");
             m_ui->errorLabel->setText(tr("Found Qt version %1, using mkspec %2 (%3)")
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index b55b4b0729966685fa8157fb80eea2a0a9dc0d08..b658c96b79376b753390395fb3bb3458d93506b3 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -47,6 +47,7 @@
 #include <help/helpmanager.h>
 #include <utils/qtcassert.h>
 
+#include <QtCore/QFile>
 #include <QtCore/QProcess>
 #include <QtCore/QSettings>
 #include <QtCore/QTime>
@@ -1196,7 +1197,8 @@ bool QtVersion::supportsMobileTarget() const
 {
     return supportsTargetId(Constants::S60_DEVICE_TARGET_ID) ||
            supportsTargetId(Constants::S60_EMULATOR_TARGET_ID) ||
-           supportsTargetId(Constants::MAEMO_DEVICE_TARGET_ID);
+           supportsTargetId(Constants::MAEMO_DEVICE_TARGET_ID) ||
+	   supportsTargetId(Constants::QT_SIMULATOR_TARGET_ID);
 }
 
 QList<QSharedPointer<ProjectExplorer::ToolChain> > QtVersion::toolChains() const
@@ -1420,6 +1422,31 @@ void QtVersion::updateToolChainAndMkspec() const
     delete reader;
     ProFileCacheManager::instance()->decRefCount();
     m_toolChainUpToDate = true;
+
+    // Check qconfig.h for QT_SIMULATOR define on desktop builds and switch the
+    // Qt version to Qt simulator target:
+    if (m_targetIds.contains(Constants::DESKTOP_TARGET_ID)) {
+        QString path(headerInstallPath());
+        path.append(QLatin1String("/Qt/qconfig.h"));
+        QFile qconfig(path);
+        if (!qconfig.exists())
+            return;
+        qconfig.open(QIODevice::ReadOnly);
+        QTextStream stream(&qconfig);
+        QString line;
+        bool isSimulator = false;
+        while (!(line = stream.readLine()).isNull()) {
+            if (line.startsWith(QLatin1String("#define QT_SIMULATOR"))) {
+                isSimulator = true;
+                break;
+            }
+        }
+        qconfig.close();
+        if (isSimulator) {
+            m_targetIds.remove(QLatin1String(Constants::DESKTOP_TARGET_ID));
+            m_targetIds.insert(QLatin1String(Constants::QT_SIMULATOR_TARGET_ID));
+        }
+    }
 }
 
 QString QtVersion::mwcDirectory() const
@@ -1590,6 +1617,12 @@ QString QtVersion::demosPath() const
     return m_versionInfo["QT_INSTALL_DEMOS"];
 }
 
+QString QtVersion::headerInstallPath() const
+{
+    updateVersionInfo();
+    return m_versionInfo["QT_INSTALL_HEADERS"];
+}
+
 bool QtVersion::hasExamples() const
 {
     updateVersionInfo();
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 68e155348f955bfe901d75b2ed092d89bfeb9e2f..6ccacad40614f1d8445f2a18031ea5d7ede8173e 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -123,6 +123,8 @@ public:
     bool hasDemos() const;
     QString demosPath() const;
 
+    QString headerInstallPath() const;
+
     // All valid Ids are >= 0
     int uniqueId() const;
     bool isQt64Bit() const;
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index 61de3d88ca7ff5912a60e3cc54f7491422740f87..dfe383e3fa0da7f23e1f985c21f5a75ca50a8c25 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -245,8 +245,11 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
         if (!targetInfos.isEmpty())
             target = project->targetFactory()->create(project, targetId, targetInfos);
 
-        if (target)
+        if (target) {
             project->addTarget(target);
+            if (target->id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+                project->setActiveTarget(target);
+        }
     }
 
     // Create the default target if nothing else was set up:
diff --git a/src/shared/registryaccess/registryaccess.cpp b/src/shared/registryaccess/registryaccess.cpp
index f4148d06d596e1bde549ae3b5d68d8c747153adb..3b0c8ae90e00aa308c3e05fa5b8669763d0dd40e 100644
--- a/src/shared/registryaccess/registryaccess.cpp
+++ b/src/shared/registryaccess/registryaccess.cpp
@@ -104,6 +104,7 @@ bool openRegistryKey(HKEY category, // HKEY_LOCAL_MACHINE, etc.
                      HKEY *keyHandle,
                      QString *errorMessage)
 {
+    Q_UNUSED(debuggerRegistryKeyC);  // avoid warning from MinGW
 
     REGSAM accessRights = KEY_READ;
     if (readWrite)