diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index fbc7c1f78b62334a6795f2cdf201bac2214e9b32..0ef38d1443cb755129343eddd193446c34750e77 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -790,6 +790,8 @@ void QmlCppEngine::slaveEngineStateChanged
                 QTC_ASSERT(state() == InferiorRunRequested, qDebug() << state());
                 notifyInferiorRunOk();
             }
+        } else if (newState == EngineRunFailed) {
+            d->m_cppEngine->quitDebugger();
         }
     }
 }
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 53ca0368a032e163c428519ce433c3920ff0fca3..943c4869528df444decab3d23f157c6ee89e103d 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -179,7 +179,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
     connect(&d->m_outputParser, SIGNAL(noOutputMessage()),
             this, SLOT(beginConnection()));
     connect(&d->m_outputParser, SIGNAL(errorMessage(QString)),
-            this, SLOT(wrongSetupMessageBox(QString)));
+            this, SLOT(connectionStartupFailed(QString)));
 
     // Only wait 8 seconds for the 'Waiting for connection' on application ouput, then just try to connect
     // (application output might be redirected / blocked)
@@ -262,7 +262,7 @@ void QmlEngine::beginConnection(quint16 port)
     }
 }
 
-void QmlEngine::connectionStartupFailed()
+void QmlEngine::connectionStartupFailed(const QString &errorMessage)
 {
     if (isSlaveEngine()) {
         if (masterEngine()->state() != InferiorRunOk) {
@@ -275,19 +275,28 @@ void QmlEngine::connectionStartupFailed()
     QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow());
     infoBox->setIcon(QMessageBox::Critical);
     infoBox->setWindowTitle(tr("Qt Creator"));
-    infoBox->setText(tr("Could not connect to the in-process QML debugger.\n"
-                        "Do you want to retry?"));
-    infoBox->setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel | QMessageBox::Help);
-    infoBox->setDefaultButton(QMessageBox::Retry);
+    if (qobject_cast<QmlAdapter *>(sender())) {
+        infoBox->setText(tr("Could not connect to the in-process QML debugger."
+                            "\nDo you want to retry?"));
+        infoBox->setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel |
+                                    QMessageBox::Help);
+        infoBox->setDefaultButton(QMessageBox::Retry);
+    }
+    if (qobject_cast<QmlJsDebugClient::QDeclarativeOutputParser *>(sender())) {
+        infoBox->setText(tr("Could not connect to the in-process QML debugger."
+                            "\n%1").arg(errorMessage));
+        infoBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Help);
+        infoBox->setDefaultButton(QMessageBox::Ok);
+    }
     infoBox->setModal(true);
 
     connect(infoBox, SIGNAL(finished(int)),
-            this, SLOT(retryMessageBoxFinished(int)));
+            this, SLOT(errorMessageBoxFinished(int)));
 
     infoBox->show();
 }
 
-void QmlEngine::retryMessageBoxFinished(int result)
+void QmlEngine::errorMessageBoxFinished(int result)
 {
     switch (result) {
     case QMessageBox::Retry: {
@@ -304,33 +313,12 @@ void QmlEngine::retryMessageBoxFinished(int result)
             notifyInferiorSpontaneousStop();
             notifyInferiorIll();
         } else {
-        notifyEngineRunFailed();
+            notifyEngineRunFailed();
         }
         break;
     }
 }
 
-void QmlEngine::wrongSetupMessageBox(const QString &errorMessage)
-{
-    d->m_noDebugOutputTimer.stop();
-    notifyEngineRunFailed();
-
-    QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow());
-    infoBox->setIcon(QMessageBox::Critical);
-    infoBox->setWindowTitle(tr("Qt Creator"));
-    //: %1 is detailed error message
-    infoBox->setText(tr("Could not connect to the in-process QML debugger:\n%1")
-                     .arg(errorMessage));
-    infoBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Help);
-    infoBox->setDefaultButton(QMessageBox::Ok);
-    infoBox->setModal(true);
-
-    connect(infoBox, SIGNAL(finished(int)),
-            this, SLOT(wrongSetupMessageBoxFinished(int)));
-
-    infoBox->show();
-}
-
 void QmlEngine::connectionError(QAbstractSocket::SocketError socketError)
 {
     if (socketError == QAbstractSocket::RemoteHostClosedError)
@@ -864,15 +852,6 @@ void QmlEngine::disconnected()
     notifyInferiorExited();
 }
 
-void QmlEngine::wrongSetupMessageBoxFinished(int result)
-{
-    if (result == QMessageBox::Help) {
-        Core::HelpManager *helpManager = Core::HelpManager::instance();
-        helpManager->handleHelpRequest(
-                    QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-debugging-qml.html"));
-    }
-}
-
 void QmlEngine::updateCurrentContext()
 {
     const QString context = state() == InferiorStopOk ?
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index fc7c47c268bdde0bb1260033f774dce4576cc0de..72cc70bdea1b866d397ea5cbde4ad2f83bdb0067 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -94,9 +94,7 @@ public slots:
     void disconnected();
 
 private slots:
-    void retryMessageBoxFinished(int result);
-    void wrongSetupMessageBox(const QString &errorMessage);
-    void wrongSetupMessageBoxFinished(int result);
+    void errorMessageBoxFinished(int result);
     void updateCurrentContext();
     void appendDebugOutput(QtMsgType type, const QString &message,
                            const QmlJsDebugClient::QDebugContextInfo &info);
@@ -162,7 +160,7 @@ signals:
 private slots:
     void beginConnection(quint16 port = 0);
     void connectionEstablished();
-    void connectionStartupFailed();
+    void connectionStartupFailed(const QString &errorMessage = QString());
     void connectionError(QAbstractSocket::SocketError error);
     void serviceConnectionError(const QString &service);
     void appendMessage(const QString &msg, Utils::OutputFormat);