diff --git a/substrate/frame/election-provider-multi-phase/src/lib.rs b/substrate/frame/election-provider-multi-phase/src/lib.rs
index bc19e5143424c7ab895408b9e514f3a6b80fcbb7..2d49cd79dbcad76426727b9484f15ab7b4d768c0 100644
--- a/substrate/frame/election-provider-multi-phase/src/lib.rs
+++ b/substrate/frame/election-provider-multi-phase/src/lib.rs
@@ -237,7 +237,7 @@ use frame_election_provider_support::{
 use frame_support::{
 	dispatch::DispatchClass,
 	ensure,
-	traits::{Currency, Get, OnUnbalanced, ReservableCurrency},
+	traits::{Currency, DefensiveResult, Get, OnUnbalanced, ReservableCurrency},
 	weights::Weight,
 	DefaultNoBound, EqNoBound, PartialEqNoBound,
 };
@@ -547,6 +547,10 @@ pub enum FeasibilityError {
 	UntrustedScoreTooLow,
 	/// Data Provider returned too many desired targets
 	TooManyDesiredTargets,
+	/// Conversion into bounded types failed.
+	///
+	/// Should never happen under correct configurations.
+	BoundedConversionFailed,
 }
 
 impl From<sp_npos_elections::Error> for FeasibilityError {
@@ -560,10 +564,7 @@ pub use pallet::*;
 pub mod pallet {
 	use super::*;
 	use frame_election_provider_support::{InstantElectionProvider, NposSolver};
-	use frame_support::{
-		pallet_prelude::*,
-		traits::{DefensiveResult, EstimateCallFee},
-	};
+	use frame_support::{pallet_prelude::*, traits::EstimateCallFee};
 	use frame_system::pallet_prelude::*;
 
 	#[pallet::config]
@@ -1549,7 +1550,9 @@ impl<T: Config> Pallet<T> {
 		ensure!(known_score == score, FeasibilityError::InvalidScore);
 
 		// Size of winners in miner solution is equal to `desired_targets` <= `MaxWinners`.
-		let supports = supports.try_into().expect("checked desired_targets <= MaxWinners; qed");
+		let supports = supports
+			.try_into()
+			.defensive_map_err(|_| FeasibilityError::BoundedConversionFailed)?;
 		Ok(ReadySolution { supports, compute, score })
 	}
 
diff --git a/substrate/frame/fast-unstake/src/migrations.rs b/substrate/frame/fast-unstake/src/migrations.rs
index 10d8e541347857025bc9d019ec669d60c6777088..d2778d48b1b6ef261ac25cba970db56571495e6b 100644
--- a/substrate/frame/fast-unstake/src/migrations.rs
+++ b/substrate/frame/fast-unstake/src/migrations.rs
@@ -39,6 +39,9 @@ pub mod v1 {
 			);
 
 			if current == 1 && onchain == 0 {
+				// update the version nonetheless.
+				current.put::<Pallet<T>>();
+
 				// if a head exists, then we put them back into the queue.
 				if Head::<T>::exists() {
 					if let Some((stash, _, deposit)) =
@@ -48,7 +51,6 @@ pub mod v1 {
 						.defensive()
 					{
 						Queue::<T>::insert(stash, deposit);
-						current.put::<Pallet<T>>();
 					} else {
 						// not much we can do here -- head is already deleted.
 					}