diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index b34fba5a0e215fdd10fa60d37f75ab7629053e49..a956ebf86d759d75023748331c544e9e61f159e6 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -144,7 +144,7 @@ static void GetQualityMeasure(std::vector<T*> &ele,
       if(s > (2*j-100) / 100. && s <= (2*j-98) / 100.) quality[0][j]++;
       if(g > j / 100. && g <= (j + 1) / 100.) quality[1][j]++;
       if(r > j / 100. && r <= (j + 1) / 100.) quality[2][j]++;
-      if(e > (2*j-100) / 100. && e <= (2*j-98) / 100.) quality[4][j]++;
+      if(e > (2*j-100) / 100. && e <= (2*j-98) / 100.) quality[3][j]++;
     }
   }
 }
diff --git a/Mesh/qualityMeasuresJacobian.cpp b/Mesh/qualityMeasuresJacobian.cpp
index fa960a6ed24c140208f4e2e5020e2b4bf8e5a7c1..6d82b43ba1df2d9a1e969071b40eaeae7dba8e82 100644
--- a/Mesh/qualityMeasuresJacobian.cpp
+++ b/Mesh/qualityMeasuresJacobian.cpp
@@ -20,9 +20,9 @@ static const double cTri = 2/std::sqrt(3);
 static const double cTet = std::sqrt(2);
 static const double cPyr = std::sqrt(2);
 
-static void computeCoeffLengthVectors_(const fullMatrix<double> &mat,
-                                       fullMatrix<double> &coeff,
-                                       int type, int numCoeff = -1)
+static inline void computeCoeffLengthVectors_(const fullMatrix<double> &mat,
+                                              fullMatrix<double> &coeff,
+                                              int type, int numCoeff = -1)
 {
   int sz1 = numCoeff > -1 ? numCoeff : mat.size1();
 
@@ -106,10 +106,10 @@ static void computeCoeffLengthVectors_(const fullMatrix<double> &mat,
   }
 }
 
