diff --git a/Geo/MHexahedron.h b/Geo/MHexahedron.h
index 42d4255956363c90599bcaf4f055d6c7fcf7804f..b128eb268011564b351873d76ec7863eaed826aa 100644
--- a/Geo/MHexahedron.h
+++ b/Geo/MHexahedron.h
@@ -538,6 +538,8 @@ class MHexahedronN : public MHexahedron {
     if(_order == 7 && _vs.size() + 8 == 80)  return MSH_HEX_80;
     if(_order == 8 && _vs.size() + 8 == 92)  return MSH_HEX_92;
     if(_order == 9 && _vs.size() + 8 == 104) return MSH_HEX_104;
+
+    Msg::Error("no tag matches a p%d hexahedron with %d vertices", _order, 8+_vs.size());
     return 0;
   }
   virtual int getNumFacesRep();
diff --git a/Geo/MLine.h b/Geo/MLine.h
index 1cb90314eb26197eb84d8ad77358abf465098a8b..a4b9883bce2188e2cecc076735d34f8115cdfa96 100644
--- a/Geo/MLine.h
+++ b/Geo/MLine.h
@@ -202,6 +202,7 @@ class MLineN : public MLine {
     if(_vs.size() == 7) return MSH_LIN_9;
     if(_vs.size() == 8) return MSH_LIN_10;
     if(_vs.size() == 9) return MSH_LIN_11;
+    Msg::Error("no tag matches a line with %d vertices", 8+_vs.size());
     return 0;
   }
   virtual void getNode(int num, double &u, double &v, double &w) const
diff --git a/Geo/MPyramid.h b/Geo/MPyramid.h
index 2403d674ea74acdef3776761766ad27fac476657..82cd1f1400d2cd7cf640f8648b94c6892082e5f4 100644
--- a/Geo/MPyramid.h
+++ b/Geo/MPyramid.h
@@ -292,22 +292,25 @@ class MPyramidN : public MPyramid {
   }
   virtual int getTypeForMSH() const
   {
+    if(_order == 1 && _vs.size() + 5 == 5)   return MSH_PYR_5;
+    if(_order == 2 && _vs.size() + 5 == 14)  return MSH_PYR_14;
+    if(_order == 3 && _vs.size() + 5 == 30)  return MSH_PYR_30;
+    if(_order == 4 && _vs.size() + 5 == 55)  return MSH_PYR_55;
+    if(_order == 5 && _vs.size() + 5 == 91)  return MSH_PYR_91;
+    if(_order == 6 && _vs.size() + 5 == 140) return MSH_PYR_140;
+    if(_order == 7 && _vs.size() + 5 == 204) return MSH_PYR_204;
+    if(_order == 8 && _vs.size() + 5 == 285) return MSH_PYR_285;
+    if(_order == 9 && _vs.size() + 5 == 385) return MSH_PYR_385;
+
     if(_order == 2 && _vs.size() + 5 == 13) return MSH_PYR_13;
-    if(_order == 2 && _vs.size() + 5 == 14) return MSH_PYR_14;
     if(_order == 3 && _vs.size() + 5 == 21) return MSH_PYR_21;
-    if(_order == 3 && _vs.size() + 5 == 30) return MSH_PYR_30;
     if(_order == 4 && _vs.size() + 5 == 29) return MSH_PYR_29;
-    if(_order == 4 && _vs.size() + 5 == 55) return MSH_PYR_55;
     if(_order == 5 && _vs.size() + 5 == 37) return MSH_PYR_37;
-    if(_order == 5 && _vs.size() + 5 == 91) return MSH_PYR_91;
     if(_order == 6 && _vs.size() + 5 == 45) return MSH_PYR_45;
-    if(_order == 6 && _vs.size() + 5 == 140) return MSH_PYR_140;
-    if(_order == 7 && _vs.size() + 5 == 53)  return MSH_PYR_53;
-    if(_order == 7 && _vs.size() + 5 == 204) return MSH_PYR_204;
-    if(_order == 8 && _vs.size() + 5 == 61)  return MSH_PYR_61;
-    if(_order == 8 && _vs.size() + 5 == 285) return MSH_PYR_285;
-    if(_order == 9 && _vs.size() + 5 == 69)  return MSH_PYR_69;
-    if(_order == 9 && _vs.size() + 5 == 385) return MSH_PYR_385;
+    if(_order == 7 && _vs.size() + 5 == 53) return MSH_PYR_53;
+    if(_order == 8 && _vs.size() + 5 == 61) return MSH_PYR_61;
+    if(_order == 9 && _vs.size() + 5 == 69) return MSH_PYR_69;
+    Msg::Error("no tag matches a p%d pyramid with %d vertices", _order, 5+_vs.size());
     return 0;
   }
   virtual void reverse()
