diff --git a/src/plugins/valgrind/memcheck/memcheckrunner.cpp b/src/plugins/valgrind/memcheck/memcheckrunner.cpp
index 25dcf7785febafa37664ac6141200845204625b9..8920ec09af76e1c327925eff3d563177116fb445 100644
--- a/src/plugins/valgrind/memcheck/memcheckrunner.cpp
+++ b/src/plugins/valgrind/memcheck/memcheckrunner.cpp
@@ -105,18 +105,77 @@ bool MemcheckRunner::start()
     }
 
     if (startMode() == Analyzer::StartRemote) {
-        ip = connectionParameters().host;
+
+        QList<QHostAddress> possibleHostAddresses;
+        //NOTE: ::allAddresses does not seem to work for usb interfaces...
+        foreach (const QNetworkInterface &iface, QNetworkInterface::allInterfaces()) {
+            foreach (const QNetworkAddressEntry &entry, iface.addressEntries()) {
+                const QHostAddress addr = entry.ip();
+                if (addr.toString() != QLatin1String("127.0.0.1")
+                        && addr.toString() != QLatin1String("0:0:0:0:0:0:0:1"))
+                {
+                    possibleHostAddresses << addr;
+                    break;
+                }
+            }
+        }
+
+        if (possibleHostAddresses.isEmpty()) {
+            emit processErrorReceived(tr("No network interface found for remote analysis."),
+                                      QProcess::FailedToStart);
+            return false;
+        } else if (possibleHostAddresses.size() > 1) {
+            QDialog dlg;
+            dlg.setWindowTitle(tr("Select Network Interface"));
+            QVBoxLayout *layout = new QVBoxLayout;
+            QLabel *description = new QLabel;
+            description->setWordWrap(true);
+            description->setText(tr("More than one network interface was found on your machine. Please select which one you want to use for remote analysis."));
+            layout->addWidget(description);
+            QListWidget *list = new QListWidget;
+            foreach (const QHostAddress &address, possibleHostAddresses)
+                list->addItem(address.toString());
+
+            list->setSelectionMode(QAbstractItemView::SingleSelection);
+            list->setCurrentRow(0);
+            layout->addWidget(list);
+
+            QDialogButtonBox *buttons = new QDialogButtonBox;
+            buttons->addButton(QDialogButtonBox::Ok);
+            buttons->addButton(QDialogButtonBox::Cancel);
+            connect(buttons, SIGNAL(accepted()),
+                    &dlg, SLOT(accept()));
+            connect(buttons, SIGNAL(rejected()),
+                    &dlg, SLOT(reject()));
+            layout->addWidget(buttons);
+
+            dlg.setLayout(layout);
+            if (dlg.exec() != QDialog::Accepted) {
+                emit processErrorReceived(tr("No Network Interface was chosen for remote analysis"), QProcess::FailedToStart);
+                return false;
+            }
+
+            QTC_ASSERT(list->currentRow() >= 0, return false);
+            QTC_ASSERT(list->currentRow() < possibleHostAddresses.size(), return false);
+            hostAddr = possibleHostAddresses.at(list->currentRow());
+        } else {
+            hostAddr = possibleHostAddresses.first();
+        }
+
+        ip = hostAddr.toString();
         QTC_ASSERT(!ip.isEmpty(), return false);
         hostAddr = QHostAddress(ip);
     }
 
     bool check = d->xmlServer.listen(hostAddr);
+    if (!check) emit processErrorReceived( tr("XmlServer on %1: ").arg(ip) + d->xmlServer.errorString(), QProcess::FailedToStart );
     QTC_ASSERT(check, return false);
     d->xmlServer.setMaxPendingConnections(1);
     const quint16 xmlPortNumber = d->xmlServer.serverPort();
     connect(&d->xmlServer, SIGNAL(newConnection()), SLOT(xmlSocketConnected()));
 
     check = d->logServer.listen(hostAddr);
+    if (!check) emit processErrorReceived( tr("LogServer on %1: ").arg(ip) + d->logServer.errorString(), QProcess::FailedToStart );
     QTC_ASSERT(check, return false);
     d->logServer.setMaxPendingConnections(1);
     const quint16 logPortNumber = d->logServer.serverPort();