diff --git a/substrate/native-runtime/support/src/lib.rs b/substrate/native-runtime/support/src/lib.rs
index 348c0b17a9ccb97dae2e35caf00a9e08a3a04fb2..91005a2f1d77317fb6443045737c24df4cb5cbf2 100644
--- a/substrate/native-runtime/support/src/lib.rs
+++ b/substrate/native-runtime/support/src/lib.rs
@@ -24,12 +24,20 @@ extern crate polkadot_primitives as primitives;
 use std::fmt;
 use primitives::ed25519;
 
-pub use std::vec::Vec;
-pub use std::rc::Rc;
-pub use std::cell::RefCell;
-pub use std::boxed::Box;
+pub use std::vec;
+pub use std::rc;
+pub use std::cell;
+pub use std::boxed;
 pub use std::slice;
-pub use std::mem::{size_of, transmute, swap, uninitialized};
+pub use std::mem;
+
+/// Prelude of common useful imports.
+///
+/// This should include only things which are in the normal std prelude.
+pub mod prelude {
+	pub use std::vec::Vec;
+	pub use std::boxed::Box;
+}
 
 pub use polkadot_state_machine::Externalities;
 
diff --git a/substrate/primitives/src/hashing.rs b/substrate/primitives/src/hashing.rs
index f82ec7ef8bf784af076318714ddf20097467e760..e1a4f84a99675b84dacac4152c0a84629ec32573 100644
--- a/substrate/primitives/src/hashing.rs
+++ b/substrate/primitives/src/hashing.rs
@@ -20,37 +20,37 @@ use blake2_rfc;
 use twox_hash;
 
 /// Do a Blake2 512-bit hash and place result in `dest`.
