Index: kernel/generic/src/main/kinit.c
===================================================================
--- kernel/generic/src/main/kinit.c	(revision 5d67baaf93a59a7584952e5f044264cc6662ca3b)
+++ kernel/generic/src/main/kinit.c	(revision 0d387d2adba60bc09a047a4aeb5fe9c90f7ad2cc)
@@ -48,4 +48,5 @@
 #include <proc/task.h>
 #include <proc/thread.h>
+#include <proc/program.h>
 #include <panic.h>
 #include <func.h>
@@ -160,5 +161,5 @@
 	 */
 	count_t i;
-	thread_t *threads[CONFIG_INIT_TASKS];
+	program_t programs[CONFIG_INIT_TASKS];
 	
 	for (i = 0; i < init.cnt; i++) {
@@ -168,17 +169,21 @@
 		}
 
-		threads[i] = thread_create_program((void *) init.tasks[i].addr,
-		    "uspace");
-		
-		if (threads[i] != NULL) {
+		int rc = program_create_from_image((void *) init.tasks[i].addr,
+		    &programs[i]);
+
+		if (rc == 0 && programs[i].task != NULL) {
 			/*
 			 * Set capabilities to init userspace tasks.
 			 */
-			cap_set(threads[i]->task, CAP_CAP | CAP_MEM_MANAGER |
+			cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER |
 			    CAP_IO_MANAGER | CAP_PREEMPT_CONTROL | CAP_IRQ_REG);
+
 			
 			if (!ipc_phone_0)
-				ipc_phone_0 = &threads[i]->task->answerbox;
+				ipc_phone_0 = &programs[i].task->answerbox;
+		} else if (rc == 0) {
+			/* It was the program loader and was registered */
 		} else {
+			/* RAM disk image */
 			int rd = init_rd((rd_header_t *) init.tasks[i].addr,
 			    init.tasks[i].size);
@@ -194,7 +199,7 @@
 	 */
 	for (i = 0; i < init.cnt; i++) {
-		if (threads[i] != NULL) {
+		if (programs[i].task != NULL) {
 			thread_usleep(50000);
-			thread_ready(threads[i]);
+			program_ready(&programs[i]);
 		}
 	}
