diff --git a/pallets/membership/src/benchmarking.rs b/pallets/membership/src/benchmarking.rs
index 11c95849efa4196bd17807b37e3fd6c377b68ae7..9573d5354cb62a15222d51d59cdea587528df244 100644
--- a/pallets/membership/src/benchmarking.rs
+++ b/pallets/membership/src/benchmarking.rs
@@ -20,6 +20,7 @@ use super::*;
 
 use frame_benchmarking::benchmarks_instance_pallet;
 use frame_support::dispatch::UnfilteredDispatchable;
+use frame_system::pallet_prelude::BlockNumberFor;
 use frame_system::RawOrigin;
 use sp_runtime::traits::Convert;
 
@@ -83,6 +84,9 @@ benchmarks_instance_pallet! {
     verify {
         assert_has_event::<T, I>(Event::<T, I>::MembershipRevoked(idty).into());
     }
+    // Base weight of an empty initialize
+    on_initialize {
+    }: {Pallet::<T, I>::on_initialize(BlockNumberFor::<T>::zero());}
 
     impl_benchmark_test_suite!(
         Pallet,
diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs
index 3855bf927d51cfb435f7bc9f6de0f0c6cc4a8bc4..3513a6e6608e93d9d5e48a5a517e79dfc010af90 100644
--- a/pallets/membership/src/lib.rs
+++ b/pallets/membership/src/lib.rs
@@ -199,9 +199,11 @@ pub mod pallet {
     impl<T: Config<I>, I: 'static> Hooks<BlockNumberFor<T>> for Pallet<T, I> {
         fn on_initialize(n: T::BlockNumber) -> Weight {
             if n > T::BlockNumber::zero() {
-                Self::expire_pending_memberships(n) + Self::expire_memberships(n)
+                Self::expire_pending_memberships(n)
+                    .saturating_add(Self::expire_memberships(n))
+                    .saturating_add(T::WeightInfo::on_initialize())
             } else {
-                Weight::zero()
+                T::WeightInfo::on_initialize()
             }
         }
     }
@@ -224,11 +226,11 @@ pub mod pallet {
             Self::do_request_membership(idty_id)
         }
 
-        /// claim membership  
-        /// a pending membership should exist  
-        /// it must fullfill the requirements (certs, distance)  
-        /// for main wot claim_membership is called automatically when validating identity  
-        /// for smith wot, it means joining the authority members  
+        /// claim membership
+        /// a pending membership should exist
+        /// it must fullfill the requirements (certs, distance)
+        /// for main wot claim_membership is called automatically when validating identity
+        /// for smith wot, it means joining the authority members
         #[pallet::call_index(1)]
         #[pallet::weight(T::WeightInfo::claim_membership())]
         pub fn claim_membership(origin: OriginFor<T>) -> DispatchResultWithPostInfo {
diff --git a/pallets/membership/src/weights.rs b/pallets/membership/src/weights.rs
index 4012544a7df34b2e460e1ff05917efe697d68ae1..fd6cfb36e541b9d680a6aeddbec48b43231668d4 100644
--- a/pallets/membership/src/weights.rs
+++ b/pallets/membership/src/weights.rs
@@ -24,6 +24,7 @@ pub trait WeightInfo {
     fn claim_membership() -> Weight;
     fn renew_membership() -> Weight;
     fn revoke_membership() -> Weight;
+    fn on_initialize() -> Weight;
 }
 
 // Insecure weights implementation, use it for tests only!
@@ -70,4 +71,10 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(5 as u64))
             .saturating_add(RocksDbWeight::get().writes(2 as u64))
     }
+    fn on_initialize() -> Weight {
+        // Minimum execution time: 109_486 nanoseconds.
+        Weight::from_parts(113_303_000 as u64, 0)
+            .saturating_add(RocksDbWeight::get().reads(5 as u64))
+            .saturating_add(RocksDbWeight::get().writes(2 as u64))
+    }
 }
diff --git a/runtime/common/src/weights/pallet_membership_membership.rs b/runtime/common/src/weights/pallet_membership_membership.rs
index 93478265a6bcf2841cb9dbe2c154eb7be5b76f5c..050996ad9c2187c00087d95fcabd556378fe60c5 100644
--- a/runtime/common/src/weights/pallet_membership_membership.rs
+++ b/runtime/common/src/weights/pallet_membership_membership.rs
@@ -1,41 +1,28 @@
-// Copyright 2021-2022 Axiom-Team
-//
-// This file is part of Duniter-v2S.
-//
-// Duniter-v2S is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, version 3 of the License.
-//
-// Duniter-v2S is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 //! Autogenerated weights for `pallet_membership`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-06-08, STEPS: `5`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2023-11-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `benjamin-xps139380`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("gdev-benchmark"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// target/release/duniter
+// ./target/release/duniter
 // benchmark
 // pallet
-// --chain=gdev-benchmark
-// --steps=5
-// --repeat=2
-// --pallet=*
-// --extrinsic=*
-// --execution=wasm
+// --chain
+// dev
 // --wasm-execution=compiled
