diff --git a/dart/models/agard445.geo b/dart/models/agard445.geo
index d26866470a8cb6b02b872b5cb6494022d109d0ff..e79d31e0078b5d7ef0a159f25cf5df53d07f785b 100644
--- a/dart/models/agard445.geo
+++ b/dart/models/agard445.geo
@@ -1,6 +1,5 @@
 /* AGARD 445 wing */
 // Initially generated by unsRgridWingGen.m
-// For gmsh 4, use line 220 instead of line 221 (Bezier <- BSpline)
 
 // Parameters
 // domain and mesh
@@ -344,7 +343,7 @@ MeshAlgorithm Surface{71,72,75,76} = 5;
 /// 3D:
 
 Mesh.Algorithm3D = 2;
-Mesh.OptimizeNetgen = 1;
+Mesh.Optimize = 1;
 Mesh.Smoothing = 10;
 Mesh.SmoothNormals = 1;
 
diff --git a/dart/models/oneraM6.geo b/dart/models/oneraM6.geo
index 25b777bf212557af77618346ac2a17f4690748bd..a631c7974bbec1c898ac38466e76081e100a4823 100644
--- a/dart/models/oneraM6.geo
+++ b/dart/models/oneraM6.geo
@@ -1,6 +1,5 @@
 /* Onera M6 wing */
 // Initially generated by unsRgridWingGen.m
-// For gmsh 4, use line 425 instead of line 426 (Bezier <- BSpline)
 
 // Parameters
 // domain and mesh
@@ -549,7 +548,7 @@ MeshAlgorithm Surface{71,72,75,76} = 5;
 /// 3D:
 
 Mesh.Algorithm3D = 2;
-Mesh.OptimizeNetgen = 1;
+Mesh.Optimize = 1;
 Mesh.Smoothing = 10;
 Mesh.SmoothNormals = 1;
 
diff --git a/dart/models/rae_25.geo b/dart/models/rae_25.geo
index 1deee3cd4c47b1440c640a1be8d462993215b809..71fcf416e86d646a730af51de5ce23f16f8a8fce 100644
--- a/dart/models/rae_25.geo
+++ b/dart/models/rae_25.geo
@@ -381,7 +381,7 @@ Volume(2) = {2};
 MeshAlgorithm Surface{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} = 5;
 // 3D
 Mesh.Algorithm3D = 2;
-Mesh.OptimizeNetgen = 1;
+Mesh.Optimize = 1;
 Mesh.Smoothing = 10;
 Mesh.SmoothNormals = 1;
 
diff --git a/dart/models/rae_3.geo b/dart/models/rae_3.geo
index 2c76facfc85fe7c42ea4173652badb3f87d5b6d7..512b44fb1f3d934cbe98e8cdac121e449a234396 100644
--- a/dart/models/rae_3.geo
+++ b/dart/models/rae_3.geo
@@ -396,7 +396,6 @@ MeshAlgorithm Surface{1,2,3,4,5,6,11,21,31,41,42,43,44,51} = 5;
 /// 3D:
 
 Mesh.Algorithm3D = 2;
-//Mesh.OptimizeNetgen = 1;
 Mesh.Optimize = 1;
 Mesh.Smoothing = 10;
 Mesh.SmoothNormals = 1;
diff --git a/dart/src/wFluid.cpp b/dart/src/wFluid.cpp
index a209f4bb15b8b27bbbd7425d09cd0bc1fdcbf83c..f150924066906b4ce7b7501444429cf87f066654 100644
--- a/dart/src/wFluid.cpp
+++ b/dart/src/wFluid.cpp
@@ -60,9 +60,9 @@ void Fluid::initFun(double mInf, int dim, double alpha, double beta)
     }
     else
     {
-        rho = new F0ElRhoClamp(mInf);
-        mach = new F0ElMachClamp(mInf);
-        cP = new F0ElCpClamp(mInf);
+        rho = new F0ElRhoClamp(mInf, 3.0);
+        mach = new F0ElMachClamp(mInf, 3.0);
+        cP = new F0ElCpClamp(mInf, 3.0);
     }
     phiInf = new F0PsPhiInf(dim, alpha, beta);
 }
