diff --git a/substrate/bin/node-template/runtime/src/lib.rs b/substrate/bin/node-template/runtime/src/lib.rs
index 49346fbdd77dae8c0696eb2dbe92c343d644211f..b32ea0d958100a2eafa2e40f62d76a939bc30d42 100644
--- a/substrate/bin/node-template/runtime/src/lib.rs
+++ b/substrate/bin/node-template/runtime/src/lib.rs
@@ -245,7 +245,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = pallet_balances::weights::SubstrateWeight<Runtime>;
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 4bab2528ae2f784873630d7822faa8685f0a7be5..21645c5aa7dcdee900b143aee9f44185e2fe11b5 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -59,7 +59,6 @@ use pallet_nis::WithMaximumOf;
 use pallet_session::historical as pallet_session_historical;
 pub use pallet_transaction_payment::{CurrencyAdapter, Multiplier, TargetedFeeAdjustment};
 use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo};
-use scale_info::TypeInfo;
 use sp_api::impl_runtime_apis;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_grandpa::AuthorityId as GrandpaId;
@@ -439,17 +438,6 @@ parameter_types! {
 	pub const MaxReserves: u32 = 50;
 }
 
-/// A reason for placing a hold on funds.
-#[derive(
-	Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, MaxEncodedLen, Debug, TypeInfo,
-)]
-pub enum HoldReason {
-	/// The NIS Pallet has reserved it for a non-fungible receipt.
-	Nis,
-	/// Used by the NFT Fractionalization Pallet.
-	NftFractionalization,
-}
-
 impl pallet_balances::Config for Runtime {
 	type MaxLocks = MaxLocks;
 	type MaxReserves = MaxReserves;
@@ -462,7 +450,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = pallet_balances::weights::SubstrateWeight<Runtime>;
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = HoldReason;
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ConstU32<2>;
 }
 
