diff --git a/Geo/GRbf.cpp b/Geo/GRbf.cpp
index cba31a1e63ef217e0523499b83bc8d57e2dcf26d..4b60a3297ae2250b39281ba94be4553a48543ce6 100644
--- a/Geo/GRbf.cpp
+++ b/Geo/GRbf.cpp
@@ -237,6 +237,8 @@ fullMatrix<double> GRbf::generateRbfMat(int p,
   int m = nodes2.size1();
   int n = nodes1.size1();
   fullMatrix<double> rbfMat(m,n);
+
+
   //fullVector<double > epsilon;
   //computeEpsilon(nodes1, epsilon, inUN);
   double eps = epsilonXYZ;
@@ -250,6 +252,31 @@ fullMatrix<double> GRbf::generateRbfMat(int p,
     }
   }
 
+
+
+  // ////////////////////// 
+  // double min_dist = 10;
+  // for (int i = 0; i < m; i++) {
+  //   for (int j = i+1; j < n; j++) {
+  //     double dx = nodes1(i,0)-nodes1(j,0);
+  //     double dy = nodes1(i,1)-nodes1(j,1);
+  //     double dz = nodes1(i,2)-nodes1(j,2);
+  //     double dist_node = sqrt(dx*dx+dy*dy+dz*dz);
+  //     if (dist_node<min_dist) min_dist = dist_node;
+  //   }
+  // }
+  // double eps = 0.5/min_dist;
+  // for (int i = 0; i < m; i++) {
+  //   for (int j = 0; j < n; j++) {
+  //     double dx = nodes2(i,0)-nodes1(j,0);
+  //     double dy = nodes2(i,1)-nodes1(j,1);
+  //     double dz = nodes2(i,2)-nodes1(j,2);
+  //     rbfMat(i,j) = evalRadialFnDer(p,dx,dy,dz,eps);
+  //   }
+  // }
+  // //////////////////////
+
+
   return rbfMat;
 
 }
@@ -502,7 +529,7 @@ void GRbf::RbfLapSurface_local_CPM(bool isLow,
 //NEW METHOD #1 CPM GLOBAL HIGH
 void GRbf::RbfLapSurface_global_CPM_high(const fullMatrix<double> &cntrs,
 					const fullMatrix<double> &normals,
-					fullMatrix<double> &Oper){
+					 fullMatrix<double> &Oper){
   int numNodes = cntrs.size1();
   int nnTot = 3*numNodes;
   Oper.resize(nnTot,nnTot);
@@ -681,12 +708,14 @@ void GRbf::solveHarmonicMap(fullMatrix<double> Oper,
     Oper(iFix,iFix) = 1.0;
     F(iFix,0) = cos(theta);
     F(iFix,1) = sin(theta);
+
   }
   
   Oper.invertInPlace();
   Oper.mult(F,UV);
 
   //ANN UVtree + dist_min
+
  double dist_min = 1.e6;
 #if defined (HAVE_ANN)
   UVnodes = annAllocPts(nbNodes, 3);
@@ -775,9 +804,9 @@ bool GRbf::UVStoXYZ_global(const double  u_eval, const double v_eval,
 
     for (int j = 0; j< 3;j++)
       nodes_eval(0,j) = nodes_eval(0,j) 
-	- Jac(j,0)*(u_vec_eval(0,0) - u_temp(0,0)) 
-	- Jac(j,1)*(u_vec_eval(0,1) - u_temp(0,1)) 
-	- Jac(j,2)*(0.0             - u_temp(0,2));
+	- Jac(j,0)*(-u_vec_eval(0,0) + u_temp(0,0)) 
+	- Jac(j,1)*(-u_vec_eval(0,1) + u_temp(0,1)) 
+	- Jac(j,2)*(-0.0             + u_temp(0,2));
    
     // Find the corresponding u, v, s
     evalRbfDer(0,extendedX,nodes_eval,u_vec,u_temp);
@@ -833,11 +862,11 @@ bool GRbf::UVStoXYZ(const double  u_eval, const double v_eval,
 
     u_vec(i+num_neighbours,0) = UV(index[i]+nbNodes,0);
     u_vec(i+num_neighbours,1) = UV(index[i]+nbNodes,1);
-    u_vec(i+num_neighbours,2) = surfInterp(index[i]+nbNodes,0)*deltaUV;
+    u_vec(i+num_neighbours,2) = surfInterp(index[i]+nbNodes,0);//*deltaUV;
 
     u_vec(i+2*num_neighbours,0) = UV(index[i]+2*nbNodes,0);
     u_vec(i+2*num_neighbours,1) = UV(index[i]+2*nbNodes,1);
-    u_vec(i+2*num_neighbours,2) = surfInterp(index[i]+2*nbNodes,0)*deltaUV;
+    u_vec(i+2*num_neighbours,2) = surfInterp(index[i]+2*nbNodes,0);//*deltaUV;
 
 
     //THE LOCAL XYZ
@@ -861,13 +890,13 @@ bool GRbf::UVStoXYZ(const double  u_eval, const double v_eval,
   u_vec_eval(0,2) = 0.0;
 
   //we will use a local interpolation to find the corresponding XYZ point to (u_eval,v_eval).
-  evalRbfDer(0, u_vec, u_vec_eval,xyz_local, nodes_eval, 1);
+  //evalRbfDer(0, u_vec, u_vec_eval,xyz_local, nodes_eval, 1);
   //printf("nodes eval =%g %g %g \n", nodes_eval(0,0), nodes_eval(0,1), nodes_eval(0,2));
   //exit(1);
 
-  // nodes_eval(0,0) = extendedX(index[0],0); 
-  // nodes_eval(0,1) = extendedX(index[0],1); 
-  // nodes_eval(0,2) = extendedX(index[0],2);
+  nodes_eval(0,0) = extendedX(index[0],0); 
+  nodes_eval(0,1) = extendedX(index[0],1); 
+  nodes_eval(0,2) = extendedX(index[0],2);
 
   u_temp(0,0)  = u_eval;
   u_temp(0,1)  = v_eval;
@@ -902,19 +931,24 @@ bool GRbf::UVStoXYZ(const double  u_eval, const double v_eval,
     
     double normSq =  sqrt(u_temp(0,2)*u_temp(0,2));
     norm_s = fabs(log10(normSq));
-
     incr++;
   }  
   if (norm_s < 5 ){
     printf("Newton not converged for point (uv)=(%g,%g -> norm_s =%g ) XYZ =%g %g %g \n", u_eval, v_eval, norm_s, nodes_eval(0,0), nodes_eval(0,1), nodes_eval(0,2));
     converged = false;
+
+
+    // if Newton diverges, call the routine again with 
+    // num_neighbors = num_neighbors + 5;
+    // UVStoXYZ(const double  u_eval, const double v_eval,
+    //		   double &XX, double &YY, double &ZZ, 
+    //		   SVector3 &dXdu, SVector3& dXdv)
   }
   XX = nodes_eval(0,0);
   YY = nodes_eval(0,1);
   ZZ = nodes_eval(0,2);
   dXdu = SVector3(Jac(0,0), Jac(1,0), Jac(2,0));
   dXdv = SVector3(Jac(0,1), Jac(1,1), Jac(2,1));
- 
   return converged;
 }