Index: kernel/arch/amd64/src/boot/boot.S
===================================================================
--- kernel/arch/amd64/src/boot/boot.S	(revision bf25efb0b361ed9f7b43f5db17457fa376e1bd25)
+++ kernel/arch/amd64/src/boot/boot.S	(revision 0f94c3d5de72d78a731147c9a1063270222411f2)
@@ -224,5 +224,5 @@
 			
 			addl $16, %esi
-			addq $16, %rdi
+			addq $48, %rdi
 			
 			loop mods_loop
Index: kernel/arch/ia32/src/boot/cboot.c
===================================================================
--- kernel/arch/ia32/src/boot/cboot.c	(revision bf25efb0b361ed9f7b43f5db17457fa376e1bd25)
+++ kernel/arch/ia32/src/boot/cboot.c	(revision 0f94c3d5de72d78a731147c9a1063270222411f2)
@@ -39,4 +39,5 @@
 #include <config.h>
 #include <memstr.h>
+#include <func.h>
 
 /* This is a symbol so the type is only dummy. Obtain the value using &. */
@@ -69,4 +70,14 @@
 			init.tasks[i].addr = mods[i].start + 0x80000000;
 			init.tasks[i].size = mods[i].end - mods[i].start;
+
+			/* Copy command line, if available. */
+			if (mods[i].string) {
+				strncpy(init.tasks[i].name, mods[i].string,
+				    CONFIG_TASK_NAME_BUFLEN - 1);
+				init.tasks[i].name[CONFIG_TASK_NAME_BUFLEN - 1]
+				    = '\0';
+			} else {
+				init.tasks[i].name[0] = '\0';
+			}
 		}
 	} else {
Index: kernel/generic/include/config.h
===================================================================
--- kernel/generic/include/config.h	(revision bf25efb0b361ed9f7b43f5db17457fa376e1bd25)
+++ kernel/generic/include/config.h	(revision 0f94c3d5de72d78a731147c9a1063270222411f2)
@@ -41,9 +41,12 @@
 #define STACK_SIZE  PAGE_SIZE
 
-#define CONFIG_INIT_TASKS  32
+#define CONFIG_INIT_TASKS 	32
+
+#define CONFIG_TASK_NAME_BUFLEN 32
 
 typedef struct {
 	uintptr_t addr;
 	size_t size;
+	char name[CONFIG_TASK_NAME_BUFLEN];
 } init_task_t;
 
Index: kernel/generic/src/main/kinit.c
===================================================================
--- kernel/generic/src/main/kinit.c	(revision bf25efb0b361ed9f7b43f5db17457fa376e1bd25)
+++ kernel/generic/src/main/kinit.c	(revision 0f94c3d5de72d78a731147c9a1063270222411f2)
@@ -175,7 +175,10 @@
 			continue;
 		}
+
+		char *name = init.tasks[i].name;
+		if (name[0] == '\0') name = "init-bin";
 		
 		int rc = program_create_from_image((void *) init.tasks[i].addr,
-		    "init-bin", &programs[i]);
+		    name, &programs[i]);
 		
 		if ((rc == 0) && (programs[i].task != NULL)) {
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision bf25efb0b361ed9f7b43f5db17457fa376e1bd25)
+++ kernel/generic/src/proc/task.c	(revision 0f94c3d5de72d78a731147c9a1063270222411f2)
@@ -397,5 +397,5 @@
 
 #ifdef __32_BITS__	
-	printf("%-6" PRIu64 " %-10s %-3" PRIu32 " %10p %10p %9" PRIu64
+	printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %10p %10p %9" PRIu64
 	    "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles,
 	    suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls));
@@ -403,5 +403,5 @@
 
 #ifdef __64_BITS__
-	printf("%-6" PRIu64 " %-10s %-3" PRIu32 " %18p %18p %9" PRIu64
+	printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %18p %18p %9" PRIu64
 	    "%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles,
 	    suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls));
@@ -430,5 +430,5 @@
 	printf("taskid name       ctx address    as         "
 	    "cycles     threads calls  callee\n");
-	printf("------ ---------- --- ---------- ---------- "
+	printf("------ ------------ --- ---------- ---------- "
 	    "---------- ------- ------ ------>\n");
 #endif
@@ -437,5 +437,5 @@
 	printf("taskid name       ctx address            as                 "
 	    "cycles     threads calls  callee\n");
-	printf("------ ---------- --- ------------------ ------------------ "
+	printf("------ ------------ --- ------------------ ------------------ "
 	    "---------- ------- ------ ------>\n");
 #endif
