Index: trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP/pppFilter.cpp	(revision 10237)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 10248)
@@ -268,5 +268,6 @@
       if (par) {
 //        if (par->ambResetCandidate()) {
-          resetAmb(par->prn(), obsVector, maxOutlierLC, &QSav, &xSav);
+          resetAmb(obs->prn(), obsVector, maxOutlierLC, &QSav, &xSav);
+          adjustNoise(t_pppParam::ion, obs->prn(), 0.1, &QSav);
 //        }
 //        else {
@@ -343,4 +344,5 @@
         if (slip) {
           resetAmb(obs->prn(), obsVector, tLC);
+          adjustNoise(t_pppParam::ion, obs->prn(), 0.1);
         }
 
@@ -361,4 +363,5 @@
                 << obs->prn().toString() << ' ' << setw(8) << setprecision(4) << vv << endl;
             resetAmb(obs->prn(), obsVector, tLC);
+            adjustNoise(t_pppParam::ion, obs->prn(), 0.1);
           }
         }
@@ -372,6 +375,6 @@
 // Reset Ambiguity Parameter (cycle slip)
 ////////////////////////////////////////////////////////////////////////////
-t_irc t_pppFilter::resetAmb(t_prn prn, const vector<t_pppSatObs*> &obsVector,
-    t_lc::type lc, SymmetricMatrix *QSav, ColumnVector *xSav) {
+t_irc t_pppFilter::resetAmb(const t_prn prn, const vector<t_pppSatObs*> &obsVector, t_lc::type lc,
+                            SymmetricMatrix *QSav, ColumnVector *xSav) {
 
   t_irc irc = failure;
@@ -381,4 +384,5 @@
     if (par->type() == t_pppParam::amb && par->prn() == prn) {
       int ind = par->indexNew();
+      double eleSat = par->ambEleSat();
       bncTime firstObsTime;
       bncTime lastObsTime = par->lastObsTime();
@@ -396,4 +400,5 @@
       par->setFirstObsTime(firstObsTime);
       par->setLastObsTime(lastObsTime);
+      par->setAmbEleSat(eleSat);
       params[iPar] = par;
       for (unsigned ii = 1; ii <= params.size(); ii++) {
@@ -412,5 +417,5 @@
       }
       _x0[ind] = par->x0();
-      irc = success;
+      return success;
     }
   }
@@ -419,16 +424,26 @@
 }
 
-// Add noise to individual parameter
-////////////////////////////////////////////////////////////////////////////
-t_irc t_pppFilter::addNoiseToPar(t_pppParam::e_type parType, t_prn prn, double noise) {
+// Adjust process noise of individual parameters
+////////////////////////////////////////////////////////////////////////////
+t_irc t_pppFilter::adjustNoise(t_pppParam::e_type parType, t_prn prn, double noise,
+                               SymmetricMatrix *QSav) {
+
   t_irc irc = failure;
-  vector<t_pppParam*> &params = _parlist->params();
+  vector<t_pppParam*>& params = _parlist->params();
   for (unsigned iPar = 0; iPar < params.size(); iPar++) {
     t_pppParam *par = params[iPar];
     if (par->type() == parType && par->prn() == prn) {
       int ind = par->indexNew();
-      LOG << string(_epoTime) << " ADD NOISE TO " << par->toString() << endl;
-      par->setIndex(ind);
+      //LOG << string(_epoTime) << " ADJUSTNOISE " << par->toString() << endl;
+      for (unsigned ii = 1; ii <= params.size(); ii++) {
+        _QFlt(ii, ind + 1) = 0.0;
+        if (QSav) {
+          (*QSav)(ii, ind + 1) = 0.0;
+        }
+      }
       _QFlt(ind + 1, ind + 1) = noise * noise;
+      if (QSav) {
+        (*QSav)(ind + 1, ind + 1) = _QFlt(ind + 1, ind + 1);
+      }
       irc = success;
     }
Index: trunk/BNC/src/PPP/pppFilter.h
===================================================================
--- trunk/BNC/src/PPP/pppFilter.h	(revision 10237)
+++ trunk/BNC/src/PPP/pppFilter.h	(revision 10248)
@@ -83,5 +83,6 @@
                  SymmetricMatrix* QSav = 0, ColumnVector* xSav = 0);
 
-  t_irc addNoiseToPar(t_pppParam::e_type parType, t_prn prn, double noise);
+  t_irc adjustNoise(t_pppParam::e_type parType, t_prn prn, double noise,
+                         SymmetricMatrix* QSav = 0);
 
   void cmpDOP(const std::vector<t_pppSatObs*>& obsVector);
