Index: generic/src/main/kinit.c
===================================================================
--- generic/src/main/kinit.c	(revision e74cb73cbab961321532b012b1090380dd325f74)
+++ generic/src/main/kinit.c	(revision e4ddfa83a2097ca2ae503744193865ee77f1ca47)
@@ -28,5 +28,4 @@
 
 #include <main/kinit.h>
-#include <main/uinit.h>
 #include <config.h>
 #include <arch.h>
@@ -47,5 +46,4 @@
 #include <interrupt.h>
 #include <console/kconsole.h>
-#include <elf.h>
 #include <ipc/ns.h>
 
@@ -72,8 +70,4 @@
 {
 	thread_t *t;
-	as_t *as;
-	as_area_t *a;
-	int rc;
-	task_t *u;
 
 	interrupts_disable();
@@ -150,28 +144,7 @@
 		if (config.init_addr % FRAME_SIZE)
 			panic("config.init_addr is not frame aligned");
-		
-		as = as_create(0);
-		if (!as)
-			panic("as_create\n");
 
-		rc = elf_load((elf_header_t *) config.init_addr, as);
-		if (rc != EE_OK) {
-			printf("elf_load failed: %s\n", elf_error(rc));
-		} else {
-			u = task_create(as);
-			if (!u)
-				panic("task_create\n");
-			t = thread_create(uinit, (void *)((elf_header_t *) config.init_addr)->e_entry, u, THREAD_USER_STACK);
-			if (!t)
-				panic("thread_create\n");
-		
-			/*
-			 * Create the data as_area.
-			 */
-			a = as_area_create(as, AS_AREA_STACK, 1, USTACK_ADDRESS);
-			if (!a)
-				panic("as_area_create: stack\n");
-
-			thread_ready(t);
+		if (!task_run_program((void *)config.init_addr)) {
+			printf("Userspace not started.\n");
 		}
 	}
