diff --git a/src/asterx1_gps.cpp b/src/asterx1_gps.cpp
index 8db8c9dea0ca0ac6e0d5048bcd0642272901c4de..21cd9a348ed22351a97319ad98c2658253b21cd3 100644
--- a/src/asterx1_gps.cpp
+++ b/src/asterx1_gps.cpp
@@ -692,7 +692,36 @@ void CasteRx1::process_meas_epoch(unsigned char *data,unsigned short int length)
     if(gps_meas_epoch_type1.carrier.msb==-128 && gps_meas_epoch_type1.carrier.lsb==0)// the carrier phase is not valid
       meas_epoch_type1.carrier_phase=0.0;
     else
-      meas_epoch_type1.carrier_phase=((double)gps_meas_epoch_type1.carrier.msb)*65.536+((double)gps_meas_epoch_type1.carrier.lsb)/1000.0;
+      meas_epoch_type1.carrier_phase=(meas_epoch_type1.pseudo_range/299792458.0)+((double)gps_meas_epoch_type1.carrier.msb)*65.536+((double)gps_meas_epoch_type1.carrier.lsb)/1000.0;
+    switch(meas_epoch_type1.signal_type)
+    {
+      case GPS_L1_CA:
+      case GPS_L1_PY: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1575420000.0;
+                      break;
+      case GPS_L2_PY: 
+      case GPS_L2C: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1227600000.0;
+                    break;
+      case GPS_L5: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1176450000.0;
+                   break;
+      case GLO_L1_CA: 
+      case GLO_L1_P:
+      case GLO_L2_P:
+      case GLO_L2_CA: break;
+      case GAL_L1A: 
+      case GAL_L1BC: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1575420000.0;
+                     break;
+      case GAL_E6B:
+      case GAL_E6BC: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1278750000.0;
+                     break;
+      case GAL_E5a: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1176450000.0;
+                    break;
+      case GAL_E5b: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1207140000.0;
+                    break;
+      case GAL_E5: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1191795000.0;
+                   break;
+      case GEO_L1CA: meas_epoch_type1.carrier_phase+=(meas_epoch_type1.pseudo_range/299792458.0)*1575420000.0;
+                     break;
+    }
     meas_epoch_type1.cn0=((double)gps_meas_epoch_type1.cn0)*0.25;
     if(meas_epoch_type1.signal_type==GPS_L1_PY || meas_epoch_type1.signal_type==GPS_L2_PY)
       meas_epoch_type1.cn0+=10;
@@ -732,6 +761,35 @@ void CasteRx1::process_meas_epoch(unsigned char *data,unsigned short int length)
         meas_epoch_type2.carrier_phase=0.0;
       else
         meas_epoch_type2.carrier_phase=((double)gps_meas_epoch_type2.carrier_msb)*65.536+((double)gps_meas_epoch_type2.carrier_lsb)/1000.0;
+      switch(meas_epoch_type2.signal_type)
+      {
+        case GPS_L1_CA:
+        case GPS_L1_PY: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1575420000.0;
+                        break;
+        case GPS_L2_PY:
+        case GPS_L2C: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1227600000.0;
+                      break;
+        case GPS_L5: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1176450000.0;
+                     break;
+        case GLO_L1_CA:
+        case GLO_L1_P:
+        case GLO_L2_P:
+        case GLO_L2_CA: break;
+        case GAL_L1A:
+        case GAL_L1BC: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1575420000.0;
+                       break;
+        case GAL_E6B:
+        case GAL_E6BC: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1278750000.0;
+                       break;
+        case GAL_E5a: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1176450000.0;
+                      break;
+        case GAL_E5b: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1207140000.0;
+                      break;
+        case GAL_E5: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1191795000.0;
+                     break;
+        case GEO_L1CA: meas_epoch_type2.carrier_phase+=(meas_epoch_type2.pseudo_range/299792458.0)*1575420000.0;
+                       break;
+      }
       if(gps_meas_epoch_type2.info.smoothed==1)
         meas_epoch_type2.pseudorange_smoothed=true;
       else