diff --git a/src/header/assert/mod.rs b/src/header/assert/mod.rs
index 2b65a328922a5e262fccae50194ddd76332f3ca3..64af2af769a96340933d343cef0d0ff901c123bf 100644
--- a/src/header/assert/mod.rs
+++ b/src/header/assert/mod.rs
@@ -1,10 +1,6 @@
 //! assert implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/assert.h.html
 
-use crate::{
-    c_str::CStr,
-    header::{stdio, stdlib},
-    platform::types::*,
-};
+use crate::{c_str::CStr, platform::types::*};
 
 #[no_mangle]
 pub unsafe extern "C" fn __assert_fail(
diff --git a/src/header/bits_pthread/mod.rs b/src/header/bits_pthread/mod.rs
index 27446c010e4b9006c65480b16111c4872e820685..b5b6de646ebf5bf3312627bf907f398f582288dd 100644
--- a/src/header/bits_pthread/mod.rs
+++ b/src/header/bits_pthread/mod.rs
@@ -2,11 +2,6 @@
 
 use crate::platform::types::*;
 
-use crate::header::sched::sched_param;
-
-use crate::sync::AtomicLock;
-use core::sync::atomic::{AtomicI32 as AtomicInt, AtomicU32 as AtomicUint};
-
 // XXX: https://github.com/eqrion/cbindgen/issues/685
 //
 // We need to write the opaque types ourselves, and apparently cbindgen doesn't even support
diff --git a/src/header/bits_sched/mod.rs b/src/header/bits_sched/mod.rs
index 149fc8eb0956c93b019f29e22ecf1999fb69d1a4..918c3c7f23d3b5281d5a19cb5866995f394c88ba 100644
--- a/src/header/bits_sched/mod.rs
+++ b/src/header/bits_sched/mod.rs
@@ -1,3 +1 @@
 #![allow(non_camel_case_types)]
-
-use crate::platform::types::*;
diff --git a/src/header/inttypes/mod.rs b/src/header/inttypes/mod.rs
index 089ac5e7c9e4905c0974adbafaf252b8f439bf49..526e5af62ab1fe6a4c6d88fd25dc9a5098ba36ee 100644
--- a/src/header/inttypes/mod.rs
+++ b/src/header/inttypes/mod.rs
@@ -1,7 +1,5 @@
-use core::{convert::TryInto, ptr};
-
 use crate::{
-    header::{ctype, errno::*, stdlib::*, wctype::iswspace},
+    header::{ctype, errno::*, stdlib::*},
     platform::{self, types::*},
 };
 
@@ -10,7 +8,6 @@ pub extern "C" fn imaxabs(i: intmax_t) -> intmax_t {
     i.abs()
 }
 
-#[no_mangle]
 #[repr(C)]
 pub struct imaxdiv_t {
     quot: intmax_t,
diff --git a/src/header/locale/mod.rs b/src/header/locale/mod.rs
index 1f275ed4d7a2488e512a28d8c475e0c739873fe8..130d5be28096ea4f0421118e676daa77a3b08b67 100644
--- a/src/header/locale/mod.rs
+++ b/src/header/locale/mod.rs
@@ -9,7 +9,6 @@ const EMPTY_PTR: *const c_char = "\0" as *const _ as *const c_char;
 static mut C_LOCALE: [c_char; 2] = [b'C' as c_char, 0];
 
 #[repr(C)]
-#[no_mangle]
 pub struct lconv {
     currency_symbol: *const c_char,
     decimal_point: *const c_char,
diff --git a/src/header/netdb/dns/mod.rs b/src/header/netdb/dns/mod.rs
index 30847ddf884300306b42afaaf585bd36102fca82..2d73281b61676af14c42afefcd381b36c563fc1b 100644
--- a/src/header/netdb/dns/mod.rs
+++ b/src/header/netdb/dns/mod.rs
@@ -11,46 +11,10 @@
 pub use self::{answer::DnsAnswer, query::DnsQuery};
 
 use alloc::{string::String, vec::Vec};
-use core::{slice, u16};
 
 mod answer;
 mod query;
 
-#[allow(non_camel_case_types)]
-#[derive(Copy, Clone, Debug, Default)]
-#[repr(packed)]
-pub struct n16 {
-    inner: u16,
-}
-
-impl n16 {
-    pub fn as_bytes(&self) -> &[u8] {
-        unsafe { slice::from_raw_parts(core::ptr::addr_of!(self.inner).cast::<u8>(), 2) }
-    }
-
-    pub fn from_bytes(bytes: &[u8]) -> Self {
-        n16 {
-            inner: unsafe {
-                slice::from_raw_parts(bytes.as_ptr() as *const u16, bytes.len() / 2)[0]
-            },
-        }
-    }
-}
-
-impl From<u16> for n16 {
-    fn from(value: u16) -> Self {
-        n16 {
-            inner: value.to_be(),
-        }
-    }
-}
-
-impl From<n16> for u16 {
-    fn from(value: n16) -> Self {
-        u16::from_be(value.inner)
-    }
-}
-
 #[derive(Clone, Debug)]
 pub struct Dns {
     pub transaction_id: u16,
@@ -67,13 +31,13 @@ impl Dns {
             ($value:expr) => {
                 data.push($value);
             };
-        };
+        }
 
         macro_rules! push_n16 {
             ($value:expr) => {
-                data.extend_from_slice(n16::from($value).as_bytes());
+                data.extend_from_slice(&u16::to_be_bytes($value));
             };
-        };
+        }
 
         push_n16!(self.transaction_id);
         push_n16!(self.flags);
@@ -106,17 +70,19 @@ impl Dns {
                 }
                 data[i - 1]
             }};
