diff --git a/Cargo.lock b/Cargo.lock
index 568f700..c423b49 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -585,7 +585,6 @@ dependencies = [
  "crossbeam-queue",
  "limine",
  "linked_list_allocator",
- "log",
  "slab",
  "spin 0.9.4",
  "tracing",
diff --git a/ableos/src/kmain.rs b/ableos/src/kmain.rs
index d09f916..c4bf576 100644
--- a/ableos/src/kmain.rs
+++ b/ableos/src/kmain.rs
@@ -15,7 +15,7 @@ use crate::relib::network::socket::{SimpleSock, Socket};
 use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE};
 // use crate::{boot_conf::KernelConfig, scratchpad, systeminfo::RELEASE_TYPE, TERM};
 use crate::{filesystem, graphics_limine, hardware};
-use kernel::KERNEL_VERSION;
+use kernel::VERSION;
 use limine::LimineSmpInfo;
 use limine::{LimineFramebufferRequest, LimineSmpRequest};
 
@@ -151,7 +151,7 @@ pub fn cpu_socket_startup() {
 }
 
 pub fn log_version_data() {
-    info!("{} v{}", RELEASE_TYPE, KERNEL_VERSION);
+    info!("{} v{}", RELEASE_TYPE, VERSION);
     info!(
         "Brand String: {}",
         master().unwrap().brand_string().unwrap()
diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml
index 36458c5..33baa99 100644
--- a/kernel/Cargo.toml
+++ b/kernel/Cargo.toml
@@ -5,11 +5,10 @@ version = "0.2.0"
 
 [dependencies]
 linked_list_allocator = "0.9"
-log = "0.4.14"
 slab = { version = "0.4", default-features = false }
 spin = "0.9"
 versioning = { git = "https://git.ablecorp.us/able/aos_userland" }
-tracing = { version = "0.1.37", default-features = false, features = ["attributes"] }
+tracing = { version = "0.1", default-features = false, features = ["attributes"] }
 
 [dependencies.crossbeam-queue]
 version = "0.3"
diff --git a/kernel/src/allocator.rs b/kernel/src/allocator.rs
index a4d48cc..670b1a0 100644
--- a/kernel/src/allocator.rs
+++ b/kernel/src/allocator.rs
@@ -1,7 +1,5 @@
 //! Memory allocator
 
-use log::trace;
-
 ///
 pub const HEAP_START: usize = 0x_4444_4444_0000;
 
@@ -16,7 +14,5 @@ pub const HEAP_SIZE: usize = HEAP_BASE * HEAP_MULTIPLIER;
 
 #[alloc_error_handler]
 fn alloc_error_handler(layout: alloc::alloc::Layout) -> ! {
-    trace!("allocation error: {:?}", layout);
     loop {}
-    // panic!("allocation error: {:?}", layout)
 }
diff --git a/kernel/src/arch/mod.rs b/kernel/src/arch/mod.rs
index 60d76d5..c1a5e1b 100644
--- a/kernel/src/arch/mod.rs
+++ b/kernel/src/arch/mod.rs
@@ -5,7 +5,7 @@ macro_rules! arch_cond {
         #[cfg(target_arch = $str)]
         pub mod $arch;
         #[cfg(target_arch = $str)]
-        pub use ::$arch::*;
+        pub use self::$arch::*;
     )*};
 }
 
diff --git a/kernel/src/arch/x86_64/allocator.rs b/kernel/src/arch/x86_64/allocator.rs
index 2f77f39..d92cb45 100644
--- a/kernel/src/arch/x86_64/allocator.rs
+++ b/kernel/src/arch/x86_64/allocator.rs
@@ -12,13 +12,10 @@ use crate::allocator::{HEAP_SIZE, HEAP_START};
 static ALLOCATOR: LockedHeap = LockedHeap::empty();
 
 pub unsafe fn init_alloc() -> Result<(), MapToError<Size4KiB>> {
-    let page_range = {
-        let heap_start = VirtAddr::new(HEAP_START as u64);
-        let heap_end = heap_start + HEAP_SIZE - 1u64;
-        let heap_start_page = Page::containing_address(heap_start);
-        let heap_end_page = Page::containing_address(heap_end);
-        Page::range_inclusive(heap_start_page, heap_end_page)
-    };
+    let page_range = Page::range_inclusive(
+        Page::containing_address(VirtAddr::new(HEAP_START as u64)),
+        Page::containing_address(VirtAddr::new(HEAP_START as u64) + HEAP_SIZE - 1u64),
+    );
 
     let mut frame_allocator = super::memory::FRAME_ALLOC
         .get()
diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs
index c4e7f77..222af1d 100644
--- a/kernel/src/arch/x86_64/mod.rs
+++ b/kernel/src/arch/x86_64/mod.rs
@@ -1,14 +1,23 @@
 use limine::{LimineHhdmRequest, LimineMmapRequest};
+use spin::Mutex;
+use uart_16550::SerialPort;
 use x86_64::VirtAddr;
 
 mod allocator;
 mod memory;
 
+static SERIAL_CONSOLE: Mutex<SerialPort> = Mutex::new(unsafe { SerialPort::new(0x3f8) });
+
 #[no_mangle]
 unsafe extern "C" fn _kernel_start() -> ! {
     static HDHM_REQ: LimineHhdmRequest = LimineHhdmRequest::new(0);
     static MMAP_REQ: LimineMmapRequest = LimineMmapRequest::new(0);
 
+    let _ = serial_fmt(format_args!(
+        "Initialising AbleOS Kernel {}\r\n",
+        crate::VERSION
+    ));
+
     memory::init_pt(VirtAddr::new(
         HDHM_REQ
             .get_response()
@@ -26,14 +35,13 @@ unsafe extern "C" fn _kernel_start() -> ! {
     );
 
     allocator::init_alloc().expect("tried to initialise allocator");
-
-    unsafe {
-        use uart_16550::SerialPort;
-        use core::fmt::Write;
-        let mut sp = SerialPort::new(0x3F8);
-        sp.init();
-        sp.write_str("Hello from AbleOS x86_64 entrypoint!");
-    }
+    SERIAL_CONSOLE.lock().init();
 
     crate::kmain::kmain()
 }
+
+/// Format args to serial console
+pub fn serial_fmt(args: core::fmt::Arguments<'_>) -> core::fmt::Result {
+    use core::fmt::Write;
+    SERIAL_CONSOLE.lock().write_fmt(args)
+}
diff --git a/kernel/src/debug.rs b/kernel/src/debug.rs
new file mode 100644
index 0000000..981558f
--- /dev/null
+++ b/kernel/src/debug.rs
@@ -0,0 +1 @@
+// TODO: Tracing Subscriber serial print implementation
diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs
index 8a4a0df..a96c0cc 100644
--- a/kernel/src/lib.rs
+++ b/kernel/src/lib.rs
@@ -7,13 +7,14 @@ extern crate alloc;
 
 pub mod allocator;
 pub mod arch;
+pub mod debug;
 pub mod kmain;
 pub mod task;
 
 use versioning::Version;
 
 /// Kernel's version
-pub const KERNEL_VERSION: Version = Version {
+pub const VERSION: Version = Version {
     major: 0,
     minor: 2,
     patch: 0,