diff --git a/docs/api/runtime-calls.md b/docs/api/runtime-calls.md
index 39d58a35a791b50697c4845f3c0c9b9385214ea0..f6b99dfcd839856470772b646d0a216e0f27919e 100644
--- a/docs/api/runtime-calls.md
+++ b/docs/api/runtime-calls.md
@@ -220,25 +220,6 @@ The dispatch origin of this call must be Signed.
   transfer everything except at least the existential deposit, which will guarantee to
   keep the sender account alive (true).
 
-#### upgrade_accounts - 6
-
-<details><summary><code>upgrade_accounts(who)</code></summary>
-
-```rust
-who: Vec<T::AccountId>
-```
-</details>
-
-
-Upgrade a specified account.
-
-- `origin`: Must be `Signed`.
-- `who`: The account to be upgraded.
-
-This will waive the transaction fee if at least all but 10% of the accounts needed to
-be upgraded. (We let some not have to be upgraded just in order to allow for the
-possibililty of churn).
-
 #### transfer - 7
 
 <details><summary><code>transfer(dest, value)</code></summary>
@@ -713,6 +694,20 @@ Revoke an identity using a revocation signature
 
 Any signed origin can execute this call.
 
+#### force_remove_identity - 5
+
+<details><summary><code>force_remove_identity(idty_index, idty_name, reason)</code></summary>
+
+```rust
+idty_index: T::IdtyIndex
+idty_name: Option<IdtyName>
+reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>
+```
+</details>
+
+
+remove an identity from storage
+
 #### fix_sufficients - 7
 
 <details><summary><code>fix_sufficients(owner_key, inc)</code></summary>
@@ -750,11 +745,11 @@ Link an account to an identity
 </details>
 
 
-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
 
 #### renew_membership - 2
 
@@ -866,11 +861,11 @@ submit a membership request (must have a declared identity)
 </details>
 
 
-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
 
 #### renew_membership - 2
 
@@ -1584,7 +1579,7 @@ exist altogether, thus there is no way it would have been approved in the first
 
 ## Root calls
 
-There are **20** root calls from **10** pallets.
+There are **19** root calls from **10** pallets.
 
 ### System - 0
 
@@ -1821,20 +1816,6 @@ O(P) where P is the number of max proposals
 
 ### Identity - 41
 
-#### remove_identity - 5
-
-<details><summary><code>remove_identity(idty_index, idty_name, reason)</code></summary>
-
-```rust
-idty_index: T::IdtyIndex
-idty_name: Option<IdtyName>
-reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>
-```
-</details>
-
-
-remove an identity from storage
-
 #### prune_item_identities_names - 6
 
 <details><summary><code>prune_item_identities_names(names)</code></summary>
diff --git a/docs/api/runtime-errors.md b/docs/api/runtime-errors.md
index 425956424cc5b63a11f530f83ce3d4cc437effac..1bb46f09033348fe3a2d02adca743258857fead5 100644
--- a/docs/api/runtime-errors.md
+++ b/docs/api/runtime-errors.md
@@ -1,6 +1,6 @@
 # Runtime errors
 
-There are **190** errors from **37** pallets.
+There are **178** errors from **37** pallets.
 
 <ul>
 <li>System - 0
@@ -220,49 +220,49 @@ Number of freezes exceed `MaxFreezes`.
 <details>
 <summary>
 <code>BlockHeightInFuture</code> - 0</summary>
-Block height is in the future
+Block height is in the future.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>BlockHeightTooOld</code> - 1</summary>
-Block height is too old
+Block height is too old.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>DestAccountNotExist</code> - 2</summary>
-Destination account does not exist
+Destination account does not exist.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>ExistentialDeposit</code> - 3</summary>
-Destination account has balance less than existential deposit
+Destination account has a balance less than the existential deposit.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>InsufficientBalance</code> - 4</summary>
-Source account has insufficient balance
+Source account has insufficient balance.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>OneshotAccountAlreadyCreated</code> - 5</summary>
-Destination oneshot account already exists
+Destination oneshot account already exists.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>OneshotAccountNotExist</code> - 6</summary>
-Source oneshot account does not exist
+Source oneshot account does not exist.
 </details>
 </li>
 </ul>
@@ -277,41 +277,41 @@ Source oneshot account does not exist
 <details>
 <summary>
 <code>AlreadyIncoming</code> - 0</summary>
-Already incoming
+Member already incoming
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>AlreadyOnline</code> - 1</summary>
-Already online
+Member already online
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>AlreadyOutgoing</code> - 2</summary>
-Already outgoing
+Member already outgoing
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MemberIdNotFound</code> - 3</summary>
-Not found owner key
+Owner key is invalid as a member.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>MemberIdBlackListed</code> - 4</summary>
+<code>MemberBlacklisted</code> - 4</summary>
 Member is blacklisted
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>MemberNotBlackListed</code> - 5</summary>
+<code>MemberNotBlacklisted</code> - 5</summary>
 Member is not blacklisted
 </details>
 </li>
@@ -332,29 +332,22 @@ Neither online nor scheduled
 <li>
 <details>
 <summary>
-<code>NotOwner</code> - 8</summary>
-Not owner
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>NotMember</code> - 9</summary>
+<code>NotMember</code> - 8</summary>
 Not member
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>SessionKeysNotProvided</code> - 10</summary>
+<code>SessionKeysNotProvided</code> - 9</summary>
 Session keys not provided
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>TooManyAuthorities</code> - 11</summary>
-Too man aAuthorities
+<code>TooManyAuthorities</code> - 10</summary>
+Too many authorities.
 </details>
 </li>
 </ul>
@@ -639,84 +632,84 @@ This account is not allowed to claim UDs.
 <details>
 <summary>
 <code>NotEnoughCertsToClaimMembership</code> - 0</summary>
-Not enough certifications received to claim membership
+Insufficient certifications received to claim membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>DistanceNotOK</code> - 1</summary>
-Distance has not been evaluated positively
+<code>DistanceNotOk</code> - 1</summary>
+Distance has not received a positive evaluation.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotAllowedToRequestMembership</code> - 2</summary>
-Identity not allowed to request membership
+Identity is not allowed to request membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotAllowedToRenewMembership</code> - 3</summary>
-Identity not allowed to renew membership
+Identity not allowed to renew membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyCreationPeriodNotRespected</code> - 4</summary>
-Identity creation period not respected
+Identity creation period not respected.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotEnoughReceivedCertsToCreateIdty</code> - 5</summary>
-Not enough received certifications to create identity
+Insufficient received certifications to create identity.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MaxEmittedCertsReached</code> - 6</summary>
-Max number of emitted certs reached
+Maximum number of emitted certifications reached.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotAllowedToChangeIdtyAddress</code> - 7</summary>
-Not allowed to change identity address
+Not allowed to change identity address.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotAllowedToRemoveIdty</code> - 8</summary>
-Not allowed to remove identity
+Not allowed to remove identity.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IssuerCanNotEmitCert</code> - 9</summary>
-Issuer can not emit cert because it is not validated
+Issuer cannot emit a certification because it is not validated.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>CertToUndefined</code> - 10</summary>
-Can not issue cert to identity without membership or pending membership
+Cannot issue a certification to an identity without membership or pending membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotFound</code> - 11</summary>
-Issuer or receiver not found
+Issuer or receiver not found.
 </details>
 </li>
 </ul>
@@ -727,147 +720,98 @@ Issuer or receiver not found
 <details>
 <summary>
 <code>IdtyAlreadyConfirmed</code> - 0</summary>
-Identity already confirmed
+Identity already confirmed.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyAlreadyCreated</code> - 1</summary>
-Identity already created
+Identity already created.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyAlreadyValidated</code> - 2</summary>
-Identity already validated
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyCreationNotAllowed</code> - 3</summary>
-You are not allowed to create a new identity now
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyIndexNotFound</code> - 4</summary>
-Identity index not found
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyNameAlreadyExist</code> - 5</summary>
-Identity name already exists
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyNameInvalid</code> - 6</summary>
-Invalid identity name
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyNotConfirmedByOwner</code> - 7</summary>
-Identity not confirmed by its owner
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>IdtyNotFound</code> - 8</summary>
-Identity not found
+Identity already validated.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>IdtyNotMember</code> - 9</summary>
-Identity not member
+<code>IdtyIndexNotFound</code> - 3</summary>
+Identity index not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>IdtyNotValidated</code> - 10</summary>
-Identity not validated
+<code>IdtyNameAlreadyExist</code> - 4</summary>
+Identity name already exists.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>IdtyNotYetRenewable</code> - 11</summary>
-Identity not yet renewable
+<code>IdtyNameInvalid</code> - 5</summary>
+Invalid identity name.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>InvalidSignature</code> - 12</summary>
-payload signature is invalid
+<code>IdtyNotConfirmedByOwner</code> - 6</summary>
+Identity not confirmed by its owner.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>InvalidRevocationKey</code> - 13</summary>
-Revocation key is invalid
+<code>IdtyNotFound</code> - 7</summary>
+Identity not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>NotRespectIdtyCreationPeriod</code> - 14</summary>
-Identity creation period is not respected
+<code>InvalidSignature</code> - 8</summary>
+Invalid payload signature.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>NotSameIdtyName</code> - 15</summary>
-Not the same identity name
+<code>InvalidRevocationKey</code> - 9</summary>
+Invalid revocation key.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>OwnerKeyAlreadyRecentlyChanged</code> - 16</summary>
-Owner key already recently changed
+<code>NotRespectIdtyCreationPeriod</code> - 10</summary>
+Identity creation period is not respected.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>OwnerKeyAlreadyUsed</code> - 17</summary>
-Owner key already used
+<code>OwnerKeyAlreadyRecentlyChanged</code> - 11</summary>
+Owner key already changed recently.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>ProhibitedToRevertToAnOldKey</code> - 18</summary>
-Prohibited to revert to an old key
+<code>OwnerKeyAlreadyUsed</code> - 12</summary>
+Owner key already used.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>RightAlreadyAdded</code> - 19</summary>
-Right already added
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>RightNotExist</code> - 20</summary>
-Right does not exist
+<code>ProhibitedToRevertToAnOldKey</code> - 13</summary>
+Reverting to an old key is prohibited.
 </details>
 </li>
 </ul>
@@ -878,42 +822,35 @@ Right does not exist
 <details>
 <summary>
 <code>IdtyIdNotFound</code> - 0</summary>
-Identity id not found
+Identity ID not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipAlreadyAcquired</code> - 1</summary>
-Membership already acquired
+Membership already acquired.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipAlreadyRequested</code> - 2</summary>
-Membership already requested
+Membership already requested.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipNotFound</code> - 3</summary>
-Membership not found
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>OriginNotAllowedToUseIdty</code> - 4</summary>
-Origin not allowed to use this identity
+Membership not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>MembershipRequestNotFound</code> - 5</summary>
-Membership request not found
+<code>MembershipRequestNotFound</code> - 4</summary>
+Membership request not found.
 </details>
 </li>
 </ul>
@@ -924,14 +861,14 @@ Membership request not found
 <details>
 <summary>
 <code>CannotCertifySelf</code> - 0</summary>
-An identity cannot certify itself
+Identity cannot certify itself
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IssuedTooManyCert</code> - 1</summary>
-This identity has already issued the maximum number of certifications
+Identity has already issued the maximum number of certifications
 </details>
 </li>
 <li>
@@ -945,14 +882,14 @@ Issuer not found
 <details>
 <summary>
 <code>NotEnoughCertReceived</code> - 3</summary>
-Not enough certifications received
+Insufficient certifications received.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotRespectCertPeriod</code> - 4</summary>
-This identity has already issued a certification too recently
+Identity has issued a certification too recently.
 </details>
 </li>
 </ul>
@@ -963,70 +900,56 @@ This identity has already issued a certification too recently
 <details>
 <summary>
 <code>AlreadyInEvaluation</code> - 0</summary>
-
+Distance is already under evaluation.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>CannotReserve</code> - 1</summary>
-
+<code>TooManyEvaluationsByAuthor</code> - 1</summary>
+Too many evaluations requested by author.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>ManyEvaluationsByAuthor</code> - 2</summary>
-
+<code>TooManyEvaluationsInBlock</code> - 2</summary>
+Too many evaluations for this block.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>ManyEvaluationsInBlock</code> - 3</summary>
-
+<code>NoAuthor</code> - 3</summary>
+No author for this block.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>NoAuthor</code> - 4</summary>
-
+<code>NoIdentity</code> - 4</summary>
+Caller has no identity.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>NoIdentity</code> - 5</summary>
-
+<code>QueueFull</code> - 5</summary>
+Evaluation queue is full.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>NonEligibleForEvaluation</code> - 6</summary>
-
+<code>TooManyEvaluators</code> - 6</summary>
+Too many evaluators in the current evaluation pool.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>QueueFull</code> - 7</summary>
-
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>TooManyEvaluators</code> - 8</summary>
-
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>WrongResultLength</code> - 9</summary>
-
+<code>WrongResultLength</code> - 7</summary>
+Evaluation result has a wrong length.
 </details>
 </li>
 </ul>
@@ -1037,84 +960,84 @@ This identity has already issued a certification too recently
 <details>
 <summary>
 <code>NotEnoughCertsToClaimMembership</code> - 0</summary>
-Not enough certifications received to claim membership
+Insufficient certifications received to claim membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>DistanceNotOK</code> - 1</summary>
-Distance has not been evaluated positively
+<code>DistanceNotOk</code> - 1</summary>
+Distance has not received a positive evaluation.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotAllowedToRequestMembership</code> - 2</summary>
-Identity not allowed to request membership
+Identity is not allowed to request membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotAllowedToRenewMembership</code> - 3</summary>
-Identity not allowed to renew membership
+Identity not allowed to renew membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyCreationPeriodNotRespected</code> - 4</summary>
-Identity creation period not respected
+Identity creation period not respected.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotEnoughReceivedCertsToCreateIdty</code> - 5</summary>
-Not enough received certifications to create identity
+Insufficient received certifications to create identity.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MaxEmittedCertsReached</code> - 6</summary>
-Max number of emitted certs reached
+Maximum number of emitted certifications reached.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotAllowedToChangeIdtyAddress</code> - 7</summary>
-Not allowed to change identity address
+Not allowed to change identity address.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotAllowedToRemoveIdty</code> - 8</summary>
-Not allowed to remove identity
+Not allowed to remove identity.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IssuerCanNotEmitCert</code> - 9</summary>
-Issuer can not emit cert because it is not validated
+Issuer cannot emit a certification because it is not validated.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>CertToUndefined</code> - 10</summary>
-Can not issue cert to identity without membership or pending membership
+Cannot issue a certification to an identity without membership or pending membership.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IdtyNotFound</code> - 11</summary>
-Issuer or receiver not found
+Issuer or receiver not found.
 </details>
 </li>
 </ul>
@@ -1125,42 +1048,35 @@ Issuer or receiver not found
 <details>
 <summary>
 <code>IdtyIdNotFound</code> - 0</summary>
-Identity id not found
+Identity ID not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipAlreadyAcquired</code> - 1</summary>
-Membership already acquired
+Membership already acquired.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipAlreadyRequested</code> - 2</summary>
-Membership already requested
+Membership already requested.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>MembershipNotFound</code> - 3</summary>
-Membership not found
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>OriginNotAllowedToUseIdty</code> - 4</summary>
-Origin not allowed to use this identity
+Membership not found.
 </details>
 </li>
 <li>
 <details>
 <summary>
-<code>MembershipRequestNotFound</code> - 5</summary>
-Membership request not found
+<code>MembershipRequestNotFound</code> - 4</summary>
+Membership request not found.
 </details>
 </li>
 </ul>