-// --heap-pages=4096
-// --header=./file_header.txt
-// --output=./runtime/common/src/weights/
+// --pallet
+// pallet-membership
+// --extrinsic
+// *
+// --steps
+// 50
+// --repeat
+// 20
+// --output=runtime/common/src/weights/
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -54,11 +41,11 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
 	fn request_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `365`
-		//  Estimated: `3830`
-		// Minimum execution time: 39_742_000 picoseconds.
-		Weight::from_parts(51_466_000, 0)
-			.saturating_add(Weight::from_parts(0, 3830))
+		//  Measured:  `429`
+		//  Estimated: `3894`
+		// Minimum execution time: 6_733_000 picoseconds.
+		Weight::from_parts(9_726_000, 0)
+			.saturating_add(Weight::from_parts(0, 3894))
 			.saturating_add(T::DbWeight::get().reads(2))
 	}
 	/// Storage: Identity IdentityIndexOf (r:1 w:0)
@@ -69,6 +56,8 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Cert StorageIdtyCertMeta (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Parameters ParametersStorage (r:1 w:0)
 	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: Distance IdentityDistanceStatus (r:1 w:0)
+	/// Proof Skipped: Distance IdentityDistanceStatus (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Membership Membership (r:1 w:1)
 	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Membership CounterForMembership (r:1 w:1)
@@ -81,12 +70,12 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
 	fn claim_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `982`
-		//  Estimated: `4447`
-		// Minimum execution time: 156_273_000 picoseconds.
-		Weight::from_parts(169_724_000, 0)
-			.saturating_add(Weight::from_parts(0, 4447))
-			.saturating_add(T::DbWeight::get().reads(9))
+		//  Measured:  `1302`
+		//  Estimated: `4767`
+		// Minimum execution time: 30_591_000 picoseconds.
+		Weight::from_parts(32_861_000, 0)
+			.saturating_add(Weight::from_parts(0, 4767))
+			.saturating_add(T::DbWeight::get().reads(10))
 			.saturating_add(T::DbWeight::get().writes(5))
 	}
 	/// Storage: Identity IdentityIndexOf (r:1 w:0)
@@ -95,18 +84,20 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Identity Identities (r:1 w:0)
 	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
+	/// Storage: Distance IdentityDistanceStatus (r:1 w:0)
+	/// Proof Skipped: Distance IdentityDistanceStatus (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Membership MembershipsExpireOn (r:2 w:2)
 	/// Proof Skipped: Membership MembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Parameters ParametersStorage (r:1 w:0)
 	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
 	fn renew_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `646`
-		//  Estimated: `6586`
-		// Minimum execution time: 110_180_000 picoseconds.
-		Weight::from_parts(126_218_000, 0)
-			.saturating_add(Weight::from_parts(0, 6586))
-			.saturating_add(T::DbWeight::get().reads(6))
+		//  Measured:  `988`
+		//  Estimated: `6928`
+		// Minimum execution time: 21_215_000 picoseconds.
+		Weight::from_parts(22_473_000, 0)
+			.saturating_add(Weight::from_parts(0, 6928))
+			.saturating_add(T::DbWeight::get().reads(7))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
 	/// Storage: Identity IdentityIndexOf (r:1 w:0)
@@ -123,12 +114,20 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
 	fn revoke_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `639`
-		//  Estimated: `4104`
-		// Minimum execution time: 102_688_000 picoseconds.
-		Weight::from_parts(129_033_000, 0)
-			.saturating_add(Weight::from_parts(0, 4104))
+		//  Measured:  `703`
+		//  Estimated: `4168`
+		// Minimum execution time: 16_543_000 picoseconds.
+		Weight::from_parts(17_758_000, 0)
+			.saturating_add(Weight::from_parts(0, 4168))
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
+	fn on_initialize() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 27_000 picoseconds.
+		Weight::from_parts(30_000, 0)
+			.saturating_add(Weight::from_parts(0, 0))
+	}
 }
diff --git a/runtime/common/src/weights/pallet_membership_smith_membership.rs b/runtime/common/src/weights/pallet_membership_smith_membership.rs
index 3d842ee7ae84d714d61a648bee3e2abcb851e31c..74648b15e00a957fd245dd6444137e263eba1c3c 100644
--- a/runtime/common/src/weights/pallet_membership_smith_membership.rs
+++ b/runtime/common/src/weights/pallet_membership_smith_membership.rs
@@ -1,41 +1,28 @@
-// Copyright 2021-2022 Axiom-Team
-//
-// This file is part of Duniter-v2S.
-//
-// Duniter-v2S is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, version 3 of the License.
-//
-// Duniter-v2S is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 //! Autogenerated weights for `pallet_membership`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-06-08, STEPS: `5`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2023-11-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `benjamin-xps139380`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("gdev-benchmark"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
-// target/release/duniter
+// ./target/release/duniter
 // benchmark
 // pallet
