diff --git a/src/arch/x86_64/kernel/acpi.rs b/src/arch/x86_64/kernel/acpi.rs
index ebd95c194b708d21154efe9cc17db5e868c29e50..ae10eb07557de22524e05255328232d363c63d75 100644
--- a/src/arch/x86_64/kernel/acpi.rs
+++ b/src/arch/x86_64/kernel/acpi.rs
@@ -1,6 +1,7 @@
 use core::convert::Infallible;
 use core::{mem, ptr, slice, str};
 
+use x86::io::*;
 use x86_64::structures::paging::PhysFrame;
 
 use crate::arch::x86_64::kernel::processor;
@@ -8,7 +9,6 @@ use crate::arch::x86_64::mm::paging::{
 	BasePageSize, PageSize, PageTableEntryFlags, PageTableEntryFlagsExt,
 };
 use crate::arch::x86_64::mm::{paging, virtualmem, PhysAddr, VirtAddr};
-use crate::x86::io::*;
 
 /// Memory at this physical address is supposed to contain a pointer to the Extended BIOS Data Area (EBDA).
 const EBDA_PTR_LOCATION: PhysAddr = PhysAddr(0x0000_040E);
diff --git a/src/arch/x86_64/kernel/apic.rs b/src/arch/x86_64/kernel/apic.rs
index bde3b1c4462ce7ca82028b7ea8c9be4f52ab0e6d..7748e188c9e76716e16ed89bbb39c3745a1a26a5 100644
--- a/src/arch/x86_64/kernel/apic.rs
+++ b/src/arch/x86_64/kernel/apic.rs
@@ -11,6 +11,9 @@ use core::{cmp, fmt, mem, u32};
 use arch::x86_64::kernel::percore::*;
 use arch::x86_64::kernel::{idt, irq, processor};
 use crossbeam_utils::CachePadded;
+#[cfg(feature = "smp")]
+use x86::controlregs::*;
+use x86::msr::*;
 
 #[cfg(feature = "acpi")]
 use crate::arch::x86_64::kernel::acpi;
@@ -23,9 +26,6 @@ use crate::arch::x86_64::mm::{paging, virtualmem, PhysAddr, VirtAddr};
 use crate::collections::irqsave;
 use crate::config::*;
 use crate::scheduler::CoreId;
-#[cfg(feature = "smp")]
-use crate::x86::controlregs::*;
-use crate::x86::msr::*;
 use crate::{arch, env, mm, scheduler};
 
 const MP_FLT_SIGNATURE: u32 = 0x5f504d5f;
diff --git a/src/arch/x86_64/kernel/gdt.rs b/src/arch/x86_64/kernel/gdt.rs
index 93079a26a403366932adc88e390e859feb873d52..084ffc421cfe933fa2e860be8f068bb00b7692be 100644
--- a/src/arch/x86_64/kernel/gdt.rs
+++ b/src/arch/x86_64/kernel/gdt.rs
@@ -2,16 +2,17 @@ use alloc::boxed::Box;
 use core::mem;
 use core::sync::atomic::Ordering;
 
+use x86::bits64::segmentation::*;
+use x86::bits64::task::*;
+use x86::dtables::{self, DescriptorTablePointer};
+use x86::segmentation::*;
+use x86::task::*;
+use x86::Ring;
+
 use super::scheduler::TaskStacks;
 use super::CURRENT_STACK_ADDRESS;
 use crate::arch::x86_64::kernel::percore::*;
 use crate::config::*;
-use crate::x86::bits64::segmentation::*;
-use crate::x86::bits64::task::*;
-use crate::x86::dtables::{self, DescriptorTablePointer};
-use crate::x86::segmentation::*;
-use crate::x86::task::*;
-use crate::x86::Ring;
 
 pub const GDT_NULL: u16 = 0;
 pub const GDT_KERNEL_CODE: u16 = 1;
diff --git a/src/arch/x86_64/kernel/idt.rs b/src/arch/x86_64/kernel/idt.rs
index 75c904d164d81b461fb815f81d1c3bfba221f601..8c0132c8c8515a8ee2f930589ed44501792ed333 100644
--- a/src/arch/x86_64/kernel/idt.rs
+++ b/src/arch/x86_64/kernel/idt.rs
@@ -1,10 +1,11 @@
 use core::sync::atomic::{AtomicBool, Ordering};
 
+use x86::bits64::paging::VAddr;
+use x86::dtables::{self, DescriptorTablePointer};
+use x86::segmentation::{SegmentSelector, SystemDescriptorTypes64};
+use x86::Ring;
+
 use crate::arch::x86_64::kernel::gdt;
