diff --git a/include/getPos.h b/include/getPos.h
new file mode 100644
index 0000000000000000000000000000000000000000..c6ae53f8e037dad470402d9596c7d50774a1824a
--- /dev/null
+++ b/include/getPos.h
@@ -0,0 +1,19 @@
+#ifndef GNSS_UTILS_H
+#define GNSS_UTILS_H
+
+#include <vector>
+#include <iostream>
+#include <memory>
+#include "observations.h"
+#include "navigation.h"
+
+extern "C"
+{
+    #include "../deps/RTKLIB/src/rtklib.h"
+}
+
+namespace GNSSUtils
+{
+  static int getPos(Observations obs, Navigation nav, sol_t sol);
+}
+#endif
diff --git a/include/gnss_utils.h b/include/gnss_utils.h
deleted file mode 100644
index 80c4757b2bc7d14f68db3d33e3d59ffbc513859f..0000000000000000000000000000000000000000
--- a/include/gnss_utils.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef GNSS_UTILS_H
-#define GNSS_UTILS_H
-
-#include <vector>
-#include <iostream>
-#include <memory>
-#include "observations.h"
-#include "navigation.h"
-
-extern "C"
-{
-    #include "../deps/RTKLIB/src/rtklib.h"
-}
-
-namespace GNSSUtils
-{
-  class Receiver
-  {
-    public:
-      // Public objects
-
-      // Constructor & Destructor
-      Receiver();
-      ~Receiver();
-
-
-      // Public methods
-      const std::shared_ptr<GNSSUtils::Observations> getObs();
-      const std::shared_ptr<GNSSUtils::Navigation> getNav();
-
-      /* - Processing Options - */
-
-      void clearOptions();
-
-      void setOptions(prcopt_t opt);
-
-      prcopt_t getOptions();
-
-
-      /* - Solution - */
-
-      void clearSolution();
-
-      void setSolution(sol_t sol);
-
-      sol_t getSolution();
-
-
-      /* - Satellite status - */
-
-      void clearSatStatus();
-
-      void setSatStatus(ssat_t ssat);
-
-      ssat_t getSatStatus();
-
-
-      /* - Compute Fix - */
-
-      int computeSPP(double *azel, char *msg);
-
-    protected:
-      // Private objects
-      // GNSSUtils::Observation attribute to represent the different observation msgs for a given epoch
-      std::shared_ptr<GNSSUtils::Observations> obs_ptr_;
-
-      // GNSSUtils::Navigation attribute to represent the different navigation msgs for a given epoch
-      std::shared_ptr<GNSSUtils::Navigation> nav_ptr_;
-
-      // rtklib-like attribute to represent the different options for a given epoch
-      prcopt_t _opt;
-
-      // rtklib-like attribute to represent the solution for a given epoch
-      sol_t _sol;
-
-      // rtklib-like attribute to represent the satellite status for a given epoch
-      ssat_t _ssat;
-
-      // Private methods
-
-
-  };
-}
-#endif
diff --git a/src/examples/gnss_utils_test.cpp b/src/examples/gnss_utils_test.cpp
index 5d6f5a6558bef128fa74d2c715276a8e8b91a0c7..362668760a97d51db5d049ed28d0f2be12e3556e 100644
--- a/src/examples/gnss_utils_test.cpp
+++ b/src/examples/gnss_utils_test.cpp
@@ -9,115 +9,101 @@
 
 extern "C"
 {
-    #include "../deps/RTKLIB/src/rinex.c"
+    #include "/home/jlaplaza/RTKLIB/src/rinex.c"
 }
 
 using namespace GNSSUtils;
 
 
