Index: trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP/pppFilter.cpp	(revision 9525)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 9526)
@@ -76,6 +76,5 @@
   if (OPT->_obsModelType == OPT->DCMcodeBias ||
       OPT->_obsModelType == OPT->DCMphaseBias) {
-     // Save parameters of epoch before
-    _parlist_sav = _parlist;
+    rememberState();
   }
 
@@ -85,12 +84,7 @@
     return failure;
   }
-  const vector<t_pppParam*>& params = _parlist.params();
-  unsigned nPar = _parlist.nPar();
+
 #ifdef BNC_DEBUG_PPP
-  for (unsigned iPar = 0; iPar < nPar; iPar++) {
-    LOG << "t_pppFilter::processEpoch par_cur " << params[iPar]->toString()
-        << "  lastObsTime().valid() " << params[iPar]->lastObsTime().valid()
-        << "  epoTime-params[iPar]->lastObsTime() " << (_epoTime - params[iPar]->lastObsTime()) << endl;
-  }
+  _parlist.printParams();
 #endif
 
@@ -99,32 +93,6 @@
   ColumnVector    xFltOld = _xFlt;
   SymmetricMatrix QFltOld = _QFlt;
-
-  _QFlt.ReSize(nPar); _QFlt = 0.0;
-  _xFlt.ReSize(nPar); _xFlt = 0.0;
-  _x0.ReSize(nPar);   _x0   = 0.0;
-
-  for (unsigned ii = 0; ii < nPar; ii++) {
-    t_pppParam* par1 = params[ii];
-    if (QFltOld.size() == 0) {
-      par1->resetIndex();
-    }
-    _x0[ii] = par1->x0();
-    int iOld = par1->indexOld();
-    if (iOld < 0) {
-      _QFlt[ii][ii] = par1->sigma0() * par1->sigma0(); // new parameter
-    }
-    else {
-      _QFlt[ii][ii] = QFltOld[iOld][iOld] + par1->noise() * par1->noise();
-      _xFlt[ii]     = xFltOld[iOld];
-      for (unsigned jj = 0; jj < ii; jj++) {
-        t_pppParam* par2 = params[jj];
-        int  jOld = par2->indexOld();
-        if (jOld >= 0) {
-          _QFlt[ii][jj] = QFltOld(iOld+1,jOld+1);
-        }
-      }
-    }
-  }
-  predictCovCrdPart(QFltOld);
+  setStateVectorAndVarCovMatrix(xFltOld, QFltOld);
+
 
   // Pre-Process Satellite Systems separately
@@ -137,5 +105,8 @@
     for (int iSys = 0; iSys < usedSystems.size(); iSys++) {
       char sys = usedSystems[iSys];
-      _refPrn = refSatMap[sys]->prn();
+      _refPrn.set(sys, 0);
+      if (OPT->_refSatRequired) {
+        _refPrn = refSatMap[sys]->prn();
+      }
      vector<t_pppSatObs*> obsVector;
       for (unsigned jj = 0; jj < allObs.size(); jj++) {
@@ -159,5 +130,5 @@
       _xFlt = xFltOld;
       _QFlt = QFltOld;
-      _parlist = _parlist_sav;
+      restoreState();
       return success;
     }
@@ -173,9 +144,7 @@
   for (int iSys = 0; iSys < usedSystems.size(); iSys++) {
     char sys = usedSystems[iSys];
+    _refPrn.set(sys, 0);
     if (OPT->_refSatRequired) {
       _refPrn = refSatMap[sys]->prn();
-    }
-    else {
-      _refPrn.set(sys, 0);
     }
     unsigned int num = 0;
@@ -640,5 +609,5 @@
 }
 
-// Compute various DOP Values
+//
 ////////////////////////////////////////////////////////////////////////////
 void t_pppFilter::predictCovCrdPart(const SymmetricMatrix& QFltOld) {
@@ -680,4 +649,41 @@
 }
 
+//
+////////////////////////////////////////////////////////////////////////////
+void t_pppFilter::setStateVectorAndVarCovMatrix(const ColumnVector& xFltOld,
+                                                const SymmetricMatrix& QFltOld) {
+
+  const vector<t_pppParam*>& params = _parlist.params();
+  unsigned nPar = params.size();
+
+  _QFlt.ReSize(nPar); _QFlt = 0.0;
+  _xFlt.ReSize(nPar); _xFlt = 0.0;
+  _x0.ReSize(nPar);   _x0   = 0.0;
+
+  for (unsigned ii = 0; ii < nPar; ii++) {
+    t_pppParam* par1 = params[ii];
+    if (QFltOld.size() == 0) {
+      par1->resetIndex();
+    }
+    _x0[ii] = par1->x0();
+    int iOld = par1->indexOld();
+    if (iOld < 0) {
+      _QFlt[ii][ii] = par1->sigma0() * par1->sigma0(); // new parameter
+    }
+    else {
+      _QFlt[ii][ii] = QFltOld[iOld][iOld] + par1->noise() * par1->noise();
+      _xFlt[ii]     = xFltOld[iOld];
+      for (unsigned jj = 0; jj < ii; jj++) {
+        t_pppParam* par2 = params[jj];
+        int  jOld = par2->indexOld();
+        if (jOld >= 0) {
+          _QFlt[ii][jj] = QFltOld(iOld+1,jOld+1);
+        }
+      }
+    }
+  }
+  predictCovCrdPart(QFltOld);
+}
+
 // Compute datum transformation
 ////////////////////////////////////////////////////////////////////////////
@@ -716,14 +722,9 @@
     return failure;
   }
