diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 792673e2f22d6eb98de0863f69255ddbe384cc93..b848eb3eed548acfdd7ce15d73f3e13a188915b5 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -805,14 +805,15 @@ void GFace::XYZtoUV(double X, double Y, double Z, double &U, double &V,
 {
   const double Precision = onSurface ? 1.e-8 : 1.e-3;
   const int MaxIter = onSurface ? 25 : 10;
-  const int NumInitGuess = 11;
+  const int NumInitGuess = 9;
 
   double Unew = 0., Vnew = 0., err, err2;
   int iter;
   double mat[3][3], jac[3][3];
   double umin, umax, vmin, vmax;
-  double initu[NumInitGuess] = {0.5, 0.6, 0.4, 0.7, 0.3, 0.8, 0.2, 0.9, 0.1, 1., 0.};
-  double initv[NumInitGuess] = {0.5, 0.6, 0.4, 0.7, 0.3, 0.8, 0.2, 0.9, 0.1, 1., 0.};
+  // don't use 0.9, 0.1 it fails with ruled surfaces
+  double initu[NumInitGuess] = {0.5, 0.6, 0.4, 0.7, 0.3, 0.8, 0.2, 1., 0.};
+  double initv[NumInitGuess] = {0.5, 0.6, 0.4, 0.7, 0.3, 0.8, 0.2, 1., 0.};
 
   Range<double> ru = parBounds(0);
   Range<double> rv = parBounds(1);
@@ -821,10 +822,10 @@ void GFace::XYZtoUV(double X, double Y, double Z, double &U, double &V,
   vmin = rv.low();
   vmax = rv.high();
 
-  const double tol = Precision*(SQU(umax-umin)+SQU(vmax-vmin));
+  const double tol = Precision * (SQU(umax - umin) + SQU(vmax-vmin));
   for(int i = 0; i < NumInitGuess; i++) {
-    initu[i] = umin + initu[i]*(umax-umin);
-    initv[i] = vmin + initv[i]*(vmax-vmin);
+    initu[i] = umin + initu[i] * (umax - umin);
+    initv[i] = vmin + initv[i] * (vmax - vmin);
   }
 
   for(int i = 0; i < NumInitGuess; i++){