Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
+++ kernel/arch/ia64/src/ia64.c	(revision 2b1f8608eb11a5a5a4ef29c4d03641eff9b079ac)
@@ -120,5 +120,9 @@
 	int i;
 	
-	
+	int myid,myeid;
+	
+	myid=ia64_get_cpu_id();
+	myeid=ia64_get_cpu_eid();
+
 	for(i=0;i<16;i++)
 	{
@@ -131,5 +135,5 @@
 		((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i+1;
 		srlz_d();
-		((uint32_t*)(IOSAPIC+0x10))[0]=1<<(56-32);
+		((uint32_t*)(IOSAPIC+0x10))[0]=myid<<(56-32) | myeid<<(48-32);
 		srlz_d();
 	}
@@ -170,9 +174,12 @@
 {
 	while (1) {
-		i8042_poll();
 #ifdef CONFIG_NS16550
 	#ifndef CONFIG_NS16550_INTERRUPT_DRIVEN
 		ns16550_poll();
 	#endif	
+#else
+	#ifndef CONFIG_I8042_INTERRUPT_DRIVEN
+		i8042_poll();
+	#endif	
 #endif
 		thread_usleep(POLL_INTERVAL);
@@ -182,5 +189,6 @@
 
 
-static void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused)))
+void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused)));
+void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused)))
 {
 	return;
@@ -205,11 +213,11 @@
 #ifdef I460GX
 		devno_t kbd = device_assign_devno();
-		devno_t mouse = device_assign_devno();
 		/* keyboard controller */
-		i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE);
 
 #ifdef CONFIG_NS16550
 		ns16550_init(kbd, NS16550_PORT, NS16550_IRQ,end_of_irq_void,NULL); // as a COM 1
 #else
+		devno_t mouse = device_assign_devno();
+		i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE);
 #endif
 		thread_t *t;
@@ -281,9 +289,9 @@
 	ski_kbd_grab();
 #else
-	i8042_grab();
 	#ifdef CONFIG_NS16550
 		ns16550_grab();
+	#else
+		i8042_grab();
 	#endif	
-		
 #endif	
 }
@@ -295,8 +303,9 @@
 #ifdef SKI
 	ski_kbd_release();
-	i8042_release();
 #else	
 	#ifdef CONFIG_NS16550
 		ns16550_release();
+	#else	
+		i8042_release();
 	#endif	
 
Index: kernel/arch/ia64/src/interrupt.c
===================================================================
--- kernel/arch/ia64/src/interrupt.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
+++ kernel/arch/ia64/src/interrupt.c	(revision 2b1f8608eb11a5a5a4ef29c4d03641eff9b079ac)
@@ -263,5 +263,17 @@
 #endif
 
-
+		case INTERRUPT_TIMER:
+			{
+
+				irq_t *irq = irq_dispatch_and_lock(ivr.vector);
+				if (irq) {
+					irq->handler(irq, irq->arg);
+					spinlock_unlock(&irq->lock);
+				} else {
+					panic("\nUnhandled Internal Timer Interrupt (%d)\n",ivr.vector);
+				}
+			}	
+			break;
+				
 		default:
 			{
Index: kernel/arch/ia64/src/ski/ski.c
===================================================================
--- kernel/arch/ia64/src/ski/ski.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
+++ kernel/arch/ia64/src/ski/ski.c	(revision 2b1f8608eb11a5a5a4ef29c4d03641eff9b079ac)
@@ -45,5 +45,5 @@
 #include <synch/spinlock.h>
 #include <arch/asm.h>
-#include <drivers/kbd.h>
+#include <arch/drivers/kbd.h>
 
 #define SKI_KBD_INR	0
Index: kernel/arch/ia64/src/smp/smp.c
===================================================================
--- kernel/arch/ia64/src/smp/smp.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
+++ kernel/arch/ia64/src/smp/smp.c	(revision 2b1f8608eb11a5a5a4ef29c4d03641eff9b079ac)
@@ -115,4 +115,8 @@
 void smp_init(void)
 {
+	if(!bootinfo->hello_configured) return; 
+	//If we have not system prepared by hello, we are not able to start AP's
+	//this means we are running on simulator
+	
 	sapic_init();
 	ipi_broadcast_arch_all(bootinfo->wakeup_intno);	
