diff --git a/nonlin.cpp b/nonlin.cpp
index cfe4d9f10b2eb5e47b977477f93a5b00213aa497..084045dc2e9e6f83abb0b0bb1a2abddc9bf16385 100644
--- a/nonlin.cpp
+++ b/nonlin.cpp
@@ -622,6 +622,7 @@ NonlinOut varmet(const NonlinParam& p, const NonlinCF& cfo)
     else if (status == LM_LAMBDA_NILL) { // This means we might be heading uphill and should restart
       if (p.NextRestart()) { // If we have spare restarts
         p.SetCF(p.CF());      // Another copy of old value
+        p.SetPar(p.Par());    // Another copy of old values
         iH.reset();           // Back to being unity matrix
         pdir = -grad;
         continue;
@@ -634,7 +635,10 @@ NonlinOut varmet(const NonlinParam& p, const NonlinCF& cfo)
     ColumnVector dpar = newpar - p.Par();
     p.SetPar(newpar);
     p.SetCF(newcf);
-    if (zero_par_step_conv(dpar,p.Par(),p.FractionalParameterTolerance())) {p.SetStatus(NL_PARCONV); return(p.Status());}
+    // cout << "p.FractionalParameterTolerance() = " << p.FractionalParameterTolerance() << endl;
+    // cout << "P.Par() = " << p.Par() << endl;
+    // cout << "dpar = " << dpar << endl;
+    if (zero_par_step_conv(p.Par(),dpar,p.FractionalParameterTolerance())) {p.SetStatus(NL_PARCONV); return(p.Status());}
     // Get gradient at new point
     ColumnVector newgrad = sf*cfo.grad(p.Par());
     // Test for convergence based on "zero" gradient