diff --git a/Geo/MFace.cpp b/Geo/MFace.cpp
index 99b1b39640a5a11b9ef18590e81714768873956a..146c4091d47f8412b74bd750d8eba1a941911269 100644
--- a/Geo/MFace.cpp
+++ b/Geo/MFace.cpp
@@ -10,10 +10,12 @@
 #include "Numeric.h"
 #include "Context.h"
 
+bool compare (MVertex* v0, MVertex* v1) {return v0->getNum() < v1->getNum();}
+
 void sortVertices(std::vector<MVertex*> v, std::vector<char> &si)
 {
   std::vector<MVertex*> sorted = v;
-  std::sort(sorted.begin(), sorted.end());
+  std::sort(sorted.begin(), sorted.end(), compare);
   for(unsigned int i = 0; i < sorted.size(); i++)
     si.push_back(std::distance(v.begin(), std::find(v.begin(), v.end(), sorted[i])));
 }
diff --git a/Geo/MFace.h b/Geo/MFace.h
index 6ad37f7cba3e9a6f402aaead37e8a5b758b17f68..c2774c819a5c9b6365b33ddeb006c4422712e9c3 100644
--- a/Geo/MFace.h
+++ b/Geo/MFace.h
@@ -134,8 +134,8 @@ struct Less_Face : public std::binary_function<MFace, MFace, bool> {
     if (f1.getNumVertices() != f2.getNumVertices())
       return f1.getNumVertices() <  f2.getNumVertices();
     for(int i = 0; i < f1.getNumVertices(); i++) {
-      if(f1.getSortedVertex(i) < f2.getSortedVertex(i)) return true;
-      if(f1.getSortedVertex(i) > f2.getSortedVertex(i)) return false;
+      if(f1.getSortedVertex(i)->getNum() < f2.getSortedVertex(i)->getNum()) return true;
+      if(f1.getSortedVertex(i)->getNum() > f2.getSortedVertex(i)->getNum()) return false;
     }
     return false;
   }