diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp
index 72ede22dccb339ebaa86eac4cdb02a83fe575bcb..f1c77ee2462b14131c5f874e2b22934614e166b6 100644
--- a/Mesh/Read_Mesh.cpp
+++ b/Mesh/Read_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Read_Mesh.cpp,v 1.76 2004-05-31 01:54:19 geuzaine Exp $
+// $Id: Read_Mesh.cpp,v 1.77 2004-07-01 15:00:23 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -102,6 +102,28 @@ Volume *addElementaryVolume(Mesh * M, int Num)
   return v;
 }
 
+int getNbrNodes(int Type)
+{
+  switch (Type) {
+  case PNT : return 1;
+  case LGN1: return 2;
+  case LGN2: return 2 + 1;
+  case TRI1: return 3;
+  case TRI2: return 3 + 3;
+  case QUA1: return 4;
+  case QUA2: return 4 + 4 + 1;
+  case TET1: return 4;
+  case TET2: return 4 + 6;
+  case HEX1: return 8;
+  case HEX2: return 8 + 12 + 6 + 1;
+  case PRI1: return 6;
+  case PRI2: return 6 + 9 + 3;
+  case PYR1: return 5;
+  case PYR2: return 5 + 8 + 1;
+  default: return 0;
+  }
+}
+
 void Read_Mesh_MSH(Mesh * M, FILE * fp)
 {
   char String[256];
@@ -221,6 +243,15 @@ void Read_Mesh_MSH(Mesh * M, FILE * fp)
 	  fscanf(fp, "%d %d %d %d %d",
 		 &Num, &Type, &Physical, &Elementary, &Nbr_Nodes);
 	  Partition = Physical;
+	  int Nbr_Nodes_Check = getNbrNodes(Type);
+	  if(!Nbr_Nodes_Check){
+	    Msg(GERROR, "Unknown type for element %d", Num); 
+	    return;
+	  }
+	  if(Nbr_Nodes != Nbr_Nodes_Check){
+	    Msg(GERROR, "Wrong number of nodes for element %d", Num);
+	    return;
+	  }
 	}
 	else{
 	  fscanf(fp, "%d %d %d", &Num, &Type, &NbTags);
@@ -235,22 +266,10 @@ void Read_Mesh_MSH(Mesh * M, FILE * fp)
 	      Partition = Tag;
 	    // ignore any other tags for now
 	  }
-	  switch (Type) {
-	  case PNT : Nbr_Nodes = 1; break;
-	  case LGN1: Nbr_Nodes = 2; break;
-	  case LGN2: Nbr_Nodes = 2 + 1; break;
-	  case TRI1: Nbr_Nodes = 3; break;
-	  case TRI2: Nbr_Nodes = 3 + 3; break;
-	  case QUA1: Nbr_Nodes = 4; break;
-	  case QUA2: Nbr_Nodes = 4 + 4 + 1; break;
-	  case TET1: Nbr_Nodes = 4; break;
-	  case TET2: Nbr_Nodes = 4 + 6; break;
-	  case HEX1: Nbr_Nodes = 8; break;
-	  case HEX2: Nbr_Nodes = 8 + 12 + 6 + 1; break;
-	  case PRI1: Nbr_Nodes = 6; break;
-	  case PRI2: Nbr_Nodes = 6 + 9 + 3; break;
-	  case PYR1: Nbr_Nodes = 5; break;
-	  case PYR2: Nbr_Nodes = 5 + 8 + 1; break;
+	  Nbr_Nodes = getNbrNodes(Type);
+	  if(!Nbr_Nodes){
+	    Msg(GERROR, "Unknown type for element %d", Num); 
+	    return;
 	  }
 	}
 
@@ -436,7 +455,7 @@ void Read_Mesh_MSH(Mesh * M, FILE * fp)
 	  }
           break;
         default:
-          Msg(WARNING, "Unknown type of element in Read_Mesh");
+	  Msg(GERROR, "Unknown type for element %d", Num); 
           break;
         }
       }