diff --git a/Examples/epem/epemReactionApp.cc b/Examples/epem/epemReactionApp.cc
index ad2b9eae162b26d00d1b27db1e762da0962d15dc..bd46e63a0ebbe23a2fa85d3ad0dc8f7bef9d9b55 100644
--- a/Examples/epem/epemReactionApp.cc
+++ b/Examples/epem/epemReactionApp.cc
@@ -82,9 +82,6 @@ int main(int __argc,char *__argv[]){
   Info << welcomeScreen << endmsg;
   Info << "Compiled " << __DATE__ << " " << __TIME__ << endmsg;
 
-  // Disable output buffering
-  setvbuf(stdout, NULL, _IONBF, 0);
-
   // Parse the command line
   epemParser* theAppParams=new epemParser(__argc, __argv);
 
@@ -162,7 +159,8 @@ int main(int __argc,char *__argv[]){
   theAppBase.fixParams(upar,fixedParams);
   const unsigned int noOfFreeFitParams = upar.VariableParameters();
 
-
+  // Disable output buffering
+  setvbuf(stdout, NULL, _IONBF, 0);
 
   if(mode == "client"){
 
diff --git a/Examples/pbarp/pbarpReactionApp.cc b/Examples/pbarp/pbarpReactionApp.cc
index 54f06285e5c292bce90862d71784ddac5946ebc1..ca6dda92b5c425417f741e9d7ff27afd54b72fe7 100644
--- a/Examples/pbarp/pbarpReactionApp.cc
+++ b/Examples/pbarp/pbarpReactionApp.cc
@@ -90,9 +90,6 @@ int main(int __argc,char *__argv[]){
   Info << welcomeScreen << endmsg;
   Info << "Compiled " << __DATE__ << " " << __TIME__ << endmsg;
 
-  // Disable output buffering
-  setvbuf(stdout, NULL, _IONBF, 0);
-
   // Parse the command line
   pbarpParser* theAppParams=new pbarpParser(__argc, __argv);
 
@@ -177,6 +174,8 @@ int main(int __argc,char *__argv[]){
   theAppBase.fixParams(upar,fixedParams);
   const unsigned int noOfFreeFitParams = upar.VariableParameters();
 
+  // Disable output buffering
+  setvbuf(stdout, NULL, _IONBF, 0);
 
   if(mode == "client"){
 
diff --git a/PwaUtils/AppBase.cc b/PwaUtils/AppBase.cc
index 6b53aa69fab76c733ded5d25bdbee29b680a85c7..699fd5f85ba0bd7f3ca45fbcd5fe2d62b91ff205 100644
--- a/PwaUtils/AppBase.cc
+++ b/PwaUtils/AppBase.cc
@@ -294,11 +294,43 @@ FunctionMinimum AppBase::migradDefault(AbsFcn& theFcn, MnUserParameters& upar){
   MnMigrad migrad(theFcn, upar);
   Info <<"start migrad "<< endmsg;
   FunctionMinimum funcMin = migrad();
-  if(!funcMin.IsValid()) {
-    //try with higher strategy
-    Info <<"FM is invalid, try with strategy = 2."<< endmsg;
-    MnMigrad migrad2(theFcn, funcMin.UserState(), MnStrategy(2));
-    funcMin = migrad2();
+
+  if(funcMin.IsValid()){
+     return funcMin;
+  }
+
+  // Two more tries to get a valid result unsing strategy 2
+  for(int i=0; i<2; i++){
+     Warning <<"FM is invalid, try with strategy = 2."<< endmsg;
+
+     // Check minimum covariance matrix
+     bool badCovarianceDiagonal=false;
+     if(funcMin.HasCovariance()){
+	badCovarianceDiagonal = !PwaCovMatrix::DiagonalIsValid(funcMin.UserCovariance());
+     }
+
+     if(badCovarianceDiagonal){
+       Warning << "Using default errors" << endmsg;
+       MnUserParameters newParams = upar;
+       for(unsigned int i=0; i< funcMin.UserParameters().Params().size();i++){
+	  newParams.SetValue(i, funcMin.UserParameters().Params().at(i));
+       }
+       MnMigrad migrad2(theFcn, newParams, MnStrategy(2));
+       funcMin = migrad2();
+    }
+    else{
+       MnUserParameters newParams = upar;
+       for(unsigned int i=0; i< funcMin.UserParameters().Params().size();i++){
+	  newParams.SetValue(i, funcMin.UserParameters().Params().at(i));
+	  newParams.SetError(i, funcMin.UserParameters().Errors().at(i));
+       }
+       MnMigrad migrad2(theFcn, newParams, MnStrategy(2));
+       funcMin = migrad2();
+    }
+
+    if(funcMin.IsValid()){
+       break;
+    }
   }
 
   return funcMin;
diff --git a/PwaUtils/PwaCovMatrix.cc b/PwaUtils/PwaCovMatrix.cc
index e100f998e4aed42848744fa431476b9056e20222..ae5574e6b6903a03e51455e50e97087d02a78f7e 100644
--- a/PwaUtils/PwaCovMatrix.cc
+++ b/PwaUtils/PwaCovMatrix.cc
@@ -43,6 +43,8 @@ PwaCovMatrix::PwaCovMatrix(ROOT::Minuit2::MnUserCovariance &theMinuitCovMatrix,
 			   ROOT::Minuit2::MnUserParameters &theMinuitParameters,
 			   fitParams &theFitParams)
 {
+   DiagonalIsValid(theMinuitCovMatrix);
+
    _n = theMinuitCovMatrix.Nrow();
    unsigned int _nPar = theMinuitParameters.Params().size();
   
@@ -106,3 +108,17 @@ double PwaCovMatrix::GetElement(std::string parameter1, std::string parameter2){
    return _covMatrix[parameter1][parameter2];
 }
 
+
+
+bool PwaCovMatrix::DiagonalIsValid(const ROOT::Minuit2::MnUserCovariance &theMinuitCovMatrix){
+
+   bool result = true;
+   for(unsigned int i=0; i<theMinuitCovMatrix.Nrow(); i++){
+      if(theMinuitCovMatrix(i, i) < 0){
+	 Warning << "Covariance element (" << i << "," << i << ")"
+		 << " = " << theMinuitCovMatrix(i,i) << " < 0" << endmsg;
+	 result = false;
+      }
+   }
+   return result;
+}
diff --git a/PwaUtils/PwaCovMatrix.hh b/PwaUtils/PwaCovMatrix.hh
index 8f344accd26b586c79b14abf6a93932b6bdc4803..f0f5ae1864ffb33a5e6260d77efb52eb966fed1a 100644
--- a/PwaUtils/PwaCovMatrix.hh
+++ b/PwaUtils/PwaCovMatrix.hh
@@ -52,6 +52,8 @@ class PwaCovMatrix
 		ROOT::Minuit2::MnUserParameters &theMinuitParameters,
 		fitParams &theFitParams);
    double GetElement(std::string parameter1, std::string parameter2);
+   static bool DiagonalIsValid(const ROOT::Minuit2::MnUserCovariance &theMinuitCovMatrix);
+
 
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version){