diff --git a/docs/api/runtime-calls.md b/docs/api/runtime-calls.md
index 3c96e8358dfda38ca1dc6434860180de1e675926..971f556b4839c3846883a962956ef96d782531c2 100644
--- a/docs/api/runtime-calls.md
+++ b/docs/api/runtime-calls.md
@@ -359,7 +359,7 @@ receiver: T::IdtyIndex
 </details>
 
 
-
+Invite a WoT member to try becoming a Smith
 
 #### accept_invitation - 1
 
@@ -372,7 +372,7 @@ Taking 0.0085 % of a block.
 </details>
 
 
-
+Accept an invitation (must have been invited first)
 
 #### certify_smith - 2
 
@@ -386,7 +386,7 @@ receiver: T::IdtyIndex
 </details>
 
 
-
+Certify an invited smith which can lead the certified to become a Smith
 
 ### AuthorityMembers - 11
 
diff --git a/docs/api/runtime-events.md b/docs/api/runtime-events.md
index 566e7383905fab4996865f7a71390aefa0b0c6cb..a3a532d8a735400a1ee71d05dc64b87f913715bb 100644
--- a/docs/api/runtime-events.md
+++ b/docs/api/runtime-events.md
@@ -1,6 +1,6 @@
 # Runtime events
 
-There are **128** events from **35** pallets.
+There are **129** events from **35** pallets.
 
 <ul>
 <li>System - 0
@@ -649,12 +649,12 @@ no args
 <li>
 <details>
 <summary>
-<code>InvitationSent(idty_index, invited_by)</code> - 0</summary>
+<code>InvitationSent(receiver, issuer)</code> - 0</summary>
 An identity is being inivited to become a smith.
 
 ```rust
-idty_index: T::IdtyIndex
-invited_by: T::IdtyIndex
+receiver: T::IdtyIndex
+issuer: T::IdtyIndex
 ```
 
 </details>
@@ -674,12 +674,25 @@ idty_index: T::IdtyIndex
 <li>
 <details>
 <summary>
-<code>CertificationReceived(idty_index, issued_by)</code> - 2</summary>
+<code>SmithCertAdded(receiver, issuer)</code> - 2</summary>
 Certification received
 
 ```rust
-idty_index: T::IdtyIndex
-issued_by: T::IdtyIndex
+receiver: T::IdtyIndex
+issuer: T::IdtyIndex
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>SmithCertRemoved(receiver, issuer)</code> - 3</summary>
+Certification lost
+
+```rust
+receiver: T::IdtyIndex
+issuer: T::IdtyIndex
 ```
 
 </details>
@@ -687,7 +700,7 @@ issued_by: T::IdtyIndex
 <li>
 <details>
 <summary>
-<code>PromotedToSmith(idty_index)</code> - 3</summary>
+<code>SmithMembershipAdded(idty_index)</code> - 4</summary>
 A smith gathered enough certifications to become an authority (can call `go_online()`).
 
 ```rust
@@ -699,7 +712,7 @@ idty_index: T::IdtyIndex
 <li>
 <details>
 <summary>
