diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 95853429644f8662f6eb2b0dbeaeca3f311b02e3..8955c546f57cfacd626178f822b84ca52e0f088a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -147,7 +147,7 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project,
     , m_cachedSimulatorInformationValid(false)
     , qemu(0)
 {
-    ctor();
+    init();
 }
 
 MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project,
@@ -160,6 +160,9 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project,
     , m_simulatorArgs(source->m_simulatorArgs)
     , m_simulatorPath(source->m_simulatorPath)
     , m_visibleSimulatorParameter(source->m_visibleSimulatorParameter)
+    , m_simulatorLibPath(source->m_simulatorLibPath)
+    , m_simulatorSshPort(source->m_simulatorSshPort)
+    , m_simulatorGdbServerPort(source->m_simulatorGdbServerPort)
     , m_cachedSimulatorInformationValid(false)
     , m_isUserSetSimulator(source->m_isUserSetSimulator)
     , m_userSimulatorPath(source->m_userSimulatorPath)
@@ -174,10 +177,10 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Project *project,
     , m_remoteHostRequiresPassword(source->m_remoteHostRequiresPassword)
 #endif
 {
-    ctor();
+    init();
 }
 
-void MaemoRunConfiguration::ctor()
+void MaemoRunConfiguration::init()
 {
     if (!m_proFilePath.isEmpty()) {
         setDisplayName(tr("%1 on Maemo device").arg(QFileInfo(m_proFilePath)
@@ -537,8 +540,15 @@ void MaemoRunConfiguration::updateSimulatorInformation()
                             line.mid(index + 1).remove(QLatin1Char('\'')));
                     }
 
-                    m_simulator = map.value(QLatin1String("runcommand"));
-                    m_simulatorArgs = map.value(QLatin1String("runcommand_args"));
+                    m_simulator = map.value(QLatin1String("qemu"));
+                    m_simulatorArgs = map.value(QLatin1String("qemu_args"));
+                    const QString &libPathSpec
+                        = map.value(QLatin1String("libpath"));
+                    m_simulatorLibPath
+                        = libPathSpec.mid(libPathSpec.indexOf(QLatin1Char('=')) + 1);
+                    m_simulatorSshPort = map.value(QLatin1String("sshport"));
+                    m_simulatorGdbServerPort
+                        = map.value(QLatin1String("redirport2"));
 
                     m_visibleSimulatorParameter = m_simulator
 #ifdef Q_OS_WIN
@@ -571,23 +581,27 @@ void MaemoRunConfiguration::startStopQemu()
     if (root.isEmpty() || simulator().isEmpty())
         return;
 
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+#ifdef Q_OS_WIN
     const QLatin1Char colon(';');
     const QString path = QDir::toNativeSeparators(root + QLatin1Char('/'));
-
-    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-    env.insert("PATH", env.value("Path") + colon + path + QLatin1String("bin"));
-    env.insert("PATH", env.value("Path") + colon + path + QLatin1String("madlib"));
-
+    const QLatin1String key("PATH");
+    env.insert(key, env.value(key) % colon % path % QLatin1String("bin"));
+    env.insert(key, env.value(key) % colon % path % QLatin1String("madlib"));
+#elif defined(Q_OS_UNIX)
+    const QLatin1String key("LD_LIBRARY_PATH");
+    env.insert(key, env.value(key) % QLatin1Char(':') % m_simulatorLibPath);
+#endif
     qemu->setProcessEnvironment(env);
     qemu->setWorkingDirectory(simulatorPath());
 
-    QString app = root + QLatin1String("/madlib/") + simulator()
+    const QString app = root % QLatin1String("/madlib/") % simulator()
 #ifdef Q_OS_WIN
-        + QLatin1String(".exe")
+        % QLatin1String(".exe")
 #endif
     ;   // keep
 
-    qemu->start(app + QLatin1Char(' ') + simulatorArgs(), QIODevice::ReadWrite);
+    qemu->start(app % QLatin1Char(' ') % simulatorArgs(), QIODevice::ReadWrite);
     emit qemuProcessStatus(qemu->waitForStarted());
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index 1da3fb24d4ae37ae773c0cfab5984f7d78e63064..102b2c7b6de1961950c0b683a141d5d8f5a7086f 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -96,6 +96,8 @@ public:
     QString simulator() const;
     QString simulatorArgs() const;
     QString simulatorPath() const;
+    QString simulatorSshPort() const { return m_simulatorSshPort; }
+    QString simulatorGdbServerPort() const { return m_simulatorGdbServerPort; }
     QString visibleSimulatorParameter() const;
 
     const QString sshCmd() const;
@@ -142,7 +144,7 @@ private slots:
     void enabledStateChanged();
 
 private:
-    void ctor();
+    void init();
     void updateTarget();
     void updateSimulatorInformation();
     const QString cmd(const QString &cmdName) const;
@@ -157,6 +159,9 @@ private:
     QString m_simulatorArgs;
     QString m_simulatorPath;
     QString m_visibleSimulatorParameter;
+    QString m_simulatorLibPath;
+    QString m_simulatorSshPort;
+    QString m_simulatorGdbServerPort;
     bool m_cachedSimulatorInformationValid;
 
     bool m_isUserSetSimulator;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index 92c9f7e82d1e5b21ff6826a904c45ee5dcf43d17..bdd1b60da65ba7c0caa7a23d3362db08e9937beb 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -69,6 +69,7 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     QHBoxLayout *devConfLayout = new QHBoxLayout(devConfWidget);
     m_devConfBox = new QComboBox;
     m_devConfBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+    devConfLayout->setMargin(0);
     devConfLayout->addWidget(m_devConfBox);
     QLabel *addDevConfLabel
         = new QLabel(tr("<a href=\"#\">Manage device configurations</a>"));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index 4f943788cb45bbacab48286094e96f9a11384638..2351d6611d5aae1b6936f3a6ba4b0dbd6185306e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -244,7 +244,9 @@ const QString AbstractMaemoRunControl::executableOnHost() const
 
 const QString AbstractMaemoRunControl::sshPort() const
 {
-    return QString::number(devConfig.sshPort);
+    return devConfig.type == MaemoDeviceConfig::Physical
+        ? QString::number(devConfig.sshPort)
+        : runConfig->simulatorSshPort();
 }
 
 const QString AbstractMaemoRunControl::executableFileName() const
@@ -476,8 +478,7 @@ MaemoDebugRunControl::MaemoDebugRunControl(RunConfiguration *runConfiguration)
     startParams->startMode = Debugger::StartRemote;
     startParams->executable = executableOnHost();
     startParams->remoteChannel
-        = devConfig.host % QLatin1Char(':')
-          % QString::number(devConfig.gdbServerPort);
+        = devConfig.host % QLatin1Char(':') % gdbServerPort();
     startParams->remoteArchitecture = QLatin1String("arm");
     startParams->sysRoot = runConfig->sysRoot();
     startParams->toolChainType = ToolChain::GCC_MAEMO;
@@ -518,7 +519,7 @@ void MaemoDebugRunControl::handleDeploymentFinished(bool success)
 void MaemoDebugRunControl::startGdbServer()
 {
     const QString remoteCall(QString::fromLocal8Bit("%1 gdbserver :%2 %3 %4").
-        arg(targetCmdLinePrefix()).arg(devConfig.gdbServerPort)
+        arg(targetCmdLinePrefix()).arg(gdbServerPort())
         .arg(executableOnTarget()).arg(runConfig->arguments().join(" ")));
     inferiorPid = -1;
 #ifdef USE_SSH_LIB
@@ -671,5 +672,12 @@ void MaemoDebugRunControl::debuggerOutput(const QString &output)
     emit addToOutputWindowInline(this, output);
 }
 
+QString MaemoDebugRunControl::gdbServerPort() const
+{
+    return devConfig.type == MaemoDeviceConfig::Physical
+        ? QString::number(devConfig.gdbServerPort)
+        : runConfig->simulatorGdbServerPort();
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
index f8e967da418a30e3fa8ed5a59eb31757a8d79049..5cef957ea39fa1f0d80480ec9d0a653e45c4d067 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.h
@@ -172,6 +172,7 @@ private slots:
 private:
     virtual void handleDeploymentFinished(bool success);
 
+    QString gdbServerPort() const;
     void startGdbServer();
     void gdbServerStartFailed(const QString &reason);
     void startDebugging();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
index 8baaf23e1c84ca19b1aff8567959f4dfdad12b19..47f703299ce89daed43d05945eb012a9ec910e82 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosettingspage.cpp
@@ -355,6 +355,19 @@ void MaemoSettingsWidget::deviceTypeChanged()
         m_ui->deviceButton->isChecked()
             ? MaemoDeviceConfig::Physical
             : MaemoDeviceConfig::Simulator;
+
+    // Port values for the simulator are specified by Qemu's
+    // "information" file, to which we have no access here,
+    // so we hard-code the last known values.
+    if (currentConfig().type == MaemoDeviceConfig::Simulator) {
+        currentConfig().sshPort = 6666;
+        currentConfig().gdbServerPort = 13219;
+        m_ui->sshPortLineEdit->setReadOnly(true);
+        m_ui->gdbServerPortLineEdit->setReadOnly(true);
+    } else {
+        m_ui->sshPortLineEdit->setReadOnly(false);
+        m_ui->gdbServerPortLineEdit->setReadOnly(false);
+    }
 }
 
 void MaemoSettingsWidget::authenticationTypeChanged()
@@ -452,7 +465,6 @@ void MaemoSettingsWidget::processSshOutput(const QString &data)
 void MaemoSettingsWidget::handleTestThreadFinished()
 {
 #ifdef USE_SSH_LIB
-    qDebug("================> %s", Q_FUNC_INFO);
     if (!m_deviceTester)
         return;
 
@@ -460,6 +472,8 @@ void MaemoSettingsWidget::handleTestThreadFinished()
     if (m_deviceTester->hasError()) {
         output = tr("Device configuration test failed:\n");
         output.append(m_deviceTester->error());
+        if (currentConfig().type == MaemoDeviceConfig::Simulator)
+            output.append(tr("\nDid you start Qemu?"));
     } else {
         output = parseTestOutput();
     }