-pub fn blake2_512_into(data: &[u8], dest: &mut[u8; 64]) {
+pub fn blake2_512_into(data: &[u8], dest: &mut [u8; 64]) {
 	dest.copy_from_slice(blake2_rfc::blake2b::blake2b(64, &[], data).as_bytes());
 }
 
 /// Do a Blake2 512-bit hash and return result.
 pub fn blake2_512(data: &[u8]) -> [u8; 64] {
-	let mut r: [u8; 64] = unsafe { ::std::mem::uninitialized() };
+	let mut r = [0; 64];
 	blake2_512_into(data, &mut r);
 	r
 }
 
 /// Do a Blake2 256-bit hash and place result in `dest`.
-pub fn blake2_256_into(data: &[u8], dest: &mut[u8; 32]) {
+pub fn blake2_256_into(data: &[u8], dest: &mut [u8; 32]) {
 	dest.copy_from_slice(blake2_rfc::blake2b::blake2b(32, &[], data).as_bytes());
 }
 
 /// Do a Blake2 256-bit hash and return result.
 pub fn blake2_256(data: &[u8]) -> [u8; 32] {
-	let mut r: [u8; 32] = unsafe { ::std::mem::uninitialized() };
+	let mut r = [0; 32];
 	blake2_256_into(data, &mut r);
 	r
 }
 
 /// Do a Blake2 128-bit hash and place result in `dest`.
-pub fn blake2_128_into(data: &[u8], dest: &mut[u8; 16]) {
+pub fn blake2_128_into(data: &[u8], dest: &mut [u8; 16]) {
 	dest.copy_from_slice(blake2_rfc::blake2b::blake2b(16, &[], data).as_bytes());
 }
 
 /// Do a Blake2 128-bit hash and return result.
 pub fn blake2_128(data: &[u8]) -> [u8; 16] {
-	let mut r: [u8; 16] = unsafe { ::std::mem::uninitialized() };
+	let mut r = [0; 16];
 	blake2_128_into(data, &mut r);
 	r
 }
diff --git a/substrate/wasm-runtime/polkadot/src/codec/endiansensitive.rs b/substrate/wasm-runtime/polkadot/src/codec/endiansensitive.rs
index a1576284228e952e51be44b55af5f8b48dfbf845..c4978d5ce4721685bb81e932177825e6ca033b96 100644
--- a/substrate/wasm-runtime/polkadot/src/codec/endiansensitive.rs
+++ b/substrate/wasm-runtime/polkadot/src/codec/endiansensitive.rs
@@ -17,7 +17,8 @@
 //! Endian manager.
 
 /// Trait to allow conversion to a know endian representation when sensitive.
-pub trait EndianSensitive: Sized {
+// note: the copy bound and static lifetimes are necessary for safety of `Slicable` blanket implementation.
+pub trait EndianSensitive: Copy + 'static {
 	fn to_le(self) -> Self { self }
 	fn to_be(self) -> Self { self }
 	fn from_le(self) -> Self { self }
@@ -48,3 +49,20 @@ impl_endians!(u16, u32, u64, usize, i16, i32, i64, isize);
 impl_non_endians!(u8, i8, [u8; 1], [u8; 2], [u8; 3], [u8; 4], [u8; 5], [u8; 6], [u8; 7], [u8; 8],
 	[u8; 10], [u8; 12], [u8; 14], [u8; 16], [u8; 20], [u8; 24], [u8; 28], [u8; 32], [u8; 40],
 	[u8; 48], [u8; 56], [u8; 64], [u8; 80], [u8; 96], [u8; 112], [u8; 128]);
+
+#[cfg(test)]
+mod tests {
+	use super::EndianSensitive;
+
+	#[test]
+	fn endian_sensitive_is_copy() {
+		fn _takes_copy<T: Copy>() { }
+		fn _takes_endian_sensitive<T: EndianSensitive>() { _takes_copy::<T>() }
+	}
+
+	#[test]
+	fn endian_sensitive_outlives_static() {
+		fn _takes_static<T: 'static>() { }
+		fn _takes_endian_sensitive<T: EndianSensitive>() { _takes_static::<T>() }
+	}
+}
diff --git a/substrate/wasm-runtime/polkadot/src/codec/joiner.rs b/substrate/wasm-runtime/polkadot/src/codec/joiner.rs
index 92a5aa87fca9782961197009778b26510b6de7f7..7fdb1e16456c61d4865894ac391110186aba81ea 100644
--- a/substrate/wasm-runtime/polkadot/src/codec/joiner.rs
+++ b/substrate/wasm-runtime/polkadot/src/codec/joiner.rs
@@ -16,7 +16,7 @@
 
 //! Vec<u8> serialiser.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use slicable::Slicable;
 
 /// Trait to allow itself to be serialised into a `Vec<u8>`
diff --git a/substrate/wasm-runtime/polkadot/src/codec/keyedvec.rs b/substrate/wasm-runtime/polkadot/src/codec/keyedvec.rs
index 1f803b7c6206ec846ebafbf2f22d5568ec67d1ae..210606ab7c92331de901497f524ef821891a8844 100644
--- a/substrate/wasm-runtime/polkadot/src/codec/keyedvec.rs
+++ b/substrate/wasm-runtime/polkadot/src/codec/keyedvec.rs
@@ -16,7 +16,7 @@
 
 //! Serialiser and prepender.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use slicable::Slicable;
 
 /// Trait to allow itselg to be serialised and prepended by a given slice.
diff --git a/substrate/wasm-runtime/polkadot/src/codec/slicable.rs b/substrate/wasm-runtime/polkadot/src/codec/slicable.rs
index 5ec042ec9bf5a63cfbe653b3dfee20d42e46b3a3..40f8a532b7131e0c001a4c5ad83dfbc40327d3c1 100644
--- a/substrate/wasm-runtime/polkadot/src/codec/slicable.rs
+++ b/substrate/wasm-runtime/polkadot/src/codec/slicable.rs
@@ -16,7 +16,8 @@
 
 //! Serialisation.
 
-use runtime_support::{Vec, size_of, transmute, uninitialized, slice};
+use runtime_support::prelude::*;
+use runtime_support::{mem, slice};
 use joiner::Joiner;
 use endiansensitive::EndianSensitive;
 
@@ -33,7 +34,7 @@ pub trait Slicable: Sized {
 	fn to_vec(&self) -> Vec<u8> {
 		self.as_slice_then(|s| s.to_vec())
 	}
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(set_slice: F) -> Option<Self>;
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(set_slice: F) -> Option<Self>;
 	fn as_slice_then<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R {
 		f(&self.to_vec())
 	}
@@ -44,11 +45,12 @@ pub trait Slicable: Sized {
 pub trait NonTrivialSlicable: Slicable {}
 
 impl<T: EndianSensitive> Slicable for T {
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(fill_slice: F) -> Option<Self> {
-		let size = size_of::<T>();
-		let mut result: T = unsafe { uninitialized() };
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(fill_slice: F) -> Option<Self> {
+		let size = mem::size_of::<T>();
+		let mut result: T = unsafe { mem::zeroed() };
 		let result_slice = unsafe {
-			slice::from_raw_parts_mut(transmute::<*mut T, *mut u8>(&mut result), size)
+			let ptr = &mut result as *mut _ as *mut u8;
+			slice::from_raw_parts_mut(ptr, size)
 		};
 		if fill_slice(result_slice) {
 			Some(result.from_le())
@@ -57,16 +59,17 @@ impl<T: EndianSensitive> Slicable for T {
 		}
 	}
 	fn as_slice_then<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R {
-		let size = size_of::<Self>();
+		let size = mem::size_of::<Self>();
 		self.as_le_then(|le| {
 			let value_slice = unsafe {
-				slice::from_raw_parts(transmute::<*const Self, *const u8>(le), size)
+				let ptr = le as *const _ as *const u8;
+				slice::from_raw_parts(ptr, size)
 			};
 			f(value_slice)
 		})
 	}
 	fn size_of(_value: &[u8]) -> Option<usize> {
-		Some(size_of::<Self>())
+		Some(mem::size_of::<Self>())
 	}
 }
 
@@ -74,7 +77,7 @@ impl Slicable for Vec<u8> {
 	fn from_slice(value: &[u8]) -> Option<Self> {
 		Some(value[4..].to_vec())
 	}
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 	fn to_vec(&self) -> Vec<u8> {
diff --git a/substrate/wasm-runtime/polkadot/src/codec/streamreader.rs b/substrate/wasm-runtime/polkadot/src/codec/streamreader.rs
index 371ceed4eeac44fe3386736da7416ab0d987608c..33056a5ac391c2106214972fb1880cb3813f1418 100644
--- a/substrate/wasm-runtime/polkadot/src/codec/streamreader.rs
+++ b/substrate/wasm-runtime/polkadot/src/codec/streamreader.rs
@@ -20,13 +20,13 @@ use slicable::Slicable;
 
 /// Simple deserialiser.
 pub struct StreamReader<'a> {
-	data: &'a[u8],
+	data: &'a [u8],
 	offset: usize,
 }
 
 impl<'a> StreamReader<'a> {
 	/// Create a new deserialiser based on the `data`.
-	pub fn new(data: &'a[u8]) -> Self {
+	pub fn new(data: &'a [u8]) -> Self {
 		StreamReader {
 			data: data,
 			offset: 0,
diff --git a/substrate/wasm-runtime/polkadot/src/lib.rs b/substrate/wasm-runtime/polkadot/src/lib.rs
index 7a96b6cee44377c9057f86c7c1b837b12c394014..a08cc046d36bdd83ec291e3ba7dc205eb3eb0bcb 100644
--- a/substrate/wasm-runtime/polkadot/src/lib.rs
+++ b/substrate/wasm-runtime/polkadot/src/lib.rs
@@ -34,7 +34,7 @@ pub use support::{primitives, function, environment, storable};
 #[cfg(test)]
 pub use support::{testing, statichex};
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use slicable::Slicable;
 use primitives::{Block, UncheckedTransaction};
 
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs b/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs
index 1e12135806f22d72b47eb23120388099966c6fb0..689fdca21e682a81c797ba43f2e966206ce47970 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs
@@ -16,7 +16,7 @@
 
 //! Conensus module for runtime; manages the authority set ready for the native code.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use storable::StorageVec;
 use primitives::SessionKey;
 
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/session.rs b/substrate/wasm-runtime/polkadot/src/runtime/session.rs
index 907b3e16b162e0313952817054b4c937234198fc..6914bdc6558834d55682b3860f556c53102fcf42 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/session.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/session.rs
@@ -17,7 +17,7 @@
 //! Session manager: is told the validators and allows them to manage their session keys for the
 //! consensus module.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use keyedvec::KeyedVec;
 use storable::{kill, Storable, StorageVec};
 use primitives::{AccountID, SessionKey, BlockNumber};
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/staking.rs b/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
index fc7c12798e3ed02e80ad447aad2ba1cfebbdd820..9b0c659f5c9abd9b6c17858d2981a6e554d09159 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
@@ -16,7 +16,7 @@
 
 //! Staking manager: Handles balances and periodically determines the best set of validators.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use keyedvec::KeyedVec;
 use storable::{Storable, StorageVec};
 use primitives::{BlockNumber, AccountID};
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/system.rs b/substrate/wasm-runtime/polkadot/src/runtime/system.rs
index 5ffa03ed818a7f443b08761accd47bd26e1569fc..072e17df010c9061014039bbeb29232d5de748e7 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/system.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/system.rs
@@ -18,7 +18,8 @@
 //! and depositing logs.
 
 use primitives::{Block, BlockNumber, Hash, UncheckedTransaction, TxOrder, Hashable};
-use runtime_support::{Vec, swap};
+use runtime_support::mem;
+use runtime_support::prelude::*;
 use storable::Storable;
 use keyedvec::KeyedVec;
 use environment::with_env;
@@ -46,7 +47,7 @@ pub fn execute_block(mut block: Block) {
 	// populate environment from header.
 	with_env(|e| {
 		e.block_number = block.header.number;
-		swap(&mut e.digest, &mut block.header.digest);
+		mem::swap(&mut e.digest, &mut block.header.digest);
 		e.next_log_index = 0;
 	});
 
diff --git a/substrate/wasm-runtime/polkadot/src/support/environment.rs b/substrate/wasm-runtime/polkadot/src/support/environment.rs
index 02c29afc1bf69f7394ddf47d43ea50ee9687cb91..1011b3168b80f6794e5ae20a968061bac066b4aa 100644
--- a/substrate/wasm-runtime/polkadot/src/support/environment.rs
+++ b/substrate/wasm-runtime/polkadot/src/support/environment.rs
@@ -16,7 +16,11 @@
 
 //! Environment API: Allows certain information to be accessed throughout the runtime.
 
-use runtime_support::{Rc, RefCell, transmute, Box};
+use runtime_support::boxed::Box;
+use runtime_support::mem;
+use runtime_support::cell::RefCell;
+use runtime_support::rc::Rc;
+
 use primitives::{BlockNumber, Digest};
 
 #[derive(Default)]
@@ -48,7 +52,7 @@ fn env() -> Rc<RefCell<Environment>> {
 			let singleton: Rc<RefCell<Environment>> = Rc::new(RefCell::new(Default::default()));
 
 			// Put it in the heap so it can outlive this call
-			SINGLETON = transmute(Box::new(singleton));
+			SINGLETON = mem::transmute(Box::new(singleton));
 		}
 
 		// Now we give out a copy of the data that is safe to use concurrently.
@@ -69,7 +73,7 @@ fn env() -> Rc<RefCell<Environment>> {
 			let singleton: Rc<RefCell<Environment>> = Rc::new(RefCell::new(Default::default()));
 
 			// Put it in the heap so it can outlive this call
-			*s.borrow_mut() = transmute(Box::new(singleton));
+			*s.borrow_mut() = mem::transmute(Box::new(singleton));
 		}
 
 		// Now we give out a copy of the data that is safe to use concurrently.
diff --git a/substrate/wasm-runtime/polkadot/src/support/primitives.rs b/substrate/wasm-runtime/polkadot/src/support/primitives.rs
index 3ab385d4889335785fee0e5a44b0446c1adb8284..338be8071050e7ef14eb64023811c2437bc3ca42 100644
--- a/substrate/wasm-runtime/polkadot/src/support/primitives.rs
+++ b/substrate/wasm-runtime/polkadot/src/support/primitives.rs
@@ -16,12 +16,12 @@
 
 //! Primitive types.
 
-use runtime_support::Vec;
+use runtime_support::prelude::*;
 use streamreader::StreamReader;
 use joiner::Joiner;
 use slicable::{Slicable, NonTrivialSlicable};
 use function::Function;
-use runtime_support::{size_of, blake2_256, twox_128, twox_256, ed25519_verify};
+use runtime_support::{mem, blake2_256, twox_128, twox_256, ed25519_verify};
 
 #[cfg(test)]
 use std::fmt;
@@ -76,7 +76,7 @@ impl Slicable for Header {
 		})
 	}
 
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 
@@ -90,7 +90,7 @@ impl Slicable for Header {
 	}
 
 	fn size_of(data: &[u8]) -> Option<usize> {
-		let first_part = size_of::<Hash>() + size_of::<BlockNumber>() + size_of::<Hash>() + size_of::<Hash>();
+		let first_part = mem::size_of::<Hash>() + mem::size_of::<BlockNumber>() + mem::size_of::<Hash>() + mem::size_of::<Hash>();
 		let second_part = <Vec<Vec<u8>>>::size_of(&data[first_part..])?;
 		Some(first_part + second_part)
 	}
@@ -122,7 +122,7 @@ impl Slicable for Transaction {
 		})
 	}
 
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 
@@ -135,7 +135,7 @@ impl Slicable for Transaction {
 	}
 
 	fn size_of(data: &[u8]) -> Option<usize> {
-		let first_part = size_of::<AccountID>() + size_of::<TxOrder>() + size_of::<u8>();
+		let first_part = mem::size_of::<AccountID>() + mem::size_of::<TxOrder>() + mem::size_of::<u8>();
 		let second_part = <Vec<u8>>::size_of(&data[first_part..])?;
 		Some(first_part + second_part)
 	}
@@ -200,7 +200,7 @@ impl Slicable for UncheckedTransaction {
 		})
 	}
 
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 
@@ -211,7 +211,7 @@ impl Slicable for UncheckedTransaction {
 	}
 
 	fn size_of(data: &[u8]) -> Option<usize> {
-		let first_part = size_of::<[u8; 64]>();
+		let first_part = mem::size_of::<[u8; 64]>();
 		let second_part = <Transaction>::size_of(&data[first_part..])?;
 		Some(first_part + second_part)
 	}
@@ -237,7 +237,7 @@ impl Slicable for Block {
 		})
 	}
 
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 
@@ -271,7 +271,7 @@ impl<T: NonTrivialSlicable> Slicable for Vec<T> {
 		Some(r)
 	}
 
-	fn set_as_slice<F: FnOnce(&mut[u8]) -> bool>(_fill_slice: F) -> Option<Self> {
+	fn set_as_slice<F: FnOnce(&mut [u8]) -> bool>(_fill_slice: F) -> Option<Self> {
 		unimplemented!();
 	}
 
diff --git a/substrate/wasm-runtime/polkadot/src/support/storable.rs b/substrate/wasm-runtime/polkadot/src/support/storable.rs
index 3caf3ed19bfaedbb94debf25c01a22d442af2638..9a871a638be5cc7c5596c9124175b9b1b7fcbf14 100644
--- a/substrate/wasm-runtime/polkadot/src/support/storable.rs
+++ b/substrate/wasm-runtime/polkadot/src/support/storable.rs
@@ -19,7 +19,8 @@
 use slicable::Slicable;
 use endiansensitive::EndianSensitive;
 use keyedvec::KeyedVec;
-use runtime_support::{self, twox_128, Vec};
+use runtime_support::prelude::*;
+use runtime_support::{self, twox_128};
 
 /// Trait for a value which may be stored in the storage DB.
 pub trait Storable {
@@ -36,7 +37,7 @@ pub trait Storable {
 /// Remove `key` from storage.
 pub fn kill(key: &[u8]) { runtime_support::set_storage(&twox_128(key)[..], b""); }
 
-impl<T: Default + Sized + EndianSensitive> Storable for T {
+impl<T: Default + EndianSensitive> Storable for T {
 	fn lookup(key: &[u8]) -> Option<Self> {
 		Slicable::set_as_slice(|out| runtime_support::read_storage(&twox_128(key)[..], out) == out.len())
 	}
diff --git a/substrate/wasm-runtime/support/src/lib.rs b/substrate/wasm-runtime/support/src/lib.rs
index b65b574351554b29fa8bf9512952f1e8484ad5c4..90c59a6e747c5e47b1dcde415ba68c13038577e0 100644
--- a/substrate/wasm-runtime/support/src/lib.rs
+++ b/substrate/wasm-runtime/support/src/lib.rs
@@ -4,14 +4,22 @@
 #![cfg_attr(feature = "strict", deny(warnings))]
 
 #![feature(alloc)]
-//#[macro_use]
 extern crate alloc;
-pub use alloc::vec::Vec;
-pub use alloc::boxed::Box;
-pub use alloc::rc::Rc;
-pub use core::mem::{transmute, size_of, uninitialized, swap};
+
+pub use alloc::vec;
+pub use alloc::boxed;
+pub use alloc::rc;
+pub use core::mem;
 pub use core::slice;
-pub use core::cell::{RefCell, Ref, RefMut};
+pub use core::cell;
+
+/// Common re-exports that are useful to have in scope.
+pub mod prelude {
+	pub use alloc::vec::Vec;
+	pub use alloc::boxed::Box;
+}
+
+use alloc::vec::Vec;
 
 extern crate pwasm_libc;
 extern crate pwasm_alloc;
@@ -68,7 +76,7 @@ pub fn chain_id() -> u64 {
 /// Conduct a 256-bit Blake2 hash.
 pub fn blake2_256(data: &[u8]) -> [u8; 32] {
 	unsafe {
-		let mut result: [u8; 32] = uninitialized();
+		let mut result: [u8; 32] = Default::default();
 		// guaranteed to write into result.
 		ext_blake2_256(&data[0], data.len() as u32, &mut result[0]);
 		result
@@ -78,7 +86,7 @@ pub fn blake2_256(data: &[u8]) -> [u8; 32] {
 /// Conduct four XX hashes to give a 256-bit result.
 pub fn twox_256(data: &[u8]) -> [u8; 32] {
 	unsafe {
-		let mut result: [u8; 32] = uninitialized();
+		let mut result: [u8; 32] = Default::default();
 		// guaranteed to write into result.
 		ext_twox_256(&data[0], data.len() as u32, &mut result[0]);
 		result
@@ -88,7 +96,7 @@ pub fn twox_256(data: &[u8]) -> [u8; 32] {
 /// Conduct two XX hashes to give a 256-bit result.
 pub fn twox_128(data: &[u8]) -> [u8; 16] {
 	unsafe {
-		let mut result: [u8; 16] = uninitialized();
+		let mut result: [u8; 16] = Default::default();
 		// guaranteed to write into result.
 		ext_twox_128(&data[0], data.len() as u32, &mut result[0]);
 		result
@@ -109,7 +117,7 @@ pub trait Printable {
 impl<'a> Printable for &'a [u8] {
 	fn print(self) {
 		unsafe {
-			ext_print(&self[0] as *const u8, self.len() as u32);
+			ext_print(self.as_ptr(), self.len() as u32);
 		}
 	}
 }
@@ -132,7 +140,7 @@ macro_rules! impl_stubs {
 				#[no_mangle]
 				pub fn $name(input_data: *mut u8, input_len: usize) -> u64 {
 					let input = unsafe {
-						$crate::Vec::from_raw_parts(input_data, input_len, input_len)
+						$crate::vec::Vec::from_raw_parts(input_data, input_len, input_len)
 					};
 
 					let output = super::$name(input);
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm
index 0aaa880e905df3cfdd689ae6988b1d14bd8b1754..c1051d34148a0d14ec41b246f1ad6cc2050a2af1 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm differ
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm
index cd47ef5fdbc7a2126355718622a943c84674ef5c..231fa8af919d697e396eb2936091062c14ec7071 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm differ
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm
index 5c717847a5a2dfb1d4b0e0db128b5a2cb9c57aaf..b1357890d880bd747b4901d98964714637744b95 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm differ
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm
index 64fb6a48bfd6f1cd23a2e17c4cc720efd7e8ae65..646b019bc0a081fd44240202e8ba94a28ae8dd49 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm differ