diff --git a/Cargo.toml b/Cargo.toml
index 40f07230024b4d8b3ab88ab599f248258ef20c0d..e84ea2cf048b358e965552e99c43cfd1790165fd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,11 +13,11 @@ members = ["crt0"]
 [dependencies]
 compiler_builtins = { git = "https://github.com/rust-lang-nursery/compiler-builtins.git", default-features = false, features = ["mem"] }
 platform = { path = "platform" }
-fcntl = { path = "fcntl" }
-stdio = { path = "stdio" }
-stdlib = { path = "stdlib" }
-string = { path = "string" }
-unistd = { path = "unistd" }
+fcntl = { path = "src/fcntl" }
+stdio = { path = "src/stdio" }
+stdlib = { path = "src/stdlib" }
+string = { path = "src/string" }
+unistd = { path = "src/unistd" }
 
 [profile.dev]
 panic = "abort"
diff --git a/fcntl/Cargo.toml b/src/fcntl/Cargo.toml
similarity index 65%
rename from fcntl/Cargo.toml
rename to src/fcntl/Cargo.toml
index fbf73b66cc1c8b836cb2380550bc3f004adbddf1..9eb0cb9a702afd7d14ba72572863a49f6b2405d7 100644
--- a/fcntl/Cargo.toml
+++ b/src/fcntl/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
 build = "build.rs"
 
 [build-dependencies]
-cbindgen = { path = "../cbindgen" }
+cbindgen = { path = "../../cbindgen" }
 
 [dependencies]
-platform = { path = "../platform" }
+platform = { path = "../../platform" }
diff --git a/stdlib/build.rs b/src/fcntl/build.rs
similarity index 60%
rename from stdlib/build.rs
rename to src/fcntl/build.rs
index 0a0b7570c26993914850b4d517455cd9a188e3fc..b5f6c10ba6f0d5e1c08ef81770bb775cc9be8f0f 100644
--- a/stdlib/build.rs
+++ b/src/fcntl/build.rs
@@ -4,8 +4,8 @@ use std::{env, fs};
 
 fn main() {
     let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
-    fs::create_dir_all("../target/include").expect("failed to create include directory");
+    fs::create_dir_all("../../target/include").expect("failed to create include directory");
     cbindgen::generate(crate_dir)
       .expect("failed to generate bindings")
-      .write_to_file("../target/include/stdlib.h");
+      .write_to_file("../../target/include/fcntl.h");
 }
diff --git a/fcntl/cbindgen.toml b/src/fcntl/cbindgen.toml
similarity index 100%
rename from fcntl/cbindgen.toml
rename to src/fcntl/cbindgen.toml
diff --git a/fcntl/src/lib.rs b/src/fcntl/src/lib.rs
similarity index 100%
rename from fcntl/src/lib.rs
rename to src/fcntl/src/lib.rs
diff --git a/fcntl/src/linux.rs b/src/fcntl/src/linux.rs
similarity index 100%
rename from fcntl/src/linux.rs
rename to src/fcntl/src/linux.rs
diff --git a/fcntl/src/redox.rs b/src/fcntl/src/redox.rs
similarity index 100%
rename from fcntl/src/redox.rs
rename to src/fcntl/src/redox.rs
diff --git a/stdio/Cargo.toml b/src/stdio/Cargo.toml
similarity index 72%
rename from stdio/Cargo.toml
rename to src/stdio/Cargo.toml
index 79147417312840e9a17a86bc5ceaf43946743fff..78c082e15add37be8ca15b49e03a4617183d010a 100644
--- a/stdio/Cargo.toml
+++ b/src/stdio/Cargo.toml
@@ -5,8 +5,8 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
 build = "build.rs"
 
 [build-dependencies]
-cbindgen = { path = "../cbindgen" }
+cbindgen = { path = "../../cbindgen" }
 
 [dependencies]
-platform = { path = "../platform" }
+platform = { path = "../../platform" }
 va_list = { version = "0.1", features = ["no_std"] }