-static void computeIGE_(const fullVector<double> &det,
-                        const fullMatrix<double> &v,
-                        fullVector<double> &ige,
-                        int type)
+static inline void computeIGE_(const fullVector<double> &det,
+                               const fullMatrix<double> &v,
+                               fullVector<double> &ige,
+                               int type)
 {
   int sz = std::min(det.size(), v.size1());
   ige.resize(sz);
@@ -124,18 +124,21 @@ static void computeIGE_(const fullVector<double> &det,
       for (int i = 0; i < sz; i++) {
         ige(i) = det(i)/v(i, 0)/v(i, 1)/v(i, 2);
       }
+      break;
     case TYPE_TRI:
       for (int i = 0; i < sz; i++) {
         ige(i) = cTri * det(i) * (1/v(i,0)/v(i,1) +
                                   1/v(i,0)/v(i,2) +
                                   1/v(i,1)/v(i,2)) / 3;
       }
+      break;
     case TYPE_PRI:
       for (int i = 0; i < sz; i++) {
         ige(i) = cTri * det(i) * (1/v(i,0)/v(i,1)/v(i,2) +
                                   1/v(i,0)/v(i,3)/v(i,2) +
                                   1/v(i,1)/v(i,3)/v(i,2)) / 3;
       }
+      break;
     case TYPE_TET:
       for (int i = 0; i < sz; i++) {
         ige(i) = cTet * det(i) * (1/v(i,0)/v(i,5)/v(i,1) +
@@ -149,8 +152,9 @@ static void computeIGE_(const fullVector<double> &det,
                                   1/v(i,2)/v(i,3)/v(i,0) +
                                   1/v(i,2)/v(i,3)/v(i,1) +
                                   1/v(i,2)/v(i,3)/v(i,4) +
-                                  1/v(i,2)/v(i,3)/v(i,5)) / 12;
+                                  1/v(i,2)/v(i,3)/v(i,5))/ 12;
       }
+      break;
     case TYPE_PYR:
       for (int i = 0; i < sz; i++) {
         ige(i) = cPyr * det(i) * (1/v(i,0)/v(i,1)/v(i,2) +
@@ -162,7 +166,56 @@ static void computeIGE_(const fullVector<double> &det,
                                   1/v(i,4)/v(i,5)/v(i,2) +
                                   1/v(i,4)/v(i,5)/v(i,3)  ) / 8;
       }
+      break;
   }
+//  for (int i = 0; i < sz; i++) {
+//    double sJ;
+//    switch (type) {
+//      case TYPE_QUA:
+//        ige(i) = det(i) / v(i, 0) / v(i, 1);
+//        break;
+//      case TYPE_HEX:
+//        ige(i) = det(i) / v(i, 0) / v(i, 1) / v(i, 2);
+//        break;
+//      case TYPE_TRI:
+//        ige(i) = cTri * det(i) * (1 / v(i, 0) / v(i, 1) +
+//                                  1 / v(i, 0) / v(i, 2) +
+//                                  1 / v(i, 1) / v(i, 2)) / 3;
+//        break;
+//      case TYPE_TET:
+//        ige(i) = cTet * det(i) * (1 / v(i, 0) / v(i, 5) / v(i, 1) +
+//                                  1 / v(i, 0) / v(i, 5) / v(i, 2) +
+//                                  1 / v(i, 0) / v(i, 5) / v(i, 3) +
+//                                  1 / v(i, 0) / v(i, 5) / v(i, 4) +
+//                                  1 / v(i, 1) / v(i, 4) / v(i, 0) +
+//                                  1 / v(i, 1) / v(i, 4) / v(i, 2) +
+//                                  1 / v(i, 1) / v(i, 4) / v(i, 3) +
+//                                  1 / v(i, 1) / v(i, 4) / v(i, 5) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 0) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 1) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 4) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 5)) / 12;
+//        break;
+//      case TYPE_PRI:
+//        ige(i) = cTri * det(i) * (1 / v(i, 0) / v(i, 1) / v(i, 2) +
+//                                  1 / v(i, 0) / v(i, 3) / v(i, 2) +
+//                                  1 / v(i, 1) / v(i, 3) / v(i, 2)) / 3;
+//        break;
+//      case TYPE_PYR:
+//        ige(i) = cPyr * det(i) * (1 / v(i, 0) / v(i, 1) / v(i, 2) +
+//                                  1 / v(i, 0) / v(i, 1) / v(i, 3) +
+//                                  1 / v(i, 0) / v(i, 1) / v(i, 4) +
+//                                  1 / v(i, 0) / v(i, 1) / v(i, 5) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 4) +
+//                                  1 / v(i, 2) / v(i, 3) / v(i, 5) +
+//                                  1 / v(i, 4) / v(i, 5) / v(i, 2) +
+//                                  1 / v(i, 4) / v(i, 5) / v(i, 3)) / 8;
+//        break;
+//      default:
+//        Msg::Error("Unkown type for IGE computation");
+//        return;
+//    }
+//  }
 }
 
 namespace jacobianBasedQuality {
@@ -727,7 +780,7 @@ double _CoeffDataIGE::_computeLowerBound() const
   }
 
   fullMatrix<double> v;
-  _getCoeffLengthVectors(v, false);
+  computeCoeffLengthVectors_(_coeffsJacMat, v, _type);
 
   fullVector<double> prox[6];
   for (int i = 0; i < v.size2(); ++i) {
diff --git a/Mesh/qualityMeasuresJacobian.h b/Mesh/qualityMeasuresJacobian.h
index 5466765b0b1bb0a2bad7ac0e84f553ab2c913501..6c3b62992a1df10b80eed5c812d02207a1c11103 100644
--- a/Mesh/qualityMeasuresJacobian.h
+++ b/Mesh/qualityMeasuresJacobian.h
@@ -32,7 +32,7 @@ class _CoeffData
 protected:
   double _minL, _maxL; //Extremum of Jac at corners
   double _minB, _maxB; //Extremum of bezier coefficients
-  int _depth;
+  const int _depth;
 
 public:
   _CoeffData(int depth) : _minL(0), _maxL(0), _minB(0), _maxB(0),
@@ -78,7 +78,7 @@ private:
   const fullVector<double> _coeffsJacDet;
   const fullMatrix<double> _coeffsJacMat;
   const bezierBasis *_bfsDet, *_bfsMat;
-  int _type;
+  const int _type;
 
 public:
   _CoeffDataIGE(fullVector<double> &det,