Index: trunk/BNC/src/PPP/pppClient.cpp
===================================================================
--- trunk/BNC/src/PPP/pppClient.cpp	(revision 10017)
+++ trunk/BNC/src/PPP/pppClient.cpp	(revision 10018)
@@ -568,7 +568,8 @@
     if (OPT->_obsModelType == OPT->DCMcodeBias ||
         OPT->_obsModelType == OPT->DCMphaseBias) {
-      if (ind == 1 || ind > 7) {
+      if (ind == 1 || ind == 6 || ind > 7) {
         reset();
       }
+      //else {_filter->restoreState(ind);}
     }
   }
@@ -640,7 +641,4 @@
     do {
       _numEpoProcessing++;
-#ifdef BNC_DEBUG_PPP
-      LOG << "_numEpoProcessing " << _numEpoProcessing  << endl;
-#endif
       if (_obsPool->refSatChanged()) {
         if(_filter->datumTransformation(_refSatMap) != success) {
@@ -678,4 +676,9 @@
       }
 
+      if (int(_obsRover.size()) < _opt->_minObs) {
+        LOG << "t_pppClient::processEpoch not enough observations" << endl;
+        return finish(failure,5);
+      }
+
       if (_opt->_refSatRequired) {
         if (handleRefSatellites(_obsRover) != success) {
@@ -683,13 +686,12 @@
         }
         if (_obsPool->refSatChanged()) {
-          LOG << "t_pppFilter: refSatChanged()" << endl;
+          if (_numEpoProcessing >1 &&
+              (OPT->_obsModelType == OPT->DCMcodeBias ||
+               OPT->_obsModelType == OPT->DCMphaseBias)) {
+            _obsPool->deleteLastEpoch();
+          }
           epochReProcessing = true;
           continue;
         }
-      }
-
-      if (int(_obsRover.size()) < _opt->_minObs) {
-        LOG << "t_pppClient::processEpoch not enough observations" << endl;
-        return finish(failure,5);
       }
 
@@ -719,14 +721,13 @@
         LOG << "pppClient: _obsPool->refSatChangeRequired() " << endl;
         epochReProcessing = true;
-        _obsPool->deleteLastEpoch();
         _filter->restoreState(0);
         setHistoricalRefSats();
       }
       else {
-        epochReProcessing = false;
-        if (OPT->_obsModelType == OPT->DCMcodeBias ||
-            OPT->_obsModelType == OPT->DCMphaseBias) {
-          _filter->rememberState(0);
-        }
+         epochReProcessing = false;
+         if (OPT->_obsModelType == OPT->DCMcodeBias ||
+             OPT->_obsModelType == OPT->DCMphaseBias) {
+           _filter->rememberState(0);
+         }
       }
     } while (epochReProcessing);
Index: trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP/pppFilter.cpp	(revision 10017)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 10018)
@@ -83,5 +83,5 @@
   if (OPT->_obsModelType == OPT->DCMcodeBias ||
       OPT->_obsModelType == OPT->DCMphaseBias) {
-    _parlist.printParams(_epoTime);
+//    _parlist.printParams(_epoTime);
   }
 #endif
@@ -100,7 +100,7 @@
       }
     }
-    if (num < OPT->_minObs) {
-      setNeuNoiseToZero = true;
-    }
+//    if (num < OPT->_minObs) {
+//      setNeuNoiseToZero = true;
+//    }
   }
   setStateVectorAndVarCovMatrix(xFltOld, QFltOld, setNeuNoiseToZero);
@@ -132,6 +132,5 @@
         _xFlt = xFltOld;
         _QFlt = QFltOld;
-        _obsPool->deleteLastEpoch();
-        restoreState(2);
+        restoreState(1);
         return failure;
       }
@@ -177,6 +176,5 @@
         _xFlt = xFltOld;
         _QFlt = QFltOld;
-        _obsPool->deleteLastEpoch();
-        restoreState(3);
+        restoreState(2);
       }
       return failure;
@@ -277,6 +275,6 @@
     // Check number of observations
     // ----------------------------
