diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h
index c6ae53f8e037dad470402d9596c7d50774a1824a..f77bf48f3c1fa5ce540ea6d83904c8d684aa8dfd 100644
--- a/include/gnss_utils/gnss_utils.h
+++ b/include/gnss_utils/gnss_utils.h
@@ -4,6 +4,11 @@
 #include <vector>
 #include <iostream>
 #include <memory>
+
+#include <eigen3/Eigen/Dense>
+#include <eigen3/Eigen/Geometry>
+#include <eigen3/Eigen/Sparse>
+
 #include "observations.h"
 #include "navigation.h"
 
@@ -14,6 +19,27 @@ extern "C"
 
 namespace GNSSUtils
 {
-  static int getPos(Observations obs, Navigation nav, sol_t sol);
+  struct getPosOutput{
+    time_t time;
+    double sec;
+    Eigen::Vector3d pos;        // position (m)
+    Eigen::Vector3d vel;        // velocity (m/s)
+    Eigen::Matrix3d pos_covar;  // position covariance (m^2)
+                                // {c_xx,c_yy,c_zz,c_xy,c_yz,c_zx}
+    Eigen::VectorXd rcv_bias;   // receiver clock bias to time systems (s)
+    int type;                   // type (0:xyz-ecef,1:enu-baseline)
+    int stat;                   // solution status (SOLQ_???)
+    int ns;                     // number of valid satellites
+    double age;                 // age of differential (s)
+    double ratio;               // AR ratio factor for valiation
+
+    int pos_stat;               // return from pntpos
+    Eigen::Vector3d lat_lon;     // latitude_longitude_altitude
+  };
+
+  GNSSUtils::getPosOutput getPos(const std::shared_ptr<Observations> & _observations,
+                                const std::shared_ptr<Navigation> & _navigation);
+
+  Eigen::Vector3d ecefToLatLon(const Eigen::Vector3d & _ecef);
 }
 #endif
diff --git a/include/gnss_utils/navigation.h b/include/gnss_utils/navigation.h
index a627ff80478c37b4bf8a6eab755906bef2ce961d..a58c834e807cf31950b5b3a9ea705e30ca685f1a 100644
--- a/include/gnss_utils/navigation.h
+++ b/include/gnss_utils/navigation.h
@@ -37,99 +37,21 @@ namespace GNSSUtils
 
       // Ephemeris
       void allocateEphemeris(int n_sat = MAXSAT);
-
       void deleteEphemeris();
 
       void allocateGLONASSEphemeris(int n_sat = NSATGLO);
-
       void deleteGLONASSEphemeris();
 
       void allocateSBASEphemeris(int n_sat = NSATSBS*2); //SBAS
-
       void deleteSBASEphemeris();
 
       void allocateAlmanac(int n_sat = MAXSAT);
-
       void deleteAlmanac();
 
-
-      // UTC
-      void allocateUTCGPS(int n);    //GPS
-
-      void deleteUTCGPS();
-
-      void allocateUTCGlo(int n);    // Glo
-
-      void deleteUTCGlo();
-
-      void allocateUTCGal(int n);    // Galileo
-
-      void deleteUTCGal();
-
-      void allocateUTCQZS(int n);    // QZS
-
-      void deleteUTCQZS();
-
-      void allocateUTCCMP(int n);    // BeiDou
-
-      void deleteUTCCMP();
-
-      void allocateUTCSBAS(int n);    // SBAS
-
-      void deleteUTCSBAS();
-
-
-      // Ionosphere
-      void allocateIonGPS(int n);      // GPS
-
-      void deleteIonGPS();
-
-      void allocateIonGal(int n);      // Galileo
-
-      void deleteIonGal();
-
-      void allocateIonQZS(int n);      // QZS
-
-      void deleteIonQZS();
-
-      void allocateIonCMP(int n);      // BeiDou
-
-      void deleteIonCMP();
-
-
-      //Others
-      void allocatelam(int n);
-
-      void deletelam();
-
-      void allocatecbias(int n);
-
-      void deletecbias();
-
-      void allocatewlbias(int n);
-
-      void deletewlbias();
-
-      void allocateglocpbias(int n);
-
-      void deleteglocpbias();
-
-      void allocateglofcn(int n);
-
-      void deleteglofcn();
-
-      void allocatepcv(int n);
-
-      void deletepcv();
-
-      void allocatesbsion(int n);
-
-      void deletesbsion();
-
     private:
 
       // rtklib-like attribute to represent the different navigation msgs for a given epoch
