diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp
index 8e53f7952ee9e98819f1c96bd1fa2c91868c4e06..1dbd9819b8b4f99364333331a48adac9a5b5b15e 100644
--- a/Mesh/Print_Mesh.cpp
+++ b/Mesh/Print_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Mesh.cpp,v 1.70 2006-02-04 03:43:30 geuzaine Exp $
+// $Id: Print_Mesh.cpp,v 1.71 2006-03-09 13:06:52 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -26,6 +26,8 @@
 #include "Mesh.h"
 #include "Create.h"
 #include "Context.h"
+#include <list>
+#include <map>
 
 extern Context_T CTX;
 extern Mesh *THEM;
@@ -554,9 +556,47 @@ static void _msh_print_elements(Mesh *M)
   List_Delete(ListVolumes);
 }
 
+
+static void _get_all_model_points ( std::list<Vertex*> &mp )
+{
+  List_T *curves = Tree2List(THEM->Curves);
+  std::set<Vertex*> points;
+  for(int i = 0; i < List_Nbr(curves); i++){
+    Curve *c;
+    List_Read(curves, i, &c);
+    if (c->Num >=0)
+      {
+	if (points.find(c->beg) == points.end())
+	  {
+	    points.insert(c->beg);
+	    mp.push_back(c->beg); 
+	  }
+	if (points.find(c->end) == points.end())
+	  {
+	    points.insert(c->end);
+	    mp.push_back(c->end); 
+	  }
+      }
+  }
+}
+
+static void _msh_print_all_modelpoints()
+{
+  std::list<Vertex*> mp;
+  _get_all_model_points ( mp );
+  std::list<Vertex*>::iterator it = mp.begin();
+  while (it != mp.end())
+    {
+      Vertex *v = (*it);
+      _msh_print_point(v);
+      it++;
+    }
+}
+
 static void _msh_print_all_curves(void *a, void *b)
 {
-  Curve *c = *(Curve **) a;
+  Curve *c = *(Curve **) a; 
+
   Tree_Action(c->Simplexes, _msh_print_simplex);
   Tree_Action(c->SimplexesBase, _msh_print_simplex);
 }
@@ -598,6 +638,9 @@ static void _msh_print_all_elements(Mesh *M)
   MSH_PHYSICAL_ORI = 1;
   MSH_LIN_NUM = MSH_SUR_NUM = MSH_VOL_NUM = 0;
 
+
+  _msh_print_all_modelpoints();
+
   if(CTX.mesh.oldxtrude) {
     Tree_Action(M->Volumes, _msh_print_all_simpsurf);
     Tree_Action(M->Volumes, _msh_print_all_linsurf);