diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp
index cd81571d3870883df571e650af6046f26cf596d9..f2a6fab26d6d7be5f6faef2bef556513ced35026 100644
--- a/Geo/GModelIO_Geo.cpp
+++ b/Geo/GModelIO_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO_Geo.cpp,v 1.9 2007-03-11 20:18:58 geuzaine Exp $
+// $Id: GModelIO_Geo.cpp,v 1.10 2007-03-13 09:25:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -279,8 +279,7 @@ class writeGFaceGEO {
 	num.push_back((*it)->tag());
       for(std::list<int>::iterator it = orientations.begin(); it != orientations.end(); it++)
 	ori.push_back((*it) > 0 ? 1 : -1);
-      int NUMLOOP = gf->tag() + 1000000;
-      fprintf(geo, "Line Loop (%d) = ", NUMLOOP);
+      fprintf(geo, "Line Loop (%d) = ", gf->tag());
       for(unsigned int i = 0; i < num.size(); i++){
 	if(i)
 	  fprintf(geo, ", %d", num[i] * ori[i]);
@@ -289,10 +288,10 @@ class writeGFaceGEO {
       }
       fprintf(geo, "};\n");
       if(gf->geomType() == GEntity::Plane){
-	fprintf(geo, "Plane Surface (%d) = {%d};\n", gf->tag(), NUMLOOP);
+	fprintf(geo, "Plane Surface (%d) = {%d};\n", gf->tag(), gf->tag());
       }
       else if(edges.size() == 3 || edges.size() == 4){
-	fprintf(geo, "Ruled Surface (%d) = {%d};\n", gf->tag(), NUMLOOP);
+	fprintf(geo, "Ruled Surface (%d) = {%d};\n", gf->tag(), gf->tag());
       }
       else{
 	Msg(GERROR, "Skipping surface %d in export", gf->tag());
@@ -312,8 +311,7 @@ class writeGRegionGEO {
 
     std::list<GFace*> faces = gr->faces();
     if(faces.size()){
-      int NUMLOOP = gr->tag() + 1000000;
-      fprintf(geo, "Surface Loop (%d) = ", NUMLOOP);
+      fprintf(geo, "Surface Loop (%d) = ", gr->tag());
       for(std::list<GFace*>::iterator it = faces.begin(); it != faces.end(); it++) {
 	if(it != faces.begin())
 	  fprintf(geo, ", %d", (*it)->tag());
@@ -321,7 +319,7 @@ class writeGRegionGEO {
 	  fprintf(geo, "{%d", (*it)->tag());
       }
       fprintf(geo, "};\n");
-      fprintf(geo, "Volume (%d) = {%d};\n", gr->tag(), NUMLOOP);
+      fprintf(geo, "Volume (%d) = {%d};\n", gr->tag(), gr->tag());
     }
   }
 };
diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index c1ea5a461a58fd534117b95010f22ca5b57827c2..4f2fecbcd33685559e859681439d474b26f4854c 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO_Mesh.cpp,v 1.10 2007-03-11 20:18:58 geuzaine Exp $
+// $Id: GModelIO_Mesh.cpp,v 1.11 2007-03-13 09:25:50 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -217,10 +217,10 @@ static int getNumVerticesForElementTypeMSH(int type)
   case MSH_TRI_3  : return 3;
   case MSH_TRI_6  : return 3 + 3;
   case MSH_TRI_9  : return 3 + 6;
-  case MSH_TRI_10  : return 3 + 6 + 1;
-  case MSH_TRI_12  : return 3 + 9;
-  case MSH_TRI_15  : return 3 + 9 + 3;
-  case MSH_TRI_15I : return 3 + 12;
+  case MSH_TRI_10 : return 3 + 6 + 1;
+  case MSH_TRI_12 : return 3 + 9;
+  case MSH_TRI_15 : return 3 + 9 + 3;
+  case MSH_TRI_15I: return 3 + 12;
   case MSH_TRI_21 : return 3 + 12 + 6;
   case MSH_QUA_4  : return 4;
   case MSH_QUA_8  : return 4 + 4;
@@ -259,12 +259,12 @@ static void createElementMSH(GModel *m, int num, int type, int physical,
   case MSH_LIN_6:  elem[0][reg].push_back(new MLineN(v, num, part)); dim = 1; break;
   case MSH_TRI_3:  elem[1][reg].push_back(new MTriangle(v, num, part)); dim = 2; break;
   case MSH_TRI_6:  elem[1][reg].push_back(new MTriangle6(v, num, part)); dim = 2; break;
-  case MSH_TRI_9:  elem[1][reg].push_back(new MTriangleN(v, 3, num, part)); dim = 2; break;  
-  case MSH_TRI_10: elem[1][reg].push_back(new MTriangleN(v, 3, num, part)); dim = 2; break; 
-  case MSH_TRI_12: elem[1][reg].push_back(new MTriangleN(v, 4, num, part)); dim = 2; break; 
-  case MSH_TRI_15: elem[1][reg].push_back(new MTriangleN(v, 4, num, part)); dim = 2; break; 
-  case MSH_TRI_15I:elem[1][reg].push_back(new MTriangleN(v, 5, num, part)); dim = 2; break;  
-  case MSH_TRI_21: elem[1][reg].push_back(new MTriangleN(v, 5, num, part)); dim = 2; break;     
+  case MSH_TRI_9:  elem[1][reg].push_back(new MTriangleN(v, 3, num, part)); dim = 2; break;
+  case MSH_TRI_10: elem[1][reg].push_back(new MTriangleN(v, 3, num, part)); dim = 2; break;
+  case MSH_TRI_12: elem[1][reg].push_back(new MTriangleN(v, 4, num, part)); dim = 2; break;
+  case MSH_TRI_15: elem[1][reg].push_back(new MTriangleN(v, 4, num, part)); dim = 2; break;
+  case MSH_TRI_15I:elem[1][reg].push_back(new MTriangleN(v, 5, num, part)); dim = 2; break;
+  case MSH_TRI_21: elem[1][reg].push_back(new MTriangleN(v, 5, num, part)); dim = 2; break;
   case MSH_QUA_4:  elem[2][reg].push_back(new MQuadrangle(v, num, part)); dim = 2; break;
   case MSH_QUA_8:  elem[2][reg].push_back(new MQuadrangle8(v, num, part)); dim = 2; break;
   case MSH_QUA_9:  elem[2][reg].push_back(new MQuadrangle9(v, num, part)); dim = 2; break;
@@ -1959,7 +1959,7 @@ int GModel::readP3D(const std::string &name)
 	  for(int j = 0; j < Nj[n]; j++){
 	    for(int k = 0; k < Nk[n]; k++){
 	      double d;
-	      if(fscanf(fp, "%lf", &d) != 1){printf("aaa\n"); return 0;}
+	      if(fscanf(fp, "%lf", &d) != 1) return 0;
 	      if(coord == 0){
 		MVertex *v = new MVertex(d, 0., 0., gr);
 		gr->transfinite_vertices[i][j][k] = v;
diff --git a/doc/TODO b/doc/TODO
index fb5dd37255720add77951b6643fe52f716281351..3df88730614c46b15fe3ccedc816bb65737f16ea 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.53 2007-03-11 20:19:06 geuzaine Exp $
+$Id: TODO,v 1.54 2007-03-13 09:25:50 geuzaine Exp $
 
 ********************************************************************
 
@@ -11,6 +11,10 @@ interface duplicate entity removal from opencascade
 
 ********************************************************************
 
+add support for Patran mesh files
+
+********************************************************************
+
 reinterface Triangle for plane surfaces
 
 ********************************************************************