-        };
+        }
 
         macro_rules! pop_n16 {
             () => {{
+                use core::convert::TryInto;
                 i += 2;
                 if i > data.len() {
                     return Err(format!("{}: {}: pop_n16", file!(), line!()));
                 }
-                u16::from(n16::from_bytes(&data[i - 2..i]))
+                let bytes: [u8; 2] = data[i - 2..i].try_into().unwrap();
+                u16::from_be_bytes(bytes)
             }};
-        };
+        }
 
         macro_rules! pop_data {
             () => {{
@@ -129,7 +95,7 @@ impl Dns {
 
                 data
             }};
-        };
+        }
 
         macro_rules! pop_name {
             () => {{
@@ -160,7 +126,7 @@ impl Dns {
 
                 name
             }};
-        };
+        }
 
         let transaction_id = pop_n16!();
         let flags = pop_n16!();
diff --git a/src/header/pthread/mod.rs b/src/header/pthread/mod.rs
index 253dd656b3e3317c0406fb5ca6bdb66a0d0ea814..b4bd9ab9eef0865263930b2eb8e52e609264371e 100644
--- a/src/header/pthread/mod.rs
+++ b/src/header/pthread/mod.rs
@@ -1,10 +1,10 @@
 //! pthread.h implementation for Redox, following https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html
 
-use core::{cell::Cell, ptr::NonNull};
+use core::cell::Cell;
 
 use crate::{
     header::{sched::*, time::timespec},
-    platform::{self, types::*, Pal, Sys},
+    platform::{types::*, Pal, Sys},
     pthread,
 };
 
diff --git a/src/header/pthread/mutex.rs b/src/header/pthread/mutex.rs
index d24f6b7ccde46d7cefccfae63902b47270cff3a7..6b89f266c847cbf7d3fb009944f8c3ec0322e0b6 100644
--- a/src/header/pthread/mutex.rs
+++ b/src/header/pthread/mutex.rs
@@ -1,8 +1,6 @@
 use super::*;
 
-use crate::{header::errno::*, pthread::Errno};
-
-use core::sync::atomic::AtomicI32 as AtomicInt;
+use crate::pthread::Errno;
 
 // PTHREAD_MUTEX_INITIALIZER is defined in bits_pthread/cbindgen.toml
 
diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs
index a80ae0d4321e80803b8dda5e2aafdb80f406a987..a071ad7dafceee3e61d7d82bafd2f2237fddd26c 100644
--- a/src/header/signal/mod.rs
+++ b/src/header/signal/mod.rs
@@ -352,7 +352,7 @@ pub extern "C" fn sigwait(set: *const sigset_t, sig: *mut c_int) -> c_int {
         return -1;
     }
     unsafe {
-        let mut info = pinfo.assume_init();
+        let info = pinfo.assume_init();
         (*sig) = info.si_signo;
     }
     0
diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs
index 6148e6fb15b043f2c29fa41a781a91af453d79b7..5a43bd8d35145ff39c32ee66a6062e644d9a61ba 100644
--- a/src/header/stdio/mod.rs
+++ b/src/header/stdio/mod.rs
@@ -1238,7 +1238,7 @@ pub unsafe extern "C" fn vsscanf(s: *const c_char, format: *const c_char, ap: va
 pub unsafe fn flush_io_streams() {
     let flush = |stream: *mut FILE| {
         let stream = &mut *stream;
-        stream.flush()
+        let _ = stream.flush();
     };
     flush(stdout);
     flush(stderr);
diff --git a/src/header/stdio/scanf.rs b/src/header/stdio/scanf.rs
index 4a8b63c937fd4862322fdd25bc80ea6bc9244a28..c96c0ddfccc44ea8945d11db6061f2ace913e05c 100644
--- a/src/header/stdio/scanf.rs
+++ b/src/header/stdio/scanf.rs
@@ -239,13 +239,13 @@ unsafe fn inner_scanf(
                             }
                         }};
                         (c_double) => {
-                            parse_type!(noformat c_double);
+                            parse_type!(noformat c_double)
                         };
                         (c_float) => {
-                            parse_type!(noformat c_float);
+                            parse_type!(noformat c_float)
                         };
                         ($type:ident) => {
-                            parse_type!($type, $type);
+                            parse_type!($type, $type)
                         };
                         ($type:ident, $final:ty) => {{
                             let n = if n.is_empty() {
diff --git a/src/ld_so/mod.rs b/src/ld_so/mod.rs
index f9c474f839436519faa48ac49b0d8e98d242e025..809dad7ebd4e5d18aed04d30792e6cfc3df944b8 100644
--- a/src/ld_so/mod.rs
+++ b/src/ld_so/mod.rs
@@ -31,9 +31,7 @@ static mut STATIC_TCB_MASTER: Master = Master {
 fn panic_notls(msg: impl core::fmt::Display) -> ! {
     eprintln!("panicked in ld.so: {}", msg);
 
-    unsafe {
-        core::intrinsics::abort();
-    }
+    core::intrinsics::abort();
 }
 
 pub trait ExpectTlsFree {
@@ -140,12 +138,14 @@ pub fn static_init(sp: &'static Stack) {
 
 #[cfg(any(target_os = "linux", target_os = "redox"))]
 pub unsafe fn init(sp: &'static Stack) {
-    let mut tp = 0usize;
+    let tp: usize;
 
     #[cfg(target_os = "linux")]
     {
         const ARCH_GET_FS: usize = 0x1003;
-        syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut tp as *mut usize);
+        let mut val = 0usize;
+        syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut val as *mut usize);
+        tp = val;
     }
     #[cfg(all(target_os = "redox", target_arch = "aarch64"))]
     {
diff --git a/src/platform/redox/clone.rs b/src/platform/redox/clone.rs
index 5f32f0207ebd21ca35723353192a1ee711f90736..f35a41fec9651398e91024c56a9da1f5630a7e11 100644
--- a/src/platform/redox/clone.rs
+++ b/src/platform/redox/clone.rs
@@ -1,10 +1,6 @@
-use core::{arch::global_asm, mem::size_of};
-
-use alloc::{boxed::Box, vec::Vec};
-
 use syscall::{
     data::Map,
-    error::{Error, Result, EINVAL, ENAMETOOLONG},
+    error::Result,
     flag::{MapFlags, O_CLOEXEC},
     SIGCONT,
 };
diff --git a/src/platform/redox/exec.rs b/src/platform/redox/exec.rs
index a8b97ec9ff5d5cf57c42e6e1640ddd910f6ef757..77cb697733328e83d8c8fd42fe896b24147d0878 100644
--- a/src/platform/redox/exec.rs
+++ b/src/platform/redox/exec.rs
@@ -2,7 +2,7 @@ use crate::{
     c_str::{CStr, CString},
     core_io::{prelude::*, BufReader, SeekFrom},
     fs::File,
-    header::{fcntl, string::strlen},
+    header::string::strlen,
     platform::{
         sys::{S_ISGID, S_ISUID},
         types::*,
diff --git a/src/platform/redox/extra.rs b/src/platform/redox/extra.rs
index 597e2c7eb6d5afb68abb97ae1e21b83812713c2f..9ed051cfeb603b71b7e4943e993fad3b97a72fff 100644
--- a/src/platform/redox/extra.rs
+++ b/src/platform/redox/extra.rs
@@ -1,4 +1,4 @@
-use core::{mem::size_of, ptr, slice};
+use core::{ptr, slice};
 
 use crate::platform::{sys::e, types::*};
 
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index 767b94b72dd64f2492b29f9ba2c55e60f419fd68..ab190bc96628fc584e78b762b3be07f4597f95c2 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -1,4 +1,4 @@
-use core::{arch::asm, convert::TryFrom, mem, ptr, result::Result as CoreResult, slice, str};
+use core::{convert::TryFrom, mem, ptr, result::Result as CoreResult, slice, str};
 
 use syscall::{
     self,
@@ -13,7 +13,6 @@ use crate::{
         dirent::dirent,
         errno::{EINVAL, EIO, ENOMEM, ENOSYS, EPERM, ERANGE},
         fcntl,
-        string::strlen,
         sys_mman::{MAP_ANONYMOUS, PROT_READ, PROT_WRITE},
         sys_random,
         sys_resource::{rlimit, RLIM_INFINITY},
@@ -25,7 +24,7 @@ use crate::{
         time::timespec,
         unistd::{F_OK, R_OK, W_OK, X_OK},
     },
-    io::{self, prelude::*, BufReader, SeekFrom},
+    io::{self, prelude::*, BufReader},
 };
 
 pub use redox_exec::FdGuard;
diff --git a/src/platform/redox/path.rs b/src/platform/redox/path.rs
index 31d2537554fcfb0b868910593163e6d1a48e5873..eb97b42f21147adac05a6a544e85b7d84b8625c2 100644
--- a/src/platform/redox/path.rs
+++ b/src/platform/redox/path.rs
@@ -1,11 +1,6 @@
 use syscall::{data::Stat, error::*, flag::*};
 
-use alloc::{
-    borrow::{Cow, ToOwned},
-    boxed::Box,
-    string::String,
-    vec::Vec,
-};
+use alloc::{borrow::ToOwned, boxed::Box, string::String, vec::Vec};
 
 use super::FdGuard;
 use crate::sync::Mutex;
diff --git a/src/platform/redox/ptrace.rs b/src/platform/redox/ptrace.rs
index 4216922180079ea3e48f7ed7b3d35119bb68417a..3d8dba4f329d4cd6e1103d439e3dbcbbf49e9501 100644
--- a/src/platform/redox/ptrace.rs
+++ b/src/platform/redox/ptrace.rs
@@ -14,7 +14,7 @@ use crate::{
     fs::File,
     header::{errno as errnoh, fcntl, signal, sys_ptrace},
     io::{self, prelude::*},
-    sync::{Mutex, Once},
+    sync::Mutex,
 };
 
 use alloc::collections::{btree_map::Entry, BTreeMap};
diff --git a/src/platform/redox/redox-exec/src/lib.rs b/src/platform/redox/redox-exec/src/lib.rs
index 768dfa681410ef51179f3c97158e11f12c2ba2e9..f7527e4627b50bf05b9aa216cec84db8074777dc 100644
--- a/src/platform/redox/redox-exec/src/lib.rs
+++ b/src/platform/redox/redox-exec/src/lib.rs
@@ -1,5 +1,5 @@
 #![no_std]
-#![feature(array_chunks, map_first_last)]
+#![feature(array_chunks)]
 
 extern crate alloc;
 
diff --git a/src/pthread/mod.rs b/src/pthread/mod.rs
index 99a36251e4c86e3055e826ed00576a2254292f47..ce380d92dbddd400f071e5bb497d3ff161148167 100644
--- a/src/pthread/mod.rs
+++ b/src/pthread/mod.rs
@@ -3,10 +3,10 @@
 use core::{
     cell::{Cell, UnsafeCell},
     ptr::NonNull,
-    sync::atomic::{AtomicBool, AtomicU32, AtomicUsize, Ordering},
+    sync::atomic::{AtomicBool, AtomicUsize, Ordering},
 };
 
-use alloc::{boxed::Box, collections::BTreeMap, vec::Vec};
+use alloc::{boxed::Box, collections::BTreeMap};
 
 use crate::{
     header::{errno::*, pthread as header, sched::sched_param, sys_mman},
@@ -84,8 +84,6 @@ pub struct OsTid {
 unsafe impl Send for Pthread {}
 unsafe impl Sync for Pthread {}
 
-use crate::header::bits_pthread::pthread_attr_t;
-
 /// Positive error codes (EINVAL, not -EINVAL).
 #[derive(Debug, Eq, PartialEq)]
 // TODO: Move to a more generic place.
diff --git a/src/sync/barrier.rs b/src/sync/barrier.rs
index 6e027364a90400576db9a4f92e73ca929540efbd..9ae84a60efcccc74d4eb69ca0c0e160da0931045 100644
--- a/src/sync/barrier.rs
+++ b/src/sync/barrier.rs
@@ -1,8 +1,4 @@
-use core::{
-    cmp,
-    num::NonZeroU32,
-    sync::atomic::{AtomicU32 as AtomicUint, Ordering},
-};
+use core::num::NonZeroU32;
 
 pub struct Barrier {
     original_count: NonZeroU32,
diff --git a/src/sync/cond.rs b/src/sync/cond.rs
index 43b620fee81748d0ae5c826f49645f43bb5a0795..ee7ff97bd2eefaf8e3252d96faaa6f08cdf8a4b3 100644
--- a/src/sync/cond.rs
+++ b/src/sync/cond.rs
@@ -1,7 +1,7 @@
 // Used design from https://www.remlab.net/op/futex-condvar.shtml
 
 use crate::{
-    header::{bits_pthread::*, pthread::*, time::timespec},
+    header::{pthread::*, time::timespec},
     pthread::Errno,
 };
 
diff --git a/src/sync/once.rs b/src/sync/once.rs
index b554f24bc90247c441a5ab0160f2e008697eed49..293ab84cb9a2c5c62dca09a281060d8a26b85a08 100644
--- a/src/sync/once.rs
+++ b/src/sync/once.rs
@@ -1,4 +1,4 @@
-use super::{AtomicLock, AttemptStatus};
+use super::AttemptStatus;
 use crate::platform::types::*;
 use core::{
     cell::UnsafeCell,
diff --git a/src/sync/pthread_mutex.rs b/src/sync/pthread_mutex.rs
index 05d75daccc2bb96a1847f5d4919e6e35d955a52a..cb08dde8cc2ca5da7a7f665bf20f61fb4b4ba74a 100644
--- a/src/sync/pthread_mutex.rs
+++ b/src/sync/pthread_mutex.rs
@@ -4,7 +4,7 @@ use core::{
 };
 
 use crate::{
-    header::{errno::*, pthread::*, sys_wait::*, time::timespec},
+    header::{errno::*, pthread::*, time::timespec},
     pthread::*,
 };
 
diff --git a/src/sync/semaphore.rs b/src/sync/semaphore.rs
index 1bad9e30a5b04c7cb4aecb6703a1214feff622ca..c0a0b3a2ad7a4dc9ddc9ef10bc573c9368a1018d 100644
--- a/src/sync/semaphore.rs
+++ b/src/sync/semaphore.rs
@@ -1,10 +1,9 @@
 // From https://www.remlab.net/op/futex-misc.shtml
 //TODO: improve implementation
 
-use super::AtomicLock;
 use crate::{
     header::time::{clock_gettime, timespec, CLOCK_MONOTONIC},
-    platform::{types::*, Pal, Sys},
+    platform::types::*,
 };
 
 use core::sync::atomic::{AtomicU32, Ordering};