diff --git a/include/gnss_utils/snapshot.h b/include/gnss_utils/snapshot.h
index 84bbcb0ce49087ee6d0168ea6eb6931981b1052c..49a167503ad07aabeca7036337e2d57d9fb86ff0 100644
--- a/include/gnss_utils/snapshot.h
+++ b/include/gnss_utils/snapshot.h
@@ -133,7 +133,15 @@ inline std::set<int> Snapshot::filterObservations(const std::set<int>&      disc
                                                   const bool&               check_carrier_phase,
                                                   const Options&            opt)
 {
-    return obs_->filter(sats_, discarded_sats, x_r, check_code, check_carrier_phase, opt);
+    std::set<int> filtered_sats = obs_->filter(sats_, discarded_sats, x_r, check_code, check_carrier_phase, opt);
+
+    for (auto sat : filtered_sats)
+    {
+        sats_.erase(sat);
+        ranges_.erase(sat);
+    }
+
+    return filtered_sats;
 }
 
 inline std::set<int> Snapshot::filterObservations(const std::set<int>&  discarded_sats,
@@ -142,7 +150,15 @@ inline std::set<int> Snapshot::filterObservations(const std::set<int>&  discarde
                                                   const bool&           check_carrier_phase,
                                                   const Options&        opt)
 {
-    return obs_->filter(sats_, discarded_sats, azels, check_code, check_carrier_phase, opt);
+    std::set<int> filtered_sats = obs_->filter(sats_, discarded_sats, azels, check_code, check_carrier_phase, opt);
+
+    for (auto sat : filtered_sats)
+    {
+        sats_.erase(sat);
+        ranges_.erase(sat);
+    }
+
+    return filtered_sats;
 }
 
 inline const Ranges& Snapshot::getRanges() const