diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs
index b127eda3ba98d61518e68e634e75acf20daceace..257f364dca01b7d00591c8b2c8e05949c836b08b 100644
--- a/polkadot/runtime/rococo/src/lib.rs
+++ b/polkadot/runtime/rococo/src/lib.rs
@@ -76,7 +76,7 @@ use frame_support::{
 };
 use frame_system::EnsureRoot;
 use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId};
-use pallet_identity::simple::IdentityInfo;
+use pallet_identity::legacy::IdentityInfo;
 use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
 use pallet_session::historical as session_historical;
 use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo};
@@ -596,7 +596,7 @@ impl claims::Config for Runtime {
 parameter_types! {
 	// Minimum 100 bytes/ROC deposited (1 CENT/byte)
 	pub const BasicDeposit: Balance = 1000 * CENTS;       // 258 bytes on-chain
-	pub const FieldDeposit: Balance = 250 * CENTS;        // 66 bytes on-chain
+	pub const ByteDeposit: Balance = deposit(0, 1);
 	pub const SubAccountDeposit: Balance = 200 * CENTS;   // 53 bytes on-chain
 	pub const MaxSubAccounts: u32 = 100;
 	pub const MaxAdditionalFields: u32 = 100;
@@ -607,10 +607,9 @@ impl pallet_identity::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type BasicDeposit = BasicDeposit;
-	type FieldDeposit = FieldDeposit;
+	type ByteDeposit = ByteDeposit;
 	type SubAccountDeposit = SubAccountDeposit;
 	type MaxSubAccounts = MaxSubAccounts;
-	type MaxAdditionalFields = MaxAdditionalFields;
 	type IdentityInformation = IdentityInfo<MaxAdditionalFields>;
 	type MaxRegistrars = MaxRegistrars;
 	type Slashed = Treasury;
diff --git a/polkadot/runtime/rococo/src/weights/pallet_identity.rs b/polkadot/runtime/rococo/src/weights/pallet_identity.rs
index e10c042dde6aa167e63b56244f7f5dcb21960915..e8c25269ac37a0fcec86d89a2584183fe654aaa9 100644
--- a/polkadot/runtime/rococo/src/weights/pallet_identity.rs
+++ b/polkadot/runtime/rococo/src/weights/pallet_identity.rs
@@ -65,8 +65,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn set_identity(r: u32, x: u32, ) -> Weight {
+	fn set_identity(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `442 + r * (5 ±0)`
 		//  Estimated: `11003`
@@ -75,8 +74,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 2_307
 			.saturating_add(Weight::from_parts(92_753, 0).saturating_mul(r.into()))
-			// Standard Error: 450
-			.saturating_add(Weight::from_parts(449_529, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -130,8 +127,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn clear_identity(_r: u32, s: u32, x: u32, ) -> Weight {
+	fn clear_identity(_r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -140,8 +136,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 1_353
 			.saturating_add(Weight::from_parts(1_074_019, 0).saturating_mul(s.into()))
-			// Standard Error: 1_353
-			.saturating_add(Weight::from_parts(229_947, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
@@ -151,8 +145,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn request_judgement(r: u32, x: u32, ) -> Weight {
+	fn request_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `367 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -161,16 +154,14 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 2_214
 			.saturating_add(Weight::from_parts(83_822, 0).saturating_mul(r.into()))
-			// Standard Error: 432
-			.saturating_add(Weight::from_parts(458_801, 0).saturating_mul(x.into()))
+
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn cancel_request(r: u32, x: u32, ) -> Weight {
+	fn cancel_request(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `398 + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -179,8 +170,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 2_528
 			.saturating_add(Weight::from_parts(85_593, 0).saturating_mul(r.into()))
-			// Standard Error: 493
-			.saturating_add(Weight::from_parts(468_140, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -234,8 +223,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 19]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn provide_judgement(r: u32, x: u32, ) -> Weight {
+	fn provide_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `445 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -244,8 +232,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 2_881
 			.saturating_add(Weight::from_parts(109_812, 0).saturating_mul(r.into()))
-			// Standard Error: 533
-			.saturating_add(Weight::from_parts(733_244, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -259,8 +245,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn kill_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -271,8 +256,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(15_486, 0).saturating_mul(r.into()))
 			// Standard Error: 1_275
 			.saturating_add(Weight::from_parts(1_085_117, 0).saturating_mul(s.into()))
-			// Standard Error: 1_275
-			.saturating_add(Weight::from_parts(228_226, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().writes(3))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
diff --git a/polkadot/runtime/westend/src/lib.rs b/polkadot/runtime/westend/src/lib.rs
index 9dfc3389d5747589622be503344b65084f3eaee5..ec94973af4f3ba28adfbd03549613ef4c407dec1 100644
--- a/polkadot/runtime/westend/src/lib.rs
+++ b/polkadot/runtime/westend/src/lib.rs
@@ -40,7 +40,7 @@ use frame_support::{
 };
 use frame_system::EnsureRoot;
 use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId};
-use pallet_identity::simple::IdentityInfo;
+use pallet_identity::legacy::IdentityInfo;
 use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
 use pallet_session::historical as session_historical;
 use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo};
@@ -863,7 +863,7 @@ where
 parameter_types! {
 	// Minimum 100 bytes/KSM deposited (1 CENT/byte)
 	pub const BasicDeposit: Balance = 1000 * CENTS;       // 258 bytes on-chain
-	pub const FieldDeposit: Balance = 250 * CENTS;        // 66 bytes on-chain
+	pub const ByteDeposit: Balance = deposit(0, 1);
 	pub const SubAccountDeposit: Balance = 200 * CENTS;   // 53 bytes on-chain
 	pub const MaxSubAccounts: u32 = 100;
 	pub const MaxAdditionalFields: u32 = 100;
@@ -875,10 +875,9 @@ impl pallet_identity::Config for Runtime {
 	type Currency = Balances;
 	type Slashed = ();
 	type BasicDeposit = BasicDeposit;
-	type FieldDeposit = FieldDeposit;
+	type ByteDeposit = ByteDeposit;
 	type SubAccountDeposit = SubAccountDeposit;
 	type MaxSubAccounts = MaxSubAccounts;
-	type MaxAdditionalFields = MaxAdditionalFields;
 	type IdentityInformation = IdentityInfo<MaxAdditionalFields>;
 	type MaxRegistrars = MaxRegistrars;
 	type ForceOrigin = EitherOf<EnsureRoot<Self::AccountId>, GeneralAdmin>;
diff --git a/polkadot/runtime/westend/src/weights/pallet_identity.rs b/polkadot/runtime/westend/src/weights/pallet_identity.rs
index 8c11482ebdc13693d59cd299189b2b18753aeb06..dea631b9316bc6160ee1d98e794aa865625bf2ed 100644
--- a/polkadot/runtime/westend/src/weights/pallet_identity.rs
+++ b/polkadot/runtime/westend/src/weights/pallet_identity.rs
@@ -68,8 +68,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn set_identity(r: u32, x: u32, ) -> Weight {
+	fn set_identity(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `442 + r * (5 ±0)`
 		//  Estimated: `11003`
@@ -78,8 +77,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 7_269
 			.saturating_add(Weight::from_parts(250_439, 0).saturating_mul(r.into()))
-			// Standard Error: 1_418
-			.saturating_add(Weight::from_parts(483_981, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -133,8 +130,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn clear_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -145,8 +141,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(475_120, 0).saturating_mul(r.into()))
 			// Standard Error: 4_092
 			.saturating_add(Weight::from_parts(1_348_869, 0).saturating_mul(s.into()))
-			// Standard Error: 4_092
-			.saturating_add(Weight::from_parts(314_033, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
@@ -156,8 +150,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn request_judgement(r: u32, x: u32, ) -> Weight {
+	fn request_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `367 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -166,16 +159,13 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 7_973
 			.saturating_add(Weight::from_parts(124_283, 0).saturating_mul(r.into()))
-			// Standard Error: 1_555
-			.saturating_add(Weight::from_parts(512_825, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn cancel_request(r: u32, x: u32, ) -> Weight {
+	fn cancel_request(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `398 + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -184,8 +174,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 5_154
 			.saturating_add(Weight::from_parts(147_560, 0).saturating_mul(r.into()))
-			// Standard Error: 1_005
-			.saturating_add(Weight::from_parts(490_754, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -239,8 +227,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 19]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn provide_judgement(r: u32, x: u32, ) -> Weight {
+	fn provide_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `445 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -249,8 +236,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 11003))
 			// Standard Error: 10_027
 			.saturating_add(Weight::from_parts(154_816, 0).saturating_mul(r.into()))
-			// Standard Error: 1_855
-			.saturating_add(Weight::from_parts(803_084, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
@@ -264,8 +249,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn kill_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -276,8 +260,6 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(666_376, 0).saturating_mul(r.into()))
 			// Standard Error: 4_433
 			.saturating_add(Weight::from_parts(1_396_065, 0).saturating_mul(s.into()))
-			// Standard Error: 4_433
-			.saturating_add(Weight::from_parts(300_762, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().writes(3))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
diff --git a/substrate/bin/node/runtime/src/impls.rs b/substrate/bin/node/runtime/src/impls.rs
index 430a1ac2824b806acf7d95715c72cf5448d2a5a6..717fbeadada4fdff2e29a5ca4d7f90c567479bf1 100644
--- a/substrate/bin/node/runtime/src/impls.rs
+++ b/substrate/bin/node/runtime/src/impls.rs
@@ -26,6 +26,7 @@ use frame_support::{
 };
 use pallet_alliance::{IdentityVerifier, ProposalIndex, ProposalProvider};
 use pallet_asset_tx_payment::HandleCredit;
+use pallet_identity::legacy::IdentityField;
 use sp_std::prelude::*;
 
 use crate::{
@@ -56,8 +57,8 @@ impl HandleCredit<AccountId, Assets> for CreditToBlockAuthor {
 
 pub struct AllianceIdentityVerifier;
 impl IdentityVerifier<AccountId> for AllianceIdentityVerifier {
-	fn has_identity(who: &AccountId, fields: u64) -> bool {
-		crate::Identity::has_identity(who, fields)
+	fn has_required_identities(who: &AccountId) -> bool {
+		crate::Identity::has_identity(who, (IdentityField::Display | IdentityField::Web).bits())
 	}
 
 	fn has_good_judgement(who: &AccountId) -> bool {
diff --git a/substrate/bin/node/runtime/src/lib.rs b/substrate/bin/node/runtime/src/lib.rs
index 127faec35629872cb89c1118feea045b32987f52..620e89a65e53fb5e7c31e46ef37fbeb0bd008742 100644
--- a/substrate/bin/node/runtime/src/lib.rs
+++ b/substrate/bin/node/runtime/src/lib.rs
@@ -60,7 +60,7 @@ use node_primitives::{AccountIndex, Balance, BlockNumber, Hash, Moment, Nonce};
 use pallet_asset_conversion::{NativeOrAssetId, NativeOrAssetIdConverter};
 use pallet_broker::{CoreAssignment, CoreIndex, CoretimeInterface, PartsOf57600};
 use pallet_election_provider_multi_phase::{GeometricDepositBase, SolutionAccuracyOf};
-use pallet_identity::simple::IdentityInfo;
+use pallet_identity::legacy::IdentityInfo;
 use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
 use pallet_nfts::PalletFeatures;
 use pallet_nis::WithMaximumOf;
@@ -1459,8 +1459,10 @@ impl pallet_grandpa::Config for Runtime {
 }
 
 parameter_types! {
-	pub const BasicDeposit: Balance = 10 * DOLLARS;       // 258 bytes on-chain
-	pub const FieldDeposit: Balance = 250 * CENTS;        // 66 bytes on-chain
+	// difference of 26 bytes on-chain for the registration and 9 bytes on-chain for the identity
+	// information, already accounted for by the byte deposit
+	pub const BasicDeposit: Balance = deposit(1, 17);
+	pub const ByteDeposit: Balance = deposit(0, 1);
 	pub const SubAccountDeposit: Balance = 2 * DOLLARS;   // 53 bytes on-chain
 	pub const MaxSubAccounts: u32 = 100;
 	pub const MaxAdditionalFields: u32 = 100;
@@ -1471,10 +1473,9 @@ impl pallet_identity::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type BasicDeposit = BasicDeposit;
-	type FieldDeposit = FieldDeposit;
+	type ByteDeposit = ByteDeposit;
 	type SubAccountDeposit = SubAccountDeposit;
 	type MaxSubAccounts = MaxSubAccounts;
-	type MaxAdditionalFields = MaxAdditionalFields;
 	type IdentityInformation = IdentityInfo<MaxAdditionalFields>;
 	type MaxRegistrars = MaxRegistrars;
 	type Slashed = Treasury;
diff --git a/substrate/frame/alliance/src/lib.rs b/substrate/frame/alliance/src/lib.rs
index f3ff03780f59acb2d7ba7efc0c8fba4e320ff039..d4703db68dbba34988516ba08b5efcebcb79e5e9 100644
--- a/substrate/frame/alliance/src/lib.rs
+++ b/substrate/frame/alliance/src/lib.rs
@@ -112,7 +112,6 @@ use frame_support::{
 	},
 	weights::Weight,
 };
-use pallet_identity::simple::IdentityField;
 use scale_info::TypeInfo;
 
 pub use pallet::*;
@@ -135,9 +134,9 @@ type NegativeImbalanceOf<T, I> = <<T as Config<I>>::Currency as Currency<
 
 /// Interface required for identity verification.
 pub trait IdentityVerifier<AccountId> {
-	/// Function that returns whether an account has an identity registered with the identity
-	/// provider.
-	fn has_identity(who: &AccountId, fields: u64) -> bool;
+	/// Function that returns whether an account has the required identities registered with the
+	/// identity provider.
+	fn has_required_identities(who: &AccountId) -> bool;
 
 	/// Whether an account has been deemed "good" by the provider.
 	fn has_good_judgement(who: &AccountId) -> bool;
@@ -149,7 +148,7 @@ pub trait IdentityVerifier<AccountId> {
 
 /// The non-provider. Imposes no restrictions on account identity.
 impl<AccountId> IdentityVerifier<AccountId> for () {
-	fn has_identity(_who: &AccountId, _fields: u64) -> bool {
+	fn has_required_identities(_who: &AccountId) -> bool {
 		true
 	}
 
@@ -339,7 +338,7 @@ pub mod pallet {
 		/// Balance is insufficient for the required deposit.
 		InsufficientFunds,
 		/// The account's identity does not have display field and website field.
-		WithoutIdentityDisplayAndWebsite,
+		WithoutRequiredIdentityFields,
 		/// The account's identity has no good judgement.
 		WithoutGoodIdentityJudgement,
 		/// The proposal hash is not found.
@@ -1082,13 +1081,10 @@ impl<T: Config<I>, I: 'static> Pallet<T, I> {
 	}
 
 	fn has_identity(who: &T::AccountId) -> DispatchResult {
-		const IDENTITY_FIELD_DISPLAY: u64 = IdentityField::Display as u64;
-		const IDENTITY_FIELD_WEB: u64 = IdentityField::Web as u64;
-
 		let judgement = |who: &T::AccountId| -> DispatchResult {
 			ensure!(
-				T::IdentityVerifier::has_identity(who, IDENTITY_FIELD_DISPLAY | IDENTITY_FIELD_WEB),
-				Error::<T, I>::WithoutIdentityDisplayAndWebsite
+				T::IdentityVerifier::has_required_identities(who),
+				Error::<T, I>::WithoutRequiredIdentityFields
 			);
 			ensure!(
 				T::IdentityVerifier::has_good_judgement(who),
diff --git a/substrate/frame/alliance/src/mock.rs b/substrate/frame/alliance/src/mock.rs
index a5970bc7af6752a7fef02581e0deb799ef34303c..ace5214f145f7683b22aa9a1ec8f9689cd97221c 100644
--- a/substrate/frame/alliance/src/mock.rs
+++ b/substrate/frame/alliance/src/mock.rs
@@ -31,7 +31,10 @@ pub use frame_support::{
 	BoundedVec,
 };
 use frame_system::{EnsureRoot, EnsureSignedBy};
-use pallet_identity::{simple::IdentityInfo, Data, Judgement};
+use pallet_identity::{
+	legacy::{IdentityField, IdentityInfo},
+	Data, Judgement,
+};
 
 pub use crate as pallet_alliance;
 
@@ -96,9 +99,9 @@ impl pallet_collective::Config<AllianceCollective> for Test {
 }
 
 parameter_types! {
-	pub const BasicDeposit: u64 = 10;
-	pub const FieldDeposit: u64 = 10;
-	pub const SubAccountDeposit: u64 = 10;
+	pub const BasicDeposit: u64 = 100;
+	pub const ByteDeposit: u64 = 10;
+	pub const SubAccountDeposit: u64 = 100;
 	pub const MaxSubAccounts: u32 = 2;
 	pub const MaxAdditionalFields: u32 = 2;
 	pub const MaxRegistrars: u32 = 20;
@@ -117,10 +120,9 @@ impl pallet_identity::Config for Test {
 	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type BasicDeposit = BasicDeposit;
-	type FieldDeposit = FieldDeposit;
+	type ByteDeposit = ByteDeposit;
 	type SubAccountDeposit = SubAccountDeposit;
 	type MaxSubAccounts = MaxSubAccounts;
-	type MaxAdditionalFields = MaxAdditionalFields;
 	type IdentityInformation = IdentityInfo<MaxAdditionalFields>;
 	type MaxRegistrars = MaxRegistrars;
 	type Slashed = ();
@@ -131,8 +133,8 @@ impl pallet_identity::Config for Test {
 
 pub struct AllianceIdentityVerifier;
 impl IdentityVerifier<AccountId> for AllianceIdentityVerifier {
-	fn has_identity(who: &AccountId, fields: u64) -> bool {
-		Identity::has_identity(who, fields)
+	fn has_required_identities(who: &AccountId) -> bool {
+		Identity::has_identity(who, (IdentityField::Display | IdentityField::Web).bits())
 	}
 
 	fn has_good_judgement(who: &AccountId) -> bool {
@@ -232,20 +234,40 @@ frame_support::construct_runtime!(
 	}
 );
 
+fn test_identity_info() -> IdentityInfo<MaxAdditionalFields> {
+	IdentityInfo {
+		additional: BoundedVec::default(),
+		display: Data::Raw(b"name".to_vec().try_into().unwrap()),
+		legal: Data::default(),
+		web: Data::Raw(b"website".to_vec().try_into().unwrap()),
+		riot: Data::default(),
+		email: Data::default(),
+		pgp_fingerprint: None,
+		image: Data::default(),
+		twitter: Data::default(),
+	}
+}
+
+pub(super) fn test_identity_info_deposit() -> <Test as pallet_balances::Config>::Balance {
+	let basic_deposit: u64 = <Test as pallet_identity::Config>::BasicDeposit::get();
+	let byte_deposit: u64 = <Test as pallet_identity::Config>::ByteDeposit::get();
+	byte_deposit * test_identity_info().encoded_size() as u64 + basic_deposit
+}
+
 pub fn new_test_ext() -> sp_io::TestExternalities {
 	let mut t = frame_system::GenesisConfig::<Test>::default().build_storage().unwrap();
 
 	pallet_balances::GenesisConfig::<Test> {
 		balances: vec![
-			(1, 50),
-			(2, 50),
-			(3, 50),
-			(4, 50),
-			(5, 30),
-			(6, 50),
-			(7, 50),
-			(8, 50),
-			(9, 50),
+			(1, 1000),
+			(2, 1000),
+			(3, 1000),
+			(4, 1000),
+			(5, test_identity_info_deposit() + 10),
+			(6, 1000),
+			(7, 1000),
+			(8, 1000),
+			(9, 1000),
 		],
 	}
 	.assimilate_storage(&mut t)
@@ -263,17 +285,7 @@ pub fn new_test_ext() -> sp_io::TestExternalities {
 	ext.execute_with(|| {
 		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 1));
 
-		let info = IdentityInfo {
-			additional: BoundedVec::default(),
-			display: Data::Raw(b"name".to_vec().try_into().unwrap()),
-			legal: Data::default(),
-			web: Data::Raw(b"website".to_vec().try_into().unwrap()),
-			riot: Data::default(),
-			email: Data::default(),
-			pgp_fingerprint: None,
-			image: Data::default(),
-			twitter: Data::default(),
-		};
+		let info = test_identity_info();
 		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(1), Box::new(info.clone())));
 		assert_ok!(Identity::provide_judgement(
 			RuntimeOrigin::signed(1),
diff --git a/substrate/frame/alliance/src/tests.rs b/substrate/frame/alliance/src/tests.rs
index 098fd86bbae1ec6ed6d2abbd2c24430e690a6e93..8011627b237af15e8d30379bf14afc2564421050 100644
--- a/substrate/frame/alliance/src/tests.rs
+++ b/substrate/frame/alliance/src/tests.rs
@@ -105,6 +105,9 @@ fn init_members_works() {
 #[test]
 fn disband_works() {
 	new_test_ext().execute_with(|| {
+		let id_deposit = test_identity_info_deposit();
+		let expected_join_deposit = <Test as Config>::AllyDeposit::get();
+		assert_eq!(Balances::free_balance(9), 1000 - id_deposit);
 		// ensure alliance is set
 		assert_eq!(Alliance::voting_members(), vec![1, 2, 3]);
 
@@ -113,10 +116,10 @@ fn disband_works() {
 		assert!(Alliance::is_member_of(&2, MemberRole::Retiring));
 
 		// join alliance and reserve funds
-		assert_eq!(Balances::free_balance(9), 40);
+		assert_eq!(Balances::free_balance(9), 1000 - id_deposit);
 		assert_ok!(Alliance::join_alliance(RuntimeOrigin::signed(9)));
-		assert_eq!(Alliance::deposit_of(9), Some(25));
-		assert_eq!(Balances::free_balance(9), 15);
+		assert_eq!(Alliance::deposit_of(9), Some(expected_join_deposit));
+		assert_eq!(Balances::free_balance(9), 1000 - id_deposit - expected_join_deposit);
 		assert!(Alliance::is_member_of(&9, MemberRole::Ally));
 
 		// fails without root
@@ -146,7 +149,7 @@ fn disband_works() {
 		// assert a retiring member from the previous Alliance not removed
 		assert!(Alliance::is_member_of(&2, MemberRole::Retiring));
 		// deposit unreserved
-		assert_eq!(Balances::free_balance(9), 40);
+		assert_eq!(Balances::free_balance(9), 1000 - id_deposit);
 
 		System::assert_last_event(mock::RuntimeEvent::Alliance(crate::Event::AllianceDisbanded {
 			fellow_members: 2,
@@ -358,6 +361,9 @@ fn remove_announcement_works() {
 #[test]
 fn join_alliance_works() {
 	new_test_ext().execute_with(|| {
+		let id_deposit = test_identity_info_deposit();
+		let join_deposit = <Test as Config>::AllyDeposit::get();
+		assert_eq!(Balances::free_balance(9), 1000 - id_deposit);
 		// check already member
 		assert_noop!(
 			Alliance::join_alliance(RuntimeOrigin::signed(1)),
@@ -384,8 +390,10 @@ fn join_alliance_works() {
 			Error::<Test, ()>::InsufficientFunds
 		);
 
+		assert_eq!(Balances::free_balance(4), 1000 - id_deposit);
 		// success to submit
 		assert_ok!(Alliance::join_alliance(RuntimeOrigin::signed(4)));
+		assert_eq!(Balances::free_balance(4), 1000 - id_deposit - join_deposit);
 		assert_eq!(Alliance::deposit_of(4), Some(25));
 		assert_eq!(Alliance::members(MemberRole::Ally), vec![4]);
 
@@ -405,7 +413,7 @@ fn join_alliance_works() {
 		#[cfg(not(feature = "runtime-benchmarks"))]
 		assert_noop!(
 			Alliance::join_alliance(RuntimeOrigin::signed(7)),
-			Error::<Test, ()>::WithoutIdentityDisplayAndWebsite
+			Error::<Test, ()>::WithoutRequiredIdentityFields
 		);
 	});
 }
@@ -460,7 +468,7 @@ fn nominate_ally_works() {
 		#[cfg(not(feature = "runtime-benchmarks"))]
 		assert_noop!(
 			Alliance::join_alliance(RuntimeOrigin::signed(7)),
-			Error::<Test, ()>::WithoutIdentityDisplayAndWebsite
+			Error::<Test, ()>::WithoutRequiredIdentityFields
 		);
 	});
 }
diff --git a/substrate/frame/identity/src/benchmarking.rs b/substrate/frame/identity/src/benchmarking.rs
index 16ce4d8246e61cb3ff9c820e180d74d94b388336..3d976bd6c8812d4ccb202aa6537692d5201ef86f 100644
--- a/substrate/frame/identity/src/benchmarking.rs
+++ b/substrate/frame/identity/src/benchmarking.rs
@@ -22,7 +22,6 @@
 use super::*;
 
 use crate::Pallet as Identity;
-use enumflags2::BitFlag;
 use frame_benchmarking::{
 	account, impl_benchmark_test_suite, v2::*, whitelisted_caller, BenchmarkError,
 };
@@ -49,9 +48,7 @@ fn add_registrars<T: Config>(r: u32) -> Result<(), &'static str> {
 			.expect("RegistrarOrigin has no successful origin required for the benchmark");
 		Identity::<T>::add_registrar(registrar_origin, registrar_lookup)?;
 		Identity::<T>::set_fee(RawOrigin::Signed(registrar.clone()).into(), i, 10u32.into())?;
-		let fields = IdentityFields(
-			<T::IdentityInformation as IdentityInformationProvider>::IdentityField::all(),
-		);
+		let fields = T::IdentityInformation::all_fields();
 		Identity::<T>::set_fields(RawOrigin::Signed(registrar.clone()).into(), i, fields)?;
 	}
 
@@ -77,7 +74,7 @@ fn create_sub_accounts<T: Config>(
 	// Set identity so `set_subs` does not fail.
 	if IdentityOf::<T>::get(who).is_none() {
 		let _ = T::Currency::make_free_balance_be(who, BalanceOf::<T>::max_value() / 2u32.into());
-		let info = T::IdentityInformation::create_identity_info(1);
+		let info = T::IdentityInformation::create_identity_info();
 		Identity::<T>::set_identity(who_origin.into(), Box::new(info))?;
 	}
 
@@ -118,10 +115,7 @@ mod benchmarks {
 	}
 
 	#[benchmark]
-	fn set_identity(
-		r: Linear<1, { T::MaxRegistrars::get() }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
-	) -> Result<(), BenchmarkError> {
+	fn set_identity(r: Linear<1, { T::MaxRegistrars::get() }>) -> Result<(), BenchmarkError> {
 		add_registrars::<T>(r)?;
 
 		let caller: T::AccountId = whitelisted_caller();
@@ -131,7 +125,7 @@ mod benchmarks {
 		let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
 
 		// Add an initial identity
-		let initial_info = T::IdentityInformation::create_identity_info(1);
+		let initial_info = T::IdentityInformation::create_identity_info();
 		Identity::<T>::set_identity(caller_origin.clone(), Box::new(initial_info.clone()))?;
 
 		// User requests judgement from all the registrars, and they approve
@@ -154,7 +148,7 @@ mod benchmarks {
 		#[extrinsic_call]
 		_(
 			RawOrigin::Signed(caller.clone()),
-			Box::new(T::IdentityInformation::create_identity_info(x)),
+			Box::new(T::IdentityInformation::create_identity_info()),
 		);
 
 		assert_last_event::<T>(Event::<T>::IdentitySet { who: caller }.into());
@@ -201,7 +195,6 @@ mod benchmarks {
 	fn clear_identity(
 		r: Linear<1, { T::MaxRegistrars::get() }>,
 		s: Linear<0, { T::MaxSubAccounts::get() }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
 	) -> Result<(), BenchmarkError> {
 		let caller: T::AccountId = whitelisted_caller();
 		let caller_origin =
@@ -216,7 +209,7 @@ mod benchmarks {
 		let _ = add_sub_accounts::<T>(&caller, s)?;
 
 		// Create their main identity with x additional fields
-		let info = T::IdentityInformation::create_identity_info(x);
+		let info = T::IdentityInformation::create_identity_info();
 		Identity::<T>::set_identity(caller_origin.clone(), Box::new(info.clone()))?;
 
 		// User requests judgement from all the registrars, and they approve
@@ -245,10 +238,7 @@ mod benchmarks {
 	}
 
 	#[benchmark]
-	fn request_judgement(
-		r: Linear<1, { T::MaxRegistrars::get() }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
-	) -> Result<(), BenchmarkError> {
+	fn request_judgement(r: Linear<1, { T::MaxRegistrars::get() }>) -> Result<(), BenchmarkError> {
 		let caller: T::AccountId = whitelisted_caller();
 		let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
 
@@ -256,7 +246,7 @@ mod benchmarks {
 		add_registrars::<T>(r)?;
 
 		// Create their main identity with x additional fields
-		let info = T::IdentityInformation::create_identity_info(x);
+		let info = T::IdentityInformation::create_identity_info();
 		let caller_origin =
 			<T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));
 		Identity::<T>::set_identity(caller_origin.clone(), Box::new(info))?;
@@ -272,10 +262,7 @@ mod benchmarks {
 	}
 
 	#[benchmark]
-	fn cancel_request(
-		r: Linear<1, { T::MaxRegistrars::get() }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
-	) -> Result<(), BenchmarkError> {
+	fn cancel_request(r: Linear<1, { T::MaxRegistrars::get() }>) -> Result<(), BenchmarkError> {
 		let caller: T::AccountId = whitelisted_caller();
 		let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
 
@@ -283,7 +270,7 @@ mod benchmarks {
 		add_registrars::<T>(r)?;
 
 		// Create their main identity with x additional fields
-		let info = T::IdentityInformation::create_identity_info(x);
+		let info = T::IdentityInformation::create_identity_info();
 		let caller_origin =
 			<T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));
 		Identity::<T>::set_identity(caller_origin.clone(), Box::new(info))?;
@@ -367,15 +354,12 @@ mod benchmarks {
 			.expect("RegistrarOrigin has no successful origin required for the benchmark");
 		Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;
 
-		let fields = IdentityFields(
-			<T::IdentityInformation as IdentityInformationProvider>::IdentityField::all(),
-		);
-
 		let registrars = Registrars::<T>::get();
 		ensure!(
 			registrars[r as usize].as_ref().unwrap().fields == Default::default(),
 			"fields already set."
 		);
+		let fields = T::IdentityInformation::all_fields();
 
 		#[extrinsic_call]
 		_(RawOrigin::Signed(caller), r, fields);
@@ -392,7 +376,6 @@ mod benchmarks {
 	#[benchmark]
 	fn provide_judgement(
 		r: Linear<1, { T::MaxRegistrars::get() - 1 }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
 	) -> Result<(), BenchmarkError> {
 		// The user
 		let user: T::AccountId = account("user", r, SEED);
@@ -407,7 +390,7 @@ mod benchmarks {
 
 		add_registrars::<T>(r)?;
 
-		let info = T::IdentityInformation::create_identity_info(x);
+		let info = T::IdentityInformation::create_identity_info();
 		let info_hash = T::Hashing::hash_of(&info);
 		Identity::<T>::set_identity(user_origin.clone(), Box::new(info))?;
 
@@ -430,7 +413,6 @@ mod benchmarks {
 	fn kill_identity(
 		r: Linear<1, { T::MaxRegistrars::get() }>,
 		s: Linear<0, { T::MaxSubAccounts::get() }>,
-		x: Linear<0, { T::MaxAdditionalFields::get() }>,
 	) -> Result<(), BenchmarkError> {
 		add_registrars::<T>(r)?;
 
@@ -440,7 +422,7 @@ mod benchmarks {
 		let target_lookup = T::Lookup::unlookup(target.clone());
 		let _ = T::Currency::make_free_balance_be(&target, BalanceOf::<T>::max_value());
 
-		let info = T::IdentityInformation::create_identity_info(x);
+		let info = T::IdentityInformation::create_identity_info();
 		Identity::<T>::set_identity(target_origin.clone(), Box::new(info.clone()))?;
 		let _ = add_sub_accounts::<T>(&target, s)?;
 
diff --git a/substrate/frame/identity/src/simple.rs b/substrate/frame/identity/src/legacy.rs
similarity index 89%
rename from substrate/frame/identity/src/simple.rs
rename to substrate/frame/identity/src/legacy.rs
index db5ecf3b1c97e6c018515a47aeb75a21b7b600a4..a7953f7e1786949cacb27a6af13e70ad8c8737c5 100644
--- a/substrate/frame/identity/src/simple.rs
+++ b/substrate/frame/identity/src/legacy.rs
@@ -16,13 +16,15 @@
 // limitations under the License.
 
 use codec::{Decode, Encode, MaxEncodedLen};
+#[cfg(feature = "runtime-benchmarks")]
+use enumflags2::BitFlag;
 use enumflags2::{bitflags, BitFlags};
 use frame_support::{traits::Get, CloneNoBound, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound};
 use scale_info::{build::Variants, Path, Type, TypeInfo};
 use sp_runtime::{BoundedVec, RuntimeDebug};
 use sp_std::prelude::*;
 
-use crate::types::{Data, IdentityFields, IdentityInformationProvider, U64BitFlag};
+use crate::types::{Data, IdentityInformationProvider};
 
 /// The fields that we use to identify the owner of an account with. Each corresponds to a field
 /// in the `IdentityInfo` struct.
@@ -58,8 +60,6 @@ impl TypeInfo for IdentityField {
 	}
 }
 
-impl U64BitFlag for IdentityField {}
-
 /// Information concerning the identity of the controller of an account.
 ///
 /// NOTE: This should be stored at the end of the storage item to facilitate the addition of extra
@@ -124,22 +124,20 @@ pub struct IdentityInfo<FieldLimit: Get<u32>> {
 }
 
 impl<FieldLimit: Get<u32> + 'static> IdentityInformationProvider for IdentityInfo<FieldLimit> {
-	type IdentityField = IdentityField;
-
-	fn has_identity(&self, fields: u64) -> bool {
-		self.fields().0.bits() & fields == fields
-	}
+	type FieldsIdentifier = u64;
 
-	fn additional(&self) -> usize {
-		self.additional.len()
+	fn has_identity(&self, fields: Self::FieldsIdentifier) -> bool {
+		self.fields().bits() & fields == fields
 	}
 
 	#[cfg(feature = "runtime-benchmarks")]
-	fn create_identity_info(num_fields: u32) -> Self {
+	fn create_identity_info() -> Self {
 		let data = Data::Raw(vec![0; 32].try_into().unwrap());
 
 		IdentityInfo {
-			additional: vec![(data.clone(), data.clone()); num_fields as usize].try_into().unwrap(),
+			additional: vec![(data.clone(), data.clone()); FieldLimit::get().try_into().unwrap()]
+				.try_into()
+				.unwrap(),
 			display: data.clone(),
 			legal: data.clone(),
 			web: data.clone(),
@@ -150,11 +148,15 @@ impl<FieldLimit: Get<u32> + 'static> IdentityInformationProvider for IdentityInf
 			twitter: data,
 		}
 	}
+
+	#[cfg(feature = "runtime-benchmarks")]
+	fn all_fields() -> Self::FieldsIdentifier {
+		IdentityField::all().bits()
+	}
 }
 
 impl<FieldLimit: Get<u32>> IdentityInfo<FieldLimit> {
-	#[allow(unused)]
-	pub(crate) fn fields(&self) -> IdentityFields<IdentityField> {
+	pub(crate) fn fields(&self) -> BitFlags<IdentityField> {
 		let mut res = <BitFlags<IdentityField>>::empty();
 		if !self.display.is_none() {
 			res.insert(IdentityField::Display);
@@ -180,6 +182,6 @@ impl<FieldLimit: Get<u32>> IdentityInfo<FieldLimit> {
 		if !self.twitter.is_none() {
 			res.insert(IdentityField::Twitter);
 		}
-		IdentityFields(res)
+		res
 	}
 }
diff --git a/substrate/frame/identity/src/lib.rs b/substrate/frame/identity/src/lib.rs
index a341cc6bb9bda3a810a9da03ceea83fd62753f67..264ea3ddb41f90fbcf977de016f232b0dfc6643d 100644
--- a/substrate/frame/identity/src/lib.rs
+++ b/substrate/frame/identity/src/lib.rs
@@ -73,21 +73,23 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 
 mod benchmarking;
-pub mod simple;
+pub mod legacy;
 #[cfg(test)]
 mod tests;
 mod types;
 pub mod weights;
 
-use frame_support::traits::{BalanceStatus, Currency, OnUnbalanced, ReservableCurrency};
+use frame_support::{
+	pallet_prelude::DispatchResult,
+	traits::{BalanceStatus, Currency, Get, OnUnbalanced, ReservableCurrency},
+};
 use sp_runtime::traits::{AppendZerosInput, Hash, Saturating, StaticLookup, Zero};
 use sp_std::prelude::*;
 pub use weights::WeightInfo;
 
 pub use pallet::*;
 pub use types::{
-	Data, IdentityFields, IdentityInformationProvider, Judgement, RegistrarIndex, RegistrarInfo,
-	Registration,
+	Data, IdentityInformationProvider, Judgement, RegistrarIndex, RegistrarInfo, Registration,
 };
 
 type BalanceOf<T> =
@@ -115,9 +117,9 @@ pub mod pallet {
 		#[pallet::constant]
 		type BasicDeposit: Get<BalanceOf<Self>>;
 
-		/// The amount held on deposit per additional field for a registered identity.
+		/// The amount held on deposit per encoded byte for a registered identity.
 		#[pallet::constant]
-		type FieldDeposit: Get<BalanceOf<Self>>;
+		type ByteDeposit: Get<BalanceOf<Self>>;
 
 		/// The amount held on deposit for a registered subaccount. This should account for the fact
 		/// that one storage item's value will increase by the size of an account ID, and there will
@@ -129,11 +131,6 @@ pub mod pallet {
 		#[pallet::constant]
 		type MaxSubAccounts: Get<u32>;
 
-		/// Maximum number of additional fields that may be stored in an ID. Needed to bound the I/O
-		/// required to access an identity, but can be pretty high.
-		#[pallet::constant]
-		type MaxAdditionalFields: Get<u32>;
-
 		/// Structure holding information about an identity.
 		type IdentityInformation: IdentityInformationProvider;
 
@@ -206,7 +203,7 @@ pub mod pallet {
 				RegistrarInfo<
 					BalanceOf<T>,
 					T::AccountId,
-					<T::IdentityInformation as IdentityInformationProvider>::IdentityField,
+					<T::IdentityInformation as IdentityInformationProvider>::FieldsIdentifier,
 				>,
 			>,
 			T::MaxRegistrars,
@@ -238,8 +235,6 @@ pub mod pallet {
 		InvalidIndex,
 		/// The target is invalid.
 		InvalidTarget,
-		/// Too many additional fields.
-		TooManyFields,
 		/// Maximum amount of registrars reached. Cannot add any more.
 		TooManyRegistrars,
 		/// Account ID is already named.
@@ -328,19 +323,15 @@ pub mod pallet {
 		///
 		/// Emits `IdentitySet` if successful.
 		#[pallet::call_index(1)]
-		#[pallet::weight(T::WeightInfo::set_identity(
-			T::MaxRegistrars::get(),
-			T::MaxAdditionalFields::get(),
-		))]
+		#[pallet::weight(T::WeightInfo::set_identity(T::MaxRegistrars::get()))]
 		pub fn set_identity(
 			origin: OriginFor<T>,
 			info: Box<T::IdentityInformation>,
 		) -> DispatchResultWithPostInfo {
 			let sender = ensure_signed(origin)?;
-			#[allow(deprecated)]
-			let extra_fields = info.additional() as u32;
-			ensure!(extra_fields <= T::MaxAdditionalFields::get(), Error::<T>::TooManyFields);
-			let fd = <BalanceOf<T>>::from(extra_fields) * T::FieldDeposit::get();
+			let encoded_byte_size = info.encoded_size() as u32;
+			let byte_deposit =
+				T::ByteDeposit::get().saturating_mul(<BalanceOf<T>>::from(encoded_byte_size));
 
 			let mut id = match <IdentityOf<T>>::get(&sender) {
 				Some(mut id) => {
@@ -357,7 +348,7 @@ pub mod pallet {
 			};
 
 			let old_deposit = id.deposit;
-			id.deposit = T::BasicDeposit::get() + fd;
+			id.deposit = T::BasicDeposit::get().saturating_add(byte_deposit);
 			if id.deposit > old_deposit {
 				T::Currency::reserve(&sender, id.deposit - old_deposit)?;
 			}
@@ -370,7 +361,7 @@ pub mod pallet {
 			<IdentityOf<T>>::insert(&sender, id);
 			Self::deposit_event(Event::IdentitySet { who: sender });
 
-			Ok(Some(T::WeightInfo::set_identity(judgements as u32, extra_fields)).into())
+			Ok(Some(T::WeightInfo::set_identity(judgements as u32)).into())
 		}
 
 		/// Set the sub-accounts of the sender.
@@ -404,7 +395,8 @@ pub mod pallet {
 			);
 
 			let (old_deposit, old_ids) = <SubsOf<T>>::get(&sender);
-			let new_deposit = T::SubAccountDeposit::get() * <BalanceOf<T>>::from(subs.len() as u32);
+			let new_deposit =
+				T::SubAccountDeposit::get().saturating_mul(<BalanceOf<T>>::from(subs.len() as u32));
 
 			let not_other_sub =
 				subs.iter().filter_map(|i| SuperOf::<T>::get(&i.0)).all(|i| i.0 == sender);
@@ -454,14 +446,13 @@ pub mod pallet {
 		#[pallet::weight(T::WeightInfo::clear_identity(
 			T::MaxRegistrars::get(),
 			T::MaxSubAccounts::get(),
-			T::MaxAdditionalFields::get(),
 		))]
 		pub fn clear_identity(origin: OriginFor<T>) -> DispatchResultWithPostInfo {
 			let sender = ensure_signed(origin)?;
 
 			let (subs_deposit, sub_ids) = <SubsOf<T>>::take(&sender);
 			let id = <IdentityOf<T>>::take(&sender).ok_or(Error::<T>::NotNamed)?;
-			let deposit = id.total_deposit() + subs_deposit;
+			let deposit = id.total_deposit().saturating_add(subs_deposit);
 			for sub in sub_ids.iter() {
 				<SuperOf<T>>::remove(sub);
 			}
@@ -475,7 +466,6 @@ pub mod pallet {
 			Ok(Some(T::WeightInfo::clear_identity(
 				id.judgements.len() as u32,
 				sub_ids.len() as u32,
-				id.info.additional() as u32,
 			))
 			.into())
 		}
@@ -497,10 +487,7 @@ pub mod pallet {
 		///
 		/// Emits `JudgementRequested` if successful.
 		#[pallet::call_index(4)]
-		#[pallet::weight(T::WeightInfo::request_judgement(
-			T::MaxRegistrars::get(),
-			T::MaxAdditionalFields::get(),
-		))]
+		#[pallet::weight(T::WeightInfo::request_judgement(T::MaxRegistrars::get(),))]
 		pub fn request_judgement(
 			origin: OriginFor<T>,
 			#[pallet::compact] reg_index: RegistrarIndex,
@@ -530,8 +517,6 @@ pub mod pallet {
 			T::Currency::reserve(&sender, registrar.fee)?;
 
 			let judgements = id.judgements.len();
-			#[allow(deprecated)]
-			let extra_fields = id.info.additional();
 			<IdentityOf<T>>::insert(&sender, id);
 
 			Self::deposit_event(Event::JudgementRequested {
@@ -539,8 +524,7 @@ pub mod pallet {
 				registrar_index: reg_index,
 			});
 
-			Ok(Some(T::WeightInfo::request_judgement(judgements as u32, extra_fields as u32))
-				.into())
+			Ok(Some(T::WeightInfo::request_judgement(judgements as u32)).into())
 		}
 
 		/// Cancel a previous request.
@@ -554,10 +538,7 @@ pub mod pallet {
 		///
 		/// Emits `JudgementUnrequested` if successful.
 		#[pallet::call_index(5)]
-		#[pallet::weight(T::WeightInfo::cancel_request(
-			T::MaxRegistrars::get(),
-			T::MaxAdditionalFields::get(),
-		))]
+		#[pallet::weight(T::WeightInfo::cancel_request(T::MaxRegistrars::get()))]
 		pub fn cancel_request(
 			origin: OriginFor<T>,
 			reg_index: RegistrarIndex,
@@ -578,8 +559,6 @@ pub mod pallet {
 			let err_amount = T::Currency::unreserve(&sender, fee);
 			debug_assert!(err_amount.is_zero());
 			let judgements = id.judgements.len();
-			#[allow(deprecated)]
-			let extra_fields = id.info.additional();
 			<IdentityOf<T>>::insert(&sender, id);
 
 			Self::deposit_event(Event::JudgementUnrequested {
@@ -587,7 +566,7 @@ pub mod pallet {
 				registrar_index: reg_index,
 			});
 
-			Ok(Some(T::WeightInfo::cancel_request(judgements as u32, extra_fields as u32)).into())
+			Ok(Some(T::WeightInfo::cancel_request(judgements as u32)).into())
 		}
 
 		/// Set the fee required for a judgement to be requested from a registrar.
@@ -669,26 +648,21 @@ pub mod pallet {
 		pub fn set_fields(
 			origin: OriginFor<T>,
 			#[pallet::compact] index: RegistrarIndex,
-			fields: IdentityFields<
-				<T::IdentityInformation as IdentityInformationProvider>::IdentityField,
-			>,
+			fields: <T::IdentityInformation as IdentityInformationProvider>::FieldsIdentifier,
 		) -> DispatchResultWithPostInfo {
 			let who = ensure_signed(origin)?;
 
-			let registrars = <Registrars<T>>::mutate(|rs| -> Result<usize, DispatchError> {
-				rs.get_mut(index as usize)
-					.and_then(|x| x.as_mut())
-					.and_then(|r| {
-						if r.account == who {
-							r.fields = fields;
-							Some(())
-						} else {
-							None
-						}
-					})
-					.ok_or_else(|| DispatchError::from(Error::<T>::InvalidIndex))?;
-				Ok(rs.len())
-			})?;
+			let registrars =
+				<Registrars<T>>::mutate(|registrars| -> Result<usize, DispatchError> {
+					let registrar = registrars
+						.get_mut(index as usize)
+						.and_then(|r| r.as_mut())
+						.filter(|r| r.account == who)
+						.ok_or_else(|| DispatchError::from(Error::<T>::InvalidIndex))?;
+					registrar.fields = fields;
+
+					Ok(registrars.len())
+				})?;
 			Ok(Some(T::WeightInfo::set_fields(registrars as u32)).into())
 		}
 
@@ -706,10 +680,7 @@ pub mod pallet {
 		///
 		/// Emits `JudgementGiven` if successful.
 		#[pallet::call_index(9)]
-		#[pallet::weight(T::WeightInfo::provide_judgement(
-			T::MaxRegistrars::get(),
-			T::MaxAdditionalFields::get(),
-		))]
+		#[pallet::weight(T::WeightInfo::provide_judgement(T::MaxRegistrars::get()))]
 		pub fn provide_judgement(
 			origin: OriginFor<T>,
 			#[pallet::compact] reg_index: RegistrarIndex,
@@ -752,13 +723,10 @@ pub mod pallet {
 			}
 
 			let judgements = id.judgements.len();
-			#[allow(deprecated)]
-			let extra_fields = id.info.additional();
 			<IdentityOf<T>>::insert(&target, id);
 			Self::deposit_event(Event::JudgementGiven { target, registrar_index: reg_index });
 
-			Ok(Some(T::WeightInfo::provide_judgement(judgements as u32, extra_fields as u32))
-				.into())
+			Ok(Some(T::WeightInfo::provide_judgement(judgements as u32)).into())
 		}
 
 		/// Remove an account's identity and sub-account information and slash the deposits.
@@ -777,7 +745,6 @@ pub mod pallet {
 		#[pallet::weight(T::WeightInfo::kill_identity(
 			T::MaxRegistrars::get(),
 			T::MaxSubAccounts::get(),
-			T::MaxAdditionalFields::get(),
 		))]
 		pub fn kill_identity(
 			origin: OriginFor<T>,
@@ -790,7 +757,7 @@ pub mod pallet {
 			// Grab their deposit (and check that they have one).
 			let (subs_deposit, sub_ids) = <SubsOf<T>>::take(&target);
 			let id = <IdentityOf<T>>::take(&target).ok_or(Error::<T>::NotNamed)?;
-			let deposit = id.total_deposit() + subs_deposit;
+			let deposit = id.total_deposit().saturating_add(subs_deposit);
 			for sub in sub_ids.iter() {
 				<SuperOf<T>>::remove(sub);
 			}
@@ -800,12 +767,8 @@ pub mod pallet {
 			Self::deposit_event(Event::IdentityKilled { who: target, deposit });
 
 			#[allow(deprecated)]
-			Ok(Some(T::WeightInfo::kill_identity(
-				id.judgements.len() as u32,
-				sub_ids.len() as u32,
-				id.info.additional() as u32,
-			))
-			.into())
+			Ok(Some(T::WeightInfo::kill_identity(id.judgements.len() as u32, sub_ids.len() as u32))
+				.into())
 		}
 
 		/// Add the given account to the sender's subs.
@@ -936,7 +899,10 @@ impl<T: Config> Pallet<T> {
 	}
 
 	/// Check if the account has corresponding identity information by the identity field.
-	pub fn has_identity(who: &T::AccountId, fields: u64) -> bool {
+	pub fn has_identity(
+		who: &T::AccountId,
+		fields: <T::IdentityInformation as IdentityInformationProvider>::FieldsIdentifier,
+	) -> bool {
 		IdentityOf::<T>::get(who)
 			.map_or(false, |registration| (registration.info.has_identity(fields)))
 	}
diff --git a/substrate/frame/identity/src/tests.rs b/substrate/frame/identity/src/tests.rs
index f0980e9c7cc89943da9eec6c86607198ee1a486b..71192ea65a8c1afcf5ae7b45c813e53ce1fc2542 100644
--- a/substrate/frame/identity/src/tests.rs
+++ b/substrate/frame/identity/src/tests.rs
@@ -20,13 +20,13 @@
 use super::*;
 use crate::{
 	self as pallet_identity,
-	simple::{IdentityField as SimpleIdentityField, IdentityInfo},
+	legacy::{IdentityField, IdentityInfo},
 };
 
 use codec::{Decode, Encode};
 use frame_support::{
 	assert_noop, assert_ok, ord_parameter_types, parameter_types,
-	traits::{ConstU32, ConstU64, EitherOfDiverse},
+	traits::{ConstU32, ConstU64, EitherOfDiverse, Get},
 	BoundedVec,
 };
 use frame_system::{EnsureRoot, EnsureSignedBy};
@@ -105,11 +105,10 @@ impl pallet_identity::Config for Test {
 	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type Slashed = ();
-	type BasicDeposit = ConstU64<10>;
-	type FieldDeposit = ConstU64<10>;
-	type SubAccountDeposit = ConstU64<10>;
+	type BasicDeposit = ConstU64<100>;
+	type ByteDeposit = ConstU64<10>;
+	type SubAccountDeposit = ConstU64<100>;
 	type MaxSubAccounts = ConstU32<2>;
-	type MaxAdditionalFields = MaxAdditionalFields;
 	type IdentityInformation = IdentityInfo<MaxAdditionalFields>;
 	type MaxRegistrars = MaxRegistrars;
 	type RegistrarOrigin = EnsureOneOrRoot;
@@ -120,7 +119,7 @@ impl pallet_identity::Config for Test {
 pub fn new_test_ext() -> sp_io::TestExternalities {
 	let mut t = frame_system::GenesisConfig::<Test>::default().build_storage().unwrap();
 	pallet_balances::GenesisConfig::<Test> {
-		balances: vec![(1, 10), (2, 10), (3, 10), (10, 100), (20, 100), (30, 100)],
+		balances: vec![(1, 100), (2, 100), (3, 100), (10, 1000), (20, 1000), (30, 1000)],
 	}
 	.assimilate_storage(&mut t)
 	.unwrap();
@@ -143,39 +142,43 @@ fn twenty() -> IdentityInfo<MaxAdditionalFields> {
 	}
 }
 
+fn id_deposit(id: &IdentityInfo<MaxAdditionalFields>) -> u64 {
+	let base_deposit: u64 = <<Test as Config>::BasicDeposit as Get<u64>>::get();
+	let byte_deposit: u64 = <<Test as Config>::ByteDeposit as Get<u64>>::get() *
+		TryInto::<u64>::try_into(id.encoded_size()).unwrap();
+	base_deposit + byte_deposit
+}
+
 #[test]
 fn identity_fields_repr_works() {
-	// `SimpleIdentityField` sanity checks.
-	assert_eq!(SimpleIdentityField::Display as u64, 1 << 0);
-	assert_eq!(SimpleIdentityField::Legal as u64, 1 << 1);
-	assert_eq!(SimpleIdentityField::Web as u64, 1 << 2);
-	assert_eq!(SimpleIdentityField::Riot as u64, 1 << 3);
-	assert_eq!(SimpleIdentityField::Email as u64, 1 << 4);
-	assert_eq!(SimpleIdentityField::PgpFingerprint as u64, 1 << 5);
-	assert_eq!(SimpleIdentityField::Image as u64, 1 << 6);
-	assert_eq!(SimpleIdentityField::Twitter as u64, 1 << 7);
-
-	let fields = IdentityFields(
-		SimpleIdentityField::Legal |
-			SimpleIdentityField::Web |
-			SimpleIdentityField::Riot |
-			SimpleIdentityField::PgpFingerprint |
-			SimpleIdentityField::Twitter,
-	);
-
-	assert!(!fields.0.contains(SimpleIdentityField::Display));
-	assert!(fields.0.contains(SimpleIdentityField::Legal));
-	assert!(fields.0.contains(SimpleIdentityField::Web));
-	assert!(fields.0.contains(SimpleIdentityField::Riot));
-	assert!(!fields.0.contains(SimpleIdentityField::Email));
-	assert!(fields.0.contains(SimpleIdentityField::PgpFingerprint));
-	assert!(!fields.0.contains(SimpleIdentityField::Image));
-	assert!(fields.0.contains(SimpleIdentityField::Twitter));
-
-	// The `IdentityFields` inner `BitFlags::bits` is used for `Encode`/`Decode`, so we ensure that
-	// the `u64` representation matches what we expect during encode/decode operations.
+	// `IdentityField` sanity checks.
+	assert_eq!(IdentityField::Display as u64, 1 << 0);
+	assert_eq!(IdentityField::Legal as u64, 1 << 1);
+	assert_eq!(IdentityField::Web as u64, 1 << 2);
+	assert_eq!(IdentityField::Riot as u64, 1 << 3);
+	assert_eq!(IdentityField::Email as u64, 1 << 4);
+	assert_eq!(IdentityField::PgpFingerprint as u64, 1 << 5);
+	assert_eq!(IdentityField::Image as u64, 1 << 6);
+	assert_eq!(IdentityField::Twitter as u64, 1 << 7);
+
+	let fields = IdentityField::Legal |
+		IdentityField::Web |
+		IdentityField::Riot |
+		IdentityField::PgpFingerprint |
+		IdentityField::Twitter;
+
+	assert!(!fields.contains(IdentityField::Display));
+	assert!(fields.contains(IdentityField::Legal));
+	assert!(fields.contains(IdentityField::Web));
+	assert!(fields.contains(IdentityField::Riot));
+	assert!(!fields.contains(IdentityField::Email));
+	assert!(fields.contains(IdentityField::PgpFingerprint));
+	assert!(!fields.contains(IdentityField::Image));
+	assert!(fields.contains(IdentityField::Twitter));
+
+	// Ensure that the `u64` representation matches what we expect.
 	assert_eq!(
-		fields.0.bits(),
+		fields.bits(),
 		0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_10101110
 	);
 }
@@ -190,18 +193,23 @@ fn editing_subaccounts_should_work() {
 			Error::<Test>::NoIdentity
 		);
 
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
+		let id_deposit = id_deposit(&ten);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
+
+		let sub_deposit: u64 = <<Test as Config>::SubAccountDeposit as Get<u64>>::get();
 
 		// first sub account
 		assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));
 		assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));
-		assert_eq!(Balances::free_balance(10), 80);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - sub_deposit);
 
 		// second sub account
 		assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 2, data(2)));
 		assert_eq!(SuperOf::<Test>::get(1), Some((10, data(1))));
 		assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));
-		assert_eq!(Balances::free_balance(10), 70);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 2 * sub_deposit);
 
 		// third sub account is too many
 		assert_noop!(
@@ -213,20 +221,20 @@ fn editing_subaccounts_should_work() {
 		assert_ok!(Identity::rename_sub(RuntimeOrigin::signed(10), 1, data(11)));
 		assert_eq!(SuperOf::<Test>::get(1), Some((10, data(11))));
 		assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));
-		assert_eq!(Balances::free_balance(10), 70);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 2 * sub_deposit);
 
 		// remove first sub account
 		assert_ok!(Identity::remove_sub(RuntimeOrigin::signed(10), 1));
 		assert_eq!(SuperOf::<Test>::get(1), None);
 		assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));
-		assert_eq!(Balances::free_balance(10), 80);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - sub_deposit);
 
 		// add third sub account
 		assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 3, data(3)));
 		assert_eq!(SuperOf::<Test>::get(1), None);
 		assert_eq!(SuperOf::<Test>::get(2), Some((10, data(2))));
 		assert_eq!(SuperOf::<Test>::get(3), Some((10, data(3))));
-		assert_eq!(Balances::free_balance(10), 70);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 2 * sub_deposit);
 	});
 }
 
@@ -234,15 +242,22 @@ fn editing_subaccounts_should_work() {
 fn resolving_subaccount_ownership_works() {
 	new_test_ext().execute_with(|| {
 		let data = |x| Data::Raw(vec![x; 1].try_into().unwrap());
+		let sub_deposit: u64 = <<Test as Config>::SubAccountDeposit as Get<u64>>::get();
 
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(20), Box::new(twenty())));
+		let ten = ten();
+		let ten_deposit = id_deposit(&ten);
+		let twenty = twenty();
+		let twenty_deposit = id_deposit(&twenty);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten)));
+		assert_eq!(Balances::free_balance(10), 1000 - ten_deposit);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(20), Box::new(twenty)));
+		assert_eq!(Balances::free_balance(20), 1000 - twenty_deposit);
 
 		// 10 claims 1 as a subaccount
 		assert_ok!(Identity::add_sub(RuntimeOrigin::signed(10), 1, data(1)));
-		assert_eq!(Balances::free_balance(1), 10);
-		assert_eq!(Balances::free_balance(10), 80);
-		assert_eq!(Balances::reserved_balance(10), 20);
+		assert_eq!(Balances::free_balance(1), 100);
+		assert_eq!(Balances::free_balance(10), 1000 - ten_deposit - sub_deposit);
+		assert_eq!(Balances::reserved_balance(10), ten_deposit + sub_deposit);
 		// 20 cannot claim 1 now
 		assert_noop!(
 			Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)),
@@ -251,9 +266,9 @@ fn resolving_subaccount_ownership_works() {
 		// 1 wants to be with 20 so it quits from 10
 		assert_ok!(Identity::quit_sub(RuntimeOrigin::signed(1)));
 		// 1 gets the 10 that 10 paid.
-		assert_eq!(Balances::free_balance(1), 20);
-		assert_eq!(Balances::free_balance(10), 80);
-		assert_eq!(Balances::reserved_balance(10), 10);
+		assert_eq!(Balances::free_balance(1), 100 + sub_deposit);
+		assert_eq!(Balances::free_balance(10), 1000 - ten_deposit - sub_deposit);
+		assert_eq!(Balances::reserved_balance(10), ten_deposit);
 		// 20 can claim 1 now
 		assert_ok!(Identity::add_sub(RuntimeOrigin::signed(20), 1, data(1)));
 	});
@@ -269,16 +284,29 @@ fn trailing_zeros_decodes_into_default_data() {
 	assert_eq!(b, Data::None);
 }
 
+#[test]
+fn adding_registrar_invalid_index() {
+	new_test_ext().execute_with(|| {
+		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));
+		assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));
+		let fields = IdentityField::Display | IdentityField::Legal;
+		assert_noop!(
+			Identity::set_fields(RuntimeOrigin::signed(3), 100, fields.bits()),
+			Error::<Test>::InvalidIndex
+		);
+	});
+}
+
 #[test]
 fn adding_registrar_should_work() {
 	new_test_ext().execute_with(|| {
 		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));
 		assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));
-		let fields = IdentityFields(SimpleIdentityField::Display | SimpleIdentityField::Legal);
-		assert_ok!(Identity::set_fields(RuntimeOrigin::signed(3), 0, fields));
+		let fields = IdentityField::Display | IdentityField::Legal;
+		assert_ok!(Identity::set_fields(RuntimeOrigin::signed(3), 0, fields.bits()));
 		assert_eq!(
 			Identity::registrars(),
-			vec![Some(RegistrarInfo { account: 3, fee: 10, fields })]
+			vec![Some(RegistrarInfo { account: 3, fee: 10, fields: fields.bits() })]
 		);
 	});
 }
@@ -306,11 +334,13 @@ fn registration_should_work() {
 		three_fields.additional.try_push(Default::default()).unwrap();
 		three_fields.additional.try_push(Default::default()).unwrap();
 		assert!(three_fields.additional.try_push(Default::default()).is_err());
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
-		assert_eq!(Identity::identity(10).unwrap().info, ten());
-		assert_eq!(Balances::free_balance(10), 90);
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
+		assert_eq!(Identity::identity(10).unwrap().info, ten);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));
-		assert_eq!(Balances::free_balance(10), 100);
+		assert_eq!(Balances::free_balance(10), 1000);
 		assert_noop!(Identity::clear_identity(RuntimeOrigin::signed(10)), Error::<Test>::NotNamed);
 	});
 }
@@ -407,11 +437,13 @@ fn clearing_judgement_should_work() {
 #[test]
 fn killing_slashing_should_work() {
 	new_test_ext().execute_with(|| {
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten)));
 		assert_noop!(Identity::kill_identity(RuntimeOrigin::signed(1), 10), BadOrigin);
 		assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));
 		assert_eq!(Identity::identity(10), None);
-		assert_eq!(Balances::free_balance(10), 90);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_noop!(
 			Identity::kill_identity(RuntimeOrigin::signed(2), 10),
 			Error::<Test>::NotNamed
@@ -422,38 +454,43 @@ fn killing_slashing_should_work() {
 #[test]
 fn setting_subaccounts_should_work() {
 	new_test_ext().execute_with(|| {
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
+		let sub_deposit: u64 = <<Test as Config>::SubAccountDeposit as Get<u64>>::get();
 		let mut subs = vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))];
 		assert_noop!(
 			Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()),
 			Error::<Test>::NotFound
 		);
 
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten)));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));
-		assert_eq!(Balances::free_balance(10), 80);
-		assert_eq!(Identity::subs_of(10), (10, vec![20].try_into().unwrap()));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - sub_deposit);
+		assert_eq!(Identity::subs_of(10), (sub_deposit, vec![20].try_into().unwrap()));
 		assert_eq!(Identity::super_of(20), Some((10, Data::Raw(vec![40; 1].try_into().unwrap()))));
 
 		// push another item and re-set it.
 		subs.push((30, Data::Raw(vec![50; 1].try_into().unwrap())));
 		assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));
-		assert_eq!(Balances::free_balance(10), 70);
-		assert_eq!(Identity::subs_of(10), (20, vec![20, 30].try_into().unwrap()));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 2 * sub_deposit);
+		assert_eq!(Identity::subs_of(10), (2 * sub_deposit, vec![20, 30].try_into().unwrap()));
 		assert_eq!(Identity::super_of(20), Some((10, Data::Raw(vec![40; 1].try_into().unwrap()))));
 		assert_eq!(Identity::super_of(30), Some((10, Data::Raw(vec![50; 1].try_into().unwrap()))));
 
 		// switch out one of the items and re-set.
 		subs[0] = (40, Data::Raw(vec![60; 1].try_into().unwrap()));
 		assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), subs.clone()));
-		assert_eq!(Balances::free_balance(10), 70); // no change in the balance
-		assert_eq!(Identity::subs_of(10), (20, vec![40, 30].try_into().unwrap()));
+		// no change in the balance
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 2 * sub_deposit);
+		assert_eq!(Identity::subs_of(10), (2 * sub_deposit, vec![40, 30].try_into().unwrap()));
 		assert_eq!(Identity::super_of(20), None);
 		assert_eq!(Identity::super_of(30), Some((10, Data::Raw(vec![50; 1].try_into().unwrap()))));
 		assert_eq!(Identity::super_of(40), Some((10, Data::Raw(vec![60; 1].try_into().unwrap()))));
 
 		// clear
 		assert_ok!(Identity::set_subs(RuntimeOrigin::signed(10), vec![]));
-		assert_eq!(Balances::free_balance(10), 90);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_eq!(Identity::subs_of(10), (0, BoundedVec::default()));
 		assert_eq!(Identity::super_of(30), None);
 		assert_eq!(Identity::super_of(40), None);
@@ -469,13 +506,15 @@ fn setting_subaccounts_should_work() {
 #[test]
 fn clearing_account_should_remove_subaccounts_and_refund() {
 	new_test_ext().execute_with(|| {
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit(&ten));
 		assert_ok!(Identity::set_subs(
 			RuntimeOrigin::signed(10),
 			vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]
 		));
 		assert_ok!(Identity::clear_identity(RuntimeOrigin::signed(10)));
-		assert_eq!(Balances::free_balance(10), 100);
+		assert_eq!(Balances::free_balance(10), 1000);
 		assert!(Identity::super_of(20).is_none());
 	});
 }
@@ -483,13 +522,18 @@ fn clearing_account_should_remove_subaccounts_and_refund() {
 #[test]
 fn killing_account_should_remove_subaccounts_and_not_refund() {
 	new_test_ext().execute_with(|| {
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
+		let sub_deposit: u64 = <<Test as Config>::SubAccountDeposit as Get<u64>>::get();
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten)));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_ok!(Identity::set_subs(
 			RuntimeOrigin::signed(10),
 			vec![(20, Data::Raw(vec![40; 1].try_into().unwrap()))]
 		));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - sub_deposit);
 		assert_ok!(Identity::kill_identity(RuntimeOrigin::signed(2), 10));
-		assert_eq!(Balances::free_balance(10), 80);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - sub_deposit);
 		assert!(Identity::super_of(20).is_none());
 	});
 }
@@ -503,10 +547,12 @@ fn cancelling_requested_judgement_should_work() {
 			Identity::cancel_request(RuntimeOrigin::signed(10), 0),
 			Error::<Test>::NoIdentity
 		);
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit(&ten));
 		assert_ok!(Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10));
 		assert_ok!(Identity::cancel_request(RuntimeOrigin::signed(10), 0));
-		assert_eq!(Balances::free_balance(10), 90);
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit(&ten));
 		assert_noop!(
 			Identity::cancel_request(RuntimeOrigin::signed(10), 0),
 			Error::<Test>::NotFound
@@ -517,7 +563,7 @@ fn cancelling_requested_judgement_should_work() {
 			0,
 			10,
 			Judgement::Reasonable,
-			BlakeTwo256::hash_of(&ten())
+			BlakeTwo256::hash_of(&ten)
 		));
 		assert_noop!(
 			Identity::cancel_request(RuntimeOrigin::signed(10), 0),
@@ -531,14 +577,17 @@ fn requesting_judgement_should_work() {
 	new_test_ext().execute_with(|| {
 		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));
 		assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 		assert_noop!(
 			Identity::request_judgement(RuntimeOrigin::signed(10), 0, 9),
 			Error::<Test>::FeeChanged
 		);
 		assert_ok!(Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10));
-		// 10 for the judgement request, 10 for the identity.
-		assert_eq!(Balances::free_balance(10), 80);
+		// 10 for the judgement request and the deposit for the identity.
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 10);
 
 		// Re-requesting won't work as we already paid.
 		assert_noop!(
@@ -550,10 +599,11 @@ fn requesting_judgement_should_work() {
 			0,
 			10,
 			Judgement::Erroneous,
-			BlakeTwo256::hash_of(&ten())
+			BlakeTwo256::hash_of(&ten)
 		));
 		// Registrar got their payment now.
-		assert_eq!(Balances::free_balance(3), 20);
+		// 100 initial balance and 10 for the judgement.
+		assert_eq!(Balances::free_balance(3), 100 + 10);
 
 		// Re-requesting still won't work as it's erroneous.
 		assert_noop!(
@@ -571,7 +621,7 @@ fn requesting_judgement_should_work() {
 			0,
 			10,
 			Judgement::OutOfDate,
-			BlakeTwo256::hash_of(&ten())
+			BlakeTwo256::hash_of(&ten)
 		));
 		assert_ok!(Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10));
 	});
@@ -580,12 +630,14 @@ fn requesting_judgement_should_work() {
 #[test]
 fn provide_judgement_should_return_judgement_payment_failed_error() {
 	new_test_ext().execute_with(|| {
+		let ten = ten();
+		let id_deposit = id_deposit(&ten);
 		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));
 		assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));
-		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten.clone())));
 		assert_ok!(Identity::request_judgement(RuntimeOrigin::signed(10), 0, 10));
-		// 10 for the judgement request, 10 for the identity.
-		assert_eq!(Balances::free_balance(10), 80);
+		// 10 for the judgement request and the deposit for the identity.
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit - 10);
 
 		// This forces judgement payment failed error
 		Balances::make_free_balance_be(&3, 0);
@@ -595,7 +647,7 @@ fn provide_judgement_should_return_judgement_payment_failed_error() {
 				0,
 				10,
 				Judgement::Erroneous,
-				BlakeTwo256::hash_of(&ten())
+				BlakeTwo256::hash_of(&ten)
 			),
 			Error::<Test>::JudgementPaymentFailed
 		);
@@ -607,25 +659,24 @@ fn field_deposit_should_work() {
 	new_test_ext().execute_with(|| {
 		assert_ok!(Identity::add_registrar(RuntimeOrigin::signed(1), 3));
 		assert_ok!(Identity::set_fee(RuntimeOrigin::signed(3), 0, 10));
-		assert_ok!(Identity::set_identity(
-			RuntimeOrigin::signed(10),
-			Box::new(IdentityInfo {
-				additional: vec![
-					(
-						Data::Raw(b"number".to_vec().try_into().unwrap()),
-						Data::Raw(10u32.encode().try_into().unwrap())
-					),
-					(
-						Data::Raw(b"text".to_vec().try_into().unwrap()),
-						Data::Raw(b"10".to_vec().try_into().unwrap())
-					),
-				]
-				.try_into()
-				.unwrap(),
-				..Default::default()
-			})
-		));
-		assert_eq!(Balances::free_balance(10), 70);
+		let id = IdentityInfo {
+			additional: vec![
+				(
+					Data::Raw(b"number".to_vec().try_into().unwrap()),
+					Data::Raw(10u32.encode().try_into().unwrap()),
+				),
+				(
+					Data::Raw(b"text".to_vec().try_into().unwrap()),
+					Data::Raw(b"10".to_vec().try_into().unwrap()),
+				),
+			]
+			.try_into()
+			.unwrap(),
+			..Default::default()
+		};
+		let id_deposit = id_deposit(&id);
+		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(id)));
+		assert_eq!(Balances::free_balance(10), 1000 - id_deposit);
 	});
 }
 
@@ -649,17 +700,15 @@ fn setting_account_id_should_work() {
 fn test_has_identity() {
 	new_test_ext().execute_with(|| {
 		assert_ok!(Identity::set_identity(RuntimeOrigin::signed(10), Box::new(ten())));
-		assert!(Identity::has_identity(&10, SimpleIdentityField::Display as u64));
-		assert!(Identity::has_identity(&10, SimpleIdentityField::Legal as u64));
+		assert!(Identity::has_identity(&10, IdentityField::Display as u64));
+		assert!(Identity::has_identity(&10, IdentityField::Legal as u64));
 		assert!(Identity::has_identity(
 			&10,
-			SimpleIdentityField::Display as u64 | SimpleIdentityField::Legal as u64
+			IdentityField::Display as u64 | IdentityField::Legal as u64
 		));
 		assert!(!Identity::has_identity(
 			&10,
-			SimpleIdentityField::Display as u64 |
-				SimpleIdentityField::Legal as u64 |
-				SimpleIdentityField::Web as u64
+			IdentityField::Display as u64 | IdentityField::Legal as u64 | IdentityField::Web as u64
 		));
 	});
 }
diff --git a/substrate/frame/identity/src/types.rs b/substrate/frame/identity/src/types.rs
index 7055f6d80cfb5790dd533670be98ab4e3bf3a21d..d3e6bf3973f0b3130df4217097ac96015f2e83b3 100644
--- a/substrate/frame/identity/src/types.rs
+++ b/substrate/frame/identity/src/types.rs
@@ -17,23 +17,23 @@
 
 use super::*;
 use codec::{Decode, Encode, MaxEncodedLen};
-use enumflags2::{BitFlag, BitFlags, _internal::RawBitFlags};
 use frame_support::{
 	traits::{ConstU32, Get},
 	BoundedVec, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound,
 };
 use scale_info::{
 	build::{Fields, Variants},
-	meta_type, Path, Type, TypeInfo, TypeParameter,
+	Path, Type, TypeInfo,
+};
+use sp_runtime::{
+	traits::{Member, Zero},
+	RuntimeDebug,
 };
-use sp_runtime::{traits::Zero, RuntimeDebug};
 use sp_std::{fmt::Debug, iter::once, ops::Add, prelude::*};
 
 /// An identifier for a single name registrar/identity verification service.
 pub type RegistrarIndex = u32;
 
-pub trait U64BitFlag: BitFlag + RawBitFlags<Numeric = u64> {}
-
 /// Either underlying data blob if it is at most 32 bytes, or a hash of it. If the data is greater
 /// than 32-bytes then it will be truncated when encoding.
 ///
@@ -234,24 +234,19 @@ impl<Balance: Encode + Decode + MaxEncodedLen + Copy + Clone + Debug + Eq + Part
 pub trait IdentityInformationProvider:
 	Encode + Decode + MaxEncodedLen + Clone + Debug + Eq + PartialEq + TypeInfo
 {
-	/// Type capable of representing all of the fields present in the identity information as bit
-	/// flags in `u64` format.
-	type IdentityField: Clone + Debug + Eq + PartialEq + TypeInfo + U64BitFlag;
+	/// Type capable of holding information on which identity fields are set.
+	type FieldsIdentifier: Member + Encode + Decode + MaxEncodedLen + TypeInfo + Default;
 
 	/// Check if an identity registered information for some given `fields`.
-	fn has_identity(&self, fields: u64) -> bool;
-
-	/// Interface for providing the number of additional fields this identity information provider
-	/// holds, used to charge for additional storage and weight. This interface is present for
-	/// backwards compatibility reasons only and will be removed as soon as the reference identity
-	/// provider removes additional fields.
-	#[deprecated]
-	fn additional(&self) -> usize {
-		0
-	}
+	fn has_identity(&self, fields: Self::FieldsIdentifier) -> bool;
 
+	/// Create a basic instance of the identity information.
 	#[cfg(feature = "runtime-benchmarks")]
-	fn create_identity_info(num_fields: u32) -> Self;
+	fn create_identity_info() -> Self;
+
+	/// The identity information representation for all identity fields enabled.
+	#[cfg(feature = "runtime-benchmarks")]
+	fn all_fields() -> Self::FieldsIdentifier;
 }
 
 /// Information on an identity along with judgements from registrars.
@@ -262,7 +257,7 @@ pub trait IdentityInformationProvider:
 	CloneNoBound, Encode, Eq, MaxEncodedLen, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo,
 )]
 #[codec(mel_bound())]
-#[scale_info(skip_type_params(MaxJudgements, MaxAdditionalFields))]
+#[scale_info(skip_type_params(MaxJudgements))]
 pub struct Registration<
 	Balance: Encode + Decode + MaxEncodedLen + Copy + Clone + Debug + Eq + PartialEq,
 	MaxJudgements: Get<u32>,
@@ -311,7 +306,7 @@ impl<
 pub struct RegistrarInfo<
 	Balance: Encode + Decode + Clone + Debug + Eq + PartialEq,
 	AccountId: Encode + Decode + Clone + Debug + Eq + PartialEq,
-	IdField: Clone + Debug + Eq + PartialEq + TypeInfo + U64BitFlag,
+	IdField: Encode + Decode + Clone + Debug + Default + Eq + PartialEq + TypeInfo + MaxEncodedLen,
 > {
 	/// The account of the registrar.
 	pub account: AccountId,
@@ -321,52 +316,7 @@ pub struct RegistrarInfo<
 
 	/// Relevant fields for this registrar. Registrar judgements are limited to attestations on
 	/// these fields.
-	pub fields: IdentityFields<IdField>,
-}
-
-/// Wrapper type for `BitFlags<IdentityField>` that implements `Codec`.
-#[derive(Clone, Copy, PartialEq, RuntimeDebug)]
-pub struct IdentityFields<IdField: BitFlag>(pub BitFlags<IdField>);
-
-impl<IdField: U64BitFlag> Default for IdentityFields<IdField> {
-	fn default() -> Self {
-		Self(Default::default())
-	}
-}
-
-impl<IdField: U64BitFlag> MaxEncodedLen for IdentityFields<IdField>
-where
-	IdentityFields<IdField>: Encode,
-{
-	fn max_encoded_len() -> usize {
-		u64::max_encoded_len()
-	}
-}
-
-impl<IdField: U64BitFlag + PartialEq> Eq for IdentityFields<IdField> {}
-impl<IdField: U64BitFlag> Encode for IdentityFields<IdField> {
-	fn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R {
-		let bits: u64 = self.0.bits();
-		bits.using_encoded(f)
-	}
-}
-impl<IdField: U64BitFlag> Decode for IdentityFields<IdField> {
-	fn decode<I: codec::Input>(input: &mut I) -> sp_std::result::Result<Self, codec::Error> {
-		let field = u64::decode(input)?;
-		Ok(Self(<BitFlags<IdField>>::from_bits(field).map_err(|_| "invalid value")?))
-	}
-}
-impl<IdField: Clone + Debug + Eq + PartialEq + TypeInfo + U64BitFlag> TypeInfo
-	for IdentityFields<IdField>
-{
-	type Identity = Self;
-
-	fn type_info() -> Type {
-		Type::builder()
-			.path(Path::new("BitFlags", module_path!()))
-			.type_params(vec![TypeParameter::new("T", Some(meta_type::<IdField>()))])
-			.composite(Fields::unnamed().field(|f| f.ty::<u64>().type_name("IdentityField")))
-	}
+	pub fields: IdField,
 }
 
 #[cfg(test)]
diff --git a/substrate/frame/identity/src/weights.rs b/substrate/frame/identity/src/weights.rs
index 02fcd7db3c95371ee32e050f37c2db7a3490063a..95898e6c6cdff0a18ace79b1311d82bb4109e89b 100644
--- a/substrate/frame/identity/src/weights.rs
+++ b/substrate/frame/identity/src/weights.rs
@@ -53,17 +53,17 @@ use core::marker::PhantomData;
 /// Weight functions needed for pallet_identity.
 pub trait WeightInfo {
 	fn add_registrar(r: u32, ) -> Weight;
-	fn set_identity(r: u32, x: u32, ) -> Weight;
+	fn set_identity(r: u32, ) -> Weight;
 	fn set_subs_new(s: u32, ) -> Weight;
 	fn set_subs_old(p: u32, ) -> Weight;
-	fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight;
-	fn request_judgement(r: u32, x: u32, ) -> Weight;
-	fn cancel_request(r: u32, x: u32, ) -> Weight;
+	fn clear_identity(r: u32, s: u32, ) -> Weight;
+	fn request_judgement(r: u32, ) -> Weight;
+	fn cancel_request(r: u32, ) -> Weight;
 	fn set_fee(r: u32, ) -> Weight;
 	fn set_account_id(r: u32, ) -> Weight;
 	fn set_fields(r: u32, ) -> Weight;
-	fn provide_judgement(r: u32, x: u32, ) -> Weight;
-	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight;
+	fn provide_judgement(r: u32, ) -> Weight;
+	fn kill_identity(r: u32, s: u32, ) -> Weight;
 	fn add_sub(s: u32, ) -> Weight;
 	fn rename_sub(s: u32, ) -> Weight;
 	fn remove_sub(s: u32, ) -> Weight;
@@ -90,8 +90,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn set_identity(r: u32, x: u32, ) -> Weight {
+	fn set_identity(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `442 + r * (5 ±0)`
 		//  Estimated: `11003`
@@ -99,8 +98,6 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		Weight::from_parts(31_329_634, 11003)
 			// Standard Error: 4_496
 			.saturating_add(Weight::from_parts(203_570, 0).saturating_mul(r.into()))
-			// Standard Error: 877
-			.saturating_add(Weight::from_parts(429_346, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -152,8 +149,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn clear_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -163,8 +159,6 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 			.saturating_add(Weight::from_parts(162_357, 0).saturating_mul(r.into()))
 			// Standard Error: 1_937
 			.saturating_add(Weight::from_parts(1_427_998, 0).saturating_mul(s.into()))
-			// Standard Error: 1_937
-			.saturating_add(Weight::from_parts(247_578, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
@@ -174,8 +168,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn request_judgement(r: u32, x: u32, ) -> Weight {
+	fn request_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `367 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -183,16 +176,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		Weight::from_parts(32_207_018, 11003)
 			// Standard Error: 5_247
 			.saturating_add(Weight::from_parts(249_156, 0).saturating_mul(r.into()))
-			// Standard Error: 1_023
-			.saturating_add(Weight::from_parts(458_329, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn cancel_request(r: u32, x: u32, ) -> Weight {
+	fn cancel_request(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `398 + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -200,8 +190,6 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		Weight::from_parts(31_967_170, 11003)
 			// Standard Error: 5_387
 			.saturating_add(Weight::from_parts(42_676, 0).saturating_mul(r.into()))
-			// Standard Error: 1_051
-			.saturating_add(Weight::from_parts(446_213, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -252,8 +240,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 19]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn provide_judgement(r: u32, x: u32, ) -> Weight {
+	fn provide_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `445 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -261,8 +248,6 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		Weight::from_parts(17_817_684, 11003)
 			// Standard Error: 8_612
 			.saturating_add(Weight::from_parts(406_251, 0).saturating_mul(r.into()))
-			// Standard Error: 1_593
-			.saturating_add(Weight::from_parts(755_225, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -276,8 +261,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn kill_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -287,8 +271,6 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 			.saturating_add(Weight::from_parts(145_285, 0).saturating_mul(r.into()))
 			// Standard Error: 2_472
 			.saturating_add(Weight::from_parts(1_421_039, 0).saturating_mul(s.into()))
-			// Standard Error: 2_472
-			.saturating_add(Weight::from_parts(240_907, 0).saturating_mul(x.into()))
 			.saturating_add(T::DbWeight::get().reads(3_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into())))
@@ -384,8 +366,7 @@ impl WeightInfo for () {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn set_identity(r: u32, x: u32, ) -> Weight {
+	fn set_identity(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `442 + r * (5 ±0)`
 		//  Estimated: `11003`
@@ -393,8 +374,6 @@ impl WeightInfo for () {
 		Weight::from_parts(31_329_634, 11003)
 			// Standard Error: 4_496
 			.saturating_add(Weight::from_parts(203_570, 0).saturating_mul(r.into()))
-			// Standard Error: 877
-			.saturating_add(Weight::from_parts(429_346, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -446,8 +425,7 @@ impl WeightInfo for () {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn clear_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn clear_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `469 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -457,8 +435,6 @@ impl WeightInfo for () {
 			.saturating_add(Weight::from_parts(162_357, 0).saturating_mul(r.into()))
 			// Standard Error: 1_937
 			.saturating_add(Weight::from_parts(1_427_998, 0).saturating_mul(s.into()))
-			// Standard Error: 1_937
-			.saturating_add(Weight::from_parts(247_578, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 			.saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into())))
@@ -468,8 +444,7 @@ impl WeightInfo for () {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn request_judgement(r: u32, x: u32, ) -> Weight {
+	fn request_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `367 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -477,16 +452,13 @@ impl WeightInfo for () {
 		Weight::from_parts(32_207_018, 11003)
 			// Standard Error: 5_247
 			.saturating_add(Weight::from_parts(249_156, 0).saturating_mul(r.into()))
-			// Standard Error: 1_023
-			.saturating_add(Weight::from_parts(458_329, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn cancel_request(r: u32, x: u32, ) -> Weight {
+	fn cancel_request(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `398 + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -494,8 +466,6 @@ impl WeightInfo for () {
 		Weight::from_parts(31_967_170, 11003)
 			// Standard Error: 5_387
 			.saturating_add(Weight::from_parts(42_676, 0).saturating_mul(r.into()))
-			// Standard Error: 1_051
-			.saturating_add(Weight::from_parts(446_213, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -546,8 +516,7 @@ impl WeightInfo for () {
 	/// Storage: Identity IdentityOf (r:1 w:1)
 	/// Proof: Identity IdentityOf (max_values: None, max_size: Some(7538), added: 10013, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 19]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn provide_judgement(r: u32, x: u32, ) -> Weight {
+	fn provide_judgement(r: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `445 + r * (57 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -555,8 +524,6 @@ impl WeightInfo for () {
 		Weight::from_parts(17_817_684, 11003)
 			// Standard Error: 8_612
 			.saturating_add(Weight::from_parts(406_251, 0).saturating_mul(r.into()))
-			// Standard Error: 1_593
-			.saturating_add(Weight::from_parts(755_225, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -570,8 +537,7 @@ impl WeightInfo for () {
 	/// Proof: Identity SuperOf (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen)
 	/// The range of component `r` is `[1, 20]`.
 	/// The range of component `s` is `[0, 100]`.
-	/// The range of component `x` is `[0, 100]`.
-	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight {
+	fn kill_identity(r: u32, s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `676 + r * (5 ±0) + s * (32 ±0) + x * (66 ±0)`
 		//  Estimated: `11003`
@@ -581,8 +547,6 @@ impl WeightInfo for () {
 			.saturating_add(Weight::from_parts(145_285, 0).saturating_mul(r.into()))
 			// Standard Error: 2_472
 			.saturating_add(Weight::from_parts(1_421_039, 0).saturating_mul(s.into()))
-			// Standard Error: 2_472
-			.saturating_add(Weight::from_parts(240_907, 0).saturating_mul(x.into()))
 			.saturating_add(RocksDbWeight::get().reads(3_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 			.saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(s.into())))