diff --git a/core/msg.c b/core/msg.c
index b5d5438894a35f264d71045c2557e43e6199e2b3..905edc9ce07cd7b91d32571f01378fcc580bbcd7 100644
--- a/core/msg.c
+++ b/core/msg.c
@@ -324,12 +324,17 @@ static int _msg_receive(msg_t *m, int block)
         *m = *sender_msg;
 
         /* remove sender from queue */
+        uint16_t sender_prio = PRIORITY_IDLE;
         if (sender->status != STATUS_REPLY_BLOCKED) {
             sender->wait_data = NULL;
             sched_set_status(sender, STATUS_PENDING);
+            sender_prio = sender->priority;
         }
 
         eINT();
+        if (sender_prio < PRIORITY_IDLE) {
+            sched_switch(sender_prio);
+        }
         return 1;
     }