@@ -1171,14 +1087,14 @@ Membership request not found
 <details>
 <summary>
 <code>CannotCertifySelf</code> - 0</summary>
-An identity cannot certify itself
+Identity cannot certify itself
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>IssuedTooManyCert</code> - 1</summary>
-This identity has already issued the maximum number of certifications
+Identity has already issued the maximum number of certifications
 </details>
 </li>
 <li>
@@ -1192,14 +1108,14 @@ Issuer not found
 <details>
 <summary>
 <code>NotEnoughCertReceived</code> - 3</summary>
-Not enough certifications received
+Insufficient certifications received.
 </details>
 </li>
 <li>
 <details>
 <summary>
 <code>NotRespectCertPeriod</code> - 4</summary>
-This identity has already issued a certification too recently
+Identity has issued a certification too recently.
 </details>
 </li>
 </ul>
@@ -1371,8 +1287,8 @@ The data to be stored is already stored.
 <li>
 <details>
 <summary>
-<code>FullQueue</code> - 0</summary>
-The queue is full, pleasy retry later
+<code>QueueFull</code> - 0</summary>
+Request randomness queue is full.
 </details>
 </li>
 </ul>
diff --git a/docs/api/runtime-events.md b/docs/api/runtime-events.md
index e8f92c641daf786eb76b5a967399b072b6cde7da..ab06c6d7a573624e13658fce8f8293a194848cb7 100644
--- a/docs/api/runtime-events.md
+++ b/docs/api/runtime-events.md
@@ -1,6 +1,6 @@
 # Runtime events
 
-There are **130** events from **37** pallets.
+There are **129** events from **37** pallets.
 
 <ul>
 <li>System - 0
@@ -87,9 +87,7 @@ hash: T::Hash
 <details>
 <summary>
 <code>ForceDestroy(who, balance)</code> - 0</summary>
-Force the destruction of an account because its free balance is insufficient to pay
-the account creation price.
-[who, balance]
+Forced destruction of an account due to insufficient free balance to cover the account creation price.
 
 ```rust
 who: T::AccountId
@@ -102,8 +100,7 @@ balance: T::Balance
 <details>
 <summary>
 <code>RandomIdAssigned(who, random_id)</code> - 1</summary>
-Random id assigned
-[account_id, random_id]
+A random ID has been assigned to the account.
 
 ```rust
 who: T::AccountId
@@ -129,7 +126,7 @@ identity: IdtyIdOf<T>
 <details>
 <summary>
 <code>AccountUnlinked()</code> - 3</summary>
-account unlinked from identity
+The account was unlinked from its identity.
 
 ```rust
 : T::AccountId
@@ -538,7 +535,7 @@ tip: BalanceOf<T>
 <details>
 <summary>
 <code>OneshotAccountCreated(account, balance, creator)</code> - 0</summary>
-
+A oneshot account was created.
 
 ```rust
 account: T::AccountId
@@ -552,7 +549,7 @@ creator: T::AccountId
 <details>
 <summary>
 <code>OneshotAccountConsumed(account, dest1, dest2)</code> - 1</summary>
-
+A oneshot account was consumed.
 
 ```rust
 account: T::AccountId
@@ -568,7 +565,7 @@ dest2: Option<
 <details>
 <summary>
 <code>Withdraw(account, balance)</code> - 2</summary>
-
+A withdrawal was executed on a oneshot account.
 
 ```rust
 account: T::AccountId
@@ -585,7 +582,7 @@ balance: <T::Currency as Currency<T::AccountId>>::Balance
 <details>
 <summary>
 <code>Refunded(who, identity, amount)</code> - 0</summary>
-Refunded fees to an account
+Transaction fees were refunded.
 
 ```rust
 who: T::AccountId
@@ -599,7 +596,7 @@ amount: BalanceOf<T>
 <details>
 <summary>
 <code>NoQuotaForIdty()</code> - 1</summary>
-No quota for identity
+No more quota available for refund.
 
 ```rust
 : IdtyId<T>
@@ -611,7 +608,8 @@ No quota for identity
 <details>
 <summary>
 <code>NoMoreCurrencyForRefund()</code> - 2</summary>
-No more currency available for refund
+No more currency available for refund.
+This scenario should never occur if the fees are intended for the refund account.
 
 ```rust
 no args
@@ -623,7 +621,8 @@ no args
 <details>
 <summary>
 <code>RefundFailed()</code> - 3</summary>
-Refund failed
+The refund has failed.
+This scenario should rarely occur, except when the account was destroyed in the interim between the request and the refund.
 
 ```rust
 : T::AccountId
@@ -635,7 +634,7 @@ Refund failed
 <details>
 <summary>
 <code>RefundQueueFull()</code> - 4</summary>
-Refund queue full
+Refund queue was full.
 
 ```rust
 no args
@@ -650,12 +649,11 @@ no args
 <li>
 <details>
 <summary>
-<code>IncomingAuthorities()</code> - 0</summary>
-List of members who will enter the set of authorities at the next session.
-[Vec<member_id>]
+<code>IncomingAuthorities(members)</code> - 0</summary>
+List of members scheduled to join the set of authorities in the next session.
 
 ```rust
-: Vec<T::MemberId>
+members: Vec<T::MemberId>
 ```
 
 </details>
@@ -663,12 +661,11 @@ List of members who will enter the set of authorities at the next session.
 <li>
 <details>
 <summary>
-<code>OutgoingAuthorities()</code> - 1</summary>
-List of members who will leave the set of authorities at the next session.
-[Vec<member_id>]
+<code>OutgoingAuthorities(members)</code> - 1</summary>
+List of members leaving the set of authorities in the next session.
 
 ```rust
-: Vec<T::MemberId>
+members: Vec<T::MemberId>
 ```
 
 </details>
@@ -676,12 +673,11 @@ List of members who will leave the set of authorities at the next session.
 <li>
 <details>
 <summary>
-<code>MemberGoOffline()</code> - 2</summary>
+<code>MemberGoOffline(member)</code> - 2</summary>
 A member will leave the set of authorities in 2 sessions.
-[member_id]
 
 ```rust
-: T::MemberId
+member: T::MemberId
 ```
 
 </details>
@@ -689,12 +685,11 @@ A member will leave the set of authorities in 2 sessions.
 <li>
 <details>
 <summary>
-<code>MemberGoOnline()</code> - 3</summary>
-A member will enter the set of authorities in 2 sessions.
-[member_id]
+<code>MemberGoOnline(member)</code> - 3</summary>
+A member will join the set of authorities in 2 sessions.
 
 ```rust
-: T::MemberId
+member: T::MemberId
 ```
 
 </details>
@@ -702,13 +697,11 @@ A member will enter the set of authorities in 2 sessions.
 <li>
 <details>
 <summary>
-<code>MemberRemoved()</code> - 4</summary>
-A member has lost the right to be part of the authorities,
-this member will be removed from the authority set in 2 sessions.
-[member_id]
+<code>MemberRemoved(member)</code> - 4</summary>
+A member, who no longer has authority rights, will be removed from the authority set in 2 sessions.
 
 ```rust
-: T::MemberId
+member: T::MemberId
 ```
 
 </details>
@@ -716,12 +709,11 @@ this member will be removed from the authority set in 2 sessions.
 <li>
 <details>
 <summary>
-<code>MemberRemovedFromBlackList()</code> - 5</summary>
+<code>MemberRemovedFromBlacklist(member)</code> - 5</summary>
 A member has been removed from the blacklist.
-[member_id]
 
 ```rust
-: T::MemberId
+member: T::MemberId
 ```
 
 </details>
@@ -738,9 +730,7 @@ A member has been removed from the blacklist.
 <details>
 <summary>
 <code>Offence(kind, timeslot)</code> - 0</summary>
-There is an offence reported of the given `kind` happened at the `session_index` and
-(kind-specific) time slot. This event is not deposited for duplicate slashes.
-\[kind, timeslot\].
+An offense was reported during the specified time slot. This event is not deposited for duplicate slashes.
 
 ```rust
 kind: Kind
@@ -1124,8 +1114,7 @@ who: T::AccountId
 <details>
 <summary>
 <code>IdtyCreated(idty_index, owner_key)</code> - 0</summary>
-A new identity has been created
-[idty_index, owner_key]
+A new identity has been created.
 
 ```rust
 idty_index: T::IdtyIndex
@@ -1138,8 +1127,7 @@ owner_key: T::AccountId
 <details>
 <summary>
 <code>IdtyConfirmed(idty_index, owner_key, name)</code> - 1</summary>
-An identity has been confirmed by its owner
-[idty_index, owner_key, name]
+An identity has been confirmed by its owner.
 
 ```rust
 idty_index: T::IdtyIndex
@@ -1153,8 +1141,7 @@ name: IdtyName
 <details>
 <summary>
 <code>IdtyValidated(idty_index)</code> - 2</summary>
-An identity has been validated
-[idty_index]
+An identity has been validated.
 
 ```rust
 idty_index: T::IdtyIndex
@@ -1179,8 +1166,7 @@ new_owner_key: T::AccountId
 <details>
 <summary>
 <code>IdtyRemoved(idty_index, reason)</code> - 4</summary>
-An identity has been removed
-[idty_index]
+An identity has been removed.
 
 ```rust
 idty_index: T::IdtyIndex
@@ -1196,25 +1182,12 @@ reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>
 <li>
 <details>
 <summary>
-<code>MembershipAcquired()</code> - 0</summary>
-A membership was acquired
-[idty_id]
-
-```rust
-: T::IdtyId
-```
-
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>MembershipExpired()</code> - 1</summary>
-A membership expired
-[idty_id]
+<code>MembershipAcquired(member, expire_on)</code> - 0</summary>
+A membership was acquired.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+expire_on: BlockNumberFor<T>
 ```
 
 </details>
@@ -1222,12 +1195,12 @@ A membership expired
 <li>
 <details>
 <summary>
-<code>MembershipRenewed()</code> - 2</summary>
-A membership was renewed
-[idty_id]
+<code>MembershipTerminated(member, reason)</code> - 1</summary>
+A membership was terminated.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+reason: MembershipTerminationReason
 ```
 
 </details>
@@ -1235,12 +1208,12 @@ A membership was renewed
 <li>
 <details>
 <summary>
-<code>MembershipRequested()</code> - 3</summary>
-An membership was requested
-[idty_id]
+<code>PendingMembershipAdded(member, expire_on)</code> - 2</summary>
+A pending membership was added.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+expire_on: BlockNumberFor<T>
 ```
 
 </details>
@@ -1248,25 +1221,11 @@ An membership was requested
 <li>
 <details>
 <summary>
-<code>MembershipRevoked()</code> - 4</summary>
-A membership was revoked
-[idty_id]
+<code>PendingMembershipExpired(member)</code> - 3</summary>
+A pending membership has expired.
 
 ```rust
-: T::IdtyId
-```
-
-</details>
-</li>
-<li>
-<details>
-<summary>
-<code>PendingMembershipExpired()</code> - 5</summary>
-A pending membership request has expired
-[idty_id]
-
-```rust
-: T::IdtyId
+member: T::IdtyId
 ```
 
 </details>
@@ -1279,8 +1238,7 @@ A pending membership request has expired
 <details>
 <summary>
 <code>NewCert(issuer, issuer_issued_count, receiver, receiver_received_count)</code> - 0</summary>
-New certification
-[issuer, issuer_issued_count, receiver, receiver_received_count]
+A new certification was added.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1295,8 +1253,7 @@ receiver_received_count: u32
 <details>
 <summary>
 <code>RemovedCert(issuer, issuer_issued_count, receiver, receiver_received_count, expiration)</code> - 1</summary>
-Removed certification
-[issuer, issuer_issued_count, receiver, receiver_received_count, expiration]
+A certification was removed.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1312,8 +1269,7 @@ expiration: bool
 <details>
 <summary>
 <code>RenewedCert(issuer, receiver)</code> - 2</summary>
-Renewed certification
-[issuer, receiver]
+A certification was renewed.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1326,23 +1282,27 @@ receiver: T::IdtyIndex
 </li>
 <li>Distance - 44
 <ul>
-</ul>
-</li>
-<li>SmithSubWot - 50
-<ul>
-</ul>
+<li>
+<details>
+<summary>
+<code>EvaluationRequested(idty_index, who)</code> - 0</summary>
+A distance evaluation was requested.
+
+```rust
+idty_index: T::IdtyIndex
+who: T::AccountId
+```
+
+</details>
 </li>
-<li>SmithMembership - 52
-<ul>
 <li>
 <details>
 <summary>
-<code>MembershipAcquired()</code> - 0</summary>
-A membership was acquired
-[idty_id]
+<code>EvaluationUpdated(evaluator)</code> - 1</summary>
+A distance evaluation was updated.
 
 ```rust
-: T::IdtyId
+evaluator: T::AccountId
 ```
 
 </details>
@@ -1350,25 +1310,33 @@ A membership was acquired
 <li>
 <details>
 <summary>
-<code>MembershipExpired()</code> - 1</summary>
-A membership expired
-[idty_id]
+<code>EvaluationStatusForced(idty_index, status)</code> - 2</summary>
+A distance status was forced.
 
 ```rust
-: T::IdtyId
+idty_index: T::IdtyIndex
+status: Option<(<T as frame_system::Config>::AccountId, DistanceStatus)>
 ```
 
 </details>
 </li>
+</ul>
+</li>
+<li>SmithSubWot - 50
+<ul>
+</ul>
+</li>
+<li>SmithMembership - 52
+<ul>
 <li>
 <details>
 <summary>
-<code>MembershipRenewed()</code> - 2</summary>
-A membership was renewed
-[idty_id]
+<code>MembershipAcquired(member, expire_on)</code> - 0</summary>
+A membership was acquired.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+expire_on: BlockNumberFor<T>
 ```
 
 </details>
@@ -1376,12 +1344,12 @@ A membership was renewed
 <li>
 <details>
 <summary>
-<code>MembershipRequested()</code> - 3</summary>
-An membership was requested
-[idty_id]
+<code>MembershipTerminated(member, reason)</code> - 1</summary>
+A membership was terminated.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+reason: MembershipTerminationReason
 ```
 
 </details>
@@ -1389,12 +1357,12 @@ An membership was requested
 <li>
 <details>
 <summary>
-<code>MembershipRevoked()</code> - 4</summary>
-A membership was revoked
-[idty_id]
+<code>PendingMembershipAdded(member, expire_on)</code> - 2</summary>
+A pending membership was added.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
+expire_on: BlockNumberFor<T>
 ```
 
 </details>
@@ -1402,12 +1370,11 @@ A membership was revoked
 <li>
 <details>
 <summary>
-<code>PendingMembershipExpired()</code> - 5</summary>
-A pending membership request has expired
-[idty_id]
+<code>PendingMembershipExpired(member)</code> - 3</summary>
+A pending membership has expired.
 
 ```rust
-: T::IdtyId
+member: T::IdtyId
 ```
 
 </details>
@@ -1420,8 +1387,7 @@ A pending membership request has expired
 <details>
 <summary>
 <code>NewCert(issuer, issuer_issued_count, receiver, receiver_received_count)</code> - 0</summary>
-New certification
-[issuer, issuer_issued_count, receiver, receiver_received_count]
+A new certification was added.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1436,8 +1402,7 @@ receiver_received_count: u32
 <details>
 <summary>
 <code>RemovedCert(issuer, issuer_issued_count, receiver, receiver_received_count, expiration)</code> - 1</summary>
-Removed certification
-[issuer, issuer_issued_count, receiver, receiver_received_count, expiration]
+A certification was removed.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1453,8 +1418,7 @@ expiration: bool
 <details>
 <summary>
 <code>RenewedCert(issuer, receiver)</code> - 2</summary>
