diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
index 5da1f46bef7e6283371fe3a314af65a1c1f42134..68521df70eee1ecf438f324c626d6d9862f107f3 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
@@ -330,6 +330,8 @@ void MaemoDeployStep::handleConnected()
     Q_ASSERT(!m_currentDeployAction);
     Q_ASSERT(!m_needsInstall);
     Q_ASSERT(m_filesToCopy.isEmpty());
+    // TODO: Move this step up. We don't have to be connected to find out
+    // whether we need to deploy.
     const MaemoPackageCreationStep * const pStep = packagingStep();
     const QString hostName = m_connection->connectionParameters().host;
     if (pStep->isPackagingEnabled()) {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
index 6c06d6f127d8d8647af96efef911ade16fa4f58c..28782ce9bae006a942e1ee3555e80baa973835a2 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
@@ -79,8 +79,7 @@ bool MaemoRemoteMounter::addMountSpecification(const MaemoMountSpecification &mo
 void MaemoRemoteMounter::mount()
 {
     m_stop = false;
-    Q_ASSERT(m_startedUtfsServers.isEmpty());
-    Q_ASSERT(m_readyUtfsServers.isEmpty());
+    Q_ASSERT(m_utfsServers.isEmpty());
 
     if (m_mountSpecs.isEmpty())
         emit mounted();
@@ -237,7 +236,7 @@ void MaemoRemoteMounter::startUtfsClients()
         const QString chmod = QString::fromLocal8Bit("%1 chmod a+r+w+x %2")
             .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint);
         QString utfsClient
-            = QString::fromLocal8Bit("%1 --detach -l %2 -r %2 -b %2 %4")
+            = QString::fromLocal8Bit("%1 -l %2 -r %2 -b %2 %4")
                   .arg(utfsClientOnDevice()).arg(mountInfo.remotePort)
                   .arg(mountSpec.remoteMountPoint);
         if (mountInfo.mountAsRoot)
@@ -248,6 +247,8 @@ void MaemoRemoteMounter::startUtfsClients()
     emit reportProgress(tr("Starting remote UTFS clients..."));
     m_utfsClientStderr.clear();
     m_mountProcess = m_connection->createRemoteProcess(remoteCall.toUtf8());
+    connect(m_mountProcess.data(), SIGNAL(started()), this,
+        SLOT(handleUtfsClientsStarted()));
     connect(m_mountProcess.data(), SIGNAL(closed(int)), this,
         SLOT(handleUtfsClientsFinished(int)));
     connect(m_mountProcess.data(), SIGNAL(errorOutputAvailable(QByteArray)),
@@ -255,6 +256,12 @@ void MaemoRemoteMounter::startUtfsClients()
     m_mountProcess->start();
 }
 
+void MaemoRemoteMounter::handleUtfsClientsStarted()
+{
+    if (!m_stop)
+        startUtfsServers();
+}
+
 void MaemoRemoteMounter::handleUtfsClientsFinished(int exitStatus)
 {
     if (m_stop)
@@ -262,7 +269,8 @@ void MaemoRemoteMounter::handleUtfsClientsFinished(int exitStatus)
 
     if (exitStatus == SshRemoteProcess::ExitedNormally
             && m_mountProcess->exitCode() == 0) {
-        startUtfsServers();
+        m_utfsServerTimer->stop();
+        emit mounted();
     } else {
         QString errMsg = tr("Failure running UTFS client: %1")
             .arg(m_mountProcess->errorString());
@@ -288,93 +296,38 @@ void MaemoRemoteMounter::startUtfsServers()
             << port << remoteSecretOpt << port << QLatin1String("-c")
             << (m_connection->connectionParameters().host + QLatin1Char(':') + port)
             << mountSpec.localDir;
-        connect(utfsServerProc.data(), SIGNAL(readyReadStandardError()), this,
-            SLOT(handleUtfsServerStderr()));
         connect(utfsServerProc.data(),
             SIGNAL(finished(int,QProcess::ExitStatus)), this,
             SLOT(handleUtfsServerFinished(int,QProcess::ExitStatus)));
         connect(utfsServerProc.data(), SIGNAL(error(QProcess::ProcessError)),
             this, SLOT(handleUtfsServerError(QProcess::ProcessError)));
-        m_startedUtfsServers << utfsServerProc;
+        m_utfsServers << utfsServerProc;
         utfsServerProc->start(utfsServer(), utfsServerArgs);
     }
 }
 
-void MaemoRemoteMounter::handleUtfsServerStderr()
-{
-    if (m_stop)
-        return;
-
-    for (int i = 0; i < m_startedUtfsServers.count(); ++i) {
-        UtfsServerInfo &info = m_startedUtfsServers[i];
-        if (info.proc.data() == sender()) {
-            info.output += info.proc->readAllStandardError();
-            if (info.output.contains("utfs server is ready")) {
-                m_readyUtfsServers << info;
-                m_startedUtfsServers.removeAt(i);
-                if (m_startedUtfsServers.isEmpty()) {
-                    m_utfsServerTimer->stop();
-                    emit mounted();
-                }
-                return;
-            }
-            break;
-        }
-    }
-
-    for (int i = 0; i < m_readyUtfsServers.count(); ++i) {
-        UtfsServerInfo &info = m_readyUtfsServers[i];
-        if (info.proc.data() == sender()) {
-            const QByteArray &output = info.proc->readAllStandardError();
-            qWarning("%s: %s", Q_FUNC_INFO, output.data());
-            info.output += output;
-        }
-    }
-}
-
-void MaemoRemoteMounter::handleUtfsServerError(QProcess::ProcessError procError)
+void MaemoRemoteMounter::handleUtfsServerError(QProcess::ProcessError)
 {
-    if (procError != QProcess::FailedToStart)
+    if (m_stop || m_utfsServers.isEmpty())
         return;
 
-    for (int i = 0; i < m_startedUtfsServers.count(); ++i) {
-        const UtfsServerInfo info = m_startedUtfsServers.at(i);
-        if (info.proc.data() == sender()) {
-            QString errorString = info.proc->errorString();
-            if (!info.output.isEmpty()) {
-                errorString += tr("\nstderr was: %1")
-                    .arg(QString::fromLocal8Bit(info.output));
-            }
-            killAllUtfsServers();
-            m_utfsServerTimer->stop();
-            emit error(tr("Could not start UTFS server: %1").arg(errorString));
-            return;
-        }
+    QProcess * const proc = static_cast<QProcess *>(sender());
+    QString errorString = proc->errorString();
+    const QByteArray &errorOutput = proc->readAllStandardError();
+    if (!errorOutput.isEmpty()) {
+        errorString += tr("\nstderr was: %1")
+            .arg(QString::fromLocal8Bit(errorOutput));
     }
-
-    qWarning("%s: Process failed to start", Q_FUNC_INFO);
+    killAllUtfsServers();
+    m_utfsServerTimer->stop();
+    emit error(tr("Error running UTFS server: %1").arg(errorString));
 }
 
-void MaemoRemoteMounter::handleUtfsServerFinished(int exitCode,
+void MaemoRemoteMounter::handleUtfsServerFinished(int /* exitCode */,
     QProcess::ExitStatus exitStatus)
 {
-    if (exitStatus == QProcess::NormalExit && exitCode == 0)
-        return;
-
-    for (int i = 0; i < m_startedUtfsServers.count(); ++i) {
-        const UtfsServerInfo info = m_startedUtfsServers.at(i);
-        if (info.proc.data() == sender()) {
-            QString errorString = info.proc->errorString();
-            if (!info.output.isEmpty()) {
-                errorString += tr("\nstderr was: %1")
-                    .arg(QString::fromLocal8Bit(info.output));
-            }
-            killAllUtfsServers();
-            m_utfsServerTimer->stop();
-            emit error(tr("UTFS server finished unexpectedly: %1").arg(errorString));
-            return;
-        }
-    }
+    if (!m_stop && exitStatus != QProcess::NormalExit)
+        handleUtfsServerError(static_cast<QProcess *>(sender())->error());
 }
 
 void MaemoRemoteMounter::handleUtfsClientStderr(const QByteArray &output)
@@ -400,12 +353,9 @@ QString MaemoRemoteMounter::utfsServer() const
 
 void MaemoRemoteMounter::killAllUtfsServers()
 {
-    foreach (const UtfsServerInfo &info, m_startedUtfsServers)
-        killUtfsServer(info.proc.data());
-    m_startedUtfsServers.clear();
-    foreach (const UtfsServerInfo &info, m_readyUtfsServers)
-        killUtfsServer(info.proc.data());
-    m_readyUtfsServers.clear();
+    foreach (const ProcPtr &proc, m_utfsServers)
+        killUtfsServer(proc.data());
+    m_utfsServers.clear();
 }
 
 void MaemoRemoteMounter::killUtfsServer(QProcess *proc)
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
index 52a5333e659fa67db1b36118fdfb38756f536740..290668c643161b90cbe860e8d642f58d0397675b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
@@ -80,14 +80,14 @@ private slots:
     void handleUploaderInitialized();
     void handleUploaderInitializationFailed(const QString &reason);
     void handleUploadFinished(Core::SftpJobId jobId, const QString &error);
+    void handleUtfsClientsStarted();
     void handleUtfsClientsFinished(int exitStatus);
-    void handleUnmountProcessFinished(int exitStatus);
     void handleUtfsClientStderr(const QByteArray &output);
-    void handleUtfsServerStderr();
-    void handleUtfsServerError(QProcess::ProcessError error);
+    void handleUnmountProcessFinished(int exitStatus);
+    void handleUmountStderr(const QByteArray &output);
+    void handleUtfsServerError(QProcess::ProcessError procError);
     void handleUtfsServerFinished(int exitCode,
         QProcess::ExitStatus exitStatus);
-    void handleUmountStderr(const QByteArray &output);
     void handleUtfsServerTimeout();
 
 private:
@@ -118,13 +118,7 @@ private:
     Core::SftpJobId m_uploadJobId;
 
     typedef QSharedPointer<QProcess> ProcPtr;
-    struct UtfsServerInfo {
-        UtfsServerInfo(const ProcPtr &p) : proc(p) {}
-        ProcPtr proc;
-        QByteArray output;
-    };
-    QList<UtfsServerInfo> m_startedUtfsServers;
-    QList<UtfsServerInfo> m_readyUtfsServers;
+    QList<ProcPtr> m_utfsServers;
 
     bool m_stop;
     QByteArray m_utfsClientStderr;