Index: trunk/BNC/src/PPP/pppClient.cpp
===================================================================
--- trunk/BNC/src/PPP/pppClient.cpp	(revision 9535)
+++ trunk/BNC/src/PPP/pppClient.cpp	(revision 9537)
@@ -688,7 +688,9 @@
       else {
         epochReProcessing = false;
-        _filter->rememberState(0);
-      }
-
+        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 9535)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 9537)
@@ -119,4 +119,5 @@
       if (processSystem(OPT->LCs(sys), obsVector, _refPrn,
                         epoch->pseudoObsIono(), preProcessing) != success) {
+        LOG << "processSystem !=  success (pre-processing)" << endl;
         _xFlt = xFltOld;
         _QFlt = QFltOld;
@@ -162,4 +163,12 @@
     if (processSystem(OPT->LCs(sys), obsVector, _refPrn,
                       epoch->pseudoObsIono(), preProcessing) != success) {
+      LOG << "processSystem !=  success (fin-processing)" << endl;
+      _xFlt = xFltOld;
+      _QFlt = QFltOld;
+      if (OPT->_obsModelType == OPT->DCMcodeBias ||
+          OPT->_obsModelType == OPT->DCMphaseBias) {
+        _obsPool->deleteLastEpoch();
+        restoreState(3);
+      }
       return failure;
     }
@@ -318,5 +327,5 @@
     // Check number of observations, truncate matrices
     // -----------------------------------------------
-    if (iObs == -1) {
+    if (iObs == -1) {LOG << "iObs == -1\n";
       return failure;
     }
@@ -716,6 +725,6 @@
     return success;
   }
-//  LOG << "datumTransformation: printParams before set" << endl;
-//  _parlist.printParams(_epoTime);
+  //LOG << "datumTransformation: printParams before set" << endl;
+  //_parlist.printParams(_epoTime);
 
   // set AA2
@@ -814,6 +823,6 @@
   // ====================
 #ifdef BNC_DEBUG_PPP
-//      LOG << "AA1\n"; _datumTrafo->printMatrix(_datumTrafo->AA1(), _datumTrafo->numObs(), _datumTrafo->numPar());
-//      LOG << "AA2\n"; _datumTrafo->printMatrix(_datumTrafo->AA2(), _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
   if(_datumTrafo->computeTrafoMatrix() != success) {
Index: trunk/BNC/src/PPP/pppSatObs.cpp
===================================================================
--- trunk/BNC/src/PPP/pppSatObs.cpp	(revision 9535)
+++ trunk/BNC/src/PPP/pppSatObs.cpp	(revision 9537)
@@ -315,4 +315,16 @@
   retVal = sqrt(retVal);
 
+  // De-Weight GLONASS
+  // -----------------
+  if (_prn.system() == 'R' && (t_lc::includesCode(tLC) ||  t_lc::includesPhase(tLC))) {
+    retVal *= 5.0;
+  }
+
+  // De-Weight BDS
+  // -------------
+  if (_prn.system() == 'C' && (t_lc::includesCode(tLC) ||  t_lc::includesPhase(tLC))) {
+    retVal *= 2.0;
+  }
+
   // Elevation-Dependent Weighting
   // -----------------------------
@@ -353,4 +365,17 @@
 
   retVal = sqrt(retVal);
+
+  // De-Weight GLONASS
+  // -----------------
+  if (_prn.system() == 'R' && (t_lc::includesCode(tLC) ||  t_lc::includesPhase(tLC))) {
+    retVal *= 2.0;
+  }
+
+  // De-Weight BDS
+  // -------------
+  if (_prn.system() == 'C' && (t_lc::includesCode(tLC) ||  t_lc::includesPhase(tLC))) {
+    retVal *= 2.0;
+  }
+
 
   return retVal;
