diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index 0eb368dd1af5c98eb5f555a61ada02aa1d175769..09cf319b196834c5129c9d0f9c0e5dcfa3c770c4 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -94,8 +94,8 @@
 #define MSH_TET_20   29
 #define MSH_TET_35   30
 #define MSH_TET_56   31
-#define MSH_TET_34   32
-#define MSH_TET_52   33
+#define MSH_TET_22   32
+#define MSH_TET_28   33
 #define MSH_POLYG_   34
 #define MSH_POLYH_   35
 #define MSH_QUA_16   36
@@ -133,16 +133,19 @@
 #define MSH_TRI_B    68
 #define MSH_POLYG_B  69
 #define MSH_LIN_C    70
+// TETS COMPLETE (6->10)
 #define MSH_TET_84   71
 #define MSH_TET_120  72
 #define MSH_TET_165  73
 #define MSH_TET_220  74
 #define MSH_TET_286  75
-#define MSH_TET_74   79
-#define MSH_TET_100  80
-#define MSH_TET_130  81
-#define MSH_TET_164  82
-#define MSH_TET_202  83
+// TETS INCOMPLETE (6->10)
+#define MSH_TET_34   79
+#define MSH_TET_40   80
+#define MSH_TET_46   81
+#define MSH_TET_52   82
+#define MSH_TET_58   83
+//
 #define MSH_LIN_1    84
 #define MSH_TRI_1    85
 #define MSH_QUA_1    86
@@ -203,8 +206,9 @@
 #define MSH_LIN_SUB 134
 #define MSH_TRI_SUB 135
 #define MSH_TET_SUB 136
+#define MSH_TET_16  137
 
-#define MSH_NUM_TYPE 136
+#define MSH_NUM_TYPE 137
 
 // Geometric entities
 #define ENT_NONE     0
diff --git a/Geo/GModelIO_CGNS.cpp b/Geo/GModelIO_CGNS.cpp
index 71a677f1949212518df9bb4d5e2fe7e38ffea940..243622768e75a2712f1df731b00931168967d514 100644
--- a/Geo/GModelIO_CGNS.cpp
+++ b/Geo/GModelIO_CGNS.cpp
@@ -186,8 +186,8 @@ static const int msh2cgns[MSH_NUM_TYPE][2] = {
   {-1, MSH_NUM_TYPE+1},  // MSH_TET_20
   {-1, MSH_NUM_TYPE+1},  // MSH_TET_35
   {-1, MSH_NUM_TYPE+1},  // MSH_TET_56
-  {-1, MSH_NUM_TYPE+1},  // MSH_TET_34
-  {-1, MSH_NUM_TYPE+1}   // MSH_TET_52
+  {-1, MSH_NUM_TYPE+1},  // MSH_TET_22
+  {-1, MSH_NUM_TYPE+1}   // MSH_TET_28
 };
 
 //--This functor allows for sorting of the element types according to the
diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index b8b2c78b793a28e4aa8742777fb799b839eeb2ca..88ef313a568b584dbfb162e7d180335d887f7a40 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1232,20 +1232,21 @@ int MElement::getInfoMSH(const int typeMSH, const char **const name)
   case MSH_TET_4   : if(name) *name = "Tetrahedron 4";    return 4;
   case MSH_TET_10  : if(name) *name = "Tetrahedron 10";   return 4 + 6;
   case MSH_TET_20  : if(name) *name = "Tetrahedron 20";   return 4 + 12 + 4;
-  case MSH_TET_34  : if(name) *name = "Tetrahedron 34";   return 4 + 18 + 12 + 0;
   case MSH_TET_35  : if(name) *name = "Tetrahedron 35";   return 4 + 18 + 12 + 1;
-  case MSH_TET_52  : if(name) *name = "Tetrahedron 52";   return 4 + 24 + 24 + 0;
   case MSH_TET_56  : if(name) *name = "Tetrahedron 56";   return 4 + 24 + 24 + 4;
   case MSH_TET_84  : if(name) *name = "Tetrahedron 84";   return (7*8*9)/6;
   case MSH_TET_120 : if(name) *name = "Tetrahedron 120";  return (8*9*10)/6;
   case MSH_TET_165 : if(name) *name = "Tetrahedron 165";  return (9*10*11)/6;
   case MSH_TET_220 : if(name) *name = "Tetrahedron 220";  return (10*11*12)/6;
   case MSH_TET_286 : if(name) *name = "Tetrahedron 286";  return (11*12*13)/6;
