diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp
index bdb19faf054781548739eb22ccd71b8656a16f37..07d2cca79e6eb14ffecf87cac9b5a002df6baf3d 100644
--- a/src/plugins/analyzerbase/analyzerruncontrol.cpp
+++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp
@@ -124,7 +124,6 @@ void AnalyzerRunControl::start()
         d->m_isRunning = true;
         emit started();
     }
-
 }
 
 RunControl::StopResult AnalyzerRunControl::stop()
diff --git a/src/plugins/valgrind/callgrind/callgrindrunner.cpp b/src/plugins/valgrind/callgrind/callgrindrunner.cpp
index 918b9402517a5d0884b3147ff03f281032d436a4..79a8fb81115d1d39d17b88c8634d3e7716582be4 100644
--- a/src/plugins/valgrind/callgrind/callgrindrunner.cpp
+++ b/src/plugins/valgrind/callgrind/callgrindrunner.cpp
@@ -70,10 +70,11 @@ CallgrindController *CallgrindRunner::controller() const
     return m_controller;
 }
 
-void CallgrindRunner::start()
+bool CallgrindRunner::start()
 {
     ValgrindRunner::start();
     m_controller->setValgrindProcess(valgrindProcess());
+    return true;
 }
 
 void CallgrindRunner::processFinished(int ret, QProcess::ExitStatus status)
diff --git a/src/plugins/valgrind/callgrind/callgrindrunner.h b/src/plugins/valgrind/callgrind/callgrindrunner.h
index 89e23c16216f78e4cdacaeddfaab4535277a241d..660d91a852f44d1d7a4fa39bad1188841371136f 100644
--- a/src/plugins/valgrind/callgrind/callgrindrunner.h
+++ b/src/plugins/valgrind/callgrind/callgrindrunner.h
@@ -55,7 +55,7 @@ public:
     CallgrindController *controller() const;
 
     bool isPaused() const;
-    void start();
+    bool start();
 
 signals:
     void statusMessage(const QString &message);
diff --git a/src/plugins/valgrind/memcheck/memcheckrunner.cpp b/src/plugins/valgrind/memcheck/memcheckrunner.cpp
index ef11d70849161caada4edc06b437d420b65f6d8d..92b3d38d091b351230e4e4b4d7741fc2abed45e0 100644
--- a/src/plugins/valgrind/memcheck/memcheckrunner.cpp
+++ b/src/plugins/valgrind/memcheck/memcheckrunner.cpp
@@ -96,19 +96,19 @@ void MemcheckRunner::setParser(XmlProtocol::ThreadedParser *parser)
     d->parser = parser;
 }
 
-void MemcheckRunner::start()
+bool MemcheckRunner::start()
 {
     if (startMode() == Analyzer::StartLocal) {
-        QTC_ASSERT(d->parser, return);
+        QTC_ASSERT(d->parser, return false);
 
         bool check = d->xmlServer.listen(QHostAddress(QHostAddress::LocalHost));
-        QTC_ASSERT(check, return);
+        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(QHostAddress(QHostAddress::LocalHost));
-        QTC_ASSERT(check, return);
+        QTC_ASSERT(check, return false);
         d->logServer.setMaxPendingConnections(1);
         const quint16 logPortNumber = d->logServer.serverPort();
         connect(&d->logServer, SIGNAL(newConnection()), SLOT(logSocketConnected()));
@@ -123,7 +123,7 @@ void MemcheckRunner::start()
     }
 
     if (startMode() == Analyzer::StartRemote) {
-        QTC_ASSERT(d->parser, return);
+        QTC_ASSERT(d->parser, return false);
 
         QList<QHostAddress> possibleHostAddresses;
         //NOTE: ::allAddresses does not seem to work for usb interfaces...
@@ -144,7 +144,7 @@ void MemcheckRunner::start()
         if (possibleHostAddresses.isEmpty()) {
             emit processErrorReceived(tr("No network interface found for remote analysis."),
                                       QProcess::FailedToStart);
-            return;
+            return false;
         } else if (possibleHostAddresses.size() > 1) {
             QDialog dlg;
             dlg.setWindowTitle(tr("Select Network Interface"));
@@ -171,27 +171,29 @@ void MemcheckRunner::start()
             layout->addWidget(buttons);
 
             dlg.setLayout(layout);
-            if (dlg.exec() != QDialog::Accepted)
-                return;
+            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);
-            QTC_ASSERT(list->currentRow() < possibleHostAddresses.size(), return);
+            QTC_ASSERT(list->currentRow() >= 0, return false);
+            QTC_ASSERT(list->currentRow() < possibleHostAddresses.size(), return false);
             hostAddr = possibleHostAddresses.at(list->currentRow());
         } else {
             hostAddr = possibleHostAddresses.first();
         }
 
         QString ip = hostAddr.toString();
-        QTC_ASSERT(!ip.isEmpty(), return);
+        QTC_ASSERT(!ip.isEmpty(), return false);
 
         bool check = d->xmlServer.listen(hostAddr);
-        QTC_ASSERT(check, return);
+        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);
-        QTC_ASSERT(check, return);
+        QTC_ASSERT(check, return false);
         d->logServer.setMaxPendingConnections(1);
         const quint16 logPortNumber = d->logServer.serverPort();
         connect(&d->logServer, SIGNAL(newConnection()), SLOT(logSocketConnected()));
