Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision 1db4e2ae125c1e44cf798e9a321ba480b184b645)
+++ kernel/generic/src/console/console.c	(revision af774597a1e2bce677a5ef151d083e3d3dcf72ae)
@@ -76,15 +76,12 @@
 static MUTEX_INITIALIZE(console_mutex, MUTEX_RECURSIVE);
 
-/** First kernel log characters */
-static size_t kio_start = 0;
-
-/** Number of valid kernel log characters */
-static size_t kio_len = 0;
-
-/** Number of stored (not printed) kernel log characters */
-static size_t kio_stored = 0;
-
-/** Number of stored kernel log characters for uspace */
-static size_t kio_uspace = 0;
+/** Number of characters written to buffer. Periodically overflows. */
+static size_t kio_written = 0;
+
+/** Number of characters written to output devices. Periodically overflows. */
+static size_t kio_processed = 0;
+
+/** Last notification sent to uspace. */
+static size_t kio_notified = 0;
 
 /** Kernel log spinlock */
@@ -259,8 +256,7 @@
 	spinlock_lock(&kio_lock);
 
-	if (kio_uspace > 0) {
-		if (event_notify_3(EVENT_KIO, true, kio_start, kio_len,
-		    kio_uspace) == EOK)
-			kio_uspace = 0;
+	if (kio_notified != kio_written) {
+		if (event_notify_1(EVENT_KIO, true, kio_written) == EOK)
+			kio_notified = kio_written;
 	}
 
@@ -281,7 +277,7 @@
 
 	/* Print characters that weren't printed earlier */
-	while (kio_stored > 0) {
-		char32_t tmp = kio[(kio_start + kio_len - kio_stored) % KIO_LENGTH];
-		kio_stored--;
+	while (kio_written != kio_processed) {
+		char32_t tmp = kio[kio_processed % KIO_LENGTH];
+		kio_processed++;
 
 		/*
@@ -304,16 +300,6 @@
 void kio_push_char(const char32_t ch)
 {
-	kio[(kio_start + kio_len) % KIO_LENGTH] = ch;
-	if (kio_len < KIO_LENGTH)
-		kio_len++;
-	else
-		kio_start = (kio_start + 1) % KIO_LENGTH;
-
-	if (kio_stored < kio_len)
-		kio_stored++;
-
-	/* The character is stored for uspace */
-	if (kio_uspace < kio_len)
-		kio_uspace++;
+	kio[kio_written % KIO_LENGTH] = ch;
+	kio_written++;
 }
 
