diff --git a/src/ex_node.rs b/src/ex_node.rs
deleted file mode 100644
index 2683800bc34293716b7a0f0caa311e639c788d8b..0000000000000000000000000000000000000000
--- a/src/ex_node.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-use std::{fmt, mem, ops, slice};
-
-use Extent;
-use BLOCK_SIZE;
-
-/// An extra node
-#[repr(packed)]
-pub struct ExNode {
-    pub prev: u64,
-    pub next: u64,
-    pub extents: [Extent; (BLOCK_SIZE as usize - 16) / 16],
-}
-
-impl ExNode {
-    pub fn default() -> ExNode {
-        ExNode {
-            prev: 0,
-            next: 0,
-            extents: [Extent::default(); (BLOCK_SIZE as usize - 16) / 16],
-        }
-    }
-
-    pub fn size(&self) -> u64 {
-        self.extents
-            .iter()
-            .fold(0, |size, extent| size + extent.length)
-    }
-}
-
-impl fmt::Debug for ExNode {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        let extents: Vec<&Extent> = self
-            .extents
-            .iter()
-            .filter(|extent| -> bool { extent.length > 0 })
-            .collect();
-        unsafe {
-            f.debug_struct("ExNode")
-                .field("prev", &self.prev)
-                .field("next", &self.next)
-                .field("extents", &extents)
-                .finish()
-        }
-    }
-}
-
-impl ops::Deref for ExNode {
-    type Target = [u8];
-    fn deref(&self) -> &[u8] {
-        unsafe {
-            slice::from_raw_parts(self as *const ExNode as *const u8, mem::size_of::<ExNode>())
-                as &[u8]
-        }
-    }
-}
-
-impl ops::DerefMut for ExNode {
-    fn deref_mut(&mut self) -> &mut [u8] {
-        unsafe {
-            slice::from_raw_parts_mut(self as *mut ExNode as *mut u8, mem::size_of::<ExNode>())
-                as &mut [u8]
-        }
-    }
-}
-
-#[test]
-fn ex_node_size_test() {
-    assert_eq!(mem::size_of::<ExNode>(), BLOCK_SIZE as usize);
-}
diff --git a/src/filesystem.rs b/src/filesystem.rs
index 8b736249bf8de8964bbf9c63eb72ff9590a847b6..839e455910e6f6a146328ff0e2884c956f60994b 100644
--- a/src/filesystem.rs
+++ b/src/filesystem.rs
@@ -3,7 +3,7 @@ use std::time::{SystemTime, UNIX_EPOCH};
 
 use syscall::error::{Error, Result, EEXIST, EINVAL, EISDIR, ENOENT, ENOSPC, ENOTDIR, ENOTEMPTY};
 
-use {Disk, ExNode, Extent, Header, Node, BLOCK_SIZE};
+use {Disk, Extent, Header, Node, BLOCK_SIZE};
 
 /// A file system
 pub struct FileSystem<D: Disk> {
@@ -131,12 +131,6 @@ impl<D: Disk> FileSystem<D> {
         Ok((block, node))
     }
 
-    pub fn ex_node(&mut self, block: u64) -> Result<(u64, ExNode)> {
-        let mut node = ExNode::default();
-        self.read_at(block, &mut node)?;
-        Ok((block, node))
-    }
-
     pub fn child_nodes(
         &mut self,
         children: &mut Vec<(u64, Node)>,
diff --git a/src/header.rs b/src/header.rs
index d7eb01afa3ec337b137536daf5aaebc5e0e70945..5fe48a86ec76357a4fa651b8390ae26d49457e3c 100644
--- a/src/header.rs
+++ b/src/header.rs
@@ -58,16 +58,20 @@ impl Header {
 
 impl fmt::Debug for Header {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        unsafe {
-            f.debug_struct("Header")
-                .field("signature", &self.signature)
-                .field("version", &self.version)
-                .field("uuid", &self.uuid)
-                .field("size", &self.size)
-                .field("root", &self.root)
-                .field("free", &self.free)
-                .finish()
-        }
+        let signature = self.signature;
+        let version = self.version;
+        let uuid = self.uuid;
+        let size = self.size;
+        let root = self.root;
+        let free = self.free;
+        f.debug_struct("Header")
+            .field("signature", &signature)
+            .field("version", &version)
+            .field("uuid", &uuid)
+            .field("size", &size)
+            .field("root", &root)
+            .field("free", &free)
+            .finish()
     }
 }
 
diff --git a/src/lib.rs b/src/lib.rs
index 0d7bf32106dc32a2da5d1134b56259a22178a3c5..10ff16b1c132ac9e7a67e77b5a1f8a99bd42460b 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -13,7 +13,6 @@ pub static IS_UMT: AtomicUsize = AtomicUsize::new(0);
 
 pub use self::archive::{archive, archive_at};
 pub use self::disk::{Disk, DiskCache, DiskFile, DiskSparse};
-pub use self::ex_node::ExNode;
 pub use self::extent::Extent;
 pub use self::filesystem::FileSystem;
 pub use self::header::Header;
@@ -22,7 +21,6 @@ pub use self::node::Node;
 
 mod archive;
 mod disk;
-mod ex_node;
 mod extent;
 mod filesystem;
 mod header;
diff --git a/src/node.rs b/src/node.rs
index a224c48384088dbcc42613869fe5c8c823d86963..345256603b78c52caefbb62d293d6e79a74830d8 100644
--- a/src/node.rs
+++ b/src/node.rs
@@ -156,25 +156,32 @@ impl Node {
 
 impl fmt::Debug for Node {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let mode = self.mode;
+        let uid = self.uid;
+        let gid = self.gid;
+        let ctime = self.ctime;
+        let ctime_nsec = self.ctime_nsec;
+        let mtime = self.mtime;
+        let mtime_nsec = self.mtime_nsec;
+        let name = self.name();
+        let next = self.next;
         let extents: Vec<&Extent> = self
             .extents
             .iter()
             .filter(|extent| -> bool { extent.length > 0 })
             .collect();
-        unsafe {
-            f.debug_struct("Node")
-                .field("mode", &self.mode)
-                .field("uid", &self.uid)
-                .field("gid", &self.gid)
-                .field("ctime", &self.ctime)
-                .field("ctime_nsec", &self.ctime_nsec)
-                .field("mtime", &self.mtime)
-                .field("mtime_nsec", &self.mtime_nsec)
-                .field("name", &self.name())
-                .field("next", &self.next)
-                .field("extents", &extents)
-                .finish()
-        }
+        f.debug_struct("Node")
+            .field("mode", &mode)
+            .field("uid", &uid)
+            .field("gid", &gid)
+            .field("ctime", &ctime)
+            .field("ctime_nsec", &ctime_nsec)
+            .field("mtime", &mtime)
+            .field("mtime_nsec", &mtime_nsec)
+            .field("name", &name)
+            .field("next", &next)
+            .field("extents", &extents)
+            .finish()
     }
 }