diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 0816fedff034796a56fbe24045b249df45f02e7c..f8ea312d1a4960e8ad682c30a1596b1c8b4a9260 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -1518,8 +1518,10 @@ impl pallet_state_trie_migration::Config for Runtime {
 	type WeightInfo = ();
 }
 
+const ALLIANCE_MOTION_DURATION_IN_BLOCKS: BlockNumber = 5 * DAYS;
+
 parameter_types! {
-	pub const AllianceMotionDuration: BlockNumber = 5 * DAYS;
+	pub const AllianceMotionDuration: BlockNumber = ALLIANCE_MOTION_DURATION_IN_BLOCKS;
 	pub const AllianceMaxProposals: u32 = 100;
 	pub const AllianceMaxMembers: u32 = 100;
 }
@@ -1541,6 +1543,7 @@ parameter_types! {
 	pub const MaxFellows: u32 = AllianceMaxMembers::get() - MaxFounders::get();
 	pub const MaxAllies: u32 = 100;
 	pub const AllyDeposit: Balance = 10 * DOLLARS;
+	pub const RetirementPeriod: BlockNumber = ALLIANCE_MOTION_DURATION_IN_BLOCKS + (1 * DAYS);
 }
 
 impl pallet_alliance::Config for Runtime {
@@ -1577,6 +1580,7 @@ impl pallet_alliance::Config for Runtime {
 	type MaxMembersCount = AllianceMaxMembers;
 	type AllyDeposit = AllyDeposit;
 	type WeightInfo = pallet_alliance::weights::SubstrateWeight<Runtime>;
+	type RetirementPeriod = RetirementPeriod;
 }
 
 construct_runtime!(
@@ -1682,9 +1686,16 @@ pub type Executive = frame_executive::Executive<
 	frame_system::ChainContext<Runtime>,
 	Runtime,
 	AllPalletsWithSystem,
-	pallet_nomination_pools::migration::v2::MigrateToV2<Runtime>,
+	Migrations,
 >;
 
+// All migrations executed on runtime upgrade as a nested tuple of types implementing
+// `OnRuntimeUpgrade`.
+type Migrations = (
+	pallet_nomination_pools::migration::v2::MigrateToV2<Runtime>,
+	pallet_alliance::migration::Migration<Runtime>,
+);
+
 /// MMR helper types.
 mod mmr {
 	use super::Runtime;
@@ -1703,6 +1714,7 @@ extern crate frame_benchmarking;
 mod benches {
 	define_benchmarks!(
 		[frame_benchmarking, BaselineBench::<Runtime>]
+		[pallet_alliance, Alliance]
 		[pallet_assets, Assets]
 		[pallet_babe, Babe]
 		[pallet_bags_list, BagsList]
diff --git a/substrate/frame/alliance/README.md b/substrate/frame/alliance/README.md
index f0900c84cbd85487cf77323aeffefad4967a431a..f91475a5984ea6a2afb3b0d20d68c7de8db01368 100644
--- a/substrate/frame/alliance/README.md
+++ b/substrate/frame/alliance/README.md
@@ -43,6 +43,7 @@ to update the Alliance's rule and make announcements.
 
 #### For Members (All)
 
+- `give_retirement_notice` - Give a retirement notice and start a retirement period required to pass in order to retire.
 - `retire` - Retire from the Alliance and release the caller's deposit.
 
 #### For Members (Founders/Fellows)
diff --git a/substrate/frame/alliance/src/benchmarking.rs b/substrate/frame/alliance/src/benchmarking.rs
index c23ded1640b58b76debddf75587c3e1d8fa9f49d..25dcb18b175ef97f0149f58b77921f5d603f7838 100644
--- a/substrate/frame/alliance/src/benchmarking.rs
+++ b/substrate/frame/alliance/src/benchmarking.rs
@@ -691,12 +691,37 @@ benchmarks_instance_pallet! {
 		assert_last_event::<T, I>(Event::AllyElevated { ally: ally1 }.into());
 	}
 
+	give_retirement_notice {
+		set_members::<T, I>();
+		let fellow2 = fellow::<T, I>(2);
+
+		assert!(Alliance::<T, I>::is_fellow(&fellow2));
+	}: _(SystemOrigin::Signed(fellow2.clone()))
+	verify {
+		assert!(Alliance::<T, I>::is_member_of(&fellow2, MemberRole::Retiring));
+
+		assert_eq!(
+			RetiringMembers::<T, I>::get(&fellow2),
+			Some(System::<T>::block_number() + T::RetirementPeriod::get())
+		);
+		assert_last_event::<T, I>(
+			Event::MemberRetirementPeriodStarted {member: fellow2}.into()
+		);
+	}
+
 	retire {
 		set_members::<T, I>();
 
 		let fellow2 = fellow::<T, I>(2);
 		assert!(Alliance::<T, I>::is_fellow(&fellow2));
-		assert!(!Alliance::<T, I>::is_up_for_kicking(&fellow2));
+
+		assert_eq!(
+			Alliance::<T, I>::give_retirement_notice(
+				SystemOrigin::Signed(fellow2.clone()).into()
+			),
+			Ok(())
+		);
+		System::<T>::set_block_number(System::<T>::block_number() + T::RetirementPeriod::get());
 
 		assert_eq!(DepositOf::<T, I>::get(&fellow2), Some(T::AllyDeposit::get()));
 	}: _(SystemOrigin::Signed(fellow2.clone()))
@@ -713,11 +738,7 @@ benchmarks_instance_pallet! {
 		set_members::<T, I>();
 
 		let fellow2 = fellow::<T, I>(2);
-		UpForKicking::<T, I>::insert(&fellow2, true);
-
 		assert!(Alliance::<T, I>::is_member_of(&fellow2, MemberRole::Fellow));
-		assert!(Alliance::<T, I>::is_up_for_kicking(&fellow2));
-
 		assert_eq!(DepositOf::<T, I>::get(&fellow2), Some(T::AllyDeposit::get()));
 
 		let fellow2_lookup = T::Lookup::unlookup(fellow2.clone());
diff --git a/substrate/frame/alliance/src/lib.rs b/substrate/frame/alliance/src/lib.rs
index 0f4d43505e3f954923624b583b4ad8495be2b386..bc0a119cd54a69e2f11115a51a6620139251ab48 100644
--- a/substrate/frame/alliance/src/lib.rs
+++ b/substrate/frame/alliance/src/lib.rs
@@ -60,6 +60,8 @@
 //!
 //! #### For Members (All)
 //!
+//! - `give_retirement_notice` - Give a retirement notice and start a retirement period required to
+//!   pass in order to retire.
 //! - `retire` - Retire from the Alliance and release the caller's deposit.
 //!
 //! #### For Members (Founders/Fellows)
@@ -93,13 +95,14 @@ mod tests;
 
 #[cfg(feature = "runtime-benchmarks")]
 mod benchmarking;
+pub mod migration;
 mod types;
 pub mod weights;
 
 use frame_support::pallet_prelude::*;
 use frame_system::pallet_prelude::*;
 use sp_runtime::{
-	traits::{StaticLookup, Zero},
+	traits::{Saturating, StaticLookup, Zero},
 	RuntimeDebug,
 };
 use sp_std::{convert::TryInto, prelude::*};
@@ -124,6 +127,9 @@ pub use pallet::*;
 pub use types::*;
 pub use weights::*;
 
+/// The log target of this pallet.
+pub const LOG_TARGET: &str = "runtime::alliance";
+
 /// Simple index type for proposal counting.
 pub type ProposalIndex = u32;
 
@@ -198,6 +204,7 @@ pub enum MemberRole {
 	Founder,
 	Fellow,
 	Ally,
+	Retiring,
 }
 
 /// The type of item that may be deemed unscrupulous.
@@ -218,6 +225,7 @@ pub mod pallet {
 
 	#[pallet::pallet]
 	#[pallet::generate_store(pub (super) trait Store)]
+	#[pallet::storage_version(migration::STORAGE_VERSION)]
 	pub struct Pallet<T, I = ()>(PhantomData<(T, I)>);
 
 	#[pallet::config]
@@ -308,6 +316,10 @@ pub mod pallet {
 
 		/// Weight information for extrinsics in this pallet.
 		type WeightInfo: WeightInfo;
+
+		/// The number of blocks a member must wait between giving a retirement notice and retiring.
+		/// Supposed to be greater than time required to `kick_member`.
+		type RetirementPeriod: Get<Self::BlockNumber>;
 	}
 
 	#[pallet::error]
@@ -324,8 +336,6 @@ pub mod pallet {
 		NotAlly,
 		/// Account is not a founder.
 		NotFounder,
-		/// This member is up for being kicked from the Alliance and cannot perform this operation.
-		UpForKicking,
 		/// Account does not have voting rights.
 		NoVotingRights,
 		/// Account is already an elevated (fellow) member.
@@ -357,6 +367,12 @@ pub mod pallet {
 		TooManyMembers,
 		/// Number of announcements exceeds `MaxAnnouncementsCount`.
 		TooManyAnnouncements,
+		/// Account already gave retirement notice
+		AlreadyRetiring,
+		/// Account did not give a retirement notice required to retire.
+		RetirementNoticeNotGiven,
+		/// Retirement period has not passed.
+		RetirementPeriodNotPassed,
 	}
 
 	#[pallet::event]
@@ -382,6 +398,8 @@ pub mod pallet {
 		},
 		/// An ally has been elevated to Fellow.
 		AllyElevated { ally: T::AccountId },
+		/// A member gave retirement notice and their retirement period started.
+		MemberRetirementPeriodStarted { member: T::AccountId },
 		/// A member has retired with its deposit unreserved.
 		MemberRetired { member: T::AccountId, unreserved: Option<BalanceOf<T, I>> },
 		/// A member has been kicked out with its deposit slashed.
@@ -485,12 +503,12 @@ pub mod pallet {
 		ValueQuery,
 	>;
 
-	/// A set of members that are (potentially) being kicked out. They cannot retire until the
-	/// motion is settled.
+	/// A set of members who gave a retirement notice. They can retire after the end of retirement
+	/// period stored as a future block number.
 	#[pallet::storage]
-	#[pallet::getter(fn up_for_kicking)]
-	pub type UpForKicking<T: Config<I>, I: 'static = ()> =
-		StorageMap<_, Blake2_128Concat, T::AccountId, bool, ValueQuery>;
+	#[pallet::getter(fn retiring_members)]
+	pub type RetiringMembers<T: Config<I>, I: 'static = ()> =
+		StorageMap<_, Blake2_128Concat, T::AccountId, T::BlockNumber, OptionQuery>;
 
 	/// The current list of accounts deemed unscrupulous. These accounts non grata cannot submit
 	/// candidacy.
@@ -525,11 +543,6 @@ pub mod pallet {
 			let proposor = ensure_signed(origin)?;
 			ensure!(Self::has_voting_rights(&proposor), Error::<T, I>::NoVotingRights);
 
-			if let Some(Call::kick_member { who }) = proposal.is_sub_type() {
-				let strike = T::Lookup::lookup(who.clone())?;
-				<UpForKicking<T, I>>::insert(strike, true);
-			}
-
 			T::ProposalProvider::propose_proposal(proposor, threshold, proposal, length_bound)?;
 			Ok(())
 		}
@@ -783,15 +796,40 @@ pub mod pallet {
 			Ok(())
 		}
 
+		/// As a member, give a retirement notice and start a retirement period required to pass in
+		/// order to retire.
+		#[pallet::weight(T::WeightInfo::give_retirement_notice())]
+		pub fn give_retirement_notice(origin: OriginFor<T>) -> DispatchResult {
+			let who = ensure_signed(origin)?;
+			let role = Self::member_role_of(&who).ok_or(Error::<T, I>::NotMember)?;
+			ensure!(role.ne(&MemberRole::Retiring), Error::<T, I>::AlreadyRetiring);
+
+			Self::remove_member(&who, role)?;
+			Self::add_member(&who, MemberRole::Retiring)?;
+			<RetiringMembers<T, I>>::insert(
+				&who,
+				frame_system::Pallet::<T>::block_number()
+					.saturating_add(T::RetirementPeriod::get()),
+			);
+
+			Self::deposit_event(Event::MemberRetirementPeriodStarted { member: who });
+			Ok(())
+		}
+
 		/// As a member, retire from the alliance and unreserve the deposit.
+		/// This can only be done once you have `give_retirement_notice` and it has expired.
 		#[pallet::weight(T::WeightInfo::retire())]
 		pub fn retire(origin: OriginFor<T>) -> DispatchResult {
 			let who = ensure_signed(origin)?;
-			// A member up for kicking cannot retire.
-			ensure!(!Self::is_up_for_kicking(&who), Error::<T, I>::UpForKicking);
+			let retirement_period_end = RetiringMembers::<T, I>::get(&who)
+				.ok_or(Error::<T, I>::RetirementNoticeNotGiven)?;
+			ensure!(
+				frame_system::Pallet::<T>::block_number() >= retirement_period_end,
+				Error::<T, I>::RetirementPeriodNotPassed
+			);
 
-			let role = Self::member_role_of(&who).ok_or(Error::<T, I>::NotMember)?;
-			Self::remove_member(&who, role)?;
+			Self::remove_member(&who, MemberRole::Retiring)?;
+			<RetiringMembers<T, I>>::remove(&who);
 			let deposit = DepositOf::<T, I>::take(&who);
 			if let Some(deposit) = deposit {
 				let err_amount = T::Currency::unreserve(&who, deposit);
@@ -814,8 +852,6 @@ pub mod pallet {
 				T::Slashed::on_unbalanced(T::Currency::slash_reserved(&member, deposit).0);
 			}
 
-			<UpForKicking<T, I>>::remove(&member);
-
 			Self::deposit_event(Event::MemberKicked { member, slashed: deposit });
 			Ok(())
 		}
@@ -930,11 +966,6 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
 		founders.into()
 	}
 
-	/// Check if an account's forced removal is up for consideration.
-	fn is_up_for_kicking(who: &T::AccountId) -> bool {
-		<UpForKicking<T, I>>::contains_key(&who)
-	}
-
 	/// Add a user to the sorted alliance member set.
 	fn add_member(who: &T::AccountId, role: MemberRole) -> DispatchResult {
 		<Members<T, I>>::try_mutate(role, |members| -> DispatchResult {
diff --git a/substrate/frame/alliance/src/migration.rs b/substrate/frame/alliance/src/migration.rs
new file mode 100644
index 0000000000000000000000000000000000000000..cd54eed7a9a75a39e57bc0c12c99bdc7db5be160
--- /dev/null
+++ b/substrate/frame/alliance/src/migration.rs
@@ -0,0 +1,72 @@
+// This file is part of Substrate.
+
+// Copyright (C) 2022 Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::{Config, Pallet, Weight, LOG_TARGET};
+use frame_support::{pallet_prelude::*, storage::migration, traits::OnRuntimeUpgrade};
+use log;
+
+/// The current storage version.
+pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1);
+
+/// Wrapper for all migrations of this pallet.
+pub fn migrate<T: Config<I>, I: 'static>() -> Weight {
+	let onchain_version = Pallet::<T, I>::on_chain_storage_version();
+	let mut weight: Weight = 0;
+
+	if onchain_version < 1 {
+		weight = weight.saturating_add(v0_to_v1::migrate::<T, I>());
+	}
+
+	STORAGE_VERSION.put::<Pallet<T, I>>();
+	weight = weight.saturating_add(T::DbWeight::get().writes(1));
+
+	weight
+}
+
+/// Implements `OnRuntimeUpgrade` trait.
+pub struct Migration<T, I = ()>(PhantomData<(T, I)>);
+
+impl<T: Config<I>, I: 'static> OnRuntimeUpgrade for Migration<T, I> {
+	fn on_runtime_upgrade() -> Weight {
+		migrate::<T, I>()
+	}
+}
+
+/// v0_to_v1: `UpForKicking` is replaced by a retirement period.
+mod v0_to_v1 {
+	use super::*;
+
+	pub fn migrate<T: Config<I>, I: 'static>() -> Weight {
+		if migration::clear_storage_prefix(
+			<Pallet<T, I>>::name().as_bytes(),
+			b"UpForKicking",
+			b"",
+			None,
+			None,
+		)
+		.maybe_cursor
+		.is_some()
+		{
+			log::error!(
+				target: LOG_TARGET,
+				"Storage prefix 'UpForKicking' is not completely cleared."
+			);
+		}
+
+		T::DbWeight::get().writes(1)
+	}
+}
diff --git a/substrate/frame/alliance/src/mock.rs b/substrate/frame/alliance/src/mock.rs
index 91986300aa2e132bb8fd00e2f2e0507f2808cceb..adc313e28ed7eb5c41c2afab70cd0a9ed15aedfa 100644
--- a/substrate/frame/alliance/src/mock.rs
+++ b/substrate/frame/alliance/src/mock.rs
@@ -37,8 +37,10 @@ pub use crate as pallet_alliance;
 
 use super::*;
 
+type BlockNumber = u64;
+
 parameter_types! {
-	pub const BlockHashCount: u64 = 250;
+	pub const BlockHashCount: BlockNumber = 250;
 }
 impl frame_system::Config for Test {
 	type BaseCallFilter = frame_support::traits::Everything;
@@ -47,7 +49,7 @@ impl frame_system::Config for Test {
 	type Origin = Origin;
 	type Call = Call;
 	type Index = u64;
-	type BlockNumber = u64;
+	type BlockNumber = BlockNumber;
 	type Hash = H256;
 	type Hashing = BlakeTwo256;
 	type AccountId = u64;
@@ -83,8 +85,10 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 }
 
+const MOTION_DURATION_IN_BLOCKS: BlockNumber = 3;
+
 parameter_types! {
-	pub const MotionDuration: u64 = 3;
+	pub const MotionDuration: BlockNumber = MOTION_DURATION_IN_BLOCKS;
 	pub const MaxProposals: u32 = 100;
 	pub const MaxMembers: u32 = 100;
 }
@@ -199,6 +203,7 @@ parameter_types! {
 	pub const MaxFellows: u32 = MaxMembers::get() - MaxFounders::get();
 	pub const MaxAllies: u32 = 100;
 	pub const AllyDeposit: u64 = 25;
+	pub const RetirementPeriod: BlockNumber = MOTION_DURATION_IN_BLOCKS + 1;
 }
 impl Config for Test {
 	type Event = Event;
@@ -225,6 +230,7 @@ impl Config for Test {
 	type MaxMembersCount = MaxMembers;
 	type AllyDeposit = AllyDeposit;
 	type WeightInfo = ();
+	type RetirementPeriod = RetirementPeriod;
 }
 
 type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
@@ -324,7 +330,3 @@ pub fn make_proposal(value: u64) -> Call {
 pub fn make_set_rule_proposal(rule: Cid) -> Call {
 	Call::Alliance(pallet_alliance::Call::set_rule { rule })
 }
-
-pub fn make_kick_member_proposal(who: u64) -> Call {
-	Call::Alliance(pallet_alliance::Call::kick_member { who })
-}
diff --git a/substrate/frame/alliance/src/tests.rs b/substrate/frame/alliance/src/tests.rs
index 14265cad5aa76ac5b600965ec59a73db33c2d1e3..918cfa840c3f055f4ea2023b2ddefb78645207a4 100644
--- a/substrate/frame/alliance/src/tests.rs
+++ b/substrate/frame/alliance/src/tests.rs
@@ -19,7 +19,7 @@
 
 use sp_runtime::traits::Hash;
 
-use frame_support::{assert_noop, assert_ok, Hashable};
+use frame_support::{assert_noop, assert_ok, error::BadOrigin, Hashable};
 use frame_system::{EventRecord, Phase};
 
 use super::*;
@@ -241,6 +241,9 @@ fn set_rule_works() {
 fn announce_works() {
 	new_test_ext().execute_with(|| {
 		let cid = test_cid();
+
+		assert_noop!(Alliance::announce(Origin::signed(2), cid.clone()), BadOrigin);
+
 		assert_ok!(Alliance::announce(Origin::signed(3), cid.clone()));
 		assert_eq!(Alliance::announcements(), vec![cid.clone()]);
 
@@ -390,48 +393,111 @@ fn elevate_ally_works() {
 }
 
 #[test]
-fn retire_works() {
+fn give_retirement_notice_work() {
 	new_test_ext().execute_with(|| {
-		let proposal = make_kick_member_proposal(2);
-		let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32);
-		assert_ok!(Alliance::propose(
-			Origin::signed(1),
-			3,
-			Box::new(proposal.clone()),
-			proposal_len
+		assert_noop!(
+			Alliance::give_retirement_notice(Origin::signed(4)),
+			Error::<Test, ()>::NotMember
+		);
+
+		assert_eq!(Alliance::members(MemberRole::Fellow), vec![3]);
+		assert_ok!(Alliance::give_retirement_notice(Origin::signed(3)));
+		assert_eq!(Alliance::members(MemberRole::Fellow), Vec::<u64>::new());
+		assert_eq!(Alliance::members(MemberRole::Retiring), vec![3]);
+		System::assert_last_event(mock::Event::Alliance(
+			crate::Event::MemberRetirementPeriodStarted { member: (3) },
 		));
-		assert_noop!(Alliance::retire(Origin::signed(2)), Error::<Test, ()>::UpForKicking);
 
-		assert_noop!(Alliance::retire(Origin::signed(4)), Error::<Test, ()>::NotMember);
+		assert_noop!(
+			Alliance::give_retirement_notice(Origin::signed(3)),
+			Error::<Test, ()>::AlreadyRetiring
+		);
+	});
+}
+
+#[test]
+fn retire_works() {
+	new_test_ext().execute_with(|| {
+		assert_noop!(
+			Alliance::retire(Origin::signed(2)),
+			Error::<Test, ()>::RetirementNoticeNotGiven
+		);
+
+		assert_noop!(
+			Alliance::retire(Origin::signed(4)),
+			Error::<Test, ()>::RetirementNoticeNotGiven
+		);
 
 		assert_eq!(Alliance::members(MemberRole::Fellow), vec![3]);
+		assert_ok!(Alliance::give_retirement_notice(Origin::signed(3)));
+		assert_noop!(
+			Alliance::retire(Origin::signed(3)),
+			Error::<Test, ()>::RetirementPeriodNotPassed
+		);
+		System::set_block_number(System::block_number() + RetirementPeriod::get());
 		assert_ok!(Alliance::retire(Origin::signed(3)));
 		assert_eq!(Alliance::members(MemberRole::Fellow), Vec::<u64>::new());
+		System::assert_last_event(mock::Event::Alliance(crate::Event::MemberRetired {
+			member: (3),
+			unreserved: None,
+		}));
+
+		// Move time on:
+		System::set_block_number(System::block_number() + RetirementPeriod::get());
+
+		assert_powerless(Origin::signed(3));
 	});
 }
 
+fn assert_powerless(user: Origin) {
+	//vote / veto with a valid propsal
+	let cid = test_cid();
+	let proposal = make_proposal(42);
+
+	assert_noop!(Alliance::init_members(user.clone(), vec![], vec![], vec![]), BadOrigin);
+
+	assert_noop!(Alliance::set_rule(user.clone(), cid.clone()), BadOrigin);
+
+	assert_noop!(Alliance::retire(user.clone()), Error::<Test, ()>::RetirementNoticeNotGiven);
+
+	assert_noop!(Alliance::give_retirement_notice(user.clone()), Error::<Test, ()>::NotMember);
+
+	assert_noop!(Alliance::elevate_ally(user.clone(), 4), BadOrigin);
+
+	assert_noop!(Alliance::kick_member(user.clone(), 1), BadOrigin);
+
+	assert_noop!(Alliance::nominate_ally(user.clone(), 4), Error::<Test, ()>::NoVotingRights);
+
+	assert_noop!(
+		Alliance::propose(user.clone(), 5, Box::new(proposal), 1000),
+		Error::<Test, ()>::NoVotingRights
+	);
+}
+
 #[test]
 fn kick_member_works() {
 	new_test_ext().execute_with(|| {
-		let proposal = make_kick_member_proposal(2);
-		let proposal_len: u32 = proposal.using_encoded(|p| p.len() as u32);
-		assert_ok!(Alliance::propose(
-			Origin::signed(1),
-			3,
-			Box::new(proposal.clone()),
-			proposal_len
-		));
-		assert_eq!(Alliance::up_for_kicking(2), true);
-		assert_eq!(Alliance::members(MemberRole::Founder), vec![1, 2]);
+		assert_noop!(Alliance::kick_member(Origin::signed(4), 4), BadOrigin);
+
+		assert_noop!(Alliance::kick_member(Origin::signed(2), 4), Error::<Test, ()>::NotMember);
 
+		<DepositOf<Test, ()>>::insert(2, 25);
+		assert_eq!(Alliance::members(MemberRole::Founder), vec![1, 2]);
 		assert_ok!(Alliance::kick_member(Origin::signed(2), 2));
 		assert_eq!(Alliance::members(MemberRole::Founder), vec![1]);
+		assert_eq!(<DepositOf<Test, ()>>::get(2), None);
+		System::assert_last_event(mock::Event::Alliance(crate::Event::MemberKicked {
+			member: (2),
+			slashed: Some(25),
+		}));
 	});
 }
 
 #[test]
 fn add_unscrupulous_items_works() {
 	new_test_ext().execute_with(|| {
+		assert_noop!(Alliance::add_unscrupulous_items(Origin::signed(2), vec![]), BadOrigin);
+
 		assert_ok!(Alliance::add_unscrupulous_items(
 			Origin::signed(3),
 			vec![
@@ -455,6 +521,8 @@ fn add_unscrupulous_items_works() {
 #[test]
 fn remove_unscrupulous_items_works() {
 	new_test_ext().execute_with(|| {
+		assert_noop!(Alliance::remove_unscrupulous_items(Origin::signed(2), vec![]), BadOrigin);
+
 		assert_noop!(
 			Alliance::remove_unscrupulous_items(
 				Origin::signed(3),
diff --git a/substrate/frame/alliance/src/weights.rs b/substrate/frame/alliance/src/weights.rs
index 495dd1b83df93f7804c3760873e17cd73b460c93..aa9ebde528683d5fc263ef92597bff7c92afb86d 100644
--- a/substrate/frame/alliance/src/weights.rs
+++ b/substrate/frame/alliance/src/weights.rs
@@ -1,6 +1,6 @@
 // This file is part of Substrate.
 
-// Copyright (C) 2021 Parity Technologies (UK) Ltd.
+// Copyright (C) 2022 Parity Technologies (UK) Ltd.
 // SPDX-License-Identifier: Apache-2.0
 
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,24 +18,25 @@
 //! Autogenerated weights for pallet_alliance
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2021-10-11, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
+//! DATE: 2022-08-26, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
+//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// ./target/release/substrate
+// /home/benchbot/cargo_target_dir/production/substrate
 // benchmark
-// --chain=dev
+// pallet
 // --steps=50
 // --repeat=20
-// --pallet=pallet_alliance
 // --extrinsic=*
 // --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
+// --pallet=pallet_alliance
+// --chain=dev
 // --output=./frame/alliance/src/weights.rs
 // --template=./.maintain/frame-weight-template.hbs
 
-
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
@@ -59,6 +60,7 @@ pub trait WeightInfo {
 	fn join_alliance() -> Weight;
 	fn nominate_ally() -> Weight;
 	fn elevate_ally() -> Weight;
+	fn give_retirement_notice() -> Weight;
 	fn retire() -> Weight;
 	fn kick_member() -> Weight;
 	fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight;
@@ -73,23 +75,33 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: AllianceMotion Proposals (r:1 w:1)
 	// Storage: AllianceMotion ProposalCount (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:0 w:1)
-	fn propose_proposed(_b: u32, _x: u32, y: u32, p: u32, ) -> Weight {
-		(39_992_000 as Weight)
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[0, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn propose_proposed(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
+		(22_575_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((11_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 23_000
+			.saturating_add((158_000 as Weight).saturating_mul(x as Weight))
 			// Standard Error: 2_000
-			.saturating_add((44_000 as Weight).saturating_mul(y as Weight))
+			.saturating_add((90_000 as Weight).saturating_mul(y as Weight))
 			// Standard Error: 2_000
-			.saturating_add((323_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((216_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Alliance Members (r:2 w:0)
 	// Storage: AllianceMotion Voting (r:1 w:1)
+	/// The range of component `x` is `[3, 10]`.
+	/// The range of component `y` is `[2, 90]`.
 	fn vote(x: u32, y: u32, ) -> Weight {
-		(36_649_000 as Weight)
-			// Standard Error: 90_000
-			.saturating_add((42_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((195_000 as Weight).saturating_mul(y as Weight))
+		(45_486_000 as Weight)
+			// Standard Error: 29_000
+			.saturating_add((78_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 2_000
+			.saturating_add((128_000 as Weight).saturating_mul(y as Weight))
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -97,125 +109,135 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:0 w:1)
+	/// The range of component `p` is `[1, 100]`.
 	fn veto(p: u32, ) -> Weight {
-		(30_301_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((330_000 as Weight).saturating_mul(p as Weight))
+		(35_296_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((171_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
 	fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight {
-		(40_472_000 as Weight)
-			// Standard Error: 69_000
-			.saturating_add((485_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 2_000
-			.saturating_add((192_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((330_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(T::DbWeight::get().reads(5 as Weight))
+		(39_252_000 as Weight)
+			// Standard Error: 18_000
+			.saturating_add((75_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 1_000
+			.saturating_add((107_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((170_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
+	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
-		(52_076_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
-			// Standard Error: 77_000
-			.saturating_add((194_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((188_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((329_000 as Weight).saturating_mul(p as Weight))
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_early_approved(_b: u32, _x: u32, y: u32, p: u32, ) -> Weight {
+		(50_357_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((103_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((204_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Prime (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight {
-		(47_009_000 as Weight)
-			// Standard Error: 66_000
-			.saturating_add((256_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 2_000
-			.saturating_add((176_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((327_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_disapproved(_x: u32, y: u32, p: u32, ) -> Weight {
+		(41_258_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((111_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((186_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Prime (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
-		(43_650_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
-			// Standard Error: 85_000
-			.saturating_add((124_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((199_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 3_000
-			.saturating_add((326_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_approved(_b: u32, x: u32, y: u32, p: u32, ) -> Weight {
+		(40_490_000 as Weight)
+			// Standard Error: 16_000
+			.saturating_add((119_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 1_000
+			.saturating_add((93_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((195_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
-	// Storage: Alliance Members (r:3 w:3)
+	// Storage: Alliance Members (r:2 w:3)
 	// Storage: AllianceMotion Members (r:1 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[0, 90]`.
+	/// The range of component `z` is `[0, 100]`.
 	fn init_members(_x: u32, y: u32, z: u32, ) -> Weight {
-		(45_100_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((162_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 4_000
-			.saturating_add((151_000 as Weight).saturating_mul(z as Weight))
-			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+		(35_186_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((161_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((127_000 as Weight).saturating_mul(z as Weight))
+			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Alliance Rule (r:0 w:1)
 	fn set_rule() -> Weight {
-		(14_517_000 as Weight)
+		(18_189_000 as Weight)
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Announcements (r:1 w:1)
 	fn announce() -> Weight {
-		(16_801_000 as Weight)
+		(21_106_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Announcements (r:1 w:1)
 	fn remove_announcement() -> Weight {
-		(17_133_000 as Weight)
+		(22_208_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
+	// Storage: Alliance Members (r:4 w:1)
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:0)
-	// Storage: Alliance Members (r:4 w:0)
 	// Storage: System Account (r:1 w:1)
 	// Storage: Alliance DepositOf (r:0 w:1)
 	fn join_alliance() -> Weight {
-		(95_370_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(7 as Weight))
+		(53_771_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
-	// Storage: Alliance Members (r:4 w:0)
+	// Storage: Alliance Members (r:4 w:1)
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:0)
 	fn nominate_ally() -> Weight {
-		(44_764_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+		(41_912_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Members (r:3 w:2)
@@ -223,23 +245,29 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
 	fn elevate_ally() -> Weight {
-		(44_013_000 as Weight)
+		(36_811_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
-	// Storage: Alliance KickingMembers (r:1 w:0)
-	// Storage: Alliance Members (r:3 w:1)
+	// Storage: Alliance Members (r:4 w:2)
 	// Storage: AllianceMotion Proposals (r:1 w:0)
-	// Storage: Alliance DepositOf (r:1 w:1)
-	// Storage: System Account (r:1 w:1)
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
-	fn retire() -> Weight {
-		(60_183_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(7 as Weight))
+	// Storage: Alliance RetiringMembers (r:0 w:1)
+	fn give_retirement_notice() -> Weight {
+		(41_079_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
-	// Storage: Alliance KickingMembers (r:1 w:0)
+	// Storage: Alliance RetiringMembers (r:1 w:1)
+	// Storage: Alliance Members (r:1 w:1)
+	// Storage: Alliance DepositOf (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	fn retire() -> Weight {
+		(42_703_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+	}
 	// Storage: Alliance Members (r:3 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:0)
 	// Storage: Alliance DepositOf (r:1 w:1)
@@ -247,29 +275,33 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
 	fn kick_member() -> Weight {
-		(67_467_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(7 as Weight))
+		(61_370_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:1)
 	// Storage: Alliance UnscrupulousWebsites (r:1 w:1)
+	/// The range of component `n` is `[1, 100]`.
+	/// The range of component `l` is `[1, 255]`.
 	fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 16_000
-			.saturating_add((2_673_000 as Weight).saturating_mul(n as Weight))
-			// Standard Error: 7_000
-			.saturating_add((224_000 as Weight).saturating_mul(l as Weight))
+			// Standard Error: 2_000
+			.saturating_add((1_385_000 as Weight).saturating_mul(n as Weight))
+			// Standard Error: 1_000
+			.saturating_add((119_000 as Weight).saturating_mul(l as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:1)
 	// Storage: Alliance UnscrupulousWebsites (r:1 w:1)
+	/// The range of component `n` is `[1, 100]`.
+	/// The range of component `l` is `[1, 255]`.
 	fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 343_000
-			.saturating_add((59_025_000 as Weight).saturating_mul(n as Weight))
 			// Standard Error: 153_000
-			.saturating_add((6_725_000 as Weight).saturating_mul(l as Weight))
+			.saturating_add((21_484_000 as Weight).saturating_mul(n as Weight))
+			// Standard Error: 59_000
+			.saturating_add((3_772_000 as Weight).saturating_mul(l as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -282,23 +314,33 @@ impl WeightInfo for () {
 	// Storage: AllianceMotion Proposals (r:1 w:1)
 	// Storage: AllianceMotion ProposalCount (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:0 w:1)
-	fn propose_proposed(_b: u32, _x: u32, y: u32, p: u32, ) -> Weight {
-		(39_992_000 as Weight)
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[0, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn propose_proposed(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
+		(22_575_000 as Weight)
+			// Standard Error: 0
+			.saturating_add((11_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 23_000
+			.saturating_add((158_000 as Weight).saturating_mul(x as Weight))
 			// Standard Error: 2_000
-			.saturating_add((44_000 as Weight).saturating_mul(y as Weight))
+			.saturating_add((90_000 as Weight).saturating_mul(y as Weight))
 			// Standard Error: 2_000
-			.saturating_add((323_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((216_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Alliance Members (r:2 w:0)
 	// Storage: AllianceMotion Voting (r:1 w:1)
+	/// The range of component `x` is `[3, 10]`.
+	/// The range of component `y` is `[2, 90]`.
 	fn vote(x: u32, y: u32, ) -> Weight {
-		(36_649_000 as Weight)
-			// Standard Error: 90_000
-			.saturating_add((42_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((195_000 as Weight).saturating_mul(y as Weight))
+		(45_486_000 as Weight)
+			// Standard Error: 29_000
+			.saturating_add((78_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 2_000
+			.saturating_add((128_000 as Weight).saturating_mul(y as Weight))
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -306,125 +348,135 @@ impl WeightInfo for () {
 	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:0 w:1)
+	/// The range of component `p` is `[1, 100]`.
 	fn veto(p: u32, ) -> Weight {
-		(30_301_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((330_000 as Weight).saturating_mul(p as Weight))
+		(35_296_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((171_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
 	fn close_early_disapproved(x: u32, y: u32, p: u32, ) -> Weight {
-		(40_472_000 as Weight)
-			// Standard Error: 69_000
-			.saturating_add((485_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 2_000
-			.saturating_add((192_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((330_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
+		(39_252_000 as Weight)
+			// Standard Error: 18_000
+			.saturating_add((75_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 1_000
+			.saturating_add((107_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((170_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
+	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_early_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
-		(52_076_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
-			// Standard Error: 77_000
-			.saturating_add((194_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((188_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((329_000 as Weight).saturating_mul(p as Weight))
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_early_approved(_b: u32, _x: u32, y: u32, p: u32, ) -> Weight {
+		(50_357_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((103_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((204_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Prime (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_disapproved(x: u32, y: u32, p: u32, ) -> Weight {
-		(47_009_000 as Weight)
-			// Standard Error: 66_000
-			.saturating_add((256_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 2_000
-			.saturating_add((176_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 2_000
-			.saturating_add((327_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_disapproved(_x: u32, y: u32, p: u32, ) -> Weight {
+		(41_258_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((111_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((186_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	// Storage: Alliance Members (r:1 w:0)
-	// Storage: AllianceMotion ProposalOf (r:1 w:1)
 	// Storage: AllianceMotion Voting (r:1 w:1)
 	// Storage: AllianceMotion Members (r:1 w:0)
 	// Storage: AllianceMotion Prime (r:1 w:0)
 	// Storage: AllianceMotion Proposals (r:1 w:1)
-	fn close_approved(b: u32, x: u32, y: u32, p: u32, ) -> Weight {
-		(43_650_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
-			// Standard Error: 85_000
-			.saturating_add((124_000 as Weight).saturating_mul(x as Weight))
-			// Standard Error: 3_000
-			.saturating_add((199_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 3_000
-			.saturating_add((326_000 as Weight).saturating_mul(p as Weight))
-			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+	// Storage: AllianceMotion ProposalOf (r:0 w:1)
+	/// The range of component `b` is `[1, 1024]`.
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[2, 90]`.
+	/// The range of component `p` is `[1, 100]`.
+	fn close_approved(_b: u32, x: u32, y: u32, p: u32, ) -> Weight {
+		(40_490_000 as Weight)
+			// Standard Error: 16_000
+			.saturating_add((119_000 as Weight).saturating_mul(x as Weight))
+			// Standard Error: 1_000
+			.saturating_add((93_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((195_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
-	// Storage: Alliance Members (r:3 w:3)
+	// Storage: Alliance Members (r:2 w:3)
 	// Storage: AllianceMotion Members (r:1 w:1)
+	/// The range of component `x` is `[2, 10]`.
+	/// The range of component `y` is `[0, 90]`.
+	/// The range of component `z` is `[0, 100]`.
 	fn init_members(_x: u32, y: u32, z: u32, ) -> Weight {
-		(45_100_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((162_000 as Weight).saturating_mul(y as Weight))
-			// Standard Error: 4_000
-			.saturating_add((151_000 as Weight).saturating_mul(z as Weight))
-			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+		(35_186_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((161_000 as Weight).saturating_mul(y as Weight))
+			// Standard Error: 1_000
+			.saturating_add((127_000 as Weight).saturating_mul(z as Weight))
+			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
 	// Storage: Alliance Rule (r:0 w:1)
 	fn set_rule() -> Weight {
-		(14_517_000 as Weight)
+		(18_189_000 as Weight)
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Announcements (r:1 w:1)
 	fn announce() -> Weight {
-		(16_801_000 as Weight)
+		(21_106_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Announcements (r:1 w:1)
 	fn remove_announcement() -> Weight {
-		(17_133_000 as Weight)
+		(22_208_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
+	// Storage: Alliance Members (r:4 w:1)
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:0)
-	// Storage: Alliance Members (r:4 w:0)
 	// Storage: System Account (r:1 w:1)
 	// Storage: Alliance DepositOf (r:0 w:1)
 	fn join_alliance() -> Weight {
-		(95_370_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
+		(53_771_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
-	// Storage: Alliance Members (r:4 w:0)
+	// Storage: Alliance Members (r:4 w:1)
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:0)
 	fn nominate_ally() -> Weight {
-		(44_764_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+		(41_912_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Alliance Members (r:3 w:2)
@@ -432,23 +484,29 @@ impl WeightInfo for () {
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
 	fn elevate_ally() -> Weight {
-		(44_013_000 as Weight)
+		(36_811_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
-	// Storage: Alliance KickingMembers (r:1 w:0)
-	// Storage: Alliance Members (r:3 w:1)
+	// Storage: Alliance Members (r:4 w:2)
 	// Storage: AllianceMotion Proposals (r:1 w:0)
-	// Storage: Alliance DepositOf (r:1 w:1)
-	// Storage: System Account (r:1 w:1)
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
-	fn retire() -> Weight {
-		(60_183_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
+	// Storage: Alliance RetiringMembers (r:0 w:1)
+	fn give_retirement_notice() -> Weight {
+		(41_079_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
-	// Storage: Alliance KickingMembers (r:1 w:0)
+	// Storage: Alliance RetiringMembers (r:1 w:1)
+	// Storage: Alliance Members (r:1 w:1)
+	// Storage: Alliance DepositOf (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	fn retire() -> Weight {
+		(42_703_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+	}
 	// Storage: Alliance Members (r:3 w:1)
 	// Storage: AllianceMotion Proposals (r:1 w:0)
 	// Storage: Alliance DepositOf (r:1 w:1)
@@ -456,29 +514,33 @@ impl WeightInfo for () {
 	// Storage: AllianceMotion Members (r:0 w:1)
 	// Storage: AllianceMotion Prime (r:0 w:1)
 	fn kick_member() -> Weight {
-		(67_467_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
+		(61_370_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:1)
 	// Storage: Alliance UnscrupulousWebsites (r:1 w:1)
+	/// The range of component `n` is `[1, 100]`.
+	/// The range of component `l` is `[1, 255]`.
 	fn add_unscrupulous_items(n: u32, l: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 16_000
-			.saturating_add((2_673_000 as Weight).saturating_mul(n as Weight))
-			// Standard Error: 7_000
-			.saturating_add((224_000 as Weight).saturating_mul(l as Weight))
+			// Standard Error: 2_000
+			.saturating_add((1_385_000 as Weight).saturating_mul(n as Weight))
+			// Standard Error: 1_000
+			.saturating_add((119_000 as Weight).saturating_mul(l as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Alliance UnscrupulousAccounts (r:1 w:1)
 	// Storage: Alliance UnscrupulousWebsites (r:1 w:1)
+	/// The range of component `n` is `[1, 100]`.
+	/// The range of component `l` is `[1, 255]`.
 	fn remove_unscrupulous_items(n: u32, l: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 343_000
-			.saturating_add((59_025_000 as Weight).saturating_mul(n as Weight))
 			// Standard Error: 153_000
-			.saturating_add((6_725_000 as Weight).saturating_mul(l as Weight))
+			.saturating_add((21_484_000 as Weight).saturating_mul(n as Weight))
+			// Standard Error: 59_000
+			.saturating_add((3_772_000 as Weight).saturating_mul(l as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}