diff --git a/core/msg.c b/core/msg.c
index 5890c94540c3cfd6a9e7ddf936eec1f17b19ed7d..2afc1def316e96b5c606973e07e711eb35e21f9d 100644
--- a/core/msg.c
+++ b/core/msg.c
@@ -27,6 +27,9 @@
 #include "msg.h"
 #include "list.h"
 #include "thread.h"
+#if MODULE_CORE_THREAD_FLAGS
+#include "thread_flags.h"
+#endif
 #include "irq.h"
 #include "cib.h"
 
@@ -47,6 +50,10 @@ static int queue_msg(thread_t *target, const msg_t *m)
     DEBUG("queue_msg(): queuing message\n");
     msg_t *dest = &target->msg_array[n];
     *dest = *m;
+#if MODULE_CORE_THREAD_FLAGS
+    target->flags |= THREAD_FLAG_MSG_WAITING;
+    thread_flags_wake(target);
+#endif
     return 1;
 }
 
@@ -137,6 +144,11 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block, unsigned sta
 
         thread_add_to_list(&(target->msg_waiters), me);
 
+#if MODULE_CORE_THREAD_FLAGS
+        target->flags |= THREAD_FLAG_MSG_WAITING;
+        thread_flags_wake(target);
+#endif
+
         irq_restore(state);
         thread_yield_higher();