-      nav_t _nav;
+      nav_t nav_;
 
       // Private methods
 
diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h
index 16e230cbb0f9e09a5be19cdddf3a975fed8097ba..4293b07ba6d2f1a8c39d364ef2c9253ff41e96c4 100644
--- a/include/gnss_utils/observations.h
+++ b/include/gnss_utils/observations.h
@@ -39,7 +39,7 @@ namespace GNSSUtils
     private:
       // Private objects
       // rtklib-like attribute to represent the different observation msgs for a given epoch
-      std::vector<obsd_t> _obsVector;
+      std::vector<obsd_t> obs_vector_;
 
 
       // Private methods
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d6c0627251bdbc930749d617133da5333321a4f7..407da06c9b0e07578e289988563c99090156825d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,33 +1,33 @@
 # rtklib path
-set(rtklib_dir ../deps/RTKLIB)
-set(rtklib_src_dir ${rtklib_dir}/src)
+SET(RTKLIB_DIR ../deps/RTKLIB)
+SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src)
 
 # driver source files
-SET(sources
+SET(SOURCES
     gnss_utils.cpp
     observations.cpp
     navigation.cpp)
 
-SET(rtklib_src
-    ${rtklib_src_dir}/pntpos.c
-    ${rtklib_src_dir}/rtkcmn.c
-    ${rtklib_src_dir}/sbas.c
-    ${rtklib_src_dir}/ephemeris.c
-    ${rtklib_src_dir}/preceph.c
-    ${rtklib_src_dir}/qzslex.c
-    ${rtklib_src_dir}/rtcm.c
-    ${rtklib_src_dir}/rtcm2.c
-    ${rtklib_src_dir}/rtcm3.c
-    ${rtklib_src_dir}/rtcm3e.c
-    ${rtklib_src_dir}/ionex.c
-    ${rtklib_src_dir}/rinex.c)
+SET(RTKLIB_SRC
+    ${RTKLIB_SRC_DIR}/pntpos.c
+    ${RTKLIB_SRC_DIR}/rtkcmn.c
+    ${RTKLIB_SRC_DIR}/sbas.c
+    ${RTKLIB_SRC_DIR}/ephemeris.c
+    ${RTKLIB_SRC_DIR}/preceph.c
+    ${RTKLIB_SRC_DIR}/qzslex.c
+    ${RTKLIB_SRC_DIR}/rtcm.c
+    ${RTKLIB_SRC_DIR}/rtcm2.c
+    ${RTKLIB_SRC_DIR}/rtcm3.c
+    ${RTKLIB_SRC_DIR}/rtcm3e.c
+    ${RTKLIB_SRC_DIR}/ionex.c
+    ${RTKLIB_SRC_DIR}/rinex.c)
 
 
 # application header files
-SET(headers
-    ../include/gnss_utils.h
-    ../include/observations.h
-    ../include/navigation.h)
+SET(HEADERS
+    ../include/gnss_utils/gnss_utils.h
+    ../include/gnss_utils/observations.h
+    ../include/gnss_utils/navigation.h)
 
 # Eigen #######
 FIND_PACKAGE(Eigen3 REQUIRED)
@@ -45,7 +45,7 @@ link_directories(/usr/lib/x86_64-linux-gnu/)
 INCLUDE_DIRECTORIES(../include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTK_LIB_PATH})
 
 # create the shared library
-ADD_LIBRARY(gnss_utils SHARED ${sources} ${rtklib_src})
+ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC})
 TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES})
 
 # Installing
