diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index fc8448fbcc2b54cf33edb65bc739053e071abeed..e620fae251ef4a2510af2cb161e3025098b98097 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -75,20 +75,23 @@ public:
     bool useTerminal;
     bool breakAtMain;
     QString crashParameter; // for AttachCrashedExternal
+
     // for remote debugging
     QString remoteChannel;
     QString remoteArchitecture;
     QString symbolFileName;
     QString serverStartScript;
     QString sysRoot;
+    QByteArray remoteDumperLib;
+    QByteArray remoteSourcesDir;
+    Core::SshConnectionParameters connParams;
+
     QString debuggerCommand;
     int toolChainType;
-    QByteArray remoteDumperLib;
     QString qtInstallPath;
 
     QString dumperLibrary;
     QStringList dumperLibraryLocations;
-    Core::SshConnectionParameters connParams;
     DebuggerStartMode startMode;
 };
 
diff --git a/src/plugins/debugger/gdb/abstractplaingdbadapter.h b/src/plugins/debugger/gdb/abstractplaingdbadapter.h
index a6b60e0188dc3b9ce88cd3494bd68673d8744544..834439a4ed7beee96c6cf8423eb270a7bf0aec1e 100644
--- a/src/plugins/debugger/gdb/abstractplaingdbadapter.h
+++ b/src/plugins/debugger/gdb/abstractplaingdbadapter.h
@@ -43,7 +43,7 @@ class AbstractPlainGdbAdapter : public AbstractGdbAdapter
 public:
     AbstractPlainGdbAdapter(GdbEngine *engine, QObject *parent = 0);
 
-    void setupInferior();
+    virtual void setupInferior();
     void runEngine();
 
 protected:
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
index 6fc15c1c8f57c2fb8afeca6678f523f4ee9abf44..2d06ff3175426976fdb59a5c6e7ef1c3d2e23285 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
@@ -51,6 +51,13 @@ void RemotePlainGdbAdapter::startAdapter()
     emit requestSetup();
 }
 