diff --git a/dart/src/wNewton.cpp b/dart/src/wNewton.cpp
index 1d53b14ba43af71ade78170de7c4fd284822956f..91ac0a2d6e5a1d24f5f27426a6996bb7915c048f 100644
--- a/dart/src/wNewton.cpp
+++ b/dart/src/wNewton.cpp
@@ -150,19 +150,19 @@ STATUS Newton::run()
         {
         case 0:
         {
-            mCOv = 0.92;
+            mCOv = 0.925;
             muCv = 2.;
             break;
         }
         case 1:
         {
-            mCOv = 0.935;
+            mCOv = 0.95;
             muCv = 1.5;
             break;
         }
         default:
         {
-            mCOv = 0.95;
+            mCOv = 0.975;
             muCv = 1.;
             break;
         }
@@ -309,7 +309,9 @@ void Newton::buildJac(Eigen::SparseMatrix<double, Eigen::RowMajor> &J)
             }
         }
         // Assembly (supersonic)
-        double mach = fluid->mach->eval(*e, phi, 0);
+        double machC = fluid->mach->eval(*e, phi, 0);
+        double machU = fluid->mach->eval(*eU, phi, 0);
+        double mach = (machC < machU) ? machU : machC;
         if (mach > mCOv)
         {
             for (size_t ii = 0; ii < e->nodes.size(); ++ii)
diff --git a/dart/src/wPotentialResidual.cpp b/dart/src/wPotentialResidual.cpp
index c1efe42e65112ed2e8346647ddea80fb7b022936..0a684f19f14c2375262d86cf44cfe53dada0c658 100644
--- a/dart/src/wPotentialResidual.cpp
+++ b/dart/src/wPotentialResidual.cpp
@@ -64,7 +64,9 @@ Eigen::VectorXd PotentialResidual::build(Element const &e, Element const &eU, st
         b += fluid.rho->eval(e, phi, k) * (e.getJinv(k) * cache.getDsf(k)).transpose() * e.computeGradient(phi, k) * gauss.getW(k) * e.getDetJ(k);
 
     // Supersonic contribution
-    double mach = fluid.mach->eval(e, phi, 0);
+    double machC = fluid.mach->eval(e, phi, 0);
+    double machU = fluid.mach->eval(eU, phi, 0);
+    double mach = (machC < machU) ? machU : machC;
     if (mach > mCO)
     {
         double mu = muC * (1 - (mCO * mCO) / (mach * mach)); // switching  function
@@ -110,7 +112,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientFlo
 
     // Supersonic contribution
     Eigen::MatrixXd A2;
-    double mach = fluid.mach->eval(e, phi, 0);
+    double machC = fluid.mach->eval(e, phi, 0);
+    double machU = fluid.mach->eval(eU, phi, 0);
+    double mach = (machC < machU) ? machU : machC;
     if (mach > mCO)
     {
         // switching function and gradient
@@ -133,11 +137,15 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientFlo
             Eigen::MatrixXd const &dSf = e.getJinv(k) * cache.getDsf(k);
             Eigen::VectorXd dPhi = e.computeGradient(phi, k);
 
-            // mu*drhoU*grad_phi*grad_psi
+            // mu * drhoU * grad_phi * grad_psi
             A2 += mu * dRhoU * dSf.transpose() * dPhi * dPhiU.transpose() * dSfU * wdj;
-            // mu*rhoU*grad_phi*grad_psi + dmu*(rhoU-rho)*grad_phi*grad_psi
+            // mu * rhoU * grad_phi * grad_psi
             A1 += mu * rhoU * dSf.transpose() * dSf * wdj;
-            A1 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(e, phi, k) * dSf.transpose() * dPhi * dPhi.transpose() * dSf * wdj;
+            // dmu * (rhoU-rho) * grad_phi * grad_psi OR dmuU * (rhoU-rho) * grad_phi * grad_psi
+            if (machC >= machU)
+                A1 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(e, phi, k) * dSf.transpose() * dPhi * dPhi.transpose() * dSf * wdj;
+            else
+                A2 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(eU, phi, k) * dSf.transpose() * dPhi * dPhiU.transpose() * dSfU * wdj;
         }
     }
     return std::make_tuple(A1, A2);
@@ -181,7 +189,7 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes
             for (int m = 0; m < nDim; ++m)
             {
                 size_t idx = i * nDim + m;
-                A1.col(idx) += w * dRho * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // drho * grad_phi*grad_psi * detj
+                A1.col(idx) += w * dRho * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // drho * grad_phi * grad_psi * detj
                 A1.col(idx) += w * rho * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ;                            // rho * dgrad_phi * grad_psi * detj
                 A1.col(idx) += w * rho * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ;                              // rho * grad_phi * dgrad_psi * detj
                 A1.col(idx) += w * rho * (iJ * dSf).transpose() * dPhi * dDetJ[idx];                                        // rho * grad_phi * grad_psi * ddetj
@@ -190,7 +198,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes
     }
     // Supersonic contribution
     Eigen::MatrixXd A2;
-    double mach = fluid.mach->eval(e, phi, 0);
+    double machC = fluid.mach->eval(e, phi, 0);
+    double machU = fluid.mach->eval(eU, phi, 0);
+    double mach = (machC < machU) ? machU : machC;
     if (mach > mCO)
     {
         // switching function and gradient
@@ -211,7 +221,6 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes
             // Density, Mach and Gradients
             Eigen::VectorXd dPhi = e.computeGradient(phi, k);
             double rho = fluid.rho->eval(e, phi, k);
-            double dM = fluid.mach->evalGrad(e, phi, k);
             Eigen::MatrixXd const &dSf = cache.getDsf(k);
             Eigen::MatrixXd const &iJ = e.getJinv(k);
             // Jacobian gradients
@@ -225,10 +234,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes
                 for (size_t i = 0; i < e.nodes.size(); ++i)
                 {
                     size_t idx = i * nDim + m;
-                    A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ;                                          // mu * rhoU * dgrad_phi * grad_psi * detj
-                    A1.col(idx) += w * mu * rhoU * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ;                                            // mu * rhoU * grad_phi * dgrad_psi * detj
-                    A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * dPhi * dDetJ[idx];                                                      // mu * rhoU * grad_phi * grad_psi * ddetj
-                    A1.col(idx) += w * (-rho + rhoU) * dmu * dM * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // (rhoU-rho) * dmu * grad_phi * grad_psi * detj
+                    A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ; // mu * rhoU * dgrad_phi * grad_psi * detj
+                    A1.col(idx) += w * mu * rhoU * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ;   // mu * rhoU * grad_phi * dgrad_psi * detj
+                    A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * dPhi * dDetJ[idx];             // mu * rhoU * grad_phi * grad_psi * ddetj
                 }
                 for (size_t i = 0; i < eU.nodes.size(); ++i)
                 {
@@ -236,6 +244,21 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes
                     A2.col(idx) += w * mu * dRhoU * dPhiU.transpose() * (-iJU * dJU[idx] * dPhiU) * (iJ * dSf).transpose() * dPhi * detJ; // mu * drhoU * grad_phi * grad_psi * detj
                 }
             }
+            // Gradient of swithcing function, (rhoU-rho) * dmu * grad_phi * grad_psi * detj OR (rhoU-rho) * dmuU * grad_phi * grad_psi * detj
+            if (machC >= machU)
+            {
+                double dM = fluid.mach->evalGrad(e, phi, k);
+                for (int m = 0; m < nDim; ++m)
+                    for (size_t i = 0; i < e.nodes.size(); ++i)
+                        A1.col(i * nDim + m) += w * (-rho + rhoU) * dmu * dM * dPhi.transpose() * (-iJ * dJ[i * nDim + m] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ;
+            }
+            else
+            {
+                double dM = fluid.mach->evalGrad(eU, phi, k);
+                for (int m = 0; m < nDim; ++m)
+                    for (size_t i = 0; i < eU.nodes.size(); ++i)
+                        A2.col(i * nDim + m) += w * (-rho + rhoU) * dmu * dM * dPhiU.transpose() * (-iJU * dJU[i * nDim + m] * dPhiU) * (iJ * dSf).transpose() * dPhi * detJ;
+            }
         }
     }
     return std::make_tuple(A1, A2);
diff --git a/dart/tests/adjoint.py b/dart/tests/adjoint.py
index df03af2e7fec29ae787f34edacad6ee37b71cc28..0834f241870e465993754a7d35a3e07e5efe0ac7 100644
--- a/dart/tests/adjoint.py
+++ b/dart/tests/adjoint.py
@@ -116,15 +116,15 @@ def main():
         tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.0, 1e-3))
         tests.add(CTest('dCl_dMsh', dClX, 36.9, 1e-2))
         tests.add(CTest('dCd_dMsh', dCdX, 0.482, 1e-2))
