Index: /trunk/BNC/src/PPP_free/pppClient.cpp
===================================================================
--- /trunk/BNC/src/PPP_free/pppClient.cpp	(revision 6099)
+++ /trunk/BNC/src/PPP_free/pppClient.cpp	(revision 6100)
@@ -44,5 +44,4 @@
 
 #include "pppClient.h"
-#include "pppFilter.h"
 #include "bncephuser.h"
 #include "bncutils.h"
@@ -50,14 +49,4 @@
 using namespace BNC_PPP;
 using namespace std;
-
-// Global variable holding thread-specific pointers
-//////////////////////////////////////////////////////////////////////////////
-QThreadStorage<t_pppClient*> CLIENTS;
-
-// Static function returning thread-specific pointer
-//////////////////////////////////////////////////////////////////////////////
-t_pppClient* t_pppClient::instance() {
-  return CLIENTS.localData();
-}
 
 // Constructor
@@ -70,7 +59,4 @@
   _log     = new ostringstream();
   _ephUser = new bncEphUser(false);
-  _staID   = QByteArray(_opt->_roverName.c_str());
-
-  CLIENTS.setLocalData(this);  // CLIENTS takes ownership over "this"
 }
 
Index: /trunk/BNC/src/PPP_free/pppClient.h
===================================================================
--- /trunk/BNC/src/PPP_free/pppClient.h	(revision 6099)
+++ /trunk/BNC/src/PPP_free/pppClient.h	(revision 6100)
@@ -31,4 +31,5 @@
 #include "pppInclude.h"
 #include "pppOptions.h"
+#include "pppFilter.h"
 
 class bncEphUser;
@@ -37,87 +38,4 @@
 namespace BNC_PPP {
   
-class t_pppFilter;
-
-class t_satData {
- public:
-  t_satData() {
-    obsIndex = 0;
-    P1 = 0.0;
-    P2 = 0.0;
-    P5 = 0.0;
-    P3 = 0.0;
-    L1 = 0.0;
-    L2 = 0.0;
-    L5 = 0.0;
-    L3 = 0.0;
-  }
-  ~t_satData() {}
-  bncTime      tt;
-  QString      prn;
-  double       P1;
-  double       P2;
-  double       P5;
-  double       P3;
-  double       L1;
-  double       L2;
-  double       L5;
-  double       L3;
-  ColumnVector xx;
-  ColumnVector vv;
-  double       clk;
-  double       eleSat;
-  double       azSat;
-  double       rho;
-  bool         slipFlag;
-  double       lambda3;
-  unsigned     obsIndex;
-  char system() const {return prn.toAscii()[0];}
-};
-
-class t_epoData {
- public:
-  t_epoData() {}
-
-  ~t_epoData() {
-    clear();
-  }
-
-  void clear() {
-    QMapIterator<QString, t_satData*> it(satData);
-    while (it.hasNext()) {
-      it.next();
-      delete it.value();
-    }
-    satData.clear();
-    tt.reset();
-  }
-
-  void deepCopy(const t_epoData* from) {
-    clear();
-    tt = from->tt;
-    QMapIterator<QString, t_satData*> it(from->satData);
-    while (it.hasNext()) {
-      it.next();
-      satData[it.key()] = new t_satData(*it.value());
-    }
-  }
-
-  unsigned sizeSys(char system) const {
-    unsigned ans = 0;
-    QMapIterator<QString, t_satData*> it(satData);
-    while (it.hasNext()) {
-      it.next();
-      if (it.value()->system() == system) {
-        ++ans;
-      }
-    }
-    return ans;
-  }
-  unsigned sizeAll() const {return satData.size();}
-
-  bncTime                   tt;
-  QMap<QString, t_satData*> satData;
-};
-
 class t_pppClient {
  public:
@@ -129,8 +47,6 @@
   void                putClkCorrections(const std::vector<t_clkCorr*>& corr); 
   void                putBiases(const std::vector<t_satBias*>& satBias);   
-  QByteArray          staID() const {return _staID;}
+  std::ostringstream& log() {return *_log;}
   const t_pppOptions* opt() const {return _opt;}
-  static t_pppClient* instance();
-  std::ostringstream& log() {return *_log;}
 
  private:
@@ -141,5 +57,4 @@
   bncEphUser*         _ephUser;
   t_pppOptions*       _opt;
-  QByteArray          _staID;
   t_epoData*          _epoData;
   t_pppFilter*        _filter;
@@ -147,7 +62,5 @@
 };
 
-}
-
-#define LOG (BNC_PPP::t_pppClient::instance()->log())
+} // namespace
 
 #endif
