diff --git a/sys/sema/sema.c b/sys/sema/sema.c
index 53962a1e72e874f6a7a165c5204bbc316ed17c6b..b9ae892a97324042b99c3ff4d44d7cc4e396fb4b 100644
--- a/sys/sema/sema.c
+++ b/sys/sema/sema.c
@@ -102,11 +102,12 @@ int sema_wait_timed_msg(sema_t *sema, uint64_t timeout, msg_t *msg)
 
         restoreIRQ(old_state);
         msg_receive(msg);
-
+        old_state = disableIRQ();
         if (timeout != 0) {
             xtimer_remove(&timeout_timer);
         }
         priority_queue_remove(&sema->queue, &n);
+        restoreIRQ(old_state);
         if (msg->content.ptr != (void *)sema) {
             return -EAGAIN;
         }