diff --git a/substrate/bin/node/bench/src/tempdb.rs b/substrate/bin/node/bench/src/tempdb.rs
index 2aafd013a586ae2006d5996a0401654a1a27c520..f3fd693d21fe107a1a5671a9819d5b1e98270703 100644
--- a/substrate/bin/node/bench/src/tempdb.rs
+++ b/substrate/bin/node/bench/src/tempdb.rs
@@ -90,7 +90,7 @@ impl TempDatabase {
 			},
 			DatabaseType::ParityDb => Arc::new(ParityDbWrapper({
 				let mut options = parity_db::Options::with_columns(self.0.path(), 1);
-				let mut column_options = &mut options.columns[0];
+				let column_options = &mut options.columns[0];
 				column_options.ref_counted = true;
 				column_options.preimage = true;
 				column_options.uniform = true;
diff --git a/substrate/client/db/src/parity_db.rs b/substrate/client/db/src/parity_db.rs
index 01562081a8f4fb3c01022f77df67d330194672dc..b7068f2430ef73c34134ecd5cebfac0a8a57a034 100644
--- a/substrate/client/db/src/parity_db.rs
+++ b/substrate/client/db/src/parity_db.rs
@@ -54,16 +54,16 @@ pub fn open<H: Clone + AsRef<[u8]>>(
 			];
 
 			for i in compressed {
-				let mut column = &mut config.columns[i as usize];
+				let column = &mut config.columns[i as usize];
 				column.compression = parity_db::CompressionType::Lz4;
 			}
 
-			let mut state_col = &mut config.columns[columns::STATE as usize];
+			let state_col = &mut config.columns[columns::STATE as usize];
 			state_col.ref_counted = true;
 			state_col.preimage = true;
 			state_col.uniform = true;
 
-			let mut tx_col = &mut config.columns[columns::TRANSACTION as usize];
+			let tx_col = &mut config.columns[columns::TRANSACTION as usize];
 			tx_col.ref_counted = true;
 			tx_col.preimage = true;
 			tx_col.uniform = true;
diff --git a/substrate/client/db/src/pinned_blocks_cache.rs b/substrate/client/db/src/pinned_blocks_cache.rs
index 7b346b4631eeede64e0bee3ffc49891f1d121d10..46c9287fb19ac1361153dbb65f4f0b353170042f 100644
--- a/substrate/client/db/src/pinned_blocks_cache.rs
+++ b/substrate/client/db/src/pinned_blocks_cache.rs
@@ -168,7 +168,7 @@ impl<Block: BlockT> PinnedBlocksCache<Block> {
 	/// Attach body to an existing cache item
 	pub fn insert_body(&mut self, hash: Block::Hash, extrinsics: Option<Vec<Block::Extrinsic>>) {
 		match self.cache.peek_mut(&hash) {
-			Some(mut entry) => {
+			Some(entry) => {
 				entry.body = Some(extrinsics);
 				log::trace!(
 					target: LOG_TARGET,
@@ -192,7 +192,7 @@ impl<Block: BlockT> PinnedBlocksCache<Block> {
 		justifications: Option<Justifications>,
 	) {
 		match self.cache.peek_mut(&hash) {
-			Some(mut entry) => {
+			Some(entry) => {
 				entry.justifications = Some(justifications);
 				log::trace!(
 					target: LOG_TARGET,
diff --git a/substrate/client/network/src/protocol/notifications/handler.rs b/substrate/client/network/src/protocol/notifications/handler.rs
index 665b646ecdcfa5ebf60f152b6bc7b2bfe2deb462..0ac2e250a2ea3b9da317159f190af6f682e75128 100644
--- a/substrate/client/network/src/protocol/notifications/handler.rs
+++ b/substrate/client/network/src/protocol/notifications/handler.rs
@@ -467,7 +467,7 @@ impl ConnectionHandler for NotifsHandler {
 		match event {
 			ConnectionEvent::FullyNegotiatedInbound(inbound) => {
 				let (mut in_substream_open, protocol_index) = inbound.protocol;
-				let mut protocol_info = &mut self.protocols[protocol_index];
+				let protocol_info = &mut self.protocols[protocol_index];
 
 				match protocol_info.state {
 					State::Closed { pending_opening } => {
diff --git a/substrate/client/network/sync/src/state.rs b/substrate/client/network/sync/src/state.rs
index 0fcf17158179e2de832faa2c2b02bdd0cc46801f..305f0ee6838a296b5e6f73902360069318232c88 100644
--- a/substrate/client/network/sync/src/state.rs
+++ b/substrate/client/network/sync/src/state.rs
@@ -150,7 +150,7 @@ where
 				} else {
 					values.key_values
 				};
-				let mut entry = self.state.entry(values.state_root).or_default();
+				let entry = self.state.entry(values.state_root).or_default();
 				if entry.0.len() > 0 && entry.1.len() > 1 {
 					// Already imported child_trie with same root.
 					// Warning this will not work with parallel download.
diff --git a/substrate/client/statement-store/src/lib.rs b/substrate/client/statement-store/src/lib.rs
index 2e2bb3bd3b430af4c192b0e4e2d645e234230854..4acb89a05f7d17b9cf891f807dd9f3ab10fac9cd 100644
--- a/substrate/client/statement-store/src/lib.rs
+++ b/substrate/client/statement-store/src/lib.rs
@@ -236,7 +236,7 @@ impl Index {
 		let priority = Priority(statement.priority().unwrap_or(0));
 		self.entries.insert(hash, (account, priority, statement.data_len()));
 		self.total_size += statement.data_len();
-		let mut account_info = self.accounts.entry(account).or_default();
+		let account_info = self.accounts.entry(account).or_default();
 		account_info.data_size += statement.data_len();
 		if let Some(channel) = statement.channel() {
 			account_info.channels.insert(channel, ChannelEntry { hash, priority });
@@ -530,7 +530,7 @@ impl Store {
 
 		let mut config = parity_db::Options::with_columns(&path, col::COUNT);
 
-		let mut statement_col = &mut config.columns[col::STATEMENTS as usize];
+		let statement_col = &mut config.columns[col::STATEMENTS as usize];
 		statement_col.ref_counted = false;
 		statement_col.preimage = true;
 		statement_col.uniform = true;
diff --git a/substrate/frame/bounties/src/lib.rs b/substrate/frame/bounties/src/lib.rs
index 14f7b45cb9aa19f25559ebdcb9d31734ed0e29ff..07ac23a9d80103459d240ac16904510b75e39902 100644
--- a/substrate/frame/bounties/src/lib.rs
+++ b/substrate/frame/bounties/src/lib.rs
@@ -361,7 +361,7 @@ pub mod pallet {
 		) -> DispatchResult {
 			let max_amount = T::SpendOrigin::ensure_origin(origin)?;
 			Bounties::<T, I>::try_mutate_exists(bounty_id, |maybe_bounty| -> DispatchResult {
-				let mut bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
+				let bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
 				ensure!(
 					bounty.value <= max_amount,
 					pallet_treasury::Error::<T, I>::InsufficientPermission
@@ -396,7 +396,7 @@ pub mod pallet {
 
 			let curator = T::Lookup::lookup(curator)?;
 			Bounties::<T, I>::try_mutate_exists(bounty_id, |maybe_bounty| -> DispatchResult {
-				let mut bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
+				let bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
 				ensure!(
 					bounty.value <= max_amount,
 					pallet_treasury::Error::<T, I>::InsufficientPermission
@@ -444,7 +444,7 @@ pub mod pallet {
 				.or_else(|_| T::RejectOrigin::ensure_origin(origin).map(|_| None))?;
 
 			Bounties::<T, I>::try_mutate_exists(bounty_id, |maybe_bounty| -> DispatchResult {
-				let mut bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
+				let bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
 
 				let slash_curator = |curator: &T::AccountId,
 				                     curator_deposit: &mut BalanceOf<T, I>| {
@@ -527,7 +527,7 @@ pub mod pallet {
 			let signer = ensure_signed(origin)?;
 
 			Bounties::<T, I>::try_mutate_exists(bounty_id, |maybe_bounty| -> DispatchResult {
-				let mut bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
+				let bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
 
 				match bounty.status {
 					BountyStatus::CuratorProposed { ref curator } => {
@@ -571,7 +571,7 @@ pub mod pallet {
 			let beneficiary = T::Lookup::lookup(beneficiary)?;
 
 			Bounties::<T, I>::try_mutate_exists(bounty_id, |maybe_bounty| -> DispatchResult {
-				let mut bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
+				let bounty = maybe_bounty.as_mut().ok_or(Error::<T, I>::InvalidIndex)?;
 
 				// Ensure no active child bounties before processing the call.
 				ensure!(
diff --git a/substrate/frame/child-bounties/src/lib.rs b/substrate/frame/child-bounties/src/lib.rs
index 094b41822c43357b9ac99efd25c05f138b316565..14c1907af2c4671b60b53960a04e500e32608137 100644
--- a/substrate/frame/child-bounties/src/lib.rs
+++ b/substrate/frame/child-bounties/src/lib.rs
@@ -331,7 +331,7 @@ pub mod pallet {
 				parent_bounty_id,
 				child_bounty_id,
 				|maybe_child_bounty| -> DispatchResult {
-					let mut child_bounty =
+					let child_bounty =
 						maybe_child_bounty.as_mut().ok_or(BountiesError::<T>::InvalidIndex)?;
 
 					// Ensure child-bounty is in expected state.
@@ -396,7 +396,7 @@ pub mod pallet {
 				parent_bounty_id,
 				child_bounty_id,
 				|maybe_child_bounty| -> DispatchResult {
-					let mut child_bounty =
+					let child_bounty =
 						maybe_child_bounty.as_mut().ok_or(BountiesError::<T>::InvalidIndex)?;
 
 					// Ensure child-bounty is in expected state.
@@ -473,7 +473,7 @@ pub mod pallet {
 				parent_bounty_id,
 				child_bounty_id,
 				|maybe_child_bounty| -> DispatchResult {
-					let mut child_bounty =
+					let child_bounty =
 						maybe_child_bounty.as_mut().ok_or(BountiesError::<T>::InvalidIndex)?;
 
 					let slash_curator = |curator: &T::AccountId,
@@ -591,7 +591,7 @@ pub mod pallet {
 				parent_bounty_id,
 				child_bounty_id,
 				|maybe_child_bounty| -> DispatchResult {
-					let mut child_bounty =
+					let child_bounty =
 						maybe_child_bounty.as_mut().ok_or(BountiesError::<T>::InvalidIndex)?;
 
 					// Ensure child-bounty is in active state.
diff --git a/substrate/frame/nomination-pools/benchmarking/src/lib.rs b/substrate/frame/nomination-pools/benchmarking/src/lib.rs
index 137b9e9af63e3f2e8e3f13dc57fc473f0f9a5225..30bef6221c968ad4946d81f3c86e9d8df4215e59 100644
--- a/substrate/frame/nomination-pools/benchmarking/src/lib.rs
+++ b/substrate/frame/nomination-pools/benchmarking/src/lib.rs
@@ -609,7 +609,7 @@ frame_benchmarking::benchmarks! {
 		let (depositor, pool_account) = create_pool_account::<T>(0, min_create_bond, None);
 		BondedPools::<T>::mutate(&1, |maybe_pool| {
 			// Force the pool into an invalid state
-			maybe_pool.as_mut().map(|mut pool| pool.points = min_create_bond * 10u32.into());
+			maybe_pool.as_mut().map(|pool| pool.points = min_create_bond * 10u32.into());
 		});
 
 		let caller = account("caller", 0, USER_SEED);
diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs
index 35aa2626e3b7ce93f9411ea8c837941754c97859..d8a7de2193bae10404cf4ce4f92a26c204d22276 100644
--- a/substrate/frame/staking/src/pallet/mod.rs
+++ b/substrate/frame/staking/src/pallet/mod.rs
@@ -1006,9 +1006,7 @@ pub mod pallet {
 
 				// Note: in case there is no current era it is fine to bond one era more.
 				let era = Self::current_era().unwrap_or(0) + T::BondingDuration::get();
-				if let Some(mut chunk) =
-					ledger.unlocking.last_mut().filter(|chunk| chunk.era == era)
-				{
+				if let Some(chunk) = ledger.unlocking.last_mut().filter(|chunk| chunk.era == era) {
 					// To keep the chunk count down, we only keep one chunk per era. Since
 					// `unlocking` is a FiFo queue, if a chunk exists for `era` we know that it will
 					// be the last one.
diff --git a/substrate/frame/support/src/storage/generator/double_map.rs b/substrate/frame/support/src/storage/generator/double_map.rs
index 5da68873b10e6f21f8340107607a898d4ce59599..00a3f1bc7c1ce3d4434766e2a32fa5d523db043d 100644
--- a/substrate/frame/support/src/storage/generator/double_map.rs
+++ b/substrate/frame/support/src/storage/generator/double_map.rs
@@ -21,7 +21,7 @@ use crate::{
 	Never,
 };
 use codec::{Decode, Encode, EncodeLike, FullCodec, FullEncode};
-use sp_std::{borrow::Borrow, prelude::*};
+use sp_std::prelude::*;
 
 /// Generator for `StorageDoubleMap` used by `decl_storage`.
 ///
@@ -78,7 +78,7 @@ pub trait StorageDoubleMap<K1: FullEncode, K2: FullEncode, V: FullCodec> {
 		KArg1: EncodeLike<K1>,
 	{
 		let storage_prefix = storage_prefix(Self::module_prefix(), Self::storage_prefix());
-		let key_hashed = k1.borrow().using_encoded(Self::Hasher1::hash);
+		let key_hashed = k1.using_encoded(Self::Hasher1::hash);
 
 		let mut final_key = Vec::with_capacity(storage_prefix.len() + key_hashed.as_ref().len());
 
@@ -95,8 +95,8 @@ pub trait StorageDoubleMap<K1: FullEncode, K2: FullEncode, V: FullCodec> {
 		KArg2: EncodeLike<K2>,
 	{
 		let storage_prefix = storage_prefix(Self::module_prefix(), Self::storage_prefix());
-		let key1_hashed = k1.borrow().using_encoded(Self::Hasher1::hash);
-		let key2_hashed = k2.borrow().using_encoded(Self::Hasher2::hash);
+		let key1_hashed = k1.using_encoded(Self::Hasher1::hash);
+		let key2_hashed = k2.using_encoded(Self::Hasher2::hash);
 
 		let mut final_key = Vec::with_capacity(
 			storage_prefix.len() + key1_hashed.as_ref().len() + key2_hashed.as_ref().len(),
@@ -198,7 +198,7 @@ where
 		KArg2: EncodeLike<K2>,
 		VArg: EncodeLike<V>,
 	{
-		unhashed::put(&Self::storage_double_map_final_key(k1, k2), &val.borrow())
+		unhashed::put(&Self::storage_double_map_final_key(k1, k2), &val)
 	}
 
 	fn remove<KArg1, KArg2>(k1: KArg1, k2: KArg2)
@@ -336,8 +336,8 @@ where
 		let old_key = {
 			let storage_prefix = storage_prefix(Self::module_prefix(), Self::storage_prefix());
 
-			let key1_hashed = key1.borrow().using_encoded(OldHasher1::hash);
-			let key2_hashed = key2.borrow().using_encoded(OldHasher2::hash);
+			let key1_hashed = key1.using_encoded(OldHasher1::hash);
+			let key2_hashed = key2.using_encoded(OldHasher2::hash);
 
 			let mut final_key = Vec::with_capacity(
 				storage_prefix.len() + key1_hashed.as_ref().len() + key2_hashed.as_ref().len(),
diff --git a/substrate/frame/support/src/storage/generator/map.rs b/substrate/frame/support/src/storage/generator/map.rs
index 3b36b9bddb704612db2cc027c9fdf968e566022a..3cd7bea2fe7b2cb80dcacc1032a87a89f65e380b 100644
--- a/substrate/frame/support/src/storage/generator/map.rs
+++ b/substrate/frame/support/src/storage/generator/map.rs
@@ -68,7 +68,7 @@ pub trait StorageMap<K: FullEncode, V: FullCodec> {
 		KeyArg: EncodeLike<K>,
 	{
 		let storage_prefix = storage_prefix(Self::module_prefix(), Self::storage_prefix());
-		let key_hashed = key.borrow().using_encoded(Self::Hasher::hash);
+		let key_hashed = key.using_encoded(Self::Hasher::hash);
 
 		let mut final_key = Vec::with_capacity(storage_prefix.len() + key_hashed.as_ref().len());
 
@@ -327,7 +327,7 @@ impl<K: FullEncode, V: FullCodec, G: StorageMap<K, V>> storage::StorageMap<K, V>
 	fn migrate_key<OldHasher: StorageHasher, KeyArg: EncodeLike<K>>(key: KeyArg) -> Option<V> {
 		let old_key = {
 			let storage_prefix = storage_prefix(Self::module_prefix(), Self::storage_prefix());
-			let key_hashed = key.borrow().using_encoded(OldHasher::hash);
+			let key_hashed = key.using_encoded(OldHasher::hash);
 
 			let mut final_key =
 				Vec::with_capacity(storage_prefix.len() + key_hashed.as_ref().len());
diff --git a/substrate/primitives/npos-elections/src/lib.rs b/substrate/primitives/npos-elections/src/lib.rs
index 253a231602f77221dc007926a27758fca37d418b..9239a2d90d309c2aac4e77b8963f6fbbe6115267 100644
--- a/substrate/primitives/npos-elections/src/lib.rs
+++ b/substrate/primitives/npos-elections/src/lib.rs
@@ -470,7 +470,7 @@ pub fn to_support_map<AccountId: IdentifierT>(
 	// build support struct.
 	for StakedAssignment { who, distribution } in assignments.iter() {
 		for (c, weight_extended) in distribution.iter() {
-			let mut support = supports.entry(c.clone()).or_default();
+			let support = supports.entry(c.clone()).or_default();
 			support.total = support.total.saturating_add(*weight_extended);
 			support.voters.push((who.clone(), *weight_extended));
 		}