diff --git a/.gitmodules b/.gitmodules
index 5d903b98a865e19ba09bfee7777543ec04b972fd..1baaf09b87583039696347411daabeef7a2eec27 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "syscall"]
 	path = syscall
 	url = https://github.com/redox-os/syscall.git
+[submodule "slab_allocator"]
+	path = slab_allocator
+	url = https://github.com/redox-os/slab_allocator
diff --git a/Cargo.lock b/Cargo.lock
index bbed9d82eff30d530fcf85f1086c8fad57b10565..d50efe9794eec6a67abe222f1db975dafa6ae8a1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -127,7 +127,7 @@ dependencies = [
  "goblin 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "raw-cpuid 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.37",
- "slab_allocator 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slab_allocator 0.3.0",
  "spin 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "x86 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -144,7 +144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "linked_list_allocator"
-version = "0.4.3"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "spin 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -291,9 +291,8 @@ dependencies = [
 [[package]]
 name = "slab_allocator"
 version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "linked_list_allocator 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "linked_list_allocator 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "spin 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -410,7 +409,7 @@ dependencies = [
 "checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"
 "checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d"
 "checksum libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1e5d97d6708edaa407429faa671b942dc0f2727222fb6b6539bf1db936e4b121"
-"checksum linked_list_allocator 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55f7a0836a0636ad6d0c8d994e9b029c7e2f53f019c7f6ce744e4ced173f2e3b"
+"checksum linked_list_allocator 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6420a3167cee611c9d0f53663c339e85058bf05234e9862a47bf56920db8542"
 "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
 "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d"
 "checksum num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "9936036cc70fe4a8b2d338ab665900323290efb03983c86cbe235ae800ad8017"
@@ -430,7 +429,6 @@ dependencies = [
 "checksum serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ba7591cfe93755e89eeecdbcc668885624829b020050e6aec99c2a03bd3fd0"
 "checksum serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6e03f1c9530c3fb0a0a5c9b826bdd9246a5921ae995d75f512ac917fc4dd55b5"
 "checksum serde_json 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c9db7266c7d63a4c4b7fe8719656ccdd51acf1bed6124b174f933b009fb10bcb"
-"checksum slab_allocator 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f02b9fb14679f10430f38bfd3cae7f163952adc0c159b135ec37a50e17d93351"
 "checksum spin 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7e4deb3c2455c73779e6d3eebceae9599fc70957e54c69fe88f93aa48e62f432"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
diff --git a/Cargo.toml b/Cargo.toml
index d5b5242bd2ad24a2659d80825f3b29c26ad170a2..6e33b585353ec70be30292b5490d14efca295f72 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,7 +11,7 @@ crate-type = ["staticlib"]
 [dependencies]
 bitflags = "1"
 clippy = { version = "*", optional = true }
-slab_allocator = "0.3.0"
+slab_allocator = { path = "slab_allocator" }
 spin = "0.4"
 raw-cpuid = "3.0"
 redox_syscall = { path = "syscall" }
diff --git a/slab_allocator b/slab_allocator
new file mode 160000
index 0000000000000000000000000000000000000000..0a53a0bc40020ed69f6e1a058165a82771217938
--- /dev/null
+++ b/slab_allocator
@@ -0,0 +1 @@
+Subproject commit 0a53a0bc40020ed69f6e1a058165a82771217938
diff --git a/src/lib.rs b/src/lib.rs
index 34629d5b73fb8f529e6e8fa71230cccc4be8df03..c73a218b8633f9f4c953304c9026396b7ef11c1c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -21,15 +21,16 @@
 #![feature(const_atomic_usize_new)]
 #![feature(const_fn)]
 #![feature(const_max_value)]
+#![feature(const_size_of)]
 #![feature(core_intrinsics)]
 #![feature(global_allocator)]
 #![feature(integer_atomics)]
 #![feature(lang_items)]
 #![feature(naked_functions)]
 #![feature(never_type)]
+#![feature(ptr_internals)]
 #![feature(thread_local)]
 #![feature(unique)]
-#![feature(const_size_of)]
 #![no_std]
 
 pub extern crate x86;