Index: uspace/lib/c/arch/ia32/Makefile.inc
===================================================================
--- uspace/lib/c/arch/ia32/Makefile.inc	(revision 41f9802b0d9146befaeb7e99b35e4421d47b4766)
+++ uspace/lib/c/arch/ia32/Makefile.inc	(revision e74b24f3342648875f8cb8c32a63b5062cb9a903)
@@ -39,3 +39,6 @@
 	arch/$(UARCH)/src/rtld/reloc.c
 
+ARCH_AUTOGENS_AG = \
+	arch/$(UARCH)/include/libarch/fibril_context.ag
+
 .PRECIOUS: arch/$(UARCH)/src/entry.o
Index: uspace/lib/c/arch/ia32/include/libarch/context_offset.h
===================================================================
--- uspace/lib/c/arch/ia32/include/libarch/context_offset.h	(revision 41f9802b0d9146befaeb7e99b35e4421d47b4766)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../../../../../../kernel/arch/ia32/include/arch/context_offset.h
Index: uspace/lib/c/arch/ia32/include/libarch/fibril.h
===================================================================
--- uspace/lib/c/arch/ia32/include/libarch/fibril.h	(revision 41f9802b0d9146befaeb7e99b35e4421d47b4766)
+++ uspace/lib/c/arch/ia32/include/libarch/fibril.h	(revision e74b24f3342648875f8cb8c32a63b5062cb9a903)
@@ -37,4 +37,5 @@
 
 #include <sys/types.h>
+#include <libarch/fibril_context.h>
 
 /*
@@ -53,20 +54,4 @@
 	} while (0)
 
-/*
- * We include only registers that must be preserved
- * during function call
- */
-typedef struct {
-	uint32_t sp;
-	uint32_t pc;
-	
-	uint32_t ebx;
-	uint32_t esi;
-	uint32_t edi;
-	uint32_t ebp;
-	
-	uint32_t tls;
-} context_t;
-
 static inline uintptr_t context_get_fp(context_t *ctx)
 {
Index: uspace/lib/c/arch/ia32/include/libarch/fibril_context.ag
===================================================================
--- uspace/lib/c/arch/ia32/include/libarch/fibril_context.ag	(revision e74b24f3342648875f8cb8c32a63b5062cb9a903)
+++ uspace/lib/c/arch/ia32/include/libarch/fibril_context.ag	(revision e74b24f3342648875f8cb8c32a63b5062cb9a903)
@@ -0,0 +1,74 @@
+# 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 : uint32_t
+                },
+                {
+                        name : pc,
+                        type : uint32_t
+                },
+
+                {
+                        name : ebx,
+                        type : uint32_t
+                },
+                {
+                        name : esi,
+                        type : uint32_t
+                },
+                {
+                        name : edi,
+                        type : uint32_t
+                },
+                {
+                        name : ebp,
+                        type : uint32_t
+                },
+
+                {
+                        name : tls,
+                        type : uint32_t
+                }
+        ]
+}
Index: uspace/lib/c/arch/ia32/src/fibril.S
===================================================================
--- uspace/lib/c/arch/ia32/src/fibril.S	(revision 41f9802b0d9146befaeb7e99b35e4421d47b4766)
+++ uspace/lib/c/arch/ia32/src/fibril.S	(revision e74b24f3342648875f8cb8c32a63b5062cb9a903)
@@ -27,5 +27,5 @@
 #
 
-#include <libarch/context_offset.h>
+#include <libarch/fibril_context.h>
 
 .text
@@ -44,11 +44,16 @@
 	
 	# save registers to the context structure
-	CONTEXT_SAVE_ARCH_CORE %edx %eax
+	movl %esp, CONTEXT_OFFSET_SP(%edx)	# %esp -> ctx->sp
+	movl %eax, CONTEXT_OFFSET_PC(%edx)	# %eip -> ctx->pc
+	movl %ebx, CONTEXT_OFFSET_EBX(%edx)	# %ebx -> ctx->ebx
+	movl %esi, CONTEXT_OFFSET_ESI(%edx)	# %esi -> ctx->esi
+	movl %edi, CONTEXT_OFFSET_EDI(%edx)	# %edi -> ctx->edi
+	movl %ebp, CONTEXT_OFFSET_EBP(%edx)	# %ebp -> ctx->ebp
 	
 	# save TLS
 	movl %gs:0, %eax
-	movl %eax, OFFSET_TLS(%edx)     # tls -> ctx->tls
+	movl %eax, CONTEXT_OFFSET_TLS(%edx)	# tls -> ctx->tls
 	
-	xorl %eax, %eax     # context_save returns 1
+	xorl %eax, %eax		# context_save returns 1
 	incl %eax
 	ret
@@ -63,5 +68,10 @@
 	
 	# restore registers from the context structure
-	CONTEXT_RESTORE_ARCH_CORE %eax %edx
+	movl CONTEXT_OFFSET_SP(%eax),%esp	# ctx->sp -> %esp
+	movl CONTEXT_OFFSET_PC(%eax),%edx	# ctx->pc -> \pc
+	movl CONTEXT_OFFSET_EBX(%eax),%ebx	# ctx->ebx -> %ebx
+	movl CONTEXT_OFFSET_ESI(%eax),%esi	# ctx->esi -> %esi
+	movl CONTEXT_OFFSET_EDI(%eax),%edi	# ctx->edi -> %edi
+	movl CONTEXT_OFFSET_EBP(%eax),%ebp	# ctx->ebp -> %ebp
 	
 	movl %edx, 0(%esp)  # ctx->pc -> saver's return %eip
@@ -69,9 +79,10 @@
 	# set thread local storage
 	pushl %edx
-	movl OFFSET_TLS(%eax), %edx  # Set arg1 to TLS addr
-	movl $1, %eax                # Syscall SYS_TLS_SET
+	movl CONTEXT_OFFSET_TLS(%eax), %edx	# Set arg1 to TLS addr
+	movl $1, %eax				# Syscall SYS_TLS_SET
 	int $0x30
 	popl %edx
 	
-	xorl %eax, %eax     # context_restore returns 0
+	xorl %eax, %eax		# context_restore returns 0
 	ret
+
