diff --git a/substrate/frame/benchmarking/src/lib.rs b/substrate/frame/benchmarking/src/lib.rs
index ebf8a209860d6d32c8c184ea99a3b855378c028d..a0aa78f722f721f722ede72268985752c5ea2061 100644
--- a/substrate/frame/benchmarking/src/lib.rs
+++ b/substrate/frame/benchmarking/src/lib.rs
@@ -302,12 +302,21 @@ macro_rules! benchmarks_iter {
 			{ $( $where_clause )* }
 			( $( $names )* )
 			( $( $names_extra )* )
-			$name { $( $code )* }: {
+			$name {
+				$( $code )*
+				let __benchmarked_call_encoded = $crate::frame_support::codec::Encode::encode(
+					&<Call<T $(, $instance )?>>::$dispatch($( $arg ),*)
+				);
+			}: {
+				let call_decoded = <
+					Call<T $(, $instance )?>
+					as $crate::frame_support::codec::Decode
+				>::decode(&mut &__benchmarked_call_encoded[..])
+					.expect("call is encoded above, encoding must be correct");
+
 				<
 					Call<T $(, $instance)? > as $crate::frame_support::traits::UnfilteredDispatchable
-				>::dispatch_bypass_filter(
-					Call::<T $(, $instance)? >::$dispatch($($arg),*), $origin.into()
-				)?;
+				>::dispatch_bypass_filter(call_decoded, $origin.into())?;
 			}
 			verify $postcode
 			$( $rest )*
diff --git a/substrate/frame/contracts/src/benchmarking/mod.rs b/substrate/frame/contracts/src/benchmarking/mod.rs
index 83c18f8f79e0a1d30b1b28cd92f038f9bd5a9100..683a575826a32b53ca33cf8fdeba706efe24931a 100644
--- a/substrate/frame/contracts/src/benchmarking/mod.rs
+++ b/substrate/frame/contracts/src/benchmarking/mod.rs
@@ -727,7 +727,7 @@ benchmarks! {
 		let origin = RawOrigin::Signed(instance.caller.clone());
 		assert_eq!(T::Currency::total_balance(&beneficiary), 0u32.into());
 		assert_eq!(T::Currency::total_balance(&instance.account_id), Endow::max::<T>());
-	}: call(origin, instance.addr, 0u32.into(), Weight::max_value(), vec![])
+	}: call(origin, instance.addr.clone(), 0u32.into(), Weight::max_value(), vec![])
 	verify {
 		if r > 0 {
 			assert_eq!(T::Currency::total_balance(&instance.account_id), 0u32.into());
diff --git a/substrate/frame/lottery/src/weights.rs b/substrate/frame/lottery/src/weights.rs
index 1b191ef534595daf7c7c782a318ed07faee1e1f6..038050c0fb40c6ad3be4573ff92337c83e01da54 100644
--- a/substrate/frame/lottery/src/weights.rs
+++ b/substrate/frame/lottery/src/weights.rs
@@ -17,8 +17,8 @@
 
 //! Autogenerated weights for pallet_lottery
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-06-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2021-07-14, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -57,33 +57,33 @@ pub trait WeightInfo {
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn buy_ticket() -> Weight {
-		(71_604_000 as Weight)
+		(74_856_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	fn set_calls(n: u32, ) -> Weight {
-		(15_015_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((301_000 as Weight).saturating_mul(n as Weight))
+		(15_549_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((281_000 as Weight).saturating_mul(n as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	fn start_lottery() -> Weight {
-		(58_855_000 as Weight)
+		(58_904_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	fn stop_repeat() -> Weight {
-		(7_524_000 as Weight)
+		(7_714_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	fn on_initialize_end() -> Weight {
-		(114_766_000 as Weight)
+		(117_420_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	fn on_initialize_repeat() -> Weight {
-		(119_402_000 as Weight)
+		(123_035_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(7 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -92,33 +92,33 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 // For backwards compatibility and tests
 impl WeightInfo for () {
 	fn buy_ticket() -> Weight {
-		(71_604_000 as Weight)
+		(74_856_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	fn set_calls(n: u32, ) -> Weight {
-		(15_015_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((301_000 as Weight).saturating_mul(n as Weight))
+		(15_549_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((281_000 as Weight).saturating_mul(n as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	fn start_lottery() -> Weight {
-		(58_855_000 as Weight)
+		(58_904_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	fn stop_repeat() -> Weight {
-		(7_524_000 as Weight)
+		(7_714_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	fn on_initialize_end() -> Weight {
-		(114_766_000 as Weight)
+		(117_420_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	fn on_initialize_repeat() -> Weight {
-		(119_402_000 as Weight)
+		(123_035_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
diff --git a/substrate/frame/system/src/weights.rs b/substrate/frame/system/src/weights.rs
index 89fc63fab84479b52625d200aaccdfe18c51a24e..e5821739d0ecf6738cdae02d7250434df49f3171 100644
--- a/substrate/frame/system/src/weights.rs
+++ b/substrate/frame/system/src/weights.rs
@@ -17,8 +17,8 @@
 
 //! Autogenerated weights for frame_system
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-06-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2021-07-20, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -57,78 +57,82 @@ pub trait WeightInfo {
 /// Weights for frame_system using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: crate::Config> WeightInfo for SubstrateWeight<T> {
-	fn remark(_b: u32, ) -> Weight {
-		(1_038_000 as Weight)
+	fn remark(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 0
+			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn remark_with_event(b: u32, ) -> Weight {
-		(5_246_000 as Weight)
+		(16_569_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn set_heap_pages() -> Weight {
-		(1_586_000 as Weight)
+		(1_783_000 as Weight)
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	fn set_changes_trie_config() -> Weight {
-		(7_181_000 as Weight)
+		(7_727_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	fn set_storage(i: u32, ) -> Weight {
 		(0 as Weight)
 			// Standard Error: 0
-			.saturating_add((568_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((875_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_storage(i: u32, ) -> Weight {
-		(2_278_000 as Weight)
+		(4_216_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((423_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((555_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_prefix(p: u32, ) -> Weight {
-		(8_243_000 as Weight)
+		(14_558_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((795_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((781_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
 	}
 }
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
-	fn remark(_b: u32, ) -> Weight {
-		(1_038_000 as Weight)
+	fn remark(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 0
+			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn remark_with_event(b: u32, ) -> Weight {
-		(5_246_000 as Weight)
+		(16_569_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn set_heap_pages() -> Weight {
-		(1_586_000 as Weight)
+		(1_783_000 as Weight)
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	fn set_changes_trie_config() -> Weight {
-		(7_181_000 as Weight)
+		(7_727_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	fn set_storage(i: u32, ) -> Weight {
 		(0 as Weight)
 			// Standard Error: 0
-			.saturating_add((568_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((875_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_storage(i: u32, ) -> Weight {
-		(2_278_000 as Weight)
+		(4_216_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((423_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((555_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_prefix(p: u32, ) -> Weight {
-		(8_243_000 as Weight)
+		(14_558_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((795_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((781_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
 	}
 }
diff --git a/substrate/frame/utility/src/weights.rs b/substrate/frame/utility/src/weights.rs
index e098bf2b8a9e3184f54ddb0b66ccec6f17ce8fb5..b676ca5cdbcfccc0ea388cc63b22d7d0895a953e 100644
--- a/substrate/frame/utility/src/weights.rs
+++ b/substrate/frame/utility/src/weights.rs
@@ -17,8 +17,8 @@
 
 //! Autogenerated weights for pallet_utility
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-06-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2021-07-14, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -54,33 +54,33 @@ pub trait WeightInfo {
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn batch(c: u32, ) -> Weight {
-		(14_618_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((610_000 as Weight).saturating_mul(c as Weight))
+		(20_779_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_080_000 as Weight).saturating_mul(c as Weight))
 	}
 	fn as_derivative() -> Weight {
-		(3_175_000 as Weight)
+		(3_994_000 as Weight)
 	}
 	fn batch_all(c: u32, ) -> Weight {
-		(14_561_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((1_013_000 as Weight).saturating_mul(c as Weight))
+		(22_183_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_506_000 as Weight).saturating_mul(c as Weight))
 	}
 }
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
 	fn batch(c: u32, ) -> Weight {
-		(14_618_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((610_000 as Weight).saturating_mul(c as Weight))
+		(20_779_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_080_000 as Weight).saturating_mul(c as Weight))
 	}
 	fn as_derivative() -> Weight {
-		(3_175_000 as Weight)
+		(3_994_000 as Weight)
 	}
 	fn batch_all(c: u32, ) -> Weight {
-		(14_561_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((1_013_000 as Weight).saturating_mul(c as Weight))
+		(22_183_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_506_000 as Weight).saturating_mul(c as Weight))
 	}
 }