-    if (iObs == -1) {
-      LOG << " number of observations == " << iObs + 1 << "\n";
+    if ((iObs +1) < OPT->_minObs) {
+      LOG << "t_pppFilter::processSystem not enough observations: " << iObs + 1 << "\n";
       if (preProcessing) {
         _obsPool->setRefSatChangeRequired(sys, true);
@@ -363,22 +361,25 @@
       if (preProcessing) {
         if (obs->prn() == refPrn) {
-          LOG << epoTimeStr << " Outlier ("
-              << ((preProcessing) ? "pre-processing) " : "fin-processing) ")
-              << t_lc::toString(maxOutlierLC) << ' ' << obs->prn().toString()
-              << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
-          _obsPool->setRefSatChangeRequired(sys, true);
-          break;
-        } else {
-          obs->setOutlier();
-        }
-      } else {    // fin-processing
-        LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' '
-            << obs->prn().toString() << ' ' << setw(8) << setprecision(4)
-            << maxOutlier << endl;
-        if (par) {
-          resetAmb(par->prn(), obsVector, maxOutlierLC, &QSav, &xSav);
+            LOG << epoTimeStr << " Outlier ("
+                << ((preProcessing) ? "pre-processing) " : "fin-processing) ")
+                << t_lc::toString(maxOutlierLC) << ' ' << obs->prn().toString()
+                << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
+            _obsPool->setRefSatChangeRequired(sys, true);
+            break;
         }
         else {
           obs->setOutlier();
+        }
+      } else {    // fin-processing
+        if (obs->prn() != refPrn) {
+          LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' '
+              << obs->prn().toString() << ' ' << setw(8) << setprecision(4)
+              << maxOutlier << endl;
+          if (par) {
+            resetAmb(par->prn(), obsVector, maxOutlierLC, &QSav, &xSav);
+          }
+          else {
+            obs->setOutlier();
+          }
         }
       }
@@ -715,5 +716,5 @@
   }
 #ifdef BNC_DEBUG_PPP
-  _parlist.printParams(_epoTime);
+  //_parlist.printParams(_epoTime);
 #endif
 
Index: trunk/BNC/src/PPP/pppFilter.h
===================================================================
--- trunk/BNC/src/PPP/pppFilter.h	(revision 10017)
+++ trunk/BNC/src/PPP/pppFilter.h	(revision 10018)
@@ -31,5 +31,5 @@
   void restoreState(int num)  {
 #ifdef BNC_DEBUG_PPP
-    LOG << "Restore parameter from last epoch    : _parlist = _parlist_sav ("<<  num << ")\n";
+    LOG << "Restore parameter from last successful epoch: _parlist = _parlist_sav ("<<  num << ")\n";
 #endif
     _QFlt    = _QFlt_sav;
@@ -38,5 +38,5 @@
   void rememberState(int num) {
 #ifdef BNC_DEBUG_PPP
-    LOG << "Remember parameters from last epoch  : _parlist_sav = _parlist ("<<  num << ")\n";
+    LOG << "Remember parameters from successful epoch   : _parlist_sav = _parlist ("<<  num << ")\n";
 #endif
     _QFlt_sav    = _QFlt;
@@ -141,5 +141,4 @@
         Prep = &_AA1;
       }
-
       if (AA.Ncols() != _numPar) {
         LOG << "t_pppFilter::prepareAA: AA.Ncols() != _numPar: " << AA.Ncols() << " != " << _numPar << "\n RETURN FAILURE" <<  std::endl;
Index: trunk/BNC/src/PPP/pppObsPool.cpp
===================================================================
--- trunk/BNC/src/PPP/pppObsPool.cpp	(revision 10017)
+++ trunk/BNC/src/PPP/pppObsPool.cpp	(revision 10018)
@@ -131,4 +131,5 @@
 
   if (!_epochs.empty()) {
+    //LOG << " " << _epochs.back()->epoTime().timestr().c_str() << endl;
     delete _epochs.back();
     _epochs.pop_back();
Index: trunk/BNC/src/PPP/pppParlist.cpp
===================================================================
--- trunk/BNC/src/PPP/pppParlist.cpp	(revision 10017)
+++ trunk/BNC/src/PPP/pppParlist.cpp	(revision 10018)
@@ -465,5 +465,5 @@
     if (remove) {
 #ifdef BNC_DEBUG_PPP
-      LOG << "remove0 " << par->toString() << std::endl;
+//      LOG << "remove0 " << par->toString() << std::endl;
 #endif
       delete par;
@@ -521,5 +521,5 @@
           (!par->lastObsTime().valid() || (epoTime - par->lastObsTime() > 0.0))) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+//        LOG << "remove1 " << par->toString() << std::endl;
 #endif
         lostSats.append(par->prn());
@@ -534,5 +534,5 @@
                 par->type() == t_pppParam::pBiasG2) && !usedSystems().contains('G')) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+        //LOG << "remove1 " << par->toString() << std::endl;
 #endif
         delete par;
@@ -544,5 +544,5 @@
                 par->type() == t_pppParam::pBiasR2) && !usedSystems().contains('R')) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+//        LOG << "remove1 " << par->toString() << std::endl;
 #endif
         delete par;
@@ -554,5 +554,5 @@
                 par->type() == t_pppParam::pBiasE2) && !usedSystems().contains('E')) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+//        LOG << "remove1 " << par->toString() << std::endl;
 #endif
         delete par;
@@ -564,5 +564,5 @@
                 par->type() == t_pppParam::pBiasC2) && !usedSystems().contains('C')) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+//        LOG << "remove1 " << par->toString() << std::endl;
 #endif
         delete par;
@@ -581,5 +581,5 @@
           (lostSats.contains(par->prn()) || (epoTime - par->lastObsTime() > 0.0))) {
 #ifdef BNC_DEBUG_PPP
-        LOG << "remove1 " << par->toString() << std::endl;
+        //LOG << "remove1 " << par->toString() << std::endl;
 #endif
         delete par;
@@ -761,5 +761,5 @@
     else {
 #ifdef BNC_DEBUG_PPP
-      LOG << "push_back  parReq " << parReq->toString() << std::endl;
+//      LOG << "push_back  parReq " << parReq->toString() << std::endl;
 #endif
       _params.push_back(parReq);
