Index: generic/src/time/clock.c
===================================================================
--- generic/src/time/clock.c	(revision fd8302d82c4f46789dd4c951470231d1218d0db9)
+++ generic/src/time/clock.c	(revision e7ed98680bd5e7de4b6d0a2a5bed181a601437e5)
@@ -125,4 +125,5 @@
 	timeout_handler_t f;
 	void *arg;
+	count_t missed_clock_ticks = CPU->missed_clock_ticks;
 	int i;
 
@@ -131,5 +132,5 @@
 	 * run all expired timeouts as you visit them.
 	 */
-	for (i = 0; i <= CPU->missed_clock_ticks; i++) {
+	for (i = 0; i <= missed_clock_ticks; i++) {
 		clock_update_counters();
 		spinlock_lock(&CPU->timeoutlock);
@@ -164,10 +165,14 @@
 		
 		spinlock_lock(&CPU->lock);
-		CPU->needs_relink++;
+		CPU->needs_relink += 1 + missed_clock_ticks;
 		spinlock_unlock(&CPU->lock);	
 	
 		spinlock_lock(&THREAD->lock);
-		if ((ticks = THREAD->ticks))
-			THREAD->ticks--;
+		if ((ticks = THREAD->ticks)) {
+			if (ticks >= 1 + missed_clock_ticks)
+				THREAD->ticks -= 1 + missed_clock_ticks;
+			else
+				THREAD->ticks = 0;
+		}
 		spinlock_unlock(&THREAD->lock);
 		
