diff --git a/pallets/duniter-wot/src/lib.rs b/pallets/duniter-wot/src/lib.rs
index ff541ca4f86c24af84618174970731f6403b6ea3..22669612004c9d49bbe6f43eebd7f2c77204e99f 100644
--- a/pallets/duniter-wot/src/lib.rs
+++ b/pallets/duniter-wot/src/lib.rs
@@ -249,7 +249,20 @@ impl<T: Config<I>, I: 'static> pallet_identity::traits::OnIdtyChange<T> for Pall
             }
             IdtyEvent::Confirmed => {}
             IdtyEvent::Validated => {}
-            IdtyEvent::Removed => {}
+            IdtyEvent::Removed { status } => {
+                if status != IdtyStatus::Validated {
+                    if let Err(e) =
+                        <pallet_certification::Pallet<T, I>>::remove_all_certs_received_by(
+                            frame_system::Origin::<T>::Root.into(),
+                            idty_index,
+                        )
+                    {
+                        sp_std::if_std! {
+                            println!("fail to remove certs received by some idty: {:?}", e)
+                        }
+                    }
+                }
+            }
         }
         0
     }
diff --git a/pallets/duniter-wot/src/tests.rs b/pallets/duniter-wot/src/tests.rs
index 2aab1f4c8e3bcef4fec23b329097d2bed057407d..7bff9e19f9a86fe1cff5cb0d988f5837adc4170c 100644
--- a/pallets/duniter-wot/src/tests.rs
+++ b/pallets/duniter-wot/src/tests.rs
@@ -287,3 +287,25 @@ fn test_idty_membership_expire_them_requested() {
         );
     });
 }
+
+#[test]
+fn test_unvalidated_idty_certs_removal() {
+    new_test_ext(5, 2).execute_with(|| {
+        // Alice creates Ferdie identity
+        run_to_block(2);
+        assert_ok!(Identity::create_identity(Origin::signed(1), 6));
+
+        // Ferdie confirms his identity
+        run_to_block(3);
+        assert_ok!(Identity::confirm_identity(
+            Origin::signed(6),
+            IdtyName::from("Ferdie"),
+        ));
+
+        // After PendingMembershipPeriod, Ferdie identity should expire
+        // and his received certifications should be removed
+        assert_eq!(Cert::certs_by_receiver(6).len(), 1);
+        run_to_block(6);
+        assert_eq!(Cert::certs_by_receiver(6).len(), 0);
+    });
+}
diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs
index 87d607cb95fde1ce9f5dafa4f3788f25e09f36ac..79fedb652c08af1808ce19054acb9960bd8628d2 100644
--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -525,7 +525,12 @@ pub mod pallet {
                 Identities::<T>::remove(idty_index);
                 frame_system::Pallet::<T>::dec_sufficients(&idty_val.owner_key);
                 Self::deposit_event(Event::IdtyRemoved { idty_index });
-                T::OnIdtyChange::on_idty_change(idty_index, IdtyEvent::Removed);
+                T::OnIdtyChange::on_idty_change(
+                    idty_index,
+                    IdtyEvent::Removed {
+                        status: idty_val.status,
+                    },
+                );
             }
             0
         }
diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs
index 456cf3023c6ebd517c5d9b8b8bf8969abf0dc967..529fb0babe1f01c91b496a62499a1c70d9f35b5a 100644
--- a/pallets/identity/src/types.rs
+++ b/pallets/identity/src/types.rs
@@ -27,7 +27,7 @@ pub enum IdtyEvent<T: crate::Config> {
     Created { creator: T::IdtyIndex },
     Confirmed,
     Validated,
-    Removed,
+    Removed { status: IdtyStatus },
 }
 
 #[derive(Encode, Decode, Default, Clone, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug)]