Index: kernel/generic/include/time/timeout.h
===================================================================
--- kernel/generic/include/time/timeout.h	(revision 742f95ecf654c520834dbc577753c18d66995c14)
+++ kernel/generic/include/time/timeout.h	(revision ad58fd2c61f108df5c75951d8f2ba2d015952c9e)
@@ -45,5 +45,5 @@
 	IRQ_SPINLOCK_DECLARE(lock);
 
-	/** Link to the list of active timeouts on CURRENT->cpu */
+	/** Link to the list of active timeouts on timeout->cpu */
 	link_t link;
 	/** Timeout will be activated when current clock tick reaches this value. */
@@ -61,5 +61,4 @@
 extern void timeout_init(void);
 extern void timeout_initialize(timeout_t *);
-extern void timeout_reinitialize(timeout_t *);
 extern void timeout_register(timeout_t *, uint64_t, timeout_handler_t, void *);
 extern bool timeout_unregister(timeout_t *);
Index: kernel/generic/src/time/clock.c
===================================================================
--- kernel/generic/src/time/clock.c	(revision 742f95ecf654c520834dbc577753c18d66995c14)
+++ kernel/generic/src/time/clock.c	(revision ad58fd2c61f108df5c75951d8f2ba2d015952c9e)
@@ -172,5 +172,4 @@
 			timeout_handler_t handler = timeout->handler;
 			void *arg = timeout->arg;
-			timeout_reinitialize(timeout);
 
 			irq_spinlock_unlock(&timeout->lock, false);
Index: kernel/generic/src/time/timeout.c
===================================================================
--- kernel/generic/src/time/timeout.c	(revision 742f95ecf654c520834dbc577753c18d66995c14)
+++ kernel/generic/src/time/timeout.c	(revision ad58fd2c61f108df5c75951d8f2ba2d015952c9e)
@@ -57,20 +57,4 @@
 }
 
-/** Reinitialize timeout
- *
- * Initialize all members except the lock.
- *
- * @param timeout Timeout to be initialized.
- *
- */
-void timeout_reinitialize(timeout_t *timeout)
-{
-	timeout->cpu = NULL;
-	timeout->deadline = 0;
-	timeout->handler = NULL;
-	timeout->arg = NULL;
-	link_initialize(&timeout->link);
-}
-
 /** Initialize timeout
  *
@@ -83,5 +67,6 @@
 {
 	irq_spinlock_initialize(&timeout->lock, "timeout_t_lock");
-	timeout_reinitialize(timeout);
+	link_initialize(&timeout->link);
+	timeout->cpu = NULL;
 }
 
@@ -103,7 +88,4 @@
 	irq_spinlock_lock(&CPU->timeoutlock, true);
 	irq_spinlock_lock(&timeout->lock, false);
-
-	if (timeout->cpu)
-		panic("Unexpected: timeout->cpu != 0.");
 
 	timeout->cpu = CPU;
@@ -152,39 +134,15 @@
 bool timeout_unregister(timeout_t *timeout)
 {
-	DEADLOCK_PROBE_INIT(p_tolock);
+	assert(timeout->cpu);
 
-grab_locks:
-	irq_spinlock_lock(&timeout->lock, true);
-	if (!timeout->cpu) {
-		irq_spinlock_unlock(&timeout->lock, true);
-		return false;
+	irq_spinlock_lock(&timeout->cpu->timeoutlock, true);
+
+	bool success = link_in_use(&timeout->link);
+	if (success) {
+		list_remove(&timeout->link);
 	}
 
-	if (!irq_spinlock_trylock(&timeout->cpu->timeoutlock)) {
-		irq_spinlock_unlock(&timeout->lock, true);
-		DEADLOCK_PROBE(p_tolock, DEADLOCK_THRESHOLD);
-		goto grab_locks;
-	}
-
-	/*
-	 * Now we know for sure that timeout hasn't been activated yet
-	 * and is lurking in timeout->cpu->timeout_active_list.
-	 */
-
-	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);
-		irq_spinlock_unlock(&tmp->lock, false);
-	}
-
-	list_remove(&timeout->link);
-	irq_spinlock_unlock(&timeout->cpu->timeoutlock, false);
-
-	timeout_reinitialize(timeout);
-	irq_spinlock_unlock(&timeout->lock, true);
-
-	return true;
+	irq_spinlock_unlock(&timeout->cpu->timeoutlock, true);
+	return success;
 }
 
