diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp
index deaf84865a43ccc5570c7fdce56c6366fa621b50..45e768233fc3d59e983af88d79851b00ae188c31 100644
--- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp
+++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.cpp
@@ -106,24 +106,31 @@ void MeshQualityOptimizer(GModel *gm, MeshQualOptParameters &p)
   minInvCondNumBarFunc.setTarget(p.minTargetInvCondNum, 1.);
 
   MeshOptPass minJacPass;
-  minJacPass.barrierIterMax = p.optPassMax;
-  minJacPass.optIterMax = p.itMax;
-  minJacPass.contrib.push_back(&nodeDistFunc);
-  minJacPass.contrib.push_back(&minIdealJacBarFunc);
-  par.pass.push_back(minJacPass);
-
   MeshOptPass minInvCondNumPass;
-  minInvCondNumPass.barrierIterMax = p.optPassMax;
-  minInvCondNumPass.optIterMax = p.itMax;
-  minInvCondNumPass.contrib.push_back(&nodeDistFunc);
-  minInvCondNumPass.contrib.push_back(&minInvCondNumBarFunc);
-  par.pass.push_back(minInvCondNumPass);
+  if (p.onlyValidity) {
+    minJacPass.barrierIterMax = p.optPassMax;
+    minJacPass.optIterMax = p.itMax;
+    minJacPass.contrib.push_back(&nodeDistFunc);
+    minJacPass.contrib.push_back(&minIdealJacBarFunc);
+    par.pass.push_back(minJacPass);
+  }
+  else {
+    minInvCondNumPass.barrierIterMax = p.optPassMax;
+    minInvCondNumPass.optIterMax = p.itMax;
+    minInvCondNumPass.contrib.push_back(&nodeDistFunc);
+    minInvCondNumPass.contrib.push_back(&minInvCondNumBarFunc);
+    par.pass.push_back(minInvCondNumPass);
+  }
 
   meshOptimizer(gm, par);
 
   p.CPU = par.CPU;
-//  p.minIdealJac = minIdealJacBarFunc.getMin();
-//  p.maxIdealJac = minIdealJacBarFunc.getMax();
-  p.minInvCondNum = minInvCondNumBarFunc.getMin();
-  p.maxInvCondNum = minInvCondNumBarFunc.getMax();
+  if (p.onlyValidity) {
+    p.minIdealJac = minIdealJacBarFunc.getMin();
+    p.maxIdealJac = minIdealJacBarFunc.getMax();
+  }
+  else {
+    p.minInvCondNum = minInvCondNumBarFunc.getMin();
+    p.maxInvCondNum = minInvCondNumBarFunc.getMax();
+  }
 }
diff --git a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h
index 97ec9a596ef9b8c7bba19f31ba3a4c5722d93178..8353638e4782aba17eb133d6289c39d7a317cc70 100644
--- a/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h
+++ b/contrib/MeshQualityOptimizer/MeshQualityOptimizer.h
@@ -33,38 +33,38 @@
 class GModel;
 
 struct MeshQualOptParameters {
+  bool onlyValidity;
   bool excludeQuad, excludeHex, excludePrism;
   double minTargetIdealJac;
   double minTargetInvCondNum;
-  double weightFixed; // weight of the energy for fixed nodes
-  double weightFree; // weight of the energy for free nodes
-  int nbLayers; // number of layers taken around a bad element
-  int dim; // which dimension to optimize
-  int itMax; // max number of iterations in the optimization process
-  int optPassMax; // max number of optimization passes
-  bool onlyVisible; // apply optimization to visible entities ONLY
-  double distanceFactor; // filter elements such that no elements further away
-                         // than DistanceFactor times the max distance to
-                         // straight sided version of an element are optimized
-  bool fixBndNodes;  // how jacobians are computed and if points can move on boundaries
-  int strategy; // 0 = connected blobs, 1 = adaptive one-by-one
-  int maxAdaptBlob; // Max. nb. of blob adaptation interations
-  int adaptBlobLayerFact; // Growth factor in number of layers for blob adaptation
-  double adaptBlobDistFact; // Growth factor in distance factor for blob adaptation
+  double weightFixed;                                                 // weight of the energy for fixed nodes
+  double weightFree;                                                  // weight of the energy for free nodes
+  int nbLayers;                                                       // number of layers taken around a bad element
+  int dim;                                                            // which dimension to optimize
+  int itMax;                                                          // max number of iterations in the optimization process
+  int optPassMax;                                                     // max number of optimization passes
+  bool onlyVisible;                                                   // apply optimization to visible entities ONLY
+  double distanceFactor;                                              // Distance criterion for patch creation
+  bool fixBndNodes;                                                   // If points can move on boundaries
+  int strategy;                                                       // 0 = connected blobs, 1 = adaptive one-by-one
+  int maxAdaptBlob;                                                   // Max. nb. of blob adaptation interations (if adaptive)
+  int adaptBlobLayerFact;                                             // Growth factor in number of layers for blob adaptation (if adaptive)
+  double adaptBlobDistFact;                                           // Growth factor in distance factor for blob adaptation (if adaptive)
 
   int SUCCESS ; // 0 --> success , 1 --> Not converged
-//  double minIdealJac, maxIdealJac; // after optimization, range of jacobians
+  double minIdealJac, maxIdealJac; // after optimization, range of jacobians
   double minInvCondNum, maxInvCondNum; // after optimization, range of jacobians
   double CPU; // Time for optimization
 
   MeshQualOptParameters ()
-    : excludeQuad(false), excludeHex(false), excludePrism(false),
+    : onlyValidity(false), excludeQuad(false),
+      excludeHex(false), excludePrism(false),
       minTargetIdealJac(0.1), minTargetInvCondNum(0.1), weightFixed(1000.),
       weightFree (1.), nbLayers (6) , dim(3) , itMax(300), optPassMax(50),
       onlyVisible(true), distanceFactor(12), fixBndNodes(false), strategy(0),
       maxAdaptBlob(3), adaptBlobLayerFact(2.), adaptBlobDistFact(2.), CPU(0.),
-//      minIdealJac(0.), maxIdealJac(0.), SUCCESS(-1)
-      minInvCondNum(0.), maxInvCondNum(0.), SUCCESS(-1)
+      minIdealJac(0.), maxIdealJac(0.), minInvCondNum(0.), maxInvCondNum(0.),
+      SUCCESS(-1)
   {
   }
 };