-Renewed certification
-[issuer, receiver]
+A certification was renewed.
 
 ```rust
 issuer: T::IdtyIndex
@@ -1580,7 +1544,7 @@ call_hash: CallHash
 <details>
 <summary>
 <code>FilledRandomness(request_id, randomness)</code> - 0</summary>
-Filled randomness
+A request for randomness was fulfilled.
 
 ```rust
 request_id: RequestId
@@ -1593,7 +1557,7 @@ randomness: H256
 <details>
 <summary>
 <code>RequestedRandomness(request_id, salt, r#type)</code> - 1</summary>
-Requested randomness
+A request for randomness was made.
 
 ```rust
 request_id: RequestId
diff --git a/docs/dev/pallet_conventions.md b/docs/dev/pallet_conventions.md
new file mode 100644
index 0000000000000000000000000000000000000000..d7b9d7829280a74b1109faf2a130ff8385f286e8
--- /dev/null
+++ b/docs/dev/pallet_conventions.md
@@ -0,0 +1,35 @@
+# Duniter Pallet Conventions
+
+## Call
+
+Custom Duniter pallet calls should adhere to the standard Substrate naming convention:
+
+- `action_` for regular calls (e.g., `create_identity`).
+- `force_action_`  for calls with a privileged origin (e.g., `force_remove_identity`).
+
+## Error
+
+In the event of a call failure, it should trigger a pallet error with a self-explanatory name, for instance, `IdtyNotFound`.
+
+## Event
+
+Successful calls should deposit a system event to notify external entities of the change. The event name should be self-explanatory and structured in the form of a Rust struct with named fields, ensuring clarity in autogenerated documentation. An example is:
+
+```rust
+IdtyRemoved {
+    idty_index: T::IdtyIndex,
+    reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>,
+}
+```
+
+## Hook
+
+Hooks are inherently infallible, and no errors should be emitted within them. To monitor progression from inside the hook, events can be employed to inform external entities about changes or no-changes.
+
+## Internal Function
+
+Internal functions should adhere to the following naming convention:
+
+- `do_action_` for regular functions executing the base logic of a call (e.g., `do_remove_identity_`). These functions should directly emit events and trigger errors as needed.
+- `force_action_` for privileged functions that bypass any checks. This can be useful for specific benchmarking functions.
+- `check_` for functions performing checks and triggering errors in case of failure.
diff --git a/pallets/authority-members/src/benchmarking.rs b/pallets/authority-members/src/benchmarking.rs
index c0dcc62b8c275b962fd95ccc3be3592bf67ae0f5..18e6472f8b096d07cf53282337aa67a3d5b482be 100644
--- a/pallets/authority-members/src/benchmarking.rs
+++ b/pallets/authority-members/src/benchmarking.rs
@@ -38,7 +38,7 @@ benchmarks! {
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
-        assert_has_event::<T>(Event::<T>::MemberGoOffline(id).into());
+        assert_has_event::<T>(Event::<T>::MemberGoOffline{member: id}.into());
     }
      go_online {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
@@ -52,7 +52,7 @@ benchmarks! {
         });
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
-        assert_has_event::<T>(Event::<T>::MemberGoOnline(id).into());
+        assert_has_event::<T>(Event::<T>::MemberGoOnline{member: id}.into());
     }
      set_session_keys {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
@@ -66,16 +66,16 @@ benchmarks! {
         let caller_origin = RawOrigin::Root.into();
         }: _<T::RuntimeOrigin>(caller_origin, id.clone())
     verify {
-        assert_has_event::<T>(Event::<T>::MemberRemoved(id).into());
+        assert_has_event::<T>(Event::<T>::MemberRemoved{member: id}.into());
     }
      remove_member_from_blacklist {
         let id: T::MemberId = OnlineAuthorities::<T>::get()[0];
-        BlackList::<T>::mutate(|blacklist| {
+        Blacklist::<T>::mutate(|blacklist| {
             blacklist.push(id);
         });
     }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), id)
     verify {
-        assert_has_event::<T>(Event::<T>::MemberRemovedFromBlackList(id).into());
+        assert_has_event::<T>(Event::<T>::MemberRemovedFromBlacklist{member: id}.into());
     }
 
      impl_benchmark_test_suite!(
diff --git a/pallets/authority-members/src/impls.rs b/pallets/authority-members/src/impls.rs
index 80f9eef0429f27ce4057f60700f989d5e363034e..4a2a53304ae75c44157c346aabec14e90e74a82c 100644
--- a/pallets/authority-members/src/impls.rs
+++ b/pallets/authority-members/src/impls.rs
@@ -52,9 +52,9 @@ where
         };
 
         match strategy {
-            SlashStrategy::BlackList => {
+            SlashStrategy::Blacklist => {
                 for offender in offenders {
-                    BlackList::<T>::mutate(|blacklist| {
+                    Blacklist::<T>::mutate(|blacklist| {
                         if let Some(member_id) = T::MemberIdOf::convert(offender.offender.0.clone())
                         {
                             if !blacklist.contains(&member_id) {
diff --git a/pallets/authority-members/src/lib.rs b/pallets/authority-members/src/lib.rs
index 76b5b6068dbe1798c7fab2836cb8a6fae4cc26e0..3dbe5e113017c3549eaefcb7d4da1d5be22f5117 100644
--- a/pallets/authority-members/src/lib.rs
+++ b/pallets/authority-members/src/lib.rs
@@ -158,7 +158,7 @@ pub mod pallet {
     // Blacklist.
     #[pallet::storage]
     #[pallet::getter(fn blacklist)]
-    pub type BlackList<T: Config> = StorageValue<_, Vec<T::MemberId>, ValueQuery>;
+    pub type Blacklist<T: Config> = StorageValue<_, Vec<T::MemberId>, ValueQuery>;
 
     // HOOKS //
 
@@ -167,54 +167,45 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config> {
-        /// List of members who will enter the set of authorities at the next session.
-        /// [Vec<member_id>]
-        IncomingAuthorities(Vec<T::MemberId>),
-        /// List of members who will leave the set of authorities at the next session.
-        /// [Vec<member_id>]
-        OutgoingAuthorities(Vec<T::MemberId>),
+        /// List of members scheduled to join the set of authorities in the next session.
+        IncomingAuthorities { members: Vec<T::MemberId> },
+        /// List of members leaving the set of authorities in the next session.
+        OutgoingAuthorities { members: Vec<T::MemberId> },
         /// A member will leave the set of authorities in 2 sessions.
-        /// [member_id]
-        MemberGoOffline(T::MemberId),
-        /// A member will enter the set of authorities in 2 sessions.
-        /// [member_id]
-        MemberGoOnline(T::MemberId),
-        /// A member has lost the right to be part of the authorities,
-        /// this member will be removed from the authority set in 2 sessions.
-        /// [member_id]
-        MemberRemoved(T::MemberId),
+        MemberGoOffline { member: T::MemberId },
+        /// A member will join the set of authorities in 2 sessions.
+        MemberGoOnline { member: T::MemberId },
+        /// A member, who no longer has authority rights, will be removed from the authority set in 2 sessions.
+        MemberRemoved { member: T::MemberId },
         /// A member has been removed from the blacklist.
-        /// [member_id]
-        MemberRemovedFromBlackList(T::MemberId),
+        MemberRemovedFromBlacklist { member: T::MemberId },
     }
 
     // ERRORS //
 
     #[pallet::error]
     pub enum Error<T> {
-        /// Already incoming
+        /// Member already incoming
         AlreadyIncoming,
-        /// Already online
+        /// Member already online
         AlreadyOnline,
-        /// Already outgoing
+        /// Member already outgoing
         AlreadyOutgoing,
-        /// Not found owner key
+        /// Owner key is invalid as a member.
         MemberIdNotFound,
         /// Member is blacklisted
-        MemberIdBlackListed,
+        MemberBlacklisted,
         /// Member is not blacklisted
-        MemberNotBlackListed,
+        MemberNotBlacklisted,
         /// Member not found
         MemberNotFound,
         /// Neither online nor scheduled
         NotOnlineNorIncoming,
-        /// Not owner
-        NotOwner,
         /// Not member
         NotMember,
         /// Session keys not provided
         SessionKeysNotProvided,
-        /// Too man aAuthorities
+        /// Too many authorities.
         TooManyAuthorities,
     }
 
@@ -259,7 +250,7 @@ pub mod pallet {
             let member_id = Self::verify_ownership_and_membership(&who)?;
 
             if Self::is_blacklisted(member_id) {
-                return Err(Error::<T>::MemberIdBlackListed.into());
+                return Err(Error::<T>::MemberBlacklisted.into());
             }
             if !Members::<T>::contains_key(member_id) {
                 return Err(Error::<T>::MemberNotFound.into());
@@ -317,7 +308,7 @@ pub mod pallet {
         ) -> DispatchResultWithPostInfo {
             T::RemoveMemberOrigin::ensure_origin(origin)?;
 
-            let member_data = Members::<T>::get(member_id).ok_or(Error::<T>::NotMember)?;
+            let member_data = Members::<T>::get(member_id).ok_or(Error::<T>::MemberNotFound)?;
             Self::do_remove_member(member_id, member_data.owner_key);
 
             Ok(().into())
@@ -330,13 +321,13 @@ pub mod pallet {
             member_id: T::MemberId,
         ) -> DispatchResultWithPostInfo {
             T::RemoveMemberOrigin::ensure_origin(origin)?;
-            BlackList::<T>::mutate(|members_ids| {
+            Blacklist::<T>::mutate(|members_ids| {
                 if let Ok(index) = members_ids.binary_search(&member_id) {
                     members_ids.remove(index);
-                    Self::deposit_event(Event::MemberRemovedFromBlackList(member_id));
+                    Self::deposit_event(Event::MemberRemovedFromBlacklist { member: member_id });
                     Ok(().into())
                 } else {
-                    Err(Error::<T>::MemberNotBlackListed.into())
+                    Err(Error::<T>::MemberNotBlacklisted.into())
                 }
             })
         }
@@ -367,7 +358,7 @@ pub mod pallet {
             })?;
 
             let validator_id = T::ValidatorIdOf::convert(old_owner_key.clone())
-                .ok_or(Error::<T>::MemberNotFound)?;
+                .ok_or(pallet_session::Error::<T>::NoAssociatedValidatorId)?;
             let session_keys = pallet_session::NextKeys::<T>::get(validator_id)
                 .ok_or(Error::<T>::SessionKeysNotProvided)?;
 
@@ -413,7 +404,7 @@ pub mod pallet {
             }
 
             // Emit event
-            Self::deposit_event(Event::MemberRemoved(member_id));
+            Self::deposit_event(Event::MemberRemoved { member: member_id });
             let _ = T::OnRemovedMember::on_removed_member(member_id);
         }
         /// perform incoming authorities insertion
@@ -428,7 +419,7 @@ pub mod pallet {
             });
             if not_already_inserted {
                 AuthoritiesCounter::<T>::mutate(|counter| *counter += 1);
-                Self::deposit_event(Event::MemberGoOnline(member_id));
+                Self::deposit_event(Event::MemberGoOnline { member: member_id });
             }
             not_already_inserted
         }
@@ -448,7 +439,7 @@ pub mod pallet {
                         *counter -= 1
                     }
                 });
-                Self::deposit_event(Event::MemberGoOffline(member_id));
+                Self::deposit_event(Event::MemberGoOffline { member: member_id });
             }
             not_already_inserted
         }
@@ -472,7 +463,7 @@ pub mod pallet {
         }
         /// check if member is blacklisted
         fn is_blacklisted(member_id: T::MemberId) -> bool {
-            BlackList::<T>::get().contains(&member_id)
+            Blacklist::<T>::get().contains(&member_id)
         }
         /// perform removal from incoming authorities
         fn remove_in(member_id: T::MemberId) {
@@ -539,10 +530,14 @@ impl<T: Config> pallet_session::SessionManager<T::ValidatorId> for Pallet<T> {
                 // when no change to the set of autorities, return None
                 return None;
             } else {
-                Self::deposit_event(Event::OutgoingAuthorities(members_ids_to_del.clone()));
+                Self::deposit_event(Event::OutgoingAuthorities {
+                    members: members_ids_to_del.clone(),
+                });
             }
         } else {
-            Self::deposit_event(Event::IncomingAuthorities(members_ids_to_add.clone()));
+            Self::deposit_event(Event::IncomingAuthorities {
+                members: members_ids_to_add.clone(),
+            });
         }
 
         // updates the list of OnlineAuthorities and returns the list of their key
diff --git a/pallets/authority-members/src/tests.rs b/pallets/authority-members/src/tests.rs
index e85e48a45ed98d90f366875d75e4301baeed765c..b404b96f3c02f2753bd7f9ab09b84eeeba371bbf 100644
--- a/pallets/authority-members/src/tests.rs
+++ b/pallets/authority-members/src/tests.rs
@@ -325,7 +325,7 @@ fn test_offence_black_list() {
                 offender: (9, ()),
                 reporters: vec![],
             }],
-            pallet_offences::SlashStrategy::BlackList,
+            pallet_offences::SlashStrategy::Blacklist,
         );
 
         // Verify state
@@ -359,7 +359,7 @@ fn test_offence_black_list_prevent_from_going_online() {
                 offender: (9, ()),
                 reporters: vec![],
             }],
-            pallet_offences::SlashStrategy::BlackList,
+            pallet_offences::SlashStrategy::Blacklist,
         );
 
         // Verify state
@@ -385,7 +385,7 @@ fn test_offence_black_list_prevent_from_going_online() {
         ));
         assert_err!(
             AuthorityMembers::go_online(RuntimeOrigin::signed(9)),
-            Error::<Test>::MemberIdBlackListed
+            Error::<Test>::MemberBlacklisted
         );
 
         // Should not be able to auto remove from blacklist
@@ -401,12 +401,12 @@ fn test_offence_black_list_prevent_from_going_online() {
             9
         ));
         assert_eq!(AuthorityMembers::blacklist(), EMPTY);
-        System::assert_last_event(Event::MemberRemovedFromBlackList(9).into());
+        System::assert_last_event(Event::MemberRemovedFromBlacklist { member: 9 }.into());
 
         // Authorized should not be able to remove a non-existing member from blacklist
         assert_err!(
             AuthorityMembers::remove_member_from_blacklist(RawOrigin::Root.into(), 9),
-            Error::<Test>::MemberNotBlackListed
+            Error::<Test>::MemberNotBlacklisted
         );
     });
 }
diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs
index 5539c79813e69e19e9290960258a4fd60c201eb9..f265a95f7e1d06fa6edbb7c00f67a7a99c063290 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>::NewCert{ issuer: issuer, issuer_issued_count: issuer_cert + 1, receiver: receiver, receiver_received_count: receiver_cert + 1 }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertAdded{ issuer: issuer, receiver: receiver }.into());
     }
     del_cert {
         let issuer: T::IdtyIndex = 1.into();
@@ -70,7 +70,7 @@ 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>::RemovedCert{ issuer: issuer, issuer_issued_count: issuer_cert - 1, receiver: receiver, receiver_received_count: receiver_cert - 1, expiration: false }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer: issuer, receiver: receiver, expiration: false }.into());
     }
     remove_all_certs_received_by {
         let receiver: T::IdtyIndex = 0.into();
@@ -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>::RemovedCert{ issuer: issuer, issuer_issued_count: issuer_cert - 1, receiver: receiver, receiver_received_count: receiver_cert - 1, expiration: true }.into());
+        assert_has_event::<T, I>(Event::<T, I>::CertRemoved{ issuer: issuer, receiver: receiver, expiration: true }.into());
     }
 
     impl_benchmark_test_suite!(
diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs
index 77af87888a26d0c6aa6b0476db89289f32042eb8..6074908e27aaf08423bf0f46dba96892f73c8a76 100644
--- a/pallets/certification/src/lib.rs
+++ b/pallets/certification/src/lib.rs
@@ -224,26 +224,19 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config<I>, I: 'static = ()> {
-        /// New certification
-        /// [issuer, issuer_issued_count, receiver, receiver_received_count]
-        NewCert {
+        /// A new certification was added.
+        CertAdded {
             issuer: T::IdtyIndex,
-            issuer_issued_count: u32,
             receiver: T::IdtyIndex,
-            receiver_received_count: u32,
         },
-        /// Removed certification
-        /// [issuer, issuer_issued_count, receiver, receiver_received_count, expiration]
-        RemovedCert {
+        /// A certification was removed.
+        CertRemoved {
             issuer: T::IdtyIndex,
-            issuer_issued_count: u32,
             receiver: T::IdtyIndex,
-            receiver_received_count: u32,
             expiration: bool,
         },
-        /// Renewed certification
-        /// [issuer, receiver]
-        RenewedCert {
+        /// A certification was renewed.
+        CertRenewed {
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
         },
@@ -253,15 +246,15 @@ pub mod pallet {
 
     #[pallet::error]
     pub enum Error<T, I = ()> {
-        /// An identity cannot certify itself
+        /// Identity cannot certify itself
         CannotCertifySelf,
-        /// This identity has already issued the maximum number of certifications
+        /// Identity has already issued the maximum number of certifications
         IssuedTooManyCert,
         /// Issuer not found
         IssuerNotFound,
-        /// Not enough certifications received
+        /// Insufficient certifications received.
         NotEnoughCertReceived,
-        /// This identity has already issued a certification too recently
+        /// Identity has issued a certification too recently.
         NotRespectCertPeriod,
     }
 
@@ -437,13 +430,8 @@ pub mod pallet {
                         cert_meta.received_count
                     });
 
-                // emit NewCert event
-                Self::deposit_event(Event::NewCert {
-                    issuer,
-                    issuer_issued_count,
-                    receiver,
-                    receiver_received_count,
-                });
+                // emit CertAdded event
+                Self::deposit_event(Event::CertAdded { issuer, receiver });
                 T::OnNewcert::on_new_cert(
                     issuer,
                     issuer_issued_count,
@@ -455,8 +443,8 @@ pub mod pallet {
                 StorageIdtyCertMeta::<T, I>::mutate(issuer, |issuer_idty_cert_meta| {
                     issuer_idty_cert_meta.next_issuable_on = block_number + T::CertPeriod::get();
                 });
-                // emit RenewedCert event
-                Self::deposit_event(Event::RenewedCert { issuer, receiver });
+                // emit CertRenewed event
+                Self::deposit_event(Event::CertRenewed { issuer, receiver });
             }
 
             Ok(().into())
@@ -516,11 +504,9 @@ pub mod pallet {
                         cert_meta.received_count = cert_meta.received_count.saturating_sub(1);
                         cert_meta.received_count
                     });
-                Self::deposit_event(Event::RemovedCert {
+                Self::deposit_event(Event::CertRemoved {
                     issuer,
-                    issuer_issued_count,
                     receiver,
-                    receiver_received_count,
                     expiration: block_number_opt.is_some(),
                 });
                 // Should always return Weight::zero
diff --git a/pallets/certification/src/tests.rs b/pallets/certification/src/tests.rs
index 85678840938019ffd22d7d616dc1b38b5fdf61fc..cf09fa72de745ddf9eafd3eaa9718866b196cfcd 100644
--- a/pallets/certification/src/tests.rs
+++ b/pallets/certification/src/tests.rs
@@ -113,11 +113,9 @@ fn test_genesis_build() {
         // Cert 2->1 must have expired
         assert_eq!(
             System::events()[0].event,
-            RuntimeEvent::DefaultCertification(Event::RemovedCert {
+            RuntimeEvent::DefaultCertification(Event::CertRemoved {
                 issuer: 2,
-                issuer_issued_count: 1,
                 receiver: 1,
-                receiver_received_count: 1,
                 expiration: true,
             },)
         );
@@ -199,19 +197,15 @@ fn test_cert_expiry() {
     .execute_with(|| {
         run_to_block(5);
         // Expiry of cert by issuer 1
-        System::assert_has_event(RuntimeEvent::DefaultCertification(Event::RemovedCert {
+        System::assert_has_event(RuntimeEvent::DefaultCertification(Event::CertRemoved {
             issuer: 1,
-            issuer_issued_count: 1,
             receiver: 0,
-            receiver_received_count: 1,
             expiration: true,
         }));
         // Expiry of cert by issuer 2
-        System::assert_has_event(RuntimeEvent::DefaultCertification(Event::RemovedCert {
+        System::assert_has_event(RuntimeEvent::DefaultCertification(Event::CertRemoved {
             receiver: 0,
             issuer: 2,
-            issuer_issued_count: 1,
-            receiver_received_count: 0, // <-- No more cert received
             expiration: true,
         }));
     });
@@ -245,18 +239,16 @@ fn test_cert_renewal() {
             DefaultCertification::add_cert(RuntimeOrigin::signed(1), 1, 0),
             Ok(().into())
         );
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RenewedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRenewed {
             issuer: 1,
             receiver: 0,
         }));
 
         run_to_block(12);
         // expiry of previously renewed cert
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RemovedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRemoved {
             issuer: 1,
-            issuer_issued_count: 1,
             receiver: 0,
-            receiver_received_count: 1,
             expiration: true,
         }));
     });
@@ -289,7 +281,7 @@ fn test_cert_renewal_cert_delay() {
             DefaultCertification::add_cert(RuntimeOrigin::signed(1), 1, 0),
             Ok(().into())
         );
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RenewedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRenewed {
             issuer: 1,
             receiver: 0,
         }));
@@ -333,7 +325,7 @@ fn test_cert_renewal_expiration() {
             DefaultCertification::add_cert(RuntimeOrigin::signed(1), 1, 0),
             Ok(().into())
         );
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RenewedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRenewed {
             issuer: 1,
             receiver: 0,
         }));
@@ -345,7 +337,7 @@ fn test_cert_renewal_expiration() {
             DefaultCertification::add_cert(RuntimeOrigin::signed(1), 1, 0),
             Ok(().into())
         );
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RenewedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRenewed {
             issuer: 1,
             receiver: 0,
         }));
@@ -357,11 +349,9 @@ fn test_cert_renewal_expiration() {
 
         run_to_block(14);
         // expiry of previously renewed cert
-        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::RemovedCert {
+        System::assert_last_event(RuntimeEvent::DefaultCertification(Event::CertRemoved {
             issuer: 1,
-            issuer_issued_count: 1,
             receiver: 0,
-            receiver_received_count: 1,
             expiration: true,
         }));
     });
diff --git a/pallets/distance/src/benchmarking.rs b/pallets/distance/src/benchmarking.rs
index eb181d4c06f894efc6fb9ef6245ea38621c5cc4c..9fbbd324274ef3d9eea757fee398d190bf909fbb 100644
--- a/pallets/distance/src/benchmarking.rs
+++ b/pallets/distance/src/benchmarking.rs
@@ -28,6 +28,10 @@ use sp_runtime::Perbill;
 
 use crate::Pallet;
 
+fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) {
+    frame_system::Pallet::<T>::assert_has_event(generic_event.into());
+}
+
 fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> {
     EvaluationPool0::<T>::mutate(|current_pool| -> Result<(), &'static str> {
         for j in 0..i {
@@ -53,7 +57,8 @@ 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, 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 {
         let digest_data = sp_consensus_babe::digests::PreDigest::SecondaryPlain(
@@ -66,19 +71,26 @@ benchmarks! {
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
         let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?;
     }: _<T::RuntimeOrigin>(RawOrigin::None.into(), ComputationResult{distances: vec![Perbill::one(); i as usize]})
+    verify {
+        assert_has_event::<T>(Event::<T>::EvaluationUpdated { evaluator: caller }.into());
+    }
     force_update_evaluation {
             let idty = T::IdtyIndex::one();
             let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
             let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
             let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?;
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), caller, ComputationResult{distances: vec![Perbill::one(); i as usize]})
+    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), caller.clone(), ComputationResult{distances: vec![Perbill::one(); i as usize]})
+    verify {
+        assert_has_event::<T>(Event::<T>::EvaluationUpdated { evaluator: caller }.into());
+    }
     force_set_distance_status {
             let idty = T::IdtyIndex::one();
             let caller: T::AccountId  = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key;
             let status = Some((caller.clone(), DistanceStatus::Valid));
-    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), idty, status)
+    }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), idty, status.clone())
     verify {
         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 {
         DidUpdate::<T>::set(true);
diff --git a/pallets/distance/src/lib.rs b/pallets/distance/src/lib.rs
index d467368e64279f860adddb0563c16f092a143854..62a33b4fa55f7915a41d2c940b95d7b0306a4705 100644
--- a/pallets/distance/src/lib.rs
+++ b/pallets/distance/src/lib.rs
@@ -77,7 +77,9 @@ pub mod pallet {
         type MinAccessibleReferees: Get<Perbill>;
         /// Number of session to keep a positive evaluation result
         type ResultExpiration: Get<u32>;
-        // /// Type representing the weight of this pallet
+        /// The overarching event type.
+        type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
+        /// Type representing the weight of this pallet
         type WeightInfo: WeightInfo;
     }
 
@@ -160,20 +162,44 @@ pub mod pallet {
     //   storage_id + 1 => receives results
     //   storage_id + 2 => receives new identities
     // (this avoids problems for session_index < 3)
+    //
+
+    #[pallet::event]
+    #[pallet::generate_deposit(pub(super) fn deposit_event)]
+    pub enum Event<T: Config> {
+        /// A distance evaluation was requested.
+        EvaluationRequested {
+            idty_index: T::IdtyIndex,
+            who: T::AccountId,
+        },
+        /// A distance evaluation was updated.
+        EvaluationUpdated { evaluator: T::AccountId },
+        /// A distance status was forced.
+        EvaluationStatusForced {
+            idty_index: T::IdtyIndex,
+            status: Option<(<T as frame_system::Config>::AccountId, DistanceStatus)>,
+        },
+    }
 
     // ERRORS //
 
     #[pallet::error]
     pub enum Error<T> {
+        /// Distance is already under evaluation.
         AlreadyInEvaluation,
-        CannotReserve,
-        ManyEvaluationsByAuthor,
-        ManyEvaluationsInBlock,
+        /// Too many evaluations requested by author.
+        TooManyEvaluationsByAuthor,
+        /// Too many evaluations for this block.
+        TooManyEvaluationsInBlock,
+        /// No author for this block.
         NoAuthor,
+        /// Caller has no identity.
         NoIdentity,
-        NonEligibleForEvaluation,
+        /// Evaluation queue is full.
         QueueFull,
+        /// Too many evaluators in the current evaluation pool.
         TooManyEvaluators,
+        /// Evaluation result has a wrong length.
         WrongResultLength,
     }
 
@@ -208,7 +234,8 @@ pub mod pallet {
                 pallet_identity::IdentityIndexOf::<T>::get(&who).ok_or(Error::<T>::NoIdentity)?;
 
             ensure!(
-                IdentityDistanceStatus::<T>::get(idty).is_none(),
+                IdentityDistanceStatus::<T>::get(idty)
+                    != Some((who.clone(), DistanceStatus::Pending)),
                 Error::<T>::AlreadyInEvaluation
             );
 
@@ -226,7 +253,7 @@ pub mod pallet {
             ensure_none(origin)?;
             ensure!(
                 !DidUpdate::<T>::exists(),
-                Error::<T>::ManyEvaluationsInBlock,
+                Error::<T>::TooManyEvaluationsInBlock,
             );
             let author = pallet_authorship::Pallet::<T>::author().ok_or(Error::<T>::NoAuthor)?;
 
@@ -265,15 +292,20 @@ pub mod pallet {
         ) -> DispatchResult {
             ensure_root(origin)?;
 
-            IdentityDistanceStatus::<T>::set(identity, status);
+            IdentityDistanceStatus::<T>::set(identity, status.clone());
             DistanceStatusExpireOn::<T>::mutate(
                 pallet_session::CurrentIndex::<T>::get() + T::ResultExpiration::get(),
                 move |identities| {
                     identities
                         .try_push(identity)
-                        .map_err(|_| Error::<T>::ManyEvaluationsInBlock.into())
+                        .map_err(|_| Error::<T>::TooManyEvaluationsInBlock)
                 },
-            )
+            )?;
+            Self::deposit_event(Event::EvaluationStatusForced {
+                idty_index: identity,
+                status,
+            });
+            Ok(())
         }
     }
 
@@ -292,7 +324,7 @@ pub mod pallet {
                 move |identities| {
                     identities
                         .try_push(identity)
-                        .map_err(|_| Error::<T>::ManyEvaluationsInBlock.into())
+                        .map_err(|_| Error::<T>::TooManyEvaluationsInBlock.into())
                 },
             )
         }
@@ -381,13 +413,16 @@ pub mod pallet {
                         .try_push((idty_index, median::MedianAcc::new()))
                         .map_err(|_| Error::<T>::QueueFull)?;
 
-                    IdentityDistanceStatus::<T>::insert(idty_index, (who, DistanceStatus::Pending));
+                    IdentityDistanceStatus::<T>::insert(
+                        idty_index,
+                        (&who, DistanceStatus::Pending),
+                    );
 
                     DistanceStatusExpireOn::<T>::mutate(
                         pallet_session::CurrentIndex::<T>::get() + T::ResultExpiration::get(),
                         move |identities| identities.try_push(idty_index).ok(),
                     );
-
+                    Self::deposit_event(Event::EvaluationRequested { idty_index, who });
                     Ok(())
                 },
             )
@@ -405,7 +440,7 @@ pub mod pallet {
 
                 if result_pool
                     .evaluators
-                    .try_insert(evaluator)
+                    .try_insert(evaluator.clone())
                     .map_err(|_| Error::<T>::TooManyEvaluators)?
                 {
                     for (distance_value, (_identity, median_acc)) in computation_result
@@ -416,9 +451,10 @@ pub mod pallet {
                         median_acc.push(distance_value);
                     }
 
+                    Self::deposit_event(Event::EvaluationUpdated { evaluator });
                     Ok(())
                 } else {
-                    Err(Error::<T>::ManyEvaluationsByAuthor.into())
+                    Err(Error::<T>::TooManyEvaluationsByAuthor.into())
                 }
             })
         }
@@ -444,24 +480,23 @@ pub mod pallet {
                         MedianResult::One(m) => m,
                         MedianResult::Two(m1, m2) => m1 + (m2 - m1) / 2, // Avoid overflow (since max is 1)
                     };
-                    if median >= T::MinAccessibleReferees::get() {
-                        IdentityDistanceStatus::<T>::mutate(idty, |entry| {
-                            entry.as_mut().map(|(account_id, status)| {
+                    IdentityDistanceStatus::<T>::mutate(idty, |entry| {
+                        if let Some((account_id, status)) = entry.as_mut() {
+                            if median >= T::MinAccessibleReferees::get() {
                                 T::Currency::unreserve(
                                     account_id,
                                     <T as Config>::EvaluationPrice::get(),
                                 );
                                 *status = DistanceStatus::Valid;
-                            })
-                        });
-                    } else if let Some((account_id, _status)) =
-                        IdentityDistanceStatus::<T>::take(idty)
-                    {
-                        <T as Config>::Currency::slash_reserved(
-                            &account_id,
-                            <T as Config>::EvaluationPrice::get(),
-                        );
-                    }
+                            } else {
+                                T::Currency::slash_reserved(
+                                    account_id,
+                                    <T as Config>::EvaluationPrice::get(),
+                                );
+                                *status = DistanceStatus::Invalid;
+                            }
+                        }
+                    });
                 } else if let Some((account_id, _status)) = IdentityDistanceStatus::<T>::take(idty)
                 {
                     <T as Config>::Currency::unreserve(
diff --git a/pallets/distance/src/mock.rs b/pallets/distance/src/mock.rs
index 5d580b13782a6b461c8b6154051b18566a1cafc5..17071e729f532f0e6295cfd9ada61b92537919b6 100644
--- a/pallets/distance/src/mock.rs
+++ b/pallets/distance/src/mock.rs
@@ -63,7 +63,7 @@ frame_support::construct_runtime!(
         AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>},
         Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
         Identity: pallet_identity::{Pallet, Call, Storage, Config<T>, Event<T>},
-        Distance: pallet_distance::{Pallet, Call, Storage},
+        Distance: pallet_distance::{Pallet, Call, Storage, Event<T>},
     }
 );
 
@@ -255,6 +255,7 @@ impl pallet_distance::Config for Test {
     type EvaluationPrice = frame_support::traits::ConstU64<1000>;
     type MinAccessibleReferees = MinAccessibleReferees;
     type ResultExpiration = frame_support::traits::ConstU32<720>;
+    type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
 }
 
diff --git a/pallets/distance/src/types.rs b/pallets/distance/src/types.rs
index 8a3613344fd711661fefd1ff854c3dae71b41dab..95ab967e2476983ea4b8f9b87ae23b8b3fb329b3 100644
--- a/pallets/distance/src/types.rs
+++ b/pallets/distance/src/types.rs
@@ -28,6 +28,8 @@ pub enum DistanceStatus {
     Pending,
     /// Identity respects the distance
     Valid,
+    /// Identity doesn't respect the distance
+    Invalid,
 }
 
 /// Pool where distance evaluation requests and results are stored
diff --git a/pallets/duniter-account/src/lib.rs b/pallets/duniter-account/src/lib.rs
index d7c5127bc1b23d97abc9c1385837589e37259372..93964997e6e7323bf58d1ee2029ec91323ff0e33 100644
--- a/pallets/duniter-account/src/lib.rs
+++ b/pallets/duniter-account/src/lib.rs
@@ -176,22 +176,19 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config> {
-        /// Force the destruction of an account because its free balance is insufficient to pay
-        /// the account creation price.
-        /// [who, balance]
+        /// Forced destruction of an account due to insufficient free balance to cover the account creation price.
         ForceDestroy {
             who: T::AccountId,
             balance: T::Balance,
         },
-        /// Random id assigned
-        /// [account_id, random_id]
+        /// A random ID has been assigned to the account.
         RandomIdAssigned { who: T::AccountId, random_id: H256 },
         /// account linked to identity
         AccountLinked {
             who: T::AccountId,
             identity: IdtyIdOf<T>,
         },
-        /// account unlinked from identity
+        /// The account was unlinked from its identity.
         AccountUnlinked(T::AccountId),
     }
 
diff --git a/pallets/duniter-wot/src/lib.rs b/pallets/duniter-wot/src/lib.rs
index bdede1716423f9b0e86607597760072abafb37ba..7f017280c671e4eed886346b7ffe689fdc65b8b9 100644
--- a/pallets/duniter-wot/src/lib.rs
+++ b/pallets/duniter-wot/src/lib.rs
@@ -107,29 +107,31 @@ pub mod pallet {
 
     #[pallet::error]
     pub enum Error<T, I = ()> {
-        /// Not enough certifications received to claim membership
+        /// Insufficient certifications received to claim membership.
         NotEnoughCertsToClaimMembership,
-        /// Distance has not been evaluated positively
-        DistanceNotOK,
-        /// Identity not allowed to request membership
+        /// Distance is invalid.
+        DistanceIsInvalid,
+        /// Distance is not evaluated.
+        DistanceNotEvaluated,
+        /// Identity is not allowed to request membership.
         IdtyNotAllowedToRequestMembership,
-        /// Identity not allowed to renew membership
+        /// Identity not allowed to renew membership.
         IdtyNotAllowedToRenewMembership,
-        /// Identity creation period not respected
+        /// Identity creation period not respected.
         IdtyCreationPeriodNotRespected,
-        /// Not enough received certifications to create identity
+        /// Insufficient received certifications to create identity.
         NotEnoughReceivedCertsToCreateIdty,
-        /// Max number of emitted certs reached
+        /// Maximum number of emitted certifications reached.
         MaxEmittedCertsReached,
-        /// Not allowed to change identity address
+        /// Not allowed to change identity address.
         NotAllowedToChangeIdtyAddress,
-        /// Not allowed to remove identity
+        /// Not allowed to remove identity.
         NotAllowedToRemoveIdty,
-        /// Issuer can not emit cert because it is not validated
+        /// Issuer cannot emit a certification because it is not validated.
         IssuerCanNotEmitCert,
-        /// Can not issue cert to identity without membership or pending membership
+        /// Cannot issue a certification to an identity without membership or pending membership.
         CertToUndefined,
-        /// Issuer or receiver not found
+        /// Issuer or receiver not found.
         IdtyNotFound,
     }
 }
@@ -296,10 +298,7 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::CheckMembershipCallAllowed
             idty_cert_meta.received_count >= T::MinCertForMembership::get(),
             Error::<T, I>::NotEnoughCertsToClaimMembership
         );
-        ensure!(
-            T::IsDistanceOk::is_distance_ok(idty_index),
-            Error::<T, I>::DistanceNotOK,
-        );
+        T::IsDistanceOk::is_distance_ok(idty_index)?;
         Ok(())
     }
 
@@ -310,10 +309,7 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::CheckMembershipCallAllowed
                 idty_value.status == IdtyStatus::Validated,
                 Error::<T, I>::IdtyNotAllowedToRenewMembership
             );
-            ensure!(
-                T::IsDistanceOk::is_distance_ok(idty_index),
-                Error::<T, I>::DistanceNotOK,
-            );
+            T::IsDistanceOk::is_distance_ok(idty_index)?;
         } else {
             return Err(Error::<T, I>::IdtyNotFound.into());
         }
@@ -328,25 +324,18 @@ where
 {
     fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) {
         match membership_event {
-            sp_membership::Event::<IdtyIndex>::MembershipAcquired(idty_index) => {
+            sp_membership::Event::<IdtyIndex>::MembershipAdded(idty_index) => {
                 if !T::IsSubWot::get() {
                     // when membership is acquired, validate identity
                     // (only used on first membership acquiry)
                     pallet_identity::Pallet::<T>::try_validate_identity(*idty_index);
                 }
             }
-            sp_membership::Event::<IdtyIndex>::MembershipExpired(_) => {}
-            // Membership revocation cases:
-            // - Triggered by main identity removal: the underlying identity will be removed by the
-            // caller.
-            // - Triggered by the membership pallet: it's only possible for a sub-wot, so we
-            // should not remove the underlying identity
-            // So, in any case, we must do nothing
-            sp_membership::Event::<IdtyIndex>::MembershipRevoked(_) => {}
+            sp_membership::Event::<IdtyIndex>::MembershipRemoved(_) => {}
             sp_membership::Event::<IdtyIndex>::MembershipRenewed(_) => {}
-            sp_membership::Event::<IdtyIndex>::MembershipRequested(_) => {}
+            sp_membership::Event::<IdtyIndex>::PendingMembershipAdded(_) => {}
             sp_membership::Event::<IdtyIndex>::PendingMembershipExpired(idty_index) => {
-                Self::dispatch_idty_call(pallet_identity::Call::remove_identity {
+                Self::dispatch_idty_call(pallet_identity::Call::force_remove_identity {
                     idty_index: *idty_index,
                     idty_name: None,
                     reason: pallet_identity::IdtyRemovalReason::Other(
diff --git a/pallets/duniter-wot/src/tests.rs b/pallets/duniter-wot/src/tests.rs
index 24d0a2c148ab651b50368564fc0ae709d3ead5d7..71a58f5e4ef3cbea37e436063299ff0486c46a3a 100644
--- a/pallets/duniter-wot/src/tests.rs
+++ b/pallets/duniter-wot/src/tests.rs
@@ -24,6 +24,7 @@ use pallet_identity::{
     IdtyIndexAccountIdPayload, IdtyName, IdtyStatus, RevocationPayload,
     NEW_OWNER_KEY_PAYLOAD_PREFIX, REVOCATION_PAYLOAD_PREFIX,
 };
+use pallet_membership::MembershipRemovalReason;
 use sp_runtime::testing::TestSignature;
 
 /// test that genesis builder creates the good number of identities
@@ -83,7 +84,12 @@ fn test_join_smiths() {
             4
         ),));
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipRequested(4),
+            pallet_membership::Event::PendingMembershipAdded {
+                member: 4,
+                expire_on: 2
+                    + <Test as pallet_membership::Config<Instance2>>::PendingMembershipPeriod::get(
+                    ),
+            },
         ));
 
         // Then, Alice should be able to send a smith cert to Dave
@@ -98,7 +104,11 @@ fn test_join_smiths() {
         run_to_block(4);
         assert_ok!(SmithMembership::claim_membership(RuntimeOrigin::signed(4),));
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipAcquired(4),
+            pallet_membership::Event::MembershipAdded {
+                member: 4,
+                expire_on: 4
+                    + <Test as pallet_membership::Config<Instance2>>::MembershipPeriod::get(),
+            },
         ));
     });
 }
@@ -110,7 +120,10 @@ fn test_smith_certs_expirations_should_expire_smith_membership() {
         // After block #10, alice membership should be revoked due to smith certs expiration
         run_to_block(10);
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipExpired(1),
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
     });
 }
@@ -172,18 +185,16 @@ fn test_create_idty_ok() {
 
         // Alice should be able to create an identity at block #2
         assert_ok!(Identity::create_identity(RuntimeOrigin::signed(1), 6));
-        // 2 events should have occurred: IdtyCreated and NewCert
+        // 2 events should have occurred: IdtyCreated and CertAdded
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyCreated {
                 idty_index: 6,
                 owner_key: 6,
             },
         ));
-        System::assert_has_event(RuntimeEvent::Cert(pallet_certification::Event::NewCert {
+        System::assert_has_event(RuntimeEvent::Cert(pallet_certification::Event::CertAdded {
             issuer: 1,
-            issuer_issued_count: 5,
             receiver: 6,
-            receiver_received_count: 1,
         }));
 
         assert_eq!(Identity::identity(6).unwrap().status, IdtyStatus::Created);
@@ -209,11 +220,9 @@ fn test_new_idty_validation() {
         // Bob should be able to certify Ferdie
         run_to_block(4);
         assert_ok!(Cert::add_cert(RuntimeOrigin::signed(2), 2, 6));
-        System::assert_has_event(RuntimeEvent::Cert(pallet_certification::Event::NewCert {
+        System::assert_has_event(RuntimeEvent::Cert(pallet_certification::Event::CertAdded {
             issuer: 2,
-            issuer_issued_count: 5,
             receiver: 6,
-            receiver_received_count: 2,
         }));
 
         // Ferdie should not be able to claim membership
@@ -226,7 +235,11 @@ fn test_new_idty_validation() {
         run_to_block(5);
         assert_ok!(Identity::validate_identity(RuntimeOrigin::signed(42), 6));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipAcquired(6),
+            pallet_membership::Event::MembershipAdded {
+                member: 6,
+                expire_on: 5
+                    + <Test as pallet_membership::Config<Instance1>>::MembershipPeriod::get(),
+            },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyValidated { idty_index: 6 },
@@ -265,7 +278,12 @@ fn test_confirm_idty_ok() {
             IdtyName::from("Ferdie"),
         ));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipRequested(6),
+            pallet_membership::Event::PendingMembershipAdded {
+                member: 6,
+                expire_on: 3
+                    + <Test as pallet_membership::Config<Instance1>>::PendingMembershipPeriod::get(
+                    ),
+            },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyConfirmed {
@@ -349,7 +367,10 @@ fn test_idty_membership_expire() {
         assert!(Membership::membership(3).is_none());
 
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(3),
+            pallet_membership::Event::MembershipRemoved {
+                member: 3,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
         // membership expiry should not trigger identity removal
         assert!(!System::events().iter().any(|record| record.event
@@ -365,7 +386,7 @@ fn test_idty_membership_expire() {
         // then pending membership should expire and identity should finally be removed
         run_to_block(11);
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::PendingMembershipExpired(3),
+            pallet_membership::Event::PendingMembershipExpired { member: 3 },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyRemoved {
@@ -443,17 +464,18 @@ fn test_certification_expire() {
         run_to_block(10);
         // println!("{:?}", System::events());
         System::assert_has_event(RuntimeEvent::SmithCert(
-            pallet_certification::Event::RemovedCert {
-                issuer: 2,                  // Bob
-                issuer_issued_count: 1,     // Bob → Charlie only
-                receiver: 1,                // Alice
-                receiver_received_count: 1, // Charlie → Alice only
+            pallet_certification::Event::CertRemoved {
+                issuer: 2,   // Bob
+                receiver: 1, // Alice
                 expiration: true,
             },
         ));
         // in consequence, since Alice has only 1/2 smith certification remaining, she looses smith membership
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipExpired(1),
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
 
         // --- BLOCK 14 ---
@@ -466,17 +488,18 @@ fn test_certification_expire() {
         run_to_block(20);
         // println!("{:?}", System::events());
         System::assert_has_event(RuntimeEvent::Cert(
-            pallet_certification::Event::RemovedCert {
-                issuer: 2,                  // Bob
-                issuer_issued_count: 1,     // Bob → Charlie
-                receiver: 1,                // Alice
-                receiver_received_count: 1, // Charlie → Alice
+            pallet_certification::Event::CertRemoved {
+                issuer: 2,   // Bob
+                receiver: 1, // Alice
                 expiration: true,
             },
         ));
         // in consequence, since Alice has only 1/2 normal certification remaining, she looses normal membership
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(1),
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
 
         // --- BLOCK 21 ---
@@ -502,7 +525,7 @@ fn test_certification_expire() {
         // println!("{:?}", System::events());
         // after a delay (3 blocks), the pending membership finally expires
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::PendingMembershipExpired(1),
+            pallet_membership::Event::PendingMembershipExpired { member: 1 },
         ));
         // and the identity is removed
         System::assert_has_event(RuntimeEvent::Identity(
@@ -555,17 +578,18 @@ fn test_cert_can_not_be_issued() {
         run_to_block(10);
         // println!("{:?}", System::events());
         System::assert_has_event(RuntimeEvent::SmithCert(
-            pallet_certification::Event::RemovedCert {
-                issuer: 2,                  // Bob
-                issuer_issued_count: 1,     // Bob → Charlie only
-                receiver: 1,                // Alice
-                receiver_received_count: 1, // Charlie → Alice only
+            pallet_certification::Event::CertRemoved {
+                issuer: 2,   // Bob
+                receiver: 1, // Alice
                 expiration: true,
             },
         ));
         // in consequence, since Alice has only 1/2 smith certification remaining, she looses smith membership
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipExpired(1),
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
 
         run_to_block(11);
@@ -602,18 +626,19 @@ fn test_cert_can_not_be_issued() {
         run_to_block(20);
         // println!("{:?}", System::events());
         System::assert_has_event(RuntimeEvent::Cert(
-            pallet_certification::Event::RemovedCert {
-                issuer: 2,                  // Bob
-                issuer_issued_count: 2,     // depends of the order of cert expiration
-                receiver: 1,                // Alice
-                receiver_received_count: 2, // depends of the order of cert expiration
+            pallet_certification::Event::CertRemoved {
+                issuer: 2,   // Bob
+                receiver: 1, // Alice
                 expiration: true,
             },
         ));
         // other certifications expire, but not Dave → Alice
         // in consequence, since Alice has only 1/2 certification remaining, she looses membership
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(1), // pending membership expires at 23
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            }, // pending membership expires at 23
         ));
 
         run_to_block(21);
diff --git a/pallets/duniter-wot/src/traits.rs b/pallets/duniter-wot/src/traits.rs
index 7c3d7b220a2f46a68bfdef90e19e8420e3b5a219..6934ce454bdf2c1cbc318158ba8647671804dca7 100644
--- a/pallets/duniter-wot/src/traits.rs
+++ b/pallets/duniter-wot/src/traits.rs
@@ -14,14 +14,16 @@
 // 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/>.
 
+use crate::DispatchError;
+
 pub trait IsDistanceOk<IdtyId> {
-    fn is_distance_ok(idty_id: &IdtyId) -> bool;
+    fn is_distance_ok(idty_id: &IdtyId) -> Result<(), DispatchError>;
 }
 
 pub struct DistanceAlwaysOk;
 
 impl<IdtyId> IsDistanceOk<IdtyId> for DistanceAlwaysOk {
-    fn is_distance_ok(_idty_id: &IdtyId) -> bool {
-        true
+    fn is_distance_ok(_idty_id: &IdtyId) -> Result<(), DispatchError> {
+        Ok(())
     }
 }
diff --git a/pallets/identity/src/benchmarking.rs b/pallets/identity/src/benchmarking.rs
index 735f40c0ec3a8d1daa5ef1da37f4c70d5a74337e..2ec4a1352222780f506d2b14baf263b1f707f9df 100644
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -225,7 +225,7 @@ benchmarks! {
         assert!(IdentityIndexOf::<T>::get(&account.key).is_none(), "Identity not revoked");
     }
 
-    remove_identity {
+    force_remove_identity {
         let new_identity: T::AccountId = account("new_identity", 2, SEED);
         let account: Account<T> = create_one_identity(new_identity)?;
         let identities = Pallet::<T>::identities_count();
diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs
index 87d929f5cbc680f6dbff9d8d064e51cb8e4354ee..e60ab74ace75e67907a355c6831fd93e4e45f990 100644
--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -239,28 +239,24 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config> {
-        /// A new identity has been created
-        /// [idty_index, owner_key]
+        /// A new identity has been created.
         IdtyCreated {
             idty_index: T::IdtyIndex,
             owner_key: T::AccountId,
         },
-        /// An identity has been confirmed by its owner
-        /// [idty_index, owner_key, name]
+        /// An identity has been confirmed by its owner.
         IdtyConfirmed {
             idty_index: T::IdtyIndex,
             owner_key: T::AccountId,
             name: IdtyName,
         },
-        /// An identity has been validated
-        /// [idty_index]
+        /// An identity has been validated.
         IdtyValidated { idty_index: T::IdtyIndex },
         IdtyChangedOwnerKey {
             idty_index: T::IdtyIndex,
             new_owner_key: T::AccountId,
         },
-        /// An identity has been removed
-        /// [idty_index]
+        /// An identity has been removed.
         IdtyRemoved {
             idty_index: T::IdtyIndex,
             reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>,
@@ -555,9 +551,9 @@ pub mod pallet {
         }
 
         #[pallet::call_index(5)]
-        #[pallet::weight(T::WeightInfo::remove_identity())]
+        #[pallet::weight(T::WeightInfo::force_remove_identity())]
         /// remove an identity from storage
-        pub fn remove_identity(
+        pub fn force_remove_identity(
             origin: OriginFor<T>,
             idty_index: T::IdtyIndex,
             idty_name: Option<IdtyName>,
@@ -646,48 +642,34 @@ pub mod pallet {
 
     #[pallet::error]
     pub enum Error<T> {
-        /// Identity already confirmed
+        /// Identity already confirmed.
         IdtyAlreadyConfirmed,
-        /// Identity already created
+        /// Identity already created.
         IdtyAlreadyCreated,
-        /// Identity already validated
+        /// Identity already validated.
         IdtyAlreadyValidated,
-        /// You are not allowed to create a new identity now
-        IdtyCreationNotAllowed,
-        /// Identity index not found
+        /// Identity index not found.
         IdtyIndexNotFound,
-        /// Identity name already exists
+        /// Identity name already exists.
         IdtyNameAlreadyExist,
-        /// Invalid identity name
+        /// Invalid identity name.
         IdtyNameInvalid,
-        /// Identity not confirmed by its owner
+        /// Identity not confirmed by its owner.
         IdtyNotConfirmedByOwner,
-        /// Identity not found
+        /// Identity not found.
         IdtyNotFound,
-        /// Identity not member
-        IdtyNotMember,
-        /// Identity not validated
-        IdtyNotValidated,
-        /// Identity not yet renewable
-        IdtyNotYetRenewable,
-        /// payload signature is invalid
+        /// Invalid payload signature.
         InvalidSignature,
-        /// Revocation key is invalid
+        /// Invalid revocation key.
         InvalidRevocationKey,
-        /// Identity creation period is not respected
+        /// Identity creation period is not respected.
         NotRespectIdtyCreationPeriod,
-        /// Not the same identity name
-        NotSameIdtyName,
-        /// Owner key already recently changed
+        /// Owner key already changed recently.
         OwnerKeyAlreadyRecentlyChanged,
-        /// Owner key already used
+        /// Owner key already used.
         OwnerKeyAlreadyUsed,
-        /// Prohibited to revert to an old key
+        /// Reverting to an old key is prohibited.
         ProhibitedToRevertToAnOldKey,
-        /// Right already added
-        RightAlreadyAdded,
-        /// Right does not exist
-        RightNotExist,
     }
 
     // PUBLIC FUNCTIONS //
diff --git a/pallets/identity/src/weights.rs b/pallets/identity/src/weights.rs
index 266b0eb51929e2ba55692dc9bcbbd7e63d7754be..729d3a8ef0343105ca762fc0dc0de8207532a5cd 100644
--- a/pallets/identity/src/weights.rs
+++ b/pallets/identity/src/weights.rs
@@ -25,7 +25,7 @@ pub trait WeightInfo {
     fn validate_identity() -> Weight;
     fn change_owner_key() -> Weight;
     fn revoke_identity() -> Weight;
-    fn remove_identity() -> Weight;
+    fn force_remove_identity() -> Weight;
     fn prune_item_identities_names(i: u32) -> Weight;
     fn fix_sufficients() -> Weight;
     fn link_account() -> Weight;
@@ -120,7 +120,7 @@ impl WeightInfo for () {
     // Storage: Parameters ParametersStorage (r:1 w:0)
     // Storage: Identity IdentityIndexOf (r:0 w:1)
     // Storage: Identity IdentitiesNames (r:0 w:1)
-    fn remove_identity() -> Weight {
+    fn force_remove_identity() -> Weight {
         // Minimum execution time: 302_574 nanoseconds.
         Weight::from_parts(504_132_000 as u64, 0)
             .saturating_add(RocksDbWeight::get().reads(9 as u64))
diff --git a/pallets/membership/README.md b/pallets/membership/README.md
index ff9c1f0c69c70bcfe38f02089d35027824680f98..116b2addd9d736c6452d4dc3dcbe83f1959c62de 100644
--- a/pallets/membership/README.md
+++ b/pallets/membership/README.md
@@ -1,3 +1,25 @@
 # Duniter membership pallet
 
-Duniter membership is related to duniter Web of Trust and more specific than [parity membership pallet](https://github.com/paritytech/substrate/tree/master/frame/membership). It is used only internally by the identity, WoT, and distance pallets. In particular, it is adding the concept of "pending membership" which is an intermediate state where the identity is waiting to become member.
\ No newline at end of file
+Duniter membership is related to duniter Web of Trust and more specific than [parity membership pallet](https://github.com/paritytech/substrate/tree/master/frame/membership). It is used only internally by the identity, WoT, and distance pallets. In particular, it is adding the concept of "pending membership" which is an intermediate state where the identity is waiting to become member.
+
+## Main Web of Trust
+
+When used in conjunction with the main Web of Trust, the membership pallet is combined with the Duniter-WoT pallet and the identity pallet, resulting in the following functionality:
+
+- `request_membership` is automatically invoked when confirming identity and should not be called manually. It will add the identity to the pending membership.
+- `claim_membership` is automatically triggered during identity validation and should not be manually invoked. This process requires a pending membership, sufficient membership certificates, and a valid distance. Membership is granted upon successful completion of these requirements.
+- `renew_membership` requires a valid membership and a valid distance status to extend the validity period of a membership.
+- `revoke_membership` is automatically executed when a membership expires and should not be called manually.
+
+In practice, a new user creates an account, confirms identity using the `confirm_identity` call from the identity pallet, and is added to the pending membership. The user then validates it identity using the `validate_identity` call from the identity pallet, triggering a membership claim. If the certification and distance requirements are met, the identity is granted membership.
+
+## Sub Web of Trust Smith
+
+Functionality related to the Smith Web of Trust involves the following:
+
+- `request_membership` requires a validated identity for the member to be added to the pending membership.
+- `claim_membership` requires a pending membership, sufficient smith certificates, and a valid distance status for the identity to be included among the authority members.
+- `renew_membership` needs a valid membership and a valid distance status to extend the membership's validity period.
+- `revoke_membership` requires a valid origin to revoke the membership.
+
+In practice, a user must complete all steps to gain membership in the main Web Of Trust. They can then manually request smith membership using the `request_membership` call of the membership pallet. The membership can be claimed using the `claim_membership` call from the membership pallet, and if the identity meets smith certificate and distance requirements, it will be added to the authority members.
\ No newline at end of file
diff --git a/pallets/membership/src/benchmarking.rs b/pallets/membership/src/benchmarking.rs
index 8a7aacc71247fbcfbbfbf12f6a30ee1dacb47991..f389dd5966c8673cddbf02cab6286c737d250e68 100644
--- a/pallets/membership/src/benchmarking.rs
+++ b/pallets/membership/src/benchmarking.rs
@@ -22,7 +22,7 @@ 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;
+use sp_runtime::traits::{Convert, One};
 
 #[cfg(test)]
 use maplit::btreemap;
@@ -53,7 +53,7 @@ benchmarks_instance_pallet! {
     }
     verify {
         if T::CheckMembershipCallAllowed::check_idty_allowed_to_request_membership(&idty).is_ok() {
-            assert_has_event::<T, I>(Event::<T, I>::MembershipRequested(idty).into());
+            assert_has_event::<T, I>(Event::<T, I>::PendingMembershipAdded{member: idty, expire_on: BlockNumberFor::<T>::one() + T::PendingMembershipPeriod::get()}.into());
         }
     }
     claim_membership {
@@ -65,7 +65,7 @@ benchmarks_instance_pallet! {
         T::BenchmarkSetupHandler::force_status_ok(&idty, &caller);
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::MembershipAcquired(idty).into());
+        assert_has_event::<T, I>(Event::<T, I>::MembershipAdded{member: idty, expire_on: BlockNumberFor::<T>::one() + T::MembershipPeriod::get()}.into());
     }
     renew_membership {
         let idty: T::IdtyId = 3.into();
@@ -74,7 +74,7 @@ benchmarks_instance_pallet! {
         T::BenchmarkSetupHandler::force_status_ok(&idty, &caller);
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::MembershipRenewed(idty).into());
+        assert_has_event::<T, I>(Event::<T, I>::MembershipAdded{member: idty, expire_on: BlockNumberFor::<T>::one() + T::MembershipPeriod::get()}.into());
     }
     revoke_membership {
         let idty: T::IdtyId = 3.into();
@@ -82,7 +82,7 @@ benchmarks_instance_pallet! {
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
     }: _<T::RuntimeOrigin>(caller_origin)
     verify {
-        assert_has_event::<T, I>(Event::<T, I>::MembershipRevoked(idty).into());
+        assert_has_event::<T, I>(Event::<T, I>::MembershipRemoved{member: idty, reason: MembershipRemovalReason::Revoked}.into());
     }
     // Base weight of an empty initialize
     on_initialize {
diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs
index 420fcf0ce434e815c7f3ce83953989c45b7f286f..d582576991b0622fc22fe587acf089707f388afa 100644
--- a/pallets/membership/src/lib.rs
+++ b/pallets/membership/src/lib.rs
@@ -54,6 +54,12 @@ impl<IdtyId, AccountId> SetupBenchmark<IdtyId, AccountId> for () {
     fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId) -> () {}
 }
 
+#[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)]
+pub enum MembershipRemovalReason {
+    Expired,
+    Revoked,
+}
+
 #[frame_support::pallet]
 pub mod pallet {
     use super::*;
@@ -155,41 +161,38 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config<I>, I: 'static = ()> {
-        /// A membership was acquired
-        /// [idty_id]
-        MembershipAcquired(T::IdtyId),
-        /// A membership expired
-        /// [idty_id]
-        MembershipExpired(T::IdtyId),
-        /// A membership was renewed
-        /// [idty_id]
-        MembershipRenewed(T::IdtyId),
-        /// An membership was requested
-        /// [idty_id]
-        MembershipRequested(T::IdtyId),
-        /// A membership was revoked
-        /// [idty_id]
-        MembershipRevoked(T::IdtyId),
-        /// A pending membership request has expired
-        /// [idty_id]
-        PendingMembershipExpired(T::IdtyId),
+        /// A membership was added.
+        MembershipAdded {
+            member: T::IdtyId,
+            expire_on: BlockNumberFor<T>,
+        },
+        /// A membership was removed.
+        MembershipRemoved {
+            member: T::IdtyId,
+            reason: MembershipRemovalReason,
+        },
+        /// A pending membership was added.
+        PendingMembershipAdded {
+            member: T::IdtyId,
+            expire_on: BlockNumberFor<T>,
+        },
+        /// A pending membership has expired.
+        PendingMembershipExpired { member: T::IdtyId },
     }
 
     // ERRORS//
 
     #[pallet::error]
     pub enum Error<T, I = ()> {
-        /// Identity id not found
+        /// Identity ID not found.
         IdtyIdNotFound,
-        /// Membership already acquired
+        /// Membership already acquired.
         MembershipAlreadyAcquired,
-        /// Membership already requested
+        /// Membership already requested.
         MembershipAlreadyRequested,
-        /// Membership not found
+        /// Membership not found.
         MembershipNotFound,
-        /// Origin not allowed to use this identity
-        OriginNotAllowedToUseIdty,
-        /// Membership request not found
+        /// Membership request not found.
         MembershipRequestNotFound,
     }
 
@@ -256,7 +259,6 @@ pub mod pallet {
             // apply phase
             Self::unschedule_membership_expiry(idty_id, membership_data.expire_on);
             Self::insert_membership_and_schedule_expiry(idty_id);
-            Self::deposit_event(Event::MembershipRenewed(idty_id));
             T::OnEvent::on_event(&sp_membership::Event::MembershipRenewed(idty_id));
 
             Ok(().into())
@@ -323,6 +325,10 @@ pub mod pallet {
 
             Membership::<T, I>::insert(idty_id, MembershipData { expire_on });
             MembershipsExpireOn::<T, I>::append(expire_on, idty_id);
+            Self::deposit_event(Event::MembershipAdded {
+                member: idty_id,
+                expire_on,
+            });
         }
 
         /// perform the membership request
@@ -341,8 +347,11 @@ pub mod pallet {
             // apply membership request
             PendingMembership::<T, I>::insert(idty_id, ());
             PendingMembershipsExpireOn::<T, I>::append(expire_on, idty_id);
-            Self::deposit_event(Event::MembershipRequested(idty_id));
-            T::OnEvent::on_event(&sp_membership::Event::MembershipRequested(idty_id));
+            Self::deposit_event(Event::PendingMembershipAdded {
+                member: idty_id,
+                expire_on,
+            });
+            T::OnEvent::on_event(&sp_membership::Event::PendingMembershipAdded(idty_id));
 
             Ok(().into())
         }
@@ -360,8 +369,7 @@ pub mod pallet {
         fn do_claim_membership(idty_id: T::IdtyId) {
             if PendingMembership::<T, I>::take(idty_id).is_some() {
                 Self::insert_membership_and_schedule_expiry(idty_id);
-                Self::deposit_event(Event::MembershipAcquired(idty_id));
-                T::OnEvent::on_event(&sp_membership::Event::MembershipAcquired(idty_id));
+                T::OnEvent::on_event(&sp_membership::Event::MembershipAdded(idty_id));
             }
             // else { unreachable if check_allowed_to_claim called before }
         }
@@ -370,8 +378,11 @@ pub mod pallet {
         fn do_revoke_membership(idty_id: T::IdtyId) {
             if let Some(membership_data) = Membership::<T, I>::take(idty_id) {
                 Self::unschedule_membership_expiry(idty_id, membership_data.expire_on);
-                Self::deposit_event(Event::MembershipRevoked(idty_id));
-                T::OnEvent::on_event(&sp_membership::Event::MembershipRevoked(idty_id));
+                Self::deposit_event(Event::MembershipRemoved {
+                    member: idty_id,
+                    reason: MembershipRemovalReason::Revoked,
+                });
+                T::OnEvent::on_event(&sp_membership::Event::MembershipRemoved(idty_id));
             }
         }
 
@@ -383,8 +394,11 @@ pub mod pallet {
                 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));
+            Self::deposit_event(Event::MembershipRemoved {
+                member: idty_id,
+                reason: MembershipRemovalReason::Expired,
+            });
+            T::OnEvent::on_event(&sp_membership::Event::MembershipRemoved(idty_id));
         }
 
         /// check the origin and get identity id if valid
@@ -415,7 +429,7 @@ pub mod pallet {
             let mut expired_idty_count = 0u32;
             for idty_id in PendingMembershipsExpireOn::<T, I>::take(block_number) {
                 if PendingMembership::<T, I>::take(idty_id).is_some() {
-                    Self::deposit_event(Event::PendingMembershipExpired(idty_id));
+                    Self::deposit_event(Event::PendingMembershipExpired { member: idty_id });
                     T::OnEvent::on_event(&sp_membership::Event::PendingMembershipExpired(idty_id));
                     expired_idty_count = 0;
                 }
diff --git a/pallets/membership/src/tests.rs b/pallets/membership/src/tests.rs
index a899b4424c20ce2d1b384ad866639e190c5c0e32..dfdd12bc3c7f7b1c73f83c5fbcb5fd0e3154b9e4 100644
--- a/pallets/membership/src/tests.rs
+++ b/pallets/membership/src/tests.rs
@@ -15,6 +15,7 @@
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 use crate::mock::*;
+use crate::MembershipRemovalReason;
 use crate::{Error, Event};
 use frame_support::{assert_noop, assert_ok};
 use maplit::btreemap;
@@ -83,12 +84,15 @@ fn test_membership_expiration() {
         // Membership 0 should expire on block #3
         run_to_block(3);
         assert!(!DefaultMembership::is_member(&0));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipExpired(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRemoved {
+            member: 0,
+            reason: MembershipRemovalReason::Expired,
+        }));
         // it should be added to pending membership and expire on block #6
         run_to_block(6);
-        System::assert_has_event(RtEvent::DefaultMembership(Event::PendingMembershipExpired(
-            0,
-        )));
+        System::assert_has_event(RtEvent::DefaultMembership(
+            Event::PendingMembershipExpired { member: 0 },
+        ));
     });
 }
 
@@ -104,7 +108,10 @@ fn test_membership_renewal() {
         assert_ok!(DefaultMembership::renew_membership(RuntimeOrigin::signed(
             0
         ),));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRenewed(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipAdded {
+            member: 0,
+            expire_on: 2 + <Test as crate::Config>::MembershipPeriod::get(),
+        }));
         // membership should not expire at block 3 to 6 because it has been renewed
         run_to_block(3);
         assert!(DefaultMembership::is_member(&0));
@@ -113,7 +120,10 @@ fn test_membership_renewal() {
         // membership should expire at block 7 (2+5)
         run_to_block(7);
         assert!(!DefaultMembership::is_member(&0));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipExpired(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRemoved {
+            member: 0,
+            reason: MembershipRemovalReason::Expired,
+        }));
     });
 }
 
@@ -142,14 +152,20 @@ fn test_membership_revocation() {
         assert_ok!(DefaultMembership::revoke_membership(RuntimeOrigin::signed(
             0
         ),));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRevoked(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRemoved {
+            member: 0,
+            reason: MembershipRemovalReason::Revoked,
+        }));
 
         // Membership 0 can re-request membership
         run_to_block(5);
         assert_ok!(DefaultMembership::request_membership(
             RuntimeOrigin::signed(0),
         ));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRequested(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::PendingMembershipAdded {
+            member: 0,
+            expire_on: 5 + <Test as crate::Config>::PendingMembershipPeriod::get(),
+        }));
     });
 }
 
@@ -162,7 +178,10 @@ fn test_pending_membership_expiration() {
         assert_ok!(DefaultMembership::request_membership(
             RuntimeOrigin::signed(0),
         ));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRequested(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::PendingMembershipAdded {
+            member: 0,
+            expire_on: 1 + <Test as crate::Config>::PendingMembershipPeriod::get(),
+        }));
 
         // Then, idty 0 shold still in pending memberships until PendingMembershipPeriod ended
         run_to_block(PendingMembershipPeriod::get());
@@ -171,9 +190,9 @@ fn test_pending_membership_expiration() {
         // Then, idty 0 request should expire after PendingMembershipPeriod
         run_to_block(1 + PendingMembershipPeriod::get());
         assert!(!DefaultMembership::is_in_pending_memberships(0));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::PendingMembershipExpired(
-            0,
-        )));
+        System::assert_has_event(RtEvent::DefaultMembership(
+            Event::PendingMembershipExpired { member: 0 },
+        ));
     })
 }
 
@@ -190,14 +209,20 @@ fn test_membership_workflow() {
         assert_ok!(DefaultMembership::request_membership(
             RuntimeOrigin::signed(0),
         ));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRequested(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::PendingMembershipAdded {
+            member: 0,
+            expire_on: 1 + <Test as crate::Config>::PendingMembershipPeriod::get(),
+        }));
 
         // - Then, idty 0 claim membership
         run_to_block(2);
         assert_ok!(DefaultMembership::claim_membership(RuntimeOrigin::signed(
             0
         ),));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipAcquired(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipAdded {
+            member: 0,
+            expire_on: 2 + <Test as crate::Config>::MembershipPeriod::get(),
+        }));
 
         // - Then, idty 0 claim renewal, should success
         run_to_block(2);
@@ -212,6 +237,9 @@ fn test_membership_workflow() {
         // - Then, idty 0 should expire after membership period
         run_to_block(7); // 2 + 5
         assert!(!DefaultMembership::is_member(&0));
-        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipExpired(0)));
+        System::assert_has_event(RtEvent::DefaultMembership(Event::MembershipRemoved {
+            member: 0,
+            reason: MembershipRemovalReason::Expired,
+        }));
     });
 }
diff --git a/pallets/offences/src/lib.rs b/pallets/offences/src/lib.rs
index 02316c4f6d1aa92dc4549de15156b0b5b0f25fe8..f6b30289d9ad283633cb4636a9df800abe748649 100644
--- a/pallets/offences/src/lib.rs
+++ b/pallets/offences/src/lib.rs
@@ -43,7 +43,7 @@ type ReportIdOf<T> = <T as frame_system::Config>::Hash;
 
 pub enum SlashStrategy {
     Disconnect,
-    BlackList,
+    Blacklist,
 }
 
 #[frame_support::pallet]
@@ -95,9 +95,7 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event {
-        /// There is an offence reported of the given `kind` happened at the `session_index` and
-        /// (kind-specific) time slot. This event is not deposited for duplicate slashes.
-        /// \[kind, timeslot\].
+        /// An offense was reported during the specified time slot. This event is not deposited for duplicate slashes.
         Offence {
             kind: Kind,
             timeslot: OpaqueTimeSlot,
@@ -127,7 +125,7 @@ where
         let slash_strategy = if O::ID == *b"im-online:offlin" {
             SlashStrategy::Disconnect
         } else {
-            SlashStrategy::BlackList
+            SlashStrategy::Blacklist
         };
 
         T::OnOffenceHandler::on_offence(
diff --git a/pallets/oneshot-account/src/lib.rs b/pallets/oneshot-account/src/lib.rs
index 5cd932d7d25ca7e74aaec9ff485d86c98cc24a10..acee3cd7aa50be986e44de8049c0834ab0282fa0 100644
--- a/pallets/oneshot-account/src/lib.rs
+++ b/pallets/oneshot-account/src/lib.rs
@@ -74,11 +74,13 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config> {
+        /// A oneshot account was created.
         OneshotAccountCreated {
             account: T::AccountId,
             balance: <T::Currency as Currency<T::AccountId>>::Balance,
             creator: T::AccountId,
         },
+        /// A oneshot account was consumed.
         OneshotAccountConsumed {
             account: T::AccountId,
             dest1: (
@@ -90,6 +92,7 @@ pub mod pallet {
                 <T::Currency as Currency<T::AccountId>>::Balance,
             )>,
         },
+        /// A withdrawal was executed on a oneshot account.
         Withdraw {
             account: T::AccountId,
             balance: <T::Currency as Currency<T::AccountId>>::Balance,
@@ -100,19 +103,19 @@ pub mod pallet {
 
     #[pallet::error]
     pub enum Error<T> {
-        /// Block height is in the future
+        /// Block height is in the future.
         BlockHeightInFuture,
-        /// Block height is too old
+        /// Block height is too old.
         BlockHeightTooOld,
-        /// Destination account does not exist
+        /// Destination account does not exist.
         DestAccountNotExist,
-        /// Destination account has balance less than existential deposit
+        /// Destination account has a balance less than the existential deposit.
         ExistentialDeposit,
-        /// Source account has insufficient balance
+        /// Source account has insufficient balance.
         InsufficientBalance,
-        /// Destination oneshot account already exists
+        /// Destination oneshot account already exists.
         OneshotAccountAlreadyCreated,
-        /// Source oneshot account does not exist
+        /// Source oneshot account does not exist.
         OneshotAccountNotExist,
     }
 
diff --git a/pallets/provide-randomness/src/lib.rs b/pallets/provide-randomness/src/lib.rs
index bc671396043a80d689e83cf8108d985e34ee493e..5cce15f702abab7aa977737757f319044380d5e9 100644
--- a/pallets/provide-randomness/src/lib.rs
+++ b/pallets/provide-randomness/src/lib.rs
@@ -120,12 +120,12 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event {
-        /// Filled randomness
+        /// A request for randomness was fulfilled.
         FilledRandomness {
             request_id: RequestId,
             randomness: H256,
         },
-        /// Requested randomness
+        /// A request for randomness was made.
         RequestedRandomness {
             request_id: RequestId,
             salt: H256,
@@ -137,8 +137,8 @@ pub mod pallet {
 
     #[pallet::error]
     pub enum Error<T> {
-        /// The queue is full, pleasy retry later
-        FullQueue,
+        /// Request randomness queue is full.
+        QueueFull,
     }
 
     // CALLS //
@@ -226,7 +226,7 @@ pub mod pallet {
             // Verify phase
             ensure!(
                 RequestsIds::<T>::count() < T::MaxRequests::get(),
-                Error::<T>::FullQueue
+                Error::<T>::QueueFull
             );
 
             Self::pay_request(requestor)?;
diff --git a/pallets/quota/Cargo.toml b/pallets/quota/Cargo.toml
index 2c96eed66ca14093588744b5fe7e0f0ba59a56a0..efcc0dcfbaeb64d5c2d519d9a66a0e925363fa04 100644
--- a/pallets/quota/Cargo.toml
+++ b/pallets/quota/Cargo.toml
@@ -11,7 +11,10 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ['frame-benchmarking/runtime-benchmarks']
+runtime-benchmarks = [
+    'frame-benchmarking/runtime-benchmarks',
+    'pallet-identity/runtime-benchmarks',
+]
 std = [
     'codec/std',
     'frame-support/std',
diff --git a/pallets/quota/src/lib.rs b/pallets/quota/src/lib.rs
index a2f21df2133475939faec63dde68eb0edb286996..f3a579cb207cd1cefc493f73de460b2deb4b1533 100644
--- a/pallets/quota/src/lib.rs
+++ b/pallets/quota/src/lib.rs
@@ -111,37 +111,28 @@ pub mod pallet {
     #[pallet::event]
     #[pallet::generate_deposit(pub(super) fn deposit_event)]
     pub enum Event<T: Config> {
-        /// Refunded fees to an account
+        /// Transaction fees were refunded.
         Refunded {
             who: T::AccountId,
             identity: IdtyId<T>,
             amount: BalanceOf<T>,
         },
-        // --- the following events let know that an error occured ---
-        /// No quota for identity
+        /// No more quota available for refund.
         NoQuotaForIdty(IdtyId<T>),
-        /// No more currency available for refund
-        // should never happen if the fees are going to the refund account
+        /// No more currency available for refund.
+        /// This scenario should never occur if the fees are intended for the refund account.
         NoMoreCurrencyForRefund,
-        /// Refund failed
-        // for example when account is destroyed
+        /// The refund has failed.
+        /// This scenario should rarely occur, except when the account was destroyed in the interim between the request and the refund.
         RefundFailed(T::AccountId),
-        /// Refund queue full
+        /// Refund queue was full.
         RefundQueueFull,
     }
 
-    // // ERRORS //
-    // #[pallet::error]
-    // pub enum Error<T> {
-    //     // no errors in on_idle
-    //     // instead events are emitted
-    // }
-
-    // // CALLS //
-    // #[pallet::call]
-    // impl<T: Config> Pallet<T> {
-    //     // no calls for this pallet, only automatic processing when idle
-    // }
+    // This pallet only contains the `on_idle` hook and no call.
+    // Hooks are infallible by definition, so there are no error. To monitor no-ops
+    // from inside the quota pallet, we use events as mentioned in
+    // https://substrate.stackexchange.com/questions/9854/emitting-errors-from-hooks-like-on-initialize
 
     // INTERNAL FUNCTIONS //
     impl<T: Config> Pallet<T> {
diff --git a/primitives/membership/src/lib.rs b/primitives/membership/src/lib.rs
index f59fcde5de2c1e15145eea6ecb18bfdb350a73ec..fa5b992f966e939c6d0bc4e5ff198a8b6cfc657d 100644
--- a/primitives/membership/src/lib.rs
+++ b/primitives/membership/src/lib.rs
@@ -28,17 +28,15 @@ use scale_info::TypeInfo;
 use serde::{Deserialize, Serialize};
 
 pub enum Event<IdtyId> {
-    /// A membership has acquired
-    MembershipAcquired(IdtyId),
-    /// A membership has expired
-    MembershipExpired(IdtyId),
-    /// A membership has renewed
+    /// A membership was acquired.
+    MembershipAdded(IdtyId),
+    /// A membership was terminated.
+    MembershipRemoved(IdtyId),
+    /// A membership was renewed.
     MembershipRenewed(IdtyId),
-    /// An identity requested membership
-    MembershipRequested(IdtyId),
-    /// A membership has revoked
-    MembershipRevoked(IdtyId),
-    /// A pending membership request has expired
+    /// A pending membership request was added.
+    PendingMembershipAdded(IdtyId),
+    /// A pending membership request has expired.
     PendingMembershipExpired(IdtyId),
 }
 
diff --git a/resources/metadata.scale b/resources/metadata.scale
index 8cba70d82084d4a6c13159a9585ad29f6c8e7c00..a4239406fb5544df7692aff4f117176809213953 100644
Binary files a/resources/metadata.scale and b/resources/metadata.scale differ
diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs
index a6eecb1c2f694248fc501d0e3c224d1281dc82d2..194a9f3acfb7ef7d1a850869f638580ec3ee35a9 100644
--- a/runtime/common/src/handlers.rs
+++ b/runtime/common/src/handlers.rs
@@ -48,7 +48,7 @@ where
         match idty_event {
             IdtyEvent::Validated => {
                 // when identity is validated, it starts getting right to UD
-                // but this is handeled by membership event handler (MembershipAcquired)
+                // but this is handeled by membership event handler (MembershipAdded)
             }
             IdtyEvent::ChangedOwnerKey { new_owner_key } => {
                 if let Err(e) = pallet_authority_members::Pallet::<T>::change_owner_key(
@@ -79,8 +79,7 @@ impl<
     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)
-            | sp_membership::Event::MembershipExpired(idty_index) => {
+            sp_membership::Event::MembershipRemoved(idty_index) => {
                 if let Some(idty_value) = pallet_identity::Identities::<Runtime>::get(idty_index) {
                     if let Some(first_ud_index) = idty_value.data.first_eligible_ud.into() {
                         pallet_universal_dividend::Pallet::<Runtime>::on_removed_member(
@@ -91,7 +90,7 @@ impl<
                 }
             }
             // when main membership is acquired, it starts getting right to UD
-            sp_membership::Event::MembershipAcquired(idty_index) => {
+            sp_membership::Event::MembershipAdded(idty_index) => {
                 pallet_identity::Identities::<Runtime>::mutate_exists(idty_index, |idty_val_opt| {
                     if let Some(ref mut idty_val) = idty_val_opt {
                         idty_val.data = IdtyData {
@@ -104,7 +103,7 @@ impl<
             }
             // in other case, ther is nothing to do
             sp_membership::Event::MembershipRenewed(_)
-            | sp_membership::Event::MembershipRequested(_)
+            | sp_membership::Event::PendingMembershipAdded(_)
             | sp_membership::Event::PendingMembershipExpired(_) => (),
         });
         Inner::on_event(membership_event)
@@ -126,11 +125,11 @@ impl<
 {
     fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) {
         (match membership_event {
-            sp_membership::Event::MembershipAcquired(_idty_index) => {
+            sp_membership::Event::MembershipAdded(_idty_index) => {
                 // nothing when smith membership acquired
                 // user will have to claim authority membership
             }
-            sp_membership::Event::MembershipRevoked(idty_index) => {
+            sp_membership::Event::MembershipRemoved(idty_index) => {
                 let call = pallet_authority_members::Call::<Runtime>::remove_member {
                     member_id: *idty_index,
                 };
diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index bf101f98f3cd54d0e00227e9be9ade08b1cf59b1..31bae949b2f7852cf8c37f98dcbcd090ebf97816 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -515,6 +515,7 @@ macro_rules! pallets_config {
             type EvaluationPrice = frame_support::traits::ConstU64<1000>;
             type MinAccessibleReferees = MinAccessibleReferees;
             type ResultExpiration = frame_support::traits::ConstU32<720>;
+            type RuntimeEvent = RuntimeEvent;
             type WeightInfo = common_runtime::weights::pallet_distance::WeightInfo<Runtime>;
         }
 
diff --git a/runtime/common/src/providers.rs b/runtime/common/src/providers.rs
index 9680798aa405cf46d70470eabf8d9ccd42721e14..1417140622744b6879500cb0ebd5a8962759860d 100644
--- a/runtime/common/src/providers.rs
+++ b/runtime/common/src/providers.rs
@@ -17,6 +17,7 @@
 use crate::{entities::IdtyData, AccountId, IdtyIndex};
 use core::marker::PhantomData;
 use pallet_universal_dividend::FirstEligibleUd;
+use sp_runtime::DispatchError;
 use sp_std::boxed::Box;
 use sp_std::vec::Vec;
 
@@ -112,13 +113,16 @@ pub struct MainWotIsDistanceOk<T>(PhantomData<T>);
 impl<T> pallet_duniter_wot::traits::IsDistanceOk<<T as pallet_identity::Config>::IdtyIndex>
     for MainWotIsDistanceOk<T>
 where
-    T: pallet_distance::Config,
+    T: pallet_distance::Config + pallet_duniter_wot::Config<frame_support::instances::Instance1>,
 {
-    fn is_distance_ok(idty_id: &<T as pallet_identity::Config>::IdtyIndex) -> bool {
-        matches!(
-            pallet_distance::Pallet::<T>::identity_distance_status(idty_id),
-            Some((_, pallet_distance::DistanceStatus::Valid))
-        )
+    fn is_distance_ok(
+        idty_id: &<T as pallet_identity::Config>::IdtyIndex,
+    ) -> Result<(), DispatchError> {
+        match pallet_distance::Pallet::<T>::identity_distance_status(idty_id) {
+			Some((_, pallet_distance::DistanceStatus::Valid)) => Ok(()),
+			Some((_, pallet_distance::DistanceStatus::Invalid)) => Err(pallet_duniter_wot::Error::<T, frame_support::instances::Instance1>::DistanceIsInvalid.into()),
+			_ => Err(pallet_duniter_wot::Error::<T, frame_support::instances::Instance1>::DistanceNotEvaluated.into()),
+		}
     }
 }
 
diff --git a/runtime/common/src/weights/pallet_identity.rs b/runtime/common/src/weights/pallet_identity.rs
index 3dc9f98484f7cb932cb92ac2ff3a516ac2096c64..332be4f48444499deb4ee6c2791968a182149fdc 100644
--- a/runtime/common/src/weights/pallet_identity.rs
+++ b/runtime/common/src/weights/pallet_identity.rs
@@ -195,7 +195,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 	/// Proof Skipped: Identity IdentitiesNames (max_values: None, max_size: None, mode: Measured)
 	/// Storage: Quota IdtyQuota (r:0 w:1)
 	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
-	fn remove_identity() -> Weight {
+	fn force_remove_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1343`
 		//  Estimated: `7283`
diff --git a/runtime/g1/src/lib.rs b/runtime/g1/src/lib.rs
index c71865c95159ab5121317fdf95af14374a9c50c8..8cef6bfcb4ef5219da5aa82056d79b3f256c8cf8 100644
--- a/runtime/g1/src/lib.rs
+++ b/runtime/g1/src/lib.rs
@@ -286,7 +286,7 @@ construct_runtime!(
         Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
         Membership: pallet_membership::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 42,
         Cert: pallet_certification::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent} = 44,
+        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
 
         // Smith Sub-Wot
         SmithSubWot: pallet_duniter_wot::<Instance2>::{Pallet} = 50,
diff --git a/runtime/gdev/src/lib.rs b/runtime/gdev/src/lib.rs
index 82eb29bc9330fc3ff5c6dea3cd4f47b36602c3c6..f3b9ec5aa947d83ea4d16161717684bc6b6730c2 100644
--- a/runtime/gdev/src/lib.rs
+++ b/runtime/gdev/src/lib.rs
@@ -340,7 +340,7 @@ construct_runtime!(
         Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
         Membership: pallet_membership::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 42,
         Cert: pallet_certification::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent} = 44,
+        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
 
         // Smith Sub-Wot
         SmithSubWot: pallet_duniter_wot::<Instance2>::{Pallet} = 50,
diff --git a/runtime/gdev/tests/fixme_tests.rs b/runtime/gdev/tests/fixme_tests.rs
index 28b9777e86daaed4cc4a8e04f29ca0be2f348743..2f4d55aac328ba531cd8e8861592a786b54e54c5 100644
--- a/runtime/gdev/tests/fixme_tests.rs
+++ b/runtime/gdev/tests/fixme_tests.rs
@@ -22,6 +22,7 @@ mod common;
 use common::*;
 use frame_support::assert_ok;
 use gdev_runtime::*;
+use pallet_membership::MembershipRemovalReason;
 use sp_keyring::AccountKeyring;
 
 /// issue #136
@@ -56,7 +57,10 @@ fn can_still_issue_cert_when_membership_lost() {
             2, // Bob
         ));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(2),
