diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index e1dbd44f7341c8af17cfd01631ab99cb113f2855..969070bc3a1543bff8e6ddf79ad65616e857025a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -55,6 +55,7 @@
 #include <QtGui/QLabel>
 #include <QtGui/QLineEdit>
 #include <QtGui/QRadioButton>
+#include <QtGui/QToolButton>
 
 using namespace ProjectExplorer;
 
@@ -82,6 +83,8 @@ private slots:
 #endif
 
     void updateTargetInformation();
+    
+    void updateSimulatorPath();
     void updateVisibleSimulatorParameter();
 
 private:
@@ -250,6 +253,9 @@ static const QLatin1String LastDeployedKey("LastDeployed");
 static const QLatin1String DebuggingHelpersLastDeployedKey(
     "DebuggingHelpersLastDeployed");
 
+static const QLatin1String SimulatorPath("SimulatorPath");
+static const QLatin1String IsUserSetSimulator("IsUserSetSimulator");
+
 #if USE_SSL_PASSWORD
 static const QLatinString RemoteUserPasswordKey("RemoteUserPassword");
 static const QLatinString RemoteHostRequiresPasswordKey(
@@ -262,6 +268,7 @@ MaemoRunConfiguration::MaemoRunConfiguration(Project *project,
     , m_proFilePath(proFilePath)
     , m_cachedTargetInformationValid(false)
     , m_cachedSimulatorInformationValid(false)
+    , m_isUserSetSimulator(false)
     , m_remotePortSim(22)
     , m_remotePortDevice(22)
     , qemu(0)
@@ -348,7 +355,9 @@ void MaemoRunConfiguration::save(PersistentSettingsWriter &writer) const
     writer.saveValue(DebuggingHelpersLastDeployedKey,
         m_debuggingHelpersLastDeployed);
 
-    writer.saveValue("Runtime", m_simulatorPath);
+    writer.saveValue(SimulatorPath, m_simulatorPath);
+    writer.saveValue(IsUserSetSimulator, m_isUserSetSimulator);
+
     const QDir &dir = QFileInfo(project()->file()->fileName()).absoluteDir();
     writer.saveValue("ProFile", dir.relativeFilePath(m_proFilePath));
 
@@ -383,7 +392,9 @@ void MaemoRunConfiguration::restore(const PersistentSettingsReader &reader)
     m_debuggingHelpersLastDeployed =
         reader.restoreValue(DebuggingHelpersLastDeployedKey).toDateTime();
 
-    m_simulatorPath = reader.restoreValue("Runtime").toString();
+    m_simulatorPath = reader.restoreValue(SimulatorPath).toString();
+    m_isUserSetSimulator = reader.restoreValue(IsUserSetSimulator).toBool();
+
     const QDir &dir = QFileInfo(project()->file()->fileName()).absoluteDir();
     m_proFilePath = dir.filePath(reader.restoreValue("ProFile").toString());
 }
@@ -611,16 +622,17 @@ void MaemoRunConfiguration::invalidateCachedTargetInformation()
     emit targetInformationChanged();
 }
 
-void MaemoRunConfiguration::setSimulatorPath(const QString &path)
+void MaemoRunConfiguration::setUserSimulatorPath(const QString &path)
 {
-    qDebug("MaemoRunConfiguration::setSimulatorPath() called, "
+    qDebug("MaemoRunConfiguration::setUserSimulatorPath() called, "
         "m_simulatorPath: %s, new path: %s", qPrintable(m_simulatorPath),
         qPrintable(path));
 
-    if (m_simulatorPath != path)
+    m_isUserSetSimulator = true;
+    if (m_userSimulatorPath != path)
         m_cachedSimulatorInformationValid = false;
 
-    m_simulatorPath = path;
+    m_userSimulatorPath = path;
     emit cachedSimulatorInformationChanged();
 }
 
@@ -633,6 +645,15 @@ void MaemoRunConfiguration::invalidateCachedSimulatorInformation()
     emit cachedSimulatorInformationChanged();
 }
 