-use crate::x86::bits64::paging::VAddr;
-use crate::x86::dtables::{self, DescriptorTablePointer};
-use crate::x86::segmentation::{SegmentSelector, SystemDescriptorTypes64};
-use crate::x86::Ring;
 
 /// An interrupt gate descriptor.
 ///
diff --git a/src/arch/x86_64/kernel/irq.rs b/src/arch/x86_64/kernel/irq.rs
index dd0e4a30ad9b9ba054cd616cbc431133e3f9848f..d35ba137d0368e9d4dc2d5b4a55b38389d0f2171 100644
--- a/src/arch/x86_64/kernel/irq.rs
+++ b/src/arch/x86_64/kernel/irq.rs
@@ -1,5 +1,5 @@
 use alloc::collections::BTreeMap;
-use alloc::string::String;
+use alloc::string::{String, ToString};
 use core::arch::asm;
 use core::fmt;
 
@@ -7,7 +7,6 @@ use x86::bits64::rflags::{self, RFlags};
 use x86::irq::PageFaultError;
 use x86::{controlregs, irq};
 
-use crate::alloc::string::ToString;
 use crate::arch::x86_64::kernel::percore::*;
 use crate::arch::x86_64::kernel::{apic, idt, processor};
 use crate::scheduler;
diff --git a/src/arch/x86_64/kernel/pci.rs b/src/arch/x86_64/kernel/pci.rs
index db8606d8efdff3e526f6226ff4fc1cad4f20ad5f..ae0d1da9581f169089741747a65e19fb745abc11 100644
--- a/src/arch/x86_64/kernel/pci.rs
+++ b/src/arch/x86_64/kernel/pci.rs
@@ -2,6 +2,7 @@ use alloc::vec::Vec;
 use core::{fmt, u32, u8};
 
 use num_derive::{FromPrimitive, ToPrimitive};
+use x86::io::*;
 
 use crate::arch::x86_64::mm::{PhysAddr, VirtAddr};
 use crate::collections::irqsave;
@@ -12,7 +13,6 @@ use crate::drivers::virtio::depr::virtio_fs::VirtioFsDriver;
 use crate::drivers::virtio::transport::pci as pci_virtio;
 use crate::drivers::virtio::transport::pci::VirtioDriver;
 use crate::synch::spinlock::SpinlockIrqSave;
-use crate::x86::io::*;
 
 // TODO: should these be pub? currently needed since used in virtio.rs maybe use getter methods to be more flexible.
 pub const PCI_MAX_BUS_NUMBER: u8 = 32;
diff --git a/src/arch/x86_64/kernel/percore.rs b/src/arch/x86_64/kernel/percore.rs
index a817f888b53944e9671b092beb480d42bf8e2960..12415c9843c62357d26f344729e34ef45ec02f09 100644
--- a/src/arch/x86_64/kernel/percore.rs
+++ b/src/arch/x86_64/kernel/percore.rs
@@ -3,11 +3,11 @@ use core::sync::atomic::{AtomicU64, Ordering};
 use core::{mem, ptr};
 
 use crossbeam_utils::CachePadded;
+use x86::bits64::task::TaskStateSegment;
+use x86::msr::*;
 
 use crate::arch::x86_64::kernel::irq::IrqStatistics;
 use crate::scheduler::{CoreId, PerCoreScheduler};
-use crate::x86::bits64::task::TaskStateSegment;
-use crate::x86::msr::*;
 
 pub static mut PERCORE: PerCoreVariables = CachePadded::new(PerCoreInnerVariables::new(0));
 
diff --git a/src/arch/x86_64/kernel/pic.rs b/src/arch/x86_64/kernel/pic.rs
index 2fdf24f5f013b0db1825df4fda40d90c72829a49..572d8135ea57f61af280bca458ef9333a0a8c74c 100644
--- a/src/arch/x86_64/kernel/pic.rs
+++ b/src/arch/x86_64/kernel/pic.rs
@@ -1,6 +1,7 @@
+use x86::io::*;
+
 use crate::arch::x86_64::kernel::idt;
 use crate::arch::x86_64::kernel::irq::ExceptionStackFrame;
-use crate::x86::io::*;
 
 const PIC1_COMMAND_PORT: u16 = 0x20;
 const PIC1_DATA_PORT: u16 = 0x21;
diff --git a/src/arch/x86_64/kernel/pit.rs b/src/arch/x86_64/kernel/pit.rs
index d258e194d83615232007dff1892b1af6ad1b9808..3863ca930aaeb3c6b2dd5668b41a69df7a59b33f 100644
--- a/src/arch/x86_64/kernel/pit.rs
+++ b/src/arch/x86_64/kernel/pit.rs
@@ -1,7 +1,8 @@
 #![allow(dead_code)]
 