diff --git a/fcntl/build.rs b/src/stdio/build.rs
similarity index 60%
rename from fcntl/build.rs
rename to src/stdio/build.rs
index b04c12cdaf51c793d6d4c86b9e066cbc4b5cf7b0..dc48bf16c58ed1177b17a14a6df4a29fc9d74f79 100644
--- a/fcntl/build.rs
+++ b/src/stdio/build.rs
@@ -4,8 +4,8 @@ use std::{env, fs};
 
 fn main() {
     let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
-    fs::create_dir_all("../target/include").expect("failed to create include directory");
+    fs::create_dir_all("../../target/include").expect("failed to create include directory");
     cbindgen::generate(crate_dir)
       .expect("failed to generate bindings")
-      .write_to_file("../target/include/fcntl.h");
+      .write_to_file("../../target/include/stdio.h");
 }
diff --git a/stdio/cbindgen.toml b/src/stdio/cbindgen.toml
similarity index 100%
rename from stdio/cbindgen.toml
rename to src/stdio/cbindgen.toml
diff --git a/stdio/src/lib.rs b/src/stdio/src/lib.rs
similarity index 100%
rename from stdio/src/lib.rs
rename to src/stdio/src/lib.rs
diff --git a/stdio/src/printf.rs b/src/stdio/src/printf.rs
similarity index 100%
rename from stdio/src/printf.rs
rename to src/stdio/src/printf.rs
diff --git a/stdlib/Cargo.toml b/src/stdlib/Cargo.toml
similarity index 52%
rename from stdlib/Cargo.toml
rename to src/stdlib/Cargo.toml
index 7becd734a375ace7f2f001648ade952ecb844f4e..ed0dce3f95c4ed15d695ec988e3631b03a417b6a 100644
--- a/stdlib/Cargo.toml
+++ b/src/stdlib/Cargo.toml
@@ -5,8 +5,8 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
 build = "build.rs"
 
 [build-dependencies]
-cbindgen = { path = "../cbindgen" }
+cbindgen = { path = "../../cbindgen" }
 
 [dependencies]
-platform = { path = "../platform" }
-ralloc = { path = "../ralloc", default-features = false }
+platform = { path = "../../platform" }
+ralloc = { path = "../../ralloc", default-features = false }
diff --git a/string/build.rs b/src/stdlib/build.rs
similarity index 60%
rename from string/build.rs
rename to src/stdlib/build.rs
index 1aca9f78199a6c6a06eab01a8d6a5d8369b81ef5..7a6ca43d98c083697f2f35de0bbd5bcdd72e9c5f 100644
--- a/string/build.rs
+++ b/src/stdlib/build.rs
@@ -4,8 +4,8 @@ use std::{env, fs};
 
 fn main() {
     let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
-    fs::create_dir_all("../target/include").expect("failed to create include directory");
+    fs::create_dir_all("../../target/include").expect("failed to create include directory");
     cbindgen::generate(crate_dir)
       .expect("failed to generate bindings")
-      .write_to_file("../target/include/string.h");
+      .write_to_file("../../target/include/stdlib.h");
 }
diff --git a/stdlib/cbindgen.toml b/src/stdlib/cbindgen.toml
similarity index 100%
rename from stdlib/cbindgen.toml
rename to src/stdlib/cbindgen.toml
diff --git a/stdlib/src/lib.rs b/src/stdlib/src/lib.rs
similarity index 100%
rename from stdlib/src/lib.rs
rename to src/stdlib/src/lib.rs
diff --git a/string/Cargo.toml b/src/string/Cargo.toml
similarity index 65%
rename from string/Cargo.toml
rename to src/string/Cargo.toml
index 2e110e97a9a59a304a24ddeb6bbfe6dac7946792..9c58c499ca9cbf6879098ccda9e28fb1a81b49f4 100644
--- a/string/Cargo.toml
+++ b/src/string/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
 build = "build.rs"
 
 [build-dependencies]
-cbindgen = { path = "../cbindgen" }
+cbindgen = { path = "../../cbindgen" }
 
 [dependencies]
-platform = { path = "../platform" }
+platform = { path = "../../platform" }
diff --git a/stdio/build.rs b/src/string/build.rs
similarity index 60%
rename from stdio/build.rs
rename to src/string/build.rs
index f79b6f43bcb2883f348c5fcb947d456f82862d56..8cfc6ee6c7c32c4fb01ccb74fc40669b4441ce83 100644
--- a/stdio/build.rs
+++ b/src/string/build.rs
@@ -4,8 +4,8 @@ use std::{env, fs};
 
 fn main() {
     let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
-    fs::create_dir_all("../target/include").expect("failed to create include directory");
+    fs::create_dir_all("../../target/include").expect("failed to create include directory");
     cbindgen::generate(crate_dir)
       .expect("failed to generate bindings")
-      .write_to_file("../target/include/stdio.h");
+      .write_to_file("../../target/include/string.h");
 }
