Index: kernel/generic/include/ps/taskinfo.h
===================================================================
--- kernel/generic/include/ps/taskinfo.h	(revision 175ad5c6af5ff4b660dca8a7e9ff81110a8f8e0f)
+++ kernel/generic/include/ps/taskinfo.h	(revision 8f56d9346cfed5541fc088d1e02ccfb2c9f15ddf)
@@ -46,4 +46,5 @@
 
 typedef struct {
+	task_id_t taskid;
 	char name[TASK_NAME_BUFLEN];
 	size_t pages;
Index: kernel/generic/src/ps/ps.c
===================================================================
--- kernel/generic/src/ps/ps.c	(revision 175ad5c6af5ff4b660dca8a7e9ff81110a8f8e0f)
+++ kernel/generic/src/ps/ps.c	(revision 8f56d9346cfed5541fc088d1e02ccfb2c9f15ddf)
@@ -130,4 +130,5 @@
 	spinlock_unlock(&tasks_lock);
 
+	copy_to_uspace(&uspace_info->taskid, &t->taskid, sizeof(task_id_t));
 	copy_to_uspace(uspace_info->name, t->name, sizeof(t->name));
 
Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision 175ad5c6af5ff4b660dca8a7e9ff81110a8f8e0f)
+++ uspace/app/top/screen.c	(revision 8f56d9346cfed5541fc088d1e02ccfb2c9f15ddf)
@@ -39,15 +39,24 @@
 #include <vfs/vfs.h>
 #include <load.h>
+#include <kernel/ps/taskinfo.h>
+#include <ps.h>
 #include "screen.h"
 #include "top.h"
+
+int rows;
+int colls;
+
+#define WHITE 0xf0f0f0
+#define BLACK 0x000000
 
 static void resume_normal(void)
 {
 	fflush(stdout);
-	console_set_rgb_color(fphone(stdout), 0, 0xf0f0f0);
+	console_set_rgb_color(fphone(stdout), 0, WHITE);
 }
 
 void screen_init(void)
 {
+	console_get_size(fphone(stdout), &colls, &rows);
 	console_cursor_visibility(fphone(stdout), 0);
 	resume_normal();
@@ -94,4 +103,31 @@
 }
 
+static inline void print_tasks(data_t *data, int row)
+{
+	int i;
+	for (i = 0; i < (int)data->task_count; ++i) {
+		if (row + i > rows)
+			return;
+		task_info_t taskinfo;
+		get_task_info(data->tasks[i], &taskinfo);
+		printf("%8llu %8u %8u %12llu %12llu %s\n", taskinfo.taskid,
+			taskinfo.thread_count, taskinfo.pages, taskinfo.ucycles / 1000 / 1000,
+			taskinfo.kcycles / 1000 / 1000, taskinfo.name);
+	}
+}
+
+
+static inline void print_head(void)
+{
+	fflush(stdout);
+	console_set_rgb_color(fphone(stdout), WHITE, BLACK);
+	printf("      ID  Threads    Pages      uCycles      kCycles Name");
+	int i;
+	for (i = 60; i < colls; ++i)
+		puts(" ");
+	fflush(stdout);
+	console_set_rgb_color(fphone(stdout), BLACK, WHITE);
+}
+
 void print_data(data_t *data)
 {
@@ -104,5 +140,8 @@
 	puts("\n");
 	print_taskstat(data);
+	puts("\n\n");
+	print_head();
 	puts("\n");
+	print_tasks(data, 4);
 	fflush(stdout);
 }
Index: uspace/app/top/screen.h
===================================================================
--- uspace/app/top/screen.h	(revision 175ad5c6af5ff4b660dca8a7e9ff81110a8f8e0f)
+++ uspace/app/top/screen.h	(revision 8f56d9346cfed5541fc088d1e02ccfb2c9f15ddf)
@@ -36,4 +36,7 @@
 #include "top.h"
 
+extern int rows;
+extern int colls;
+
 extern void screen_init(void);
 extern void clear_screen(void);
