diff --git a/src/tools/qmlprofilertool/commandlistener.cpp b/src/tools/qmlprofilertool/commandlistener.cpp
index eb06a35a7f01f054e120813cb667f529854709da..1f23ea0b9548c343c98636bd6407d44a2e16a006 100644
--- a/src/tools/qmlprofilertool/commandlistener.cpp
+++ b/src/tools/qmlprofilertool/commandlistener.cpp
@@ -31,6 +31,7 @@
 **************************************************************************/
 
 #include "commandlistener.h"
+#include "constants.h"
 #include <QTextStream>
 
 CommandListener::CommandListener(QObject *parent)
@@ -46,7 +47,11 @@ void CommandListener::run()
     do {
         line = in.readLine();
         line = line.trimmed();
-        if (!line.isEmpty())
+        if (!line.isEmpty()) {
             emit command(line);
+            if (line == QLatin1String(Constants::CMD_QUIT)
+                    || line == QLatin1String(Constants::CMD_QUIT2))
+                return;
+        }
     } while (!m_stopRequested && !line.isNull());
 }
diff --git a/src/tools/qmlprofilertool/constants.h b/src/tools/qmlprofilertool/constants.h
new file mode 100644
index 0000000000000000000000000000000000000000..fa942d8ae2219807781457bf628094a36e6c6bab
--- /dev/null
+++ b/src/tools/qmlprofilertool/constants.h
@@ -0,0 +1,18 @@
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+namespace Constants {
+
+const char * const CMD_HELP ="help";
+const char * const CMD_HELP2 = "h";
+const char * const CMD_HELP3 = "?";
+
+const char * const CMD_RECORD ="record";
+const char * const CMD_RECORD2 ="r";
+
+const char * const CMD_QUIT ="quit";
+const char * const CMD_QUIT2 = "q";
+
+}
+
+#endif // CONSTANTS_H
diff --git a/src/tools/qmlprofilertool/main.cpp b/src/tools/qmlprofilertool/main.cpp
index 9b03ad8adf23ad06c367bb2813aa6dcf37fa26e5..04287c167d5838d13f84b41ad162083b4ee2e1c0 100644
--- a/src/tools/qmlprofilertool/main.cpp
+++ b/src/tools/qmlprofilertool/main.cpp
@@ -47,8 +47,9 @@ int main(int argc, char *argv[])
     listener.start();
 
     int exitValue = app.exec();
-    listener.terminate();
+    // wait for listener to exit
     listener.wait();
 
+
     return exitValue;
 }
diff --git a/src/tools/qmlprofilertool/qmlprofilerapplication.cpp b/src/tools/qmlprofilertool/qmlprofilerapplication.cpp
index 8e8be8715b19583ae44e4ab55b6eeed220686cd7..6261f64ad0f4b393d7100464cbaf1f0a1c2cd75b 100644
--- a/src/tools/qmlprofilertool/qmlprofilerapplication.cpp
+++ b/src/tools/qmlprofilertool/qmlprofilerapplication.cpp
@@ -31,6 +31,7 @@
 **************************************************************************/
 
 #include "qmlprofilerapplication.h"
+#include "constants.h"
 #include <utils/qtcassert.h>
 #include <QtCore/QStringList>
 #include <QtCore/QTextStream>
@@ -204,11 +205,15 @@ QString QmlProfilerApplication::traceFileName() const
 void QmlProfilerApplication::userCommand(const QString &command)
 {
     QString cmd = command.trimmed();
-    if (cmd == "help" || cmd == "h" || cmd == "?") {
+    if (cmd == Constants::CMD_HELP
+            || cmd == Constants::CMD_HELP2
+            || cmd == Constants::CMD_HELP3) {
         printCommands();
-    } else if (cmd == "r" || cmd == "record") {
+    } else if (cmd == Constants::CMD_RECORD
+               || cmd == Constants::CMD_RECORD2) {
         m_traceClient.setRecording(!m_traceClient.isRecording());
-    } else if (cmd == "q" || cmd == "quit") {
+    } else if (cmd == Constants::CMD_QUIT
+               || cmd == Constants::CMD_QUIT2) {
         if (m_traceClient.isRecording()) {
             m_quitAfterSave = true;
             m_traceClient.setRecording(false);
diff --git a/src/tools/qmlprofilertool/qmlprofilertool.pro b/src/tools/qmlprofilertool/qmlprofilertool.pro
index 3e15c56d2d0b7945c30da665c6d129c30c94ff41..4e9b4abaae411dfdf62bfc737590ce99dac64881 100644
--- a/src/tools/qmlprofilertool/qmlprofilertool.pro
+++ b/src/tools/qmlprofilertool/qmlprofilertool.pro
@@ -19,6 +19,8 @@ SOURCES += main.cpp \
 
 HEADERS += \
     qmlprofilerapplication.h \
-    commandlistener.h
+    commandlistener.h \
+    constants.h
+