diff --git a/pallets/duniter-wot/src/lib.rs b/pallets/duniter-wot/src/lib.rs
index ed1c4fcff06d48093295c82b0a1e148e3dd1248a..bdede1716423f9b0e86607597760072abafb37ba 100644
--- a/pallets/duniter-wot/src/lib.rs
+++ b/pallets/duniter-wot/src/lib.rs
@@ -326,7 +326,7 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::OnEvent<IdtyIndex> for Pal
 where
     T: pallet_membership::Config<I>,
 {
-    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight {
+    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) {
         match membership_event {
             sp_membership::Event::<IdtyIndex>::MembershipAcquired(idty_index) => {
                 if !T::IsSubWot::get() {
@@ -355,9 +355,6 @@ where
                 });
             }
         }
-        // The weight accounting is performed where the handler is called.
-        // See in pallet-membership.
-        Weight::zero()
     }
 }
 
diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs
index 606a4fc17e618db6ca8c3cd06d5f517a5ed3a8bc..0ab81a819a939adee9ba7bce43d444f916f0f276 100644
--- a/pallets/membership/src/lib.rs
+++ b/pallets/membership/src/lib.rs
@@ -377,14 +377,14 @@ pub mod pallet {
 
         /// perform membership expiration
         // add pending membership and schedule expiry of pending membership
-        fn do_expire_membership(idty_id: T::IdtyId, expire_on: T::BlockNumber) -> Weight {
+        fn do_expire_membership(idty_id: T::IdtyId, expire_on: T::BlockNumber) {
             if Membership::<T, I>::take(idty_id).is_some() {
                 PendingMembership::<T, I>::insert(idty_id, ());
                 PendingMembershipsExpireOn::<T, I>::append(expire_on, idty_id);
             } // else should not happen
 
             Self::deposit_event(Event::MembershipExpired(idty_id));
-            T::OnEvent::on_event(&sp_membership::Event::MembershipExpired(idty_id))
+            T::OnEvent::on_event(&sp_membership::Event::MembershipExpired(idty_id));
         }
 
         /// check the origin and get identity id if valid
diff --git a/primitives/membership/src/traits.rs b/primitives/membership/src/traits.rs
index 2b68516ca4af8d6d0700f3b2c36ceec038ed3764..28d0c52de235d2da970386928d5f6389a95cf58c 100644
--- a/primitives/membership/src/traits.rs
+++ b/primitives/membership/src/traits.rs
@@ -39,13 +39,11 @@ pub trait IsInPendingMemberships<IdtyId> {
 }
 
 pub trait OnEvent<IdtyId> {
-    fn on_event(event: &crate::Event<IdtyId>) -> Weight;
+    fn on_event(event: &crate::Event<IdtyId>);
 }
 
 impl<IdtyId> OnEvent<IdtyId> for () {
-    fn on_event(_: &crate::Event<IdtyId>) -> Weight {
-        Weight::zero()
-    }
+    fn on_event(_: &crate::Event<IdtyId>) {}
 }
 
 pub trait MembersCount {
diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs
index d59ff5da5e929c19f79493a870141aeadcc5a040..a6eecb1c2f694248fc501d0e3c224d1281dc82d2 100644
--- a/runtime/common/src/handlers.rs
+++ b/runtime/common/src/handlers.rs
@@ -19,7 +19,6 @@ use super::{AccountId, IdtyIndex};
 use frame_support::dispatch::UnfilteredDispatchable;
 use frame_support::instances::{Instance1, Instance2};
 use frame_support::pallet_prelude::Weight;
-use frame_support::traits::Get;
 use frame_support::Parameter;
 use pallet_identity::IdtyEvent;
 use sp_runtime::traits::IsMember;
@@ -77,7 +76,7 @@ impl<
             + pallet_universal_dividend::Config,
     > sp_membership::traits::OnEvent<IdtyIndex> for OnMembershipEventHandler<Inner, Runtime>
 {
-    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight {
+    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) {
         (match membership_event {
             // when membership is removed, call on_removed_member handler which auto claims UD
             sp_membership::Event::MembershipRevoked(idty_index)
@@ -87,12 +86,8 @@ impl<
                         pallet_universal_dividend::Pallet::<Runtime>::on_removed_member(
                             first_ud_index,
                             &idty_value.owner_key,
-                        )
-                    } else {
-                        Runtime::DbWeight::get().reads(1)
+                        );
                     }
-                } else {
-                    Runtime::DbWeight::get().reads(1)
                 }
             }
             // when main membership is acquired, it starts getting right to UD
@@ -103,16 +98,16 @@ impl<
                             first_eligible_ud:
                                 pallet_universal_dividend::Pallet::<Runtime>::init_first_eligible_ud(
                                 ),
-                        }
+                        };
                     }
                 });
-                Weight::zero()
             }
             // in other case, ther is nothing to do
             sp_membership::Event::MembershipRenewed(_)
             | sp_membership::Event::MembershipRequested(_)
-            | sp_membership::Event::PendingMembershipExpired(_) => Weight::zero(),
-        }) + Inner::on_event(membership_event)
+            | sp_membership::Event::PendingMembershipExpired(_) => (),
+        });
+        Inner::on_event(membership_event)
     }
 }
 
