diff --git a/Geo/GModelIO.cpp b/Geo/GModelIO.cpp
index a2211499eb9de1c985fa73d448f186acb818b793..6af3d8f5ed633cc1575bf7f986cad56f6ed41b06 100644
--- a/Geo/GModelIO.cpp
+++ b/Geo/GModelIO.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO.cpp,v 1.19 2006-08-17 18:15:39 geuzaine Exp $
+// $Id: GModelIO.cpp,v 1.20 2006-08-17 19:19:14 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -792,18 +792,21 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region,
 	  return 0;
 	}
       }
-      if(idx.size() == 2){
+      if(idx.size() < 2){
+	Msg(INFO, "Skipping %d-vertex element", (int)idx.size());
+      }
+      else if(idx.size() == 2){
 	elements[0][region].push_back(new MLine(v[idx[0]], v[idx[1]]));
       }
       else if(idx.size() == 3){
 	elements[1][region].push_back
 	  (new MTriangle(v[idx[0]], v[idx[1]], v[idx[2]]));
       }
-      else if(idx.size() == 4 && !strips){
+      else if(!strips && idx.size() == 4){
 	elements[2][region].push_back
 	  (new MQuadrangle(v[idx[0]], v[idx[1]], v[idx[2]], v[idx[3]]));
       }
-      else if(idx.size() > 2 && strips){
+      else if(strips){ // triangle strip
 	for(unsigned int j = 2; j < idx.size(); j++){
 	  if(j % 2)
 	    elements[1][region].push_back
@@ -813,6 +816,12 @@ static int readElementsVRML(FILE *fp, std::map<int, MVertex*> &v, int region,
 	      (new MTriangle(v[idx[j - 2]], v[idx[j - 1]], v[idx[j]]));
 	}
       }
+      else{ // import polygon as triangle fan
+	for(unsigned int j = 2; j < idx.size(); j++){
+	  elements[1][region].push_back
+	    (new MTriangle(v[idx[0]], v[idx[j-1]], v[idx[j]]));
+	}
+      }
       idx.clear();
     }
   }