Index: arch/amd64/src/cpu/cpu.c
===================================================================
--- arch/amd64/src/cpu/cpu.c	(revision 2c55af3e87d0bd5ed778b449569af6526d9e841c)
+++ arch/amd64/src/cpu/cpu.c	(revision b49f4ae38f84dc067e59e7ac1aaff428876a1c60)
@@ -91,5 +91,5 @@
  *
  */
-void set_TS_flag(void)
+void fpu_disable(void)
 {
 	__asm__	volatile (
@@ -103,5 +103,5 @@
 }
 
-void reset_TS_flag(void)
+void fpu_enable(void)
 {
 	__asm__	volatile (
Index: arch/amd64/src/fpu_context.c
===================================================================
--- arch/amd64/src/fpu_context.c	(revision 2c55af3e87d0bd5ed778b449569af6526d9e841c)
+++ arch/amd64/src/fpu_context.c	(revision b49f4ae38f84dc067e59e7ac1aaff428876a1c60)
@@ -34,18 +34,5 @@
 void fpu_context_save(fpu_context_t *fctx)
 {
-}
-
-void fpu_context_restore(fpu_context_t *fctx)
-{
-	if(THREAD==CPU->fpu_owner) 
-		reset_TS_flag();
-	else
-		set_TS_flag(); 
-}
-
-
-void fpu_lazy_context_save(fpu_context_t *fctx)
-{
-	/* TODO: We need malloc that allocates on 16-byte boundary !! */
+	/* Align on 16-byte boundary */
 	if (((__u64)fctx) & 0xf)
 		fctx = (fpu_context_t *)((((__u64)fctx) | 0xf) + 1);
@@ -57,5 +44,5 @@
 }
 
-void fpu_lazy_context_restore(fpu_context_t *fctx)
+void fpu_context_restore(fpu_context_t *fctx)
 {
 	/* TODO: We need malloc that allocates on 16-byte boundary !! */
Index: arch/amd64/src/interrupt.c
===================================================================
--- arch/amd64/src/interrupt.c	(revision 2c55af3e87d0bd5ed778b449569af6526d9e841c)
+++ arch/amd64/src/interrupt.c	(revision b49f4ae38f84dc067e59e7ac1aaff428876a1c60)
@@ -39,5 +39,5 @@
 #include <symtab.h>
 #include <arch/asm.h>
-
+#include <proc/scheduler.h>
 
 
@@ -139,18 +139,9 @@
 void nm_fault(__u8 n, __native stack[])
 {
-	reset_TS_flag();
-	if (CPU->fpu_owner != NULL) {  
-		fpu_lazy_context_save(&CPU->fpu_owner->saved_fpu_context);
-		/* don't prevent migration */
-		CPU->fpu_owner->fpu_context_engaged=0; 
-	}
-	if (THREAD->fpu_context_exists)
-		fpu_lazy_context_restore(&THREAD->saved_fpu_context);
-	else {
-		fpu_init();
-		THREAD->fpu_context_exists=1;
-	}
-	CPU->fpu_owner=THREAD;
-	THREAD->fpu_context_engaged = 1;
+#ifdef FPU_LAZY     
+	scheduler_fpu_lazy_request();
+#else
+	panic("fpu fault");
+#endif
 }
 