-        tests.add(CTest('dCl_dAoA (msh)', dClAoA, 6.9, 1e-2))
-        tests.add(CTest('dCd_dAoA (msh)', dCdAoA, 0.0, 1e-3))
+        tests.add(CTest('dCl_dAoA (msh)', dClAoA, adjoint.dClAoa, 1e-2))
+        tests.add(CTest('dCd_dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-3))
     elif M_inf == 0.7 and alpha == 2*np.pi/180:
-        tests.add(CTest('dCl_dAoA', adjoint.dClAoa, 11.8, 1e-2)) # FD 11.835 (step = 1e-5)
-        tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.127, 1e-2)) # 0.12692 (step = 1e-5)
-        tests.add(CTest('dCl_dMsh', dClX, 61.2, 1e-2))
-        tests.add(CTest('dCd_dMsh', dCdX, 0.830, 1e-2))
-        tests.add(CTest('dCl_dAoA (msh)', dClAoA, 11.8, 1e-2))
-        tests.add(CTest('dCd_dAoA (msh)', dCdAoA, 0.127, 1e-2))
+        tests.add(CTest('dCl_dAoA', adjoint.dClAoa, 12.0, 1e-2))
+        tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.142, 1e-2))
+        tests.add(CTest('dCl_dMsh', dClX, 61.8, 1e-2))
+        tests.add(CTest('dCd_dMsh', dCdX, 0.815, 1e-2))
+        tests.add(CTest('dCl_dAoA (msh)', dClAoA, adjoint.dClAoa, 1e-2))
+        tests.add(CTest('dCd_dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-2))
     else:
         raise Exception('Test not defined for this flow')
     tests.run()
diff --git a/dart/tests/lift.py b/dart/tests/lift.py
index e7655142a438dfd60831ac818acf5ebd0c70b287..aeeaea9bdf93be7e4367697baeb63f7ae7a0feec 100644
--- a/dart/tests/lift.py
+++ b/dart/tests/lift.py
@@ -96,7 +96,7 @@ def main():
     elif M_inf == 0.7 and alpha == 2*math.pi/180:
         tests.add(CTest('iteration count', solver.nIt, 12, 3, forceabs=True))
         tests.add(CTest('min(Cp)', min(Cp[:,3]), -1.28, 5e-2))
-        tests.add(CTest('Cl', solver.Cl, 0.388, 5e-2))
+        tests.add(CTest('Cl', solver.Cl, 0.391, 5e-2))
         tests.add(CTest('Cd', solver.Cd, 0.0013, 5e-4, forceabs=True))
         tests.add(CTest('Cm', solver.Cm, 0.0, 1e-2))
     else:
diff --git a/dart/tests/nonlift.py b/dart/tests/nonlift.py
index 2f39482ab0a1f26ea8c1daf17d43dc87d1b9596c..4a70f23a98d06a97888968f3a4fe57525f90de21 100644
--- a/dart/tests/nonlift.py
+++ b/dart/tests/nonlift.py
@@ -24,7 +24,6 @@
 # CAUTION
 # This test is provided to ensure that the solver works properly.
 # Mesh refinement may have to be performed to obtain physical results.
-# The residual might not fully converge if this test is used with gmsh4
 
 import dart.utils as floU
 import dart.default as floD
@@ -48,7 +47,7 @@ def main():
     # mesh the geometry
     print(ccolors.ANSI_BLUE + 'PyMeshing...' + ccolors.ANSI_RESET)
     tms['msh'].start()
-    pars = {'xLgt' : 5, 'yLgt' : 5, 'msF' : 1.01, 'msTe' : 0.01, 'msLe' : 0.01}
+    pars = {'xLgt' : 5, 'yLgt' : 5, 'msF' : 1.0, 'msTe' : 0.0075, 'msLe' : 0.0075}
     msh, gmshWriter = floD.mesh(dim, 'models/n0012.geo', pars, ['field', 'airfoil', 'downstream'])
     tms['msh'].stop()
 
@@ -91,9 +90,9 @@ def main():
     elif M_inf == 0.7:
         tests.add(CTest('min(Cp)', min(Cp[:,3]), -0.63, 5e-2))
     elif M_inf == 0.8:
-        tests.add(CTest('iteration count', solver.nIt, 15, 3, forceabs=True))
+        tests.add(CTest('iteration count', solver.nIt, 13, 3, forceabs=True))
         tests.add(CTest('min(Cp)', min(Cp[:,3]), -0.89, 5e-2))
-        tests.add(CTest('Cd', solver.Cd, 0.0049, 5e-4, forceabs=True))
+        tests.add(CTest('Cd', solver.Cd, 0.0058, 5e-4, forceabs=True))
     else:
         raise Exception('Test not defined for this flow')
     tests.add(CTest('Cl', solver.Cl, 0., 1e-2))
diff --git a/dart/tests/rae_25.py b/dart/tests/rae_25.py
index 95ab324502dc9d1614f0822c89e69e3e4e92001a..0993c48a28f77853719df27290ad51c360920f75 100644
--- a/dart/tests/rae_25.py
+++ b/dart/tests/rae_25.py
@@ -117,16 +117,16 @@ def main():
         raise Exception(ccolors.ANSI_RED + 'Solver failed to converge!' + ccolors.ANSI_RESET)
     tests = CTests()
     tests.add(CTest('iteration count', solver.nIt, 6, 1, forceabs=True))
-    tests.add(CTest('CL', solver.Cl, 0.60, 5e-2)) # 2D, 0.62
-    tests.add(CTest('CD', solver.Cd, 0.0015, 1e-2)) # 2D 0.0009 (3D refined 0.0006)
+    tests.add(CTest('CL', solver.Cl, 0.59, 5e-2))
+    tests.add(CTest('CD', solver.Cd, 0.0017, 1e-2))
     tests.add(CTest('CS', solver.Cs, 0.0000, 1e-3, forceabs=True))
-    tests.add(CTest('CM', solver.Cm, -0.113, 5e-2)) # 2D -0.117
-    tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 12.7, 5e-2)) # 2D 12.7, FD 12.73 (1e-6)
-    tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.055, 1e-2, forceabs=True)) # 2D 0.051, FD 0.0557 (1e-6)
-    tests.add(CTest('dCl_dMsh', dClX, 22.0, 5e-2))
-    tests.add(CTest('dCd_dMsh', dCdX, 1.0, 1e-1))
-    tests.add(CTest('dCl/dAoA (msh)', dClAoA, 12.9, 5e-2)) # 2D 12.9
-    tests.add(CTest('dCd/dAoA (msh)', dCdAoA, 0.055, 1e-2, forceabs=True)) # 2D 0.051
+    tests.add(CTest('CM', solver.Cm, -0.111, 5e-2))
+    tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 12.9, 5e-2))
+    tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.045, 1e-2, forceabs=True))
+    tests.add(CTest('dCl_dMsh', dClX, 22.1, 5e-2))
+    tests.add(CTest('dCd_dMsh', dCdX, 1.1, 1e-1))
+    tests.add(CTest('dCl/dAoA (msh)', dClAoA, adjoint.dClAoa, 5e-2))
+    tests.add(CTest('dCd/dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-2, forceabs=True))
     tests.run()
 
     # eof
diff --git a/dart/tests/rae_3.py b/dart/tests/rae_3.py
index 72097ac0e1d1cd7fae6b3d8b3020db89edbaa5fa..92ed961285372711e3c852c3097c454d3ae49ad3 100644
--- a/dart/tests/rae_3.py
+++ b/dart/tests/rae_3.py
@@ -146,12 +146,12 @@ def main():
     tests.add(CTest('CD', solver.Cd, 0.008, 1e-2))
     tests.add(CTest('CS', solver.Cs, -0.020, 5e-2))
     tests.add(CTest('CM', solver.Cm, -0.080, 5e-2))
-    tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 3.0, 5e-2)) # FD 3.0144 (1e-6)
-    tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.2, 5e-2)) # FD 0.2007 (1e-6)
-    tests.add(CTest('dCl_dMsh', dClX, 2.3, 5e-2))
+    tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 3.0, 5e-2))
+    tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.2, 5e-2))
+    tests.add(CTest('dCl_dMsh', dClX, 2.2, 5e-2))
     tests.add(CTest('dCd_dMsh', dCdX, 0.2, 5e-2))
