Index: trunk/BNC/src/PPP/pppFilter.cpp
===================================================================
--- trunk/BNC/src/PPP/pppFilter.cpp	(revision 10327)
+++ trunk/BNC/src/PPP/pppFilter.cpp	(revision 10328)
@@ -465,4 +465,7 @@
     const unsigned numPar = 4;
     Matrix AA(obsVector.size(), numPar);
+    t_pppParam* parX = 0;
+    t_pppParam* parY = 0;
+    t_pppParam* parZ = 0;
     _numSat = 0;
     for (unsigned ii = 0; ii < obsVector.size(); ii++) {
@@ -471,6 +474,15 @@
         ++_numSat;
         for (unsigned iPar = 0; iPar < numPar; iPar++) {
-          const t_pppParam* par = _parlist->params()[iPar];
+          t_pppParam* par = _parlist->params()[iPar];
           AA[_numSat - 1][iPar] = par->partial(_epoTime, obs, t_lc::c1);
+          if      (par->type() == t_pppParam::crdX) {
+            parX = par;
+          }
+          else if (par->type() == t_pppParam::crdY) {
+            parY = par;
+          }
+          else if (par->type() == t_pppParam::crdZ) {
+            parZ = par;
+          }
         }
       }
@@ -482,7 +494,17 @@
     SymmetricMatrix NN; NN << AA.t() * AA;
     SymmetricMatrix QQ = NN.i();
-
-    _dop.H = sqrt(QQ(1, 1) + QQ(2, 2));
-    _dop.V = sqrt(QQ(3, 3));
+    SymmetricMatrix QQxyz = QQ.SymSubMatrix(1,3);
+
+    ColumnVector xyz(3), neu(3);
+    SymmetricMatrix QQneu(3);
+    const t_pppStation *sta = PPP_CLIENT->staRover();
+    xyz[0] = _xFlt[parX->indexNew()];
+    xyz[1] = _xFlt[parY->indexNew()];
+    xyz[2] = _xFlt[parZ->indexNew()];
+    xyz2neu(sta->ellApr().data(), xyz.data(), neu.data());
+    covariXYZ_NEU(QQxyz, sta->ellApr().data(), QQneu);
+
+    _dop.H = sqrt(QQneu(1, 1) + QQneu(2, 2));
+    _dop.V = sqrt(QQneu(3, 3));
     _dop.P = sqrt(QQ(1, 1) + QQ(2, 2) + QQ(3, 3));
     _dop.T = sqrt(QQ(4, 4));
