Index: /trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- /trunk/BNC/src/PPP/pppFilter.cpp	(revision 6007)
+++ /trunk/BNC/src/PPP/pppFilter.cpp	(revision 6008)
@@ -111,13 +111,9 @@
     int iOld = par1->indexOld();
     if (iOld < 0) {
-      if (ii < 3) {
-        _QFlt[ii][ii] = par1->sigma0() * par1->sigma0(); // new parameter
-      }
+      _QFlt[ii][ii] = par1->sigma0() * par1->sigma0(); // new parameter
     }
     else {
-      if (ii < 3) {
-        _QFlt[ii][ii] = QFltOld[iOld][iOld] + par1->noise() * par1->noise();
-      }
-      _xFlt[ii] = xFltOld[iOld];
+      _QFlt[ii][ii] = QFltOld[iOld][iOld] + par1->noise() * par1->noise();
+      _xFlt[ii]     = xFltOld[iOld];
       for (unsigned jj = 0; jj < ii; jj++) {
         const t_pppParam* par2 = params[jj];
@@ -130,5 +126,5 @@
   }
 
-  predictCovCrdPart();
+  predictCovCrdPart(QFltOld);
 
   // Process Satellite Systems separately
@@ -435,18 +431,26 @@
 // Compute various DOP Values
 ////////////////////////////////////////////////////////////////////////////
-void t_pppFilter::predictCovCrdPart() {
+void t_pppFilter::predictCovCrdPart(const SymmetricMatrix& QFltOld) {
 
   const vector<t_pppParam*>& params = _parlist->params();
-
-  bool first = (_QFlt[0][0] == 0.0 && _QFlt[1][1] == 0.0 && _QFlt[2][2] == 0.0);
-
-  for (unsigned ii = 0; ii < 3; ii++) {
-    const t_pppParam* par1 = params[ii];
-    if (first) {
-      _QFlt[ii][ii] = par1->sigma0() * par1->sigma0(); // new parameter
-    }
-    else {
-      _QFlt[ii][ii] += par1->noise() * par1->noise();
-    }
-  }
-}
+  if (params.size() < 3) {
+    return;
+  }
+
+  bool first = (params[0]->indexOld() < 0);
+
+  if (first) {
+    _QFlt.SymSubMatrix(1,3) = 0.0;
+    for (unsigned ii = 0; ii < 3; ii++) {
+      const t_pppParam* par1 = params[ii];
+      _QFlt[ii][ii] = par1->sigma0() * par1->sigma0();
+    }
+  }
+  else {
+    _QFlt.SymSubMatrix(1,3) = QFltOld.SymSubMatrix(1,3);
+    for (unsigned ii = 0; ii < 3; ii++) {
+      const t_pppParam* par1 = params[ii];
+      _QFlt[ii][ii] = QFltOld[ii][ii] + par1->noise() * par1->noise();
+    }
+  }
+}
Index: /trunk/BNC/src/PPP/pppFilter.h
===================================================================
--- /trunk/BNC/src/PPP/pppFilter.h	(revision 6007)
+++ /trunk/BNC/src/PPP/pppFilter.h	(revision 6008)
@@ -61,5 +61,5 @@
   void cmpDOP(const std::vector<t_pppSatObs*>& obsVector);
 
-  void predictCovCrdPart();
+  void predictCovCrdPart(const SymmetricMatrix& QFltOld);
 
   bncTime         _epoTime;