+void MaemoRunConfiguration::resetCachedSimulatorInformation()
+{
+    m_userSimulatorPath.clear();
+    m_isUserSetSimulator = false;
+
+    m_cachedSimulatorInformationValid = false;
+    emit cachedSimulatorInformationChanged();
+}
+
 void MaemoRunConfiguration::updateTarget()
 {
     if (m_cachedTargetInformationValid)
@@ -732,47 +753,56 @@ void MaemoRunConfiguration::updateTarget()
 
 void MaemoRunConfiguration::updateSimulatorInformation()
 {
-    qDebug("MaemoRunConfiguration::updateSimulatorInformation() called");
-
     if (m_cachedSimulatorInformationValid)
         return;
 
     m_simulator = QString::null;
     m_simulatorArgs == QString::null;
     m_cachedSimulatorInformationValid = true;
-    m_visibleSimulatorParameter = tr("Please select a Maemo simulator.");
+    m_simulatorPath = QDir::toNativeSeparators(m_userSimulatorPath);
+    m_visibleSimulatorParameter = tr("Could not autodetect target simulator, "
+        "please choose one on your own.");
+
+    if (!m_isUserSetSimulator)
+        m_simulatorPath = QDir::toNativeSeparators(toolchain()->simulatorRoot());
 
     if (!m_simulatorPath.isEmpty()) {
         m_visibleSimulatorParameter = tr("'%1' is not a valid Maemo simulator.")
             .arg(m_simulatorPath);
     }
 
-    const QStringList &files = QDir(m_simulatorPath).entryList(QDir::Files
-        | QDir::NoSymLinks | QDir::NoDotAndDotDot);
-    if (files.count() >= 2) {
-        const QLatin1String info("information");
-        if (files.contains(info)) {
-            QFile file(m_simulatorPath + QLatin1Char('/') + info);
-            if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
-                QMap<QString, QString> map;
-                QTextStream stream(&file);
-                while (!stream.atEnd()) {
-                    const QString &line = stream.readLine().trimmed();
-                    const int index = line.indexOf(QLatin1Char('='));
-                    map.insert(line.mid(0, index).remove(QLatin1Char('\'')),
-                        line.mid(index + 1).remove(QLatin1Char('\'')));
-                }
-
-                m_simulator = map.value(QLatin1String("runcommand"));
-                m_simulatorArgs = map.value(QLatin1String("runcommand_args"));
-
-                m_visibleSimulatorParameter = m_simulator
+    QDir dir(m_simulatorPath);
+    if (dir.exists(m_simulatorPath)) {
+        const QStringList &files = dir.entryList(QDir::Files | QDir::NoSymLinks
+            | QDir::NoDotAndDotDot);
+        if (files.count() >= 2) {
+            const QLatin1String info("information");
+            if (files.contains(info)) {
+                QFile file(m_simulatorPath + QLatin1Char('/') + info);
+                if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+                    QMap<QString, QString> map;
+                    QTextStream stream(&file);
+                    while (!stream.atEnd()) {
+                        const QString &line = stream.readLine().trimmed();
+                        const int index = line.indexOf(QLatin1Char('='));
+                        map.insert(line.mid(0, index).remove(QLatin1Char('\'')),
+                            line.mid(index + 1).remove(QLatin1Char('\'')));
+                    }
+
+                    m_simulator = map.value(QLatin1String("runcommand"));
+                    m_simulatorArgs = map.value(QLatin1String("runcommand_args"));
+
+                    m_visibleSimulatorParameter = m_simulator
 #ifdef Q_OS_WIN
-                    + QLatin1String(".exe")
+                        + QLatin1String(".exe")
 #endif
-                    + QLatin1Char(' ') + m_simulatorArgs;
+                        + QLatin1Char(' ') + m_simulatorArgs;
+                }
             }
         }
+    } else {
+        m_visibleSimulatorParameter = tr("'%1' could not be found. Please "
+            "choose a simulator on your own.").arg(m_simulatorPath);
     }
 
     emit cachedSimulatorInformationChanged();
@@ -856,11 +886,29 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     m_chooseSimPathLabel = new QLabel(tr("Choose simulator:"));
     m_simPathChooser = new Utils::PathChooser;
     m_simPathChooser->setPath(m_runConfiguration->simulatorPath());
-    mainLayout->addRow(m_chooseSimPathLabel, m_simPathChooser);
+
+    QHBoxLayout *pathLayout = new QHBoxLayout;
+    pathLayout->addWidget(m_simPathChooser);
+
+    QToolButton *resetButton = new QToolButton();
+    resetButton->setToolTip(tr("Reset to default"));
+    resetButton->setIcon(QIcon(":/core/images/reset.png"));
+    pathLayout->addWidget(resetButton);
+
+    mainLayout->addRow(m_chooseSimPathLabel, pathLayout);
     m_simParamsNameLabel = new QLabel(tr("Simulator command line:"));
     m_simParamsValueLabel= new QLabel(m_runConfiguration->visibleSimulatorParameter());
     mainLayout->addRow(m_simParamsNameLabel, m_simParamsValueLabel);
 
+    connect(m_simPathChooser, SIGNAL(changed(QString)), m_runConfiguration,
+        SLOT(setUserSimulatorPath(QString)));
+    connect(m_runConfiguration, SIGNAL(cachedSimulatorInformationChanged()),
+        this, SLOT(updateSimulatorPath()));
+    connect(m_runConfiguration, SIGNAL(cachedSimulatorInformationChanged()),
+        this, SLOT(updateVisibleSimulatorParameter()));
+    connect(resetButton, SIGNAL(clicked()), m_runConfiguration,
+        SLOT(resetCachedSimulatorInformation()));
+
     m_hostNameLineEdit = new QLineEdit(m_runConfiguration->remoteHostName());
     mainLayout->addRow(tr("Remote host name:"), m_hostNameLineEdit);
     m_userLineEdit = new QLineEdit(m_runConfiguration->remoteUserName());
@@ -878,6 +926,11 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     m_passwordLineEdit->setEchoMode(QLineEdit::Password);
     m_passwordLineEdit->setEnabled(m_passwordCheckBox->isChecked());
     mainLayout->addRow(m_passwordCheckBox, m_passwordLineEdit);
+
+    connect(m_passwordCheckBox, SIGNAL(stateChanged(int)), this,
+        SLOT(passwordUseChanged()));
+    connect(m_passwordLineEdit, SIGNAL(textEdited(QString)), this,
+        SLOT(passwordEdited(QString)));
 #endif
 
     connect(m_configNameLineEdit, SIGNAL(textEdited(QString)), this,
@@ -892,18 +945,8 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
         SLOT(hostNameEdited(QString)));
     connect(m_userLineEdit, SIGNAL(textEdited(QString)), this,
         SLOT(userNameEdited(QString)));
-#if USE_SSL_PASSWORD
-    connect(m_passwordCheckBox, SIGNAL(stateChanged(int)), this,
-        SLOT(passwordUseChanged()));
-    connect(m_passwordLineEdit, SIGNAL(textEdited(QString)), this,
-        SLOT(passwordEdited(QString)));
-#endif
     connect(m_portLineEdit, SIGNAL(textEdited(QString)), this,
         SLOT(portEdited(QString)));
-    connect(m_simPathChooser, SIGNAL(changed(QString)), m_runConfiguration,
-        SLOT(setSimulatorPath(QString)));
-    connect(m_runConfiguration, SIGNAL(cachedSimulatorInformationChanged()),
-        this, SLOT(updateVisibleSimulatorParameter()));
     if (m_runConfiguration->remoteHostIsSimulator())
         m_simButton->setChecked(true);
     else
@@ -925,6 +968,11 @@ void MaemoRunConfigurationWidget::updateTargetInformation()
     m_executableLabel->setText(m_runConfiguration->executable());
 }
 
+void MaemoRunConfigurationWidget::updateSimulatorPath()
+{
+    m_simPathChooser->setPath(m_runConfiguration->simulatorPath());
+}
+
 void MaemoRunConfigurationWidget::updateVisibleSimulatorParameter()
 {
     m_simParamsValueLabel->setText(m_runConfiguration->visibleSimulatorParameter());
@@ -1017,7 +1065,7 @@ QString MaemoRunConfigurationFactory::displayNameForType(
     const QString &type) const
 {
     const int size = QString::fromLocal8Bit("MaemoRunConfiguration.").size();
-    return tr("%1 on Maemo device").arg(QFileInfo(type.mid(size))
+    return tr("%1 on Maemo Device").arg(QFileInfo(type.mid(size))
         .completeBaseName());
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index c4b07f874376cbd71d777f3ba6e9e834b44621e3..def8fd4aa78351f3e5eef719e48b8c37dda857ea 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -129,8 +129,9 @@ signals:
 private slots:
     void invalidateCachedTargetInformation();
 
-    void setSimulatorPath(const QString &path);
+    void setUserSimulatorPath(const QString &path);
     void invalidateCachedSimulatorInformation();
+    void resetCachedSimulatorInformation();
 
     void startStopQemu();
     void qemuProcessFinished();
@@ -156,6 +157,9 @@ private:
     QString m_visibleSimulatorParameter;
     bool m_cachedSimulatorInformationValid;
 
+    bool m_isUserSetSimulator;
+    QString m_userSimulatorPath;
+
     QString m_gdbPath;
 
     // Information about the remote host.