Index: trunk/BNC/src/PPP/pppClient.cpp
===================================================================
--- trunk/BNC/src/PPP/pppClient.cpp	(revision 9287)
+++ trunk/BNC/src/PPP/pppClient.cpp	(revision 9288)
@@ -73,6 +73,7 @@
     }
   }
-  _offGG = 0.0;
-  _offGB = 0.0;
+  _offGR = 0.0;
+  _offGE = 0.0;
+  _offGC = 0.0;
   CLIENTS.setLocalData(this);  // CLIENTS takes ownership over "this"
 }
@@ -332,12 +333,12 @@
 // Compute A Priori GPS-Glonass Offset
 //////////////////////////////////////////////////////////////////////////////
-double t_pppClient::cmpOffGG(vector<t_pppSatObs*>& obsVector) {
+double t_pppClient::cmpOffGR(vector<t_pppSatObs*>& obsVector) {
 
   t_lc::type tLC   = t_lc::dummy;
-  double     offGG = 0.0;
+  double     offGR = 0.0;
 
   if (_opt->useSystem('R')) {
     while (obsVector.size() > 0) {
-      offGG = 0.0;
+      offGR = 0.0;
       double   maxRes      = 0.0;
       int      maxResIndex = -1;
@@ -353,5 +354,5 @@
             double ll = satObs->obsValue(tLC) - satObs->cmpValue(tLC);
             ++nObs;
-            offGG += ll;
+            offGR += ll;
             if (fabs(ll) > fabs(maxRes)) {
               maxRes      = ll;
@@ -364,12 +365,12 @@
 
       if (nObs > 0) {
-        offGG = offGG / nObs;
+        offGR = offGR / nObs;
       }
       else {
-        offGG = 0.0;
+        offGR = 0.0;
       }
 
       if (fabs(maxRes) > 1000.0) {
-        LOG << "t_pppClient::cmpOffGG outlier " << maxResPrn.toString() << " " << maxRes << endl;
+        LOG << "t_pppClient::cmpOffGR outlier " << maxResPrn.toString() << " " << maxRes << endl;
         delete obsVector.at(maxResIndex);
         obsVector.erase(obsVector.begin() + maxResIndex);
@@ -380,17 +381,70 @@
     }
   }
-  return offGG;
+  return offGR;
+}
+
+// Compute A Priori GPS-Galileo Offset
+//////////////////////////////////////////////////////////////////////////////
+double t_pppClient::cmpOffGE(vector<t_pppSatObs*>& obsVector) {
+
+  t_lc::type tLC   = t_lc::dummy;
+  double     offGE = 0.0;
+
+  if (_opt->useSystem('E')) {
+    while (obsVector.size() > 0) {
+      offGE = 0.0;
+      double   maxRes      = 0.0;
+      int      maxResIndex = -1;
+      t_prn    maxResPrn;
+      unsigned nObs        = 0;
+      for (unsigned ii = 0; ii < obsVector.size(); ii++) {
+        const t_pppSatObs* satObs = obsVector.at(ii);
+        if (satObs->prn().system() == 'E') {
+          if (tLC == t_lc::dummy) {
+            tLC = satObs->isValid(t_lc::cIF) ? t_lc::cIF : t_lc::c1;
+          }
+          if (satObs->isValid(tLC) && (!satObs->modelSet() || satObs->eleSat() >= _opt->_minEle)) {
+            double ll = satObs->obsValue(tLC) - satObs->cmpValue(tLC);
+            ++nObs;
+            offGE += ll;
+            if (fabs(ll) > fabs(maxRes)) {
+              maxRes      = ll;
+              maxResIndex = ii;
+              maxResPrn   = satObs->prn();
+            }
+          }
+        }
+      }
+
+      if (nObs > 0) {
+        offGE = offGE / nObs;
+      }
+      else {
+        offGE = 0.0;
+      }
+
+      if (fabs(maxRes) > 1000.0) {
+        LOG << "t_pppClient::cmpOffGE outlier " << maxResPrn.toString() << " " << maxRes << endl;
+        delete obsVector.at(maxResIndex);
+        obsVector.erase(obsVector.begin() + maxResIndex);
+      }
+      else {
+        break;
+      }
+    }
+  }
+  return offGE;
 }
 
 // Compute A Priori GPS-BDS Offset
 //////////////////////////////////////////////////////////////////////////////
-double t_pppClient::cmpOffGB(vector<t_pppSatObs*>& obsVector) {
+double t_pppClient::cmpOffGC(vector<t_pppSatObs*>& obsVector) {
 
   t_lc::type tLC   = t_lc::dummy;
-  double     offGB = 0.0;
+  double     offGC = 0.0;
 
   if (_opt->useSystem('C')) {
     while (obsVector.size() > 0) {
-      offGB = 0.0;
+      offGC = 0.0;
       double   maxRes      = 0.0;
       int      maxResIndex = -1;
@@ -406,5 +460,5 @@
             double ll = satObs->obsValue(tLC) - satObs->cmpValue(tLC);
             ++nObs;
-            offGB += ll;
+            offGC += ll;
             if (fabs(ll) > fabs(maxRes)) {
               maxRes      = ll;
@@ -417,12 +471,12 @@
 
       if (nObs > 0) {
-        offGB = offGB / nObs;
+        offGC = offGC / nObs;
       }
       else {
-        offGB = 0.0;
+        offGC = 0.0;
       }
 
       if (fabs(maxRes) > 1000.0) {
-        LOG << "t_pppClient::cmpOffGB outlier " << maxResPrn.toString() << " " << maxRes << endl;
+        LOG << "t_pppClient::cmpOffGC outlier " << maxResPrn.toString() << " " << maxRes << endl;
         delete obsVector.at(maxResIndex);
         obsVector.erase(obsVector.begin() + maxResIndex);
@@ -433,5 +487,5 @@
     }
   }
-  return offGB;
+  return offGC;
 }
 
@@ -570,6 +624,7 @@
       }
 
-      _offGG = cmpOffGG(_obsRover);
-      _offGB = cmpOffGB(_obsRover);
+      _offGR = cmpOffGR(_obsRover);
+      _offGE = cmpOffGE(_obsRover);
+      _offGC = cmpOffGC(_obsRover);
 
       if (_opt->_refSatRequired) {
Index: trunk/BNC/src/PPP/pppClient.h
===================================================================
--- trunk/BNC/src/PPP/pppClient.h	(revision 9287)
+++ trunk/BNC/src/PPP/pppClient.h	(revision 9288)
@@ -37,6 +37,7 @@
   const bncAntex*     antex() const {return _antex;}
   const t_pppStation* staRover() const {return _staRover;}
-  double              offGG() const {return _offGG;}
-  double              offGB() const {return _offGB;}
+  double              offGR() const {return _offGR;}
+  double              offGE() const {return _offGE;}
+  double              offGC() const {return _offGC;}
 
   std::ostringstream& log() {return *_log;}
@@ -60,6 +61,7 @@
   t_irc cmpBancroft(const bncTime& epoTime, std::vector<t_pppSatObs*>& obsVector,
                     ColumnVector& xyzc, bool print);
-  double cmpOffGG(std::vector<t_pppSatObs*>& obsVector);
-  double cmpOffGB(std::vector<t_pppSatObs*>& obsVector);
+  double cmpOffGR(std::vector<t_pppSatObs*>& obsVector);
+  double cmpOffGE(std::vector<t_pppSatObs*>& obsVector);
+  double cmpOffGC(std::vector<t_pppSatObs*>& obsVector);
   void setRefSatellites(std::vector<t_pppSatObs*>& obsVector);
 
@@ -71,6 +73,7 @@
   bncAntex*                 _antex;
   t_pppFilter*              _filter;
-  double                    _offGG;
-  double                    _offGB;
+  double                    _offGR;
+  double                    _offGE;
+  double                    _offGC;
   std::vector<t_pppSatObs*> _obsRover;
   std::ostringstream*       _log;
Index: trunk/BNC/src/PPP/pppParlist.cpp
===================================================================
--- trunk/BNC/src/PPP/pppParlist.cpp	(revision 9287)
+++ trunk/BNC/src/PPP/pppParlist.cpp	(revision 9288)
@@ -74,13 +74,17 @@
          const t_pppSatObs* obs = obsVector->at(ii);
          if (obs->prn() == _prn) {
-           double offGG = 0;
+           double offGR = 0;
            if (_prn.system() == 'R' && tLC != t_lc::MW) {
-             offGG = PPP_CLIENT->offGG();
+             offGR = PPP_CLIENT->offGR();
            }
-           double offGB = 0;
+           double offGE = 0;
+           if (_prn.system() == 'E' && tLC != t_lc::MW) {
+             offGE = PPP_CLIENT->offGE();
+           }
+           double offGC = 0;
            if (_prn.system() == 'C' && tLC != t_lc::MW) {
-             offGB = PPP_CLIENT->offGB();
+             offGC = PPP_CLIENT->offGC();
            }
-           _x0 = floor((obs->obsValue(tLC) - offGG - offGB - obs->cmpValue(tLC)) / obs->lambda(tLC) + 0.5);
+           _x0 = floor((obs->obsValue(tLC) - offGR -offGE - offGC - obs->cmpValue(tLC)) / obs->lambda(tLC) + 0.5);
            break;
          }
@@ -88,13 +92,18 @@
      }
      break;
-   case offGG:
+   case offGR:
      _epoSpec = true;
      _sigma0  = 1000.0;
-     _x0      = PPP_CLIENT->offGG();
-     break;
-   case offGB:
+     _x0      = PPP_CLIENT->offGR();
+     break;
+   case offGE:
      _epoSpec = true;
      _sigma0  = 1000.0;
-     _x0      = PPP_CLIENT->offGB();
+     _x0      = PPP_CLIENT->offGE();
+     break;
+   case offGC:
+     _epoSpec = true;
+     _sigma0  = 1000.0;
+     _x0      = PPP_CLIENT->offGC();
      break;
    case trp:
@@ -161,8 +170,11 @@
     if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
     return 1.0;
-  case offGG:
+  case offGR:
     if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
     return (obs->prn().system() == 'R') ? 1.0 : 0.0;
-  case offGB:
+  case offGE:
+    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
+    return (obs->prn().system() == 'E') ? 1.0 : 0.0;
+  case offGC:
     if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
     return (obs->prn().system() == 'C') ? 1.0 : 0.0;
@@ -276,8 +288,11 @@
     ss << "REC_CLK    ";
     break;
-  case offGG:
+  case offGR:
     ss << "OGG        ";
     break;
-  case offGB:
+  case offGE:
+    ss << "OGE        ";
+    break;
+  case offGC:
     ss << "OGB        ";
     break;
@@ -401,5 +416,11 @@
   // ------------------------
   if (OPT->useSystem('R')) {
-    required.push_back(new t_pppParam(t_pppParam::offGG, t_prn(), t_lc::dummy));
+    required.push_back(new t_pppParam(t_pppParam::offGR, t_prn(), t_lc::dummy));
+  }
+
+  // GPS-Galileo Clock Offset
+  // ------------------------
+  if (OPT->useSystem('E')) {
+    required.push_back(new t_pppParam(t_pppParam::offGE, t_prn(), t_lc::dummy));
   }
 
@@ -407,7 +428,6 @@
   // ------------------------
   if (OPT->useSystem('C')) {
-    required.push_back(new t_pppParam(t_pppParam::offGB, t_prn(), t_lc::dummy));
-  }
-
+    required.push_back(new t_pppParam(t_pppParam::offGC, t_prn(), t_lc::dummy));
+  }
 
   // Troposphere
Index: trunk/BNC/src/PPP/pppParlist.h
===================================================================
--- trunk/BNC/src/PPP/pppParlist.h	(revision 9287)
+++ trunk/BNC/src/PPP/pppParlist.h	(revision 9288)
@@ -15,5 +15,5 @@
 class t_pppParam {
  public:
-  enum e_type {crdX, crdY, crdZ, clkR, amb, offGG, offGB, trp, ion, cBias1, cBias2, pBias1, pBias2};
+  enum e_type {crdX, crdY, crdZ, clkR, amb, offGR, offGE, offGC, trp, ion, cBias1, cBias2, pBias1, pBias2};
 
   t_pppParam(e_type type, const t_prn& prn, t_lc::type tLC,
