diff --git a/Kernel/Makefile-xargo b/Kernel/Makefile-xargo
index b952f7f5a37e821f14f2c3b494af885660c74913..1d1d0acaf1165dee3330f77a1e8d63c81093d2d2 100644
--- a/Kernel/Makefile-xargo
+++ b/Kernel/Makefile-xargo
@@ -90,12 +90,12 @@ endif
 # Invoke xargo to build the main part of the kernel
 # - This includes all modules enabled in ./Cargo.toml
 #
-$(OBJDIR)libmain.a: PHONY $(OBJDIR)modules.rs targets/target-$(ARCH).json
+$(OBJDIR)libmain.a: PHONY $(OBJDIR)modules.rs targets/target-k-$(ARCH).json
 	@echo "[XARGO] . > $@"
-	$VRUSTOS_MODPATH=../$(OBJDIR)modules.rs RUSTFLAGS="-C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%))" $(ENV) $(XARGO) build --target=target-$(ARCH) --release --features "$(CARGO_FEATURES)"
+	$VRUSTOS_MODPATH=../$(OBJDIR)modules.rs RUSTFLAGS="-C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%))" $(ENV) $(XARGO) build --target=target-k-$(ARCH) --release --features "$(CARGO_FEATURES)"
 	@mkdir -p $(dir $@)
-	@cp target/target-$(ARCH)/release/libmain.a $@
-$(patsubst %,$(OBJDIR)lib%.a,main $(MODS)): $(OBJDIR)libmain.a
+	@cp target/target-k-$(ARCH)/release/libmain.a $@
+$(patsubst %,$(OBJDIR)lib%.a,$(MODS)): $(OBJDIR)libmain.a
 
 # - Module listing
 $(OBJDIR)modules.rs: Makefile-xargo
@@ -103,7 +103,7 @@ $(OBJDIR)modules.rs: Makefile-xargo
 	@echo '{\n $(patsubst %,extern crate %;\n,$(MODS))' >> $@
 	@echo "    $(patsubst %,use_mod(&%::S_MODULE); rv+=1;\n   ,$(MODS))" >> $@
 	@echo "}" >> $@
-targets/target-$(ARCH).json: Core/arch/$(ARCH)/target.json
+targets/targetk-k-$(ARCH).json: Core/arch/$(ARCH)/target.json
 	@mkdir -p $(dir $@)
 	$Vcp $< $@
 
diff --git a/Makefile b/Makefile
index 203978ea632e4ef1ca1874f5ddf42f121e1ba5aa..f347ea48df945e7d8972c5b1d9227e9c06142ac1 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,5 @@ UPDATE:
 	curl https://static.rust-lang.org/rustup/rustup-init.sh -sSf | RUSTUP_HOME=$(abspath .prefix) CARGO_HOME=$(abspath .prefix) sh -s -- --default-toolchain none --no-modify-path -y
 	$(call fn_rustcmd,rustup) update $(RUSTUP_VER)
 	$(call fn_rustcmd,rustup) default $(RUSTUP_VER)
-#	curl $(RUSTC_SRC_URL) -o rustc-nightly-src.tar.gz
-#	tar -xf rustc-nightly-src.tar.gz --wildcards rustc-nightly-src/src/lib\* rustc-nightly-src/src/stdsimd rustc-nightly-src/vendor/compiler_builtins
-#	rm -rf rustc-nightly-src/src/libcompiler_builtins; mv rustc-nightly-src/vendor/compiler_builtins rustc-nightly-src/src/libcompiler_builtins
+	$(call fn_rustcmd,rustup) component add rust-src
 	$(CARGO) install xargo --git https://github.com/thepowersgang/xargo --force
diff --git a/Usermode/libstd/src/lib.rs b/Usermode/libstd/src/lib.rs
index e6817824f9f6d77a695d20ac26dd841770b59df2..bc1514343e689c40b0b78f48ccebda85287f74b2 100644
--- a/Usermode/libstd/src/lib.rs
+++ b/Usermode/libstd/src/lib.rs
@@ -15,6 +15,9 @@
 #![feature(alloc,allocator_api)]
 #![feature(allocator_internals)]
 #![feature(core_panic_info)]	// Needed because of import of `panic` macro bringin in the module too
+#![feature(__rust_unstable_column)]	// needed for panics
+#![feature(test,custom_test_frameworks)]	// used for macro import
+#![feature(asm,global_asm,concat_idents,format_args_nl,log_syntax)]
 #![default_lib_allocator]
 #![no_std]
 