@@ -53,7 +53,7 @@ INSTALL(TARGETS gnss_utils
         RUNTIME DESTINATION bin
         LIBRARY DESTINATION /usr/local/lib
         ARCHIVE DESTINATION lib)
-INSTALL(FILES ${headers} DESTINATION include/gnss_utils)
+INSTALL(FILES ${HEADERS} DESTINATION include/gnss_utils)
 # INSTALL(FILES ../gnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
 INSTALL(FILES ../Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
 ADD_SUBDIRECTORY(examples)
diff --git a/src/examples/gnss_utils_test.cpp b/src/examples/gnss_utils_test.cpp
index 646299a5a2f51faa0bc12442f4d0d043127f2b58..569d1448d6cf5b8451f2b8acae56108cf24e825f 100644
--- a/src/examples/gnss_utils_test.cpp
+++ b/src/examples/gnss_utils_test.cpp
@@ -146,7 +146,7 @@ int main(int argc, char *argv[])
   // create Navigation object
   Navigation navigation;
 
-  createObsAndNav(&observations, "../examples/raw_201805171357.obs", &navigation, "../examples/raw_201805171357.nav");
+  createObsAndNav(&observations, "../src/examples/raw_201805171357.obs", &navigation, "../src/examples/raw_201805171357.nav");
 
   nav_t nav = navigation.getNavigation();
 
diff --git a/src/gnss_utils.cpp b/src/gnss_utils.cpp
index 192710aa89533d1fd448567b32e71c100a44ca63..ed36ae3e1e92c58b0bb2b9f27ed360cd8a4246ac 100644
--- a/src/gnss_utils.cpp
+++ b/src/gnss_utils.cpp
@@ -1,36 +1,69 @@
 #include "gnss_utils/gnss_utils.h"
 
-using namespace GNSSUtils;
-
-static int getPos(Observations observations, Navigation navigation, sol_t sol)
+namespace GNSSUtils
 {
-  // Define observations
-  std::vector<obsd_t> obs = observations.getObservations();
-
-  // Define navigation
-  nav_t nav = navigation.getNavigation();
-
-  // Define processing options
-  prcopt_t prcopt = prcopt_default;
-  prcopt.mode = PMODE_SINGLE;
-  prcopt.soltype = 0;
-  prcopt.nf = 1;
-  prcopt.navsys = SYS_GPS;
-  //prcopt.elmin = 1.05;  // 60 degrees = 1.05 rad
-  prcopt.sateph = EPHOPT_BRDC;
-  prcopt.ionoopt = IONOOPT_OFF;
-  prcopt.tropopt = TROPOPT_OFF;
-  prcopt.dynamics = 0;
-  prcopt.tidecorr = 0;
-  prcopt.sbascorr = SBSOPT_FCORR;
-
-  // Define solution
-  sol_t solb={{0}};
-
-  // Define error msg
-  char msg[128]="";
-
-  int stat = pntpos(&(obs[0]), obs.size(), &nav, &prcopt, &solb, NULL, NULL, msg);
-
-  return stat;
+  GNSSUtils::getPosOutput getPos(const std::shared_ptr<GNSSUtils::Observations> & _observations,
+                                const std::shared_ptr<GNSSUtils::Navigation> & _navigation)
+  {
+    // Remove duplicated satellites
+    uniqnav(&(_navigation->getNavigation()));
+
+    // Define processing options
+    prcopt_t prcopt = prcopt_default;
+    prcopt.mode = PMODE_SINGLE;
+    prcopt.soltype = 0;
+    prcopt.nf = 1;
+    prcopt.navsys = SYS_GPS;
+    //prcopt.elmin = 1.05;  // 60 degrees = 1.05 rad
+    prcopt.sateph = EPHOPT_BRDC;
+    prcopt.ionoopt = IONOOPT_OFF;
+    prcopt.tropopt = TROPOPT_OFF;
+    prcopt.dynamics = 0;
+    prcopt.tidecorr = 0;
+    prcopt.sbascorr = SBSOPT_FCORR;
+
+    // Define error msg
+    char msg[128] = "";
+
+    GNSSUtils::getPosOutput output;
+    sol_t sol;
+    sol = {{0}};
+
+    output.pos_stat = pntpos(&(_observations->getObservations()[0]), _observations->getObservations().size(),
+                            &(_navigation->getNavigation()),
+                            &prcopt, &sol, NULL, NULL, msg);
+
+    output.time = sol.time.time;
+    output.time = sol.time.sec;
+    output.pos  = Eigen::Map<Eigen::Vector3d>(sol.rr);
+    output.vel  = Eigen::Map<Eigen::Vector3d>(&sol.rr[3]);
+    output.pos_covar << sol.qr[0], sol.qr[3], sol.qr[5],
+                        sol.qr[3], sol.qr[1], sol.qr[4],
+                        sol.qr[5], sol.qr[3], sol.qr[2];
+
+    // XXX: segmentation fault here.
+    // if (sol.dtr != NULL)
+    // {
+    //   output.rcv_bias << sol.dtr[0], sol.dtr[1], sol.dtr[2], sol.dtr[3], sol.dtr[4], sol.dtr[5];
+    // }
+
+    output.type  = sol.type;
+    output.stat  = sol.stat;
+    output.ns    = sol.ns;
+    output.age   = sol.age;
+    output.ratio = sol.ratio;
+    output.lat_lon = ecefToLatLon(output.pos);
+
+    return output;
+  }
+
+  Eigen::Vector3d ecefToLatLon(const Eigen::Vector3d & _ecef)
+  {
+    double pos[3];
+    ecef2pos(&_ecef(0), pos);
+
+    return Eigen::Map<Eigen::Vector3d>(pos);
+  }
+
+
 }
diff --git a/src/navigation.cpp b/src/navigation.cpp
index edb0c55334de7c691ae35f25f72fe98ace63263e..0bdf9edee36de392231cbee5b9fbaf127a340725 100644
--- a/src/navigation.cpp
+++ b/src/navigation.cpp
@@ -5,14 +5,7 @@ using namespace GNSSUtils;
 
 
 Navigation::Navigation()
-{
-  //_nav = (nav_t *) malloc(sizeof(nav_t));
-  allocateEphemeris();
-  allocateGLONASSEphemeris();
-  allocateSBASEphemeris();
-
-  allocateAlmanac();
-}
+{}
 
 Navigation::~Navigation()
 {
@@ -25,92 +18,33 @@ void Navigation::clearNavigation()
   deleteEphemeris();
   deleteGLONASSEphemeris();
   deleteSBASEphemeris();
-
   deleteAlmanac();
-
-  /*
-  this->deleteUTCGPS();
-  this->deleteUTCGlo();
-  this->deleteUTCGal();
-  this->deleteUTCQZS();
-  this->deleteUTCCMP();
-  this->deleteUTCSBAS();
-
-  this->deleteIonGPS();
-  this->deleteIonGal();
-  this->deleteIonQZS();
-  this->deleteIonCMP();
-
-  this->deletelam();
-  this->deletecbias();
-
-  this->deletewlbias();
-  this->deleteglocpbias();
-  this->deleteglofcn();
-
-  this->deletepcv();
-  this->deletesbsion();
-  */
 }
 
-void Navigation::setNavigation(nav_t nav)
+void Navigation::setNavigation(nav_t _nav)
 {
-  /*
-  allocateEphemeris();
-  allocateGLONASSEphemeris();
-  allocateSBASEphemeris();
-
-  allocateAlmanac();
-
-
-  this->allocateUTCGPS(4);
-  this->allocateUTCGlo(4);
-  this->allocateUTCGal(4);
-  this->allocateUTCQZS(4);
-  this->allocateUTCCMP(4);
-  this->allocateUTCSBAS(4);
-
-  this->allocateIonGPS(8);
-  this->allocateIonGal(4);
-  this->allocateIonQZS(8);
-  this->allocateIonCMP(8);
-
-  this->allocatelam(MAXSAT*NFREQ);
-  this->allocatecbias(MAXSAT*3);
-
-  this->allocatewlbias(MAXSAT);
-  this->allocateglocpbias(4);
-  this->allocateglofcn(MAXPRNGLO+1);
-
-  this->allocatepcv(MAXSAT);
-  this->allocatesbsion(MAXBAND+1);
-  */
-
-
-  _nav = nav;
+  nav_ = _nav;
 }
 
 const nav_t & Navigation::getNavigation() const
 {
-  return _nav;
+  return nav_;
 }
 
 nav_t & Navigation::getNavigation()
 {
-  return _nav;
+  return nav_;
 }
 
 
 /****************** Array memory management ******************/
-
-
 void Navigation::allocateEphemeris(int n_sat)
 {
 
   eph_t eph0 ={0,-1,-1};
   int i;
-  _nav.eph = (eph_t *) malloc(sizeof(eph_t)*n_sat);
-  for (i=0;i<n_sat;i++) _nav.eph[i] = eph0;
+  nav_.eph = (eph_t *) malloc(sizeof(eph_t)*n_sat);
+  for (i=0;i<n_sat;i++) nav_.eph[i] = eph0;
   /*
   if (this->_nav->eph)
   {
@@ -123,29 +57,16 @@ void Navigation::allocateEphemeris(int n_sat)
   }
   */
 }
-
 void Navigation::deleteEphemeris()
 {
-  //free(_nav.eph);
-  /*
-  if (_nav->eph)
-  {
-    free(_nav->eph);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-  */
+  free(nav_.eph);
 }
 
-
 void Navigation::allocateGLONASSEphemeris(int n_sat)
 {
   geph_t geph0={0,-1};
   int i;
-  _nav.geph = (geph_t *)malloc(sizeof(geph_t)*n_sat);
+  nav_.geph = (geph_t *)malloc(sizeof(geph_t)*n_sat);
   /*
   for (i=0;i<NSATGLO   ;i++) _nav.geph[i] = geph0;
 
@@ -161,22 +82,19 @@ void Navigation::allocateGLONASSEphemeris(int n_sat)
   */
 
 }
-
 void Navigation::deleteGLONASSEphemeris()
 {
-  /*
-  free(_nav->geph);
-
-  if (_nav->geph)
-  {
-    free(_nav->geph);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-  */
+  free(nav_.geph);
+  // if (_nav->geph)
+  // {
+  //   free(_nav->geph);
+  // }
+  //
+  // else
+  // {
+  //   // Do nothing
+  // }
+  //
 }
 
 void Navigation::allocateSBASEphemeris(int n_sat)
@@ -184,8 +102,8 @@ void Navigation::allocateSBASEphemeris(int n_sat)
   seph_t seph0={0};
   int i;
 
-  _nav.seph = (seph_t *)malloc(sizeof(seph_t)*n_sat);
-  for (i=0; i<n_sat; i++) _nav.seph[i] = seph0;
+  nav_.seph = (seph_t *)malloc(sizeof(seph_t)*n_sat);
+  for (i=0; i<n_sat; i++) nav_.seph[i] = seph0;
   /*
   if (this->_nav->seph)
   {
@@ -198,22 +116,18 @@ void Navigation::allocateSBASEphemeris(int n_sat)
   }
   */
 }