-  const vector<t_pppParam*>& params = _parlist.params();
-  unsigned nPar = _parlist.nPar();
+
 #ifdef BNC_DEBUG_PPP
-  LOG << " t_pppFilter::datumTransformation par last epoch: " << nPar << "/" << nPar <<  endl;
-  for (unsigned iPar = 0; iPar < nPar; iPar++) {
-    LOG << "t_pppFilter::processEpoch par_cur " << params[iPar]->toString()
-        << "  lastObsTime().valid() " << params[iPar]->lastObsTime().valid()
-        << "  epoTime-params[iPar]->lastObsTime() " << (_epoTime - params[iPar]->lastObsTime()) << endl;
-  }
+  _parlist.printParams();
 #endif
+
   const QList<char>& usedSystems = _parlist.usedSystems();
   for (int iSys = 0; iSys < usedSystems.size(); iSys++) {
@@ -757,4 +758,8 @@
       maxObs -= 1; // pseudo obs iono with respect to refSat
     }
+
+    const vector<t_pppParam*>& params = _parlist.params();
+    unsigned nPar = _parlist.nPar();
+
     Matrix  AA(maxObs, nPar);
 
@@ -807,5 +812,5 @@
   // ====================
 #ifdef BNC_DEBUG_PPP
-      //LOG << "AA1\n"; _datumTrafo->printMatrix(_datumTrafo->AA1(), _datumTrafo->numObs(), _datumTrafo->numPar());
+      LOG << "AA1\n"; _datumTrafo->printMatrix(_datumTrafo->AA1(), _datumTrafo->numObs(), _datumTrafo->numPar());
       LOG << "AA2\n"; _datumTrafo->printMatrix(_datumTrafo->AA2(), _datumTrafo->numObs(), _datumTrafo->numPar());
 #endif
@@ -848,4 +853,6 @@
 
   _obsPool->putEpoch(_epoTime, allObs, peseudoObsIono, refSatMap);
+
+  rememberState();
 
   return success;
Index: trunk/BNC/src/PPP/pppFilter.h
===================================================================
--- trunk/BNC/src/PPP/pppFilter.h	(revision 9525)
+++ trunk/BNC/src/PPP/pppFilter.h	(revision 9526)
@@ -29,4 +29,12 @@
   void initDatumTransformation(const std::vector<t_pppSatObs*>& allObs, bool pseudoObsIono);
   unsigned setTrafoObs();
+  void restoreState()  {    LOG << "restore parameter from last epoch: _parlist = _parlist_old" << endl;
+    _QFlt    = _QFlt_sav;
+    _parlist = _parlist_sav;
+  }
+  void rememberState() {    LOG << "Remember parameters from epoch before: _parlist_old = _parlist" << endl;
+    _QFlt_sav    = _QFlt;
+    _parlist_sav = _parlist;
+  }
 
   int    numSat() const {return _numSat;}
@@ -183,4 +191,6 @@
               const QMap<char, t_pppRefSat*>& refSatMap);
 
+  void setStateVectorAndVarCovMatrix(const ColumnVector& xFltOld, const SymmetricMatrix& QFltOld);
+
   void predictCovCrdPart(const SymmetricMatrix& QFltOld);
 
@@ -197,4 +207,5 @@
   t_datumTrafo*   _datumTrafo;
   SymmetricMatrix _QFlt;
+  SymmetricMatrix _QFlt_sav;
   ColumnVector    _xFlt;
   ColumnVector    _x0;
Index: trunk/BNC/src/PPP/pppParlist.cpp
===================================================================
--- trunk/BNC/src/PPP/pppParlist.cpp	(revision 9525)
+++ trunk/BNC/src/PPP/pppParlist.cpp	(revision 9526)
@@ -829,9 +829,9 @@
 ////////////////////////////////////////////////////////////////////////////
 void t_pppParlist::printParams() {
-  vector<t_pppParam*>::const_iterator it = _params.begin();
-  while (it != _params.end()) {
-    t_pppParam* par = *it;
-    LOG << "par " << par->toString() << "  lastObsTime valid? " << par->lastObsTime().valid()<< endl;
-  }
-}
-
+
+  for (unsigned iPar = 0; iPar < _params.size(); iPar++) {
+    LOG << "t_pppFilter::processEpoch par_cur " << _params[iPar]->toString()
+        << "  lastObsTime().valid() " << _params[iPar]->lastObsTime().valid() << endl;
+  }
+}
+
