diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
index 9275ec81d3f7237948a37eccd7327b513c2dba47..f208523e0f194dd314adea86e45baaa2fd7ec079 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
@@ -37,8 +37,7 @@
 #include "maemoglobal.h"
 #include "maemorunconfiguration.h"
 
-#include <coreplugin/ssh/sshconnection.h>
-#include <coreplugin/ssh/sshremoteprocess.h>
+#include <coreplugin/ssh/sshremoteprocessrunner.h>
 
 namespace Qt4ProjectManager {
     namespace Internal {
@@ -60,71 +59,52 @@ MaemoDeviceEnvReader::~MaemoDeviceEnvReader()
 void MaemoDeviceEnvReader::start()
 {
     m_stop = false;
-    if (m_connection)
-        disconnect(m_connection.data(), 0, this, 0);
-
-    const bool reuse = m_connection
-        && m_connection->state() == Core::SshConnection::Connected
-        && m_connection->connectionParameters() == m_devConfig.server;
-
-    if (!reuse)
-        m_connection = Core::SshConnection::create();
-
-    connect(m_connection.data(), SIGNAL(connected()), this,
-        SLOT(executeRemoteCall()));
-    connect(m_connection.data(), SIGNAL(error(Core::SshError)), this,
+    if (!m_remoteProcessRunner
+        || m_remoteProcessRunner->connection()->state() != Core::SshConnection::Connected
+        || m_remoteProcessRunner->connection()->connectionParameters() != m_devConfig.server) {
+        m_remoteProcessRunner
+            = Core::SshRemoteProcessRunner::create(m_devConfig.server);
+    }
+    connect(m_remoteProcessRunner.data(),
+        SIGNAL(connectionError(Core::SshError)), this,
         SLOT(handleConnectionFailure()));
-
-    if (reuse)
-        executeRemoteCall();
-    else
-        m_connection->connectToHost(m_devConfig.server);
+    connect(m_remoteProcessRunner.data(), SIGNAL(processClosed(int)), this,
+        SLOT(remoteProcessFinished(int)));
+    connect(m_remoteProcessRunner.data(),
+        SIGNAL(processOutputAvailable(QByteArray)), this,
+        SLOT(remoteOutput(QByteArray)));
+    connect(m_remoteProcessRunner.data(),
+        SIGNAL(processErrorOutputAvailable(QByteArray)), this,
+        SLOT(remoteErrorOutput(QByteArray)));
+    const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand()
+        .toUtf8() + "; env";
+    m_remoteOutput.clear();
+    m_remoteProcessRunner->run(remoteCall);
 }
 
 void MaemoDeviceEnvReader::stop()
 {
     m_stop = true;
-
-    if (m_connection)
-        disconnect(m_connection.data(), 0, this, 0);
-    if (m_remoteProcess) {
-        disconnect(m_remoteProcess.data());
-        m_remoteProcess->closeChannel();
-    }
+    if (m_remoteProcessRunner)
+        disconnect(m_remoteProcessRunner.data(), 0, this, 0);
 }
 
-void MaemoDeviceEnvReader::executeRemoteCall()
+void MaemoDeviceEnvReader::handleConnectionFailure()
 {
     if (m_stop)
         return;
 
-    const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand()
-        .toUtf8() + "; env";
-    m_remoteProcess = m_connection->createRemoteProcess(remoteCall);
-
-    connect(m_remoteProcess.data(), SIGNAL(closed(int)), this,
-        SLOT(remoteProcessFinished(int)));
-    connect(m_remoteProcess.data(), SIGNAL(outputAvailable(QByteArray)), this,
-        SLOT(remoteOutput(QByteArray)));
-    connect(m_remoteProcess.data(), SIGNAL(errorOutputAvailable(QByteArray)), this,
-        SLOT(remoteErrorOutput(QByteArray)));
-
-    m_remoteOutput.clear();
-    m_remoteErrorOutput.clear();
-    m_remoteProcess->start();
-}
-
-void MaemoDeviceEnvReader::handleConnectionFailure()
-{
-    emit error(tr("Could not connect to host: %1")
-        .arg(m_connection->errorString()));
-    setFinished();
+    disconnect(m_remoteProcessRunner.data(), 0, this, 0);
+    emit error(tr("Connection error: %1")
+        .arg(m_remoteProcessRunner->connection()->errorString()));
+    emit finished();
 }
 
 void MaemoDeviceEnvReader::handleCurrentDeviceConfigChanged()
 {
     m_devConfig = m_runConfig->deviceConfig();
 
+    disconnect(m_remoteProcessRunner.data(), 0, this, 0);
     m_env.clear();
     setFinished();
 }
@@ -138,6 +118,7 @@ void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode)
     if (m_stop)
         return;
 
+    disconnect(m_remoteProcessRunner.data(), 0, this, 0);
     m_env.clear();
     if (exitCode == Core::SshRemoteProcess::ExitedNormally) {
         if (!m_remoteOutput.isEmpty()) {
@@ -146,7 +127,7 @@ void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode)
         }
     } else {
         QString errorMsg = tr("Error running remote process: %1")
-            .arg(m_remoteProcess->errorString());
+            .arg(m_remoteProcessRunner->process()->errorString());
         if (!m_remoteErrorOutput.isEmpty()) {
             errorMsg += tr("\nRemote stderr was: '%1'")
                 .arg(QString::fromUtf8(m_remoteErrorOutput));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
index d31c6b0427c0c14c8d1329ced48d468d34223b24..31d7f4c0bcaca80211275f95d6e85bf901e47c74 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
@@ -42,8 +42,7 @@
 #include <QtCore/QObject>
 
 namespace Core {
-    class SshConnection;
-    class SshRemoteProcess;
+    class SshRemoteProcessRunner;
 }
 
 namespace Qt4ProjectManager {
@@ -68,7 +67,6 @@ signals:
     void error(const QString &error);
 
 private slots:
-    void executeRemoteCall();
     void handleConnectionFailure();
     void handleCurrentDeviceConfigChanged();
 
@@ -85,8 +83,7 @@ private:
     Utils::Environment m_env;
     MaemoDeviceConfig m_devConfig;
     MaemoRunConfiguration *m_runConfig;
-    QSharedPointer<Core::SshConnection> m_connection;
-    QSharedPointer<Core::SshRemoteProcess> m_remoteProcess;
+    QSharedPointer<Core::SshRemoteProcessRunner> m_remoteProcessRunner;
 };
 
     }   // Internal