diff --git a/interrupt.rs b/interrupt.rs
deleted file mode 100644
index 935c718236754a75f6cb18e73fbca720f76ba0af..0000000000000000000000000000000000000000
--- a/interrupt.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-//! Interrupts.
-
-use core::fmt;
-
-/// x86 External Interrupts (1-16).
-pub static EXCEPTIONS: [InterruptDescription; 21] = [
-    Descriptor::new("Division error", Kind::Fault),
-    Descriptor::new("Debug trap", Kind::Trap),
-    Descriptor::new("Unmaskable interrupt", Kind::Unmaskable),
-    Descriptor::new("Breakpoint", Kind::Trap),
-    Descriptor::new("Overflow", Kind::Trap),
-    Descriptor::new("Out of bound", Kind::Fault),
-    Descriptor::new("Invalid opcode", Kind::Fault),
-    Descriptor::new("Device unavailable", Kind::Fault),
-    Descriptor::new("Double fault", Kind::Fault),
-    Descriptor::new("Coprocessor segment overrun", Kind::Fault),
-    Descriptor::new("Invalid TSS", Kind::Fault),
-    Descriptor::new("Segment not present", Kind::Fault),
-    Descriptor::new("Stack-segment fault", Kind::Fault),
-    Descriptor::new("General protection", Kind::Fault),
-    Descriptor::new("Page fault", Kind::Fault),
-    Descriptor::new("Reserved", Kind::Reserved),
-    Descriptor::new("x87 FPU", Kind::Fault),
-    Descriptor::new("Unaligned memory access", Kind::Fault),
-    Descriptor::new("Machine check", Kind::Abort),
-    Descriptor::new("SIMD floating-point", Kind::Fault),
-    Descriptor::new("SIMD floating-point", Kind::Fault),
-    Descriptor::new("Virtualization violation", Kind::Fault),
-];
-
-/// An interrupt description.
-#[derive(Debug, Copy, Clone)]
-pub struct Descriptor {
-    /// The description of this interrupt.
-    pub desc: &'static str,
-    /// The interrupt type.
-    pub kind: Kind,
-}
-
-impl Descriptor {
-    /// Create a new interrupt description.
-    pub fn new(desc: &'static str, kind: Kind) -> Descriptor {
-        Descriptor {
-            desc: desc,
-            kind: kind,
-        }
-    }
-}
-
-/// The interrupt kind.
-pub enum Kind {
-    /// A fault.
-    ///
-    /// This can have multiple sources, but is often a result of a program error of some sort.
-    Fault,
-    /// A trap.
-    ///
-    /// These are often for debugging purposes.
-    Trap,
-    /// A deliberate abort.
-    Abort,
-    /// An unmaskable interrupt.
-    ///
-    /// This is a forced interrupt which need to be handled immediately.
-    Unmaskable,
-    /// Reserved or deprecated.
-    Reserved,
-}
-
-/// Enable interrupts.
-pub unsafe fn enable() {
-    asm!("sti");
-}
-
-/// Disable interrupts.
-pub unsafe fn disable() {
-    asm!("cli");
-}
-
-/// Fire a software interrupt.
-///
-/// Due to inlining being strictly required, we use a macro.
-#[macro_export]
-macro_rules! interrupt {
-    ($int:expr) => {{
-            asm!("int $0" :: "N" ($int));
-    }};
-}
diff --git a/lib.rs b/lib.rs
index 7dd9a8055e3560704d61b65e519d498199fee920..e1db70cca7fa0f30e70973133e826da296923656 100644
--- a/lib.rs
+++ b/lib.rs
@@ -67,7 +67,6 @@
 #![feature(alloc)]
 #![feature(collections)]
 #![feature(const_fn)]
-#![feature(lang_items)]
 #![feature(question_mark)]
 #![no_std]
 
@@ -97,9 +96,6 @@ extern crate collections;
 /// Context management
 pub mod context;
 
-/// Intrinsics for panic handling
-pub mod panic;
-
 /// Schemes, filesystem handlers
 pub mod scheme;
 
diff --git a/panic.rs b/panic.rs
deleted file mode 100644
index a13712085822f9a3d4bab8cdcdb570ff950d8a03..0000000000000000000000000000000000000000
--- a/panic.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-//! Intrinsics for panic handling
-
-use arch::interrupt::halt;
-
-#[cfg(not(test))]
-#[lang = "eh_personality"]
-extern "C" fn eh_personality() {}
-
-#[cfg(not(test))]
-/// Required to handle panics
-#[lang = "panic_fmt"]
-extern "C" fn panic_fmt(fmt: ::core::fmt::Arguments, file_line: &(&'static str, u32)) -> ! {
-    loop {
-        unsafe { halt() };
-    }
-}
-
-#[allow(non_snake_case)]
-#[no_mangle]
-/// Required to handle panics
-pub extern "C" fn _Unwind_Resume() -> ! {
-    loop {
-        unsafe { halt() }
-    }
-}