Index: /trunk/BNC/src/PPP_free/pppFilter.cpp
===================================================================
--- /trunk/BNC/src/PPP_free/pppFilter.cpp	(revision 6099)
+++ /trunk/BNC/src/PPP_free/pppFilter.cpp	(revision 6100)
@@ -62,4 +62,7 @@
 const double   GLONASS_WEIGHT_FACTOR = 5.0;
 
+#define LOG (_pppClient->log())
+#define OPT (_pppClient->opt())
+
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
@@ -152,7 +155,4 @@
 
   _pppClient = pppClient;
-  _staID     = pppClient->staID();
-  _opt       = pppClient->opt();
-
   _tides     = new t_tides();
 
@@ -160,6 +160,6 @@
   // ------------------------
   _antex = 0;
-  if (!_opt->_antexFileName.empty()) {
-    _antex = new bncAntex(_opt->_antexFileName.c_str());
+  if (!OPT->_antexFileName.empty()) {
+    _antex = new bncAntex(OPT->_antexFileName.c_str());
   }
 
@@ -178,7 +178,4 @@
 t_pppFilter::~t_pppFilter() {
   delete _tides;
-  for (int ii = 0; ii < _posAverage.size(); ++ii) { 
-    delete _posAverage[ii]; 
-  }
   delete _antex;
   for (int iPar = 1; iPar <= _params.size(); iPar++) {
@@ -212,11 +209,11 @@
   _params.push_back(new t_pppParam(t_pppParam::CRD_Z,  ++nextPar, ""));
   _params.push_back(new t_pppParam(t_pppParam::RECCLK, ++nextPar, ""));
-  if (_opt->estTrp()) {
+  if (OPT->estTrp()) {
     _params.push_back(new t_pppParam(t_pppParam::TROPO, ++nextPar, ""));
   }
-  if (_opt->useSystem('R')) {
+  if (OPT->useSystem('R')) {
     _params.push_back(new t_pppParam(t_pppParam::GLONASS_OFFSET, ++nextPar, ""));
   }
-  if (_opt->useSystem('E')) {
+  if (OPT->useSystem('E')) {
     _params.push_back(new t_pppParam(t_pppParam::GALILEO_OFFSET, ++nextPar, ""));
   }
@@ -228,11 +225,11 @@
     pp->xx = 0.0;
     if      (pp->isCrd()) {
-      _QQ(iPar,iPar) = _opt->_aprSigCrd(1) * _opt->_aprSigCrd(1); 
+      _QQ(iPar,iPar) = OPT->_aprSigCrd(1) * OPT->_aprSigCrd(1); 
     }
     else if (pp->type == t_pppParam::RECCLK) {
-      _QQ(iPar,iPar) = _opt->_noiseClk * _opt->_noiseClk; 
+      _QQ(iPar,iPar) = OPT->_noiseClk * OPT->_noiseClk; 
     }
     else if (pp->type == t_pppParam::TROPO) {
-      _QQ(iPar,iPar) = _opt->_aprSigTrp * _opt->_aprSigTrp; 
+      _QQ(iPar,iPar) = OPT->_aprSigTrp * OPT->_aprSigTrp; 
       pp->xx = lastTrp;
     }
@@ -253,5 +250,5 @@
 
   if (epoData->sizeSys('G') < MINOBS) {
-    _log += "t_pppFilter::cmpBancroft: not enough data\n";
+    LOG << "t_pppFilter::cmpBancroft: not enough data\n";
     return failure;
   }
@@ -337,7 +334,7 @@
   if (_antex) { 
     bool found;
-    phaseCenter = _antex->pco(QString(_opt->_antNameRover.c_str()), satData->eleSat, found);
+    phaseCenter = _antex->pco(QString(OPT->_antNameRover.c_str()), satData->eleSat, found);
     if (!found) {
-      LOG << "ANTEX: antenna >" << _opt->_antNameRover << "< not found\n";
+      LOG << "ANTEX: antenna >" << OPT->_antNameRover << "< not found\n";
     }
   }
@@ -348,7 +345,7 @@
   double cose = cos(satData->eleSat);
   double sine = sin(satData->eleSat);
-  antennaOffset = -_opt->_neuEccRover(1) * cosa*cose 
-                  -_opt->_neuEccRover(2) * sina*cose 
-                  -_opt->_neuEccRover(3) * sine;
+  antennaOffset = -OPT->_neuEccRover(1) * cosa*cose 
+                  -OPT->_neuEccRover(2) * sina*cose 
+                  -OPT->_neuEccRover(3) * sine;
 
   return satData->rho + phaseCenter + antennaOffset + clk() 
@@ -416,6 +413,6 @@
     // Use different white noise for Quick-Start mode
     // ----------------------------------------------
-    double sigCrdP_used = _opt->_noiseCrd(1);
-    if ( _opt->_seedingTime > 0.0 && _opt->_seedingTime > (epoData->tt - _startTime) ) {
+    double sigCrdP_used = OPT->_noiseCrd(1);
+    if ( OPT->_seedingTime > 0.0 && OPT->_seedingTime > (epoData->tt - _startTime) ) {
       sigCrdP_used   = 0.0;
     }
@@ -430,6 +427,6 @@
       if      (pp->type == t_pppParam::CRD_X) {
         if (firstCrd) {
-          if (_opt->xyzAprRoverSet()) {
-            pp->xx = _opt->_xyzAprRover[0];
+          if (OPT->xyzAprRoverSet()) {
+            pp->xx = OPT->_xyzAprRover[0];
           }
           else {
@@ -441,6 +438,6 @@
       else if (pp->type == t_pppParam::CRD_Y) {
         if (firstCrd) {
-          if (_opt->xyzAprRoverSet()) {
-            pp->xx = _opt->_xyzAprRover[1];
+          if (OPT->xyzAprRoverSet()) {
+            pp->xx = OPT->_xyzAprRover[1];
           }
           else {
@@ -452,6 +449,6 @@
       else if (pp->type == t_pppParam::CRD_Z) {
         if (firstCrd) {
-          if (_opt->xyzAprRoverSet()) {
-            pp->xx = _opt->_xyzAprRover[2];
+          if (OPT->xyzAprRoverSet()) {
+            pp->xx = OPT->_xyzAprRover[2];
           }
           else {
@@ -469,5 +466,5 @@
           _QQ(iPar, jj) = 0.0;
         }
-        _QQ(iPar,iPar) = _opt->_noiseClk * _opt->_noiseClk;
+        _QQ(iPar,iPar) = OPT->_noiseClk * OPT->_noiseClk;
       }
     
@@ -475,5 +472,5 @@
       // ------------------
       else if (pp->type == t_pppParam::TROPO) {
-        _QQ(iPar,iPar) += _opt->_noiseTrp * _opt->_noiseTrp;
+        _QQ(iPar,iPar) += OPT->_noiseTrp * OPT->_noiseTrp;
       }
     
@@ -498,5 +495,5 @@
   // Add New Ambiguities if necessary
   // --------------------------------
-  if (_opt->ambLCs('G').size() || _opt->ambLCs('R').size() || _opt->ambLCs('E').size()) {
+  if (OPT->ambLCs('G').size() || OPT->ambLCs('R').size() || OPT->ambLCs('E').size()) {
 
     // Make a copy of QQ and xx, set parameter indices
@@ -556,5 +553,5 @@
       t_pppParam* par = _params[ii-1];
       if (par->index_old == 0) {
-        _QQ(par->index, par->index) = _opt->_aprSigAmb * _opt->_aprSigAmb;
+        _QQ(par->index, par->index) = OPT->_aprSigAmb * OPT->_aprSigAmb;
       }
       par->index_old = par->index;
@@ -569,17 +566,13 @@
   Tracer tracer("t_pppFilter::update");
 
-  _log.clear();  
-
   _time = epoData->tt; // current epoch time
 
-  if (_opt->useOrbClkCorr()) {
-    _log += "Precise Point Positioning of Epoch " 
-          + QByteArray(_time.timestr(1).c_str()) +
-          "\n---------------------------------------------------------------\n";
+  if (OPT->useOrbClkCorr()) {
+    LOG << "Precise Point Positioning of Epoch " << _time.timestr(1)
+        << "\n---------------------------------------------------------------\n";
   }
   else {
-    _log += "Single Point Positioning of Epoch " 
-          + QByteArray(_time.timestr(1).c_str()) +
-          "\n--------------------------------------------------------------\n";
+    LOG << "Single Point Positioning of Epoch " << _time.timestr(1)
+        << "\n--------------------------------------------------------------\n";
   }
 
@@ -587,92 +580,80 @@
   // ----------------------
   if (update_p(epoData) != success) {
-    LOG << _log.data() << endl;
     return failure;
   }
-
-  // Remember the Epoch-specific Results for the computation of means
-  // ----------------------------------------------------------------
-  pppPos* newPos = new pppPos;
-  newPos->time   = epoData->tt;
 
   // Set Solution Vector
   // -------------------
-  ostringstream strB;
-  strB.setf(ios::fixed);
+  LOG.setf(ios::fixed);
   QVectorIterator<t_pppParam*> itPar(_params);
   while (itPar.hasNext()) {
     t_pppParam* par = itPar.next();
-
     if      (par->type == t_pppParam::RECCLK) {
-      strB << "\n    clk     = " << setw(10) << setprecision(3) << par->xx 
-           << " +- " << setw(6) << setprecision(3) 
-           << sqrt(_QQ(par->index,par->index));
+      LOG << "\n    clk     = " << setw(10) << setprecision(3) << par->xx 
+          << " +- " << setw(6) << setprecision(3) 
+          << sqrt(_QQ(par->index,par->index));
     }
     else if (par->type == t_pppParam::AMB_L3) {
       ++par->numEpo;
-      strB << "\n    amb " << par->prn.toAscii().data() << " = "
-           << setw(10) << setprecision(3) << par->xx 
-           << " +- " << setw(6) << setprecision(3) 
-           << sqrt(_QQ(par->index,par->index))
-           << "   nEpo = " << par->numEpo;
+      LOG << "\n    amb " << par->prn.toAscii().data() << " = "
+          << setw(10) << setprecision(3) << par->xx 
+          << " +- " << setw(6) << setprecision(3) 
+          << sqrt(_QQ(par->index,par->index))
+          << "   nEpo = " << par->numEpo;
     }
     else if (par->type == t_pppParam::TROPO) {
       double aprTrp = delay_saast(M_PI/2.0);
-      strB << "\n    trp     = " << par->prn.toAscii().data()
-           << setw(7) << setprecision(3) << aprTrp << " "
-           << setw(6) << setprecision(3) << showpos << par->xx << noshowpos
-           << " +- " << setw(6) << setprecision(3) 
-           << sqrt(_QQ(par->index,par->index));
-      newPos->xnt[6] = aprTrp + par->xx;
+      LOG << "\n    trp     = " << par->prn.toAscii().data()
+          << setw(7) << setprecision(3) << aprTrp << " "
+          << setw(6) << setprecision(3) << showpos << par->xx << noshowpos
+          << " +- " << setw(6) << setprecision(3) 
+          << sqrt(_QQ(par->index,par->index));
     }
     else if (par->type == t_pppParam::GLONASS_OFFSET) {
-      strB << "\n    offGlo  = " << setw(10) << setprecision(3) << par->xx 
-           << " +- " << setw(6) << setprecision(3) 
-           << sqrt(_QQ(par->index,par->index));
+      LOG << "\n    offGlo  = " << setw(10) << setprecision(3) << par->xx 
+          << " +- " << setw(6) << setprecision(3) 
+          << sqrt(_QQ(par->index,par->index));
     }
     else if (par->type == t_pppParam::GALILEO_OFFSET) {
-      strB << "\n    offGal  = " << setw(10) << setprecision(3) << par->xx 
-           << " +- " << setw(6) << setprecision(3) 
-           << sqrt(_QQ(par->index,par->index));
-    }
-  }
-  strB << '\n';
-  _log += strB.str().c_str();
-  LOG << _log.data() << endl;
+      LOG << "\n    offGal  = " << setw(10) << setprecision(3) << par->xx 
+          << " +- " << setw(6) << setprecision(3) 
+          << sqrt(_QQ(par->index,par->index));
+    }
+  }
+
+  LOG << endl;
 
   // Final Message (both log file and screen)
   // ----------------------------------------
-  ostringstream strC;
-  strC.setf(ios::fixed);
-  strC << _staID.data() << "  PPP " 
-       << epoData->tt.timestr(1) << " " << epoData->sizeAll() << " "
-       << setw(14) << setprecision(3) << x()                  << " +- "
-       << setw(6)  << setprecision(3) << sqrt(_QQ(1,1))       << " "
-       << setw(14) << setprecision(3) << y()                  << " +- "
-       << setw(6)  << setprecision(3) << sqrt(_QQ(2,2))       << " "
-       << setw(14) << setprecision(3) << z()                  << " +- "
-       << setw(6)  << setprecision(3) << sqrt(_QQ(3,3));
+  LOG << OPT->_roverName << "  PPP " 
+      << epoData->tt.timestr(1) << " " << epoData->sizeAll() << " "
+      << setw(14) << setprecision(3) << x()                  << " +- "
+      << setw(6)  << setprecision(3) << sqrt(_QQ(1,1))       << " "
+      << setw(14) << setprecision(3) << y()                  << " +- "
+      << setw(6)  << setprecision(3) << sqrt(_QQ(2,2))       << " "
+      << setw(14) << setprecision(3) << z()                  << " +- "
+      << setw(6)  << setprecision(3) << sqrt(_QQ(3,3));
 
   // NEU Output
   // ----------
-  if (_opt->xyzAprRoverSet()) {
-    newPos->xnt[0] = x() - _opt->_xyzAprRover[0];
-    newPos->xnt[1] = y() - _opt->_xyzAprRover[1];
-    newPos->xnt[2] = z() - _opt->_xyzAprRover[2];
+  if (OPT->xyzAprRoverSet()) {
+    double xyz[3];
+    xyz[0] = x() - OPT->_xyzAprRover[0];
+    xyz[1] = y() - OPT->_xyzAprRover[1];
+    xyz[2] = z() - OPT->_xyzAprRover[2];
 
     double ellRef[3];
-    xyz2ell(_opt->_xyzAprRover.data(), ellRef);
-    xyz2neu(ellRef, newPos->xnt, &newPos->xnt[3]);
-
-    strC << "  NEU "
-         << setw(8) << setprecision(3) << newPos->xnt[3] << " "
-         << setw(8) << setprecision(3) << newPos->xnt[4] << " "
-         << setw(8) << setprecision(3) << newPos->xnt[5] << endl;
-
-  }
-
-  LOG << strC.str() << endl;
-
-  delete newPos;
+    xyz2ell(OPT->_xyzAprRover.data(), ellRef);
+    double neu[3];
+    xyz2neu(ellRef, xyz, neu);
+
+    LOG << "  NEU "
+        << setw(8) << setprecision(3) << neu[0] << " "
+        << setw(8) << setprecision(3) << neu[1] << " "
+        << setw(8) << setprecision(3) << neu[2] << endl;
+  }
+  else {
+    LOG << endl;
+  }
 
   _lastTimeOK = _time; // remember time of last successful update
@@ -695,17 +676,14 @@
   if      (iPhase == 1) {
     if      (maxResGlo > MAXRES_PHASE_GLONASS) { 
-      _log += "Outlier Phase " + prnGlo + " " 
-            + QByteArray::number(maxResGlo, 'f', 3) + "\n"; 
+      LOG << "Outlier Phase " << prnGlo.toAscii().data() << ' ' << maxResGlo << endl;
       return prnGlo;
     }
     else if (maxResGPS > MAXRES_PHASE_GPS) { 
-      _log += "Outlier Phase " + prnGPS + " " 
-            + QByteArray::number(maxResGPS, 'f', 3) + "\n"; 
+      LOG << "Outlier Phase " << prnGPS.toAscii().data() << ' ' << maxResGPS << endl;
       return prnGPS;
     }
   }
   else if (iPhase == 0 && maxResGPS > MAXRES_CODE) {
-    _log += "Outlier Code  " + prnGPS + " " 
-          + QByteArray::number(maxResGPS, 'f', 3) + "\n"; 
+    LOG << "Outlier Code  " << prnGPS.toAscii().data() << ' ' << maxResGPS << endl;
     return prnGPS;
   }
@@ -894,5 +872,5 @@
   if (iPhase == 1) {
     ll(iObs)      = satData->L3 - cmpValue(satData, true);
-    double sigL3 = 2.98 * _opt->_sigmaL1;
+    double sigL3 = 2.98 * OPT->_sigmaL1;
     if (satData->system() == 'R') {
       sigL3 *= GLONASS_WEIGHT_FACTOR;
@@ -911,5 +889,5 @@
   // -----------------
   else {
-    double sigP3 = 2.98 * _opt->_sigmaC1;
+    double sigP3 = 2.98 * OPT->_sigmaC1;
     ll(iObs)      = satData->P3 - cmpValue(satData, false);
     PP(iObs,iObs) = 1.0 / (sigP3 * sigP3) / (ellWgtCoef * ellWgtCoef);
@@ -1006,6 +984,6 @@
     // First update using code observations, then phase observations
     // -------------------------------------------------------------      
-    bool usePhase = _opt->ambLCs('G').size() || _opt->ambLCs('R').size() ||
-                    _opt->ambLCs('E').size();
+    bool usePhase = OPT->ambLCs('G').size() || OPT->ambLCs('R').size() ||
+                    OPT->ambLCs('E').size();
 
     for (int iPhase = 0; iPhase <= (usePhase ? 1 : 0); iPhase++) {
@@ -1074,17 +1052,15 @@
         if (!usePhase || iPhase == 1) {
           if (_outlierGPS.size() > 0 || _outlierGlo.size() > 0) {
-            _log += "Neglected PRNs: ";
+            LOG << "Neglected PRNs: ";
             if (!_outlierGPS.isEmpty()) {
-              _log += _outlierGPS.last() + ' ';
+              LOG << _outlierGPS.last().toAscii().data() << ' ';
             }
             QStringListIterator itGlo(_outlierGlo);
             while (itGlo.hasNext()) {
               QString prn = itGlo.next();
-              _log += prn + ' ';
+              LOG << prn.toAscii().data() << ' ';
             }
           }
-          _log += '\n';
-
-          _log += strResCode + strResPhase;
+          LOG << endl << strResCode.data() << strResPhase.data();
 
           return success;
Index: /trunk/BNC/src/PPP_free/pppFilter.h
===================================================================
--- /trunk/BNC/src/PPP_free/pppFilter.h	(revision 6099)
+++ /trunk/BNC/src/PPP_free/pppFilter.h	(revision 6100)
@@ -42,4 +42,85 @@
 class t_satData;
 class t_tides;
+
+class t_satData {
+ public:
+  t_satData() {
+    obsIndex = 0;
+    P1 = 0.0;
+    P2 = 0.0;
+    P5 = 0.0;
+    P3 = 0.0;
+    L1 = 0.0;
+    L2 = 0.0;
+    L5 = 0.0;
+    L3 = 0.0;
+  }
+  ~t_satData() {}
+  bncTime      tt;
+  QString      prn;
+  double       P1;
+  double       P2;
+  double       P5;
+  double       P3;
+  double       L1;
+  double       L2;
+  double       L5;
+  double       L3;
+  ColumnVector xx;
+  ColumnVector vv;
+  double       clk;
+  double       eleSat;
+  double       azSat;
+  double       rho;
+  bool         slipFlag;
+  double       lambda3;
+  unsigned     obsIndex;
+  char system() const {return prn.toAscii()[0];}
+};
+
+class t_epoData {
+ public:
+  t_epoData() {}
+
+  ~t_epoData() {
+    clear();
+  }
+
+  void clear() {
+    QMapIterator<QString, t_satData*> it(satData);
+    while (it.hasNext()) {
+      it.next();
+      delete it.value();
+    }
+    satData.clear();
+    tt.reset();
+  }
+
+  void deepCopy(const t_epoData* from) {
+    clear();
+    tt = from->tt;
+    QMapIterator<QString, t_satData*> it(from->satData);
+    while (it.hasNext()) {
+      it.next();
+      satData[it.key()] = new t_satData(*it.value());
+    }
+  }
+
+  unsigned sizeSys(char system) const {
+    unsigned ans = 0;
+    QMapIterator<QString, t_satData*> it(satData);
+    while (it.hasNext()) {
+      it.next();
+      if (it.value()->system() == system) {
+        ++ans;
+      }
+    }
+    return ans;
+  }
+  unsigned sizeAll() const {return satData.size();}
+
+  bncTime                   tt;
+  QMap<QString, t_satData*> satData;
+};
 
 class t_pppParam {
@@ -136,20 +217,7 @@
   void bancroft(const Matrix& BBpass, ColumnVector& pos);
 
-  class pppPos {
-   public:
-    pppPos() {
-      for (int ii = 0; ii < 7; ++ii) {
-        xnt[ii] = 0.0;
-      }
-    }
-    bncTime time;
-    double  xnt[7];
-  };
-
   t_pppClient*          _pppClient;
-  const t_pppOptions*   _opt;
   bncTime               _time;
   bncTime               _lastTimeOK;
-  QByteArray            _staID;
   QVector<t_pppParam*>  _params;
   SymmetricMatrix       _QQ;
@@ -159,8 +227,6 @@
   ColumnVector          _xcBanc;
   ColumnVector          _ellBanc;
-  QByteArray            _log;
   QMap<QString, double> _windUpTime;
   QMap<QString, double> _windUpSum;
-  QVector<pppPos*>      _posAverage;
   QStringList           _outlierGPS;
   QStringList           _outlierGlo;