diff --git a/string/cbindgen.toml b/src/string/cbindgen.toml
similarity index 100%
rename from string/cbindgen.toml
rename to src/string/cbindgen.toml
diff --git a/string/src/lib.rs b/src/string/src/lib.rs
similarity index 100%
rename from string/src/lib.rs
rename to src/string/src/lib.rs
diff --git a/aio/lib.rs b/src/todo/aio/lib.rs
similarity index 100%
rename from aio/lib.rs
rename to src/todo/aio/lib.rs
diff --git a/ctype/lib.rs b/src/todo/ctype/lib.rs
similarity index 100%
rename from ctype/lib.rs
rename to src/todo/ctype/lib.rs
diff --git a/grp/lib.rs b/src/todo/grp/lib.rs
similarity index 100%
rename from grp/lib.rs
rename to src/todo/grp/lib.rs
diff --git a/mman/lib.rs b/src/todo/mman/lib.rs
similarity index 100%
rename from mman/lib.rs
rename to src/todo/mman/lib.rs
diff --git a/pthread/lib.rs b/src/todo/pthread/lib.rs
similarity index 100%
rename from pthread/lib.rs
rename to src/todo/pthread/lib.rs
diff --git a/semaphore/lib.rs b/src/todo/semaphore/lib.rs
similarity index 100%
rename from semaphore/lib.rs
rename to src/todo/semaphore/lib.rs
diff --git a/wchar/lib.rs b/src/todo/wchar/lib.rs
similarity index 100%
rename from wchar/lib.rs
rename to src/todo/wchar/lib.rs
diff --git a/wctype/lib.rs b/src/todo/wctype/lib.rs
similarity index 100%
rename from wctype/lib.rs
rename to src/todo/wctype/lib.rs
diff --git a/unistd/Cargo.toml b/src/unistd/Cargo.toml
similarity index 65%
rename from unistd/Cargo.toml
rename to src/unistd/Cargo.toml
index 1a3bb22fe66ebcd64bb8874f454f4af0d1dfa65b..e678f3a96b7088d2fbb40bf7e51f769c6bd76e51 100644
--- a/unistd/Cargo.toml
+++ b/src/unistd/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
 build = "build.rs"
 
 [build-dependencies]
-cbindgen = { path = "../cbindgen" }
+cbindgen = { path = "../../cbindgen" }
 
 [dependencies]
-platform = { path = "../platform" }
+platform = { path = "../../platform" }
diff --git a/src/unistd/build.rs b/src/unistd/build.rs
new file mode 100644
index 0000000000000000000000000000000000000000..73e152d892c4ed5eb10c21d60e97197fee235d05
--- /dev/null
+++ b/src/unistd/build.rs
@@ -0,0 +1,11 @@
+extern crate cbindgen;
+
+use std::{env, fs};
+
+fn main() {
+    let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
+    fs::create_dir_all("../../target/include").expect("failed to create include directory");
+    cbindgen::generate(crate_dir)
+      .expect("failed to generate bindings")
+      .write_to_file("../../target/include/unistd.h");
+}
diff --git a/unistd/cbindgen.toml b/src/unistd/cbindgen.toml
similarity index 100%
rename from unistd/cbindgen.toml
rename to src/unistd/cbindgen.toml
diff --git a/unistd/src/lib.rs b/src/unistd/src/lib.rs
similarity index 100%
rename from unistd/src/lib.rs
rename to src/unistd/src/lib.rs
diff --git a/unistd/build.rs b/unistd/build.rs
deleted file mode 100644
index c12853664c1430d199987b9cf572884ac95105cd..0000000000000000000000000000000000000000
--- a/unistd/build.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-extern crate cbindgen;
-
-use std::{env, fs};
-
-fn main() {
-    let crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
-    fs::create_dir_all("../target/include").expect("failed to create include directory");
-    cbindgen::generate(crate_dir)
-      .expect("failed to generate bindings")
-      .write_to_file("../target/include/unistd.h");
-}