diff --git a/client/distance/src/lib.rs b/client/distance/src/lib.rs
index 85885d33903d745f02f74ce962e485c3dbf0207c..19c3fe661bba38bcefde6296da2d0fca01597d91 100644
--- a/client/distance/src/lib.rs
+++ b/client/distance/src/lib.rs
@@ -85,24 +85,45 @@ where
         });
 
     // Have we already published a result for this period?
-    // The block author is guaranteed to be in the owner_keys.
     if let Some(results) = published_results {
-        if owner_keys
-            .iter()
-            .map(|&key| sp_runtime::AccountId32::new(key.0))
-            .any(|key| results.evaluators.contains(&key))
-        {
-            log::debug!("🧙 [distance oracle] Already published a result for this period");
+        // Find the account associated with the BABE key that is in our owner keys.
+        let mut local_account = None;
+        for key in owner_keys {
+            // Session::KeyOwner is StorageMap<_, Twox64Concat, (KeyTypeId, Vec<u8>), AccountId32, OptionQuery>
+            // Slices (variable length) and array (fixed length) are encoded differently, so the `.as_slice()` is needed
+            let item_key = (sp_runtime::KeyTypeId(*b"babe"), key.0.as_slice()).encode();
+            let mut storage_key =
+                frame_support::storage::storage_prefix(b"Session", b"KeyOwner").to_vec();
+            storage_key.extend_from_slice(&sp_core::twox_64(&item_key));
+            storage_key.extend_from_slice(&item_key);
+
+            if let Some(raw_data) = client.storage(parent, &StorageKey(storage_key))? {
+                if let Ok(key_owner) = AccountId32::decode(&mut &raw_data.0[..]) {
+                    local_account = Some(key_owner);
+                    break;
+                } else {
+                    log::warn!("🧙 [distance oracle] Cannot decode key owner value");
+                }
+            }
+        }
+        if let Some(local_account) = local_account {
+            if results.evaluators.contains(&local_account) {
+                log::debug!("🧙 [distance oracle] Already published a result for this period");
+                return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None));
+            }
+        } else {
+            log::error!("🧙 [distance oracle] Cannot find our BABE owner key");
             return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None));
         }
     }
 
-    // Read evaluation result from file, if it exists
+    // Read evaluation result from file, if it exists, then remove it
     log::debug!(
         "🧙 [distance oracle] Reading evaluation result from file {:?}",
         distance_dir.clone().join(pool_index.to_string())
     );
-    let evaluation_result = match std::fs::read(distance_dir.join(pool_index.to_string())) {
+    let evaluation_result_file_path = distance_dir.join(pool_index.to_string());
+    let evaluation_result = match std::fs::read(&evaluation_result_file_path) {
         Ok(data) => data,
         Err(e) => {
             match e.kind() {
@@ -118,6 +139,9 @@ where
             return Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(None));
         }
     };
+    std::fs::remove_file(&evaluation_result_file_path).unwrap_or_else(move |e| {
+        log::warn!("🧙 [distance oracle] Cannot remove old result file `{evaluation_result_file_path:?}`: {e:?}")
+    });
 
     log::info!("🧙 [distance oracle] Providing evaluation result");
     Ok(sp_distance::InherentDataProvider::<IdtyIndex>::new(Some(
diff --git a/distance-oracle/src/lib.rs b/distance-oracle/src/lib.rs
index b2b25f1c535144167bc6c3aea7c47ce7cc3b4425..89a4fa966c03a3b6336d87132136e052b04c4249 100644
--- a/distance-oracle/src/lib.rs
+++ b/distance-oracle/src/lib.rs
@@ -28,7 +28,7 @@ use api::{AccountId, IdtyIndex};
 
 use codec::Encode;
 use fnv::{FnvHashMap, FnvHashSet};
-use log::{debug, error, info, warn};
+use log::{debug, error, info};
 use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
 use std::{io::Write, path::PathBuf};
 
@@ -85,7 +85,7 @@ impl Default for Settings {
 
 /// Asynchronously runs a computation using the provided client and saves the result to a file.
 pub async fn run_and_save(client: &api::Client, settings: &Settings) {
-    let Some((evaluation, current_pool_index, evaluation_result_path)) =
+    let Some((evaluation, _current_pool_index, evaluation_result_path)) =
         run(client, settings, true).await
     else {
         return;
@@ -113,32 +113,6 @@ pub async fn run_and_save(client: &api::Client, settings: &Settings) {
                 "Cannot write distance evaluation result to file `{evaluation_result_path:?}`: {e:?}"
             )
         });
-
-    // Remove old results
-    let mut files_to_remove = Vec::new();
-    for entry in settings
-        .evaluation_result_dir
-        .read_dir()
-        .unwrap_or_else(|e| {
-            panic!(
-                "Cannot read distance evaluation result directory `{0:?}`: {e:?}",
-                settings.evaluation_result_dir
-            )
-        })
-        .flatten()
-    {
-        if let Ok(entry_name) = entry.file_name().into_string() {
-            if let Ok(entry_pool) = entry_name.parse::<isize>() {
-                if current_pool_index as isize - entry_pool > 3 {
-                    files_to_remove.push(entry.path());
-                }
-            }
-        }
-    }
-    files_to_remove.into_iter().for_each(|f| {
-        std::fs::remove_file(&f)
-            .unwrap_or_else(move |e| warn!("Cannot remove old result file `{f:?}`: {e:?}"));
-    });
 }
 
 /// Asynchronously runs a computation based on the provided client and settings.
@@ -169,7 +143,7 @@ pub async fn run(
 
     let evaluation_result_path = settings
         .evaluation_result_dir
-        .join((current_pool_index + 1).to_string());
+        .join(((current_pool_index + 1) % 3).to_string());
 
     if handle_fs {
         // Stop if already evaluated