@@ -129,12 +124,11 @@ impl<
             + pallet_membership::Config<Instance2>,
     > sp_membership::traits::OnEvent<IdtyIndex> for OnSmithMembershipEventHandler<Inner, Runtime>
 {
-    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight {
+    fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) {
         (match membership_event {
             sp_membership::Event::MembershipAcquired(_idty_index) => {
                 // nothing when smith membership acquired
                 // user will have to claim authority membership
-                Weight::zero()
             }
             sp_membership::Event::MembershipRevoked(idty_index) => {
                 let call = pallet_authority_members::Call::<Runtime>::remove_member {
@@ -147,10 +141,10 @@ impl<
                         println!("faid to remove member: {:?}", e)
                     }
                 }
-                Weight::zero()
             }
-            _ => Weight::zero(),
-        }) + Inner::on_event(membership_event)
+            _ => (),
+        });
+        Inner::on_event(membership_event)
     }
 }
 
diff --git a/runtime/common/src/weights/pallet_quota.rs b/runtime/common/src/weights/pallet_quota.rs
index 34cd1d25e969d82c227c8b1e4f42ae419731e393..f71b0ecc3aa6287afd9edeb719e419bc61b776f3 100644
--- a/runtime/common/src/weights/pallet_quota.rs
+++ b/runtime/common/src/weights/pallet_quota.rs
@@ -2,7 +2,7 @@
 //! Autogenerated weights for `pallet_quota`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-11-22, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2023-11-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
 //! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
@@ -15,7 +15,7 @@
 // dev
 // --wasm-execution=compiled
 // --pallet
-// *
+// pallet-quota
 // --extrinsic
 // *
 // --steps
@@ -39,10 +39,10 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: MaxEncodedLen)
 	fn queue_refund() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `43`
+		//  Measured:  `11288`
 		//  Estimated: `12751`
-		// Minimum execution time: 1_494_000 picoseconds.
-		Weight::from_parts(1_598_000, 0)
+		// Minimum execution time: 7_606_000 picoseconds.
+		Weight::from_parts(7_918_000, 0)
 			.saturating_add(Weight::from_parts(0, 12751))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
@@ -53,30 +53,70 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `139`
 		//  Estimated: `3489`
-		// Minimum execution time: 3_412_000 picoseconds.
-		Weight::from_parts(3_697_000, 0)
+		// Minimum execution time: 3_580_000 picoseconds.
+		Weight::from_parts(3_726_000, 0)
 			.saturating_add(Weight::from_parts(0, 3489))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
 	/// Storage: Quota IdtyQuota (r:1 w:1)
 	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
+	/// Storage: System Account (r:1 w:0)
+	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
 	fn try_refund() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `139`
-		//  Estimated: `3489`
-		// Minimum execution time: 5_790_000 picoseconds.
-		Weight::from_parts(6_075_000, 0)
-			.saturating_add(Weight::from_parts(0, 3489))
-			.saturating_add(T::DbWeight::get().reads(1))
+		//  Estimated: `3591`
+		// Minimum execution time: 11_309_000 picoseconds.
+		Weight::from_parts(11_843_000, 0)
+			.saturating_add(Weight::from_parts(0, 3591))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
+	/// Storage: Quota IdtyQuota (r:1 w:1)
+	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
+	/// Storage: System Account (r:1 w:0)
+	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
 	fn do_refund() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `0`
-		//  Estimated: `0`
-		// Minimum execution time: 2_161_000 picoseconds.
-		Weight::from_parts(2_267_000, 0)
-			.saturating_add(Weight::from_parts(0, 0))
+		//  Measured:  `139`
+		//  Estimated: `3591`
+		// Minimum execution time: 11_283_000 picoseconds.
+		Weight::from_parts(11_694_000, 0)
+			.saturating_add(Weight::from_parts(0, 3591))
+			.saturating_add(T::DbWeight::get().reads(2))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: Quota RefundQueue (r:1 w:1)
+	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: MaxEncodedLen)
+	fn on_process_refund_queue() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `43`
+		//  Estimated: `12751`
+		// Minimum execution time: 1_456_000 picoseconds.
+		Weight::from_parts(1_569_000, 0)
+			.saturating_add(Weight::from_parts(0, 12751))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: Quota RefundQueue (r:1 w:1)
+	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: Measured)
+	/// Storage: Quota IdtyQuota (r:1 w:1)
+	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: Measured)
+	/// Storage: System Account (r:1 w:0)
+	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: Measured)
+	/// The range of component `i` is `[1, 256]`.
+	fn on_process_refund_queue_elements(i: u32, ) -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `164 + i * (44 ±0)`
+		//  Estimated: `3628 + i * (44 ±0)`
+		// Minimum execution time: 13_671_000 picoseconds.
+		Weight::from_parts(19_531_750, 0)
+			.saturating_add(Weight::from_parts(0, 3628))
+			// Standard Error: 1_057
+			.saturating_add(Weight::from_parts(476_555, 0).saturating_mul(i.into()))
+			.saturating_add(T::DbWeight::get().reads(3))
+			.saturating_add(T::DbWeight::get().writes(2))
+			.saturating_add(Weight::from_parts(0, 44).saturating_mul(i.into()))
 	}
 }