-  case MSH_TET_74  : if(name) *name = "Tetrahedron 74";   return 74;
-  case MSH_TET_100 : if(name) *name = "Tetrahedron 100";  return 100;
-  case MSH_TET_130 : if(name) *name = "Tetrahedron 130";  return 130;
-  case MSH_TET_164 : if(name) *name = "Tetrahedron 164";  return 164;
-  case MSH_TET_202 : if(name) *name = "Tetrahedron 202";  return 202;
+  case MSH_TET_16  : if(name) *name = "Tetrahedron 16";   return 4 + 6*2;
+  case MSH_TET_22  : if(name) *name = "Tetrahedron 22";   return 4 + 6*3;
+  case MSH_TET_28  : if(name) *name = "Tetrahedron 28";   return 4 + 6*4;
+  case MSH_TET_34  : if(name) *name = "Tetrahedron 34";   return 4 + 6*5;
+  case MSH_TET_40  : if(name) *name = "Tetrahedron 40";   return 4 + 6*6;
+  case MSH_TET_46  : if(name) *name = "Tetrahedron 46";   return 4 + 6*7;
+  case MSH_TET_52  : if(name) *name = "Tetrahedron 52";   return 4 + 6*8;
+  case MSH_TET_58  : if(name) *name = "Tetrahedron 58";   return 4 + 6*9;
   case MSH_HEX_1   : if(name) *name = "Hexahedron 1";     return 1;
   case MSH_HEX_8   : if(name) *name = "Hexahedron 8";     return 8;
   case MSH_HEX_20  : if(name) *name = "Hexahedron 20";    return 8 + 12;
@@ -1445,15 +1446,22 @@ MElement *MElementFactory::create(int type, std::vector<MVertex*> &v,
   case MSH_PRI_15:  return new MPrism15(v, num, part);
   case MSH_PRI_18:  return new MPrism18(v, num, part);
   case MSH_TET_20:  return new MTetrahedronN(v, 3, num, part);
-  case MSH_TET_34:  return new MTetrahedronN(v, 3, num, part);
   case MSH_TET_35:  return new MTetrahedronN(v, 4, num, part);
-  case MSH_TET_52:  return new MTetrahedronN(v, 5, num, part);
+  case MSH_TET_28:  return new MTetrahedronN(v, 5, num, part);
   case MSH_TET_56:  return new MTetrahedronN(v, 5, num, part);
   case MSH_TET_84:  return new MTetrahedronN(v, 6, num, part);
   case MSH_TET_120: return new MTetrahedronN(v, 7, num, part);
   case MSH_TET_165: return new MTetrahedronN(v, 8, num, part);
   case MSH_TET_220: return new MTetrahedronN(v, 9, num, part);
   case MSH_TET_286: return new MTetrahedronN(v, 10, num, part);
+  case MSH_TET_16:  return new MTetrahedronN(v, 3, num, part);
+  case MSH_TET_22:  return new MTetrahedronN(v, 4, num, part);
+  case MSH_TET_28:  return new MTetrahedronN(v, 5, num, part);
+  case MSH_TET_34:  return new MTetrahedronN(v, 6, num, part);
+  case MSH_TET_40:  return new MTetrahedronN(v, 7, num, part);
+  case MSH_TET_46:  return new MTetrahedronN(v, 8, num, part);
+  case MSH_TET_52:  return new MTetrahedronN(v, 9, num, part);
+  case MSH_TET_58:  return new MTetrahedronN(v, 10, num, part);
   case MSH_POLYH_:  return new MPolyhedron(v, num, part, owner, parent);
   case MSH_HEX_32:  return new MHexahedronN(v, 3, num, part);
   case MSH_HEX_64:  return new MHexahedronN(v, 3, num, part);
diff --git a/Geo/MHexahedron.h b/Geo/MHexahedron.h
index e532e1fcaf2e65c38683b475cb1ddccd098dc91f..42d4255956363c90599bcaf4f055d6c7fcf7804f 100644
--- a/Geo/MHexahedron.h
+++ b/Geo/MHexahedron.h
@@ -531,7 +531,7 @@ class MHexahedronN : public MHexahedron {
     if(_order == 9 && _vs.size() + 8 == 1000) return MSH_HEX_1000;
 
     if(_order == 2 && _vs.size() + 8 == 20)  return MSH_HEX_20;
-    if(_order == 3 && _vs.size() + 8 == 56 ) return MSH_HEX_32;
+    if(_order == 3 && _vs.size() + 8 == 32)  return MSH_HEX_32;
     if(_order == 4 && _vs.size() + 8 == 44)  return MSH_HEX_44;
     if(_order == 5 && _vs.size() + 8 == 56)  return MSH_HEX_56;
     if(_order == 6 && _vs.size() + 8 == 68)  return MSH_HEX_68;
diff --git a/Geo/MTetrahedron.cpp b/Geo/MTetrahedron.cpp
index af351888636a1c2b6c943304b476c8e647994dc5..2fd31d1f447b1ccd500ff782316494301ec1e9e7 100644
--- a/Geo/MTetrahedron.cpp
+++ b/Geo/MTetrahedron.cpp
@@ -111,14 +111,14 @@ const nodalBasis* MTetrahedron::getFunctionSpace(int o) const
     case 0: return BasisFactory::getNodalBasis(MSH_TET_1);
     case 1: return BasisFactory::getNodalBasis(MSH_TET_4);
     case 2: return BasisFactory::getNodalBasis(MSH_TET_10);
-    case 3: return BasisFactory::getNodalBasis(MSH_TET_20);
-    case 4: return BasisFactory::getNodalBasis(MSH_TET_34);
-    case 5: return BasisFactory::getNodalBasis(MSH_TET_52);
-    case 6: return BasisFactory::getNodalBasis(MSH_TET_74);
-    case 7: return BasisFactory::getNodalBasis(MSH_TET_100);
-    case 8: return BasisFactory::getNodalBasis(MSH_TET_130);
-    case 9: return BasisFactory::getNodalBasis(MSH_TET_164);
-    case 10: return BasisFactory::getNodalBasis(MSH_TET_202);
+    case 3: return BasisFactory::getNodalBasis(MSH_TET_16); // not just nv==0
+    case 4: return BasisFactory::getNodalBasis(MSH_TET_22);
+    case 5: return BasisFactory::getNodalBasis(MSH_TET_28);
+    case 6: return BasisFactory::getNodalBasis(MSH_TET_34);
+    case 7: return BasisFactory::getNodalBasis(MSH_TET_40);
+    case 8: return BasisFactory::getNodalBasis(MSH_TET_46);
+    case 9: return BasisFactory::getNodalBasis(MSH_TET_52);
+    case 10: return BasisFactory::getNodalBasis(MSH_TET_58);
     default: Msg::Error("Order %d tetrahedron function space not implemented", order);
     }
   }
