diff --git a/Mesh/directions3D.cpp b/Mesh/directions3D.cpp
index a386b3e84b2a10a3c48af45319637ca08e8ff88b..ffab31c090ff30d34b2c1858e3f9630b6dd68597 100644
--- a/Mesh/directions3D.cpp
+++ b/Mesh/directions3D.cpp
@@ -179,6 +179,7 @@ bool Frame_field::improved_translate(GFace* gf,MVertex* vertex,SVector3& v1,SVec
   SPoint2 point;
   SVector3 s1,s2;
   SVector3 normal;
+  SVector3 basis_u,basis_v;
   Pair<SVector3,SVector3> derivatives;	
 	
   reparamMeshVertexOnFace(vertex,gf,point);
@@ -192,7 +193,12 @@ bool Frame_field::improved_translate(GFace* gf,MVertex* vertex,SVector3& v1,SVec
   s2 = derivatives.second();
   normal = crossprod(s1,s2);
 	
-  v1 = s1*cos(angle) + s2*sin(angle);
+  basis_u = s1;
+  basis_u.normalize();
+  basis_v = crossprod(normal,basis_u);
+  basis_v.normalize();
+		
+  v1 = basis_u*cos(angle) + basis_v*sin(angle);
   v2 = crossprod(v1,normal);
 	
   return 1;