Index: kernel/arch/amd64/src/proc/scheduler.c
===================================================================
--- kernel/arch/amd64/src/proc/scheduler.c	(revision c5396c1804ab53d2d15266e72be0b0617bebb8b3)
+++ kernel/arch/amd64/src/proc/scheduler.c	(revision 9a08e6bddeb3cffb3e0438813da2a3084dcd33c5)
@@ -42,4 +42,5 @@
 #include <arch/pm.h>
 #include <arch/ddi/ddi.h>
+#include <arch/kseg_struct.h>
 
 /** Perform amd64 specific tasks needed before the new task is run.
@@ -55,16 +56,8 @@
 void before_thread_runs_arch(void)
 {
-	CPU->arch.tss->rsp0 =
-	    (uintptr_t) &THREAD->kstack[STACK_SIZE];
-	
-	/*
-	 * Syscall support.
-	 */
-	swapgs();
-	write_msr(AMD_MSR_GS, (uintptr_t) THREAD->arch.syscall_rsp);
-	swapgs();
-	
-	/* TLS support - set FS to thread local storage */
-	write_msr(AMD_MSR_FS, THREAD->arch.tls);
+	CPU->arch.tss->rsp0 = (uintptr_t) &THREAD->kstack[STACK_SIZE];
+
+	kseg_t *kseg = (kseg_t *) read_msr(AMD_MSR_GS_KERNEL);	
+	kseg->kstack_rsp = THREAD->arch.kstack_rsp;
 }
 
Index: kernel/arch/amd64/src/proc/thread.c
===================================================================
--- kernel/arch/amd64/src/proc/thread.c	(revision c5396c1804ab53d2d15266e72be0b0617bebb8b3)
+++ kernel/arch/amd64/src/proc/thread.c	(revision 9a08e6bddeb3cffb3e0438813da2a3084dcd33c5)
@@ -35,4 +35,5 @@
 #include <proc/thread.h>
 #include <arch/interrupt.h>
+#include <arch/kseg_struct.h>
 
 /** Perform amd64 specific thread initialization.
@@ -43,11 +44,8 @@
 void thread_create_arch(thread_t *thread)
 {
-	thread->arch.tls = 0;
-	thread->arch.syscall_rsp[SYSCALL_USTACK_RSP] = 0;
-	
 	/*
 	 * Kernel RSP can be precalculated at thread creation time.
 	 */
-	thread->arch.syscall_rsp[SYSCALL_KSTACK_RSP] =
+	thread->arch.kstack_rsp =
 	    (uintptr_t) &thread->kstack[PAGE_SIZE - sizeof(istate_t)];
 }