-    tests.add(CTest('dCl/dAoA (msh)', dClAoA, 3.0, 5e-2))
-    tests.add(CTest('dCd/dAoA (msh)', dCdAoA, 0.2, 5e-2))
+    tests.add(CTest('dCl/dAoA (msh)', dClAoA, adjoint.dClAoa, 5e-2))
+    tests.add(CTest('dCd/dAoA (msh)', dCdAoA, adjoint.dCdAoa, 5e-2))
     tests.run()
 
     # eof
diff --git a/dart/validation/agard.py b/dart/validation/agard.py
index dc18dcb7da37bdbb618c3cf05c12763a1338a6f5..f1085d78f2caf4f9e11770ccb48ecc3e9a9c20b8 100644
--- a/dart/validation/agard.py
+++ b/dart/validation/agard.py
@@ -56,7 +56,7 @@ def main():
     rlems = 0.0028 # root leading edge mesh size
     rtems = 0.0056 # root trailing edge mesh size
     tlems = 0.0018 # tip leading mesh size
-    ttems = 0.0045 # tip trailing mesh size
+    ttems = 0.0036 # tip trailing mesh size
     fms = 1.0 # farfield mesh size
 
     # mesh the wing
@@ -97,8 +97,8 @@ def main():
     # check results
     print(ccolors.ANSI_BLUE + 'PyTesting...' + ccolors.ANSI_RESET)
     tests = CTests()
