diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
index 3f6b1b85a0686a28ecd8912cb23bf6da9a850f20..28cb880d8f2aa2d648c93d1966e6e4a2b82730f7 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
@@ -301,22 +301,30 @@ void MaemoDeployStep::start()
 #endif
     m_stopped = false;
 
-    // TODO: Re-use if possible (disconnect + reconnect).
-    if (m_connection)
-        disconnect(m_connection.data(), 0, this, 0);
-    m_connection = SshConnection::create();
-
     const MaemoDeviceConfig &devConfig = deviceConfig();
     if (!devConfig.isValid()) {
         raiseError(tr("Deployment failed: No valid device set."));
         return;
     }
+
+    if (m_connection)
+        disconnect(m_connection.data(), 0, this, 0);
+    const bool canReUse = m_connection
+        && m_connection->state() == SshConnection::Connected
+        && m_connection->connectionParameters() == devConfig.server;
+    if (!canReUse)
+        m_connection = SshConnection::create();
     connect(m_connection.data(), SIGNAL(connected()), this,
         SLOT(handleConnected()));
     connect(m_connection.data(), SIGNAL(error(SshError)), this,
         SLOT(handleConnectionFailure()));
-    m_connection->connectToHost(devConfig.server);
-    m_connecting = true;
+    if (canReUse) {
+        handleConnected();
+    } else {
+        writeOutput(tr("Connecting to device..."));
+        m_connecting = true;
+        m_connection->connectToHost(devConfig.server);
+    }
 }
 
 void MaemoDeployStep::handleConnected()