Index: uspace/app/klog/Makefile
===================================================================
--- uspace/app/klog/Makefile	(revision 3e6a98c595287c43d200d28d97f57755342be117)
+++ uspace/app/klog/Makefile	(revision 26a8c18d1889eb6baf7ed5b8637eae1ec540730d)
@@ -29,4 +29,6 @@
 
 USPACE_PREFIX = ../..
+LIBS = $(LIBCLUI_PREFIX)/libclui.a
+EXTRA_CFLAGS = -I$(LIBCLUI_PREFIX)
 BINARY = klog
 
Index: uspace/app/klog/klog.c
===================================================================
--- uspace/app/klog/klog.c	(revision 3e6a98c595287c43d200d28d97f57755342be117)
+++ uspace/app/klog/klog.c	(revision 26a8c18d1889eb6baf7ed5b8637eae1ec540730d)
@@ -48,4 +48,5 @@
 #include <adt/list.h>
 #include <adt/prodcons.h>
+#include <tinput.h>
 
 #define NAME       "klog"
@@ -228,12 +229,31 @@
 	}
 	
+	tinput_t *input = tinput_new();
+	if (!input) {
+		fprintf(stderr, "%s: Could not create input\n", NAME);
+		return ENOMEM;
+	}	
+
 	fibril_add_ready(fid);
 	event_unmask(EVENT_KLOG);
 	klog_update();
 	
-	task_retval(0);
-	async_manager();
-	
-	return 0;
+	tinput_set_prompt(input, "klog> ");
+
+	char *str;
+	while ((rc = tinput_read(input, &str)) == EOK) {
+		if (str_cmp(str, "") == 0) {
+			free(str);
+			continue;
+		}
+
+		klog_command(str, str_size(str));
+		free(str);
+	}
+ 
+	if (rc == ENOENT)
+		rc = EOK;	
+
+	return EOK;
 }
 
Index: uspace/lib/c/generic/io/klog.c
===================================================================
--- uspace/lib/c/generic/io/klog.c	(revision 3e6a98c595287c43d200d28d97f57755342be117)
+++ uspace/lib/c/generic/io/klog.c	(revision 26a8c18d1889eb6baf7ed5b8637eae1ec540730d)
@@ -39,4 +39,5 @@
 #include <unistd.h>
 #include <errno.h>
+#include <abi/klog.h>
 #include <io/klog.h>
 #include <io/printf_core.h>
@@ -44,5 +45,5 @@
 size_t klog_write(const void *buf, size_t size)
 {
-	ssize_t ret = (ssize_t) __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, size);
+	ssize_t ret = (ssize_t) __SYSCALL3(SYS_KLOG, KLOG_WRITE, (sysarg_t) buf, size);
 	
 	if (ret >= 0)
@@ -54,5 +55,10 @@
 void klog_update(void)
 {
-	(void) __SYSCALL3(SYS_KLOG, 1, (uintptr_t) NULL, 0);
+	(void) __SYSCALL3(SYS_KLOG, KLOG_UPDATE, (uintptr_t) NULL, 0);
+}
+
+void klog_command(const void *buf, size_t size)
+{
+	(void) __SYSCALL3(SYS_KLOG, KLOG_COMMAND, (sysarg_t) buf, (sysarg_t) size);
 }
 
Index: uspace/lib/c/include/io/klog.h
===================================================================
--- uspace/lib/c/include/io/klog.h	(revision 3e6a98c595287c43d200d28d97f57755342be117)
+++ uspace/lib/c/include/io/klog.h	(revision 26a8c18d1889eb6baf7ed5b8637eae1ec540730d)
@@ -42,4 +42,5 @@
 extern size_t klog_write(const void *, size_t);
 extern void klog_update(void);
+extern void klog_command(const void *, size_t);
 extern int klog_printf(const char *, ...)
     PRINTF_ATTRIBUTE(1, 2);
Index: uspace/lib/c/include/stdio.h
===================================================================
--- uspace/lib/c/include/stdio.h	(revision 3e6a98c595287c43d200d28d97f57755342be117)
+++ uspace/lib/c/include/stdio.h	(revision 26a8c18d1889eb6baf7ed5b8637eae1ec540730d)
@@ -40,4 +40,5 @@
 #include <str.h>
 #include <io/verify.h>
+#include <abi/klog.h>
 
 #define EOF  (-1)
@@ -51,5 +52,5 @@
 		int _n = snprintf(_buf, sizeof(_buf), fmt, ##__VA_ARGS__); \
 		if (_n > 0) \
-			(void) __SYSCALL3(SYS_KLOG, 1, (sysarg_t) _buf, str_size(_buf)); \
+			(void) __SYSCALL3(SYS_KLOG, KLOG_WRITE, (sysarg_t) _buf, str_size(_buf)); \
 	}
 
