diff --git a/substrate/frame/elections-phragmen/src/benchmarking.rs b/substrate/frame/elections-phragmen/src/benchmarking.rs
index ae98de4be7e4eabd68ec023d3b3160f90ac371ad..05e9df60c7fbeea0cc7e0d5db0ec67b58c1ea63e 100644
--- a/substrate/frame/elections-phragmen/src/benchmarking.rs
+++ b/substrate/frame/elections-phragmen/src/benchmarking.rs
@@ -39,7 +39,9 @@ type Lookup<T> = <<T as frame_system::Config>::Lookup as StaticLookup>::Source;
 /// grab new account with infinite balance.
 fn endowed_account<T: Config>(name: &'static str, index: u32) -> T::AccountId {
 	let account: T::AccountId = account(name, index, 0);
-	let amount = default_stake::<T>(BALANCE_FACTOR);
+	// Fund each account with at-least his stake but still a sane amount as to not mess up
+	// the vote calculation.
+	let amount = default_stake::<T>(MAX_VOTERS) * BalanceOf::<T>::from(BALANCE_FACTOR);
 	let _ = T::Currency::make_free_balance_be(&account, amount);
 	// important to increase the total issuance since T::CurrencyToVote will need it to be sane for
 	// phragmen to work.
@@ -54,9 +56,9 @@ fn as_lookup<T: Config>(account: T::AccountId) -> Lookup<T> {
 }
 
 /// Get a reasonable amount of stake based on the execution trait's configuration
-fn default_stake<T: Config>(factor: u32) -> BalanceOf<T> {
-	let factor = BalanceOf::<T>::from(factor);
-	T::Currency::minimum_balance() * factor
+fn default_stake<T: Config>(num_votes: u32) -> BalanceOf<T> {
+	let min = T::Currency::minimum_balance();
+	Elections::<T>::deposit_of(num_votes as usize).max(min)
 }
 
 /// Get the current number of candidates.
@@ -88,7 +90,7 @@ fn submit_candidates_with_self_vote<T: Config>(
 	prefix: &'static str,
 ) -> Result<Vec<T::AccountId>, &'static str> {
 	let candidates = submit_candidates::<T>(c, prefix)?;
-	let stake = default_stake::<T>(BALANCE_FACTOR);
+	let stake = default_stake::<T>(c);
 	let _ = candidates
 		.iter()
 		.map(|c| submit_voter::<T>(c.clone(), vec![c.clone()], stake).map(|_| ()))
@@ -112,7 +114,7 @@ fn distribute_voters<T: Config>(
 	num_voters: u32,
 	votes: usize,
 ) -> Result<(), &'static str> {
-	let stake = default_stake::<T>(BALANCE_FACTOR);
+	let stake = default_stake::<T>(num_voters);
 	for i in 0..num_voters {
 		// to ensure that votes are different
 		all_candidates.rotate_left(1);
@@ -160,7 +162,7 @@ benchmarks! {
 		let all_candidates = submit_candidates::<T>(v, "candidates")?;
 
 		let caller = endowed_account::<T>("caller", 0);
-		let stake = default_stake::<T>(BALANCE_FACTOR);
+		let stake = default_stake::<T>(v);
 
 		// original votes.
 		let mut votes = all_candidates;
@@ -173,14 +175,15 @@ benchmarks! {
 	}: vote(RawOrigin::Signed(caller), votes, stake)
 
 	vote_more {
-		let v in 2 .. (MAXIMUM_VOTE  as u32);
+		let v in 2 .. (MAXIMUM_VOTE as u32);
 		clean::<T>();
 
 		// create a bunch of candidates.
 		let all_candidates = submit_candidates::<T>(v, "candidates")?;
 
 		let caller = endowed_account::<T>("caller", 0);
-		let stake = default_stake::<T>(BALANCE_FACTOR);
+		// Multiply the stake with 10 since we want to be able to divide it by 10 again.
+		let stake = default_stake::<T>(v) * BalanceOf::<T>::from(10u32);
 
 		// original votes.
 		let mut votes = all_candidates.iter().skip(1).cloned().collect::<Vec<_>>();
@@ -194,14 +197,14 @@ benchmarks! {
 	}: vote(RawOrigin::Signed(caller), votes, stake / <BalanceOf<T>>::from(10u32))
 
 	vote_less {
-		let v in 2 .. (MAXIMUM_VOTE  as u32);
+		let v in 2 .. (MAXIMUM_VOTE as u32);
 		clean::<T>();
 
 		// create a bunch of candidates.
 		let all_candidates = submit_candidates::<T>(v, "candidates")?;
 
 		let caller = endowed_account::<T>("caller", 0);
-		let stake = default_stake::<T>(BALANCE_FACTOR);
+		let stake = default_stake::<T>(v);
 
 		// original votes.
 		let mut votes = all_candidates;
@@ -224,7 +227,7 @@ benchmarks! {
 
 		let caller = endowed_account::<T>("caller", 0);
 
-		let stake = default_stake::<T>(BALANCE_FACTOR);
+		let stake = default_stake::<T>(v);
 		submit_voter::<T>(caller.clone(), all_candidates, stake)?;
 
 		whitelist!(caller);
@@ -238,7 +241,7 @@ benchmarks! {
 		let m = T::DesiredMembers::get() + T::DesiredRunnersUp::get();
 
 		clean::<T>();
-		let stake = default_stake::<T>(BALANCE_FACTOR);
+		let stake = default_stake::<T>(c);
 
 		// create m members and runners combined.
 		let _ = fill_seats_up_to::<T>(m)?;
diff --git a/substrate/frame/elections-phragmen/src/weights.rs b/substrate/frame/elections-phragmen/src/weights.rs
index 22c1c1cbeb4061f1df8f02ca45a1184ebf4d7bc2..e973334b833cc77fec984a338b2d0dad9f5e97d8 100644
--- a/substrate/frame/elections-phragmen/src/weights.rs
+++ b/substrate/frame/elections-phragmen/src/weights.rs
@@ -18,11 +18,11 @@
 //! Autogenerated weights for pallet_elections_phragmen
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-01-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-03-29, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// ./target/production/substrate
+// target/production/substrate
 // benchmark
 // --chain=dev
 // --steps=50
@@ -33,9 +33,7 @@
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --output=./frame/elections-phragmen/src/weights.rs
-// --template=.maintain/frame-weight-template.hbs
-// --header=HEADER-APACHE2
-// --raw
+// --template=./.maintain/frame-weight-template.hbs
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -70,9 +68,9 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_equal(v: u32, ) -> Weight {
-		(23_406_000 as Weight)
+		(22_981_000 as Weight)
 			// Standard Error: 6_000
-			.saturating_add((270_000 as Weight).saturating_mul(v as Weight))
+			.saturating_add((232_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -82,9 +80,9 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_more(v: u32, ) -> Weight {
-		(35_660_000 as Weight)
-			// Standard Error: 6_000
-			.saturating_add((316_000 as Weight).saturating_mul(v as Weight))
+		(36_170_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((219_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -94,16 +92,16 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_less(v: u32, ) -> Weight {
-		(35_999_000 as Weight)
-			// Standard Error: 6_000
-			.saturating_add((299_000 as Weight).saturating_mul(v as Weight))
+		(35_798_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((241_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn remove_voter() -> Weight {
-		(33_692_000 as Weight)
+		(33_060_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -111,17 +109,17 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Elections Members (r:1 w:0)
 	// Storage: Elections RunnersUp (r:1 w:0)
 	fn submit_candidacy(c: u32, ) -> Weight {
-		(35_506_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((192_000 as Weight).saturating_mul(c as Weight))
+		(35_384_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((124_000 as Weight).saturating_mul(c as Weight))
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Elections Candidates (r:1 w:1)
 	fn renounce_candidacy_candidate(c: u32, ) -> Weight {
-		(31_402_000 as Weight)
+		(31_555_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((113_000 as Weight).saturating_mul(c as Weight))
+			.saturating_add((78_000 as Weight).saturating_mul(c as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -131,13 +129,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Council Proposals (r:1 w:0)
 	// Storage: Council Members (r:0 w:1)
 	fn renounce_candidacy_members() -> Weight {
-		(42_727_000 as Weight)
+		(41_531_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Elections RunnersUp (r:1 w:1)
 	fn renounce_candidacy_runners_up() -> Weight {
-		(30_638_000 as Weight)
+		(30_762_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -152,13 +150,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Council Proposals (r:1 w:0)
 	// Storage: Council Members (r:0 w:1)
 	fn remove_member_with_replacement() -> Weight {
-		(49_317_000 as Weight)
+		(48_287_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Elections RunnersUp (r:1 w:0)
 	fn remove_member_wrong_refund() -> Weight {
-		(4_688_000 as Weight)
+		(4_747_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 	}
 	// Storage: Elections Voting (r:251 w:250)
@@ -169,8 +167,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: System Account (r:250 w:250)
 	fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 36_000
-			.saturating_add((51_016_000 as Weight).saturating_mul(v as Weight))
+			// Standard Error: 37_000
+			.saturating_add((49_564_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(v as Weight)))
 			.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(v as Weight)))
@@ -186,12 +184,12 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: System Account (r:2 w:2)
 	fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 1_760_000
-			.saturating_add((29_569_000 as Weight).saturating_mul(c as Weight))
-			// Standard Error: 732_000
-			.saturating_add((51_842_000 as Weight).saturating_mul(v as Weight))
-			// Standard Error: 49_000
-			.saturating_add((3_546_000 as Weight).saturating_mul(e as Weight))
+			// Standard Error: 1_656_000
+			.saturating_add((29_011_000 as Weight).saturating_mul(c as Weight))
+			// Standard Error: 689_000
+			.saturating_add((49_204_000 as Weight).saturating_mul(v as Weight))
+			// Standard Error: 47_000
+			.saturating_add((3_352_000 as Weight).saturating_mul(e as Weight))
 			.saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight)))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(v as Weight)))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight)))
@@ -206,9 +204,9 @@ impl WeightInfo for () {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_equal(v: u32, ) -> Weight {
-		(23_406_000 as Weight)
+		(22_981_000 as Weight)
 			// Standard Error: 6_000
-			.saturating_add((270_000 as Weight).saturating_mul(v as Weight))
+			.saturating_add((232_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -218,9 +216,9 @@ impl WeightInfo for () {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_more(v: u32, ) -> Weight {
-		(35_660_000 as Weight)
-			// Standard Error: 6_000
-			.saturating_add((316_000 as Weight).saturating_mul(v as Weight))
+		(36_170_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((219_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -230,16 +228,16 @@ impl WeightInfo for () {
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn vote_less(v: u32, ) -> Weight {
-		(35_999_000 as Weight)
-			// Standard Error: 6_000
-			.saturating_add((299_000 as Weight).saturating_mul(v as Weight))
+		(35_798_000 as Weight)
+			// Standard Error: 8_000
+			.saturating_add((241_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Elections Voting (r:1 w:1)
 	// Storage: Balances Locks (r:1 w:1)
 	fn remove_voter() -> Weight {
-		(33_692_000 as Weight)
+		(33_060_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -247,17 +245,17 @@ impl WeightInfo for () {
 	// Storage: Elections Members (r:1 w:0)
 	// Storage: Elections RunnersUp (r:1 w:0)
 	fn submit_candidacy(c: u32, ) -> Weight {
-		(35_506_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((192_000 as Weight).saturating_mul(c as Weight))
+		(35_384_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((124_000 as Weight).saturating_mul(c as Weight))
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Elections Candidates (r:1 w:1)
 	fn renounce_candidacy_candidate(c: u32, ) -> Weight {
-		(31_402_000 as Weight)
+		(31_555_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((113_000 as Weight).saturating_mul(c as Weight))
+			.saturating_add((78_000 as Weight).saturating_mul(c as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -267,13 +265,13 @@ impl WeightInfo for () {
 	// Storage: Council Proposals (r:1 w:0)
 	// Storage: Council Members (r:0 w:1)
 	fn renounce_candidacy_members() -> Weight {
-		(42_727_000 as Weight)
+		(41_531_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Elections RunnersUp (r:1 w:1)
 	fn renounce_candidacy_runners_up() -> Weight {
-		(30_638_000 as Weight)
+		(30_762_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -288,13 +286,13 @@ impl WeightInfo for () {
 	// Storage: Council Proposals (r:1 w:0)
 	// Storage: Council Members (r:0 w:1)
 	fn remove_member_with_replacement() -> Weight {
-		(49_317_000 as Weight)
+		(48_287_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Elections RunnersUp (r:1 w:0)
 	fn remove_member_wrong_refund() -> Weight {
-		(4_688_000 as Weight)
+		(4_747_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 	}
 	// Storage: Elections Voting (r:251 w:250)
@@ -305,8 +303,8 @@ impl WeightInfo for () {
 	// Storage: System Account (r:250 w:250)
 	fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 36_000
-			.saturating_add((51_016_000 as Weight).saturating_mul(v as Weight))
+			// Standard Error: 37_000
+			.saturating_add((49_564_000 as Weight).saturating_mul(v as Weight))
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(v as Weight)))
 			.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(v as Weight)))
@@ -322,12 +320,12 @@ impl WeightInfo for () {
 	// Storage: System Account (r:2 w:2)
 	fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 1_760_000
-			.saturating_add((29_569_000 as Weight).saturating_mul(c as Weight))
-			// Standard Error: 732_000
-			.saturating_add((51_842_000 as Weight).saturating_mul(v as Weight))
-			// Standard Error: 49_000
-			.saturating_add((3_546_000 as Weight).saturating_mul(e as Weight))
+			// Standard Error: 1_656_000
+			.saturating_add((29_011_000 as Weight).saturating_mul(c as Weight))
+			// Standard Error: 689_000
+			.saturating_add((49_204_000 as Weight).saturating_mul(v as Weight))
+			// Standard Error: 47_000
+			.saturating_add((3_352_000 as Weight).saturating_mul(e as Weight))
 			.saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(c as Weight)))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(v as Weight)))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(c as Weight)))