diff --git a/Kernel/arch/x86/lib.c b/Kernel/arch/x86/lib.c
index 0471deba284fbbaabe830e0339ad51609e3b2ba2..3858eff3eee7ccf75abfcc235e2a338c48221f50 100644
--- a/Kernel/arch/x86/lib.c
+++ b/Kernel/arch/x86/lib.c
@@ -82,9 +82,12 @@ void SHORTLOCK(struct sShortSpinlock *Lock)
 	__ASM__("cli");
 	
 	// Wait for another CPU to release
-	while(v) {
-		__ASM__("xchgl %%eax, (%%edi)":"=a"(v):"a"(cpu),"D"(&Lock->Lock));
-	}
+	__ASM__(
+		"1: lock cmpxchgl %2, (%3)\n\t"
+		"jnz 1b"
+		: "=a"(v)
+		: "a"(0), "r"(cpu), "r"(&Lock->Lock)
+		);
 	
 	Lock->IF = IF;
 	
diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c
index 9e8aa385da825d43af8121412290f5749db79974..1cd11067256f2af745f32076d9d7a3704854b5c8 100644
--- a/Kernel/arch/x86/proc.c
+++ b/Kernel/arch/x86/proc.c
@@ -488,7 +488,7 @@ void Proc_Start(void)
 	#else
 	// Create Idle Task
 	tid = Proc_NewKThread(Proc_IdleThread, &gaCPUs[0]);
-	gaCPUs[0].IdleThread = Threads_GetThread(tid);
+//	gaCPUs[0].IdleThread = Threads_GetThread(tid);
 	
 	// Set current task
 	gaCPUs[0].Current = &gThreadZero;