@@ -151,9 +151,14 @@ const JacobianBasis* MTetrahedron::getJacobianFuncSpace(int o) const
     switch (order) {
     case 1: return BasisFactory::getJacobianBasis(MSH_TET_4);
     case 2: return BasisFactory::getJacobianBasis(MSH_TET_10);
-    case 3: return BasisFactory::getJacobianBasis(MSH_TET_20);
-    case 4: return BasisFactory::getJacobianBasis(MSH_TET_34);
-    case 5: return BasisFactory::getJacobianBasis(MSH_TET_52);
+    case 3: return BasisFactory::getJacobianBasis(MSH_TET_16); // not just nv==0
+    case 4: return BasisFactory::getJacobianBasis(MSH_TET_22);
+    case 5: return BasisFactory::getJacobianBasis(MSH_TET_28);
+    case 6: return BasisFactory::getJacobianBasis(MSH_TET_34);
+    case 7: return BasisFactory::getJacobianBasis(MSH_TET_40);
+    case 8: return BasisFactory::getJacobianBasis(MSH_TET_46);
+    case 9: return BasisFactory::getJacobianBasis(MSH_TET_52);
+    case 10: return BasisFactory::getJacobianBasis(MSH_TET_58);
     default: Msg::Error("Order %d tetrahedron function space not implemented", order);
     }
   }
