Index: init/init.c
===================================================================
--- init/init.c	(revision 11eae826e911679fe2a849d47b8dd6c8bfb783f8)
+++ init/init.c	(revision c05290e81f6086d8e04804e4279b9b263b794033)
@@ -33,5 +33,13 @@
 #include <stdlib.h>
 #include <ns.h>
-
+#include <thread.h>
+
+extern void utest(void *arg);
+void utest(void *arg)
+{
+//	printf("Uspace thread created.\n");
+	for (;;)
+		;
+}
 
 static void test_printf(void)
@@ -177,4 +185,6 @@
 int main(int argc, char *argv[])
 {
+	int tid;
+	char *stack;
 	version_print();
 
@@ -184,4 +194,14 @@
 //	test_advanced_ipc();
 	test_connection_ipc();
+	
+	stack = (char *) malloc(getpagesize());
+	if (!stack) {
+		printf("Malloc failed.\n");
+	} else {
+		if ((tid = thread_create(utest, NULL, stack, "utest") != -1)) {
+			printf("Created thread tid=%d\n", tid);
+		}
+	}
+	
 	return 0;
 }
Index: libc/Makefile
===================================================================
--- libc/Makefile	(revision 11eae826e911679fe2a849d47b8dd6c8bfb783f8)
+++ libc/Makefile	(revision c05290e81f6086d8e04804e4279b9b263b794033)
@@ -44,4 +44,5 @@
 	generic/mmap.c \
 	generic/string.c \
+	generic/thread.c \
 	generic/io/io.c \
 	generic/io/print.c \
Index: libc/generic/libc.c
===================================================================
--- libc/generic/libc.c	(revision 11eae826e911679fe2a849d47b8dd6c8bfb783f8)
+++ libc/generic/libc.c	(revision c05290e81f6086d8e04804e4279b9b263b794033)
@@ -29,7 +29,8 @@
 #include <libc.h>
 #include <unistd.h>
+#include <thread.h>
 
 void _exit(int status) {
-	__SYSCALL0(SYS_CTL);
+	thread_exit(status);
 }
 
Index: libc/generic/thread.c
===================================================================
--- libc/generic/thread.c	(revision c05290e81f6086d8e04804e4279b9b263b794033)
+++ libc/generic/thread.c	(revision c05290e81f6086d8e04804e4279b9b263b794033)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 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.
+ */ 
+
+#include <thread.h>
+#include <libc.h>
+#include <arch/faddr.h>
+
+typedef void (* voidfunc_t)(void);
+
+int thread_create(void (* function)(void *), void *arg, void *stack, char *name)
+{
+	return __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) FADDR((voidfunc_t) function), (sysarg_t) arg, (sysarg_t) stack, (sysarg_t) name);
+}
+
+void thread_exit(int status)
+{
+	__SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status);
+}
+
Index: libc/include/thread.h
===================================================================
--- libc/include/thread.h	(revision c05290e81f6086d8e04804e4279b9b263b794033)
+++ libc/include/thread.h	(revision c05290e81f6086d8e04804e4279b9b263b794033)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2006 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.
+ */
+
+#ifndef __LIBC__THREAD_H__
+#define __LIBC__THREAD_H__
+
+int thread_create(void (* function)(void *arg), void *arg, void *stack, char *name);
+void thread_exit(int status);
+
+#endif
