diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 0844b32f7c319029790a1143c3d9eb35bdcfd649..1cc0a2b72518ac07afa0c929f962a9a8e3129c0d 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -82,7 +82,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 	// and set impl_version to 0. If only runtime
 	// implementation changes and behavior does not, then leave spec_version as
 	// is and increment impl_version.
-	spec_version: 229,
+	spec_version: 230,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 };
diff --git a/substrate/frame/session/src/historical.rs b/substrate/frame/session/src/historical.rs
index 5b492d8d21df3f0cc50afca44a5cd32cd8225734..91719c27f27ccc59ab7ad1956a0ae1afcb7714c8 100644
--- a/substrate/frame/session/src/historical.rs
+++ b/substrate/frame/session/src/historical.rs
@@ -27,7 +27,7 @@
 
 use sp_std::prelude::*;
 use codec::{Encode, Decode};
-use sp_runtime::KeyTypeId;
+use sp_runtime::{KeyTypeId, RuntimeDebug};
 use sp_runtime::traits::{Convert, OpaqueKeys};
 use frame_support::{decl_module, decl_storage};
 use frame_support::{Parameter, print};
@@ -258,12 +258,19 @@ impl<T: Trait> ProvingTrie<T> {
 }
 
 /// Proof of ownership of a specific key.
-#[derive(Encode, Decode, Clone)]
+#[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebug)]
 pub struct Proof {
 	session: SessionIndex,
 	trie_nodes: Vec<Vec<u8>>,
 }
 
+impl Proof {
+	/// Returns a session this proof was generated for.
+	pub fn session(&self) -> SessionIndex {
+		self.session
+	}
+}
+
 impl<T: Trait, D: AsRef<[u8]>> frame_support::traits::KeyOwnerProofSystem<(KeyTypeId, D)>
 	for Module<T>
 {