Index: uspace/lib/libc/arch/ia32/include/setjmp.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/setjmp.h	(revision 923c39ef88449c3bf5f20c07c2f7976b7c01ec22)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * Copyright (c) 2008 Josef Cejka
- * 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.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_SETJMP_H_
-#define LIBC_ia32_SETJMP_H_
-
-#include <libarch/types.h>
-
-typedef struct {
-	uint32_t ebx;
-	uint32_t esi;
-	uint32_t edi;
-	uint32_t ebp;
-	uint32_t esp;
-	uint32_t pc;
-} jmp_buf;
-
-int setjmp(jmp_buf env);
-void longjmp(jmp_buf env,int val) __attribute__((__noreturn__));
-
-#endif
-
-/** @}
- */
-
Index: uspace/lib/libc/arch/ia32/src/setjmp.S
===================================================================
--- uspace/lib/libc/arch/ia32/src/setjmp.S	(revision 923c39ef88449c3bf5f20c07c2f7976b7c01ec22)
+++ uspace/lib/libc/arch/ia32/src/setjmp.S	(revision d2fa31f73ac58ff863812ce8f87f1fab50d27cf9)
@@ -27,4 +27,6 @@
 #
 
+#include <kernel/arch/context_offset.h>
+
 .text
 .global setjmp
@@ -33,16 +35,11 @@
 .type setjmp,@function
 setjmp:
-	movl	0(%esp), %ecx	# save current pc
-	leal	4(%esp), %edx	# save stack pointer
-	movl	(%edx), %eax	# get jmp_buf pointer
+	movl 0(%esp),%eax	# save pc value into eax	
+	movl 4(%esp),%edx	# address of the context variable to save context to 
 
-		# Save registers 
-	movl %ebx, 0(%eax)
-	movl %esi, 4(%eax)
-	movl %edi, 8(%eax)
-	movl %ebp, 12(%eax)
-	movl %edx, 16(%eax)
+		# save registers to given structure
+	CONTEXT_SAVE_ARCH_CORE %edx %eax
 
-	movl %ecx, 20(%eax) # save pc
+	xorl %eax,%eax		# set_jmp returns 0
 	ret
 
@@ -53,11 +50,8 @@
 	movl 8(%esp), %eax	# put return value into eax	
 
-		# restore all registers
-	movl 0(%ecx), %ebx
-	movl 4(%ecx), %esi
-	movl 8(%ecx), %edi
-	movl 12(%ecx), %ebp
-	movl 16(%ecx), %esp
-	
-	movl 20(%ecx), %edx # saved return address 
-	jmp *%edx
+		# restore registers from jmp_buf
+	CONTEXT_RESTORE_ARCH_CORE %ecx %edx
+
+	movl %edx,0(%esp)	# put saved pc on stack
+	ret
+
Index: uspace/lib/libc/include/setjmp.h
===================================================================
--- uspace/lib/libc/include/setjmp.h	(revision d2fa31f73ac58ff863812ce8f87f1fab50d27cf9)
+++ uspace/lib/libc/include/setjmp.h	(revision d2fa31f73ac58ff863812ce8f87f1fab50d27cf9)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2008 Josef Cejka
+ * 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.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_SETJMP_H_
+#define LIBC_SETJMP_H_
+
+#include <libarch/fibril.h>
+
+typedef context_t jmp_buf;
+
+extern int setjmp(jmp_buf env);
+extern void longjmp(jmp_buf env,int val) __attribute__((__noreturn__));
+
+#endif
+
+/** @}
+ */
+
Index: uspace/lib/libc/include/unistd.h
===================================================================
--- uspace/lib/libc/include/unistd.h	(revision 923c39ef88449c3bf5f20c07c2f7976b7c01ec22)
+++ uspace/lib/libc/include/unistd.h	(revision d2fa31f73ac58ff863812ce8f87f1fab50d27cf9)
@@ -39,5 +39,8 @@
 #include <libarch/config.h>
 
+#ifndef NULL
 #define NULL 0
+#endif
+
 #define getpagesize()     (PAGE_SIZE)
 