-<code>SmithExcluded(idty_index)</code> - 4</summary>
+<code>SmithMembershipRemoved(idty_index)</code> - 5</summary>
 A smith has been removed from the smiths set.
 
 ```rust
diff --git a/pallets/smith-members/src/benchmarking.rs b/pallets/smith-members/src/benchmarking.rs
index 071d73905ff8d416f472eca8b5700dccb65d975f..62e0b8ddc7251e957b5edaddf1092a2a54c55e40 100644
--- a/pallets/smith-members/src/benchmarking.rs
+++ b/pallets/smith-members/src/benchmarking.rs
@@ -45,8 +45,8 @@ benchmarks! {
     }: _<T::RuntimeOrigin>(caller_origin, receiver)
     verify {
         assert_has_event::<T>(Event::<T>::InvitationSent{
-            idty_index: receiver,
-            invited_by: issuer,
+            receiver,
+            issuer,
         }.into());
     }
     accept_invitation {
@@ -85,9 +85,9 @@ benchmarks! {
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
     }: _<T::RuntimeOrigin>(caller_origin, receiver)
     verify {
-        assert_has_event::<T>(Event::<T>::CertificationReceived{
-            idty_index: receiver,
-            issued_by: issuer,
+        assert_has_event::<T>(Event::<T>::SmithCertAdded{
+            receiver,
+            issuer,
         }.into());
     }
 
diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs
index 8d4df3fa6a46d2538098ee734f2b944b3fd8394e..a20e0bd04d2221ab3dfe9008bf02a5aff9ab3a68 100644
--- a/pallets/smith-members/src/lib.rs
+++ b/pallets/smith-members/src/lib.rs
@@ -130,20 +130,25 @@ pub mod pallet {
     pub enum Event<T: Config> {
         /// An identity is being inivited to become a smith.
         InvitationSent {
-            idty_index: T::IdtyIndex,
-            invited_by: T::IdtyIndex,
+            receiver: T::IdtyIndex,
+            issuer: T::IdtyIndex,
         },
         /// The invitation has been accepted.
         InvitationAccepted { idty_index: T::IdtyIndex },
         /// Certification received
-        CertificationReceived {
-            idty_index: T::IdtyIndex,
-            issued_by: T::IdtyIndex,
+        SmithCertAdded {
+            receiver: T::IdtyIndex,
+            issuer: T::IdtyIndex,
+        },
+        /// Certification lost
+        SmithCertRemoved {
+            receiver: T::IdtyIndex,
+            issuer: T::IdtyIndex,
         },
         /// A smith gathered enough certifications to become an authority (can call `go_online()`).
-        PromotedToSmith { idty_index: T::IdtyIndex },
+        SmithMembershipAdded { idty_index: T::IdtyIndex },
         /// A smith has been removed from the smiths set.
-        SmithExcluded { idty_index: T::IdtyIndex },
+        SmithMembershipRemoved { idty_index: T::IdtyIndex },
     }
 
     #[pallet::genesis_config]
@@ -275,6 +280,7 @@ pub mod pallet {
 
     #[pallet::call]
     impl<T: Config> Pallet<T> {
+        /// Invite a WoT member to try becoming a Smith
         #[pallet::call_index(0)]
         #[pallet::weight(T::WeightInfo::invite_smith())]
         pub fn invite_smith(
@@ -289,6 +295,7 @@ pub mod pallet {
             Ok(().into())
         }
 
+        /// Accept an invitation (must have been invited first)
         #[pallet::call_index(1)]
         #[pallet::weight(T::WeightInfo::accept_invitation())]
         pub fn accept_invitation(origin: OriginFor<T>) -> DispatchResultWithPostInfo {
@@ -300,6 +307,7 @@ pub mod pallet {
             Ok(().into())
         }
 
+        /// Certify an invited smith which can lead the certified to become a Smith
         #[pallet::call_index(2)]
         #[pallet::weight(T::WeightInfo::certify_smith())]
         pub fn certify_smith(
@@ -352,10 +360,7 @@ impl<T: Config> Pallet<T> {
         existing.received_certs = vec![];
         Smiths::<T>::insert(receiver, existing);
         ExpiresOn::<T>::append(new_expires_on, receiver);
-        Self::deposit_event(Event::<T>::InvitationSent {
-            idty_index: receiver,
-            invited_by: issuer,
-        });
+        Self::deposit_event(Event::<T>::InvitationSent { receiver, issuer });
     }
 
     fn check_accept_invitation(receiver: T::IdtyIndex) -> DispatchResultWithPostInfo {
@@ -445,12 +450,9 @@ impl<T: Config> Pallet<T> {
                 let new_expires_on =
                     CurrentSession::<T>::get() + T::SmithInactivityMaxDuration::get();
                 smith_meta.expires_on = Some(new_expires_on);
-                Self::deposit_event(Event::<T>::CertificationReceived {
-                    idty_index: receiver,
-                    issued_by: issuer,
-                });
+                Self::deposit_event(Event::<T>::SmithCertAdded { receiver, issuer });
                 if smith_meta.status == SmithStatus::Smith {
-                    Self::deposit_event(Event::<T>::PromotedToSmith {
+                    Self::deposit_event(Event::<T>::SmithMembershipAdded {
                         idty_index: receiver,
                     });
                 }
@@ -479,9 +481,9 @@ impl<T: Config> Pallet<T> {
         }
     }
 
-    fn _do_exclude_smith(idty_index: T::IdtyIndex, reason: SmithRemovalReason) {
+    fn _do_exclude_smith(receiver: T::IdtyIndex, reason: SmithRemovalReason) {
         let mut lost_certs = vec![];
-        Smiths::<T>::mutate(idty_index, |maybe_smith_meta| {
+        Smiths::<T>::mutate(receiver, |maybe_smith_meta| {
             if let Some(smith_meta) = maybe_smith_meta {
                 smith_meta.expires_on = None;
                 smith_meta.status = SmithStatus::Excluded;
@@ -493,18 +495,24 @@ impl<T: Config> Pallet<T> {
             }
         });
         // We remove the lost certs from their issuer's stock
-        for lost_cert in lost_certs {
-            Smiths::<T>::mutate(lost_cert, |maybe_smith_meta| {
+        for lost_cert_issuer in lost_certs {
+            Smiths::<T>::mutate(lost_cert_issuer, |maybe_smith_meta| {
                 if let Some(smith_meta) = maybe_smith_meta {
-                    if let Ok(index) = smith_meta.issued_certs.binary_search(&idty_index) {
+                    if let Ok(index) = smith_meta.issued_certs.binary_search(&receiver) {
                         smith_meta.issued_certs.remove(index);
+                        Self::deposit_event(Event::<T>::SmithCertRemoved {
+                            receiver,
+                            issuer: lost_cert_issuer,
+                        });
                     }
                 }
             });
         }
         // Deletion done: notify (authority-members) for cascading
-        T::OnSmithDelete::on_smith_delete(idty_index, reason);
-        Self::deposit_event(Event::<T>::SmithExcluded { idty_index });
+        T::OnSmithDelete::on_smith_delete(receiver, reason);
+        Self::deposit_event(Event::<T>::SmithMembershipRemoved {
+            idty_index: receiver,
+        });
     }
 
     pub fn on_smith_goes_online(idty_index: T::IdtyIndex) {
diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs
index a843a17a962cdf2f5e2d044ac283ee6695ba5760..a6b9f071525f87efbc5a724904bfb49c40d93877 100644
--- a/pallets/smith-members/src/tests.rs
+++ b/pallets/smith-members/src/tests.rs
@@ -46,8 +46,8 @@ fn process_to_become_a_smith_and_lose_it() {
         // Try to invite
         assert_ok!(Pallet::<Runtime>::invite_smith(RuntimeOrigin::signed(1), 5));
         System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::InvitationSent {
-            idty_index: 5,
-            invited_by: 1,
+            receiver: 5,
+            issuer: 1,
         }));
         // Accept invitation
         assert_ok!(Pallet::<Runtime>::accept_invitation(RuntimeOrigin::signed(
@@ -71,12 +71,10 @@ fn process_to_become_a_smith_and_lose_it() {
             RuntimeOrigin::signed(1),
             5
         ));
-        System::assert_has_event(RuntimeEvent::Smith(
-            Event::<Runtime>::CertificationReceived {
-                idty_index: 5,
-                issued_by: 1,
-            },
-        ));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertAdded {
+            receiver: 5,
+            issuer: 1,
+        }));
         assert_eq!(
             Smiths::<Runtime>::get(5).unwrap(),
             SmithMeta {
@@ -91,15 +89,13 @@ fn process_to_become_a_smith_and_lose_it() {
             RuntimeOrigin::signed(2),
             5
         ));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertAdded {
+            receiver: 5,
+            issuer: 1,
+        }));
         System::assert_has_event(RuntimeEvent::Smith(
-            Event::<Runtime>::CertificationReceived {
-                idty_index: 5,
-                issued_by: 1,
-            },
+            Event::<Runtime>::SmithMembershipAdded { idty_index: 5 },
         ));
-        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::PromotedToSmith {
-            idty_index: 5,
-        }));
         assert_eq!(
             Smiths::<Runtime>::get(5).unwrap(),
             SmithMeta {
@@ -120,14 +116,46 @@ fn process_to_become_a_smith_and_lose_it() {
         assert!(Smiths::<Runtime>::get(5).is_some());
         // On session 5 no more smiths because of lack of activity
         Pallet::<Runtime>::on_new_session(5);
-        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithExcluded {
-            idty_index: 1,
+        System::assert_has_event(RuntimeEvent::Smith(
+            Event::<Runtime>::SmithMembershipRemoved { idty_index: 1 },
+        ));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 1,
+            issuer: 2,
         }));
-        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithExcluded {
-            idty_index: 2,
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 1,
+            issuer: 3,
         }));
-        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithExcluded {
-            idty_index: 5,
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 1,
+            issuer: 4,
+        }));
+        System::assert_has_event(RuntimeEvent::Smith(
+            Event::<Runtime>::SmithMembershipRemoved { idty_index: 2 },
+        ));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 2,
+            issuer: 3,
+        }));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 2,
+            issuer: 4,
+        }));
+        System::assert_has_event(RuntimeEvent::Smith(
+            Event::<Runtime>::SmithMembershipRemoved { idty_index: 5 },
+        ));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 1,
+            issuer: 3,
+        }));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 5,
+            issuer: 1,
+        }));
+        System::assert_has_event(RuntimeEvent::Smith(Event::<Runtime>::SmithCertRemoved {
+            receiver: 5,
+            issuer: 2,
         }));
         assert_eq!(
             Smiths::<Runtime>::get(1),
diff --git a/resources/metadata.scale b/resources/metadata.scale
index 820374cd2073ee49d2ba67359255742635e037a9..ec4593b3867538d339e681f0f8c0013569459624 100644
Binary files a/resources/metadata.scale and b/resources/metadata.scale differ
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index cfc3cb05d3e533518bb32eb7768a12de8cd09a55..82e8bf5edc51c18dec880a622220f762f454b167 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -1540,7 +1540,19 @@ fn test_smith_member_can_revoke_its_idty() {
         ));
         // smith membership should be removed as well
         System::assert_has_event(RuntimeEvent::SmithMembers(
-            pallet_smith_members::Event::SmithExcluded { idty_index: 3 },
+            pallet_smith_members::Event::SmithMembershipRemoved { idty_index: 3 },
+        ));
+        System::assert_has_event(RuntimeEvent::SmithMembers(
+            pallet_smith_members::Event::SmithCertRemoved {
+                receiver: 3,
+                issuer: 1,
+            },
+        ));
+        System::assert_has_event(RuntimeEvent::SmithMembers(
+            pallet_smith_members::Event::SmithCertRemoved {
+                receiver: 3,
+                issuer: 2,
+            },
         ));
         // Now Charlie is going out
         assert!(pallet_authority_members::OutgoingAuthorities::<Runtime>::get().contains(&3));