diff --git a/Kernel/arch/x86/proc.asm b/Kernel/arch/x86/proc.asm
index fd372dbf346019215c7744bc2287f896368cff77..a07bdad840809b7e71c24a104b196dbe0cbb7c1d 100644
--- a/Kernel/arch/x86/proc.asm
+++ b/Kernel/arch/x86/proc.asm
@@ -158,14 +158,16 @@ SpawnTask:
 Proc_ReturnToUser:
 	push ebp
 	mov ebp, esp
-	; [EBP+4]: handler to use
-	; [EBP+8]: parameter
+	; [EBP+8]: handler to use
+	; [EBP+12]: parameter
+	; [EBP+16]: kernel stack top
 	
-	call Proc_GetCurThread
+	;call Proc_GetCurThread
 	
 	; EAX is the current thread
-	mov ebx, eax
-	mov eax, [ebx+12*4]	; Get Kernel Stack
+	;mov ebx, eax
+	;mov eax, [ebx+12*4]	; Get Kernel Stack
+	mov eax, [ebp+16]	; Get Kernel Stack
 	sub eax, KSTACK_USERSTATE_SIZE
 	
 	;
@@ -208,7 +210,7 @@ Proc_ReturnToUser:
 	
 	; Get and alter User SP
 	mov edi, edx
-	mov edx, [ebp+8]	; Get parameter
+	mov edx, [ebp+12]	; Get parameter
 	mov [edi+4], edx	; save to user stack
 	mov [edi], DWORD User_Syscall_RetAndExit	; Return Address
 	
@@ -223,7 +225,7 @@ Proc_ReturnToUser:
 	push edi	; ESP
 	push 0x202	; EFLAGS (IP and Rsvd)
 	push 0x1B	; CS
-	mov eax, [ebp+4]	; Method to call
+	mov eax, [ebp+8]	; Method to call
 	push eax	; EIP
 	
 	iret
diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c
index ad83c9919fb4159bc61f49f6b03ab6d9a855b06d..d3c4ab475a9e36bdcb912941535a7b36ed022e6b 100644
--- a/Kernel/arch/x86/proc.c
+++ b/Kernel/arch/x86/proc.c
@@ -49,7 +49,7 @@ extern int	giNextTID;
 extern tThread	gThreadZero;
 extern tThread	*Threads_CloneTCB(Uint *Err, Uint Flags);
 extern void	Isr8(void);	// Double Fault
-extern void	Proc_ReturnToUser(tVAddr Handler, Uint Argument);
+extern void	Proc_ReturnToUser(tVAddr Handler, Uint Argument, tVAddr KernelStack);
 
 // === PROTOTYPES ===
 void	ArchThreads_Init(void);
@@ -833,7 +833,7 @@ void Proc_CallFaultHandler(tThread *Thread)
 {
 	// Rewinds the stack and calls the user function
 	// Never returns
-	Proc_ReturnToUser( Thread->FaultHandler, Thread->CurFaultNum );
+	Proc_ReturnToUser( Thread->FaultHandler, Thread->CurFaultNum, Thread->KernelStack );
 	for(;;);
 }