diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs
index 153189d98d680f26afdc9e282b1099de7b9290c9..e7c48962a8d187dd46348e21b72b1c86623375c6 100644
--- a/pallets/smith-members/src/lib.rs
+++ b/pallets/smith-members/src/lib.rs
@@ -519,7 +519,7 @@ impl<T: Config> Pallet<T> {
 
     /// Handle the removal of Smiths whose expiration time has been reached at a given session index.
     fn on_exclude_expired_smiths(at: SessionIndex) {
-        if let Some(smiths_to_remove) = ExpiresOn::<T>::get(at) {
+        if let Some(smiths_to_remove) = ExpiresOn::<T>::take(at) {
             for smith in smiths_to_remove {
                 if let Some(smith_meta) = Smiths::<T>::get(smith) {
                     if let Some(expires_on) = smith_meta.expires_on {
diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs
index c04bd2d17b8392e85ef138e5f6e1f409dd3b6cf4..c92bffb680caedd2e006ad2b7c8378ce04e529d6 100644
--- a/pallets/smith-members/src/tests.rs
+++ b/pallets/smith-members/src/tests.rs
@@ -628,10 +628,9 @@ fn certifying_an_online_smith() {
     });
 }
 
-/// Shows that scheduled expiration stay scheduled forever, even in the past
-/// This is harmful for storage because we store unnecessary data
+/// Test that scheduled expiration is removed after session
 #[test]
-fn expires_on_keeps_growing() {
+fn expires_on_cleans_up() {
     new_test_ext(GenesisConfig {
         initial_smiths: btreemap![
             1 => (true, vec![2, 3]),
@@ -666,8 +665,8 @@ fn expires_on_keeps_growing() {
                 received_certs: vec![]
             })
         );
-        // but ExpiresOn schedule is still there (and will stay forever)
-        assert_eq!(ExpiresOn::<Runtime>::get(5), Some(vec![1]));
+        // ExpiresOn is clean
+        assert_eq!(ExpiresOn::<Runtime>::get(5), None);
     });
 }