diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c6cd3802f06a76c8dc5f9aff1cea5d460897a66..b3beddcb57454472c4f278701a5db658da2e4ae9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,9 +80,10 @@ SET(SOURCES
     src/utils/utils.cpp
     src/utils/transformations.cpp
     src/utils/rcv_position.cpp
-    src/utils/sat_position.cpp
+    src/utils/satellite.cpp
     src/observations.cpp
     src/navigation.cpp
+    src/snapshot.cpp
     src/tdcp.cpp
     src/ublox_raw.cpp)
 
diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h
index f3a0846a26a39cdca1d688f3684e759452331f99..a4056d03b3a3fee72bb4424fbf0f4cee6c93a7e3 100644
--- a/include/gnss_utils/observations.h
+++ b/include/gnss_utils/observations.h
@@ -3,10 +3,13 @@
 
 #include <vector>
 #include <map>
+#include <set>
 #include <iostream>
 #include <memory>
 #include <cassert>
 
+#include <eigen3/Eigen/Dense>
+
 #include "gnss_utils/gnss_utils.h"
 #include "gnss_utils/utils/utils.h"
 
@@ -60,6 +63,21 @@ public:
   void printByIdx(const int& _idx);
   void print();
 
+  // TODO:
+//  std::set<int> filterEphemeris() const;
+//  std::set<int> removeSatellites() const;
+//  std::set<int> filterWrongCode() const;
+//  std::set<int> filterWrongCarrierPhase() const;
+//  std::set<int> filterConstellations() const;
+//  std::set<int> filterElevation() const;
+//  std::set<int> filterSnr() const;
+  std::set<int> filter(std::map<int, Eigen::Vector3d>& sats_pos,
+                       std::set<int>&                  discarded_sats,
+                       const Eigen::Vector3d&          x_r,
+                       const bool&                     check_code,
+                       const bool&                     check_carrier_phase,
+                       const prcopt_t&                 opt);
+
   static void findCommonObservations(const Observations& obs_1,
                                      const Observations& obs_2,
                                      Observations&       common_obs_1,
diff --git a/include/gnss_utils/snapshot.h b/include/gnss_utils/snapshot.h
new file mode 100644
index 0000000000000000000000000000000000000000..41c8dfcd681ffdd9a0168a1f011442869b38090d
--- /dev/null
+++ b/include/gnss_utils/snapshot.h
@@ -0,0 +1,108 @@
+#ifndef INCLUDE_GNSS_UTILS_SNAPSHOT_H_
+#define INCLUDE_GNSS_UTILS_SNAPSHOT_H_
+
+#include <map>
+#include <set>
+#include <iostream>
+#include <memory>
+#include <cassert>
+
+#include <eigen3/Eigen/Dense>
+
+#include "gnss_utils/observations.h"
+#include "gnss_utils/navigation.h"
+
+namespace GnssUtils
+{
+class Snapshot;
+typedef std::shared_ptr<Snapshot>       SnapshotPtr;
+typedef std::shared_ptr<const Snapshot> SnapshotConstPtr;
+
+typedef std::map<int,Eigen::Vector3d> SatellitesPositions;
+
+class Snapshot
+{
+public:
+  // Constructor & Destructor
+  Snapshot();
+  Snapshot(ObservationsPtr obs, NavigationPtr nav);
+  ~Snapshot(){};
+
+  // Public objects
+
+  // Public methods
+  void loadFromRinex(const std::string& rnx_file, gtime_t t_start, gtime_t t_end, double dt = 0.0, const char* opt = "");
+
+  ObservationsPtr getObservations() const;
+  NavigationPtr getNavigation() const;
+  const SatellitesPositions& getSatellitesPositions() const;
+  SatellitesPositions& getSatellitesPositions();
+  void setObservations(ObservationsPtr obs);
+  void setNavigation(NavigationPtr nav);
+
+  void computeSatellitesPositions(const int& eph_opt); // see rtklib.h L396);
+  bool satellitesPositionsComputed() const;
+
+  std::set<int> filterObservations(std::set<int> &discarded_sats,
+                                   const Eigen::Vector3d &x_r,
+                                   const bool &check_code,
+                                   const bool &check_carrier_phase,
+                                   const prcopt_t &opt);
+
+  void print();
+
+private:
+  // Private objects
+  SatellitesPositions sats_pos_;  //< key: sat number
+  ObservationsPtr   obs_;
+  NavigationPtr     nav_;
+
+  // Private methods
+};
+
+inline GnssUtils::ObservationsPtr Snapshot::getObservations() const
+{
+    return obs_;
+}
+
+inline GnssUtils::NavigationPtr Snapshot::getNavigation() const
+{
+    return nav_;
+}
+
+inline SatellitesPositions& Snapshot::getSatellitesPositions()
+{
+    return sats_pos_;
+}
+
+inline const SatellitesPositions& Snapshot::getSatellitesPositions() const
+{
+    return sats_pos_;
+}
+
+inline void Snapshot::setObservations(ObservationsPtr obs)
+{
+    obs_ = obs;
+}
+
+inline void Snapshot::setNavigation(NavigationPtr nav)
+{
+    nav_ = nav;
+}
+
+inline bool Snapshot::satellitesPositionsComputed() const
+{
+    return !sats_pos_.empty();
+}
+
+inline std::set<int> Snapshot::filterObservations(std::set<int> &discarded_sats,
+                                                  const Eigen::Vector3d &x_r,
+                                                  const bool &check_code,
+                                                  const bool &check_carrier_phase,
+                                                  const prcopt_t &opt)
+{
+    return obs_->filter(sats_pos_, discarded_sats, x_r, check_code, check_carrier_phase, opt);
+}
+
+}  // namespace GnssUtils
+#endif // INCLUDE_GNSS_UTILS_SNAPSHOT_H_
diff --git a/include/gnss_utils/tdcp.h b/include/gnss_utils/tdcp.h
index 6d64e885bec90541f3fd4f3cc29fcc605576f277..0a0b2ffc5187d189d826eb3d531de9b1bbfa0f5c 100644
--- a/include/gnss_utils/tdcp.h
+++ b/include/gnss_utils/tdcp.h
@@ -8,11 +8,11 @@
 #ifndef INCLUDE_GNSS_UTILS_TDCP_H_
 #define INCLUDE_GNSS_UTILS_TDCP_H_
 
-#define GNSS_UTILS_TDCP_DEBUG 0
+#define GNSS_UTILS_TDCP_DEBUG 1
 
 #include <set>
 #include "gnss_utils/utils/rcv_position.h"
-#include "gnss_utils/utils/sat_position.h"
+#include "utils/satellite.h"
 #include "gnss_utils/observations.h"
 #include "gnss_utils/navigation.h"
 
@@ -72,14 +72,15 @@ bool Tdcp(const Observations&                   common_obs_r,
           std::set<int>&                        discarded_sats,
           const TdcpParams&                     sd_opt);
 
-void filterCommonSatellites(Observations&                   common_obs_r,
-                            std::map<int, Eigen::Vector3d>& common_sats_pos_r,
-                            Observations&                   common_obs_k,
-                            std::map<int, Eigen::Vector3d>& common_sats_pos_k,
-                            std::set<int>&                  discarded_sats,
-                            const Eigen::Vector3d&          x_r,
-                            const TdcpParams&               sd_params,
-                            const prcopt_t&                 opt);
+void filterCommonObservations(Observations&                   common_obs_r,
+                                       std::map<int, Eigen::Vector3d>& common_sats_pos_r,
+                                       Observations&                   common_obs_k,
+                                       std::map<int, Eigen::Vector3d>& common_sats_pos_k,
+                                       std::set<int>&                  discarded_sats,
+                                       const Eigen::Vector3d&          x_r,
+                                       const bool&                     check_code,
+                                       const bool&                     check_carrier_phase,
+                                       const prcopt_t&                 opt);
 
 }  // namespace GnssUtils
 
