diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index b329fa777e980c982f8c30d51e169aa669e6f476..3e31aeddc4d13d1bea6cffca6b3e99847aaa3d6c 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -119,11 +119,13 @@ private:
     InteractiveInterpreter m_interpreter;
     bool m_validContext;
     QHash<QString,BreakpointModelId> pendingBreakpoints;
+    bool m_retryOnConnectFail;
 };
 
 QmlEnginePrivate::QmlEnginePrivate(QmlEngine *q)
     : m_adapter(q),
-      m_validContext(false)
+      m_validContext(false),
+      m_retryOnConnectFail(false)
 {}
 
 class ASTWalker: public Visitor
@@ -344,7 +346,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
     connect(&d->m_outputParser, SIGNAL(waitingForConnectionViaOst()),
             this, SLOT(beginConnection()));
     connect(&d->m_outputParser, SIGNAL(noOutputMessage()),
-            this, SLOT(beginConnection()));
+            this, SLOT(tryToConnect()));
     connect(&d->m_outputParser, SIGNAL(errorMessage(QString)),
             this, SLOT(appStartupFailed(QString)));
 
@@ -352,7 +354,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
     // (application output might be redirected / blocked)
     d->m_noDebugOutputTimer.setSingleShot(true);
     d->m_noDebugOutputTimer.setInterval(8000);
-    connect(&d->m_noDebugOutputTimer, SIGNAL(timeout()), this, SLOT(beginConnection()));
+    connect(&d->m_noDebugOutputTimer, SIGNAL(timeout()), this, SLOT(tryToConnect()));
 
     qtMessageLogHandler()->setHasEditableRow(true);
 
@@ -360,6 +362,9 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
             SIGNAL(documentUpdated(QmlJS::Document::Ptr)),
             this,
             SLOT(documentUpdated(QmlJS::Document::Ptr)));
+
+    // we won't get any debug output
+    d->m_retryOnConnectFail = startParameters.useTerminal;
 }
 
 QmlEngine::~QmlEngine()
@@ -409,6 +414,12 @@ void QmlEngine::connectionEstablished()
         notifyEngineRunAndInferiorRunOk();
 }
 
+void QmlEngine::tryToConnect(quint16 port)
+{
+    d->m_retryOnConnectFail = true;
+    beginConnection(port);
+}
+
 void QmlEngine::beginConnection(quint16 port)
 {
     d->m_noDebugOutputTimer.stop();
@@ -443,6 +454,10 @@ void QmlEngine::connectionStartupFailed()
             return;
         }
     }
+    if (d->m_retryOnConnectFail) {
+        beginConnection();
+        return;
+    }
 
     QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow());
     infoBox->setIcon(QMessageBox::Critical);
@@ -584,6 +599,8 @@ void QmlEngine::runEngine()
             beginConnection();
         else
             startApplicationLauncher();
+    } else {
+        d->m_noDebugOutputTimer.start();
     }
 }
 
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index 4e1bb26082db847821d9d48996fb0e663839cc8c..48ebf238da5a44b1dadbf89a16aaee640f33c44e 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -161,6 +161,7 @@ signals:
         TextEditor::ITextEditor *editor, int cursorPos);
 
 private slots:
+    void tryToConnect(quint16 port = 0);
     void beginConnection(quint16 port = 0);
     void connectionEstablished();
     void connectionStartupFailed();