-    tests.add(CTest('CL', solver.Cl, 0.062, 1e-1))
-    tests.add(CTest('CD', solver.Cd, 0.0006, 1e-1))
+    tests.add(CTest('CL', solver.Cl, 0.061, 1e-1))
+    tests.add(CTest('CD', solver.Cd, 0.0007, 1e-1))
     tests.add(CTest('CS', solver.Cs, 0.0017, 1e-1))
     tests.add(CTest('CM', solver.Cm, -0.064, 1e-1))
     tests.run()
diff --git a/dart/validation/onera.py b/dart/validation/onera.py
index 85f4e671a9b9e8164e463fdefa2fe6e7a69f5d5a..2b13015741a302acbcdfea6f692e38c66b751ef6 100644
--- a/dart/validation/onera.py
+++ b/dart/validation/onera.py
@@ -51,7 +51,7 @@ def main():
     wdt = 3.0 # channel width
     S_ref = 0.7528 # reference area
     c_ref = 0.64 # reference chord (MAC)
-    fms = 0.5 # farfield mesh size
+    fms = 0.6 # farfield mesh size
     rlems = 0.004 # root leading edge mesh size
     rtems = 0.008 # root trailing edge mesh size
     tlems = 0.002 # tip leading mesh size
@@ -97,8 +97,8 @@ def main():
     tests = CTests()
     tests.add(CTest('CL', solver.Cl, 0.29, 1e-1))
     tests.add(CTest('CD', solver.Cd, 0.011, 1e-1))
-    tests.add(CTest('CS', solver.Cs, 0.014, 1e-1))
-    tests.add(CTest('CM', solver.Cm, -0.212, 1e-1))
+    tests.add(CTest('CS', solver.Cs, 0.016, 1e-1))
+    tests.add(CTest('CM', solver.Cm, -0.218, 1e-1))
     tests.run()
 
     # eof
diff --git a/ext/amfe b/ext/amfe
index e6eafbe78604a7a27c7ee21f098f4c1e3704b0dc..fab1af115a6197d8d31f9746d33436fd99ce5851 160000
--- a/ext/amfe
+++ b/ext/amfe
@@ -1 +1 @@
-Subproject commit e6eafbe78604a7a27c7ee21f098f4c1e3704b0dc
+Subproject commit fab1af115a6197d8d31f9746d33436fd99ce5851