@@ -29,7 +32,9 @@ extern crate alloc_system;
 //extern crate loader;
 // Macros
 pub use alloc::{/*vec, */format};
-pub use core::{try, assert_eq, panic, write, unreachable, unimplemented};
+pub use core::{try, assert, assert_eq, panic, write, unreachable, unimplemented};
+pub use core::{file, line, __rust_unstable_column};
+//pub use core::{deriving_Debug};
 
 
 // Raw re-exports from core
@@ -47,6 +52,7 @@ pub use core::raw;
 // Crate re-exports
 pub use alloc::{rc,boxed};
 pub use alloc::slice;
+pub use alloc::fmt;
 
 mod std {
 	pub use core::{option, result};
@@ -61,41 +67,72 @@ mod std {
 /// Prelude
 pub mod prelude {
 	pub mod v1 {
-		pub use core::marker::{Copy,Send,Sync,Sized};
+		pub use core::marker::{/*Copy,*/Send,Sync,Sized};
 		pub use core::ops::{Drop,Fn,FnMut,FnOnce};
 		pub use core::mem::drop;
 		pub use alloc::boxed::Box;
 		pub use borrow::ToOwned;
-		pub use core::clone::Clone;
-		pub use core::cmp::{PartialEq, PartialOrd, Eq, Ord};
+		//pub use core::clone::Clone;
+		//pub use core::cmp::{PartialEq, PartialOrd, Eq, Ord};
 		pub use core::convert::{AsRef,AsMut,Into,From};
-		pub use core::default::Default;
+		//pub use core::default::Default;
 		pub use core::iter::{Iterator,Extend,IntoIterator};
 		pub use core::iter::{DoubleEndedIterator, ExactSizeIterator};
 		
 		pub use core::option::Option::{self,Some,None};
 		pub use core::result::Result::{self,Ok,Err};
 
-		pub use slice::SliceConcatExt;
+		//pub use slice::SliceConcatExt;
 
 		pub use string::{String,ToString};
 		pub use alloc::vec::Vec;
-	}
-}
-
-/// Formatted output
-pub mod fmt {
-	pub use core::fmt::*;
 
-	pub fn format(args: ::std::fmt::Arguments) -> ::string::String
-	{
-		let mut output = ::string::String::new();
-		let _ = output.write_fmt(args);
-		output
+		// Macro imports?
+		pub use core::prelude::v1::{
+			Clone,
+			Copy,
+			Debug,
+			Default,
+			Eq,
+			Hash,
+			Ord,
+			PartialEq,
+			PartialOrd,
+			RustcDecodable,
+			RustcEncodable,
+			bench,
+			global_allocator,
+			test,
+			test_case,
+			};
+		pub use core::prelude::v1::{
+			__rust_unstable_column,
+			asm,
+			assert,
+			cfg,
+			column,
+			compile_error,
+			concat,
+			concat_idents,
+			env,
+			file,
+			format_args,
+			format_args_nl,
+			global_asm,
+			include,
+			include_bytes,
+			include_str,
+			line,
+			log_syntax,
+			module_path,
+			option_env,
+			stringify,
+			//trace_macros,
+			};
 	}
-
 }
 
+
 pub mod collections {
 	//pub use alloc::BTreeMap;
 }
diff --git a/Usermode/libvec_ring/lib.rs b/Usermode/libvec_ring/lib.rs
index 817f072c1f22a28d532e41cc8c3c35d25bae8ad0..f01eaf136009d2bfd7ee398c399901d7d71626a3 100644
--- a/Usermode/libvec_ring/lib.rs
+++ b/Usermode/libvec_ring/lib.rs
@@ -3,42 +3,26 @@
 #![feature(raw_vec_internals)]
 
 extern crate alloc;
+use alloc::collections::vec_deque::{self, VecDeque};
 
 pub struct VecRing<T> {
-	buf: alloc::raw_vec::RawVec<T>,
-	base_pos: usize,
-	len: usize,
+	inner: VecDeque<T>,
 }
 
 impl<T> VecRing<T> {
 	pub fn new() -> VecRing<T> {
 		VecRing {
-			buf: alloc::raw_vec::RawVec::new(),
-			base_pos: 0,
-			len: 0,
+			inner: VecDeque::new(),
 		}
 	}
 	pub fn with_capacity(cap: usize) -> VecRing<T> {
 		VecRing {
-			buf: alloc::raw_vec::RawVec::with_capacity(cap),
-			base_pos: 0,
-			len: 0,
+			inner: VecDeque::with_capacity(cap),
 		}
 	}
 
 	pub fn len(&self) -> usize {
-		self.len
-	}
-
-	fn inner_ptr(&self, ofs: usize) -> *mut T {
-		assert!(ofs < self.buf.cap());
-		// SAFE: Returns raw pointer within bounds
-		unsafe {
-			self.buf.ptr().offset(ofs as isize)
-		}
-	}
-	fn ptr(&self, idx: usize) -> *mut T {
-		self.inner_ptr( (idx + self.base_pos) % self.buf.cap() )
+		self.inner.len()
 	}
 
 	/*
@@ -101,64 +85,40 @@ impl<T> VecRing<T> {
 	*/
 
 	pub fn push_back(&mut self, v: T) -> bool {
-		if self.len < self.buf.cap() {
-			// Write to an unused slot
-			let pos = self.len;
-			self.len += 1;
-			// SAFE: Memory used is empty
-			unsafe {
-				::std::ptr::write(&mut self[pos], v);
-			}
+		if self.inner.capacity() == 0 {
+			// Just drop, no capacity
+			false
+		}
+		else if self.inner.len() < self.inner.capacity() {
+			self.inner.push_back(v);
 			true
 		}
 		else {
 			// Overwrite first item and shift base up
-			self[0] = v;
-			if self.base_pos == self.buf.cap() - 1 {
-				self.base_pos = 0;
-			}
-			else {
-				self.base_pos += 1;
-			}
+			self.inner.pop_front();
+			self.inner.push_back(v);
 			false
 		}
 	}
 	pub fn push_front(&mut self, v: T) -> bool {
-		if self.buf.cap() == 0 {
+		if self.inner.capacity() == 0 {
 			// Just drop, no capacity
 			false
 		}
-		else if self.len < self.buf.cap() {
-			// Write to an unused slot
-			let pos = self.len;
-			self.len += 1;
-			// SAFE: Memory used is empty
-			unsafe {
-				::std::ptr::write(&mut self[pos], v);
-			}
-
+		else if self.inner.len() < self.inner.capacity() {
+			self.inner.push_front(v);
 			true
 		}
 		else {
-			// Overwrite last item and shift base up
-			let pos = self.len - 1;
-			self[pos] = v;
-
-			if self.base_pos == 0 {
-				self.base_pos = self.buf.cap() - 1;
-			}
-			else {
-				self.base_pos -= 1;
-			}
-
+			self.inner.pop_back();
+			self.inner.push_front(v);
 			false
 		}
 	}
 
 	pub fn iter(&self) -> Iter<T> {
 		Iter {
-			ring: self,
-			idx: 0,
+			inner_it: self.inner.iter(),
 		}
 	}
 }
@@ -166,16 +126,12 @@ impl<T> VecRing<T> {
 impl<T> ::std::ops::Index<usize> for VecRing<T> {
 	type Output = T;
 	fn index(&self, idx: usize) -> &T {
-		assert!(idx < self.len());
-		// SAFE: Range-checked pointer into valid region
-		unsafe { &*self.ptr(idx) }
+		&self.inner[idx]
 	}
 }
 impl<T> ::std::ops::IndexMut<usize> for VecRing<T> {
 	fn index_mut(&mut self, idx: usize) -> &mut T {
-		assert!(idx < self.len());
-		// SAFE: Range-checked pointer into valid region
-		unsafe { &mut *self.ptr(idx) }
+		&mut self.inner[idx]
 	}
 }
 
@@ -189,20 +145,12 @@ impl<'a, T: 'a> ::std::iter::IntoIterator for &'a VecRing<T> {
 }
 
 pub struct Iter<'a, T: 'a> {
-	ring: &'a VecRing<T>,
-	idx: usize,
+	inner_it: vec_deque::Iter<'a, T>, 
 }
 impl<'a, T: 'a> Iterator for Iter<'a, T> {
 	type Item = &'a T;
 	fn next(&mut self) -> Option<&'a T> {
-		if self.idx == self.ring.len() {
-			None
-		}
-		else {
-			self.idx += 1;
-			// SAFE: Bounds-checked pointer
-			Some( unsafe { &*self.ring.ptr(self.idx-1) } )
-		}
+		self.inner_it.next()
 	}
 }