@@ -204,7 +206,7 @@ void MemcheckRunner::start()
         setValgrindArguments(memcheckArguments);
     }
 
-    ValgrindRunner::start();
+    return ValgrindRunner::start();
 }
 
 void MemcheckRunner::xmlSocketConnected()
diff --git a/src/plugins/valgrind/memcheck/memcheckrunner.h b/src/plugins/valgrind/memcheck/memcheckrunner.h
index 180c344e2eaf621a65d255bc959a2016dd786703..ab1d630b318b67fc5c1281ae3665cc65da574d68 100644
--- a/src/plugins/valgrind/memcheck/memcheckrunner.h
+++ b/src/plugins/valgrind/memcheck/memcheckrunner.h
@@ -54,7 +54,7 @@ public:
     ~MemcheckRunner();
 
     void setParser(XmlProtocol::ThreadedParser *parser);
-    void start();
+    bool start();
 
 signals:
     void logMessageReceived(const QByteArray &);
diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp
index 73f204b3ea15d4bb38bad6dd232649a160a242d3..f1a297222eead9ea835fee48e361475154a70cb2 100644
--- a/src/plugins/valgrind/valgrindengine.cpp
+++ b/src/plugins/valgrind/valgrindengine.cpp
@@ -117,8 +117,10 @@ bool ValgrindEngine::start()
     connect(runner(), SIGNAL(finished()),
             SLOT(runnerFinished()));
 
-    runner()->start();
-
+    if (!runner()->start()) {
+        m_progress->cancel();
+        return false;
+    }
     return true;
 }
 
diff --git a/src/plugins/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrindrunner.cpp
index 3f39db91b5ddeab95917202f88ee6a5b09c3876a..2553699953b3c6cd08d1539dcea874ced50946d9 100644
--- a/src/plugins/valgrind/valgrindrunner.cpp
+++ b/src/plugins/valgrind/valgrindrunner.cpp
@@ -219,12 +219,13 @@ void ValgrindRunner::waitForFinished() const
     loop.exec();
 }
 
-void ValgrindRunner::start()
+bool ValgrindRunner::start()
 {
     if (d->startMode == Analyzer::StartLocal)
         d->run(new LocalValgrindProcess(this));
     else if (d->startMode == Analyzer::StartRemote)
         d->run(new RemoteValgrindProcess(d->connParams, this));
+    return true;
 }
 
 void ValgrindRunner::processError(QProcess::ProcessError e)
diff --git a/src/plugins/valgrind/valgrindrunner.h b/src/plugins/valgrind/valgrindrunner.h
index 6b91ed15106e9b3c5299f4500238c25efffaafc6..8f463416197412233e227e1fd82fdea86a1b067b 100644
--- a/src/plugins/valgrind/valgrindrunner.h
+++ b/src/plugins/valgrind/valgrindrunner.h
@@ -83,7 +83,7 @@ public:
 
     QString errorString() const;
 
-    virtual void start();
+    virtual bool start();
     virtual void stop();
 
     ValgrindProcess *valgrindProcess() const;