diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm
index 7f7f19c1df3a784feb5ad6c805d11539bdd5e8fb..cd9cb447c65067079ed9dda9d1c49230f585f0a2 100644
Binary files a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm and b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm differ
diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs
index d7ed78c231d995c0b1dc67f31d0774448c3f0512..9ea9f86998e5e5854b8f29d2a4ac2ae7f63ad058 100644
--- a/substrate/node/runtime/src/lib.rs
+++ b/substrate/node/runtime/src/lib.rs
@@ -61,7 +61,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 	impl_name: create_runtime_str!("substrate-node"),
 	authoring_version: 10,
 	spec_version: 30,
-	impl_version: 30,
+	impl_version: 31,
 	apis: RUNTIME_API_VERSIONS,
 };
 
diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm
index f1ec09d5fe9813beaab2a491159ff0590dce6404..bde6c26372b474f4eefbcd706690a4e2d9b239f5 100644
Binary files a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm and b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm differ
diff --git a/substrate/srml/support/src/runtime.rs b/substrate/srml/support/src/runtime.rs
index 9b19c63cd39c0ba5edf12eb8ba43fc2a931249f8..a1093dae5b27e381e99e434b29d2d5202a344333 100644
--- a/substrate/srml/support/src/runtime.rs
+++ b/substrate/srml/support/src/runtime.rs
@@ -339,7 +339,7 @@ macro_rules! construct_runtime {
 			$runtime;
 			;
 			$(
-				$name: $module::{ $( $modules $( <$modules_generic> )* )* }
+				$name: $module::{ $( $modules )* }
 			)*
 		);
 		$crate::__decl_outer_log!(
@@ -718,70 +718,70 @@ macro_rules! __decl_outer_dispatch {
 #[macro_export]
 #[doc(hidden)]
 macro_rules! __decl_runtime_metadata {
-	// contain a module
+	// leading is Module : parse
 	(
 		$runtime:ident;
 		$( $parsed_modules:ident { $( $withs:ident )* } )*;
+		$( { leading_module: $( $leading_module:ident )* } )?
 		$name:ident: $module:ident::{
-			Module $( $modules:ident $( <$modules_generic:ident> )* )*
+			Module $( $modules:ident )*
 		}
 		$( $rest_name:ident : $rest_module:ident::{
-			$( $rest_modules:ident $( <$rest_modules_generic:ident> )* )*
+			$( $rest_modules:ident )*
 		})*
 	) => {
-
-		$crate::__decl_runtime_metadata!(@Module
+		$crate::__decl_runtime_metadata!(
 			$runtime;
-			$( $parsed_modules { $( $withs )* } )*;
-			$name: $module::{ $( $modules $( <$modules_generic> )* )* }
+			$( $parsed_modules { $( $withs )* } )* $module { $( $( $leading_module )* )? $( $modules )* };
 			$(
 				$rest_name: $rest_module::{
-					$( $rest_modules $( <$rest_modules_generic> )* )*
+					$( $rest_modules )*
 				}
 			)*
 		);
 	};
-	// do not contain Module : skip
+	// leading isn't Module : put it in leadings
 	(
 		$runtime:ident;
 		$( $parsed_modules:ident { $( $withs:ident )* } )*;
+		$( { leading_module: $( $leading_module:ident )* } )?
 		$name:ident: $module:ident::{
-			$( $modules:ident $( <$modules_generic:ident> )* )*
+			$other_module:ident $( $modules:ident )*
 		}
 		$( $rest_name:ident : $rest_module:ident::{
-			$( $rest_modules:ident $( <$rest_modules_generic:ident> )* )*
+			$( $rest_modules:ident )*
 		})*
 	) => {
 		$crate::__decl_runtime_metadata!(
 			$runtime;
 			$( $parsed_modules { $( $withs )* } )*;
+			{ leading_module: $( $( $leading_module )* )? $other_module }
+			$name: $module::{
+				$( $modules )*
+			}
 			$(
 				$rest_name: $rest_module::{
-					$( $rest_modules $( <$rest_modules_generic> )* )*
+					$( $rest_modules )*
 				}
 			)*
 		);
 	};
-	// process module
-	(@Module
+	// does not contain Module : skip
+	(
 		$runtime:ident;
 		$( $parsed_modules:ident { $( $withs:ident )* } )*;
-		$name:ident: $module:ident::{
-			$( $modules:ident $( <$modules_generic:ident> )* )*
-		}
-		$($rest_name:ident : $rest_module:ident::{
-			$( $rest_modules:ident $( <$rest_modules_generic:ident> )* )*
+		$( { leading_module: $( $leading_module:ident )* } )?
+		$name:ident: $module:ident::{}
+		$( $rest_name:ident : $rest_module:ident::{
+			$( $rest_modules:ident )*
 		})*
 	) => {
 		$crate::__decl_runtime_metadata!(
 			$runtime;
-			$( $parsed_modules { $( $withs )* } )*
-			$module {
-				$($modules)*
-			};
+			$( $parsed_modules { $( $withs )* } )*;
 			$(
 				$rest_name: $rest_module::{
-					$( $rest_modules $( <$rest_modules_generic> )* )*
+					$( $rest_modules )*
 				}
 			)*
 		);