diff --git a/Geo/GModelIO.cpp b/Geo/GModelIO.cpp
index 05a287f202c3e4fe6b0e560d75b8eedb55709218..c45da55b1bf6a2d7ba3c2d452192fb759f845a8f 100644
--- a/Geo/GModelIO.cpp
+++ b/Geo/GModelIO.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO.cpp,v 1.53 2006-09-11 23:11:08 geuzaine Exp $
+// $Id: GModelIO.cpp,v 1.54 2006-09-12 01:24:21 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -906,7 +906,19 @@ static int readElementsVRML(FILE *fp, std::vector<MVertex*> &vertexVector, int r
   std::vector<int> idx;
   if(fscanf(fp, " [ %d", &i) != 1) return 0;
   idx.push_back(i);
-  while(fscanf(fp, " , %d", &i) == 1){
+
+  // check if vertex indices are separated by commas
+  char tmp[256], *format;
+  fpos_t position;
+  fgetpos(fp, &position);
+  fgets(tmp, sizeof(tmp), fp);
+  fsetpos(fp, &position);
+  if(strstr(tmp, ","))
+    format = " , %d";
+  else
+    format = " %d";
+
+  while(fscanf(fp, format, &i) == 1){
     if(i != -1){
       idx.push_back(i);
     }
@@ -972,7 +984,12 @@ int GModel::readVRML(const std::string &name)
     if(!fgets(buffer, sizeof(buffer), fp)) break;
     if(buffer[0] != '#'){ // skip comments
       sscanf(buffer, "%s", str);
-      if(!strcmp(str, "IndexedTriangleStripSet")){
+      if(!strcmp(str, "Coordinate3")){
+	vertexVector.clear();
+	if(!skipUntil(fp, "point")) break;
+	if(!readVerticesVRML(fp, vertexVector, allVertexVector)) break;
+      }
+      else if(!strcmp(str, "IndexedTriangleStripSet")){
 	region++;
 	vertexVector.clear();
 	if(!skipUntil(fp, "vertex")) break;
@@ -980,11 +997,6 @@ int GModel::readVRML(const std::string &name)
 	if(!skipUntil(fp, "coordIndex")) break;
 	if(!readElementsVRML(fp, vertexVector, region, elements, true)) break;
       }
-      else if(!strcmp(str, "Coordinate3")){
-	vertexVector.clear();
-	if(!skipUntil(fp, "point")) break;
-	if(!readVerticesVRML(fp, vertexVector, allVertexVector)) break;
-      }
       else if(!strcmp(str, "IndexedFaceSet") || !strcmp(str, "IndexedLineSet")){
 	region++;
 	if(!skipUntil(fp, "coordIndex")) break;
@@ -993,7 +1005,12 @@ int GModel::readVRML(const std::string &name)
       else if(!strcmp(str, "DEF")){
 	char str1[256], str2[256];
 	if(!sscanf(buffer, "%s %s %s", str1, str2, str)) break;
-	if(!strcmp(str, "IndexedFaceSet") || !strcmp(str, "IndexedLineSet")){
+	if(!strcmp(str, "Coordinate")){
+	  vertexVector.clear();
+	  if(!skipUntil(fp, "point")) break;
+	  if(!readVerticesVRML(fp, vertexVector, allVertexVector)) break;
+	}
+	else if(!strcmp(str, "IndexedFaceSet") || !strcmp(str, "IndexedLineSet")){
 	  region++;
 	  if(!skipUntil(fp, "coordIndex")) break;
 	  if(!readElementsVRML(fp, vertexVector, region, elements)) break;