Index: kernel/arch/ia64/src/drivers/it.c
===================================================================
--- kernel/arch/ia64/src/drivers/it.c	(revision 3dea17f5a2dc97de65bf1ff23eb43f3621665af4)
+++ kernel/arch/ia64/src/drivers/it.c	(revision 16d71f41c615fdf91941d1ca9fee163d4e90d351)
@@ -36,5 +36,4 @@
  
 #include <arch/drivers/it.h>
-#include <arch/ski/ski.h>
 #include <arch/interrupt.h>
 #include <arch/register.h>
@@ -117,10 +116,4 @@
 	
 	clock();
-	
-	/*
-	 * This one is a good candidate for moving to a separate
-	 * kernel thread private to ski.c
-	 */
-	poll_keyboard();
 }
 
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 3dea17f5a2dc97de65bf1ff23eb43f3621665af4)
+++ kernel/arch/ia64/src/ia64.c	(revision 16d71f41c615fdf91941d1ca9fee163d4e90d351)
@@ -87,5 +87,4 @@
 	ski_init_console();
 	it_init();	
-	ski_set_console_sysinfo();
 }
 
@@ -100,4 +99,15 @@
 void arch_post_smp_init(void)
 {
+	thread_t *t;
+
+	if (config.cpu_active == 1) {
+		/*
+		 * Create thread that polls keyboard.
+		 */
+		t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll");
+		if (!t)
+			panic("cannot create kkbdpoll\n");
+		thread_ready(t);
+	}
 }
 
Index: kernel/arch/ia64/src/ski/ski.c
===================================================================
--- kernel/arch/ia64/src/ski/ski.c	(revision 3dea17f5a2dc97de65bf1ff23eb43f3621665af4)
+++ kernel/arch/ia64/src/ski/ski.c	(revision 16d71f41c615fdf91941d1ca9fee163d4e90d351)
@@ -43,4 +43,5 @@
 #include <ddi/irq.h>
 #include <ipc/irq.h>
+#include <proc/thread.h>
 #include <synch/spinlock.h>
 #include <arch/asm.h>
@@ -124,5 +125,5 @@
 
 /** Ask keyboard if a key was pressed. */
-void poll_keyboard(void)
+static void poll_keyboard(void)
 {
 	char ch;
@@ -225,14 +226,4 @@
 	irq_register(&ski_kbd_irq);
 
-}
-
-/** Setup console sysinfo (i.e. Keyboard IRQ)
- *
- * Because sysinfo neads memory allocation/dealocation
- * this functions should be called separetely from init.
- *
- */
-void ski_set_console_sysinfo(void)
-{
 	sysinfo_set_item_val("kbd", NULL, true);
 	sysinfo_set_item_val("kbd.inr", NULL, SKI_KBD_INR);
@@ -259,4 +250,16 @@
 }
 
+
+#define POLL_INTERVAL		50000		/* 50 ms */
+
+/** Kernel thread for polling keyboard. */
+void kkbdpoll(void *arg)
+{
+	while (1) {
+		poll_keyboard();
+		thread_usleep(POLL_INTERVAL);
+	}
+}
+
 /** @}
  */