diff --git a/include/gnss_utils/utils/sat_position.h b/include/gnss_utils/utils/sat_position.h
deleted file mode 100644
index 3e90436c2caea89e3e77fd57e99acbe8ce727813..0000000000000000000000000000000000000000
--- a/include/gnss_utils/utils/sat_position.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * sat_position.h
- *
- *  Created on: April 3, 2020
- *      Author: Joan Vallvé, Pep Martí-Saumell
- */
-
-#ifndef INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
-#define INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
-
-#include <eigen3/Eigen/Dense>
-#include <eigen3/Eigen/Geometry>
-#include <eigen3/Eigen/Sparse>
-
-#include "gnss_utils/observations.h"
-#include "gnss_utils/navigation.h"
-#include "gnss_utils/utils/transformations.h"
-#include "gnss_utils/gnss_utils.h"
-
-namespace GnssUtils
-{
-double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Vector3d& sat_ecef);
-
-void computeSatellitesPositions(const Observations&             obs,
-                                const Navigation&               nav,
-                                const prcopt_t&                 opt,
-                                std::map<int, Eigen::Vector3d>& sats_pos);
-}  // namespace GnssUtils
-#endif  // INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
\ No newline at end of file
diff --git a/include/gnss_utils/utils/satellite.h b/include/gnss_utils/utils/satellite.h
new file mode 100644
index 0000000000000000000000000000000000000000..665443d85d06af9fbf357b539bc15eda1a16f822
--- /dev/null
+++ b/include/gnss_utils/utils/satellite.h
@@ -0,0 +1,31 @@
+/*
+ * sat_position.h
+ *
+ *  Created on: April 3, 2020
+ *      Author: Joan Vallvé, Pep Martí-Saumell
+ */
+
+#ifndef INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
+#define INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
+
+#include <eigen3/Eigen/Dense>
+#include <eigen3/Eigen/Geometry>
+
+#include <set>
+
+#include "gnss_utils/observations.h"
+#include "gnss_utils/navigation.h"
+#include "gnss_utils/utils/transformations.h"
+#include "gnss_utils/gnss_utils.h"
+
+namespace GnssUtils
+{
+    double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Vector3d& sat_ecef);
+
+    void computeSatellitesPositions(const Observations&             obs,
+                                    const Navigation&               nav,
+                                    const int&                      eph_opt, // see rtklib.h L396
+                                    std::map<int, Eigen::Vector3d>& sats_pos);
+
+}  // namespace GnssUtils
+#endif  // INCLUDE_GNSS_UTILS_UTILS_SAT_POSITION_H_
diff --git a/src/observations.cpp b/src/observations.cpp
index 8f04ec1a62c866e58f074ef2468ade3a48ba5af7..4c455d0a43f459b3923ca9fd6e4335a100f78dfe 100644
--- a/src/observations.cpp
+++ b/src/observations.cpp
@@ -1,4 +1,5 @@
 #include "gnss_utils/observations.h"
