Index: kernel/arch/ia32/include/smp/mps.h
===================================================================
--- kernel/arch/ia32/include/smp/mps.h	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/arch/ia32/include/smp/mps.h	(revision 26678e5a1f0f0a6dda91a9e89a03aa3ca86e447c)
@@ -121,11 +121,7 @@
 } __attribute__ ((packed));
 
-
-extern waitq_t ap_completion_wq;
-
 extern struct smp_config_operations mps_config_operations;
 
 extern void mps_init(void);
-extern void kmp(void *arg);
 
 #endif
Index: kernel/arch/ia32/src/ia32.c
===================================================================
--- kernel/arch/ia32/src/ia32.c	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/arch/ia32/src/ia32.c	(revision 26678e5a1f0f0a6dda91a9e89a03aa3ca86e447c)
@@ -63,4 +63,8 @@
 #include <console/console.h>
 
+#ifdef CONFIG_SMP
+#include <arch/smp/apic.h>
+#endif
+
 void arch_pre_mm_init(void)
 {
@@ -98,4 +102,14 @@
 		zone_merge_all();
 	}
+}
+
+void arch_post_cpu_init()
+{
+#ifdef CONFIG_SMP
+        if (config.cpu_active > 1) {
+		l_apic_init();
+		l_apic_debug();
+	}
+#endif
 }
 
Index: kernel/arch/ia32/src/smp/mps.c
===================================================================
--- kernel/arch/ia32/src/smp/mps.c	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/arch/ia32/src/smp/mps.c	(revision 26678e5a1f0f0a6dda91a9e89a03aa3ca86e447c)
@@ -85,6 +85,4 @@
 int l_intr_entry_cnt = 0;
 
-waitq_t ap_completion_wq;
-
 /*
  * Implementation of IA-32 SMP configuration interface.
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/arch/ia32/src/smp/smp.c	(revision 26678e5a1f0f0a6dda91a9e89a03aa3ca86e447c)
@@ -105,6 +105,4 @@
 	ASSERT(ops != NULL);
 
-	waitq_initialize(&ap_completion_wq);
-
 	/*
 	 * We need to access data in frame 0.
