Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
+++ uspace/app/top/screen.c	(revision bdfd3c978d7f3378bdc591ff4fe153a17d5c2ea3)
@@ -204,5 +204,5 @@
 }
 
-static inline void print_head(void)
+static inline void print_task_head(void)
 {
 	fflush(stdout);
@@ -214,4 +214,33 @@
 	fflush(stdout);
 	console_set_rgb_color(fphone(stdout), BLACK, WHITE);
+}
+
+static inline void print_ipc_head(void)
+{
+	fflush(stdout);
+	console_set_rgb_color(fphone(stdout), WHITE, BLACK);
+	printf("      ID Calls sent Calls recv Answs sent Answs recv  IRQn recv       Forw Name");
+	int i;
+	for (i = 80; i < colls; ++i)
+		puts(" ");
+	fflush(stdout);
+	console_set_rgb_color(fphone(stdout), BLACK, WHITE);
+}
+
+static inline void print_ipc(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 = &data->taskinfos[i];
+		task_ipc_info_t *ipcinfo = &taskinfo->ipc_info;
+		printf("%8llu ", taskinfo->taskid);
+		printf("%10llu %10llu %10llu %10llu %10llu %10llu ",
+				ipcinfo->call_sent, ipcinfo->call_recieved,
+				ipcinfo->answer_sent, ipcinfo->answer_recieved,
+				ipcinfo->irq_notif_recieved, ipcinfo->forwarded);
+		printf("%s\n", taskinfo->name);
+	}
 }
 
@@ -238,7 +267,13 @@
 	puts("\n");
 	++up_rows;
-	print_head();
-	puts("\n");
-	print_tasks(data, up_rows);
+	if (operation_type == OP_IPC) {
+		print_ipc_head();
+		puts("\n");
+		print_ipc(data, up_rows);
+	} else {
+		print_task_head();
+		puts("\n");
+		print_tasks(data, up_rows);
+	}
 	fflush(stdout);
 }
Index: uspace/app/top/top.c
===================================================================
--- uspace/app/top/top.c	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
+++ uspace/app/top/top.c	(revision bdfd3c978d7f3378bdc591ff4fe153a17d5c2ea3)
@@ -56,6 +56,6 @@
 #define MINUTE 60
 
-int number = 0;
-int number2 = 0;
+int operation_type;
+
 static void read_data(data_t *target)
 {
@@ -188,4 +188,5 @@
 
 	/* And paint screen until death... */
+	operation_type = OP_TASKS;
 	while (true) {
 		char c = tgetchar(UPDATE_INTERVAL);
@@ -202,4 +203,12 @@
 				clear_screen();
 				return 0;
+			case 'i':
+				PRINT_WARNING("Showing IPC statistics", c);
+				operation_type = OP_IPC;
+				break;
+			case 't':
+				PRINT_WARNING("Showing task stats", c);
+				operation_type = OP_TASKS;
+				break;
 			default:
 				PRINT_WARNING("Unknown command: %c", c);
Index: uspace/app/top/top.h
===================================================================
--- uspace/app/top/top.h	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
+++ uspace/app/top/top.h	(revision bdfd3c978d7f3378bdc591ff4fe153a17d5c2ea3)
@@ -42,4 +42,8 @@
 	(float).lower = (b); \
 }
+
+#define OP_TASKS 1
+#define OP_IPC 2
+extern int operation_type;
 
 typedef struct {
