diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index 20daa2471662723c0644e299f6240107a22e5bbf..11d29e5447c5cb4c9ba3900773f7edab60d20b2e 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -164,6 +164,7 @@ private:
     QmlAdapter m_adapter;
     ApplicationLauncher m_applicationLauncher;
     Utils::FileInProjectFinder fileFinder;
+    QTimer m_noDebugOutputTimer;
 };
 
 QmlEnginePrivate::QmlEnginePrivate(QmlEngine *q)
@@ -203,6 +204,12 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
     connect(&d->m_applicationLauncher,
         SIGNAL(appendMessage(QString,Utils::OutputFormat)),
         SLOT(appendMessage(QString,Utils::OutputFormat)));
+
+// Only wait 8 seconds for the 'Waiting for connection' on application ouput, then just try to connect
+    // (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()));
 }
 
 QmlEngine::~QmlEngine()
@@ -251,6 +258,12 @@ void QmlEngine::connectionEstablished()
     notifyEngineRunAndInferiorRunOk();
 }
 
+void QmlEngine::beginConnection()
+{
+    d->m_noDebugOutputTimer.stop();
+    d->m_adapter.beginConnection();
+}
+
 void QmlEngine::connectionStartupFailed()
 {
     Core::ICore * const core = Core::ICore::instance();
@@ -273,7 +286,7 @@ void QmlEngine::retryMessageBoxFinished(int result)
 {
     switch (result) {
     case QMessageBox::Retry: {
-        d->m_adapter.beginConnection();
+        beginConnection();
         break;
     }
     case QMessageBox::Help: {
@@ -311,6 +324,9 @@ void QmlEngine::filterApplicationMessage(const QString &msg, int /*channel*/)
 
     const int index = msg.indexOf(qddserver);
     if (index != -1) {
+        // we're actually getting debug output
+        d->m_noDebugOutputTimer.stop();
+
         QString status = msg;
         status.remove(0, index + qddserver.length()); // chop of 'QDeclarativeDebugServer: '
 
@@ -322,7 +338,7 @@ void QmlEngine::filterApplicationMessage(const QString &msg, int /*channel*/)
 
         QString errorMessage;
         if (status.startsWith(waitingForConnection)) {
-            d->m_adapter.beginConnection();
+            beginConnection();
         } else if (status.startsWith(unableToListen)) {
             //: Error message shown after 'Could not connect ... debugger:"
             errorMessage = tr("The port seems to be in use.");
@@ -356,7 +372,7 @@ void QmlEngine::filterApplicationMessage(const QString &msg, int /*channel*/)
         }
     } else if (msg.contains(cannotRetrieveDebuggingOutput)) {
         // we won't get debugging output, so just try to connect ...
-        d->m_adapter.beginConnection();
+        beginConnection();
     }
 }
 
@@ -385,6 +401,7 @@ void QmlEngine::runEngine()
 
     if (!isSlaveEngine() && startParameters().startMode != AttachToRemote)
         startApplicationLauncher();
+    d->m_noDebugOutputTimer.start();
 }
 
 void QmlEngine::startApplicationLauncher()
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index 9dd2b82e219dc3006b2bc3eac94b7db4f170a5c0..6328823216e5f06cac3e83bf467fcec7bd4d5bb8 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -126,6 +126,7 @@ signals:
         TextEditor::ITextEditor *editor, int cursorPos);
 
 private slots:
+    void beginConnection();
     void connectionEstablished();
     void connectionStartupFailed();
     void connectionError(QAbstractSocket::SocketError error);
diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
index 402f32c70ac1d734093870fd796cc89282854041..931afd81a29c40cfc2fff560b00a5f54a316a435 100644
--- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
@@ -54,6 +54,7 @@
 
 #include <QtGui/QMainWindow>
 #include <QtGui/QMessageBox>
+#include <QtCore/QTimer>
 
 using namespace Analyzer;
 using namespace ProjectExplorer;
@@ -83,6 +84,7 @@ public:
     bool m_fetchingData;
     bool m_fetchDataFromStart;
     bool m_delayedDelete;
+    QTimer m_noDebugOutputTimer;
 };
 
 AbstractQmlProfilerRunner *
@@ -135,6 +137,12 @@ QmlProfilerEngine::QmlProfilerEngine(IAnalyzerTool *tool,
     d->m_fetchingData = false;
     d->m_fetchDataFromStart = false;
     d->m_delayedDelete = false;
+
+    // Only wait 4 seconds for the 'Waiting for connection' on application ouput, then just try to connect
+    // (application output might be redirected / blocked)
+    d->m_noDebugOutputTimer.setSingleShot(true);
+    d->m_noDebugOutputTimer.setInterval(4000);
+    connect(&d->m_noDebugOutputTimer, SIGNAL(timeout()), this, SLOT(processIsRunning()));
 }
 
 QmlProfilerEngine::~QmlProfilerEngine()
@@ -174,6 +182,7 @@ bool QmlProfilerEngine::start()
     connect(d->m_runner, SIGNAL(appendMessage(QString,Utils::OutputFormat)),
             this, SLOT(logApplicationMessage(QString,Utils::OutputFormat)));
 
+    d->m_noDebugOutputTimer.start();
     d->m_runner->start();
 
     d->m_running = true;
@@ -248,6 +257,9 @@ void QmlProfilerEngine::filterApplicationMessage(const QString &msg)
 
     const int index = msg.indexOf(qddserver);
     if (index != -1) {
+        // we're actually getting debug output
+        d->m_noDebugOutputTimer.stop();
+
         QString status = msg;
         status.remove(0, index + qddserver.length()); // chop of 'QDeclarativeDebugServer: '
 
@@ -259,7 +271,7 @@ void QmlProfilerEngine::filterApplicationMessage(const QString &msg)
 
         QString errorMessage;
         if (status.startsWith(waitingForConnection)) {
-            emit processRunning(d->m_runner->debugPort());
+            processIsRunning();
         } else if (status.startsWith(unableToListen)) {
             //: Error message shown after 'Could not connect ... debugger:"
             errorMessage = tr("The port seems to be in use.");
@@ -291,7 +303,7 @@ void QmlProfilerEngine::filterApplicationMessage(const QString &msg)
         }
     } else if (msg.contains(cannotRetrieveDebuggingOutput)) {
         // we won't get debugging output, so just try to connect ...
-        emit processRunning(d->m_runner->debugPort());
+        processIsRunning();
     }
 }
 
@@ -323,5 +335,11 @@ void QmlProfilerEngine::showNonmodalWarning(const QString &warningMsg)
     noExecWarning->show();
 }
 
+void QmlProfilerEngine::processIsRunning()
+{
+    d->m_noDebugOutputTimer.stop();
+    emit processRunning(d->m_runner->debugPort());
+}
+
 } // namespace Internal
 } // namespace QmlProfiler
diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.h b/src/plugins/qmlprofiler/qmlprofilerengine.h
index 9b215be1370a47d8be3b68d1dbb96c152b88c3c3..359ba8ebe86492c5d1c03ff5a37d529230a271ca 100644
--- a/src/plugins/qmlprofiler/qmlprofilerengine.h
+++ b/src/plugins/qmlprofiler/qmlprofilerengine.h
@@ -66,6 +66,7 @@ private slots:
     void logApplicationMessage(const QString &msg, Utils::OutputFormat format);
     void filterApplicationMessage(const QString &msg);
     void wrongSetupMessageBoxFinished(int);
+    void processIsRunning();
 
 private:
     class QmlProfilerEnginePrivate;