+            pallet_membership::Event::MembershipRemoved {
+                member: 2,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
 
         // FIXME this should not be possible
@@ -66,7 +70,7 @@ fn can_still_issue_cert_when_membership_lost() {
             3, // Charlie
         ));
         System::assert_has_event(RuntimeEvent::Cert(
-            pallet_certification::Event::RenewedCert {
+            pallet_certification::Event::CertRenewed {
                 issuer: 2,
                 receiver: 3,
             },
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index 982a7ccc9077ad293b2588a96e8135f84309d854..cb3819c843f27b3065ee258f63ec68d030b4cf48 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -24,6 +24,7 @@ use frame_support::{assert_noop, assert_ok};
 use frame_support::{StorageHasher, Twox128};
 use gdev_runtime::*;
 use pallet_duniter_wot::IdtyRemovalWotReason;
+use pallet_membership::MembershipRemovalReason;
 use sp_core::Encode;
 use sp_keyring::AccountKeyring;
 use sp_runtime::MultiAddress;
@@ -283,20 +284,23 @@ fn test_session_change() {
     })
 }
 
-/// test calling remove_identity
+/// test calling force_remove_identity
 #[test]
-fn test_remove_identity() {
+fn test_force_remove_identity() {
     ExtBuilder::new(1, 3, 4).build().execute_with(|| {
         run_to_block(2);
         // remove the identity
-        assert_ok!(Identity::remove_identity(
+        assert_ok!(Identity::force_remove_identity(
             frame_system::RawOrigin::Root.into(),
             4,
             None,
             pallet_identity::IdtyRemovalReason::Manual
         ));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipRevoked(4),
+            pallet_membership::Event::MembershipRemoved {
+                member: 4,
+                reason: MembershipRemovalReason::Revoked,
+            },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyRemoved {
@@ -366,7 +370,12 @@ fn test_validate_identity_when_claim() {
             ));
 
             System::assert_has_event(RuntimeEvent::Membership(
-                pallet_membership::Event::MembershipAcquired(5),
+                pallet_membership::Event::MembershipAdded {
+                    member: 5,
+                    expire_on: 76
+                        + <Runtime as pallet_membership::Config<Instance1>>::MembershipPeriod::get(
+                        ),
+                },
             ));
 
             // ferdie can not validate eve identity because already validated
@@ -386,7 +395,10 @@ fn test_membership_expiry() {
     ExtBuilder::new(1, 3, 4).build().execute_with(|| {
         run_to_block(100);
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(1),
+            pallet_membership::Event::MembershipRemoved {
+                member: 1,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
         // membership expiry should not trigger identity removal
         assert!(!System::events().iter().any(|record| record.event
@@ -403,7 +415,10 @@ fn test_membership_expiry_with_identity_removal() {
         run_to_block(100);
 
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipExpired(4),
+            pallet_membership::Event::MembershipRemoved {
+                member: 4,
+                reason: MembershipRemovalReason::Expired,
+            },
         ));
 
         // Trigger pending membership expiry
@@ -448,7 +463,12 @@ fn test_membership_renewal() {
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
             ));
             System::assert_has_event(RuntimeEvent::Membership(
-                pallet_membership::Event::MembershipRenewed(1),
+                pallet_membership::Event::MembershipAdded {
+                    member: 1,
+                    expire_on: 76
+                        + <Runtime as pallet_membership::Config<Instance1>>::MembershipPeriod::get(
+                        ),
+                },
             ));
 
             // renew at block 77
@@ -457,13 +477,21 @@ fn test_membership_renewal() {
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
             ));
             System::assert_has_event(RuntimeEvent::Membership(
-                pallet_membership::Event::MembershipRenewed(1),
+                pallet_membership::Event::MembershipAdded {
+                    member: 1,
+                    expire_on: 77
+                        + <Runtime as pallet_membership::Config<Instance1>>::MembershipPeriod::get(
+                        ),
+                },
             ));
 
             // should expire at block 177 = 77+100
             run_to_block(177);
             System::assert_has_event(RuntimeEvent::Membership(
-                pallet_membership::Event::MembershipExpired(1),
+                pallet_membership::Event::MembershipRemoved {
+                    member: 1,
+                    reason: MembershipRemovalReason::Expired,
+                },
             ));
         });
 }
@@ -493,7 +521,7 @@ fn test_remove_identity_after_one_ud() {
                 + 1) as u32,
         );
         // remove identity
-        assert_ok!(Identity::remove_identity(
+        assert_ok!(Identity::force_remove_identity(
             frame_system::RawOrigin::Root.into(),
             4,
             None,
@@ -516,7 +544,10 @@ fn test_remove_identity_after_one_ud() {
         }));
         // membership and identity were actually removed
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipRevoked(4),
+            pallet_membership::Event::MembershipRemoved {
+                member: 4,
+                reason: MembershipRemovalReason::Revoked,
+            },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyRemoved {
@@ -595,7 +626,11 @@ fn test_ud_claimed_membership_on_and_off() {
             frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into()
         ));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipAcquired(1),
+            pallet_membership::Event::MembershipAdded {
+                member: 1,
+                expire_on: 14
+                    + <Runtime as pallet_membership::Config<Instance1>>::MembershipPeriod::get(),
+            },
         ));
 
         // UD number 3
@@ -636,7 +671,7 @@ fn test_remove_smith_identity() {
     ExtBuilder::new(1, 3, 4).build().execute_with(|| {
         run_to_block(2);
 
-        assert_ok!(Identity::remove_identity(
+        assert_ok!(Identity::force_remove_identity(
             frame_system::RawOrigin::Root.into(),
             3,
             None,
@@ -644,13 +679,19 @@ fn test_remove_smith_identity() {
         ));
         // Verify events
         System::assert_has_event(RuntimeEvent::SmithMembership(
-            pallet_membership::Event::MembershipRevoked(3),
+            pallet_membership::Event::MembershipRemoved {
+                member: 3,
+                reason: MembershipRemovalReason::Revoked,
+            },
         ));
         System::assert_has_event(RuntimeEvent::AuthorityMembers(
-            pallet_authority_members::Event::MemberRemoved(3),
+            pallet_authority_members::Event::MemberRemoved { member: 3 },
         ));
         System::assert_has_event(RuntimeEvent::Membership(
-            pallet_membership::Event::MembershipRevoked(3),
+            pallet_membership::Event::MembershipRemoved {
+                member: 3,
+                reason: MembershipRemovalReason::Revoked,
+            },
         ));
         System::assert_has_event(RuntimeEvent::Identity(
             pallet_identity::Event::IdtyRemoved {
diff --git a/runtime/gtest/src/lib.rs b/runtime/gtest/src/lib.rs
index 8ee543dc79b4fa9f00c342e7e718ec4de406abf5..841a039fc499a0584647ae9cd6a2539aaa8e3750 100644
--- a/runtime/gtest/src/lib.rs
+++ b/runtime/gtest/src/lib.rs
@@ -298,7 +298,7 @@ construct_runtime!(
         Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
         Membership: pallet_membership::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 42,
         Cert: pallet_certification::<Instance1>::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent} = 44,
+        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
 
         // Smith Sub-Wot
         SmithSubWot: pallet_duniter_wot::<Instance2>::{Pallet} = 50,