diff --git a/substrate/srml/system/src/lib.rs b/substrate/srml/system/src/lib.rs
index 0a1955a2a8ae5602035186e31f192d0d9c8c43ed..ad8957c3491d947f211cc8de41bda21bd7cb14eb 100644
--- a/substrate/srml/system/src/lib.rs
+++ b/substrate/srml/system/src/lib.rs
@@ -40,7 +40,7 @@ extern crate sr_primitives as primitives;
 extern crate safe_mix;
 
 use rstd::prelude::*;
-use primitives::traits::{self, CheckEqual, SimpleArithmetic, SimpleBitOps, Zero, One, Bounded,
+use primitives::traits::{self, CheckEqual, SimpleArithmetic, SimpleBitOps, Zero, One, Bounded, Lookup,
 	Hash, Member, MaybeDisplay, EnsureOrigin, Digest as DigestT, As, CurrentHeight, BlockNumberToHash};
 use substrate_primitives::storage::well_known_keys;
 use runtime_support::{storage, StorageValue, StorageMap, Parameter};
@@ -397,14 +397,29 @@ impl<T: Trait> Module<T> {
 	}
 }
 
-impl<T: Trait> CurrentHeight for Module<T> {
+pub struct ChainContext<T>(::rstd::marker::PhantomData<T>);
+impl<T> Default for ChainContext<T> {
+	fn default() -> Self {
+		ChainContext(::rstd::marker::PhantomData)
+	}
+}
+
+impl<T: Trait> Lookup for ChainContext<T> {
+	type Source = T::AccountId;
+	type Target = T::AccountId;
+	fn lookup(&self, s: Self::Source) -> rstd::result::Result<Self::Target, &'static str> {
+		Ok(s)
+	}
+}
+
+impl<T: Trait> CurrentHeight for ChainContext<T> {
 	type BlockNumber = T::BlockNumber;
 	fn current_height(&self) -> Self::BlockNumber {
 		<Module<T>>::block_number()
 	}
 }
 
-impl<T: Trait> BlockNumberToHash for Module<T> {
+impl<T: Trait> BlockNumberToHash for ChainContext<T> {
 	type BlockNumber = T::BlockNumber;
 	type Hash = T::Hash;
 	fn block_number_to_hash(&self, n: Self::BlockNumber) -> Option<Self::Hash> {