diff --git a/cumulus/pallets/collator-selection/src/lib.rs b/cumulus/pallets/collator-selection/src/lib.rs
index 53a619442ba92ccbbd538543641dab385d0b34b2..fab70a3d0d26cc48c77e98389519b725fb027798 100644
--- a/cumulus/pallets/collator-selection/src/lib.rs
+++ b/cumulus/pallets/collator-selection/src/lib.rs
@@ -368,7 +368,7 @@ pub mod pallet {
 
 			let current_count =
 				<Candidates<T>>::try_mutate(|candidates| -> Result<usize, DispatchError> {
-					if candidates.into_iter().any(|candidate| candidate.who == who) {
+					if candidates.iter().any(|candidate| candidate.who == who) {
 						Err(Error::<T>::AlreadyCandidate)?
 					} else {
 						T::Currency::reserve(&who, deposit)?;
@@ -409,6 +409,7 @@ pub mod pallet {
 		pub fn account_id() -> T::AccountId {
 			T::PotId::get().into_account()
 		}
+
 		/// Removes a candidate if they exist and sends them back their deposit
 		fn try_remove_candidate(who: &T::AccountId) -> Result<usize, DispatchError> {
 			let current_count =
@@ -417,8 +418,8 @@ pub mod pallet {
 						.iter()
 						.position(|candidate| candidate.who == *who)
 						.ok_or(Error::<T>::NotCandidate)?;
-					T::Currency::unreserve(&who, candidates[index].deposit);
-					candidates.remove(index);
+					let candidate = candidates.remove(index);
+					T::Currency::unreserve(who, candidate.deposit);
 					<LastAuthoredBlock<T>>::remove(who.clone());
 					Ok(candidates.len())
 				})?;
@@ -431,16 +432,18 @@ pub mod pallet {
 		/// This is done on the fly, as frequent as we are told to do so, as the session manager.
 		pub fn assemble_collators(candidates: Vec<T::AccountId>) -> Vec<T::AccountId> {
 			let mut collators = Self::invulnerables();
-			collators.extend(candidates.into_iter().collect::<Vec<_>>());
+			collators.extend(candidates);
 			collators
 		}
-		/// Kicks out and candidates that did not produce a block in the kick threshold.
+
+		/// Kicks out candidates that did not produce a block in the kick threshold
+		/// and refund their deposits.
 		pub fn kick_stale_candidates(
 			candidates: Vec<CandidateInfo<T::AccountId, BalanceOf<T>>>,
 		) -> Vec<T::AccountId> {
 			let now = frame_system::Pallet::<T>::block_number();
 			let kick_threshold = T::KickThreshold::get();
-			let new_candidates = candidates
+			candidates
 				.into_iter()
 				.filter_map(|c| {
 					let last_block = <LastAuthoredBlock<T>>::get(c.who.clone());
@@ -458,8 +461,7 @@ pub mod pallet {
 						None
 					}
 				})
-				.collect::<Vec<_>>();
-			new_candidates
+				.collect()
 		}
 	}
 
@@ -503,9 +505,8 @@ pub mod pallet {
 			let candidates = Self::candidates();
 			let candidates_len_before = candidates.len();
 			let active_candidates = Self::kick_stale_candidates(candidates);
-			let active_candidates_len = active_candidates.len();
+			let removed = candidates_len_before - active_candidates.len();
 			let result = Self::assemble_collators(active_candidates);
-			let removed = candidates_len_before - active_candidates_len;
 
 			frame_system::Pallet::<T>::register_extra_weight_unchecked(
 				T::WeightInfo::new_session(candidates_len_before as u32, removed as u32),