+void RemotePlainGdbAdapter::setupInferior()
+{
+    AbstractPlainGdbAdapter::setupInferior();
+    m_engine->postCommand("directory "
+        + m_engine->startParameters().remoteSourcesDir);
+}
+
 void RemotePlainGdbAdapter::interruptInferior()
 {
     m_gdbProc.interruptInferior();
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.h b/src/plugins/debugger/gdb/remoteplaingdbadapter.h
index 43080a95b1ebad2e4de22e840ef2a6c4eb34ccdf..eb683f531c5c6abdd59cf80db28ed7e8bd62cf74 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.h
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.h
@@ -51,6 +51,7 @@ signals:
 
 private:
     void startAdapter();
+    void setupInferior();
     void interruptInferior();
     void shutdownInferior();
     void shutdownAdapter();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
index aa5db8a99c5916d3699dec9a67af1b51ad5d479b..ff0d0d994b6022776a52809f58868af4cc27e34b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
@@ -72,6 +72,8 @@ static const QLatin1String MountPortsKey(PREFIX ".MountPorts");
 static const QLatin1String HostAddressFromDeviceKey(PREFIX ".HostAddressFromDevice");
 static const QLatin1String BaseEnvironmentBaseKey(PREFIX ".BaseEnvironmentBase");
 static const QLatin1String UserEnvironmentChangesKey(PREFIX ".UserEnvironmentChanges");
+static const QLatin1String UseRemoteGdbKey(PREFIX ".UseRemoteGdb");
+static const QLatin1String GdbMountPortKey(PREFIX ".GdbMountPort");
 
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
index edece998b3ce6d06201c0dd04af27d7c1c6922ea..037246199bf4d36dbe4feef2a19578f0340162e5 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
@@ -48,6 +48,7 @@
 #include <debugger/gdb/remoteplaingdbadapter.h>
 #include <projectexplorer/toolchain.h>
 
+#include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 
 using namespace Core;
@@ -62,20 +63,28 @@ RunControl *MaemoDebugSupport::createDebugRunControl(MaemoRunConfiguration *runC
 {
     DebuggerStartParameters params;
     const MaemoDeviceConfig &devConf = runConfig->deviceConfig();
-#ifdef USE_GDBSERVER
-    params.startMode = AttachToRemote;
-    params.executable = runConfig->localExecutableFilePath();
-    params.debuggerCommand = runConfig->gdbCmd();
-    params.remoteChannel = devConf.server.host + QLatin1Char(':')
-        + gdbServerPort(runConfig, devConf);
-    params.remoteArchitecture = QLatin1String("arm");
-#else
-    params.startMode = StartRemoteGdb;
-    params.executable = runConfig->remoteExecutableFilePath();
-    params.debuggerCommand = MaemoGlobal::remoteCommandPrefix(runConfig->remoteExecutableFilePath())
-        + QLatin1String(" /usr/bin/gdb");
-    params.connParams = devConf.server;
-#endif
+    if (runConfig->useRemoteGdb()) {
+        params.startMode = StartRemoteGdb;
+        params.executable = runConfig->remoteExecutableFilePath();
+        params.debuggerCommand
+            = MaemoGlobal::remoteCommandPrefix(runConfig->remoteExecutableFilePath())
+                + QLatin1String(" /usr/bin/gdb");
+        params.connParams = devConf.server;
+        const QString execDirAbs
+            = QDir::fromNativeSeparators(QFileInfo(runConfig->localExecutableFilePath()).path());
+        const QString execDirRel
+            = QDir(runConfig->localDirToMountForRemoteGdb()).relativeFilePath(execDirAbs);
+        params.remoteSourcesDir
+            = QString(MaemoGlobal::remoteProjectSourcesMountPoint()
+                + QLatin1Char('/') + execDirRel).toUtf8();
+    } else {
+        params.startMode = AttachToRemote;
+        params.executable = runConfig->localExecutableFilePath();
+        params.debuggerCommand = runConfig->gdbCmd();
+        params.remoteChannel = devConf.server.host + QLatin1Char(':')
+            + gdbServerPort(runConfig, devConf);
+        params.remoteArchitecture = QLatin1String("arm");
+    }
     params.processArgs = runConfig->arguments();
     params.sysRoot = runConfig->sysRoot();
     params.toolChainType = ToolChain::GCC_MAEMO;
@@ -93,24 +102,22 @@ MaemoDebugSupport::MaemoDebugSupport(MaemoRunConfiguration *runConfig,
     DebuggerRunControl *runControl)
     : QObject(runControl), m_runControl(runControl), m_runConfig(runConfig),
       m_deviceConfig(m_runConfig->deviceConfig()),
-      m_runner(new MaemoSshRunner(this, m_runConfig))
+      m_runner(new MaemoSshRunner(this, m_runConfig, true))
 {
     GdbEngine *engine = qobject_cast<GdbEngine *>(m_runControl->engine());
     Q_ASSERT(engine);
-    m_gdbAdapter = qobject_cast<GdbAdapter *>(engine->gdbAdapter());
+    m_gdbAdapter = engine->gdbAdapter();
     Q_ASSERT(m_gdbAdapter);
     connect(m_gdbAdapter, SIGNAL(requestSetup()), this,
         SLOT(handleAdapterSetupRequested()));
     connect(m_runControl, SIGNAL(finished()), this,
         SLOT(handleDebuggingFinished()));
-#ifdef USE_GDBSERVER
-    m_runner->addProcsToKill(QStringList() << QLatin1String("gdbserver"));
-#else
-    m_runner->addProcsToKill(QStringList() << QLatin1String("gdb"));
-#endif
 }
 
-MaemoDebugSupport::~MaemoDebugSupport() {}
+MaemoDebugSupport::~MaemoDebugSupport()
+{
+    stopSsh();
+}
 
 void MaemoDebugSupport::handleAdapterSetupRequested()
 {
@@ -209,23 +216,22 @@ void MaemoDebugSupport::handleSftpJobFinished(Core::SftpJobId job,
 
 void MaemoDebugSupport::startDebugging()
 {
-#ifdef USE_GDBSERVER
-    connect(m_runner, SIGNAL(remoteErrorOutput(QByteArray)), this,
-        SLOT(handleRemoteErrorOutput(QByteArray)));
-    connect(m_runner, SIGNAL(remoteOutput(QByteArray)), this,
-        SLOT(handleRemoteOutput(QByteArray)));
-    connect(m_runner, SIGNAL(remoteProcessStarted()), this,
-        SLOT(handleRemoteProcessStarted()));
-    const QString &remoteExe = m_runConfig->remoteExecutableFilePath();
-    m_runner->startExecution(QString::fromLocal8Bit("%1 gdbserver :%2 %3 %4")
-        .arg(MaemoGlobal::remoteCommandPrefix(remoteExe))
-        .arg(gdbServerPort(m_runConfig, m_deviceConfig))
-        .arg(remoteExe).arg(m_runConfig->arguments()
-        .join(QLatin1String(" "))).toUtf8());
-#else
-    stopSsh();
-    handleAdapterSetupDone();
-#endif
+    if (useGdb()) {
+        handleAdapterSetupDone();
+    } else {
+        connect(m_runner, SIGNAL(remoteErrorOutput(QByteArray)), this,
+            SLOT(handleRemoteErrorOutput(QByteArray)));
+        connect(m_runner, SIGNAL(remoteOutput(QByteArray)), this,
+            SLOT(handleRemoteOutput(QByteArray)));
+        connect(m_runner, SIGNAL(remoteProcessStarted()), this,
+            SLOT(handleRemoteProcessStarted()));
+        const QString &remoteExe = m_runConfig->remoteExecutableFilePath();
+        m_runner->startExecution(QString::fromLocal8Bit("%1 gdbserver :%2 %3 %4")
+            .arg(MaemoGlobal::remoteCommandPrefix(remoteExe))
+            .arg(gdbServerPort(m_runConfig, m_deviceConfig))
+            .arg(remoteExe).arg(m_runConfig->arguments()
+            .join(QLatin1String(" "))).toUtf8());
+    }
 }
 
 void MaemoDebugSupport::handleRemoteProcessStarted()
@@ -261,7 +267,11 @@ void MaemoDebugSupport::stopSsh()
 
 void MaemoDebugSupport::handleAdapterSetupFailed(const QString &error)
 {
-    m_gdbAdapter->handleSetupFailed(tr("Initial setup failed: %1").arg(error));
+    const QString msg = tr("Initial setup failed: %1").arg(error);
+    if (useGdb())
+        qobject_cast<RemotePlainGdbAdapter *>(m_gdbAdapter)->handleSetupFailed(msg);
+    else
+        qobject_cast<RemoteGdbServerAdapter*>(m_gdbAdapter)->handleSetupFailed(msg);
     m_stopped = true;
     stopSsh();
 }
@@ -269,7 +279,10 @@ void MaemoDebugSupport::handleAdapterSetupFailed(const QString &error)
 void MaemoDebugSupport::handleAdapterSetupDone()
 {
     m_adapterStarted = true;
-    m_gdbAdapter->handleSetupDone();
+    if (useGdb())
+        qobject_cast<RemotePlainGdbAdapter *>(m_gdbAdapter)->handleSetupDone();
+    else
+        qobject_cast<RemoteGdbServerAdapter*>(m_gdbAdapter)->handleSetupDone();
 }
 
 QString MaemoDebugSupport::gdbServerPort(const MaemoRunConfiguration *rc,
@@ -288,5 +301,10 @@ QString MaemoDebugSupport::uploadDir(const MaemoDeviceConfig &devConf)
     return MaemoGlobal::homeDirOnDevice(devConf.server.uname);
 }
 
+bool MaemoDebugSupport::useGdb() const
+{
+    return m_runControl->engine()->startParameters().startMode == StartRemoteGdb;
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h
index b0c44e14f107831a0ffe5ed2970433806cb05748..d2b79b104bc8d6c3e87aa8644b3c14d4c4dd6e5a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.h
@@ -42,15 +42,12 @@
 #include <QtCore/QObject>
 #include <QtCore/QSharedPointer>
 
-#define USE_GDBSERVER
-
 namespace Core { class SftpChannel; }
 
 namespace Debugger {
 class DebuggerRunControl;
 namespace Internal {
-class RemoteGdbServerAdapter;
-class RemotePlainGdbAdapter;
+class AbstractGdbAdapter;
 }
 }
 
@@ -93,19 +90,14 @@ private:
     void handleAdapterSetupFailed(const QString &error);
     void handleAdapterSetupDone();
     void startDebugging();
+    bool useGdb() const;
 
     Debugger::DebuggerRunControl *m_runControl;
     MaemoRunConfiguration * const m_runConfig;
     const MaemoDeviceConfig m_deviceConfig;
     MaemoSshRunner * const m_runner;
 
-
-#ifdef USE_GDBSERVER
-    typedef Debugger::Internal::RemoteGdbServerAdapter GdbAdapter;
-#else
-    typedef Debugger::Internal::RemotePlainGdbAdapter GdbAdapter;
-#endif
-    GdbAdapter *m_gdbAdapter;
+    Debugger::Internal::AbstractGdbAdapter *m_gdbAdapter;
 
     QSharedPointer<Core::SftpChannel> m_uploader;
     Core::SftpJobId m_uploadJob;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
index f3ff1273279b1d22b58fc188afc30d49561dd4a2..b1e7ac8c13cf8f05f20365d41756e04f373401fd 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
@@ -61,5 +61,10 @@ QString MaemoGlobal::remoteEnvironment(const QList<ProjectExplorer::EnvironmentI
     return env.mid(0, env.size() - 1);
 }
 
+QString MaemoGlobal::remoteProjectSourcesMountPoint()
+{
+    return QLatin1String("/tmp/gdbSourcesDir");
+}
+
 } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
index c8f9225b5185cae15dd10433afa745520dc1bae3..7d07c0f420f701a8924a2c3c12a6bc0fcf2d7569 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
@@ -49,6 +49,7 @@ public:
     static QString remoteSudo();
     static QString remoteCommandPrefix(const QString &commandFilePath);
     static QString remoteEnvironment(const QList<ProjectExplorer::EnvironmentItem> &list);
+    static QString remoteProjectSourcesMountPoint();
 
     template<class T> static T *buildStep(const ProjectExplorer::BuildConfiguration *bc)
     {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index bd516d2f87be1ca6483072bae12a0b1b37622151..6ac4bf87298cffd5fcc7c50884c36e05f10d371c 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -55,7 +55,11 @@
 namespace Qt4ProjectManager {
 namespace Internal {
 
-namespace { const QLatin1String DefaultHostAddress("192.168.2.14"); }
+namespace {
+const QLatin1String DefaultHostAddress("192.168.2.14");
+const bool DefaultUseRemoteGdbValue = false;  // TODO: Make true once utfs-server works on Windows.
+const int DefaultGdbMountPort = 10100;
+} // anonymous namespace
 
 using namespace ProjectExplorer;
 
@@ -63,6 +67,9 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent,
         const QString &proFilePath)
     : RunConfiguration(parent, QLatin1String(MAEMO_RC_ID))
     , m_proFilePath(proFilePath)
+    , m_hostAddressFromDevice(DefaultHostAddress)
+    , m_useRemoteGdb(DefaultUseRemoteGdbValue)
+    , m_gdbMountPort(DefaultGdbMountPort)
     , m_baseEnvironmentBase(SystemEnvironmentBase)
 {
     init();
@@ -74,6 +81,9 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent,
     , m_proFilePath(source->m_proFilePath)
     , m_gdbPath(source->m_gdbPath)
     , m_arguments(source->m_arguments)
+    , m_hostAddressFromDevice(source->localHostAddressFromDevice())
+    , m_useRemoteGdb(source->useRemoteGdb())
+    , m_gdbMountPort(source->gdbMountPort())
     , m_baseEnvironmentBase(source->m_baseEnvironmentBase)
     , m_systemEnvironment(source->m_systemEnvironment)
     , m_userEnvironmentChanges(source->m_userEnvironmentChanges)
@@ -85,7 +95,6 @@ void MaemoRunConfiguration::init()
 {
     m_devConfigModel = new MaemoDeviceConfigListModel(this);
     m_remoteMounts = new MaemoRemoteMountsModel(this);
-    m_hostAddressFromDevice = DefaultHostAddress;
     setDisplayName(QFileInfo(m_proFilePath).completeBaseName());
 
     updateDeviceConfigurations();
@@ -144,6 +153,8 @@ QVariantMap MaemoRunConfiguration::toMap() const
     const QDir dir = QDir(target()->project()->projectDirectory());
     map.insert(ProFileKey, dir.relativeFilePath(m_proFilePath));
     map.insert(HostAddressFromDeviceKey, m_hostAddressFromDevice);
+    map.insert(UseRemoteGdbKey, useRemoteGdb());
+    map.insert(GdbMountPortKey, gdbMountPort());
     map.insert(BaseEnvironmentBaseKey, m_baseEnvironmentBase);
     map.insert(UserEnvironmentChangesKey,
         ProjectExplorer::EnvironmentItem::toStringList(m_userEnvironmentChanges));
@@ -162,6 +173,8 @@ bool MaemoRunConfiguration::fromMap(const QVariantMap &map)
     m_proFilePath = dir.filePath(map.value(ProFileKey).toString());
     m_hostAddressFromDevice = map.value(HostAddressFromDeviceKey,
         DefaultHostAddress).toString();
+    m_useRemoteGdb = map.value(UseRemoteGdbKey, DefaultUseRemoteGdbValue).toBool();
+    m_gdbMountPort = map.value(GdbMountPortKey, DefaultGdbMountPort).toInt();
     m_userEnvironmentChanges =
         ProjectExplorer::EnvironmentItem::fromStringList(map.value(UserEnvironmentChangesKey)
         .toStringList());
@@ -250,6 +263,26 @@ const QString MaemoRunConfiguration::dumperLib() const
     return qt4bc->qtVersion()->debuggingHelperLibrary();
 }
 
+
+QString MaemoRunConfiguration::localDirToMountForRemoteGdb() const
+{
+    const QString projectDir
+        = QDir::fromNativeSeparators(QDir::cleanPath(activeBuildConfiguration()
+            ->target()->project()->projectDirectory()));
+    const QString execDir
+        = QDir::fromNativeSeparators(QFileInfo(localExecutableFilePath()).path());
+    const int length = qMin(projectDir.length(), execDir.length());
+    int lastSeparatorPos = 0;
+    for (int i = 0; i < length; ++i) {
+        if (projectDir.at(i) != execDir.at(i))
+            return projectDir.left(lastSeparatorPos);
+        if (projectDir.at(i) == QLatin1Char('/'))
+            lastSeparatorPos = i;
+    }
+    return projectDir.length() == execDir.length()
+        ? projectDir : projectDir.left(lastSeparatorPos);
+}
+
 QString MaemoRunConfiguration::localExecutableFilePath() const
 {
     TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index ed18795fb33ca0a07f419672455cd0d103718de3..ada0a448d49bf8450a59c39e6ea85c1bbed0cdcb 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -96,9 +96,14 @@ public:
     MaemoDeviceConfig deviceConfig() const;
     MaemoDeviceConfigListModel *deviceConfigModel() const;
     QString runtimeGdbServerPort() const;
+    bool useRemoteGdb() const { return m_useRemoteGdb; }
+    void setUseRemoteGdb(bool useRemoteGdb) { m_useRemoteGdb = useRemoteGdb; }
+    int gdbMountPort() const { return m_gdbMountPort; }
+    void setGdbMountPort(int port) { m_gdbMountPort = port; }
 
     const QString gdbCmd() const;
     const QString dumperLib() const;
+    QString localDirToMountForRemoteGdb() const;
 
     virtual QVariantMap toMap() const;
 
@@ -141,6 +146,8 @@ private:
     MaemoRemoteMountsModel *m_remoteMounts;
     QStringList m_arguments;
     QString m_hostAddressFromDevice;
+    bool m_useRemoteGdb;
+    int m_gdbMountPort;
 
     BaseEnvironmentBase m_baseEnvironmentBase;
     ProjectExplorer::Environment m_systemEnvironment;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index c5efebbfea50d11759f55df3eb27655e4aab09c4..a3a726dc3f9b042f335832cb22a342e1f69d13ee 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -54,6 +54,8 @@
 #include <QtGui/QLabel>
 #include <QtGui/QLineEdit>
 #include <QtGui/QPushButton>
+#include <QtGui/QRadioButton>
+#include <QtGui/QSpinBox>
 #include <QtGui/QTableView>
 #include <QtGui/QToolButton>
 
@@ -69,7 +71,15 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
 {
     QVBoxLayout *mainLayout = new QVBoxLayout;
     setLayout(mainLayout);
+    addGenericWidgets(mainLayout);
+    mainLayout->addSpacing(20);
+    addDebuggingWidgets(mainLayout);
+    addMountWidgets(mainLayout);
+    addEnvironmentWidgets(mainLayout);
+}
 
+void MaemoRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayout)
+{
     QFormLayout *formLayout = new QFormLayout;
     mainLayout->addLayout(formLayout);
     formLayout->setFormAlignment(Qt::AlignLeft | Qt::AlignVCenter);
@@ -80,7 +90,7 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     QHBoxLayout *devConfLayout = new QHBoxLayout(devConfWidget);
     m_devConfBox = new QComboBox;
     m_devConfBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
-    m_devConfBox->setModel(runConfiguration->deviceConfigModel());
+    m_devConfBox->setModel(m_runConfiguration->deviceConfigModel());
     devConfLayout->setMargin(0);
     devConfLayout->addWidget(m_devConfBox);
     QLabel *addDevConfLabel= new QLabel(tr("<a href=\"%1\">Manage device configurations</a>")
@@ -99,24 +109,86 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     m_argsLineEdit = new QLineEdit(m_runConfiguration->arguments().join(" "));
     formLayout->addRow(tr("Arguments:"), m_argsLineEdit);
 
-    mainLayout->addSpacing(20);
-    m_detailsContainer = new Utils::DetailsWidget(this);
+    connect(addDevConfLabel, SIGNAL(linkActivated(QString)), this,
+        SLOT(showSettingsDialog(QString)));
+    connect(debuggerConfLabel, SIGNAL(linkActivated(QString)), this,
+        SLOT(showSettingsDialog(QString)));
+    connect(m_configNameLineEdit, SIGNAL(textEdited(QString)), this,
+        SLOT(configNameEdited(QString)));
+    connect(m_argsLineEdit, SIGNAL(textEdited(QString)), this,
+        SLOT(argumentsEdited(QString)));
+    connect(m_devConfBox, SIGNAL(activated(int)), this,
+            SLOT(setCurrentDeviceConfig(int)));
+    connect(m_runConfiguration->deviceConfigModel(), SIGNAL(currentChanged()),
+        this, SLOT(handleCurrentDeviceConfigChanged()));
+    connect(m_runConfiguration, SIGNAL(targetInformationChanged()), this,
+        SLOT(updateTargetInformation()));
+    handleCurrentDeviceConfigChanged();
+}
+
+void MaemoRunConfigurationWidget::addDebuggingWidgets(QVBoxLayout *mainLayout)
+{
+    m_debugDetailsContainer = new Utils::DetailsWidget(this);
+    QWidget *debugWidget = new QWidget;
+    m_debugDetailsContainer->setWidget(debugWidget);
+#ifndef Q_OS_WIN
+    mainLayout->addWidget(m_debugDetailsContainer);
+#endif
+    QFormLayout *debugLayout = new QFormLayout(debugWidget);
+    QHBoxLayout *debugRadioButtonsLayout = new QHBoxLayout;
+    debugLayout->addRow(debugRadioButtonsLayout);
+    QRadioButton *gdbButton = new QRadioButton(tr("Use remote gdb"));
+    QRadioButton *gdbServerButton = new QRadioButton(tr("Use remote gdbserver"));
+    debugRadioButtonsLayout->addWidget(gdbButton);
+    debugRadioButtonsLayout->addWidget(gdbServerButton);
+    debugRadioButtonsLayout->addStretch(1);
+    QHBoxLayout *debugHostAddressLayout = new QHBoxLayout;
+    m_hostAddressLineEdit2 = new QLineEdit;
+    debugHostAddressLayout->addWidget(m_hostAddressLineEdit2);
+    debugHostAddressLayout->addStretch(1);
+    debugLayout->addRow(tr("This host's address from the device:"),
+        debugHostAddressLayout);
+    m_hostAddressLineEdit2->setText(m_runConfiguration->localHostAddressFromDevice());
+    gdbButton->setChecked(m_runConfiguration->useRemoteGdb());
+    gdbServerButton->setChecked(!gdbButton->isChecked());
+    connect(m_hostAddressLineEdit2, SIGNAL(textEdited(QString)), this,
+        SLOT(handleHostAddressChanged(QString)));
+    connect(gdbButton, SIGNAL(toggled(bool)), this,
+        SLOT(handleDebuggingTypeChanged(bool)));
+    QHBoxLayout *spinBoxLayout = new QHBoxLayout;
+    m_gdbMountPortSpinBox = new QSpinBox;
+    m_gdbMountPortSpinBox->setMinimum(1024);
+    m_gdbMountPortSpinBox->setMaximum((1 << 16) - 1);
+    spinBoxLayout->addWidget(m_gdbMountPortSpinBox);
+    spinBoxLayout->addStretch(1);
+    debugLayout->addRow(tr("Local port for mounting the project directory:"),
+        spinBoxLayout);
+    m_gdbMountPortSpinBox->setValue(m_runConfiguration->gdbMountPort());
+    connect(m_gdbMountPortSpinBox, SIGNAL(valueChanged(int)), this,
+        SLOT(handleGdbMountPortChanged(int)));
+    handleDebuggingTypeChanged(gdbButton->isChecked());
+}
+
+void MaemoRunConfigurationWidget::addMountWidgets(QVBoxLayout *mainLayout)
+{
+
+    m_mountDetailsContainer = new Utils::DetailsWidget(this);
     QWidget *mountViewWidget = new QWidget;
-    m_detailsContainer->setWidget(mountViewWidget);
+    m_mountDetailsContainer->setWidget(mountViewWidget);
 #ifndef Q_OS_WIN
-    mainLayout->addWidget(m_detailsContainer);
+    mainLayout->addWidget(m_mountDetailsContainer);
 #endif
     QVBoxLayout *mountViewLayout = new QVBoxLayout(mountViewWidget);
     QHBoxLayout *hostAddressLayout = new QHBoxLayout;
     mountViewLayout->addLayout(hostAddressLayout);
     QLabel *hostNameLabel
         = new QLabel(tr("This host's address from the device:"));
-    m_hostAddressLineEdit = new QLineEdit;
-    m_hostAddressLineEdit->setText(m_runConfiguration->localHostAddressFromDevice());
-    connect(m_hostAddressLineEdit, SIGNAL(editingFinished()), this,
-        SLOT(handleHostAddressChanged()));
+    m_hostAddressLineEdit1 = new QLineEdit;
+    m_hostAddressLineEdit1->setText(m_runConfiguration->localHostAddressFromDevice());
+    connect(m_hostAddressLineEdit1, SIGNAL(textEdited(QString)), this,
+        SLOT(handleHostAddressChanged(QString)));
     hostAddressLayout->addWidget(hostNameLabel);
-    hostAddressLayout->addWidget(m_hostAddressLineEdit);
+    hostAddressLayout->addWidget(m_hostAddressLineEdit1);
     hostAddressLayout->addStretch(1);
     QHBoxLayout *tableLayout = new QHBoxLayout;
     mountViewLayout->addLayout(tableLayout);
@@ -139,10 +211,34 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     mountViewButtonsLayout->addWidget(m_removeMountButton);
     mountViewButtonsLayout->addStretch(1);
 
+    connect(addMountButton, SIGNAL(clicked()), this, SLOT(addMount()));
+    connect(m_removeMountButton, SIGNAL(clicked()), this, SLOT(removeMount()));
+    connect(m_mountView, SIGNAL(doubleClicked(QModelIndex)), this,
+        SLOT(changeLocalMountDir(QModelIndex)));
+    connect(m_mountView->selectionModel(),
+        SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this,
+        SLOT(enableOrDisableRemoveMountSpecButton()));
+    connect(m_runConfiguration->remoteMounts(),
+        SIGNAL(rowsInserted(QModelIndex, int, int)), this,
+        SLOT(handleRemoteMountsChanged()));
+    connect(m_runConfiguration->remoteMounts(),
+        SIGNAL(rowsRemoved(QModelIndex, int, int)), this,
+        SLOT(handleRemoteMountsChanged()));
+    connect(m_runConfiguration->remoteMounts(),
+        SIGNAL(dataChanged(QModelIndex, QModelIndex)), this,
+        SLOT(handleRemoteMountsChanged()));
+    connect(m_runConfiguration->remoteMounts(), SIGNAL(modelReset()), this,
+        SLOT(handleRemoteMountsChanged()));
+    enableOrDisableRemoveMountSpecButton();
+    handleRemoteMountsChanged();
+}
+
+void MaemoRunConfigurationWidget::addEnvironmentWidgets(QVBoxLayout *mainLayout)
+{
     QWidget *baseEnvironmentWidget = new QWidget;
     QHBoxLayout *baseEnvironmentLayout = new QHBoxLayout(baseEnvironmentWidget);
     baseEnvironmentLayout->setMargin(0);
-    QLabel *label = new QLabel(tr("Base environment for this runconfiguration:"), this);
+    QLabel *label = new QLabel(tr("Base environment for this run configuration:"), this);
     baseEnvironmentLayout->addWidget(label);
     m_baseEnvironmentComboBox = new QComboBox(this);
     m_baseEnvironmentComboBox->addItems(QStringList() << tr("Clean Environment")
@@ -160,44 +256,6 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     m_environmentWidget->setUserChanges(m_runConfiguration->userEnvironmentChanges());
     mainLayout->addWidget(m_environmentWidget);
 
-    handleCurrentDeviceConfigChanged();
-    enableOrDisableRemoveButton();
-    handleRemoteMountsChanged();
-
-    connect(m_configNameLineEdit, SIGNAL(textEdited(QString)), this,
-        SLOT(configNameEdited(QString)));
-    connect(m_argsLineEdit, SIGNAL(textEdited(QString)), this,
-        SLOT(argumentsEdited(QString)));
-    connect(m_devConfBox, SIGNAL(activated(int)), this,
-            SLOT(setCurrentDeviceConfig(int)));
-    connect(runConfiguration->deviceConfigModel(), SIGNAL(currentChanged()),
-        this, SLOT(handleCurrentDeviceConfigChanged()));
-    connect(m_runConfiguration, SIGNAL(targetInformationChanged()), this,
-        SLOT(updateTargetInformation()));
-    connect(addDevConfLabel, SIGNAL(linkActivated(QString)), this,
-        SLOT(showSettingsDialog(QString)));
-    connect(debuggerConfLabel, SIGNAL(linkActivated(QString)), this,
-        SLOT(showSettingsDialog(QString)));
-
-    connect(addMountButton, SIGNAL(clicked()), this, SLOT(addMount()));
-    connect(m_removeMountButton, SIGNAL(clicked()), this, SLOT(removeMount()));
-    connect(m_mountView, SIGNAL(doubleClicked(QModelIndex)), this,
-        SLOT(changeLocalMountDir(QModelIndex)));
-    connect(m_mountView->selectionModel(),
-        SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this,
-        SLOT(enableOrDisableRemoveButton()));
-    connect(m_runConfiguration->remoteMounts(),
-        SIGNAL(rowsInserted(QModelIndex, int, int)), this,
-        SLOT(handleRemoteMountsChanged()));
-    connect(m_runConfiguration->remoteMounts(),
-        SIGNAL(rowsRemoved(QModelIndex, int, int)), this,
-        SLOT(handleRemoteMountsChanged()));
-    connect(m_runConfiguration->remoteMounts(),
-        SIGNAL(dataChanged(QModelIndex, QModelIndex)), this,
-        SLOT(handleRemoteMountsChanged()));
-    connect(m_runConfiguration->remoteMounts(), SIGNAL(modelReset()), this,
-        SLOT(handleRemoteMountsChanged()));
-
     connect(m_environmentWidget, SIGNAL(userChangesChanged()), this,
         SLOT(userChangesEdited()));
     connect(m_baseEnvironmentComboBox, SIGNAL(currentIndexChanged(int)),
@@ -250,7 +308,7 @@ void MaemoRunConfigurationWidget::setCurrentDeviceConfig(int index)
     m_runConfiguration->deviceConfigModel()->setCurrentIndex(index);
 }
 
-void MaemoRunConfigurationWidget::enableOrDisableRemoveButton()
+void MaemoRunConfigurationWidget::enableOrDisableRemoveMountSpecButton()
 {
     const QModelIndexList selectedRows
         = m_mountView->selectionModel()->selectedRows();
@@ -294,9 +352,26 @@ void MaemoRunConfigurationWidget::changeLocalMountDir(const QModelIndex &index)
     }
 }
 
-void MaemoRunConfigurationWidget::handleHostAddressChanged()
+void MaemoRunConfigurationWidget::handleHostAddressChanged(const QString &newAddress)
+{
+    m_hostAddressLineEdit1->setText(newAddress);
+    m_hostAddressLineEdit2->setText(newAddress);
+    m_runConfiguration->setLocalHostAddressFromDevice(newAddress);
+}
+
+void MaemoRunConfigurationWidget::handleDebuggingTypeChanged(bool useGdb)
+{
+    m_runConfiguration->setUseRemoteGdb(useGdb);
+    const QString detailsText = useGdb ? tr("Use gdb") : tr("Use gdbserver");
+    m_debugDetailsContainer->setSummaryText(tr("<b>Debugging details:</b> ")
+        + detailsText);
+    m_hostAddressLineEdit2->setEnabled(useGdb);
+    m_gdbMountPortSpinBox->setEnabled(useGdb);
+}
+
+void MaemoRunConfigurationWidget::handleGdbMountPortChanged(int port)
 {
-    m_runConfiguration->setLocalHostAddressFromDevice(m_hostAddressLineEdit->text());
+    m_runConfiguration->setGdbMountPort(port);
 }
 
 void MaemoRunConfigurationWidget::fetchEnvironment()
@@ -367,7 +442,7 @@ void MaemoRunConfigurationWidget::handleRemoteMountsChanged()
             .arg(mountCount);
         break;
     }
-    m_detailsContainer->setSummaryText(QLatin1String("<b>") + text
+    m_mountDetailsContainer->setSummaryText(QLatin1String("<b>") + text
         + QLatin1String("</b>"));
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h
index 922e3b6c6087d0077d287988e48348ee8064e614..608d0486a95513d3afbe8d525b146215b35b21ed 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h
@@ -43,8 +43,10 @@ class QLabel;
 class QLineEdit;
 class QModelIndex;
 class QPushButton;
+class QSpinBox;
 class QTableView;
 class QToolButton;
+class QVBoxLayout;
 QT_END_NAMESPACE
 
 namespace ProjectExplorer {
@@ -77,8 +79,10 @@ private slots:
     void addMount();
     void removeMount();
     void changeLocalMountDir(const QModelIndex &index);
-    void enableOrDisableRemoveButton();
-    void handleHostAddressChanged();
+    void enableOrDisableRemoveMountSpecButton();
+    void handleHostAddressChanged(const QString &newAddress);
+    void handleDebuggingTypeChanged(bool useGdb);
+    void handleGdbMountPortChanged(int port);
     void fetchEnvironment();
     void fetchEnvironmentFinished();
     void userChangesEdited();
@@ -89,14 +93,22 @@ private slots:
     void handleRemoteMountsChanged();
 
 private:
+    void addGenericWidgets(QVBoxLayout *mainLayout);
+    void addDebuggingWidgets(QVBoxLayout *mainLayout);
+    void addMountWidgets(QVBoxLayout *mainLayout);
+    void addEnvironmentWidgets(QVBoxLayout *mainLayout);
+
     QLineEdit *m_configNameLineEdit;
     QLineEdit *m_argsLineEdit;
     QLabel *m_executableLabel;
     QComboBox *m_devConfBox;
-    QLineEdit *m_hostAddressLineEdit;
+    QLineEdit *m_hostAddressLineEdit1;
+    QLineEdit *m_hostAddressLineEdit2;
+    QSpinBox *m_gdbMountPortSpinBox;
     QTableView *m_mountView;
     QToolButton *m_removeMountButton;
-    Utils::DetailsWidget *m_detailsContainer;
+    Utils::DetailsWidget *m_mountDetailsContainer;
+    Utils::DetailsWidget *m_debugDetailsContainer;
     MaemoRunConfiguration *m_runConfiguration;
 
     bool m_ignoreChange;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index df08195fc2579a44adaf1f4a7aea1e569db0253c..5701d7ce07dd3cdbb99cf844fc4cb4921b8203c7 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -57,7 +57,7 @@ MaemoRunControl::MaemoRunControl(RunConfiguration *rc)
     : RunControl(rc, ProjectExplorer::Constants::RUNMODE)
     , m_runConfig(qobject_cast<MaemoRunConfiguration *>(rc))
     , m_devConfig(m_runConfig ? m_runConfig->deviceConfig() : MaemoDeviceConfig())
-    , m_runner(new MaemoSshRunner(this, m_runConfig))
+    , m_runner(new MaemoSshRunner(this, m_runConfig, false))
     , m_running(false)
 {
 }
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
index bf6f99da4688424d7f54332cb7e704d16f301f0c..0169bfbd59bdc959b8199d7d4a92baf3307e6a03 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
@@ -36,7 +36,6 @@
 
 #include "maemodeviceconfigurations.h"
 #include "maemoglobal.h"
-#include "maemoremotemountsmodel.h"
 #include "maemorunconfiguration.h"
 #include "maemotoolchain.h"
 
@@ -53,14 +52,17 @@ namespace Qt4ProjectManager {
 namespace Internal {
 
 MaemoSshRunner::MaemoSshRunner(QObject *parent,
-    MaemoRunConfiguration *runConfig)
+    MaemoRunConfiguration *runConfig, bool debugging)
     : QObject(parent), m_runConfig(runConfig),
       m_devConfig(runConfig->deviceConfig()),
-      m_uploadJobId(SftpInvalidJob)
+      m_uploadJobId(SftpInvalidJob),
+      m_debugging(debugging)
 {
     m_procsToKill
         << QFileInfo(m_runConfig->localExecutableFilePath()).fileName()
         << QLatin1String("utfs-client");
+    if (debugging)
+        m_procsToKill << QLatin1String("gdbserver");
 }
 
 MaemoSshRunner::~MaemoSshRunner() {}
@@ -70,13 +72,24 @@ void MaemoSshRunner::setConnection(const QSharedPointer<Core::SshConnection> &co
     m_connection = connection;
 }
 
-void MaemoSshRunner::addProcsToKill(const QStringList &appNames)
-{
-    m_procsToKill << appNames;
-}
-
 void MaemoSshRunner::start()
 {
+    m_mountSpecs.clear();
+    const MaemoRemoteMountsModel * const remoteMounts
+        = m_runConfig->remoteMounts();
+    for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) {
+        const MaemoRemoteMountsModel::MountSpecification &mountSpec
+            = remoteMounts->mountSpecificationAt(i);
+        if (mountSpec.isValid())
+            m_mountSpecs << mountSpec;
+    }
+    if (m_debugging && m_runConfig->useRemoteGdb()) {
+        m_mountSpecs << MaemoRemoteMountsModel::MountSpecification(
+            m_runConfig->localDirToMountForRemoteGdb(),
+            MaemoGlobal::remoteProjectSourcesMountPoint(),
+            m_runConfig->gdbMountPort());
+    }
+
     m_stop = false;
     if (m_connection)
         disconnect(m_connection.data(), 0, this, 0);
@@ -109,9 +122,11 @@ void MaemoSshRunner::stop()
         disconnect(m_mountProcess.data(), 0, this, 0);
         m_mountProcess->closeChannel();
     }
-    if (m_runner) {
-        disconnect(m_runner.data(), 0, this, 0);
-        m_runner->closeChannel();
+    if (m_debugging || m_runner) {
+        if (m_runner) {
+            disconnect(m_runner.data(), 0, this, 0);
+            m_runner->closeChannel();
+        }
         cleanup(false);
     }
 }
@@ -140,18 +155,12 @@ void MaemoSshRunner::cleanup(bool initialCleanup)
     }
     QString remoteCall = niceKill + QLatin1String("sleep 1; ") + brutalKill;
 
-    const MaemoRemoteMountsModel * const remoteMounts
-        = m_runConfig->remoteMounts();
-    for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) {
-        const MaemoRemoteMountsModel::MountSpecification &mountSpec
-            = remoteMounts->mountSpecificationAt(i);
-        if (mountSpec.isValid()) {
-            remoteCall += QString::fromLocal8Bit("%1 umount %2;")
-                .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint);
-        }
+    for (int i = 0; i < m_mountSpecs.count(); ++i) {
+        remoteCall += QString::fromLocal8Bit("%1 umount %2;")
+            .arg(MaemoGlobal::remoteSudo(), m_mountSpecs.at(i).remoteMountPoint);
     }
-
     remoteCall.remove(remoteCall.count() - 1, 1); // Get rid of trailing semicolon.
+
     SshRemoteProcess::Ptr proc
         = m_connection->createRemoteProcess(remoteCall.toUtf8());
     if (initialCleanup) {
@@ -180,7 +189,7 @@ void MaemoSshRunner::handleInitialCleanupFinished(int exitStatus)
     if (exitStatus != SshRemoteProcess::ExitedNormally) {
         emit error(tr("Initial cleanup failed: %1")
             .arg(m_initialCleaner->errorString()));
-    } else if (m_runConfig->remoteMounts()->hasValidMountSpecifications()) {
+    } else if (!m_mountSpecs.isEmpty()) {
         deployUtfsClient();
     } else {
         emit readyForExecution();
@@ -248,20 +257,15 @@ void MaemoSshRunner::handleUploadFinished(Core::SftpJobId jobId,
 
 void MaemoSshRunner::mount()
 {
-    const MaemoRemoteMountsModel * const remoteMounts
-        = m_runConfig->remoteMounts();
     const QString chmodFuse
         = MaemoGlobal::remoteSudo() + QLatin1String(" chmod a+r+w /dev/fuse");
     const QString chmodUtfsClient
         = QLatin1String("chmod a+x ") + utfsClientOnDevice();
     const QLatin1String andOp(" && ");
     QString remoteCall = chmodFuse + andOp + chmodUtfsClient;
-    for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) {
+    for (int i = 0; i < m_mountSpecs.count(); ++i) {
         const MaemoRemoteMountsModel::MountSpecification &mountSpec
-            = remoteMounts->mountSpecificationAt(i);
-        if (!mountSpec.isValid())
-            continue;
-
+            = m_mountSpecs.at(i);
         QProcess * const utfsServerProc = new QProcess(this);
         connect(utfsServerProc, SIGNAL(readyReadStandardError()), this,
             SLOT(handleUtfsServerErrorOutput()));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
index ca60ffdfb998ae8d2e6811589c550fc8a2174da2..4fd7a6295d628bb370e94038a8ecc792c68c3644 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
@@ -39,6 +39,7 @@
 #include <QtCore/QSharedPointer>
 
 #include "maemodeviceconfigurations.h"
+#include "maemoremotemountsmodel.h"
 
 #include <coreplugin/ssh/sftpdefs.h>
 
@@ -60,11 +61,11 @@ class MaemoSshRunner : public QObject
 {
     Q_OBJECT
 public:
-    MaemoSshRunner(QObject *parent, MaemoRunConfiguration *runConfig);
+    MaemoSshRunner(QObject *parent, MaemoRunConfiguration *runConfig,
+        bool debugging);
     ~MaemoSshRunner();
 
     void setConnection(const QSharedPointer<Core::SshConnection> &connection);
-    void addProcsToKill(const QStringList &appNames);
 
     void start();
     void stop();
@@ -109,9 +110,11 @@ private:
     QSharedPointer<Core::SftpChannel> m_utfsClientUploader;
     QStringList m_procsToKill;
     QList<QProcess *> m_utfsServers;
+    QList<MaemoRemoteMountsModel::MountSpecification> m_mountSpecs;
 
     Core::SftpJobId m_uploadJobId;
     bool m_stop;
+    const bool m_debugging;
 };
 
 } // namespace Internal