diff --git a/substrate/client/api/src/cht.rs b/substrate/client/api/src/cht.rs
index 3eba63e7026a3a27f8e62c95ae888173436da937..ecf52d0bab49bd409c6e7a60fb5b117f3d684d3a 100644
--- a/substrate/client/api/src/cht.rs
+++ b/substrate/client/api/src/cht.rs
@@ -232,7 +232,7 @@ pub fn for_each_cht_group<Header, I, F, P>(
 			functor_param = functor(
 				functor_param,
 				current_cht_num,
-				::std::mem::replace(&mut current_cht_blocks, Vec::new()),
+				std::mem::take(&mut current_cht_blocks),
 			)?;
 		}
 
@@ -244,7 +244,7 @@ pub fn for_each_cht_group<Header, I, F, P>(
 		functor(
 			functor_param,
 			current_cht_num,
-			::std::mem::replace(&mut current_cht_blocks, Vec::new()),
+			std::mem::take(&mut current_cht_blocks),
 		)?;
 	}
 
diff --git a/substrate/client/consensus/babe/src/tests.rs b/substrate/client/consensus/babe/src/tests.rs
index 89514906be413c0cbd761b5c43dc932fe4c82572..f933251d18e8fb624cc6162d6eda1fa1e56b6f35 100644
--- a/substrate/client/consensus/babe/src/tests.rs
+++ b/substrate/client/consensus/babe/src/tests.rs
@@ -436,7 +436,7 @@ fn authoring_blocks() {
 #[should_panic]
 fn rejects_missing_inherent_digest() {
 	run_one_test(|header: &mut TestHeader, stage| {
-		let v = std::mem::replace(&mut header.digest_mut().logs, vec![]);
+		let v = std::mem::take(&mut header.digest_mut().logs);
 		header.digest_mut().logs = v.into_iter()
 			.filter(|v| stage == Stage::PostSeal || v.as_babe_pre_digest().is_none())
 			.collect()
@@ -447,7 +447,7 @@ fn rejects_missing_inherent_digest() {
 #[should_panic]
 fn rejects_missing_seals() {
 	run_one_test(|header: &mut TestHeader, stage| {
-		let v = std::mem::replace(&mut header.digest_mut().logs, vec![]);
+		let v = std::mem::take(&mut header.digest_mut().logs);
 		header.digest_mut().logs = v.into_iter()
 			.filter(|v| stage == Stage::PreSeal || v.as_babe_seal().is_none())
 			.collect()
@@ -458,7 +458,7 @@ fn rejects_missing_seals() {
 #[should_panic]
 fn rejects_missing_consensus_digests() {
 	run_one_test(|header: &mut TestHeader, stage| {
-		let v = std::mem::replace(&mut header.digest_mut().logs, vec![]);
+		let v = std::mem::take(&mut header.digest_mut().logs);
 		header.digest_mut().logs = v.into_iter()
 			.filter(|v| stage == Stage::PostSeal || v.as_next_epoch_descriptor().is_none())
 			.collect()
diff --git a/substrate/client/consensus/manual-seal/src/lib.rs b/substrate/client/consensus/manual-seal/src/lib.rs
index caddb47d3c8bf9a1f4f67774754be64bf6a4b63b..b2020acb1f7650f9656e0ad6d048f9467bede5b5 100644
--- a/substrate/client/consensus/manual-seal/src/lib.rs
+++ b/substrate/client/consensus/manual-seal/src/lib.rs
@@ -231,7 +231,7 @@ mod tests {
 			.map(move |_| {
 				// we're only going to submit one tx so this fn will only be called once.
 				let mut_sender =  Arc::get_mut(&mut sender).unwrap();
-				let sender = std::mem::replace(mut_sender, None);
+				let sender = std::mem::take(mut_sender);
 				EngineCommand::SealNewBlock {
 					create_empty: false,
 					finalize: true,
diff --git a/substrate/client/finality-grandpa/src/finality_proof.rs b/substrate/client/finality-grandpa/src/finality_proof.rs
index 4035854a380b03d064b067b57b17ca8967bcf1b0..0eef20d813f22187bfca2e6f411ede06fa5b3b2c 100644
--- a/substrate/client/finality-grandpa/src/finality_proof.rs
+++ b/substrate/client/finality-grandpa/src/finality_proof.rs
@@ -341,7 +341,7 @@ pub(crate) fn prove_finality<Block: BlockT, B: BlockchainBackend<Block>, J>(
 			let proof_fragment = FinalityProofFragment {
 				block: current,
 				justification,
-				unknown_headers: ::std::mem::replace(&mut unknown_headers, Vec::new()),
+				unknown_headers: ::std::mem::take(&mut unknown_headers),
 				authorities_proof: new_authorities_proof,
 			};
 
diff --git a/substrate/client/network/src/protocol/sync.rs b/substrate/client/network/src/protocol/sync.rs
index 1aba1bb66f66f5f8c3468bfaa5ebd51442740bc5..4e9347001d9b3fcc920a50d0f71838a8a403d4c7 100644
--- a/substrate/client/network/src/protocol/sync.rs
+++ b/substrate/client/network/src/protocol/sync.rs
@@ -122,7 +122,7 @@ impl PendingRequests {
 	}
 
 	fn take(&mut self) -> PendingRequests {
-		std::mem::replace(self, Default::default())
+		std::mem::take(self)
 	}
 
 	fn set_all(&mut self) {
@@ -1270,7 +1270,7 @@ impl<B: BlockT> ChainSync<B> {
 		self.best_queued_number = std::cmp::max(info.best_number, self.best_imported_number);
 		self.pending_requests.set_all();
 		debug!(target:"sync", "Restarted with {} ({})", self.best_queued_number, self.best_queued_hash);
-		let old_peers = std::mem::replace(&mut self.peers, HashMap::new());
+		let old_peers = std::mem::take(&mut self.peers);
 		old_peers.into_iter().filter_map(move |(id, p)| {
 			match self.new_peer(id.clone(), p.best_hash, p.best_number) {
 				Ok(None) => None,
diff --git a/substrate/client/state-db/src/pruning.rs b/substrate/client/state-db/src/pruning.rs
index 1d15e617a1839d2b36b6f53c9c18aa750c30272b..6921beea916564a779ab7543c2d9e10d9c67b5da 100644
--- a/substrate/client/state-db/src/pruning.rs
+++ b/substrate/client/state-db/src/pruning.rs
@@ -169,7 +169,7 @@ impl<BlockHash: Hash, Key: Hash> RefWindow<BlockHash, Key> {
 		} else {
 			Default::default()
 		};
-		let deleted = ::std::mem::replace(&mut commit.data.deleted, Vec::new());
+		let deleted = ::std::mem::take(&mut commit.data.deleted);
 		let journal_record = JournalRecord {
 			hash: hash.clone(),
 			inserted,
diff --git a/substrate/primitives/core/src/offchain/testing.rs b/substrate/primitives/core/src/offchain/testing.rs
index d93528093fc0768aa188995e0fb5e42c0df9509a..b889374a47c2fd26baee2f0fdcec28a6a73cc786 100644
--- a/substrate/primitives/core/src/offchain/testing.rs
+++ b/substrate/primitives/core/src/offchain/testing.rs
@@ -105,7 +105,7 @@ impl OffchainState {
 	fn fulfill_expected(&mut self, id: u16) {
 		if let Some(mut req) = self.expected_requests.remove(&RequestId(id)) {
 			let response = req.response.take().expect("Response checked while added.");
-			let headers = std::mem::replace(&mut req.response_headers, vec![]);
+			let headers = std::mem::take(&mut req.response_headers);
 			self.fulfill_pending_request(id, req, response, headers);
 		}
 	}
diff --git a/substrate/primitives/io/src/batch_verifier.rs b/substrate/primitives/io/src/batch_verifier.rs
index 55598217f6e2876dcad2dbe14ba97d19c511f6ac..ab2ee629d326db329a24667557a06631994ec576 100644
--- a/substrate/primitives/io/src/batch_verifier.rs
+++ b/substrate/primitives/io/src/batch_verifier.rs
@@ -109,13 +109,13 @@ impl BatchVerifier {
 		self.sr25519_items.push(Sr25519BatchItem { signature, pub_key, message });
 
 		if self.sr25519_items.len() >= 128 {
-			let items = std::mem::replace(&mut self.sr25519_items, vec![]);
+			let items = std::mem::take(&mut self.sr25519_items);
 			if self.spawn_verification_task(move || Self::verify_sr25519_batch(items)).is_err() {
 				log::debug!(
 					target: "runtime",
 					"Batch-verification returns false because failed to spawn background task.",
 				);
-	
+
 				return false;
 			}
 		}
@@ -135,7 +135,7 @@ impl BatchVerifier {
 	/// aggregated result.
 	#[must_use]
 	pub fn verify_and_clear(&mut self) -> bool {
-		let pending = std::mem::replace(&mut self.pending_tasks, vec![]);
+		let pending = std::mem::take(&mut self.pending_tasks);
 		let started = std::time::Instant::now();
 
 		log::trace!(
@@ -145,7 +145,7 @@ impl BatchVerifier {
 			self.sr25519_items.len(),
 		);
 
-		if !Self::verify_sr25519_batch(std::mem::replace(&mut self.sr25519_items, vec![])) {
+		if !Self::verify_sr25519_batch(std::mem::take(&mut self.sr25519_items)) {
 			return false;
 		}
 
diff --git a/substrate/primitives/state-machine/src/basic.rs b/substrate/primitives/state-machine/src/basic.rs
index c1745c03daaf08d56e2ec7b36a2de15da085d570..4eb724ce6893059652255754e046f2a75428c3f0 100644
--- a/substrate/primitives/state-machine/src/basic.rs
+++ b/substrate/primitives/state-machine/src/basic.rs
@@ -82,8 +82,8 @@ impl BasicExternalities {
 	) -> R {
 		let mut ext = Self {
 			inner: Storage {
-				top: std::mem::replace(&mut storage.top, Default::default()),
-				children_default: std::mem::replace(&mut storage.children_default, Default::default()),
+				top: std::mem::take(&mut storage.top),
+				children_default: std::mem::take(&mut storage.children_default),
 			},
 			extensions: Default::default(),
 		};
diff --git a/substrate/primitives/state-machine/src/overlayed_changes.rs b/substrate/primitives/state-machine/src/overlayed_changes.rs
index c98da11c27dd83a0b9f0b09e06b95188440c51c0..f7773a8211e39e683ea5ecfadbce3b72fa9fa085 100644
--- a/substrate/primitives/state-machine/src/overlayed_changes.rs
+++ b/substrate/primitives/state-machine/src/overlayed_changes.rs
@@ -489,10 +489,10 @@ impl OverlayedChanges {
 	) {
 		assert!(self.prospective.is_empty());
 		(
-			std::mem::replace(&mut self.committed.top, Default::default())
+			std::mem::take(&mut self.committed.top)
 				.into_iter()
 				.map(|(k, v)| (k, v.value)),
-			std::mem::replace(&mut self.committed.children_default, Default::default())
+			std::mem::take(&mut self.committed.children_default)
 				.into_iter()
 				.map(|(sk, (v, ci))| (sk, (v.into_iter().map(|(k, v)| (k, v.value)), ci))),
 		)
diff --git a/substrate/utils/fork-tree/src/lib.rs b/substrate/utils/fork-tree/src/lib.rs
index 1e7b48fed07076a29a184579dc79f622c2e028ac..ba7e519ddf1a6f0ed9737c591ac42de12144de82 100644
--- a/substrate/utils/fork-tree/src/lib.rs
+++ b/substrate/utils/fork-tree/src/lib.rs
@@ -114,7 +114,7 @@ impl<H, N, V> ForkTree<H, N, V> where
 		)?;
 
 		let removed = if let Some(mut root_index) = new_root_index {
-			let mut old_roots = std::mem::replace(&mut self.roots, Vec::new());
+			let mut old_roots = std::mem::take(&mut self.roots);
 
 			let mut root = None;
 			let mut cur_children = Some(&mut old_roots);
@@ -137,7 +137,7 @@ impl<H, N, V> ForkTree<H, N, V> where
 
 			// we found the deepest ancestor of the finalized block, so we prune
 			// out any children that don't include the finalized block.
-			let root_children = std::mem::replace(&mut root.children, Vec::new());
+			let root_children = std::mem::take(&mut root.children);
 			let mut is_first = true;
 
 			for child in root_children {