@@ -1520,7 +1508,6 @@ parameter_types! {
 	pub const ThawThrottle: (Perquintill, BlockNumber) = (Perquintill::from_percent(25), 5);
 	pub Target: Perquintill = Perquintill::zero();
 	pub const NisPalletId: PalletId = PalletId(*b"py/nis  ");
-	pub const NisHoldReason: HoldReason = HoldReason::Nis;
 }
 
 impl pallet_nis::Config for Runtime {
@@ -1544,7 +1531,7 @@ impl pallet_nis::Config for Runtime {
 	type IntakePeriod = IntakePeriod;
 	type MaxIntakeWeight = MaxIntakeWeight;
 	type ThawThrottle = ThawThrottle;
-	type HoldReason = NisHoldReason;
+	type RuntimeHoldReason = RuntimeHoldReason;
 }
 
 parameter_types! {
@@ -1618,7 +1605,6 @@ parameter_types! {
 	pub const NftFractionalizationPalletId: PalletId = PalletId(*b"fraction");
 	pub NewAssetSymbol: BoundedVec<u8, StringLimit> = (*b"FRAC").to_vec().try_into().unwrap();
 	pub NewAssetName: BoundedVec<u8, StringLimit> = (*b"Frac").to_vec().try_into().unwrap();
-	pub const NftFractionalizationHoldReason: HoldReason = HoldReason::NftFractionalization;
 }
 
 impl pallet_nft_fractionalization::Config for Runtime {
@@ -1636,7 +1622,7 @@ impl pallet_nft_fractionalization::Config for Runtime {
 	type Nfts = Nfts;
 	type PalletId = NftFractionalizationPalletId;
 	type WeightInfo = pallet_nft_fractionalization::weights::SubstrateWeight<Runtime>;
-	type HoldReason = NftFractionalizationHoldReason;
+	type RuntimeHoldReason = RuntimeHoldReason;
 	#[cfg(feature = "runtime-benchmarks")]
 	type BenchmarkHelper = ();
 }
diff --git a/substrate/client/executor/benches/bench.rs b/substrate/client/executor/benches/bench.rs
index 38ae58adb615b951edba67dda5170c34cf5fd36d..66a82a175221d6a9aa229c5a593f3531f80f656f 100644
--- a/substrate/client/executor/benches/bench.rs
+++ b/substrate/client/executor/benches/bench.rs
@@ -25,7 +25,6 @@ use sc_executor_common::{
 };
 use sc_executor_wasmtime::InstantiationStrategy;
 use sc_runtime_test::wasm_binary_unwrap as test_runtime;
-use sp_wasm_interface::HostFunctions as _;
 use std::sync::{
 	atomic::{AtomicBool, AtomicUsize, Ordering},
 	Arc,
diff --git a/substrate/frame/alliance/src/mock.rs b/substrate/frame/alliance/src/mock.rs
index c334a3943b025653a3657ee0ef17da88f9bfd064..8513364c3ce0a1a41d187c4768ada8656354e56a 100644
--- a/substrate/frame/alliance/src/mock.rs
+++ b/substrate/frame/alliance/src/mock.rs
@@ -89,7 +89,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/asset-rate/src/mock.rs b/substrate/frame/asset-rate/src/mock.rs
index 9775b7a7479268ed3343ab152e6d1e38d3ab12f2..2d90fcfecd79e94620f8e6f93a5c396a190f825d 100644
--- a/substrate/frame/asset-rate/src/mock.rs
+++ b/substrate/frame/asset-rate/src/mock.rs
@@ -77,7 +77,7 @@ impl pallet_balances::Config for Test {
 	type MaxLocks = ();
 	type MaxReserves = ();
 	type ReserveIdentifier = [u8; 8];
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type FreezeIdentifier = ();
 	type MaxHolds = ();
 	type MaxFreezes = ();
diff --git a/substrate/frame/assets/src/mock.rs b/substrate/frame/assets/src/mock.rs
index 3926d2fa8b010be9ba1394eec9c77eb71618e66d..09d2bd229608829d46694ee549616b4018405e9d 100644
--- a/substrate/frame/assets/src/mock.rs
+++ b/substrate/frame/assets/src/mock.rs
@@ -87,7 +87,7 @@ impl pallet_balances::Config for Test {
 	type MaxLocks = ();
 	type MaxReserves = ();
 	type ReserveIdentifier = [u8; 8];
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type FreezeIdentifier = ();
 	type MaxHolds = ();
 	type MaxFreezes = ();
diff --git a/substrate/frame/atomic-swap/src/tests.rs b/substrate/frame/atomic-swap/src/tests.rs
index 7437d62a99c956e5fb2404109faf77e3d43d1aad..53ccd64bb273108fb264192e046c2a23e0f22323 100644
--- a/substrate/frame/atomic-swap/src/tests.rs
+++ b/substrate/frame/atomic-swap/src/tests.rs
@@ -64,7 +64,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/babe/src/mock.rs b/substrate/frame/babe/src/mock.rs
index 4278fa4596a9642d7d487bc9a95b2e773b733782..c0ccc9a8acd326af391eb86db519f246c4e802a7 100644
--- a/substrate/frame/babe/src/mock.rs
+++ b/substrate/frame/babe/src/mock.rs
@@ -145,7 +145,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/balances/src/impl_fungible.rs b/substrate/frame/balances/src/impl_fungible.rs
index f8f8fe17ae0eff34fe6b22fe268c6949f83cb8c4..03c40bb3a8401608c4c9ded644f984df962c0082 100644
--- a/substrate/frame/balances/src/impl_fungible.rs
+++ b/substrate/frame/balances/src/impl_fungible.rs
@@ -207,7 +207,7 @@ impl<T: Config<I>, I: 'static> fungible::Mutate<T::AccountId> for Pallet<T, I> {
 impl<T: Config<I>, I: 'static> fungible::MutateHold<T::AccountId> for Pallet<T, I> {}
 
 impl<T: Config<I>, I: 'static> fungible::InspectHold<T::AccountId> for Pallet<T, I> {
-	type Reason = T::HoldIdentifier;
+	type Reason = T::RuntimeHoldReason;
 
 	fn total_balance_on_hold(who: &T::AccountId) -> T::Balance {
 		Self::account(who).reserved
diff --git a/substrate/frame/balances/src/lib.rs b/substrate/frame/balances/src/lib.rs
index 7ed725a77df0caa8d60ce8e521346ed66716047d..8d68f693b24d575ac2b47d36268ffe209dd0ef52 100644
--- a/substrate/frame/balances/src/lib.rs
+++ b/substrate/frame/balances/src/lib.rs
@@ -257,8 +257,8 @@ pub mod pallet {
 		/// Use of reserves is deprecated in favour of holds. See `https://github.com/paritytech/substrate/pull/12951/`
 		type ReserveIdentifier: Parameter + Member + MaxEncodedLen + Ord + Copy;
 
-		/// The ID type for holds.
-		type HoldIdentifier: Parameter + Member + MaxEncodedLen + Ord + Copy;
+		/// The overarching hold reason.
+		type RuntimeHoldReason: Parameter + Member + MaxEncodedLen + Ord + Copy;
 
 		/// The ID type for freezes.
 		type FreezeIdentifier: Parameter + Member + MaxEncodedLen + Ord + Copy;
@@ -437,7 +437,7 @@ pub mod pallet {
 		_,
 		Blake2_128Concat,
 		T::AccountId,
-		BoundedVec<IdAmount<T::HoldIdentifier, T::Balance>, T::MaxHolds>,
+		BoundedVec<IdAmount<T::RuntimeHoldReason, T::Balance>, T::MaxHolds>,
 		ValueQuery,
 	>;
 
diff --git a/substrate/frame/balances/src/tests/mod.rs b/substrate/frame/balances/src/tests/mod.rs
index 4731dbf8ed32b9f4ee77536970088e1f1d364a62..6deb9885b79e5cf1dd4b2602b4edef8d8e828e9c 100644
--- a/substrate/frame/balances/src/tests/mod.rs
+++ b/substrate/frame/balances/src/tests/mod.rs
@@ -137,7 +137,7 @@ impl Config for Test {
 	type MaxReserves = ConstU32<2>;
 	type ReserveIdentifier = TestId;
 	type WeightInfo = ();
-	type HoldIdentifier = TestId;
+	type RuntimeHoldReason = TestId;
 	type FreezeIdentifier = TestId;
 	type MaxFreezes = ConstU32<2>;
 	type MaxHolds = ConstU32<2>;
diff --git a/substrate/frame/beefy/src/mock.rs b/substrate/frame/beefy/src/mock.rs
index 6b6ffd6751fbe7a933a3f71ff24a2416ef79a066..7edf4d339758cf8ad7bd0792fbbd066d8c893079 100644
--- a/substrate/frame/beefy/src/mock.rs
+++ b/substrate/frame/beefy/src/mock.rs
@@ -161,7 +161,7 @@ impl pallet_balances::Config for Test {
 	type ExistentialDeposit = ConstU128<1>;
 	type AccountStore = System;
 	type WeightInfo = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
diff --git a/substrate/frame/bounties/src/tests.rs b/substrate/frame/bounties/src/tests.rs
index ef3da7564874e9e67adb2c2f57d7a6857d445913..fd5020dead446fa080d99eb0b555b14e84677685 100644
--- a/substrate/frame/bounties/src/tests.rs
+++ b/substrate/frame/bounties/src/tests.rs
@@ -102,7 +102,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/child-bounties/src/tests.rs b/substrate/frame/child-bounties/src/tests.rs
index a936312aec86884da86e450af50b7469ad0046ce..a8f0e16ea213622130e40f637880e804956ca15b 100644
--- a/substrate/frame/child-bounties/src/tests.rs
+++ b/substrate/frame/child-bounties/src/tests.rs
@@ -105,7 +105,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/contracts/src/tests.rs b/substrate/frame/contracts/src/tests.rs
index c32999d0ade3a5d4e30ef40bec7c12dab63ca8da..ed754b5908f5274dea9539006311bab22ab76566 100644
--- a/substrate/frame/contracts/src/tests.rs
+++ b/substrate/frame/contracts/src/tests.rs
@@ -322,7 +322,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/conviction-voting/src/tests.rs b/substrate/frame/conviction-voting/src/tests.rs
index f33e511a164f6327a7dda228b1245ca5c6927dbf..1ea3a56adacb7157d74f0bf950dcc25884c62a65 100644
--- a/substrate/frame/conviction-voting/src/tests.rs
+++ b/substrate/frame/conviction-voting/src/tests.rs
@@ -94,7 +94,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/democracy/src/tests.rs b/substrate/frame/democracy/src/tests.rs
index 06fde5129c6d03c606e602a7a633ba58afd0dd5a..dd726004648efbb06f0a2cafacc90cedc2e95ff1 100644
--- a/substrate/frame/democracy/src/tests.rs
+++ b/substrate/frame/democracy/src/tests.rs
@@ -146,7 +146,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/election-provider-multi-phase/src/mock.rs b/substrate/frame/election-provider-multi-phase/src/mock.rs
index 732a650ce6db1663e3ac5e64823b723c9cf68065..cf797aea845f40d8466a1d18f9f76cd86aa78ff7 100644
--- a/substrate/frame/election-provider-multi-phase/src/mock.rs
+++ b/substrate/frame/election-provider-multi-phase/src/mock.rs
@@ -256,7 +256,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs
index 490179e91ddda3bb1c765fe30d38c270bae932df..da7ccf6dce9ce2fd4afe52d06677f68c0e85a60d 100644
--- a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs
+++ b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs
@@ -126,7 +126,7 @@ impl pallet_balances::Config for Runtime {
 	type AccountStore = System;
 	type MaxHolds = ConstU32<1>;
 	type MaxFreezes = traits::ConstU32<1>;
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type FreezeIdentifier = ();
 	type WeightInfo = ();
 }
diff --git a/substrate/frame/elections-phragmen/src/lib.rs b/substrate/frame/elections-phragmen/src/lib.rs
index 33a8634cb3bc93c8e2a6595aeebe2d0fb4b120f0..08ef4e8db9a033fb6b71876d378ac1058c4096c9 100644
--- a/substrate/frame/elections-phragmen/src/lib.rs
+++ b/substrate/frame/elections-phragmen/src/lib.rs
@@ -1352,7 +1352,7 @@ mod tests {
 		type WeightInfo = ();
 		type FreezeIdentifier = ();
 		type MaxFreezes = ();
-		type HoldIdentifier = ();
+		type RuntimeHoldReason = ();
 		type MaxHolds = ();
 	}
 
diff --git a/substrate/frame/examples/basic/src/tests.rs b/substrate/frame/examples/basic/src/tests.rs
index 1d9cf81a5074ce99983fd7e63361bcbd11f1077e..3b12c3bdd72351fad81c4245a6df8ce093e6cb6f 100644
--- a/substrate/frame/examples/basic/src/tests.rs
+++ b/substrate/frame/examples/basic/src/tests.rs
@@ -89,7 +89,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/examples/dev-mode/src/tests.rs b/substrate/frame/examples/dev-mode/src/tests.rs
index e2f06ddda6cd760a96bf60872367c0a2b56d4787..6b18b4183eab70987ba9896f88dbba25909e8950 100644
--- a/substrate/frame/examples/dev-mode/src/tests.rs
+++ b/substrate/frame/examples/dev-mode/src/tests.rs
@@ -83,7 +83,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/executive/src/lib.rs b/substrate/frame/executive/src/lib.rs
index 9ec78f254212ea06d701161721b78dbf6da8e6fa..31cbb0ee7ba0d76ea54dbbffed10f0152d70ac02 100644
--- a/substrate/frame/executive/src/lib.rs
+++ b/substrate/frame/executive/src/lib.rs
@@ -886,7 +886,7 @@ mod tests {
 		type WeightInfo = ();
 		type FreezeIdentifier = ();
 		type MaxFreezes = ConstU32<1>;
-		type HoldIdentifier = ();
+		type RuntimeHoldReason = ();
 		type MaxHolds = ConstU32<1>;
 	}
 
diff --git a/substrate/frame/fast-unstake/src/mock.rs b/substrate/frame/fast-unstake/src/mock.rs
index d75c89380799061fcb5af4121a66a5739e000949..101ad9088117118210e6c47fcabc90d7d9508565 100644
--- a/substrate/frame/fast-unstake/src/mock.rs
+++ b/substrate/frame/fast-unstake/src/mock.rs
@@ -91,7 +91,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/grandpa/src/mock.rs b/substrate/frame/grandpa/src/mock.rs
index ffc566ffe74de23ec8b05b9b1da62182ca8804b8..df012ab9dc6e870a63ca49f56ce0f9e955f6c56b 100644
--- a/substrate/frame/grandpa/src/mock.rs
+++ b/substrate/frame/grandpa/src/mock.rs
@@ -144,7 +144,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/identity/src/tests.rs b/substrate/frame/identity/src/tests.rs
index ba9749172e5f6220b3cc394e732966405eaf860c..83035c402a7dc9c9c312745e55347b4e4b01037d 100644
--- a/substrate/frame/identity/src/tests.rs
+++ b/substrate/frame/identity/src/tests.rs
@@ -87,7 +87,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/indices/src/mock.rs b/substrate/frame/indices/src/mock.rs
index 8bd05d04ab4e1b065d80631854fdf1b0db85a0c1..f54e4dfa088dc1ebc5f56bd392e5fb3e60dd9edf 100644
--- a/substrate/frame/indices/src/mock.rs
+++ b/substrate/frame/indices/src/mock.rs
@@ -78,7 +78,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/lottery/src/mock.rs b/substrate/frame/lottery/src/mock.rs
index 7afd0e319db34f855e669e1ec467dea6936f4e61..d89c9d6890ee24d46903280f54e5ca9dd20472f7 100644
--- a/substrate/frame/lottery/src/mock.rs
+++ b/substrate/frame/lottery/src/mock.rs
@@ -91,7 +91,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/multisig/src/tests.rs b/substrate/frame/multisig/src/tests.rs
index 7e7f1668026a22cf504ee479ee5f0b38e8492632..cc0fbc80989364c4b04717029ed194e646a40ecc 100644
--- a/substrate/frame/multisig/src/tests.rs
+++ b/substrate/frame/multisig/src/tests.rs
@@ -87,7 +87,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/nft-fractionalization/src/lib.rs b/substrate/frame/nft-fractionalization/src/lib.rs
index e1c8b8fea8907dcf12f458c23d4b2134efcf977b..459d89f5a8146289f68217a180a78f80dddf877a 100644
--- a/substrate/frame/nft-fractionalization/src/lib.rs
+++ b/substrate/frame/nft-fractionalization/src/lib.rs
@@ -63,8 +63,8 @@ pub mod pallet {
 		sp_runtime::traits::{AccountIdConversion, StaticLookup},
 		traits::{
 			fungible::{
-				hold::{Inspect as HoldInspectFungible, Mutate as HoldMutateFungible},
-				Inspect as InspectFungible, Mutate as MutateFungible,
+				hold::Mutate as HoldMutateFungible, Inspect as InspectFungible,
+				Mutate as MutateFungible,
 			},
 			fungibles::{
 				metadata::{MetadataDeposit, Mutate as MutateMetadata},
@@ -96,11 +96,10 @@ pub mod pallet {
 		/// The currency mechanism, used for paying for deposits.
 		type Currency: InspectFungible<Self::AccountId>
 			+ MutateFungible<Self::AccountId>
-			+ HoldInspectFungible<Self::AccountId>
-			+ HoldMutateFungible<Self::AccountId>;
+			+ HoldMutateFungible<Self::AccountId, Reason = Self::RuntimeHoldReason>;
 
-		#[pallet::constant]
-		type HoldReason: Get<<Self::Currency as HoldInspectFungible<Self::AccountId>>::Reason>;
+		/// Overarching hold reason.
+		type RuntimeHoldReason: From<HoldReason>;
 
 		/// The deposit paid by the user locking an NFT. The deposit is returned to the original NFT
 		/// owner when the asset is unified and the NFT is unlocked.
@@ -201,6 +200,14 @@ pub mod pallet {
 		NftNotFractionalized,
 	}
 
+	/// A reason for the pallet placing a hold on funds.
+	#[pallet::composite_enum]
+	pub enum HoldReason {
+		/// Reserved for a fractionalized NFT.
+		#[codec(index = 0)]
+		Fractionalized,
+	}
+
 	#[pallet::call]
 	impl<T: Config> Pallet<T> {
 		/// Lock the NFT and mint a new fungible asset.
@@ -239,7 +246,7 @@ pub mod pallet {
 
 			let pallet_account = Self::get_pallet_account();
 			let deposit = T::Deposit::get();
-			T::Currency::hold(&T::HoldReason::get(), &nft_owner, deposit)?;
+			T::Currency::hold(&HoldReason::Fractionalized.into(), &nft_owner, deposit)?;
 			Self::do_lock_nft(nft_collection_id, nft_id)?;
 			Self::do_create_asset(asset_id.clone(), pallet_account.clone())?;
 			Self::do_mint_asset(asset_id.clone(), &beneficiary, fractions)?;
@@ -303,7 +310,12 @@ pub mod pallet {
 				let asset_creator = details.asset_creator;
 				Self::do_burn_asset(asset_id.clone(), &who, details.fractions)?;
 				Self::do_unlock_nft(nft_collection_id, nft_id, &beneficiary)?;
-				T::Currency::release(&T::HoldReason::get(), &asset_creator, deposit, BestEffort)?;
+				T::Currency::release(
+					&HoldReason::Fractionalized.into(),
+					&asset_creator,
+					deposit,
+					BestEffort,
+				)?;
 
 				Self::deposit_event(Event::NftUnified {
 					nft_collection: nft_collection_id,
diff --git a/substrate/frame/nft-fractionalization/src/mock.rs b/substrate/frame/nft-fractionalization/src/mock.rs
index 05fbadb039398100a2416913c3911ea3600da406..62ff3df5b1a0fadf13e5b292670e253d9250ad06 100644
--- a/substrate/frame/nft-fractionalization/src/mock.rs
+++ b/substrate/frame/nft-fractionalization/src/mock.rs
@@ -20,7 +20,6 @@
 use super::*;
 use crate as pallet_nft_fractionalization;
 
-use codec::{Decode, Encode, MaxEncodedLen};
 use frame_support::{
 	construct_runtime, parameter_types,
 	traits::{AsEnsureOriginWithArg, ConstU32, ConstU64},
@@ -28,7 +27,6 @@ use frame_support::{
 };
 use frame_system::EnsureSigned;
 use pallet_nfts::PalletFeatures;
-use scale_info::TypeInfo;
 use sp_core::H256;
 use sp_runtime::{
 	testing::Header,
@@ -83,13 +81,6 @@ impl frame_system::Config for Test {
 	type MaxConsumers = ConstU32<16>;
 }
 
-#[derive(
-	Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, MaxEncodedLen, Debug, TypeInfo,
-)]
-pub enum HoldIdentifier {
-	NftFractionalization,
-}
-
 impl pallet_balances::Config for Test {
 	type Balance = u64;
 	type DustRemoval = ();
@@ -100,7 +91,7 @@ impl pallet_balances::Config for Test {
 	type MaxLocks = ();
 	type MaxReserves = ConstU32<50>;
 	type ReserveIdentifier = [u8; 8];
-	type HoldIdentifier = HoldIdentifier;
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ConstU32<1>;
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
@@ -169,7 +160,6 @@ parameter_types! {
 	pub const NftFractionalizationPalletId: PalletId = PalletId(*b"fraction");
 	pub NewAssetSymbol: BoundedVec<u8, StringLimit> = (*b"FRAC").to_vec().try_into().unwrap();
 	pub NewAssetName: BoundedVec<u8, StringLimit> = (*b"Frac").to_vec().try_into().unwrap();
-	pub const HoldReason: HoldIdentifier = HoldIdentifier::NftFractionalization;
 }
 
 impl Config for Test {
@@ -189,7 +179,7 @@ impl Config for Test {
 	type StringLimit = StringLimit;
 	#[cfg(feature = "runtime-benchmarks")]
 	type BenchmarkHelper = ();
-	type HoldReason = HoldReason;
+	type RuntimeHoldReason = RuntimeHoldReason;
 }
 
 // Build genesis storage according to the mock runtime.
diff --git a/substrate/frame/nfts/src/mock.rs b/substrate/frame/nfts/src/mock.rs
index e2856a07b994cdf43be8678cf70b9f39b581f0ed..79f0b341e9fd3873fd1c6c09b4751b53848b269d 100644
--- a/substrate/frame/nfts/src/mock.rs
+++ b/substrate/frame/nfts/src/mock.rs
@@ -90,7 +90,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/nicks/src/lib.rs b/substrate/frame/nicks/src/lib.rs
index 92865c773d886d733034367008742abf34778d29..7a7b33051b22e8229569436b77940431b1c558f1 100644
--- a/substrate/frame/nicks/src/lib.rs
+++ b/substrate/frame/nicks/src/lib.rs
@@ -297,7 +297,7 @@ mod tests {
 		type WeightInfo = ();
 		type FreezeIdentifier = ();
 		type MaxFreezes = ();
-		type HoldIdentifier = ();
+		type RuntimeHoldReason = ();
 		type MaxHolds = ();
 	}
 
diff --git a/substrate/frame/nis/src/lib.rs b/substrate/frame/nis/src/lib.rs
index c4d0d0d4202907998f688ccf2fd004a6846de23b..48d322545a6352103f55379848a01ada2ebb2dd2 100644
--- a/substrate/frame/nis/src/lib.rs
+++ b/substrate/frame/nis/src/lib.rs
@@ -162,11 +162,7 @@ pub mod pallet {
 	use frame_support::{
 		pallet_prelude::*,
 		traits::{
-			fungible::{
-				self,
-				hold::{Inspect as FunHoldInspect, Mutate as FunHoldMutate},
-				Balanced as FunBalanced,
-			},
+			fungible::{self, hold::Mutate as FunHoldMutate, Balanced as FunBalanced},
 			nonfungible::{Inspect as NftInspect, Transfer as NftTransfer},
 			tokens::{
 				Fortitude::Polite,
@@ -216,13 +212,10 @@ pub mod pallet {
 		type Currency: FunInspect<Self::AccountId, Balance = Self::CurrencyBalance>
 			+ FunMutate<Self::AccountId>
 			+ FunBalanced<Self::AccountId>
-			+ FunHoldInspect<Self::AccountId>
-			+ FunHoldMutate<Self::AccountId>;
-
-		/// The identifier of the hold reason.
+			+ FunHoldMutate<Self::AccountId, Reason = Self::RuntimeHoldReason>;
 
-		#[pallet::constant]
-		type HoldReason: Get<<Self::Currency as FunHoldInspect<Self::AccountId>>::Reason>;
+		/// Overarching hold reason.
+		type RuntimeHoldReason: From<HoldReason>;
 
 		/// Just the `Currency::Balance` type; we have this item to allow us to constrain it to
 		/// `From<u64>`.
@@ -569,14 +562,14 @@ pub mod pallet {
 				|q| -> Result<(u32, BalanceOf<T>), DispatchError> {
 					let queue_full = q.len() == T::MaxQueueLen::get() as usize;
 					ensure!(!queue_full || q[0].amount < amount, Error::<T>::BidTooLow);
-					T::Currency::hold(&T::HoldReason::get(), &who, amount)?;
+					T::Currency::hold(&HoldReason::NftReceipt.into(), &who, amount)?;
 
 					// queue is <Ordered: Lowest ... Highest><Fifo: Last ... First>
 					let mut bid = Bid { amount, who: who.clone() };
 					let net = if queue_full {
 						sp_std::mem::swap(&mut q[0], &mut bid);
 						let _ = T::Currency::release(
-							&T::HoldReason::get(),
+							&HoldReason::NftReceipt.into(),
 							&bid.who,
 							bid.amount,
 							BestEffort,
@@ -637,7 +630,7 @@ pub mod pallet {
 			queue.remove(pos);
 			let new_len = queue.len() as u32;
 
-			T::Currency::release(&T::HoldReason::get(), &bid.who, bid.amount, BestEffort)?;
+			T::Currency::release(&HoldReason::NftReceipt.into(), &bid.who, bid.amount, BestEffort)?;
 
 			Queues::<T>::insert(duration, queue);
 			QueueTotals::<T>::mutate(|qs| {
@@ -729,7 +722,7 @@ pub mod pallet {
 			let dropped = receipt.proportion.is_zero();
 
 			if amount > on_hold {
-				T::Currency::release(&T::HoldReason::get(), &who, on_hold, Exact)?;
+				T::Currency::release(&HoldReason::NftReceipt.into(), &who, on_hold, Exact)?;
 				let deficit = amount - on_hold;
 				// Try to transfer deficit from pot to receipt owner.
 				summary.receipts_on_hold.saturating_reduce(on_hold);
@@ -744,7 +737,7 @@ pub mod pallet {
 					// Transfer excess of `on_hold` to the pot if we have now fully compensated for
 					// the receipt.
 					T::Currency::transfer_on_hold(
-						&T::HoldReason::get(),
+						&HoldReason::NftReceipt.into(),
 						&who,
 						&our_account,
 						on_hold,
@@ -760,7 +753,7 @@ pub mod pallet {
 					)?;
 					summary.receipts_on_hold.saturating_reduce(on_hold);
 				}
-				T::Currency::release(&T::HoldReason::get(), &who, amount, Exact)?;
+				T::Currency::release(&HoldReason::NftReceipt.into(), &who, amount, Exact)?;
 			}
 
 			if dropped {
@@ -852,7 +845,7 @@ pub mod pallet {
 			ensure!(owner == who, Error::<T>::NotOwner);
 
 			// Unreserve and transfer the funds to the pot.
-			let reason = T::HoldReason::get();
+			let reason = HoldReason::NftReceipt.into();
 			let us = Self::account_id();
 			T::Currency::transfer_on_hold(&reason, &who, &us, on_hold, Exact, Free, Polite)
 				.map_err(|_| Error::<T>::Unfunded)?;
@@ -903,7 +896,7 @@ pub mod pallet {
 			)?;
 
 			// Transfer the funds from the pot to the owner and reserve
-			let reason = T::HoldReason::get();
+			let reason = HoldReason::NftReceipt.into();
 			let us = Self::account_id();
 			T::Currency::transfer_and_hold(&reason, &us, &who, amount, Exact, Expendable, Polite)?;
 
@@ -959,7 +952,7 @@ pub mod pallet {
 			let mut item = Receipts::<T>::get(index).ok_or(TokenError::UnknownAsset)?;
 			let (owner, on_hold) = item.owner.take().ok_or(Error::<T>::AlreadyCommunal)?;
 
-			let reason = T::HoldReason::get();
+			let reason = HoldReason::NftReceipt.into();
 			T::Currency::transfer_on_hold(&reason, &owner, dest, on_hold, Exact, OnHold, Polite)?;
 
 			item.owner = Some((dest.clone(), on_hold));
diff --git a/substrate/frame/nis/src/mock.rs b/substrate/frame/nis/src/mock.rs
index 0ca669093681863ee6959e2dc874371b7d553fc4..60aa0f756e9c620953c45e7d31e753efee4d4a28 100644
--- a/substrate/frame/nis/src/mock.rs
+++ b/substrate/frame/nis/src/mock.rs
@@ -19,7 +19,6 @@
 
 use crate::{self as pallet_nis, Perquintill, WithMaximumOf};
 
-use codec::{Decode, Encode, MaxEncodedLen};
 use frame_support::{
 	ord_parameter_types, parameter_types,
 	traits::{
@@ -30,7 +29,6 @@ use frame_support::{
 	PalletId,
 };
 use pallet_balances::{Instance1, Instance2};
-use scale_info::TypeInfo;
 use sp_core::{ConstU128, H256};
 use sp_runtime::{
 	testing::Header,
@@ -95,17 +93,10 @@ impl pallet_balances::Config<Instance1> for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = HoldIdentifier;
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ConstU32<1>;
 }
 
-#[derive(
-	Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, MaxEncodedLen, Debug, TypeInfo,
-)]
-pub enum HoldIdentifier {
-	Nis,
-}
-
 impl pallet_balances::Config<Instance2> for Test {
 	type Balance = u128;
 	type DustRemoval = ();
@@ -122,7 +113,7 @@ impl pallet_balances::Config<Instance2> for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
@@ -133,7 +124,6 @@ parameter_types! {
 	pub const MinReceipt: Perquintill = Perquintill::from_percent(1);
 	pub const ThawThrottle: (Perquintill, u64) = (Perquintill::from_percent(25), 5);
 	pub static MaxIntakeWeight: Weight = Weight::from_parts(2_000_000_000_000, 0);
-	pub const HoldReason: HoldIdentifier = HoldIdentifier::Nis;
 }
 
 ord_parameter_types! {
@@ -161,7 +151,7 @@ impl pallet_nis::Config for Test {
 	type MaxIntakeWeight = MaxIntakeWeight;
 	type MinReceipt = MinReceipt;
 	type ThawThrottle = ThawThrottle;
-	type HoldReason = HoldReason;
+	type RuntimeHoldReason = RuntimeHoldReason;
 }
 
 // This function basically just builds a genesis storage key/value store according to
diff --git a/substrate/frame/nomination-pools/benchmarking/src/mock.rs b/substrate/frame/nomination-pools/benchmarking/src/mock.rs
index cffb712ea2ae58cdb774da81ea56729df5412bd1..d94c63d1bf5b57cae1be19fbb8773cca7b12555c 100644
--- a/substrate/frame/nomination-pools/benchmarking/src/mock.rs
+++ b/substrate/frame/nomination-pools/benchmarking/src/mock.rs
@@ -77,7 +77,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/nomination-pools/src/mock.rs b/substrate/frame/nomination-pools/src/mock.rs
index 3ab9be516fdb9350cf7afd2be4adb32af0e93053..f0b73bbea28dae3f51c81e51b7b0fe55fd8b5364 100644
--- a/substrate/frame/nomination-pools/src/mock.rs
+++ b/substrate/frame/nomination-pools/src/mock.rs
@@ -206,7 +206,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/nomination-pools/test-staking/src/mock.rs b/substrate/frame/nomination-pools/test-staking/src/mock.rs
index 9726f5e6dad2747b420c9169a9ccf77e35c65279..a9c64508564cd77ea6431bfb2ae5cc8b0c54ed17 100644
--- a/substrate/frame/nomination-pools/test-staking/src/mock.rs
+++ b/substrate/frame/nomination-pools/test-staking/src/mock.rs
@@ -88,7 +88,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/offences/benchmarking/src/mock.rs b/substrate/frame/offences/benchmarking/src/mock.rs
index 668d88e0bf3d0dc0505b06356ec8952984292a76..ed0c6c7ea44338ff7861e6b14e61ed538b3bf9e0 100644
--- a/substrate/frame/offences/benchmarking/src/mock.rs
+++ b/substrate/frame/offences/benchmarking/src/mock.rs
@@ -76,7 +76,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/preimage/src/mock.rs b/substrate/frame/preimage/src/mock.rs
index 5054a77a8123f54ac76b0890fc501c9ad9dd91e5..7c645da2c51d858def2f9a5eadddf03a6747d4a1 100644
--- a/substrate/frame/preimage/src/mock.rs
+++ b/substrate/frame/preimage/src/mock.rs
@@ -86,7 +86,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/proxy/src/tests.rs b/substrate/frame/proxy/src/tests.rs
index f3771083c4dd4e72e678e863fb2589250833d735..54b76413bcff4ff081677ba9a5eb3f9ecaabf382 100644
--- a/substrate/frame/proxy/src/tests.rs
+++ b/substrate/frame/proxy/src/tests.rs
@@ -90,7 +90,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 impl pallet_utility::Config for Test {
diff --git a/substrate/frame/recovery/src/mock.rs b/substrate/frame/recovery/src/mock.rs
index 5c190e2a241a55de9ddc3559859076ed91066589..523dd3aa3e8dc819606de3e4af4a8eb1ba633ec6 100644
--- a/substrate/frame/recovery/src/mock.rs
+++ b/substrate/frame/recovery/src/mock.rs
@@ -88,7 +88,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/referenda/src/mock.rs b/substrate/frame/referenda/src/mock.rs
index cdedb79556f355b124078f13dec21fd835f55027..1a43257cb94e13d00ca8422116f3b107911a2513 100644
--- a/substrate/frame/referenda/src/mock.rs
+++ b/substrate/frame/referenda/src/mock.rs
@@ -122,7 +122,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/root-offences/src/mock.rs b/substrate/frame/root-offences/src/mock.rs
index e48360ed34e243f835524fe89b0041680a13aa3c..8c48e34e4e04a146e87d7030fd77860b426fbc3a 100644
--- a/substrate/frame/root-offences/src/mock.rs
+++ b/substrate/frame/root-offences/src/mock.rs
@@ -123,7 +123,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/scored-pool/src/mock.rs b/substrate/frame/scored-pool/src/mock.rs
index f10a1320ef83c7e9a898b426b1a3bbc4580b10ee..83bc939e8230da6fbf2a50d8839020aca39c48d2 100644
--- a/substrate/frame/scored-pool/src/mock.rs
+++ b/substrate/frame/scored-pool/src/mock.rs
@@ -93,7 +93,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/session/benchmarking/src/mock.rs b/substrate/frame/session/benchmarking/src/mock.rs
index b7671255f68fbe2e90ba2952b1edde0076ea743f..3b027492e0a6ad1c76a673cf64868bdb69486955 100644
--- a/substrate/frame/session/benchmarking/src/mock.rs
+++ b/substrate/frame/session/benchmarking/src/mock.rs
@@ -86,7 +86,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/society/src/mock.rs b/substrate/frame/society/src/mock.rs
index 9f72febc2106e8a30dcf7e9b4a4d4885b11e469c..6075f14da1248e9bdc499d6fad32379bd08998d6 100644
--- a/substrate/frame/society/src/mock.rs
+++ b/substrate/frame/society/src/mock.rs
@@ -95,7 +95,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/staking/src/mock.rs b/substrate/frame/staking/src/mock.rs
index 98b58010a2434e6edadbc50c996a74eadad34596..f9af9f5003b43e03d437809799f6da876e71714c 100644
--- a/substrate/frame/staking/src/mock.rs
+++ b/substrate/frame/staking/src/mock.rs
@@ -159,7 +159,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/state-trie-migration/src/lib.rs b/substrate/frame/state-trie-migration/src/lib.rs
index 1f6266d99982506983abe9cf504b702c3bf07fcf..05ca21c1de7521d4858977c1a35794af86feccd2 100644
--- a/substrate/frame/state-trie-migration/src/lib.rs
+++ b/substrate/frame/state-trie-migration/src/lib.rs
@@ -1130,7 +1130,7 @@ mod mock {
 		type WeightInfo = ();
 		type FreezeIdentifier = ();
 		type MaxFreezes = ();
-		type HoldIdentifier = ();
+		type RuntimeHoldReason = ();
 		type MaxHolds = ();
 	}
 
diff --git a/substrate/frame/statement/src/mock.rs b/substrate/frame/statement/src/mock.rs
index f4d9360c9a6c04bd2b99220839b05d3f16b72f8d..8b9e7a1a7d965473202ef53d8eb81a4e85e02402 100644
--- a/substrate/frame/statement/src/mock.rs
+++ b/substrate/frame/statement/src/mock.rs
@@ -91,7 +91,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/tips/src/tests.rs b/substrate/frame/tips/src/tests.rs
index b2d97de18312fdd2d5bfd7fe2fc581eecc8230b8..b582e09f1bc2b68eb4360528f7be7f5b217dbfe2 100644
--- a/substrate/frame/tips/src/tests.rs
+++ b/substrate/frame/tips/src/tests.rs
@@ -99,7 +99,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs b/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs
index be7baaf2b370e1afd38dc814323f44e6d50dacee..740915023a32d3e259ca182b5adc4099c60f5396 100644
--- a/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs
+++ b/substrate/frame/transaction-payment/asset-tx-payment/src/mock.rs
@@ -122,7 +122,7 @@ impl pallet_balances::Config for Runtime {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/transaction-payment/src/mock.rs b/substrate/frame/transaction-payment/src/mock.rs
index 741f094481c38232c26cad5b5384e608ddc41464..28d57065eca18775cc8db32e5a32c31c6a66069a 100644
--- a/substrate/frame/transaction-payment/src/mock.rs
+++ b/substrate/frame/transaction-payment/src/mock.rs
@@ -115,7 +115,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/transaction-storage/src/mock.rs b/substrate/frame/transaction-storage/src/mock.rs
index 3a87d8eaea707bdf4f6fc21fefce232f22cae393..27a73ba3cedb95c971f775618a64c9d1e125ac3e 100644
--- a/substrate/frame/transaction-storage/src/mock.rs
+++ b/substrate/frame/transaction-storage/src/mock.rs
@@ -86,7 +86,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/treasury/src/tests.rs b/substrate/frame/treasury/src/tests.rs
index 67b21ff6252a8817e98e58b918915ede323034af..0659c2f5941b140a7b8e5b74d9a2a5062a1d64f8 100644
--- a/substrate/frame/treasury/src/tests.rs
+++ b/substrate/frame/treasury/src/tests.rs
@@ -92,7 +92,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/uniques/src/mock.rs b/substrate/frame/uniques/src/mock.rs
index bad393a48958240306d299ffe7f840725da48825..e783f0b7cf4d9c0c6e7e83a400c141fca6ff682c 100644
--- a/substrate/frame/uniques/src/mock.rs
+++ b/substrate/frame/uniques/src/mock.rs
@@ -84,7 +84,7 @@ impl pallet_balances::Config for Test {
 	type ReserveIdentifier = [u8; 8];
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/utility/src/tests.rs b/substrate/frame/utility/src/tests.rs
index ecc78ae6b17b6c16bd13bae72e9e500710c4bece..ced50f828d564674559266d93ef30aa70c6afe31 100644
--- a/substrate/frame/utility/src/tests.rs
+++ b/substrate/frame/utility/src/tests.rs
@@ -188,7 +188,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/frame/vesting/src/mock.rs b/substrate/frame/vesting/src/mock.rs
index 1adb36b730b1a31a859db040104b3a378a9652f4..31f35bbdab604bd99066375d29f77b7eb10ca4c7 100644
--- a/substrate/frame/vesting/src/mock.rs
+++ b/substrate/frame/vesting/src/mock.rs
@@ -82,7 +82,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 parameter_types! {
diff --git a/substrate/frame/whitelist/src/mock.rs b/substrate/frame/whitelist/src/mock.rs
index d644cd661ec9ffca6a5c02802894d0053fac19f6..63e7e9976baddc7df7e74b51bc6aa1d922197d17 100644
--- a/substrate/frame/whitelist/src/mock.rs
+++ b/substrate/frame/whitelist/src/mock.rs
@@ -88,7 +88,7 @@ impl pallet_balances::Config for Test {
 	type WeightInfo = ();
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = ();
 	type MaxHolds = ();
 }
 
diff --git a/substrate/test-utils/runtime/src/lib.rs b/substrate/test-utils/runtime/src/lib.rs
index c93d5c4e5694bcf6ba9b1f15ae2b8ec29ef40997..8d77439f16455b6127532883a109dfc74df20fe4 100644
--- a/substrate/test-utils/runtime/src/lib.rs
+++ b/substrate/test-utils/runtime/src/lib.rs
@@ -394,7 +394,7 @@ impl pallet_balances::Config for Runtime {
 	type WeightInfo = pallet_balances::weights::SubstrateWeight<Runtime>;
 	type FreezeIdentifier = ();
 	type MaxFreezes = ();
-	type HoldIdentifier = ();
+	type RuntimeHoldReason = RuntimeHoldReason;
 	type MaxHolds = ConstU32<1>;
 }