diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b53eb7df5bf8a8a4aa85ce177e161dd005362ca7..ce5414b958737f138f9549f2a2d2a031d5cf5200 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,6 +41,16 @@ check_labels:
   script:
     - ./scripts/check_labels.sh $CI_MERGE_REQUEST_LABELS $CI_MERGE_REQUEST_MILESTONE
 
+
+check_metadata:
+  extends: .env
+  stage: tests
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+    - when: never
+  script:
+    - ./scripts/check_metadata.sh
+
 .env:
   image: paritytech/ci-linux:production
   tags:
@@ -63,7 +73,7 @@ fmt_and_clippy:
     - cargo fmt -- --version
     - cargo fmt -- --check
     - cargo clippy -- -V
-    - cargo clippy --all --tests -- -D warnings
+    - cargo clippy --features runtime-benchmarks --all --tests -- -D warnings
 
 run_benchmarks:
   stage: tests
diff --git a/Cargo.lock b/Cargo.lock
index b66692b9c7ed568cfce67bc249cd46ebb591714a..1ba7482db1e852ba28b477d2f66c504bd15e5dfc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -985,9 +985,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.4.8"
+version = "4.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64"
+checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
 dependencies = [
  "clap_builder",
  "clap_derive 4.4.7",
@@ -995,9 +995,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.4.8"
+version = "4.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc"
+checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
 dependencies = [
  "anstream",
  "anstyle",
@@ -1011,7 +1011,7 @@ version = "4.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae"
 dependencies = [
- "clap 4.4.8",
+ "clap 4.4.11",
 ]
 
 [[package]]
@@ -1402,9 +1402,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f"
 dependencies = [
  "cfg-if 1.0.0",
 ]
@@ -1944,7 +1944,7 @@ name = "distance-oracle"
 version = "0.1.0"
 dependencies = [
  "bincode",
- "clap 4.4.8",
+ "clap 4.4.11",
  "dubp-wot",
  "flate2",
  "fnv",
@@ -1999,7 +1999,7 @@ version = "0.7.1"
 dependencies = [
  "async-io 1.13.0",
  "bs58 0.5.0",
- "clap 4.4.8",
+ "clap 4.4.11",
  "clap_complete",
  "common-runtime",
  "dc-distance",
@@ -2658,7 +2658,7 @@ dependencies = [
  "Inflector",
  "array-bytes",
  "chrono",
- "clap 4.4.8",
+ "clap 4.4.11",
  "comfy-table",
  "frame-benchmarking",
  "frame-support",
@@ -6939,9 +6939,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.69"
+version = "1.0.70"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
 dependencies = [
  "unicode-ident",
 ]
@@ -7827,7 +7827,7 @@ source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9
 dependencies = [
  "array-bytes",
  "chrono",
- "clap 4.4.8",
+ "clap 4.4.11",
  "fdlimit",
  "futures 0.3.29",
  "libp2p",
@@ -8645,7 +8645,7 @@ name = "sc-storage-monitor"
 version = "0.1.0"
 source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
 dependencies = [
- "clap 4.4.8",
+ "clap 4.4.11",
  "fs4",
  "futures 0.3.29",
  "log",
@@ -11018,7 +11018,7 @@ version = "0.10.0-dev"
 source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
 dependencies = [
  "async-trait",
- "clap 4.4.8",
+ "clap 4.4.11",
  "frame-remote-externalities",
  "hex",
  "log",
@@ -12327,7 +12327,7 @@ name = "xtask"
 version = "0.1.0"
 dependencies = [
  "anyhow",
- "clap 4.4.8",
+ "clap 4.4.11",
  "frame-metadata",
  "graphql_client",
  "hex",
diff --git a/node/src/command.rs b/node/src/command.rs
index 86b2e523366077acdac0b050fafb64d52340b69b..4008229eefaf488e1887f7e6d63b186b21a2c7f4 100644
--- a/node/src/command.rs
+++ b/node/src/command.rs
@@ -310,20 +310,20 @@ pub fn run() -> sc_cli::Result<()> {
             let chain_spec = &runner.config().chain_spec;
 
             match &**cmd {
-                BenchmarkCmd::Storage(cmd) => runner.sync_run(|mut config| {
-                    let (client, backend, _, _) = service::new_chain_ops(&mut config, false)?;
+                BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| {
+                    let (client, backend, _, _) = service::new_chain_ops(&config, false)?;
                     let db = backend.expose_db();
                     let storage = backend.expose_storage();
 
                     unwrap_client!(client, cmd.run(config, client.clone(), db, storage))
                 }),
-                BenchmarkCmd::Block(cmd) => runner.sync_run(|mut config| {
-                    let (client, _, _, _) = service::new_chain_ops(&mut config, false)?;
+                BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
+                    let (client, _, _, _) = service::new_chain_ops(&config, false)?;
 
                     unwrap_client!(client, cmd.run(client.clone()))
                 }),
-                BenchmarkCmd::Overhead(cmd) => runner.sync_run(|mut config| {
-                    let (client, _, _, _) = service::new_chain_ops(&mut config, false)?;
+                BenchmarkCmd::Overhead(cmd) => runner.sync_run(|config| {
+                    let (client, _, _, _) = service::new_chain_ops(&config, false)?;
                     let wrapped = client.clone();
 
                     let inherent_data = crate::service::client::benchmark_inherent_data()
diff --git a/pallets/authority-members/src/benchmarking.rs b/pallets/authority-members/src/benchmarking.rs
index 18e6472f8b096d07cf53282337aa67a3d5b482be..893d89ba867bb56f5d9f209536f2df6fccb428e4 100644
--- a/pallets/authority-members/src/benchmarking.rs
+++ b/pallets/authority-members/src/benchmarking.rs
@@ -59,12 +59,12 @@ benchmarks! {
         let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key;
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
             let validator_id = T::ValidatorIdOf::convert(caller.clone()).unwrap();
-            let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap().into();
+            let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap();
         }: _<T::RuntimeOrigin>(caller_origin, session_keys)
      remove_member {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
         let caller_origin = RawOrigin::Root.into();
-        }: _<T::RuntimeOrigin>(caller_origin, id.clone())
+        }: _<T::RuntimeOrigin>(caller_origin, id)
     verify {
         assert_has_event::<T>(Event::<T>::MemberRemoved{member: id}.into());
     }
diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs
index f265a95f7e1d06fa6edbb7c00f67a7a99c063290..4a4b61a8e812d97c676ae190d43aa5512a0ccfab 100644
--- a/pallets/certification/src/benchmarking.rs
+++ b/pallets/certification/src/benchmarking.rs
@@ -60,7 +60,7 @@ benchmarks_instance_pallet! {
         frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get());
     }: _<T::RuntimeOrigin>(caller_origin, issuer, receiver)
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::CertAdded{ issuer: issuer, receiver: receiver }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertAdded{ issuer, receiver }.into());
     }
     del_cert {
         let issuer: T::IdtyIndex = 1.into();
@@ -70,14 +70,14 @@ benchmarks_instance_pallet! {
         let issuer_cert: u32 = StorageIdtyCertMeta::<T, I>::get(issuer).issued_count;
     }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), issuer, receiver)
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer: issuer, receiver: receiver, expiration: false }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer,  receiver, expiration: false }.into());
     }
     remove_all_certs_received_by {
         let receiver: T::IdtyIndex = 0.into();
         let i in 2..1000 => add_certs::<T, I>(i, receiver)?;
     }: _<T::RuntimeOrigin>(RawOrigin::Root.into(),  receiver)
     verify {
-        assert!(CertsByReceiver::<T, I>::get(receiver).len() == 0 );
+        assert!(CertsByReceiver::<T, I>::get(receiver).is_empty() );
     }
     on_initialize {
         assert!(StorageCertsRemovableOn::<T, I>::try_get(T::BlockNumber::zero()).is_err());
@@ -94,7 +94,7 @@ benchmarks_instance_pallet! {
         frame_system::pallet::Pallet::<T>::set_block_number(block_number);
     }: {Pallet::<T, I>::do_remove_cert(issuer, receiver, Some(block_number));}
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer: issuer, receiver: receiver, expiration: true }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer,  receiver, expiration: true }.into());
     }
 
     impl_benchmark_test_suite!(
diff --git a/pallets/distance/src/benchmarking.rs b/pallets/distance/src/benchmarking.rs
index 9fbbd324274ef3d9eea757fee398d190bf909fbb..33ba9419b1f9aeb7b4837948bf47e1ce166742a0 100644
--- a/pallets/distance/src/benchmarking.rs
+++ b/pallets/distance/src/benchmarking.rs
@@ -37,7 +37,7 @@ fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> {
         for j in 0..i {
             current_pool
                 .evaluations
-                .try_push((j.into(), median::MedianAcc::new()))
+                .try_push((j, median::MedianAcc::new()))
                 .map_err(|_| Error::<T>::QueueFull)?;
         }
         Ok(())
@@ -57,7 +57,7 @@ benchmarks! {
             let _ = <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value());
     }: _<T::RuntimeOrigin>(caller_origin.clone())
     verify {
-        assert!(IdentityDistanceStatus::<T>::get(&idty) == Some((caller.clone(), DistanceStatus::Pending)), "Request not added");
+        assert!(IdentityDistanceStatus::<T>::get(idty) == Some((caller.clone(), DistanceStatus::Pending)), "Request not added");
         assert_has_event::<T>(Event::<T>::EvaluationRequested { idty_index: idty, who: caller }.into());
     }
     update_evaluation {
@@ -89,7 +89,7 @@ benchmarks! {
             let status = Some((caller.clone(), DistanceStatus::Valid));
     }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), idty, status.clone())
     verify {
-        assert!(IdentityDistanceStatus::<T>::get(&idty) == Some((caller, DistanceStatus::Valid)), "Status not set");
+        assert!(IdentityDistanceStatus::<T>::get(idty) == Some((caller, DistanceStatus::Valid)), "Status not set");
         assert_has_event::<T>(Event::<T>::EvaluationStatusForced { idty_index: idty, status }.into());
     }
     on_finalize {
diff --git a/pallets/distance/src/mock.rs b/pallets/distance/src/mock.rs
index 988c9b43ff3893da774cdc707856fd0953d59e2a..a05d58577b4ff3e72e8cfa9f150222e6518793cc 100644
--- a/pallets/distance/src/mock.rs
+++ b/pallets/distance/src/mock.rs
@@ -245,8 +245,6 @@ impl pallet_identity::Config for Test {
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 parameter_types! {
diff --git a/pallets/duniter-account/src/benchmarking.rs b/pallets/duniter-account/src/benchmarking.rs
index e0e300d0f6e57e5e09146cf76cbab56fe092d8cd..6c99b55323dd91dea63eb4bc124de7e6434ac4bc 100644
--- a/pallets/duniter-account/src/benchmarking.rs
+++ b/pallets/duniter-account/src/benchmarking.rs
@@ -40,8 +40,7 @@ fn create_pending_accounts<T: Config>(
             let existential_deposit = T::ExistentialDeposit::get();
             let balance = existential_deposit.saturating_mul((200u32).into());
             let _ = <pallet_balances::Pallet<T> as Currency<T::AccountId>>::make_free_balance_be(
-                &caller,
-                balance.into(),
+                &caller, balance,
             );
         } else {
             assert!(
diff --git a/pallets/duniter-account/src/lib.rs b/pallets/duniter-account/src/lib.rs
index 7244fd3d9bfde32e320bef9f0ed205f2ce58d9ee..7184febf0d30586df9c8f8d0bac1a74c9d95d43a 100644
--- a/pallets/duniter-account/src/lib.rs
+++ b/pallets/duniter-account/src/lib.rs
@@ -219,22 +219,18 @@ pub mod pallet {
 
         /// link account to identity
         pub fn do_link_identity(
-            account_id: T::AccountId,
+            account_id: &T::AccountId,
             idty_id: IdtyIdOf<T>,
         ) -> Result<(), DispatchError> {
             // Check that account exist
             ensure!(
-                (frame_system::Account::<T>::get(&account_id).providers >= 1)
-                    || (frame_system::Account::<T>::get(&account_id).sufficients >= 1),
+                (frame_system::Account::<T>::get(account_id).providers >= 1)
+                    || (frame_system::Account::<T>::get(account_id).sufficients >= 1),
                 pallet_identity::Error::<T>::AccountNotExist
             );
             // no-op if identity does not change
-            if frame_system::Account::<T>::get(&account_id)
-                .data
-                .linked_idty
-                != Some(idty_id)
-            {
-                frame_system::Account::<T>::mutate(&account_id, |account| {
+            if frame_system::Account::<T>::get(account_id).data.linked_idty != Some(idty_id) {
+                frame_system::Account::<T>::mutate(account_id, |account| {
                     account.data.linked_idty = Some(idty_id);
                     Self::deposit_event(Event::AccountLinked {
                         who: account_id.clone(),
@@ -335,7 +331,7 @@ impl<T> pallet_identity::traits::LinkIdty<T::AccountId, IdtyIdOf<T>> for Pallet<
 where
     T: Config,
 {
-    fn link_identity(account_id: T::AccountId, idty_id: IdtyIdOf<T>) -> Result<(), DispatchError> {
+    fn link_identity(account_id: &T::AccountId, idty_id: IdtyIdOf<T>) -> Result<(), DispatchError> {
         Self::do_link_identity(account_id, idty_id)
     }
 }
diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs
index 9420b482f4f48a76047750cfdd8d289f1677f83b..268a6bf01a9805254cdf1d0c70ee90cafc8a668a 100644
--- a/pallets/duniter-wot/src/mock.rs
+++ b/pallets/duniter-wot/src/mock.rs
@@ -138,8 +138,6 @@ impl pallet_identity::Config for Test {
     type OnIdtyChange = (DuniterWot, SmithSubWot);
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 // Membership
diff --git a/pallets/identity/src/benchmarking.rs b/pallets/identity/src/benchmarking.rs
index fb5950a66fe25045bff9789f760bb3c49bc8bdab..f7ba053f612ba4e3b905f34dbe2ddc2b3d1f445a 100644
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -61,7 +61,7 @@ fn create_one_identity<T: Config>(owner_key: T::AccountId) -> Result<Account<T>,
     Pallet::<T>::confirm_identity(owner_key_origin.clone(), name.clone())?;
     let idty_index = IdentityIndexOf::<T>::get(&owner_key).unwrap();
     // make identity member
-    <Identities<T>>::mutate_exists(T::IdtyIndex::from(idty_index), |idty_val_opt| {
+    <Identities<T>>::mutate_exists(idty_index, |idty_val_opt| {
         if let Some(ref mut idty_val) = idty_val_opt {
             idty_val.status = IdtyStatus::Member;
         }
@@ -133,7 +133,7 @@ benchmarks! {
     verify {
         let idty_index = IdentityIndexOf::<T>::get(&owner_key);
         assert!(idty_index.is_some(), "Identity not added");
-        assert_has_event::<T>(Event::<T>::IdtyCreated { idty_index: idty_index.unwrap(), owner_key: owner_key }.into());
+        assert_has_event::<T>(Event::<T>::IdtyCreated { idty_index: idty_index.unwrap(), owner_key }.into());
     }
 
     // confirm identity
@@ -146,7 +146,7 @@ benchmarks! {
     }: _<T::RuntimeOrigin>(owner_key_origin.clone(), IdtyName("new_identity".into()))
     verify {
         let idty_index = IdentityIndexOf::<T>::get(&owner_key);
-        assert_has_event::<T>(Event::<T>::IdtyConfirmed { idty_index: idty_index.unwrap(), owner_key: owner_key, name: IdtyName("new_identity".into()) }.into());
+        assert_has_event::<T>(Event::<T>::IdtyConfirmed { idty_index: idty_index.unwrap(), owner_key, name: IdtyName("new_identity".into()) }.into());
     }
 
     // change owner key
@@ -163,7 +163,7 @@ benchmarks! {
         };
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
-        let caller: T::AccountId = MultiSigner::Sr25519(caller_public.clone()).into_account().into();
+        let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
         let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
         Pallet::<T>::change_owner_key(account.origin.clone(), caller.clone(), signature)?;
 
@@ -178,7 +178,7 @@ benchmarks! {
         };
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
-        let caller: T::AccountId = MultiSigner::Sr25519(caller_public.clone()).into_account().into();
+        let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
         let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
         <frame_system::Pallet<T>>::set_block_number(<frame_system::Pallet<T>>::block_number() + T::ChangeOwnerKeyPeriod::get());
     }: _<T::RuntimeOrigin>(caller_origin.clone(), caller.clone(), signature)
@@ -202,18 +202,18 @@ benchmarks! {
         };
         let message = (NEW_OWNER_KEY_PAYLOAD_PREFIX, new_key_payload).encode();
         let caller_public = sr25519_generate(0.into(), None);
-        let caller: T::AccountId = MultiSigner::Sr25519(caller_public.clone()).into_account().into();
+        let caller: T::AccountId = MultiSigner::Sr25519(caller_public).into_account().into();
         let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
         Pallet::<T>::change_owner_key(account.origin.clone(), caller.clone(), signature)?;
 
         let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
         let revocation_payload = RevocationPayload {
             genesis_hash: &genesis_hash,
-            idty_index: account.index.clone(),
+            idty_index: account.index,
         };
         let message = (REVOCATION_PAYLOAD_PREFIX, revocation_payload).encode();
         let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
-    }: _<T::RuntimeOrigin>(account.origin.clone(), account.index.clone().into(), caller.clone(), signature)
+    }: _<T::RuntimeOrigin>(account.origin, account.index, caller.clone(), signature)
     verify {
         assert_has_event::<T>(Event::<T>::IdtyRevoked { idty_index: account.index, reason: RevocationReason::User }.into());
         // revocation does not mean deletion anymore
diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs
index c89d77aacbcb80a845a9a1f5e96f37f63ea3d867..c9656a498241438b2cb16196ae8398b6090f7359 100644
--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -125,9 +125,6 @@ pub mod pallet {
         type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
         /// Type representing the weight of this pallet
         type WeightInfo: WeightInfo;
-        /// Type representing the a distance handler to prepare identity for benchmarking
-        #[cfg(feature = "runtime-benchmarks")]
-        type BenchmarkSetupHandler: SetupBenchmark<Self::IdtyIndex, Self::AccountId>;
     }
 
     // GENESIS STUFFĂ‚ //
@@ -328,7 +325,7 @@ pub mod pallet {
                 idty_index,
                 owner_key: owner_key.clone(),
             });
-            T::AccountLinker::link_identity(owner_key.clone(), idty_index)?;
+            T::AccountLinker::link_identity(&owner_key, idty_index)?;
             T::OnIdtyChange::on_idty_change(
                 idty_index,
                 &IdtyEvent::Created {
@@ -455,7 +452,7 @@ pub mod pallet {
             frame_system::Pallet::<T>::inc_sufficients(&idty_value.owner_key);
             IdentityIndexOf::<T>::insert(&idty_value.owner_key, idty_index);
             Identities::<T>::insert(idty_index, idty_value);
-            T::AccountLinker::link_identity(new_key.clone(), idty_index)?;
+            T::AccountLinker::link_identity(&new_key, idty_index)?;
             Self::deposit_event(Event::IdtyChangedOwnerKey {
                 idty_index,
                 new_owner_key: new_key,
@@ -586,7 +583,7 @@ pub mod pallet {
                 Error::<T>::InvalidSignature
             );
             // apply
-            T::AccountLinker::link_identity(account_id, idty_index)?;
+            T::AccountLinker::link_identity(&account_id, idty_index)?;
 
             Ok(().into())
         }
diff --git a/pallets/identity/src/mock.rs b/pallets/identity/src/mock.rs
index 9421a70f03547f9b1f426658289cbf9f1b870025..59242164b589612193f65cec8430810727653b3c 100644
--- a/pallets/identity/src/mock.rs
+++ b/pallets/identity/src/mock.rs
@@ -118,8 +118,6 @@ impl pallet_identity::Config for Test {
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 // Build genesis storage according to the mock runtime.
diff --git a/pallets/identity/src/traits.rs b/pallets/identity/src/traits.rs
index ffc230aa7fdea7ab97547325a2952d23a924294b..925714813793a69a99b22438043e3cc92ab60a4c 100644
--- a/pallets/identity/src/traits.rs
+++ b/pallets/identity/src/traits.rs
@@ -53,23 +53,10 @@ impl<T: Config> OnIdtyChange<T> for Tuple {
 
 /// trait used to link an account to an identity
 pub trait LinkIdty<AccountId, IdtyIndex> {
-    fn link_identity(account_id: AccountId, idty_index: IdtyIndex) -> Result<(), DispatchError>;
+    fn link_identity(account_id: &AccountId, idty_index: IdtyIndex) -> Result<(), DispatchError>;
 }
 impl<AccountId, IdtyIndex> LinkIdty<AccountId, IdtyIndex> for () {
-    fn link_identity(_: AccountId, _: IdtyIndex) -> Result<(), DispatchError> {
+    fn link_identity(_: &AccountId, _: IdtyIndex) -> Result<(), DispatchError> {
         Ok(())
     }
 }
-
-/// trait used only in benchmarks to prepare identity for benchmarking
-#[cfg(feature = "runtime-benchmarks")]
-pub trait SetupBenchmark<IndtyIndex, AccountId> {
-    fn force_status_ok(idty_index: &IndtyIndex, account: &AccountId) -> ();
-    fn add_cert(issuer: &IndtyIndex, receiver: &IndtyIndex) -> ();
-}
-
-#[cfg(feature = "runtime-benchmarks")]
-impl<IdtyIndex, AccountId> SetupBenchmark<IdtyIndex, AccountId> for () {
-    fn force_status_ok(_idty_id: &IdtyIndex, _account: &AccountId) -> () {}
-    fn add_cert(_issuer: &IdtyIndex, _receiver: &IdtyIndex) -> () {}
-}
diff --git a/pallets/membership/src/benchmarking.rs b/pallets/membership/src/benchmarking.rs
index 48849bd51e2adee83a09740d3ed6143478cfdd9d..531bd3e13f8b4815a4df65d12f4be83864d3cee4 100644
--- a/pallets/membership/src/benchmarking.rs
+++ b/pallets/membership/src/benchmarking.rs
@@ -42,7 +42,7 @@ benchmarks_instance_pallet! {
     claim_membership {
         let idty: T::IdtyId = 3.into();
         Membership::<T, I>::take(idty);
-        let caller: T::AccountId = T::AccountIdOf::convert(idty.clone()).unwrap();
+        let caller: T::AccountId = T::AccountIdOf::convert(idty).unwrap();
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
         T::BenchmarkSetupHandler::force_status_ok(&idty, &caller);
     }: _<T::RuntimeOrigin>(caller_origin)
@@ -53,7 +53,7 @@ benchmarks_instance_pallet! {
     // renew membership
     renew_membership {
         let idty: T::IdtyId = 3.into();
-        let caller: T::AccountId = T::AccountIdOf::convert(idty.clone()).unwrap();
+        let caller: T::AccountId = T::AccountIdOf::convert(idty).unwrap();
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
         T::BenchmarkSetupHandler::force_status_ok(&idty, &caller);
     }: _<T::RuntimeOrigin>(caller_origin)
@@ -64,7 +64,7 @@ benchmarks_instance_pallet! {
     // revoke membership
     revoke_membership {
         let idty: T::IdtyId = 3.into();
-        let caller: T::AccountId = T::AccountIdOf::convert(idty.clone()).unwrap();
+        let caller: T::AccountId = T::AccountIdOf::convert(idty).unwrap();
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
@@ -87,7 +87,7 @@ benchmarks_instance_pallet! {
         assert_eq!(MembershipsExpireOn::<T, I>::get(BlockNumberFor::<T>::zero()).len(), i as usize);
     }: {Pallet::<T, I>::expire_memberships(BlockNumberFor::<T>::zero());}
     verify {
-        assert_eq!(MembershipsExpireOn::<T, I>::get(BlockNumberFor::<T>::zero()).len(), 0 as usize);
+        assert_eq!(MembershipsExpireOn::<T, I>::get(BlockNumberFor::<T>::zero()).len(), 0_usize);
     }
 
     impl_benchmark_test_suite!(
diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs
index 4f44e11dce4bdee1559422732cf30d2309c47f37..284a03244170fa20dc4029b9b1112d843aceca89 100644
--- a/pallets/membership/src/lib.rs
+++ b/pallets/membership/src/lib.rs
@@ -44,14 +44,14 @@ use std::collections::BTreeMap;
 
 #[cfg(feature = "runtime-benchmarks")]
 pub trait SetupBenchmark<IdtyId, AccountId> {
-    fn force_status_ok(idty_index: &IdtyId, account: &AccountId) -> ();
-    fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId) -> ();
+    fn force_status_ok(idty_index: &IdtyId, account: &AccountId);
+    fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId);
 }
 
 #[cfg(feature = "runtime-benchmarks")]
 impl<IdtyId, AccountId> SetupBenchmark<IdtyId, AccountId> for () {
-    fn force_status_ok(_idty_id: &IdtyId, _account: &AccountId) -> () {}
-    fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId) -> () {}
+    fn force_status_ok(_idty_id: &IdtyId, _account: &AccountId) {}
+    fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId) {}
 }
 
 #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)]
diff --git a/pallets/provide-randomness/src/benchmarking.rs b/pallets/provide-randomness/src/benchmarking.rs
index 4562461eef743de897ebec43ee2dcd682b2ec2cf..cbbf0f685865f8549c85e87573ea2fbcb528a984 100644
--- a/pallets/provide-randomness/src/benchmarking.rs
+++ b/pallets/provide-randomness/src/benchmarking.rs
@@ -80,11 +80,11 @@ benchmarks! {
         // Set randomness parameters
         let random = RandomnessType::RandomnessFromOneEpochAgo;
         let salt: H256 = H256([1; 32]);
-    }: _<T::RuntimeOrigin>(caller_origin.clone(), random, salt.clone())
+    }: _<T::RuntimeOrigin>(caller_origin.clone(), random, salt)
     verify {
         let request_id = RequestIdProvider::<T>::get() - 1;
         assert_has_event::<T>(Event::RequestedRandomness {
-              request_id: request_id, salt: salt, r#type: random }.into() );
+              request_id, salt, r#type: random }.into() );
     }
     on_initialize {
         let i in 1 .. T::MaxRequests::get() => add_requests_next_block::<T>(i)?;
@@ -97,11 +97,11 @@ benchmarks! {
     }: { Pallet::<T>::on_initialize(T::BlockNumber::one()); }
     verify {
         ensure!(RequestsIds::<T>::count() == 0, "List not processed.");
-        ensure!(RequestsReadyAtNextBlock::<T>::get().len() == 0, "List not processed.");
+        ensure!(RequestsReadyAtNextBlock::<T>::get().is_empty(), "List not processed.");
     }
     on_initialize_epoch {
         let i in 1 .. T::MaxRequests::get() => add_requests_next_epoch::<T>(i)?;
-        ensure!(RequestsReadyAtNextBlock::<T>::get().len() == 0, "List not filled properly.");
+        ensure!(RequestsReadyAtNextBlock::<T>::get().is_empty(), "List not filled properly.");
         ensure!(RequestsIds::<T>::count() == i, "List not filled properly.");
         ensure!(RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).len() == i as usize, "List not filled properly.");
         let next_epoch_hook_in = NexEpochHookIn::<T>::mutate(|next_in| {
@@ -110,6 +110,6 @@ benchmarks! {
     }: { Pallet::<T>::on_initialize(1.into()); }
     verify {
         ensure!(RequestsIds::<T>::count() == 0, "List not processed.");
-        ensure!(RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).len() == 0, "List not processed properly.");
+        ensure!(RequestsReadyAtEpoch::<T>::get(T::GetCurrentEpochIndex::get()).is_empty(), "List not processed properly.");
     }
 }
diff --git a/pallets/quota/src/benchmarking.rs b/pallets/quota/src/benchmarking.rs
index 4519eea02f754bef4fff507b183148cc825ecb20..124f2e66f9bfc34147409789aa7207703bfa2051 100644
--- a/pallets/quota/src/benchmarking.rs
+++ b/pallets/quota/src/benchmarking.rs
@@ -63,7 +63,7 @@ benchmarks! {
                 amount: quota_amount.into(),
             },
         );
-    }: { Pallet::<T>::spend_quota(idty_id.into(), amount.into()) }
+    }: { Pallet::<T>::spend_quota(idty_id, amount.into()) }
     verify {
         let quota_growth = sp_runtime::Perbill::from_rational(
             T::BlockNumber::one(),
diff --git a/pallets/quota/src/mock.rs b/pallets/quota/src/mock.rs
index d023eebeefd5907e62481cf589bab26a531f8cc4..06548263bd8b14e02e5fefcef2101ae8a915a1a5 100644
--- a/pallets/quota/src/mock.rs
+++ b/pallets/quota/src/mock.rs
@@ -164,8 +164,6 @@ impl pallet_identity::Config for Test {
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 // Build genesis storage according to the mock runtime.
diff --git a/resources/metadata.scale b/resources/metadata.scale
index 60cf370fe64aecd0dc9bbdd157c56e90b5653228..919f543f21a57970a0b67040b2ff16e6d54034ec 100644
Binary files a/resources/metadata.scale and b/resources/metadata.scale differ
diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index 0e27e3b04375a40448a910f3fa011688e219a390..6efcf29e34f3f6776447aa847acf8d3e51d6c0d4 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -481,8 +481,6 @@ macro_rules! pallets_config {
             type OnIdtyChange = (Wot, SmithSubWot, Quota);
             type RuntimeEvent = RuntimeEvent;
             type WeightInfo = common_runtime::weights::pallet_identity::WeightInfo<Runtime>;
-            #[cfg(feature = "runtime-benchmarks")]
-            type BenchmarkSetupHandler = common_runtime::providers::BenchmarkSetupHandler<Runtime>;
         }
 
         impl pallet_membership::Config<frame_support::instances::Instance1> for Runtime {
diff --git a/runtime/common/src/providers.rs b/runtime/common/src/providers.rs
index e950bf47b6b4b42ecc6dde310221066a7e665bd3..1518c1060e265e01dd49ba6a02e1b1418405a93a 100644
--- a/runtime/common/src/providers.rs
+++ b/runtime/common/src/providers.rs
@@ -123,5 +123,3 @@ macro_rules! impl_benchmark_setup_handler {
 
 #[cfg(feature = "runtime-benchmarks")]
 impl_benchmark_setup_handler!(pallet_membership::SetupBenchmark<<T as pallet_identity::Config>::IdtyIndex, T::AccountId>);
-#[cfg(feature = "runtime-benchmarks")]
-impl_benchmark_setup_handler!(pallet_identity::traits::SetupBenchmark<<T as pallet_identity::Config>::IdtyIndex, T::AccountId>);
diff --git a/scripts/check_metadata.sh b/scripts/check_metadata.sh
new file mode 100755
index 0000000000000000000000000000000000000000..96b2c47209a8bdb75c96a993004a6a787a90afd9
--- /dev/null
+++ b/scripts/check_metadata.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+cargo install subxt-cli
+cargo build
+cargo run -- --dev&
+sleep 15
+subxt metadata -f bytes > resources/new_metadata.scale
+kill $!
+
+if cmp -s resources/new_metadata.scale resources/metadata.scale; then
+    exit 0
+else
+    echo "Metadata file needs to be generated. How to do it? $HOME/.cargo/bin/subxt metadata -f bytes > resources/metadata.scale"
+    exit 1
+fi