diff --git a/core/include/priority_queue.h b/core/include/priority_queue.h
index f1df5a6d2c9a8952087d97dcb056337c40551d99..bdfdaab1c9408b6e4aa110b00884c50f5e6f7c26 100644
--- a/core/include/priority_queue.h
+++ b/core/include/priority_queue.h
@@ -98,6 +98,8 @@ priority_queue_node_t *priority_queue_remove_head(priority_queue_t *root);
  *
  * @param[in,out]   root    the queue's root
  * @param[in]       new_obj the object to prepend
+ *
+ * @pre The queue does not already contain @p new_obj.
  */
 void priority_queue_add(priority_queue_t *root, priority_queue_node_t *new_obj);
 
diff --git a/core/priority_queue.c b/core/priority_queue.c
index 261c8a9d66bed37ab453b60ff92d0f4cf140c6d2..ac6e9c92b2e486a7c60176f595b165102d661326 100644
--- a/core/priority_queue.c
+++ b/core/priority_queue.c
@@ -18,6 +18,7 @@
  */
 
 #include <inttypes.h>
+#include <assert.h>
 
 #include "priority_queue.h"
 
@@ -55,6 +56,8 @@ void priority_queue_add(priority_queue_t *root, priority_queue_node_t *new_obj)
     priority_queue_node_t *node = (priority_queue_node_t *) root;
 
     while (node->next != NULL) {
+        /* not trying to add the same node twice */
+        assert(node->next != new_obj);
         if (node->next->priority > new_obj->priority) {
             new_obj->next = node->next;
             node->next = new_obj;