Index: kernel/generic/src/time/timeout.c
===================================================================
--- kernel/generic/src/time/timeout.c	(revision 6f7071b562c845499c96c4a1354e9a5d3ce94a05)
+++ kernel/generic/src/time/timeout.c	(revision ee2f0bebcbd1e2ecc6efffb33da7df3c9c6404f5)
@@ -118,7 +118,8 @@
 	uint64_t sum = 0;
 	timeout_t *target = NULL;
-	link_t *cur;
-	for (cur = CPU->timeout_active_list.head.next;
-	    cur != &CPU->timeout_active_list.head; cur = cur->next) {
+	link_t *cur, *prev;
+	prev = NULL;
+	for (cur = list_first(&CPU->timeout_active_list);
+	    cur != NULL; cur = list_next(cur, &CPU->timeout_active_list)) {
 		target = list_get_instance(cur, timeout_t, link);
 		irq_spinlock_lock(&target->lock, false);
@@ -131,9 +132,11 @@
 		sum += target->ticks;
 		irq_spinlock_unlock(&target->lock, false);
-	}
-
-	/* Avoid using cur->prev directly */
-	link_t *prev = cur->prev;
-	list_insert_after(&timeout->link, prev);
+		prev = cur;
+	}
+
+	if (prev == NULL)
+		list_prepend(&timeout->link, &CPU->timeout_active_list);
+	else
+		list_insert_after(&timeout->link, prev);
 
 	/*
@@ -146,5 +149,5 @@
 	 * Decrease ticks of timeout's immediate succesor by timeout->ticks.
 	 */
-	if (cur != &CPU->timeout_active_list.head) {
+	if (cur != NULL) {
 		irq_spinlock_lock(&target->lock, false);
 		target->ticks -= timeout->ticks;
@@ -187,6 +190,7 @@
 	 */
 
-	link_t *cur = timeout->link.next;
-	if (cur != &timeout->cpu->timeout_active_list.head) {
+	link_t *cur = list_next(&timeout->link,
+	    &timeout->cpu->timeout_active_list);
+	if (cur != NULL) {
 		timeout_t *tmp = list_get_instance(cur, timeout_t, link);
 		irq_spinlock_lock(&tmp->lock, false);
