diff --git a/src/acpi/mod.rs b/src/acpi/mod.rs
index 7d79c7cec23f4a3cbe90bdf0d41fde86506f288f..96f50a11e3793ede1f98443e051a3c31f5f025d5 100644
--- a/src/acpi/mod.rs
+++ b/src/acpi/mod.rs
@@ -35,7 +35,7 @@ pub mod madt;
 mod rsdt;
 mod sdt;
 mod xsdt;
-mod aml;
+pub mod aml;
 mod rxsdt;
 mod rsdp;
 
diff --git a/src/arch/x86_64/device/ioapic.rs b/src/arch/x86_64/device/ioapic.rs
index d2966789ec1f8a4a8a40ecb417471355ffa5c316..ecee0e8b7f993b0076567a817a1a17252a4a8188 100644
--- a/src/arch/x86_64/device/ioapic.rs
+++ b/src/arch/x86_64/device/ioapic.rs
@@ -306,11 +306,12 @@ pub unsafe fn init(active_table: &mut ActivePageTable) {
                 _ => (),
             }
         }
-
+/*
         let namespace_guard = crate::acpi::ACPI_TABLE.namespace.read();
         for (k, v) in namespace_guard.as_ref().unwrap().iter() {
             println!("{} = {:?}", k, v);
         }
+*/
     }
     println!("I/O APICs: {:?}, overrides: {:?}", ioapics(), src_overrides());
 
@@ -358,6 +359,22 @@ pub unsafe fn init(active_table: &mut ActivePageTable) {
     }
     println!("I/O APICs: {:?}, overrides: {:?}", ioapics(), src_overrides());
     irq::set_irq_method(irq::IrqMethod::Apic);
+
+    // tell the firmware that we're using APIC rather than the default 8259 PIC.
+    #[cfg(feature = "acpi")]
+    {
+        let method = {
+            let namespace_guard = crate::acpi::ACPI_TABLE.namespace.read();
+            if let Some(value) = namespace_guard.as_ref().unwrap().get("\\_PIC") {
+                value.get_as_method().ok()
+            } else {
+                None
+            }
+        };
+        if let Some(m) = method {
+            m.execute("\\_PIC".into(), vec!(crate::acpi::aml::AmlValue::Integer(1)));
+        }
+    }
 }
 fn get_override(irq: u8) -> Option<&'static Override> {
     src_overrides().iter().find(|over| over.bus_irq == irq)