Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 1558d85ed379df2444da9a5e16727816dbb0a4b8)
+++ kernel/generic/src/proc/thread.c	(revision 9fbc7fad0e2650dd52506a58a04421ffffb3fc31)
@@ -290,15 +290,19 @@
 	    ++thread->priority : thread->priority;
 
-	/* Check that thread->cpu is set whenever it needs to be. */
-	ASSERT(thread->cpu != NULL || 
-		(!thread->wired && !thread->nomigrate && !thread->fpu_context_engaged));
-
-	/* 
-	 * Prefer to run on the same cpu as the last time. Used by wired 
-	 * threads as well as threads with disabled migration.
-	 */
-	cpu_t *cpu = thread->cpu;
-	if (cpu == NULL) 
+	cpu_t *cpu;
+	if (thread->wired || thread->nomigrate || thread->fpu_context_engaged) {
+		/* Cannot ready to another CPU */
+		ASSERT(thread->cpu != NULL);
+		cpu = thread->cpu;
+	} else if (thread->stolen) {
+		/* Ready to the stealing CPU */
 		cpu = CPU;
+	} else if (thread->cpu) {
+		/* Prefer the CPU on which the thread ran last */
+		ASSERT(thread->cpu != NULL);
+		cpu = thread->cpu;
+	} else {
+		cpu = CPU;
+	}
 	
 	thread->state = Ready;
@@ -316,6 +320,4 @@
 	
 	atomic_inc(&nrdy);
-	// FIXME: Why is the avg value not used
-	// avg = atomic_get(&nrdy) / config.cpu_active;
 	atomic_inc(&cpu->nrdy);
 }