-
-Observations createObs()
+int createObsAndNav(Observations* observations, char* obs_path,  Navigation* navigation, char* nav_path)
 {
-  /* create an Observations object */
-  Observations observations;
-
-  /* set _obsVector attribute */
-  int year=2018, month=5, day=17, hour=14, min=1, seconds=2;
-  double seconds_frac=0.002;
-  time_t te = {0};
-
-  gtime_t time = {te, seconds_frac};
-
-  obsd_t observation;
-  observation.time = time;
-  observation.sat = 25;
-  observation.rcv = 1;
-  observation.SNR[0] = 45;
-  observation.LLI[0] = 0; //??????????
-  observation.code[0] = 0; //?????????
-  observation.L[0] = 117441226.71621;
-  observation.P[0] = 22348322.550;
-  observation.D[0] = -3039.055;
-
-  observations.pushObservation(observation);
-
-  observation.time = time;
-  observation.sat = 29;
-  observation.rcv = 1;
-  observation.SNR[0] = 23;
-  observation.LLI[0] = 0; //??????????
-  observation.code[0] = 0; //?????????
-  // observation.L[0] = ;
-  observation.P[0] = 20873167.574;
-  observation.D[0] = -2449.652;
-
-  observations.pushObservation(observation);
-
-  observation.time = time;
-  observation.sat = 31;
-  observation.rcv = 1;
-  observation.SNR[0] = 39;
-  observation.LLI[0] = 0; //??????????
-  observation.code[0] = 0; //?????????
-  observation.L[0] = 109939061.00922;
-  observation.P[0] = 20920707.830;
-  observation.D[0] = -1587.315;
-
-  observations.pushObservation(observation);
-
-  observation.time = time;
-  observation.sat = 21;
-  observation.rcv = 1;
-  observation.SNR[0] = 37;
-  observation.LLI[0] = 0; //??????????
-  observation.code[0] = 0; //?????????
-  observation.L[0] = 113496465.14223;
-  observation.P[0] = 21597659.275;
-  observation.D[0] = 1343.465;
-
-  observations.pushObservation(observation);
-
-  return observations;
-}
+  // Time
+  double ts_d[] = {2018, 5, 17, 14, 1, 2};
+  gtime_t ts = epoch2time(ts_d);
 
+  double te_d[] = {2018, 5, 17, 14, 42, 8};
+  gtime_t te = epoch2time(te_d);
 
+  double tint = 0.1;  
 