diff --git a/Geo/MTetrahedron.h b/Geo/MTetrahedron.h
index 920a88bc2fcb1851e908e3a3417a3a3b9fc70a6f..1d85eb99caa708b2ac1eca5789bac033ea5e4be2 100644
--- a/Geo/MTetrahedron.h
+++ b/Geo/MTetrahedron.h
@@ -356,15 +356,21 @@ class MTetrahedronN : public MTetrahedron {
     if(_order == 1 && _vs.size() + 4 == 4)  return MSH_TET_4;
     if(_order == 2 && _vs.size() + 4 == 10) return MSH_TET_10;
     if(_order == 3 && _vs.size() + 4 == 20) return MSH_TET_20;
-    if(_order == 4 && _vs.size() + 4 == 34) return MSH_TET_34;
     if(_order == 4 && _vs.size() + 4 == 35) return MSH_TET_35;
     if(_order == 5 && _vs.size() + 4 == 56) return MSH_TET_56;
-    if(_order == 5 && _vs.size() + 4 == 52) return MSH_TET_52;
     if(_order == 6 && _vs.size() + 4 == 84) return MSH_TET_84;
     if(_order == 7 && _vs.size() + 4 == 120) return MSH_TET_120;
     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;
+    if(_order == 6 && _vs.size() + 4 == 34) return MSH_TET_34;
+    if(_order == 7 && _vs.size() + 4 == 40) return MSH_TET_40;
+    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;
     return 0;
   }
   virtual void reverse()
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index aeac6a0b00cebcd1b0d15c8991bacc09461f32ad..07fb5566ea3dd8c4a61e2d6ce83495c0a79ebdba 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -594,7 +594,7 @@ static void getRegionVertices(GRegion *gr, MElement *incomplete, MElement *ele,
     case 0: return;
     case 1: return;
     case 2:
-      BasisFactory::getNodalBasis(MSH_TET_20)->points.print();
+      //BasisFactory::getNodalBasis(MSH_TET_20)->points.print();
       points = BasisFactory::getNodalBasis(MSH_TET_20)->points; break;
     case 3: points = BasisFactory::getNodalBasis(MSH_TET_35)->points; break;
     case 4: points = BasisFactory::getNodalBasis(MSH_TET_56)->points; break;
diff --git a/Numeric/ElementType.cpp b/Numeric/ElementType.cpp
index 588995930f0b191a0390411801268bdd780365d1..f222cb6311c5d47941e76304132006139f276505 100644
--- a/Numeric/ElementType.cpp
+++ b/Numeric/ElementType.cpp
@@ -44,13 +44,14 @@ int ElementType::ParentTypeFromTag(int tag)
       return TYPE_QUA;
     case(MSH_TET_4):    case(MSH_TET_10):
     case(MSH_TET_20):   case(MSH_TET_35):
-    case(MSH_TET_56):   case(MSH_TET_34):
-    case(MSH_TET_52):   case(MSH_TET_84):
+    case(MSH_TET_56):   case(MSH_TET_22):
+    case(MSH_TET_28):   case(MSH_TET_84):
     case(MSH_TET_120):  case(MSH_TET_165):
     case(MSH_TET_220):  case(MSH_TET_286):
-    case(MSH_TET_74):   case(MSH_TET_100):
-    case(MSH_TET_130):  case(MSH_TET_164):
-    case(MSH_TET_202):  case(MSH_TET_1):
+    case(MSH_TET_34):   case(MSH_TET_40):
+    case(MSH_TET_46):   case(MSH_TET_52):
+    case(MSH_TET_58):   case(MSH_TET_1):
+    case(MSH_TET_16):
       return TYPE_TET;
     case(MSH_PYR_5):    case(MSH_PYR_14):
     case(MSH_PYR_13):   case(MSH_PYR_30):
@@ -59,8 +60,8 @@ int ElementType::ParentTypeFromTag(int tag)
     case(MSH_PYR_285):  case(MSH_PYR_385):
     case(MSH_PYR_21):   case(MSH_PYR_29):
     case(MSH_PYR_37):   case(MSH_PYR_45):
-    case(MSH_PYR_53):  case(MSH_PYR_61):
-    case(MSH_PYR_69):  case(MSH_PYR_1):
+    case(MSH_PYR_53):   case(MSH_PYR_61):
+    case(MSH_PYR_69):   case(MSH_PYR_1):
       return TYPE_PYR;
     case(MSH_PRI_6):    case(MSH_PRI_18):
     case(MSH_PRI_15):   case(MSH_PRI_1):
@@ -69,8 +70,8 @@ int ElementType::ParentTypeFromTag(int tag)
     case(MSH_PRI_288):  case(MSH_PRI_405):
     case(MSH_PRI_550):  case(MSH_PRI_24):
     case(MSH_PRI_33):   case(MSH_PRI_42):
-    case(MSH_PRI_51):  case(MSH_PRI_60):
-    case(MSH_PRI_69):  case(MSH_PRI_78):
+    case(MSH_PRI_51):   case(MSH_PRI_60):
+    case(MSH_PRI_69):   case(MSH_PRI_78):
       return TYPE_PRI;
     case(MSH_HEX_8):    case(MSH_HEX_27):
     case(MSH_HEX_20):   case(MSH_HEX_1):
@@ -79,8 +80,8 @@ int ElementType::ParentTypeFromTag(int tag)
     case(MSH_HEX_512):  case(MSH_HEX_729):
     case(MSH_HEX_1000): case(MSH_HEX_32):
     case(MSH_HEX_44):   case(MSH_HEX_56):
-    case(MSH_HEX_68):  case(MSH_HEX_80):
-    case(MSH_HEX_92):  case(MSH_HEX_104):
+    case(MSH_HEX_68):   case(MSH_HEX_80):
+    case(MSH_HEX_92):   case(MSH_HEX_104):
       return TYPE_HEX;
     case(MSH_POLYG_):   case(MSH_POLYG_B):
       return TYPE_POLYG;
@@ -141,13 +142,14 @@ int ElementType::OrderFromTag(int tag)
   case MSH_TET_165 : return 8;
   case MSH_TET_220 : return 9;
   case MSH_TET_286 : return 10;
-  case MSH_TET_34  : return 4;
-  case MSH_TET_52  : return 5;
-  case MSH_TET_74  : return 6;
-  case MSH_TET_100 : return 7;
-  case MSH_TET_130 : return 8;
-  case MSH_TET_164 : return 9;
-  case MSH_TET_202 : return 10;
+  case MSH_TET_16  : return 3;
+  case MSH_TET_22  : return 4;
+  case MSH_TET_28  : return 5;
+  case MSH_TET_34  : return 6;
+  case MSH_TET_40  : return 7;
+  case MSH_TET_46  : return 8;
+  case MSH_TET_52  : return 9;
+  case MSH_TET_58  : return 10;
   case MSH_QUA_1   : return 0;
   case MSH_QUA_4   : return 1;
   case MSH_QUA_9   : return 2;
@@ -272,14 +274,14 @@ int ElementType::DimensionFromTag(int tag)
 
     case(MSH_TET_4):    case(MSH_TET_10):
     case(MSH_TET_20):   case(MSH_TET_35):
-    case(MSH_TET_56):   case(MSH_TET_34):
-    case(MSH_TET_52):   case(MSH_TET_84):
+    case(MSH_TET_56):   case(MSH_TET_22):
+    case(MSH_TET_28):   case(MSH_TET_84):
     case(MSH_TET_120):  case(MSH_TET_165):
     case(MSH_TET_220):  case(MSH_TET_286):
-    case(MSH_TET_74):   case(MSH_TET_100):
-    case(MSH_TET_130):  case(MSH_TET_164):
-    case(MSH_TET_202):  case(MSH_TET_1):
-    case(MSH_TET_SUB):
+    case(MSH_TET_34):   case(MSH_TET_40):
+    case(MSH_TET_46):   case(MSH_TET_52):
+    case(MSH_TET_58):   case(MSH_TET_1):
+    case(MSH_TET_16):   case(MSH_TET_SUB):
 
     case(MSH_PYR_5):    case(MSH_PYR_14):
     case(MSH_PYR_13):   case(MSH_PYR_30):
@@ -288,8 +290,8 @@ int ElementType::DimensionFromTag(int tag)
     case(MSH_PYR_285):  case(MSH_PYR_385):
     case(MSH_PYR_21):   case(MSH_PYR_29):
     case(MSH_PYR_37):   case(MSH_PYR_45):
-    case(MSH_PYR_53):  case(MSH_PYR_61):
-    case(MSH_PYR_69):  case(MSH_PYR_1):
+    case(MSH_PYR_53):   case(MSH_PYR_61):
+    case(MSH_PYR_69):   case(MSH_PYR_1):
 
     case(MSH_PRI_6):    case(MSH_PRI_18):
     case(MSH_PRI_15):   case(MSH_PRI_1):
@@ -298,8 +300,8 @@ int ElementType::DimensionFromTag(int tag)
     case(MSH_PRI_288):  case(MSH_PRI_405):
     case(MSH_PRI_550):  case(MSH_PRI_24):
     case(MSH_PRI_33):   case(MSH_PRI_42):
-    case(MSH_PRI_51):  case(MSH_PRI_60):
-    case(MSH_PRI_69):  case(MSH_PRI_78):
+    case(MSH_PRI_51):   case(MSH_PRI_60):
+    case(MSH_PRI_69):   case(MSH_PRI_78):
 
     case(MSH_HEX_8):    case(MSH_HEX_27):
     case(MSH_HEX_20):   case(MSH_HEX_1):
@@ -308,8 +310,8 @@ int ElementType::DimensionFromTag(int tag)
     case(MSH_HEX_512):  case(MSH_HEX_729):
     case(MSH_HEX_1000): case(MSH_HEX_32):
     case(MSH_HEX_44):   case(MSH_HEX_56):
-    case(MSH_HEX_68):  case(MSH_HEX_80):
-    case(MSH_HEX_92):  case(MSH_HEX_104):
+    case(MSH_HEX_68):   case(MSH_HEX_80):
+    case(MSH_HEX_92):   case(MSH_HEX_104):
 
     case(MSH_POLYH_):
       return 3;
@@ -392,25 +394,25 @@ int ElementType::SerendipityFromTag(int tag)
   case MSH_QUA_32  : case MSH_QUA_36I :
   case MSH_QUA_40  :
 
-  case MSH_TET_34  : case MSH_TET_52  :
-  case MSH_TET_74  : case MSH_TET_100 :
-  case MSH_TET_130 : case MSH_TET_164 :
-  case MSH_TET_202 :
+  case MSH_TET_22  : case MSH_TET_28  :
+  case MSH_TET_34  : case MSH_TET_40 :
+  case MSH_TET_46 :  case MSH_TET_52 :
+  case MSH_TET_58 :  case MSH_TET_16 :
 
   case MSH_PRI_15  : case MSH_PRI_24  :
   case MSH_PRI_33  : case MSH_PRI_42 :
-  case MSH_PRI_51 : case MSH_PRI_60 :
-  case MSH_PRI_69 : case MSH_PRI_78 :
+  case MSH_PRI_51 :  case MSH_PRI_60 :
+  case MSH_PRI_69 :  case MSH_PRI_78 :
 
   case MSH_HEX_20  : case MSH_HEX_32  :
   case MSH_HEX_44  : case MSH_HEX_56 :
-  case MSH_HEX_68 : case MSH_HEX_80 :
-  case MSH_HEX_92 : case MSH_HEX_104 :
+  case MSH_HEX_68 :  case MSH_HEX_80 :
+  case MSH_HEX_92 :  case MSH_HEX_104 :
 
   case MSH_PYR_13  : case MSH_PYR_21  :
   case MSH_PYR_29  : case MSH_PYR_37  :
-  case MSH_PYR_45 : case MSH_PYR_53 :
-  case MSH_PYR_61 : case MSH_PYR_69 :
+  case MSH_PYR_45 :  case MSH_PYR_53 :
+  case MSH_PYR_61 :  case MSH_PYR_69 :
 
     return 2; // Only Serendipity
 
@@ -478,14 +480,14 @@ int ElementType::getTag(int parentTag, int order, bool serendip)
     case 0 : return MSH_TET_1;
     case 1 : return MSH_TET_4;
     case 2 : return MSH_TET_10;
-    case 3 : return MSH_TET_20;
-    case 4 : return serendip ? MSH_TET_34 : MSH_TET_35;
-    case 5 : return serendip ? MSH_TET_52 : MSH_TET_56;
-    case 6 : return serendip ? MSH_TET_74 : MSH_TET_84;
-    case 7 : return serendip ? MSH_TET_100: MSH_TET_120;
-    case 8 : return serendip ? MSH_TET_130: MSH_TET_165;
-    case 9 : return serendip ? MSH_TET_164: MSH_TET_220;
-    case 10: return serendip ? MSH_TET_202: MSH_TET_286;
+    case 3 : return serendip ? MSH_TET_20 : MSH_TET_16;
+    case 4 : return serendip ? MSH_TET_22 : MSH_TET_35;
+    case 5 : return serendip ? MSH_TET_28 : MSH_TET_56;
+    case 6 : return serendip ? MSH_TET_34 : MSH_TET_84;
+    case 7 : return serendip ? MSH_TET_40: MSH_TET_120;
+    case 8 : return serendip ? MSH_TET_46: MSH_TET_165;
+    case 9 : return serendip ? MSH_TET_52: MSH_TET_220;
+    case 10: return serendip ? MSH_TET_58: MSH_TET_286;
     default : Msg::Error("terahedron order %i unknown", order); return 0;
     }
     break;