diff --git a/Geo/MQuadrangle.h b/Geo/MQuadrangle.h
index 14e3bf691e6e20196ff77ee97c4e513d0f4a0479..18e1b6588644a42e2a8b463ae0ebd5e435589782 100644
--- a/Geo/MQuadrangle.h
+++ b/Geo/MQuadrangle.h
@@ -402,20 +402,27 @@ class MQuadrangleN : public MQuadrangle {
   }
   virtual int getTypeForMSH() const
   {
-    if(_order==1 && _vs.size() + 4 == 4) return MSH_QUA_4;
-    if(_order==2 && _vs.size() + 4 == 8) return MSH_QUA_8;
-    if(_order==2 && _vs.size() + 4 == 9) return MSH_QUA_9;
-    if(_order==3 && _vs.size() + 4 == 12) return MSH_QUA_12;
-    if(_order==3 && _vs.size() + 4 == 16) return MSH_QUA_16;
-    if(_order==4 && _vs.size() + 4 == 16) return MSH_QUA_16I;
-    if(_order==4 && _vs.size() + 4 == 25) return MSH_QUA_25;
-    if(_order==5 && _vs.size() + 4 == 20) return MSH_QUA_20;
-    if(_order==5 && _vs.size() + 4 == 36) return MSH_QUA_36;
-    if(_order==6 && _vs.size() + 4 == 49) return MSH_QUA_49;
-    if(_order==7 && _vs.size() + 4 == 64) return MSH_QUA_64;
-    if(_order==8 && _vs.size() + 4 == 81) return MSH_QUA_81;
-    if(_order==9 && _vs.size() + 4 == 100) return MSH_QUA_100;
+    if(_order== 1 && _vs.size() + 4 == 4)   return MSH_QUA_4;
+    if(_order== 2 && _vs.size() + 4 == 9)   return MSH_QUA_9;
+    if(_order== 3 && _vs.size() + 4 == 16)  return MSH_QUA_16;
+    if(_order== 4 && _vs.size() + 4 == 25)  return MSH_QUA_25;
+    if(_order== 5 && _vs.size() + 4 == 36)  return MSH_QUA_36;
+    if(_order== 6 && _vs.size() + 4 == 49)  return MSH_QUA_49;
+    if(_order== 7 && _vs.size() + 4 == 64)  return MSH_QUA_64;
+    if(_order== 8 && _vs.size() + 4 == 81)  return MSH_QUA_81;
+    if(_order== 9 && _vs.size() + 4 == 100) return MSH_QUA_100;
     if(_order==10 && _vs.size() + 4 == 121) return MSH_QUA_121;
+
+    if(_order== 2 && _vs.size() + 4 == 8)  return MSH_QUA_8;
+    if(_order== 3 && _vs.size() + 4 == 12) return MSH_QUA_12;
+    if(_order== 4 && _vs.size() + 4 == 16) return MSH_QUA_16I;
+    if(_order== 5 && _vs.size() + 4 == 20) return MSH_QUA_20;
+    if(_order== 6 && _vs.size() + 4 == 24) return MSH_QUA_24;
+    if(_order== 7 && _vs.size() + 4 == 28) return MSH_QUA_28;
+    if(_order== 8 && _vs.size() + 4 == 32) return MSH_QUA_32;
+    if(_order== 9 && _vs.size() + 4 == 36) return MSH_QUA_36I;
+    if(_order==10 && _vs.size() + 4 == 40) return MSH_QUA_40;
+    Msg::Error("no tag matches a p%d quadrangle with %d vertices", _order, 4+_vs.size());
     return 0;
   }
   virtual void reverse()
