diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index 050123290f09a85901f8bb2628ad4915b3be9c60..b9f3e0255aa74e45490a4e05ba39ecd3e5c5ccec 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -344,7 +344,11 @@ static void getFaceVertices(GFace *gf, MElement *incomplete, MElement *ele,
             }
           }
           else{
-            v = new MVertex(X, Y, Z, gf);
+            GPoint gp = gf->closestPoint(SPoint3(X, Y, Z), GUESS);
+            if(gp.succeeded())
+              v = new MVertex(gp.x(), gp.y(), gp.z(), gf);
+            else
+              v = new MVertex(X, Y, Z, gf);
           }
         }
         // should be expensive -> induces a new search each time