diff --git a/src/ExecutionEngine.cpp b/src/ExecutionEngine.cpp
index e9ba099..69c6662 100644
--- a/src/ExecutionEngine.cpp
+++ b/src/ExecutionEngine.cpp
@@ -348,7 +348,13 @@ namespace RTT
     }

     bool ExecutionEngine::breakLoop() {
-        return true;
+        bool ok = true;
+        if (taskc)
+            ok = taskc->breakUpdateHook();
+        for (std::vector<TaskCore*>::iterator it = children.begin(); it != children.end();++it) {
+            ok = (*it)->breakUpdateHook() && ok;
+            }
+        return ok;
     }

     void ExecutionEngine::finalize() {
diff --git a/src/TaskCore.cpp b/src/TaskCore.cpp
index a78a9c8..81a553c 100644
--- a/src/TaskCore.cpp
+++ b/src/TaskCore.cpp
@@ -246,6 +246,11 @@ namespace RTT
         update();
     }

+    bool TaskCore::breakUpdateHook()
+    {
+        return false;
+    }
+
     void TaskCore::stopHook()
     {
         shutdown();
diff --git a/src/TaskCore.hpp b/src/TaskCore.hpp
index 64143d3..77197be 100644
--- a/src/TaskCore.hpp
+++ b/src/TaskCore.hpp
@@ -422,6 +422,16 @@ namespace RTT
         virtual void updateHook();

         /**
+         * Implement this function if your code might block for long times inside
+         * the updateHook() function. Insert in this hook the code to wake up
+         * that code or signal it otherwise that updateHook() is requested to return
+         * (for example by setting a flag).
+         * The method returns \a false by default.
+         * @return true if well received and updateHook() will soon return. False otherwise.
+         */
+        virtual bool breakUpdateHook();
+
+        /**
          * Implement this method to contain code that must be executed
          * in the RunTimeError state, instead of updateHook(). This allows
          * you to specify the behaviour in an erroneous component.

