Index: trunk/BNC/bncmodel.cpp
===================================================================
--- trunk/BNC/bncmodel.cpp	(revision 3322)
+++ trunk/BNC/bncmodel.cpp	(revision 3323)
@@ -1309,14 +1309,5 @@
   Tracer tracer("bncModel::update_p");
 
-  // Remeber Original State Vector and Variance-Covariance Matrix
-  // ------------------------------------------------------------
-  SymmetricMatrix QQ_orig = _QQ;
-
-  QVectorIterator<bncParam*> itPar(_params);
-  QVector<bncParam*> params_orig;
-  while (itPar.hasNext()) {
-    bncParam* par = itPar.next();
-    params_orig.push_back(new bncParam(*par));
-  }
+  rememberState();
 
   for (int iPhase = 0; iPhase <= (_usePhase ? 1 : 0); iPhase++) {
@@ -1332,9 +1323,5 @@
       if (iPhase == 0) {      
         if (cmpBancroft(epoData) != success) {
-          QVectorIterator<bncParam*> itParOrig(params_orig);
-          while (itParOrig.hasNext()) {
-            bncParam* par = itParOrig.next();
-            delete par;
-          }
+          restoreState();
           emit newMessage(_log, false);
           return failure;
@@ -1343,19 +1330,5 @@
       else {
         if (epoData->sizeGPS() < MINOBS) {
-
-          _QQ = QQ_orig;
-          QVectorIterator<bncParam*> itPar(_params);
-          while (itPar.hasNext()) {
-            bncParam* par = itPar.next();
-            delete par;
-          }
-          _params.clear();
-
-          QVectorIterator<bncParam*> itParOrig(params_orig);
-          while (itParOrig.hasNext()) {
-            bncParam* par = itParOrig.next();
-            _params.push_back(par);
-          }
-
+          restoreState();
           _log += "bncModel::update_p: not enough data\n";
           emit newMessage(_log, false);
@@ -1463,9 +1436,45 @@
   }
 
-  QVectorIterator<bncParam*> itParOrig(params_orig);
-  while (itParOrig.hasNext()) {
-    bncParam* par = itParOrig.next();
+  return success;
+}
+
+// Remeber Original State Vector and Variance-Covariance Matrix
+////////////////////////////////////////////////////////////////////////////
+void bncModel::rememberState() {
+
+  _QQ_sav = _QQ;
+
+  QVectorIterator<bncParam*> itSav(_params_sav);
+  while (itSav.hasNext()) {
+    bncParam* par = itSav.next();
     delete par;
   }
-  return success;
-}
+  _params_sav.clear();
+
+  QVectorIterator<bncParam*> it(_params);
+  while (it.hasNext()) {
+    bncParam* par = it.next();
+    _params_sav.push_back(new bncParam(*par));
+  }
+}
+
+// Restore Original State Vector and Variance-Covariance Matrix
+////////////////////////////////////////////////////////////////////////////
+void bncModel::restoreState() {
+
+  _QQ = _QQ_sav;
+
+  QVectorIterator<bncParam*> it(_params);
+  while (it.hasNext()) {
+    bncParam* par = it.next();
+    delete par;
+  }
+  _params.clear();
+
+  QVectorIterator<bncParam*> itSav(_params_sav);
+  while (itSav.hasNext()) {
+    bncParam* par = itSav.next();
+    _params.push_back(new bncParam(*par));
+  }
+}
+
Index: trunk/BNC/bncmodel.h
===================================================================
--- trunk/BNC/bncmodel.h	(revision 3322)
+++ trunk/BNC/bncmodel.h	(revision 3323)
@@ -120,4 +120,7 @@
   bncTime  _startTime;
 
+  void rememberState();
+  void restoreState();
+
   class pppPos {
    public:
@@ -136,4 +139,6 @@
   QVector<bncParam*>    _params;
   SymmetricMatrix       _QQ;
+  QVector<bncParam*>    _params_sav;
+  SymmetricMatrix       _QQ_sav;
   ColumnVector          _xcBanc;
   ColumnVector          _ellBanc;