+use x86::io::*;
+
 use crate::arch::x86_64::kernel::pic;
-use crate::x86::io::*;
 
 const PIT_CLOCK: u64 = 1_193_182;
 pub const PIT_INTERRUPT_NUMBER: u8 = pic::PIC1_INTERRUPT_OFFSET;
diff --git a/src/arch/x86_64/kernel/processor.rs b/src/arch/x86_64/kernel/processor.rs
index 098e87d14f21b3dae56d10190ddafbecf4f413bb..3223188b9460c6226c1d6cebd755f0f08cac34c4 100644
--- a/src/arch/x86_64/kernel/processor.rs
+++ b/src/arch/x86_64/kernel/processor.rs
@@ -13,14 +13,14 @@ use core::{fmt, u32};
 use hermit_entry::boot_info::PlatformInfo;
 use qemu_exit::QEMUExit;
 use x86::bits64::segmentation;
+use x86::controlregs::*;
+use x86::cpuid::*;
+use x86::msr::*;
 
 #[cfg(feature = "acpi")]
 use crate::arch::x86_64::kernel::acpi;
 use crate::arch::x86_64::kernel::{boot_info, idt, irq, pic, pit};
 use crate::env;
-use crate::x86::controlregs::*;
-use crate::x86::cpuid::*;
-use crate::x86::msr::*;
 
 const IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP: u64 = 1 << 16;
 const IA32_MISC_ENABLE_SPEEDSTEP_LOCK: u64 = 1 << 20;
diff --git a/src/arch/x86_64/kernel/serial.rs b/src/arch/x86_64/kernel/serial.rs
index 4ec9e2d47769e68d17d296647fbe8e85e6ab78b0..7c401cf403ec3b91a95c0f06c43f864f67707cb3 100644
--- a/src/arch/x86_64/kernel/serial.rs
+++ b/src/arch/x86_64/kernel/serial.rs
@@ -1,7 +1,8 @@
 use core::hint::spin_loop;
 
+use x86::io::*;
+
 use crate::env;
-use crate::x86::io::*;
 
 const UART_TX: u16 = 0;
 const UART_IER: u16 = 1;
diff --git a/src/arch/x86_64/kernel/vga.rs b/src/arch/x86_64/kernel/vga.rs
index 7a68abd1601195dcc7eb473b58edafc2db58c99a..422e91ce9ffdbba7b46374d367e2935d49bafffa 100644
--- a/src/arch/x86_64/kernel/vga.rs
+++ b/src/arch/x86_64/kernel/vga.rs
@@ -1,6 +1,7 @@
+use x86::io::*;
+
 use crate::arch::x86_64::mm::paging::{BasePageSize, PageTableEntryFlags, PageTableEntryFlagsExt};
 use crate::arch::x86_64::mm::{paging, PhysAddr, VirtAddr};
-use crate::x86::io::*;
 
 const CRT_CONTROLLER_ADDRESS_PORT: u16 = 0x3D4;
 const CRT_CONTROLLER_DATA_PORT: u16 = 0x3D5;
diff --git a/src/drivers/net/rtl8139.rs b/src/drivers/net/rtl8139.rs
index a4067f82ce691e7fb0d1497ad4870cbd482f49ee..333e42d17635b58d364bb438bdb8c0f9e832db5b 100644
--- a/src/drivers/net/rtl8139.rs
+++ b/src/drivers/net/rtl8139.rs
@@ -6,6 +6,8 @@ use alloc::boxed::Box;
 use alloc::collections::{btree_map, BTreeMap};
 use core::mem;
 
+use x86::io::*;
+
 use crate::arch::kernel::irq::*;
 use crate::arch::kernel::pci;
 use crate::arch::kernel::percore::increment_irq_counter;
@@ -13,7 +15,6 @@ use crate::arch::mm::paging::virt_to_phys;
 use crate::arch::mm::VirtAddr;
 use crate::drivers::error::DriverError;
 use crate::drivers::net::{network_irqhandler, NetworkInterface};
-use crate::x86::io::*;
 
 /// size of the receive buffer
 const RX_BUF_LEN: usize = 8192;
diff --git a/src/lib.rs b/src/lib.rs
index 2f36448d238e59722cd130fbb6cda99386b8f8b7..899da10afed7716fc2724200307d194394dce7aa 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -44,10 +44,6 @@ extern crate log;
 #[cfg(not(target_os = "none"))]
 #[macro_use]
 extern crate std;
-#[cfg(target_arch = "aarch64")]
-extern crate aarch64;
-#[cfg(target_arch = "x86_64")]
-extern crate x86;
 
 use alloc::alloc::Layout;
 use core::alloc::GlobalAlloc;