Index: kernel/arch/ia32/include/smp/apic.h
===================================================================
--- kernel/arch/ia32/include/smp/apic.h	(revision 50f4b9515d8379359f3deeb824cd9361eefed873)
+++ kernel/arch/ia32/include/smp/apic.h	(revision 99718a2ecc5019b587210e9cffa467236e5f2131)
@@ -347,4 +347,5 @@
 
 extern uint32_t apic_id_mask;
+extern uint8_t bsp_l_apic;
 
 extern void apic_init(void);
@@ -355,5 +356,4 @@
 extern int l_apic_send_init_ipi(uint8_t);
 extern void l_apic_debug(void);
-extern uint8_t l_apic_id(void);
 
 extern uint32_t io_apic_read(uint8_t);
Index: kernel/arch/ia32/src/smp/apic.c
===================================================================
--- kernel/arch/ia32/src/smp/apic.c	(revision 50f4b9515d8379359f3deeb824cd9361eefed873)
+++ kernel/arch/ia32/src/smp/apic.c	(revision 99718a2ecc5019b587210e9cffa467236e5f2131)
@@ -76,4 +76,6 @@
 
 uint32_t apic_id_mask = 0;
+uint8_t bsp_l_apic = 0;
+
 static irq_t l_apic_timer_irq;
 
@@ -154,4 +156,17 @@
 }
 
+/** Get Local APIC ID.
+ *
+ * @return Local APIC ID.
+ *
+ */
+static uint8_t l_apic_id(void)
+{
+	l_apic_id_t idreg;
+	
+	idreg.value = l_apic[L_APIC_ID];
+	return idreg.apic_id;
+}
+
 /** Initialize APIC on BSP. */
 void apic_init(void)
@@ -208,4 +223,6 @@
 	l_apic_init();
 	l_apic_debug();
+	
+	bsp_l_apic = l_apic_id();
 }
 
@@ -460,33 +477,31 @@
 {
 #ifdef LAPIC_VERBOSE
-	printf("LVT on cpu%" PRIs ", LAPIC ID: %" PRIu8 "\n", CPU->id, l_apic_id());
+	printf("LVT on cpu%" PRIs ", LAPIC ID: %" PRIu8 "\n",
+	    CPU->id, l_apic_id());
 	
 	lvt_tm_t tm;
 	tm.value = l_apic[LVT_Tm];
-	printf("LVT Tm: vector=%hhd, %s, %s, %s\n", tm.vector, delivs_str[tm.delivs], mask_str[tm.masked], tm_mode_str[tm.mode]);
+	printf("LVT Tm: vector=%" PRIu8 ", %s, %s, %s\n",
+	    tm.vector, delivs_str[tm.delivs], mask_str[tm.masked],
+	    tm_mode_str[tm.mode]);
 	
 	lvt_lint_t lint;
 	lint.value = l_apic[LVT_LINT0];
-	printf("LVT LINT0: vector=%hhd, %s, %s, %s, irr=%d, %s, %s\n", tm.vector, delmod_str[lint.delmod], delivs_str[lint.delivs], intpol_str[lint.intpol], lint.irr, trigmod_str[lint.trigger_mode], mask_str[lint.masked]);
-	lint.value = l_apic[LVT_LINT1];	
-	printf("LVT LINT1: vector=%hhd, %s, %s, %s, irr=%d, %s, %s\n", tm.vector, delmod_str[lint.delmod], delivs_str[lint.delivs], intpol_str[lint.intpol], lint.irr, trigmod_str[lint.trigger_mode], mask_str[lint.masked]);	
+	printf("LVT LINT0: vector=%" PRIu8 ", %s, %s, %s, irr=%u, %s, %s\n",
+	    tm.vector, delmod_str[lint.delmod], delivs_str[lint.delivs],
+	    intpol_str[lint.intpol], lint.irr, trigmod_str[lint.trigger_mode],
+	    mask_str[lint.masked]);
+	
+	lint.value = l_apic[LVT_LINT1];
+	printf("LVT LINT1: vector=%" PRIu8 ", %s, %s, %s, irr=%u, %s, %s\n",
+	    tm.vector, delmod_str[lint.delmod], delivs_str[lint.delivs],
+	    intpol_str[lint.intpol], lint.irr, trigmod_str[lint.trigger_mode],
+	    mask_str[lint.masked]);
 	
 	lvt_error_t error;
 	error.value = l_apic[LVT_Err];
-	printf("LVT Err: vector=%hhd, %s, %s\n", error.vector, delivs_str[error.delivs], mask_str[error.masked]);
+	printf("LVT Err: vector=%" PRIu8 ", %s, %s\n", error.vector,
+	    delivs_str[error.delivs], mask_str[error.masked]);
 #endif
-}
-
-/** Get Local APIC ID.
- *
- * @return Local APIC ID.
- *
- */
-uint8_t l_apic_id(void)
-{
-	l_apic_id_t idreg;
-	
-	idreg.value = l_apic[L_APIC_ID];
-	return idreg.apic_id;
 }
 
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision 50f4b9515d8379359f3deeb824cd9361eefed873)
+++ kernel/arch/ia32/src/smp/smp.c	(revision 99718a2ecc5019b587210e9cffa467236e5f2131)
@@ -113,6 +113,4 @@
 	apic_init();
 	
