Index: uspace/lib/c/arch/amd64/Makefile.inc
===================================================================
--- uspace/lib/c/arch/amd64/Makefile.inc	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ uspace/lib/c/arch/amd64/Makefile.inc	(revision 0aee9b4c5afa08b0cd8ed8c15949d5a7208167d5)
@@ -38,2 +38,6 @@
 
 .PRECIOUS: arch/$(UARCH)/src/entry.o
+
+ARCH_AUTOGENS_AG = \
+	arch/$(UARCH)/include/libarch/fibril_context.ag
+
Index: uspace/lib/c/arch/amd64/include/libarch/context_offset.h
===================================================================
--- uspace/lib/c/arch/amd64/include/libarch/context_offset.h	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../../../../../../kernel/arch/amd64/include/arch/context_offset.h
Index: uspace/lib/c/arch/amd64/include/libarch/fibril.h
===================================================================
--- uspace/lib/c/arch/amd64/include/libarch/fibril.h	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ uspace/lib/c/arch/amd64/include/libarch/fibril.h	(revision 0aee9b4c5afa08b0cd8ed8c15949d5a7208167d5)
@@ -36,5 +36,5 @@
 #define LIBC_amd64_FIBRIL_H_
 
-#include <sys/types.h>
+#include <libarch/fibril_context.h>
 
 /*
@@ -53,22 +53,4 @@
 	} while (0)
 
-/* We include only registers that must be preserved
- * during function call
- */
-typedef struct {
-	uint64_t sp;
-	uint64_t pc;
-
-	uint64_t rbx;
-	uint64_t rbp;
-
-	uint64_t r12;
-	uint64_t r13;
-	uint64_t r14;
-	uint64_t r15;
-
-	uint64_t tls;
-} context_t;
-
 static inline uintptr_t context_get_fp(context_t *ctx)
 {
Index: uspace/lib/c/arch/amd64/include/libarch/fibril_context.ag
===================================================================
--- uspace/lib/c/arch/amd64/include/libarch/fibril_context.ag	(revision 0aee9b4c5afa08b0cd8ed8c15949d5a7208167d5)
+++ uspace/lib/c/arch/amd64/include/libarch/fibril_context.ag	(revision 0aee9b4c5afa08b0cd8ed8c15949d5a7208167d5)
@@ -0,0 +1,83 @@
+# Copyright (c) 2014 Jakub Jermar 
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+{
+        name : context,
+
+        includes : [
+                {
+                        include : <sys/types.h>
+                }
+        ],
+
+        members : [
+                #
+                # We include only registers that must be preserved
+                # during function call.
+                #
+
+                {
+                        name : sp,
+                        type : uint64_t
+                },
+                {
+                        name : pc,
+                        type : uint64_t
+                },
+
+                {
+                        name : rbx,
+                        type : uint64_t
+                },
+                {
+                        name : rbp,
+                        type : uint64_t
+                },
+
+                {
+                        name : r12,
+                        type : uint64_t
+                },
+                {
+                        name : r13,
+                        type : uint64_t
+                },
+                {
+                        name : r14,
+                        type : uint64_t
+                },
+                {
+                        name : r15,
+                        type : uint64_t
+                },
+
+                {
+                        name : tls,
+                        type : uint64_t
+                }
+        ]
+}
Index: uspace/lib/c/arch/amd64/src/fibril.S
===================================================================
--- uspace/lib/c/arch/amd64/src/fibril.S	(revision 4236b18ef8b01c2658d23f54ca802874c8232232)
+++ uspace/lib/c/arch/amd64/src/fibril.S	(revision 0aee9b4c5afa08b0cd8ed8c15949d5a7208167d5)
@@ -32,5 +32,5 @@
 .global context_restore
 
-#include <libarch/context_offset.h>
+#include <libarch/fibril_context.h>
 
 ## Save current CPU context
@@ -42,12 +42,20 @@
 	movq (%rsp), %rdx     # the caller's return %eip
 	
-	# in %edi is passed 1st argument
-	CONTEXT_SAVE_ARCH_CORE %rdi %rdx 
+	# in %rdi is passed 1st argument
+	movq %rdx, CONTEXT_OFFSET_PC(%rdi)
+	movq %rsp, CONTEXT_OFFSET_SP(%rdi)
+	
+	movq %rbx, CONTEXT_OFFSET_RBX(%rdi)
+	movq %rbp, CONTEXT_OFFSET_RBP(%rdi)
+	movq %r12, CONTEXT_OFFSET_R12(%rdi)
+	movq %r13, CONTEXT_OFFSET_R13(%rdi)
+	movq %r14, CONTEXT_OFFSET_R14(%rdi)
+	movq %r15, CONTEXT_OFFSET_R15(%rdi)
 	
 	# save TLS
 	movq %fs:0, %rax
-	movq %rax, OFFSET_TLS(%rdi)
+	movq %rax, CONTEXT_OFFSET_TLS(%rdi)
 	
-	xorl %eax, %eax       # context_save returns 1
+	xorl %eax, %eax                      # context_save returns 1
 	incl %eax
 	ret
@@ -60,13 +68,23 @@
 context_restore:
 	
-	CONTEXT_RESTORE_ARCH_CORE %rdi %rdx
+	movq CONTEXT_OFFSET_R15(%rdi), %r15
+	movq CONTEXT_OFFSET_R14(%rdi), %r14
+	movq CONTEXT_OFFSET_R13(%rdi), %r13
+	movq CONTEXT_OFFSET_R12(%rdi), %r12
+	movq CONTEXT_OFFSET_RBP(%rdi), %rbp
+	movq CONTEXT_OFFSET_RBX(%rdi), %rbx
+	
+	movq CONTEXT_OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
+	
+	movq CONTEXT_OFFSET_PC(%rdi), %rdx
 	
 	movq %rdx,(%rsp)
 	
 	# Set thread local storage
-	movq OFFSET_TLS(%rdi), %rdi  # Set arg1 to TLS addr
-	movl $1, %eax                # SYS_TLS_SET
+	movq CONTEXT_OFFSET_TLS(%rdi), %rdi  # Set arg1 to TLS addr
+	movl $1, %eax                        # SYS_TLS_SET
 	syscall
 	
-	xorl %eax, %eax              # context_restore returns 0
+	xorl %eax, %eax                      # context_restore returns 0
 	ret
+
