diff --git a/tests/system/shared/qtquick.py b/tests/system/shared/qtquick.py
index 6a0bf8cb4137f4adb3e4a02c7a0b0911b0ab02a6..f5a81eb4a85b75ae3095edaf0b97282c5489d862 100644
--- a/tests/system/shared/qtquick.py
+++ b/tests/system/shared/qtquick.py
@@ -83,7 +83,14 @@ def __chooseTargets__(targets=QtQuickConstants.Targets.DESKTOP):
             if mustCheck:
                 test.fail("Failed to check target '%s'" % QtQuickConstants.getStringForTarget(current))
 
-def runAndCloseApp(withHookInto=False, executable=None, port=None):
+# run and close a Qt Quick application
+# withHookInto - if set to True the function tries to attach to the sub-process instead of simply pressing Stop inside Creator
+# executable - must be defined when using hook-into
+# port - must be defined when using hook-into
+# function - can be a string holding a function name or a reference to the function itself - this function will be called on
+# the sub-process when hooking-into has been successful - if its missing simply closing the Qt Quick app will be done
+# ATTENTION! Make sure this function won't fail and the sub-process will end when the function returns
+def runAndCloseApp(withHookInto=False, executable=None, port=None, function=None):
     global processStarted, processExited
     processStarted = processExited = False
     installLazySignalHandler("{type='ProjectExplorer::ApplicationLaucher'}", "processStarted()", "__handleProcessStarted__")
@@ -102,7 +109,7 @@ def runAndCloseApp(withHookInto=False, executable=None, port=None):
         invokeMenuItem("File", "Exit")
         return False
     if withHookInto and not executable in ("", None):
-        __closeSubprocessByHookingIntoQmlApplicationViewer__(executable, port)
+        __closeSubprocessByHookingIntoQmlApplicationViewer__(executable, port, function)
     else:
         __closeSubprocessByPushingStop__()
     return True
@@ -115,7 +122,7 @@ def __closeSubprocessByPushingStop__():
     test.verify(playButton.enabled)
     test.compare(stopButton.enabled, False)
 
-def __closeSubprocessByHookingIntoQmlApplicationViewer__(executable, port):
+def __closeSubprocessByHookingIntoQmlApplicationViewer__(executable, port, function):
     global processExited
     ensureChecked(":Qt Creator_Core::Internal::OutputPaneToggleButton")
     output = waitForObject("{type='Core::OutputWindow' visible='1' windowTitle='Application Output Window'}", 20000)
@@ -124,9 +131,28 @@ def __closeSubprocessByHookingIntoQmlApplicationViewer__(executable, port):
     else:
         waitFor("'Listening on port %d for incoming connectionsdone' in str(output.plainText)" % port, 5000)
     attachToApplication(executable)
-    sendEvent("QCloseEvent", "{type='QmlApplicationViewer' unnamed='1' visible='1'}")
+    if function == None:
+        sendEvent("QCloseEvent", "{type='QmlApplicationViewer' unnamed='1' visible='1'}")
+        setApplicationContext(applicationContext("qtcreator"))
+    else:
+        try:
+            if isinstance(function, (str, unicode)):
+                globals()[function]()
+            else:
+                function()
+        except:
+            test.fatal("Function to execute on sub-process could not be found.",
+                       "Using fallback of pushing STOP inside Creator.")
+            setApplicationContext(applicationContext("qtcreator"))
+            __closeSubprocessByPushingStop__()
     waitFor("processExited==True", 10000)
-    setApplicationContext(applicationContext("qtcreator"))
+    if not processExited:
+        test.warning("Sub-process seems not to have closed properly.")
+        try:
+            setApplicationContext(applicationContext("qtcreator"))
+            __closeSubprocessByPushingStop__()
+        except:
+            pass
     return True
 
 def runAndCloseQtQuickUI():
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation/test.py b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
index ed2a15cef270ea3b5904140e1ed01f96f169d541..46e9d3a1ace34ce90219eac26a68f9b26fcd8e32 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
@@ -23,7 +23,7 @@ def main():
             result = addExecutableAsAttachableAUT(projectName, 11223)
             allowAppThroughWinFW(workingDir, projectName)
             if result:
-                result = runAndCloseApp(True, projectName, 11223)
+                result = runAndCloseApp(True, projectName, 11223, "subprocessFunction")
             else:
                 result = runAndCloseApp()
             removeExecutableAsAttachableAUT(projectName, 11223)
@@ -35,6 +35,12 @@ def main():
 
     invokeMenuItem("File", "Exit")
 
+def subprocessFunction():
+    helloWorldText = waitForObject("{container={type='QmlApplicationViewer' visible='1' unnamed='1'} "
+                                   "enabled='true' text='Hello World' type='Text' unnamed='1' visible='true'}")
+    test.log("Clicking 'Hello World' Text to close QmlApplicationViewer")
+    mouseClick(helloWorldText, 5, 5, 0, Qt.LeftButton)
+
 def cleanup():
     global workingDir
     # waiting for a clean exit - for a full-remove of the temp directory
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation2/test.py b/tests/system/suite_qtquick/tst_qtquick_creation2/test.py
index 2f84aff6994a88814acfc50bbc999b101a7aba4a..018b9ee10e63fbed4ec9b4331d4f58eb404eedba 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation2/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation2/test.py
@@ -12,10 +12,11 @@ def main():
     # using a temporary directory won't mess up an eventually exisiting
     workingDir = tempDir()
     prepareTemplate(sourceExample)
-    createNewQtQuickApplication(workingDir, None, templateDir + "/qml/textselection.qml")
+    projectName = createNewQtQuickApplication(workingDir, None, templateDir + "/qml/textselection.qml")
     # wait for parsing to complete
     waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}", "sourceFilesRefreshed(QStringList)", 30000)
     test.log("Building project")
+    result = modifyRunSettingsForHookInto(projectName, 11223)
     invokeMenuItem("Build","Build All")
     waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)", 300000)
     if not checkCompile():
@@ -23,10 +24,33 @@ def main():
     else:
         checkLastBuild()
         test.log("Running project (includes build)")
-        if runAndCloseApp():
+        if result:
+            result = addExecutableAsAttachableAUT(projectName, 11223)
+            allowAppThroughWinFW(workingDir, projectName)
+            if result:
+                result = runAndCloseApp(True, projectName, 11223, subprocessFunction)
+            else:
+                result = runAndCloseApp()
+            removeExecutableAsAttachableAUT(projectName, 11223)
+            deleteAppFromWinFW(workingDir, projectName)
+        else:
+            result = runAndCloseApp()
+        if result:
             logApplicationOutput()
     invokeMenuItem("File", "Exit")
 
+def subprocessFunction():
+    textEdit = waitForObject("{container={type='QmlApplicationViewer' unnamed='1' visible='1'} "
+                             "enabled='true' type='TextEdit' unnamed='1' visible='true'}")
+    test.log("Test dragging")
+    dragItemBy(textEdit, 30, 30, 50, 50, 0, Qt.LeftButton)
+    test.log("Test editing")
+    textEdit.cursorPosition = 0
+    type(textEdit, "This text is entered by Squish...")
+    type(textEdit, "<Return>")
+    test.log("Closing QmlApplicationViewer")
+    sendEvent("QCloseEvent", "{type='QmlApplicationViewer' unnamed='1' visible='1'}")
+
 def prepareTemplate(sourceExample):
     global templateDir
     templateDir = tempDir()