-	uint8_t apic = l_apic_id();
-	
 	for (i = 0; i < config.cpu_count; i++) {
 		/*
@@ -128,7 +126,7 @@
 			continue;
 		
-		if (ops->cpu_apic_id(i) == apic) {
-			printf("%s: bad processor entry #%u, will not send IPI "
-			    "to myself\n", __FUNCTION__, i);
+		if (ops->cpu_apic_id(i) == bsp_l_apic) {
+			printf("kmp: bad processor entry #%u, will not send IPI "
+			    "to myself\n", i);
 			continue;
 		}
Index: kernel/genarch/src/acpi/madt.c
===================================================================
--- kernel/genarch/src/acpi/madt.c	(revision 50f4b9515d8379359f3deeb824cd9361eefed873)
+++ kernel/genarch/src/acpi/madt.c	(revision 99718a2ecc5019b587210e9cffa467236e5f2131)
@@ -111,5 +111,5 @@
 	return ((struct madt_l_apic *)
 	    madt_entries_index[madt_l_apic_entry_index + i])->apic_id ==
-	    l_apic_id();
+	    bsp_l_apic;
 }
 
@@ -147,6 +147,8 @@
 static void madt_l_apic_entry(struct madt_l_apic *la, size_t i)
 {
-	if (!madt_l_apic_entry_cnt++)
+	if (madt_l_apic_entry_cnt == 0)
 		madt_l_apic_entry_index = i;
+	
+	madt_l_apic_entry_cnt++;
 	
 	if (!(la->flags & 0x1)) {
@@ -160,5 +162,5 @@
 static void madt_io_apic_entry(struct madt_io_apic *ioa, size_t i)
 {
-	if (!madt_io_apic_entry_cnt++) {
+	if (madt_io_apic_entry_cnt == 0) {
 		/* Remember index of the first io apic entry */
 		madt_io_apic_entry_index = i;
@@ -167,4 +169,6 @@
 		/* Currently not supported */
 	}
+	
+	madt_io_apic_entry_cnt++;
 }
 
@@ -190,5 +194,5 @@
 	/* Count MADT entries */
 	unsigned int madt_entries_index_cnt = 0;
-	for (hdr = &acpi_madt->apic_header[0]; hdr < end;
+	for (hdr = acpi_madt->apic_header; hdr < end;
 	    hdr = (struct madt_apic_header *) (((uint8_t *) hdr) + hdr->length))
 		madt_entries_index_cnt++;
@@ -196,5 +200,5 @@
 	/* Create MADT APIC entries index array */
 	madt_entries_index = (struct madt_apic_header **)
-	    malloc(madt_entries_index_cnt * sizeof(struct madt_apic_header **),
+	    malloc(madt_entries_index_cnt * sizeof(struct madt_apic_header *),
 	    FRAME_ATOMIC);
 	if (!madt_entries_index)
@@ -203,7 +207,9 @@
 	size_t i = 0;
 	
-	for (hdr = &acpi_madt->apic_header[0]; hdr < end;
-	    hdr = (struct madt_apic_header *) (((uint8_t *) hdr) + hdr->length))
-		madt_entries_index[i++] = hdr;
+	for (hdr = acpi_madt->apic_header; hdr < end;
+	    hdr = (struct madt_apic_header *) (((uint8_t *) hdr) + hdr->length)) {
+		madt_entries_index[i] = hdr;
+		i++;
+	}
 	
 	/* Sort MADT index structure */
