Index: kernel/arch/ia64/src/drivers/ski.c
===================================================================
--- kernel/arch/ia64/src/drivers/ski.c	(revision c7429547358535d8d60f28154ac021e54964726e)
+++ kernel/arch/ia64/src/drivers/ski.c	(revision cb15b49c1b1435f2f8f4b04d58fe1e1e8c4d65dd)
@@ -37,4 +37,5 @@
 #include <console/console.h>
 #include <console/chardev.h>
+#include <ddi/ddi.h>
 #include <sysinfo/sysinfo.h>
 #include <stdint.h>
@@ -69,4 +70,5 @@
 
 static ski_instance_t *instance = NULL;
+static parea_t ski_parea;
 
 /** Ask debug console if a key was pressed.
@@ -105,4 +107,7 @@
 	int count = POLL_LIMIT;
 
+	if (ski_parea.mapped && !console_override)
+		return;
+
 	while (count > 0) {
 		wchar_t ch = ski_getchar();
@@ -122,10 +127,5 @@
 
 	while (true) {
-		// TODO FIXME:
-		// This currently breaks the kernel console
-		// before we get the override from uspace.
-		if (console_override)
-			poll_keyboard(instance);
-
+		poll_keyboard(instance);
 		thread_usleep(POLL_INTERVAL);
 	}
@@ -140,4 +140,6 @@
 static void ski_init(void)
 {
+	uintptr_t faddr;
+
 	if (instance)
 		return;
@@ -150,4 +152,17 @@
 	    : "r15", "r8"
 	);
+
+	faddr = frame_alloc(1, FRAME_LOWMEM | FRAME_ATOMIC, 0);
+	if (faddr == 0)
+		panic("Cannot allocate page for ski console.");
+
+	ddi_parea_init(&ski_parea);
+	ski_parea.pbase = faddr;
+	ski_parea.frames = 1;
+	ski_parea.unpriv = false;
+	ski_parea.mapped = false;
+	ddi_parea_register(&ski_parea);
+
+	sysinfo_set_item_val("ski.paddr", NULL, (sysarg_t) faddr);
 
 	instance = malloc(sizeof(ski_instance_t));
@@ -190,16 +205,14 @@
 static void ski_putwchar(outdev_t *dev, wchar_t ch)
 {
-	// TODO FIXME:
-	// This currently breaks the kernel console
-	// before we get the override from uspace.
-	if (console_override) {
-		if (ascii_check(ch)) {
-			if (ch == '\n')
-				ski_do_putchar('\r');
-
-			ski_do_putchar(ch);
-		} else {
-			ski_do_putchar('?');
-		}
+	if (ski_parea.mapped && !console_override)
+		return;
+
+	if (ascii_check(ch)) {
+		if (ch == '\n')
+			ski_do_putchar('\r');
+
+		ski_do_putchar(ch);
+	} else {
+		ski_do_putchar('?');
 	}
 }
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision c7429547358535d8d60f28154ac021e54964726e)
+++ kernel/generic/include/mm/as.h	(revision cb15b49c1b1435f2f8f4b04d58fe1e1e8c4d65dd)
@@ -268,5 +268,4 @@
 
 extern as_t *as_create(unsigned int);
-extern void as_destroy(as_t *);
 extern void as_hold(as_t *);
 extern void as_release(as_t *);
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision c7429547358535d8d60f28154ac021e54964726e)
+++ kernel/generic/src/console/console.c	(revision cb15b49c1b1435f2f8f4b04d58fe1e1e8c4d65dd)
@@ -209,4 +209,5 @@
 void grab_console(void)
 {
+	sysinfo_set_item_val("kconsole", NULL, true);
 	event_notify_1(EVENT_KCONSOLE, false, true);
 	bool prev = console_override;
@@ -226,4 +227,5 @@
 void release_console(void)
 {
+	sysinfo_set_item_val("kconsole", NULL, false);
 	console_override = false;
 	event_notify_1(EVENT_KCONSOLE, false, false);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision c7429547358535d8d60f28154ac021e54964726e)
+++ kernel/generic/src/mm/as.c	(revision cb15b49c1b1435f2f8f4b04d58fe1e1e8c4d65dd)
@@ -187,5 +187,5 @@
  *
  */
-void as_destroy(as_t *as)
+static void as_destroy(as_t *as)
 {
 	DEADLOCK_PROBE_INIT(p_asidlock);
Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision c7429547358535d8d60f28154ac021e54964726e)
+++ kernel/generic/src/proc/program.c	(revision cb15b49c1b1435f2f8f4b04d58fe1e1e8c4d65dd)
@@ -150,5 +150,5 @@
 	prg->loader_status = elf_load((elf_header_t *) image_addr, as);
 	if (prg->loader_status != EE_OK) {
-		as_destroy(as);
+		as_release(as);
 		prg->task = NULL;
 		prg->main_thread = NULL;
@@ -176,5 +176,5 @@
 	void *loader = program_loader;
 	if (!loader) {
-		as_destroy(as);
+		as_release(as);
 		log(LF_OTHER, LVL_ERROR,
 		    "Cannot spawn loader as none was registered");
@@ -184,5 +184,5 @@
 	prg->loader_status = elf_load((elf_header_t *) program_loader, as);
 	if (prg->loader_status != EE_OK) {
-		as_destroy(as);
+		as_release(as);
 		log(LF_OTHER, LVL_ERROR, "Cannot spawn loader (%s)",
 		    elf_error(prg->loader_status));