-// --chain=gdev-benchmark
-// --steps=5
-// --repeat=2
-// --pallet=*
-// --extrinsic=*
-// --execution=wasm
+// --chain
+// dev
 // --wasm-execution=compiled
-// --heap-pages=4096
-// --header=./file_header.txt
-// --output=./runtime/common/src/weights/
+// --pallet
+// pallet-membership
+// --extrinsic
+// *
+// --steps
+// 50
+// --repeat
+// 20
+// --output=runtime/common/src/weights/
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -52,16 +39,25 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Identity Identities (r:1 w:0)
 	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
+	/// Storage: SmithMembership PendingMembership (r:1 w:1)
+	/// Proof Skipped: SmithMembership PendingMembership (max_values: None, max_size: None, mode: Measured)
+	/// Storage: SmithMembership Membership (r:1 w:0)
+	/// Proof Skipped: SmithMembership Membership (max_values: None, max_size: None, mode: Measured)
+	/// Storage: Parameters ParametersStorage (r:1 w:0)
+	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: SmithMembership PendingMembershipsExpireOn (r:1 w:1)
+	/// Proof Skipped: SmithMembership PendingMembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
 	fn request_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `365`
-		//  Estimated: `3830`
-		// Minimum execution time: 40_411_000 picoseconds.
-		Weight::from_parts(42_517_000, 0)
-			.saturating_add(Weight::from_parts(0, 3830))
-			.saturating_add(T::DbWeight::get().reads(2))
+		//  Measured:  `706`
+		//  Estimated: `4171`
+		// Minimum execution time: 15_687_000 picoseconds.
+		Weight::from_parts(24_412_000, 0)
+			.saturating_add(Weight::from_parts(0, 4171))
+			.saturating_add(T::DbWeight::get().reads(6))
+			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Identity IdentityIndexOf (r:2 w:0)
+	/// Storage: Identity IdentityIndexOf (r:1 w:0)
 	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
 	/// Storage: SmithMembership PendingMembership (r:1 w:1)
 	/// Proof Skipped: SmithMembership PendingMembership (max_values: None, max_size: None, mode: Measured)
@@ -69,7 +65,7 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: SmithCert StorageIdtyCertMeta (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Parameters ParametersStorage (r:1 w:0)
 	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: SmithMembership Membership (r:2 w:1)
+	/// Storage: SmithMembership Membership (r:1 w:1)
 	/// Proof Skipped: SmithMembership Membership (max_values: None, max_size: None, mode: Measured)
 	/// Storage: SmithMembership CounterForMembership (r:1 w:1)
 	/// Proof: SmithMembership CounterForMembership (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
@@ -77,12 +73,12 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: SmithMembership MembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
 	fn claim_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `827`
-		//  Estimated: `6767`
-		// Minimum execution time: 142_215_000 picoseconds.
-		Weight::from_parts(152_753_000, 0)
-			.saturating_add(Weight::from_parts(0, 6767))
-			.saturating_add(T::DbWeight::get().reads(9))
+		//  Measured:  `734`
+		//  Estimated: `4199`
+		// Minimum execution time: 19_737_000 picoseconds.
+		Weight::from_parts(20_570_000, 0)
+			.saturating_add(Weight::from_parts(0, 4199))
+			.saturating_add(T::DbWeight::get().reads(7))
 			.saturating_add(T::DbWeight::get().writes(4))
 	}
 	/// Storage: Identity IdentityIndexOf (r:1 w:0)
@@ -97,11 +93,11 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
 	fn renew_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `645`
-		//  Estimated: `6585`
-		// Minimum execution time: 110_054_000 picoseconds.
-		Weight::from_parts(112_760_000, 0)
-			.saturating_add(Weight::from_parts(0, 6585))
+		//  Measured:  `717`
+		//  Estimated: `6657`
+		// Minimum execution time: 17_014_000 picoseconds.
+		Weight::from_parts(18_201_000, 0)
+			.saturating_add(Weight::from_parts(0, 6657))
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
@@ -124,17 +120,25 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 	/// Storage: Session NextKeys (r:1 w:1)
 	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
 	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen)
+	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
 	/// Storage: Session KeyOwner (r:0 w:4)
 	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
 	fn revoke_membership() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1164`
-		//  Estimated: `4629`
-		// Minimum execution time: 224_136_000 picoseconds.
-		Weight::from_parts(238_140_000, 0)
-			.saturating_add(Weight::from_parts(0, 4629))
+		//  Measured:  `1183`
+		//  Estimated: `4648`
+		// Minimum execution time: 35_851_000 picoseconds.
+		Weight::from_parts(38_916_000, 0)
+			.saturating_add(Weight::from_parts(0, 4648))
 			.saturating_add(T::DbWeight::get().reads(10))
 			.saturating_add(T::DbWeight::get().writes(13))
 	}
+	fn on_initialize() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 27_000 picoseconds.
+		Weight::from_parts(30_000, 0)
+			.saturating_add(Weight::from_parts(0, 0))
+	}
 }