-Navigation createNav(char * nav_path)
-{
-  /* create a Navigation object */
-  Navigation navigation;
+  // Create options container
+  char* opt = "-SYS=G";
 
-  /* Load _nav attribute into nav variable */
-  nav_t nav = navigation.getNavigation();
+  // Create receiver identifier
+  int rcv = 1;
 
-  /* Open navigation file */
-  FILE *fp = fopen(nav_path,"r");
+  // Create object types
+  rnxopt_t rnx_opt;
 
-  /* Set constellation mask -SYS=sys[,sys...]: select navi systems       (sys=G:GPS,R:GLO,E:GAL,J:QZS,C:BDS,S:SBS) */
-  char* opt = "-SYS=G";
+  // Create obsd_t object to hold the observations
+  obs_t obs;
+  obs.data = (obsd_t *) malloc(sizeof(obsd_t)*MAXSAT);
+
+
+
+  if (readrnx(obs_path, rcv, opt, &obs, NULL, NULL))
+  {
+    obs.data[0].P[0] = 22352029.710;
+    obs.data[1].P[0] = 20876138.578;
+    obs.data[2].P[0] = 20922649.533;
+    obs.data[3].P[0] = 24736002.147;
+    obs.data[4].P[0] = 21596022.619;
+    
+    std::cout << "Obs number: " << obs.n << std::endl;
+    
+    sortobs(&obs); 
+  }
+  
+
+  else 
+  {
+    std::cout << "Couldn't load provided observation file" << std::endl;
+    return 0;
+  }
+  
+  
+
+  for (int i=0; i < obs.n; i++)
+  {
+    std::cout << "time: " << obs.data[i].time.time <<  " | sat: " << int(obs.data[i].sat) << " | rcv: " << obs.data[i].rcv << 
+               " | SNR: " << obs.data[i].SNR[0] << " | LLI: " << obs.data[i].LLI[0] << " | code: " << obs.data[i].code[0] << 
+                 " | L: " << obs.data[i].L[0] <<  " | P: " << obs.data[i].P[0] << " | D: " << obs.data[i].D[0] << std::endl;
+    observations->pushObservation(obs.data[i]);
+  }
+
+  free(obs.data);
 
-  /* Read navigation file, SYS can be SYS_ALL, SYS_GPS, SYS_SBS, SYS_GLO, SYS_GAL, ... */
-  if (readrnxnav(fp, opt, 3.03, SYS_ALL, &nav)){
+
+  /* Load _nav attribute into nav variable */
+  nav_t nav = navigation->getNavigation();
+
+  if (readrnx(nav_path, rcv, opt, NULL, &nav, NULL))
+  {
     std::cout << "Navigation file loaded" << std::endl;
     std::cout << "GPS satellites: " << nav.n << std::endl;
     std::cout << "GLONASS satellites: " << nav.ng << std::endl;
     std::cout << "SBAS satellites: " << nav.ns << std::endl;
     std::cout << "Almanac satellites: " << nav.na << std::endl;
+    uniqnav(&nav);   
   }
+  
 
-  else {
+  else 
+  {
     std::cout << "Couldn't load provided navigation file" << std::endl;
+    return 0;
   }
 
+  
   /* Print Constellation Satellites ids */
   for (int i=0;i<nav.n;i++)
   {
-    std::cout <<  i << "GPS/GAL Sat Id: " << nav.eph[i].sat << std::endl;
+    std::cout <<  i << " GPS Sat Id: " << nav.eph[i].sat << std::endl;
   }
 
   for (int i=0;i<nav.ng;i++)
   {
-    std::cout <<  i << "GLONASS Sat Id: " << nav.geph[i].sat << std::endl;
+    std::cout <<  i << " GLONASS Sat Id: " << nav.geph[i].sat << std::endl;
   }
 
   for (int i=0;i<nav.ns;i++)
@@ -126,18 +112,22 @@ Navigation createNav(char * nav_path)
   }
 
 
-
-  navigation.setNavigation(nav);
+  
+  navigation->setNavigation(nav);
 
   std::cout << "Navigation message loaded to Navigation class." << std::endl;
 
-  //std::cout << navigation.getNavigation()->ns << std::endl;
-
-  return navigation;
+  
+  
+  
+  
+  return 1;
 }
 
 
 
+
+
 int main(int argc, char *argv[])
 {
   /* header */
@@ -145,19 +135,24 @@ int main(int argc, char *argv[])
   std::cout << "GNSS Utils Library Example" << std::endl;
   std::cout << "--------------------------" << std::endl;
 
-  // Create Observations object
-  Observations observations = createObs();
 
-  std::cout << "_obsVector size: " << observations.getObservations().size() << std::endl;
+  // create Observations object
+  Observations observations; 
+
+  // create Navigation object
+  Navigation navigation;
 
-  // Create Navigation object
-  Navigation navigation = createNav("../src/examples/raw_201805171357.nav");
+  createObsAndNav(&observations, "/home/jlaplaza/gitlab/gnss_utils/src/examples/raw_201805171357.obs" ,&navigation, "/home/jlaplaza/gitlab/gnss_utils/src/examples/raw_201805171357.nav");
 
-  //readrnx()
 
-  /* Set processing options */
 
-  prcopt_t prcopt = prcopt_default;
+  nav_t nav2 = navigation.getNavigation();
+
+  std::cout << "Navigation eph number " << nav2.n << std::endl;
+
+  /* Set processing options */
+  
+  prcopt_t prcopt = prcopt_default;  
   prcopt.mode = PMODE_SINGLE;
   prcopt.soltype = 0;
   prcopt.nf = 1;
@@ -166,13 +161,18 @@ int main(int argc, char *argv[])
   prcopt.sateph = EPHOPT_BRDC;
   prcopt.ionoopt = IONOOPT_OFF;
   prcopt.tropopt = TROPOPT_OFF;
+  prcopt.dynamics = 0;
+  prcopt.tidecorr = 0;
   prcopt.sbascorr = SBSOPT_FCORR;
+  prcopt.ru[0] = 4789374.0336;
+  prcopt.ru[1] = 177048.3292;
+  prcopt.ru[2] = 4194542.6444;
 
-  std::cout << "Processing options defined." << std::endl;
-
-
+  std::cout << "Processing options defined" << std::endl;
+  
+  
   //Compute fix
-
+  
   int stat;
 
   sol_t solb={{0}};
@@ -181,9 +181,13 @@ int main(int argc, char *argv[])
 
   std::vector<obsd_t> obs = observations.getObservations();
 
+  std::cout << "obs: " << obs[0].P[0] << std::endl;
+
   nav_t nav = navigation.getNavigation();
 
-  stat = pntpos(&obs[0], obs.size(), &nav, &prcopt, &solb, NULL, NULL, msg);
+  stat = pntpos(&(obs[0]), obs.size(), &nav, &prcopt, &solb, NULL, NULL, msg);
+
+  std::cout << "msg: " << msg << std::endl;
 
   std::cout << "Stat: " << stat << std::endl;
 
diff --git a/src/getPos.cpp b/src/getPos.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..467262173e085039a25f3b9eb00507413e9ed96d
--- /dev/null
+++ b/src/getPos.cpp
@@ -0,0 +1,37 @@
+#include "../include/gnss_utils.h"
+
+using namespace GNSSUtils;
+
+static int getPos(Observations observations, Navigation navigation, sol_t sol)
+{
+  // 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;
+}
+
diff --git a/src/gnss_utils.cpp b/src/gnss_utils.cpp
deleted file mode 100644
index ba54dbfbd519e69a33625d5b744dce072b49c20c..0000000000000000000000000000000000000000
--- a/src/gnss_utils.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-#include "../include/gnss_utils.h"
-
-using namespace GNSSUtils;
-
-/******************************* RECEIVER CLASS *******************************************/
-
-Receiver::Receiver()
-{
-    obs_ptr_ = std::make_shared<GNSSUtils::Observations>();
-    nav_ptr_ = std::make_shared<GNSSUtils::Navigation>();
-}
-
-Receiver::~Receiver()
-{
-
-}
-
-const std::shared_ptr<GNSSUtils::Observations> Receiver::getObs()
-{
-    // return obs_ptr_;
-}
-
-const std::shared_ptr<GNSSUtils::Navigation> Receiver::getNav()
-{
-    // return nav_ptr_;
-}
-
-/* - Processing options - */
-
-void Receiver::clearOptions()
-{
-  //_opt = NULL;
-}
-
-void Receiver::setOptions(prcopt_t opt)
-{
-  _opt = opt;
-}
-
-prcopt_t Receiver::getOptions()
-{
-  return this->_opt;
-}
-
-
-/* - Solution - */
-
-void Receiver::clearSolution()
-{
-  //_sol = NULL;
-}
-
-void Receiver::setSolution(sol_t sol)
-{
-  _sol = sol;
-}
-
-sol_t Receiver::getSolution()
-{
-  return this->_sol;
-}
-
-
-/* - Satellite Status - */
-
-void Receiver::clearSatStatus()
-{
-  //_ssat = NULL;
-}
-
-void Receiver::setSatStatus(ssat_t ssat)
-{
-  _ssat = ssat;
-}
-
-ssat_t Receiver::getSatStatus()
-{
-  return this->_ssat;
-}
-
-
-/* - Compute Fix - */
-
-int Receiver::computeSPP(double *azel, char *msg)
-{
-/*
-  const obsd_t *obs = &this->_obsVector[0];
-  int n = this->_obsVector.size();
-
-  const nav_t *nav = this->_nav;
-  const prcopt_t *opt = this->_opt;
-  sol_t *sol = this->_sol;
-  ssat_t *ssat = this->_ssat;
-  */
-
-  // return pntpos(obs, n, &_nav, &_opt, &_sol, azel, &_ssat, msg);
-  return 0;
-}