-
 void Navigation::deleteSBASEphemeris()
 {
-  /*
-  free(_nav->seph);
-
-  if (_nav->seph)
-  {
-    free(_nav->seph);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-  */
+  free(nav_.seph);
+  // if (_nav->seph)
+  // {
+  //   free(_nav->seph);
+  // }
+  //
+  // else
+  // {
+  //   // Do nothing
+  // }
 }
 
 void Navigation::allocateAlmanac(int n_sat)
@@ -221,8 +135,8 @@ void Navigation::allocateAlmanac(int n_sat)
   alm_t  alm0 ={0,-1};
   int i;
 
-  _nav.alm = (alm_t *)malloc(sizeof(alm_t)*n_sat);
-  for (i=0; i<n_sat; i++) _nav.alm[i] = alm0;
+  nav_.alm = (alm_t *)malloc(sizeof(alm_t)*n_sat);
+  for (i=0; i<n_sat; i++) nav_.alm[i] = alm0;
   /*
   if (this->_nav->alm)
   {
@@ -235,502 +149,17 @@ void Navigation::allocateAlmanac(int n_sat)
   }
   */
 }
-
 void Navigation::deleteAlmanac()
 {
-  /*
-  free(_nav->alm);
-
-  if (_nav->alm)
-  {
-    free(_nav->alm);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-  */
-}
-
-
-// UTC
-/*
-void Navigation::allocateUTCGPS(int n)  //GPS
-{
-  if (_nav->utc_gps)
-  {
-    _nav->utc_gps = (double *)realloc(_nav->utc_gps, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_gps = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-
-void Navigation::deleteUTCGPS()
-{
-  if (_nav->utc_gps)
-  {
-    free(_nav->utc_gps);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateUTCGlo(int n)  //GLONASS
-{
-  if (_nav->utc_glo)
-  {
-    _nav->utc_glo = (double *)realloc(_nav->utc_glo, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_glo = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteUTCGlo()
-{
-  if (_nav->utc_glo)
-  {
-    free(_nav->utc_glo);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateUTCGal(int n)  //Galileo
-{
-  if (_nav->utc_gal)
-  {
-    _nav->utc_gal = (double *)realloc(_nav->utc_gal, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_gal = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteUTCGal()
-{
-  if (_nav->utc_gal)
-  {
-    free(_nav->utc_gal);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateUTCQZS(int n)  //QZS
-{
-  if (_nav->utc_qzs)
-  {
-    _nav->utc_qzs = (double *)realloc(_nav->utc_qzs, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_qzs = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteUTCQZS()
-{
-  if (_nav->utc_qzs)
-  {
-    free(_nav->utc_qzs);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateUTCCMP(int n)  //BeiDou
-{
-  if (_nav->utc_cmp)
-  {
-    _nav->utc_cmp = (double *)realloc(_nav->utc_cmp, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_cmp = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteUTCCMP()
-{
-  if (_nav->utc_cmp)
-  {
-    free(_nav->utc_cmp);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateUTCSBAS(int n)  //SBAS
-{
-  if (_nav->utc_sbs)
-  {
-    _nav->utc_sbs = (double *)realloc(_nav->utc_sbs, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_sbs = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteUTCSBAS()
-{
-  if (_nav->utc_sbs)
-  {
-    free(_nav->utc_sbs);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-// Ionosphere
-
-void Navigation::allocateIonGPS(int n)  //GPS
-{
-  if (_nav->ion_gps)
-  {
-    _nav->ion_gps = (double *)realloc(_nav->ion_gps, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->ion_gps = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteIonGPS()
-{
-  if (_nav->ion_gps)
-  {
-    free(_nav->ion_gps);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateIonGal(int n)  //Galileo
-{
-  if (_nav->utc_gal)
-  {
-    _nav->utc_gal = (double *)realloc(_nav->utc_gal, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_gal = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteIonGal()
-{
-  if (_nav->utc_gal)
-  {
-    free(_nav->utc_gal);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateIonQZS(int n)  //QZS
-{
-  if (_nav->utc_qzs)
-  {
-    _nav->utc_qzs = (double *)realloc(_nav->utc_qzs, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_qzs = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteIonQZS()
-{
-  if (_nav->utc_qzs)
-  {
-    free(_nav->utc_qzs);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateIonCMP(int n)  //BeiDou
-{
-  if (_nav->utc_cmp)
-  {
-    _nav->utc_cmp = (double *)realloc(_nav->utc_cmp, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->utc_cmp = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteIonCMP()
-{
-  if (_nav->utc_cmp)
-  {
-    free(_nav->utc_cmp);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-// Others
-
-void Navigation::allocatelam(int n)
-{
-  if (_nav->lam)
-  {
-    _nav->lam = (double *)realloc(_nav->lam, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->lam = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deletelam()
-{
-  if (_nav->lam)
-  {
-    free(_nav->lam);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocatecbias(int n)
-{
-  if (_nav->cbias)
-  {
-    _nav->cbias = (double *)realloc(_nav->cbias, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->cbias = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deletecbias()
-{
-  if (_nav->cbias)
-  {
-    free(_nav->cbias);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocatewlbias(int n)
-{
-  if (_nav->wlbias)
-  {
-    _nav->wlbias = (double *)realloc(_nav->wlbias, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->wlbias = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deletewlbias()
-{
-  if (_nav->wlbias)
-  {
-    free(_nav->wlbias);
-  }
+  free(nav_.alm);
 
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateglocpbias(int n)
-{
-  if (_nav->glo_cpbias)
-  {
-    _nav->glo_cpbias = (double *)realloc(_nav->glo_cpbias, n * sizeof(double));
-  }
-
-  else
-  {
-    _nav->glo_cpbias = (double *) malloc(n * sizeof(double));
-  }
-}
-
-
-void Navigation::deleteglocpbias()
-{
-  if (_nav->glo_cpbias)
-  {
-    free(_nav->glo_cpbias);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocateglofcn(int n)
-{
-  if (_nav->glo_fcn)
-  {
-    _nav->glo_fcn = (char *)realloc(_nav->glo_fcn, n * sizeof(char));
-  }
-
-  else
-  {
-    _nav->glo_fcn = (char *) malloc(n * sizeof(char));
-  }
-}
-
-
-void Navigation::deleteglofcn()
-{
-  if (_nav->glo_fcn)
-  {
-    free(_nav->glo_fcn);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocatepcv(int n)
-{
-  if (_nav->pcvs)
-  {
-    _nav->pcvs = (pcv_t *)realloc(_nav->pcvs, n * sizeof(pcv_t));
-  }
-
-  else
-  {
-    _nav->pcvs = (pcv_t*) malloc(n * sizeof(pcv_t));
-  }
-}
-
-
-void Navigation::deletepcv()
-{
-  if (_nav->pcvs)
-  {
-    free(_nav->pcvs);
-  }
-
-  else
-  {
-    // Do nothing
-  }
-}
-
-
-void Navigation::allocatesbsion(int n)
-{
-  if (_nav->sbsion)
-  {
-    _nav->sbsion = (sbsion_t *)realloc(_nav->sbsion, n * sizeof(sbsion_t));
-  }
-
-  else
-  {
-    _nav->sbsion = (sbsion_t*) malloc(n * sizeof(sbsion_t));
-  }
-}
-
-
-void Navigation::deletesbsion()
-{
-  if (_nav->sbsion)
-  {
-    free(_nav->sbsion);
-  }
-
-  else
-  {
-    // Do nothing
-  }
+  // if (_nav->alm)
+  // {
+  //   free(_nav->alm);
+  // }
+  //
+  // else
+  // {
+  //   // Do nothing
+  // }
 }
-*/
diff --git a/src/observations.cpp b/src/observations.cpp
index 75d05f150c9f5cb82d37f6e1dd360afd1fa54502..db7529d4d7ad37a518f141057b7e120322bb7952 100644
--- a/src/observations.cpp
+++ b/src/observations.cpp
@@ -10,20 +10,20 @@ Observations::Observations()
 
 Observations::~Observations()
 {
-  this->_obsVector.erase(_obsVector.begin(), _obsVector.end());
+  this->obs_vector_.erase(obs_vector_.begin(), obs_vector_.end());
 }
 
 void Observations::clearObservations()
 {
-  this->_obsVector.clear();
+  this->obs_vector_.clear();
 }
 
 void Observations::pushObservation(obsd_t obs)
 {
-  this->_obsVector.push_back(obs);
+  this->obs_vector_.push_back(obs);
 }
 
 std::vector<obsd_t> Observations::getObservations()
 {
-  return this->_obsVector;
+  return this->obs_vector_;
 }