diff --git a/Geo/MTetrahedron.h b/Geo/MTetrahedron.h
index 1d85eb99caa708b2ac1eca5789bac033ea5e4be2..30dedd43161afbc459d75f43dda3be8d1c4559af 100644
--- a/Geo/MTetrahedron.h
+++ b/Geo/MTetrahedron.h
@@ -363,6 +363,7 @@ class MTetrahedronN : public MTetrahedron {
     if(_order == 8 && _vs.size() + 4 == 165) return MSH_TET_165;
     if(_order == 9 && _vs.size() + 4 == 220) return MSH_TET_220;
     if(_order == 10 && _vs.size() + 4 == 286) return MSH_TET_286;
+
     if(_order == 3 && _vs.size() + 4 == 16) return MSH_TET_16;
     if(_order == 4 && _vs.size() + 4 == 22) return MSH_TET_22;
     if(_order == 5 && _vs.size() + 4 == 28) return MSH_TET_28;
@@ -371,6 +372,7 @@ class MTetrahedronN : public MTetrahedron {
     if(_order == 8 && _vs.size() + 4 == 46) return MSH_TET_46;
     if(_order == 9 && _vs.size() + 4 == 52) return MSH_TET_52;
     if(_order == 10 && _vs.size() + 4 == 58) return MSH_TET_58;
+    Msg::Error("no tag matches a p%d tetrahedron with %d vertices", _order, 4+_vs.size());
     return 0;
   }
   virtual void reverse()
diff --git a/Geo/MTriangle.h b/Geo/MTriangle.h
index eaab6370c4cd3b555b3e12b267759711c6cf3c35..7670de8dbbe8a82ac3f972fa12d6bc9ce919fd26 100644
--- a/Geo/MTriangle.h
+++ b/Geo/MTriangle.h
@@ -321,17 +321,24 @@ class MTriangleN : public MTriangle {
   {
     if(_order == 1 && _vs.size() == 0) return MSH_TRI_3;
     if(_order == 2 && _vs.size() == 3) return MSH_TRI_6;
-    if(_order == 3 && _vs.size() == 6) return MSH_TRI_9;
     if(_order == 3 && _vs.size() == 7) return MSH_TRI_10;
-    if(_order == 4 && _vs.size() == 9) return MSH_TRI_12;
     if(_order == 4 && _vs.size() == 12) return MSH_TRI_15;
-    if(_order == 5 && _vs.size() == 12) return MSH_TRI_15I;
     if(_order == 5 && _vs.size() == 18) return MSH_TRI_21;
     if(_order == 6 && _vs.size() == 25) return MSH_TRI_28;
     if(_order == 7 && _vs.size() == 33) return MSH_TRI_36;
     if(_order == 8 && _vs.size() == 42) return MSH_TRI_45;
     if(_order == 9 && _vs.size() == 52) return MSH_TRI_55;
     if(_order ==10 && _vs.size() == 63) return MSH_TRI_66;
+
+    if(_order == 3 && _vs.size() == 6) return MSH_TRI_9;
+    if(_order == 4 && _vs.size() == 9) return MSH_TRI_12;
+    if(_order == 5 && _vs.size() == 12) return MSH_TRI_15I;
+    if(_order == 6 && _vs.size() == 15) return MSH_TRI_18;
+    if(_order == 7 && _vs.size() == 18) return MSH_TRI_21I;
+    if(_order == 8 && _vs.size() == 21) return MSH_TRI_24;
+    if(_order == 9 && _vs.size() == 24) return MSH_TRI_27;
+    if(_order ==10 && _vs.size() == 27) return MSH_TRI_30;
+    Msg::Error("no tag matches a p%d triangle with %d vertices", _order, 3+_vs.size());
     return 0;
   }
   virtual void reverse()