Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision c0f13d2675d8c8db426acccaba56a4377f515dc3)
+++ kernel/generic/include/proc/thread.h	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -240,5 +240,5 @@
 
 extern void thread_register_call_me(void (*)(void *), void *);
-extern void thread_print_list(void);
+extern void thread_print_list(bool);
 extern void thread_destroy(thread_t *, bool);
 extern thread_t *thread_find_by_id(thread_id_t);
Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision c0f13d2675d8c8db426acccaba56a4377f515dc3)
+++ kernel/generic/src/console/cmd.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -355,20 +355,25 @@
 };
 
+static char flag_buf[MAX_CMDLINE + 1];
+
 static int cmd_threads(cmd_arg_t *argv);
+static cmd_arg_t threads_argv = {
+	.type = ARG_TYPE_STRING_OPTIONAL,
+	.buffer = flag_buf,
+	.len = sizeof(flag_buf)
+};
 static cmd_info_t threads_info = {
 	.name = "threads",
-	.description = "List all threads.",
+	.description = "List all threads (use -a for additional information).",
 	.func = cmd_threads,
-	.argc = 0
-};
-
+	.argc = 1,
+	.argv = &threads_argv
+};
 
 static int cmd_tasks(cmd_arg_t *argv);
-static char tasks_buf[MAX_CMDLINE + 1];
-
 static cmd_arg_t tasks_argv = {
 	.type = ARG_TYPE_STRING_OPTIONAL,
-	.buffer = tasks_buf,
-	.len = sizeof(tasks_buf)
+	.buffer = flag_buf,
+	.len = sizeof(flag_buf)
 };
 static cmd_info_t tasks_info = {
@@ -923,11 +928,17 @@
 /** Command for listings Thread information
  *
- * @param argv Ignores
+ * @param argv Ignored
  *
  * @return Always 1
  */
-int cmd_threads(cmd_arg_t * argv)
-{
-	thread_print_list();
+int cmd_threads(cmd_arg_t *argv)
+{
+	if (str_cmp(flag_buf, "-a") == 0)
+		thread_print_list(true);
+	else if (str_cmp(flag_buf, "") == 0)
+		thread_print_list(false);
+	else
+		printf("Unknown argument \"%s\".\n", flag_buf);
+	
 	return 1;
 }
@@ -935,5 +946,5 @@
 /** Command for listings Task information
  *
- * @param argv Ignores
+ * @param argv Ignored
  *
  * @return Always 1
@@ -941,10 +952,10 @@
 int cmd_tasks(cmd_arg_t *argv)
 {
-	if (str_cmp(tasks_buf, "-a") == 0)
+	if (str_cmp(flag_buf, "-a") == 0)
 		task_print_list(true);
-	else if (str_cmp(tasks_buf, "") == 0)
+	else if (str_cmp(flag_buf, "") == 0)
 		task_print_list(false);
 	else
-		printf("Unknown argument \"%s\".\n", tasks_buf);
+		printf("Unknown argument \"%s\".\n", flag_buf);
 	
 	return 1;
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision c0f13d2675d8c8db426acccaba56a4377f515dc3)
+++ kernel/generic/src/proc/task.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -522,7 +522,7 @@
 #ifdef __32_BITS__
 	if (additional)
-		printf("[taskid] [threads] [calls] [callee\n");
+		printf("[id    ] [threads] [calls] [callee\n");
 	else
-		printf("[taskid] [name        ] [ctx] [address ] [as      ]"
+		printf("[id    ] [name        ] [ctx] [address ] [as      ]"
 		    " [ucycles ] [kcycles ]\n");
 #endif
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision c0f13d2675d8c8db426acccaba56a4377f515dc3)
+++ kernel/generic/src/proc/thread.c	(revision 48dcc699ceb1979a093dbc5c8b698fe7f16536ed)
@@ -605,4 +605,5 @@
 static bool thread_walker(avltree_node_t *node, void *arg)
 {
+	bool *additional = (bool *) arg;
 	thread_t *thread = avltree_get_instance(node, thread_t, threads_tree_node);
 	
@@ -613,34 +614,45 @@
 	
 #ifdef __32_BITS__
-	printf("%-6" PRIu64" %-10s %10p %-8s %10p %-3" PRIu32 " %10p %10p %9"
-		PRIu64 "%c %9" PRIu64 "%c ", thread->tid, thread->name, thread,
-		thread_states[thread->state], thread->task, thread->task->context,
-		thread->thread_code, thread->kstack, ucycles, usuffix, kcycles, ksuffix);
+	if (*additional)
+		printf("%-8" PRIu64" %10p %9" PRIu64 "%c %9" PRIu64 "%c ",
+		    thread->tid, thread->kstack, ucycles, usuffix,
+		    kcycles, ksuffix);
+	else
+		printf("%-8" PRIu64" %-14s %10p %-8s %10p %-5" PRIu32 " %10p\n",
+		    thread->tid, thread->name, thread, thread_states[thread->state],
+		    thread->task, thread->task->context, thread->thread_code);
 #endif
 	
 #ifdef __64_BITS__
-	printf("%-6" PRIu64" %-10s %18p %-8s %18p %-3" PRIu32 " %18p %18p %9"
-		PRIu64 "%c %9" PRIu64 "%c ", thread->tid, thread->name, thread,
-		thread_states[thread->state], thread->task, thread->task->context,
-		thread->thread_code, thread->kstack, ucycles, usuffix, kcycles, ksuffix);
-#endif
-	
-	if (thread->cpu)
-		printf("%-4u", thread->cpu->id);
+	if (*additional)
+		printf("%-8" PRIu64" %18p %18p\n"
+		    "         %9" PRIu64 "%c %9" PRIu64 "%c ",
+		    thread->tid, thread->thread_code, thread->kstack,
+		    ucycles, usuffix, kcycles, ksuffix);
 	else
-		printf("none");
-	
-	if (thread->state == Sleeping) {
+		printf("%-8" PRIu64" %-14s %18p %-8s %18p %-5" PRIu32 "\n",
+		    thread->tid, thread->name, thread, thread_states[thread->state],
+		    thread->task, thread->task->context);
+#endif
+	
+	if (*additional) {
+		if (thread->cpu)
+			printf("%-5u", thread->cpu->id);
+		else
+			printf("none ");
+		
+		if (thread->state == Sleeping) {
 #ifdef __32_BITS__
-		printf(" %10p", thread->sleep_queue);
-#endif
+			printf(" %10p", thread->sleep_queue);
+#endif
+			
+#ifdef __64_BITS__
+			printf(" %18p", thread->sleep_queue);
+#endif
+		}
 		
-#ifdef __64_BITS__
-		printf(" %18p", thread->sleep_queue);
-#endif
+		printf("\n");
 	}
 	
-	printf("\n");
-	
 	return true;
 }
@@ -648,6 +660,8 @@
 /** Print list of threads debug info
  *
- */
-void thread_print_list(void)
+ * @param additional Print additional information.
+ *
+ */
+void thread_print_list(bool additional)
 {
 	/* Messing with thread structures, avoid deadlock */
@@ -655,22 +669,22 @@
 	
 #ifdef __32_BITS__
-	printf("tid    name       address    state    task       "
-		"ctx code       stack      ucycles    kcycles    cpu  "
-		"waitqueue\n");
-	printf("------ ---------- ---------- -------- ---------- "
-		"--- ---------- ---------- ---------- ---------- ---- "
-		"----------\n");
+	if (additional)
+		printf("[id    ] [stack   ] [ucycles ] [kcycles ] [cpu]"
+		    " [waitqueue]\n");
+	else
+		printf("[id    ] [name        ] [address ] [state ] [task    ]"
+		    " [ctx] [code    ]\n");
 #endif
 	
 #ifdef __64_BITS__
-	printf("tid    name       address            state    task               "
-		"ctx code               stack              ucycles    kcycles    cpu  "
-		"waitqueue\n");
-	printf("------ ---------- ------------------ -------- ------------------ "
-		"--- ------------------ ------------------ ---------- ---------- ---- "
-		"------------------\n");
-#endif
-	
-	avltree_walk(&threads_tree, thread_walker, NULL);
+	if (additional) {
+		printf("[id    ] [code            ] [stack           ]\n"
+		    "         [ucycles ] [kcycles ] [cpu] [waitqueue       ]\n");
+	} else
+		printf("[id    ] [name        ] [address         ] [state ]"
+		    " [task            ] [ctx]\n");
+#endif
+	
+	avltree_walk(&threads_tree, thread_walker, &additional);
 	
 	irq_spinlock_unlock(&threads_lock, true);