+#include "gnss_utils/utils/satellite.h"
 
 using namespace GnssUtils;
 
@@ -187,6 +188,99 @@ void Observations::print()
   }
 }
 
+std::set<int> Observations::filter(std::map<int, Eigen::Vector3d>& sats_pos,
+                                   std::set<int>&                  discarded_sats,
+                                   const Eigen::Vector3d&          x_r,
+                                   const bool&                     check_code,
+                                   const bool&                     check_carrier_phase,
+                                   const prcopt_t&                 opt)
+{
+  std::cout << "filterSatellites: initial size: " << obs_.size() << std::endl;
+
+  std::set<int> remove_sats;
+
+  for (int obs_i = 0; obs_i < obs_.size(); obs_i++)
+  {
+    auto&& obs_sat = getObservationByIdx(obs_i);
+    const int& sat_number = obs_sat.sat;
+
+    // already discarded sats
+    if (discarded_sats.count(sat_number) != 0)
+    {
+      remove_sats.insert(sat_number);
+      continue;
+    }
+
+    // wrong data (satellite is not included in the discarded list)
+    if (check_carrier_phase and std::abs(obs_sat.L[0]) < 1e-12)
+    {
+      std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_sat.L[0] << std::endl;
+      remove_sats.insert(sat_number);
+      continue;
+    }
+    if (check_code and std::abs(obs_sat.P[0]) < 1e-12)
+    {
+      std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_sat.P[0] << std::endl;
+      remove_sats.insert(sat_number);
+      continue;
+    }
+
+    // bad or inexistent satellite position (satellite is not included in the discarded list)
+    if (sats_pos.count(sat_number) == 0 or
+        sats_pos[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3) or
+        sats_pos[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3))
+    {
+      std::cout << "Discarding sat " << sat_number << ": wrong satellite position: \n\t" << sats_pos[sat_number].transpose() << std::endl;
+      remove_sats.insert(sat_number);
+      continue;
+    }
+
+    // constellation
+    int sys = satsys(obs_sat.sat, NULL);
+    if (!(sys & opt.navsys))
+    {
+      std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " << opt.navsys << std::endl;
+      discarded_sats.insert(sat_number);
+      remove_sats.insert(sat_number);
+      continue;
+    }
+
+    // check both elevations
+    double elevation = computeSatElevation(x_r, sats_pos[sat_number]);
+    if (elevation < opt.elmin)
+    {
+      std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin << std::endl;
+      discarded_sats.insert(sat_number);
+      remove_sats.insert(sat_number);
+      continue;
+    }
+
+    // snr TODO: multifrequency (2nd param and 3rd idx)
+    if (testsnr(0, 0, elevation, obs_sat.SNR[0] * 0.25, &opt.snrmask) == 1)
+    {
+      std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl;
+      discarded_sats.insert(sat_number);
+      remove_sats.insert(sat_number);
+      continue;
+    }
+  }
+
+  // remove sats
+  // std::cout << "removing: " << remove_sats.size() << " satellites" << std::endl;
+  for (auto sat : remove_sats)
+  {
+    assert(hasSatellite(sat));
+    assert(sats_pos.count(sat));
+    removeObservationBySat(sat);
+    sats_pos.erase(sat);
+  }
+
+  assert(obs_.size() == sats_pos.size());
+
+  return remove_sats;
+  // std::cout << "final size: " << obs_.size() << std::endl;
+}
+
 void Observations::findCommonObservations(const Observations& obs_1,
                                           const Observations& obs_2,
                                           Observations&       common_obs_1,
@@ -219,6 +313,7 @@ void Observations::findCommonObservations(const Observations& obs_1,
   // std::cout << std::endl;
 }
 
+
 bool Observations::operator ==(const Observations &other_obs) const
 {
 
diff --git a/src/snapshot.cpp b/src/snapshot.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..87a08ede1ce51e16b1dd3809aeb2039d553d9c23
--- /dev/null
+++ b/src/snapshot.cpp
@@ -0,0 +1,32 @@
+#include "gnss_utils/snapshot.h"
+#include "gnss_utils/utils/satellite.h"
+
+using namespace GnssUtils;
+
+Snapshot::Snapshot()
+    : obs_(nullptr)
+    , nav_(nullptr)
+{
+    //
+}
+
+Snapshot::Snapshot(ObservationsPtr obs, NavigationPtr nav)
+    : obs_(obs)
+    , nav_(nav)
+{
+    //
+}
+
+void Snapshot::loadFromRinex(const std::string& rnx_file, gtime_t t_start, gtime_t t_end, double dt, const char* opt)
+{
+    throw std::runtime_error("not implemented!");
+}
+
+void Snapshot::computeSatellitesPositions(const int& eph_opt)
+{
+    assert(obs_!=nullptr && "null obs");
+    assert(nav_!=nullptr && "null nav");
+    assert(!satellitesPositionsComputed() && "satellites positions already computed");
+
+    GnssUtils::computeSatellitesPositions(*obs_, *nav_, eph_opt, sats_pos_);
+}
diff --git a/src/tdcp.cpp b/src/tdcp.cpp
index b38f9e26bd0924f693d045437f3477245af4810d..a3d6d357cb2d6f33def9215c7c004aa88e963a01 100644
--- a/src/tdcp.cpp
+++ b/src/tdcp.cpp
@@ -53,12 +53,12 @@ bool Tdcp(const Observations&    obs_r,
 
   // COMPUTE COMMON SATELLITES POSITION
   std::map<int, Eigen::Vector3d> common_sats_pos_r, common_sats_pos_k;
-  computeSatellitesPositions(common_obs_r, nav_r, opt, common_sats_pos_r);
-  computeSatellitesPositions(common_obs_k, sd_params.use_old_nav ? nav_r : nav_k, opt, common_sats_pos_k);
+  computeSatellitesPositions(common_obs_r, nav_r, opt.sateph, common_sats_pos_r);
+  computeSatellitesPositions(common_obs_k, sd_params.use_old_nav ? nav_r : nav_k, opt.sateph, common_sats_pos_k);
 
   // FILTER SATELLITES (ALREADY DISCARDED, CORRUPTED DATA, WRONG POSITION, CONSTELLATION, ELEVATION and SNR)
-  filterCommonSatellites(
-      common_obs_r, common_sats_pos_r, common_obs_k, common_sats_pos_k, discarded_sats, x_r, sd_params, opt);
+  filterCommonObservations(
+      common_obs_r, common_sats_pos_r, common_obs_k, common_sats_pos_k, discarded_sats, x_r, !sd_params.use_carrier_phase, sd_params.use_carrier_phase, opt);
 
   // COMPUTE SINGLE DIFFERENCES
   return Tdcp(common_obs_r,
@@ -463,14 +463,15 @@ bool Tdcp(const Observations&                   common_obs_r,
   return true;
 }
 
-void filterCommonSatellites(Observations&                   common_obs_r,
-                            std::map<int, Eigen::Vector3d>& common_sats_pos_r,
-                            Observations&                   common_obs_k,
-                            std::map<int, Eigen::Vector3d>& common_sats_pos_k,
-                            std::set<int>&                  discarded_sats,
-                            const Eigen::Vector3d&          x_r,
-                            const TdcpParams&               sd_params,
-                            const prcopt_t&                 opt)
+void filterCommonObservations(Observations&                   common_obs_r,
+                                std::map<int, Eigen::Vector3d>& common_sats_pos_r,
+                                Observations&                   common_obs_k,
+                                std::map<int, Eigen::Vector3d>& common_sats_pos_k,
+                                std::set<int>&                  discarded_sats,
+                                const Eigen::Vector3d&          x_r,
+                                const bool&                     check_code,
+                                const bool&                     check_carrier_phase,
+                                const prcopt_t&                 opt)
 {
   assert(&common_obs_r != &common_obs_k);
   assert(&common_sats_pos_r != &common_sats_pos_k);
@@ -478,7 +479,9 @@ void filterCommonSatellites(Observations&                   common_obs_r,
   assert(common_obs_r.size() == common_sats_pos_r.size());
   assert(common_obs_r.size() == common_sats_pos_k.size());
 
-  // std::cout << "filterCommonSatellites: initial size: " << common_obs_k.size() << std::endl;
+  // TODO: 2 calls to filterObservations and take the common again
+
+  std::cout << "filterSatellites: initial size: " << common_obs_k.size() << std::endl;
 
   std::set<int> remove_sats;
 
@@ -497,17 +500,15 @@ void filterCommonSatellites(Observations&                   common_obs_r,
     }
 
     // wrong data (satellite is not included in the discarded list)
-    if (sd_params.use_carrier_phase and (std::abs(obs_r.L[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12))
+    if (check_carrier_phase and (std::abs(obs_r.L[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12))
     {
-      // std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.L[0] << " " <<
-      // obs_k.L[0] << std::endl;
+      std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.L[0] << " " << obs_k.L[0] << std::endl;
       remove_sats.insert(sat_number);
       continue;
     }
-    if (!sd_params.use_carrier_phase and (std::abs(obs_r.P[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12))
+    if (check_code and (std::abs(obs_r.P[0]) < 1e-12 or std::abs(obs_k.L[0]) < 1e-12))
     {
-      // std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.P[0] << " " <<
-      // obs_k.P[0] << std::endl;
+      std::cout << "Discarding sat " << sat_number << ": wrong carrier phase data: " << obs_r.P[0] << " " << obs_k.P[0] << std::endl;
       remove_sats.insert(sat_number);
       continue;
     }
@@ -516,8 +517,7 @@ void filterCommonSatellites(Observations&                   common_obs_r,
     if (common_sats_pos_r[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3) or
         common_sats_pos_r[sat_number].isApprox(Eigen::Vector3d::Zero(), 1e-3))
     {
-      // std::cout << "Discarding sat " << sat_number << ": bad satellite position: \n\t" <<
-      // common_sats_pos_r[sat_number].transpose() << "\n\t" << common_sats_pos_k[sat_number].transpose() << std::endl;
+      std::cout << "Discarding sat " << sat_number << ": wrong satellite position: \n\t" << common_sats_pos_r[sat_number].transpose() << "\n\t" << common_sats_pos_k[sat_number].transpose() << std::endl;
       remove_sats.insert(sat_number);
       continue;
     }
@@ -526,8 +526,7 @@ void filterCommonSatellites(Observations&                   common_obs_r,
     int sys = satsys(obs_r.sat, NULL);
     if (!(sys & opt.navsys))
     {
-      // std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " <<
-      // opt.navsys << std::endl;
+      std::cout << "Discarding sat " << sat_number << ": not selected constellation " << sys << " - mask: " << opt.navsys << std::endl;
       discarded_sats.insert(sat_number);
       remove_sats.insert(sat_number);
       continue;
@@ -538,8 +537,7 @@ void filterCommonSatellites(Observations&                   common_obs_r,
                                 computeSatElevation(x_r, common_sats_pos_k[sat_number]));
     if (elevation < opt.elmin)
     {
-      // std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin <<
-      // std::endl;
+      std::cout << "Discarding sat " << sat_number << ": low elevation " << elevation << " - min: " << opt.elmin << std::endl;
       discarded_sats.insert(sat_number);
       remove_sats.insert(sat_number);
       continue;
@@ -548,7 +546,7 @@ void filterCommonSatellites(Observations&                   common_obs_r,
     // snr TODO: multifrequency (2nd param and 3rd idx)
     if (testsnr(0, 0, elevation, obs_r.SNR[0] * 0.25, &opt.snrmask) == 1)
     {
-      // std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl;
+      std::cout << "Discarding sat " << sat_number << ": snr test " << std::endl;
       discarded_sats.insert(sat_number);
       remove_sats.insert(sat_number);
       continue;
@@ -573,6 +571,7 @@ void filterCommonSatellites(Observations&                   common_obs_r,
   assert(common_obs_r.size() == common_sats_pos_r.size());
   assert(common_obs_r.size() == common_sats_pos_k.size());
 
+  return remove_sats;
   // std::cout << "final size: " << common_obs_k.size() << std::endl;
 }
 
diff --git a/src/utils/sat_position.cpp b/src/utils/satellite.cpp
similarity index 68%
rename from src/utils/sat_position.cpp
rename to src/utils/satellite.cpp
index 750441eb04f8e94d998664dda1c121985248a678..0a9193044f11fcebea129e16cf21cae6a07032cf 100644
--- a/src/utils/sat_position.cpp
+++ b/src/utils/satellite.cpp
@@ -5,7 +5,7 @@
  *      Author: Joan Vallvé, Pep Martí-Saumell
  */
 
-#include "gnss_utils/utils/sat_position.h"
+#include "gnss_utils/utils/satellite.h"
 
 using namespace GnssUtils;
 
@@ -33,31 +33,31 @@ double computeSatElevation(const Eigen::Vector3d& receiver_ecef, const Eigen::Ve
 
 void computeSatellitesPositions(const Observations&             obs,
                                 const Navigation&               nav,
-                                const prcopt_t&                 opt,
+                                const int&                      eph_opt,
                                 std::map<int, Eigen::Vector3d>& sats_pos)
 {
   double rs[6 * obs.size()], dts[2 * obs.size()], var[obs.size()];
   int    svh[obs.size()];
 
-  // std::cout << "computing sats position from sats: ";
-  // for (auto&& obs_ref : obs.getObservations())
-  //    std::cout << (int)obs_ref.sat << " ";
-  // std::cout << std::endl;
+//   std::cout << "computing position of sats: ";
+//   for (auto&& obs_ref : obs.getObservations())
+//      std::cout << (int)obs_ref.sat << " ";
+//   std::cout << std::endl;
 
   // compute positions
   satposs(
-      obs.getObservations().front().time, obs.data(), obs.size(), &nav.getNavigation(), opt.sateph, rs, dts, var, svh);
+      obs.getObservations().front().time, obs.data(), obs.size(), &nav.getNavigation(), eph_opt, rs, dts, var, svh);
 
   // store positions
   // std::cout << "filling sats positions: \n";
   for (int i = 0; i < obs.size(); i++)
   {
-    if (svh[i] < 0)  // ephemeris unavailable
-      sats_pos[obs.getObservationByIdx(i).sat] = Eigen::Vector3d::Zero();
-    else
       sats_pos[obs.getObservationByIdx(i).sat] << rs[6 * i], rs[6 * i + 1], rs[6 * i + 2];
-    // std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << ": " <<
-    // sats_pos[obs.getObservationByIdx(i).sat].transpose() << std::endl;
+      // std::cout << "\tsat: " << (int)obs.getObservationByIdx(i).sat << ": " <<
+      // sats_pos[obs.getObservationByIdx(i).sat].transpose() << std::endl;
+      // if (sats_pos[obs.getObservationByIdx(i).sat] == Eigen::Vector3d::Zero())
+      //    std::cout << "ephemeris not available for sat " << int(obs.getObservationByIdx(i).sat) << std::endl;
   }
 }
-}  // namespace GnssUtils
\ No newline at end of file
+
+}  // namespace GnssUtils
diff --git a/test/gtest_transformations.cpp b/test/gtest_transformations.cpp
index 22f7831647c1b7ebd043de0e737459556f60a284..f142ba3e57e01109957d2506be7a133fa706bf06 100644
--- a/test/gtest_transformations.cpp
+++ b/test/gtest_transformations.cpp
@@ -1,5 +1,5 @@
 #include "gtest/utils_gtest.h"
-#include "gnss_utils/utils/sat_position.h"
+#include "gnss_utils/utils/satellite.h"
 
 // Geodetic system parameters
 static double kSemimajorAxis = 6378137;