Index: kernel/generic/src/console/chardev.c
===================================================================
--- kernel/generic/src/console/chardev.c	(revision b2fa1204c76e1eaec329888181d281aac04ed61e)
+++ kernel/generic/src/console/chardev.c	(revision d579acce1df6462929e1e78b004f650a964db913)
@@ -94,5 +94,6 @@
 {
 	if (atomic_get(&haltstate)) {
-		/* If we are here, we are hopefully on the processor that
+		/*
+		 * If we are here, we are hopefully on the processor that
 		 * issued the 'halt' command, so proceed to read the character
 		 * directly from input
@@ -115,9 +116,23 @@
 	waitq_sleep(&indev->wq);
 	irq_spinlock_lock(&indev->lock, true);
-	wchar_t ch = indev->buffer[(indev->index - indev->counter) % INDEV_BUFLEN];
+	wchar_t ch = indev->buffer[(indev->index - indev->counter) %
+	    INDEV_BUFLEN];
 	indev->counter--;
 	irq_spinlock_unlock(&indev->lock, true);
 	
 	return ch;
+}
+
+/** Signal out-of-band condition
+ *
+ * @param indev  Input character device.
+ * @param signal Out-of-band condition to signal.
+ *
+ */
+void indev_signal(indev_t *indev, indev_signal_t signal)
+{
+	if ((indev != NULL) && (indev->op != NULL) &&
+	    (indev->op->signal != NULL))
+		indev->op->signal(indev, signal);
 }
 
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision b2fa1204c76e1eaec329888181d281aac04ed61e)
+++ kernel/generic/src/console/console.c	(revision d579acce1df6462929e1e78b004f650a964db913)
@@ -84,14 +84,21 @@
 static outdev_t stdout_source;
 
+static void stdin_signal(indev_t *, indev_signal_t);
+
 static indev_operations_t stdin_ops = {
-	.poll = NULL
+	.poll = NULL,
+	.signal = stdin_signal
 };
 
 static void stdout_write(outdev_t *, wchar_t);
 static void stdout_redraw(outdev_t *);
+static void stdout_scroll_up(outdev_t *);
+static void stdout_scroll_down(outdev_t *);
 
 static outdev_operations_t stdout_ops = {
 	.write = stdout_write,
-	.redraw = stdout_redraw
+	.redraw = stdout_redraw,
+	.scroll_up = stdout_scroll_up,
+	.scroll_down = stdout_scroll_down
 };
 
@@ -113,4 +120,18 @@
 }
 
+static void stdin_signal(indev_t *indev, indev_signal_t signal)
+{
+	switch (signal) {
+	case INDEV_SIGNAL_SCROLL_UP:
+		if (stdout != NULL)
+			stdout_scroll_up(stdout);
+		break;
+	case INDEV_SIGNAL_SCROLL_DOWN:
+		if (stdout != NULL)
+			stdout_scroll_down(stdout);
+		break;
+	}
+}
+
 void stdout_wire(outdev_t *outdev)
 {
@@ -136,4 +157,20 @@
 		if ((sink) && (sink->op->redraw))
 			sink->op->redraw(sink);
+	}
+}
+
+static void stdout_scroll_up(outdev_t *dev)
+{
+	list_foreach(dev->list, link, outdev_t, sink) {
+		if ((sink) && (sink->op->scroll_up))
+			sink->op->scroll_up(sink);
+	}
+}
+
+static void stdout_scroll_down(outdev_t *dev)
+{
+	list_foreach(dev->list, link, outdev_t, sink) {
+		if ((sink) && (sink->op->scroll_down))
+			sink->op->scroll_down(sink);
 	}
 }
@@ -229,4 +266,5 @@
 			}
 		}
+		
 		if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) {
 			putchar(ch);
@@ -264,5 +302,5 @@
 
 /** Flush characters that are stored in the output buffer
- * 
+ *
  */
 void kio_flush(void)
@@ -294,5 +332,5 @@
 
 /** Put a character into the output buffer.
- * 
+ *
  * The caller is required to hold kio_lock
  */
