diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp
index 748a792dd9dd3ce714ae764334b6156d0732e6fa..aaaddead00f606e7f9273bbad0ba8e7c819ab25a 100644
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGFaceDelaunayInsertion.cpp,v 1.17 2008-03-26 09:37:49 remacle Exp $
+// $Id: meshGFaceDelaunayInsertion.cpp,v 1.18 2008-03-26 10:33:37 remacle Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -461,7 +461,7 @@ bool insertVertex(GFace *gf, MVertex *v, double *param , MTri3 *t,
 }
 
 void _printTris(char *name, std::set<MTri3*, compareTri3Ptr> &AllTris,
-                std::vector<double> &Us, std::vector<double> &Vs)
+                std::vector<double> &Us, std::vector<double> &Vs, bool param=true)
 {
   FILE *ff = fopen (name,"w");
   fprintf(ff,"View\"test\"{\n");
@@ -469,16 +469,32 @@ void _printTris(char *name, std::set<MTri3*, compareTri3Ptr> &AllTris,
   while (it != AllTris.end() ){
     MTri3 *worst = *it;
     if (!worst->isDeleted()){
-      fprintf(ff,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {0,0,0};\n",
-              Us [(worst)->tri()->getVertex(0)->getNum()],
-              Vs [(worst)->tri()->getVertex(0)->getNum()],
-              0.0,
-              Us [(worst)->tri()->getVertex(1)->getNum()],
-              Vs [(worst)->tri()->getVertex(1)->getNum()],
-              0.0,
-              Us [(worst)->tri()->getVertex(2)->getNum()],
-              Vs [(worst)->tri()->getVertex(2)->getNum()],
-              0.0);
+      if (param)
+	fprintf(ff,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {0,0,0};\n",
+		Us [(worst)->tri()->getVertex(0)->getNum()],
+		Vs [(worst)->tri()->getVertex(0)->getNum()],
+		0.0,
+		Us [(worst)->tri()->getVertex(1)->getNum()],
+		Vs [(worst)->tri()->getVertex(1)->getNum()],
+		0.0,
+		Us [(worst)->tri()->getVertex(2)->getNum()],
+		Vs [(worst)->tri()->getVertex(2)->getNum()],
+		0.0);
+      else
+	fprintf(ff,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g) {%g,%g,%g};\n",
+		(worst)->tri()->getVertex(0)->x(),
+		(worst)->tri()->getVertex(0)->y(),
+		(worst)->tri()->getVertex(0)->z(),
+		(worst)->tri()->getVertex(1)->x(),
+		(worst)->tri()->getVertex(1)->y(),
+		(worst)->tri()->getVertex(1)->z(),
+		(worst)->tri()->getVertex(2)->x(),
+		(worst)->tri()->getVertex(2)->y(),
+		(worst)->tri()->getVertex(2)->z(),
+		(worst)->getRadius(),
+		(worst)->getRadius(),
+		(worst)->getRadius()
+		);
     }
     ++it;
   }
@@ -699,7 +715,6 @@ void gmshBowyerWatsonFrontal(GFace *gf){
     // we try to find a point that would produce a perfect triangle while
     // connecting the 2 points of the active edge
 
-
     double dir[2] = {center[0]-midpoint[0],center[1]-midpoint[1]};
     double q = sqrt(dir[0]*dir[0]+dir[1]*dir[1]);
     dir[0]/=q;
@@ -707,10 +722,13 @@ void gmshBowyerWatsonFrontal(GFace *gf){
     const double RATIO = sqrt(  dir[0]*dir[0]*metric[0]+
 			      2*dir[1]*dir[0]*metric[1]+
 			        dir[1]*dir[1]*metric[2]);    
+    
+    //    printf("ratio = %12.5E %g %g %g\n",RATIO,metric[0],metric[1],metric[2]); 
 
-    const double p    = 0.5*sqrt(DSQR(P[0]-Q[0])+DSQR(P[1]-Q[1]));//length_metric (P,Q,metric);
+    const double p    = 0.5*length_metric (P,Q,metric) / RATIO;
+    //    const double p    = 0.5*sqrt(DSQR(P[0]-Q[0])+DSQR(P[1]-Q[1]));//length_metric (P,Q,metric);
     //    const double q    = length_metric (center,midpoint,metric);
-    const double rhoM = 0.5 * (vSizes[base->getVertex(ip1)->getNum()] + vSizes[base->getVertex(ip2)->getNum()] ) / sqrt(3) / RATIO;
+    const double rhoM = 0.5 * (vSizes[base->getVertex(ip1)->getNum()] + vSizes[base->getVertex(ip2)->getNum()] ) / sqrt(3) * RATIO;
 
     //    printf("%g vs %g\n",2*p,rhoM);
 
@@ -726,9 +744,11 @@ void gmshBowyerWatsonFrontal(GFace *gf){
 
     //    printf("%g %g -- %g %g -- %g %g\n",midpoint[0],midpoint[1],pa[0],pa[1],newPoint[0],newPoint[1]);
     
-    //    char name[245];
-    //    sprintf(name,"pt%d.pos",ITER++);
-    insertAPoint(gf,it,newPoint,metric,Us,Vs,vSizes,vSizesBGM,AllTris);
+//     char name[245];
+//     sprintf(name,"pt%d.pos",ITER++);
+//     _printTris (name, AllTris, Us,Vs,false);
+     insertAPoint(gf,it,newPoint,metric,Us,Vs,vSizes,vSizesBGM,AllTris);
+    //    if (ITER++ == 5)break;
   } 
   _printTris ("frontal.pos", AllTris, Us,Vs);
   transferDataStructure(gf, AllTris);