--- /dev/null
+diff -Naur --exclude=CVS OCCT-6.5.3_SRC_orig/inc/ApproxInt_PrmPrmSvSurfaces.gxx OCCT-6.5.3_SRC_patch/inc/ApproxInt_PrmPrmSvSurfaces.gxx
+--- OCCT-6.5.3_SRC_orig/inc/ApproxInt_PrmPrmSvSurfaces.gxx 2012-04-13 16:38:37.000000000 +0400
++++ OCCT-6.5.3_SRC_patch/inc/ApproxInt_PrmPrmSvSurfaces.gxx 2012-05-18 12:29:02.000000000 +0400
+@@ -24,6 +24,7 @@
+
+ #include <TColStd_Array1OfReal.hxx>
+ #include <math_FunctionSetRoot.hxx>
++#include <Precision.hxx>
+
+ #define Debug(expr) cout<<" expr :"<<expr;
+ #define MySurf1 MyIntersectionOn2S.Function().AuxillarSurface1()
+@@ -173,7 +174,12 @@
+ TgTU = Tg.Dot(TU);
+ TgTV = Tg.Dot(TV);
+ DIS = TUTU * TVTV - TUTV * TUTV;
+-
++ if(fabs(DIS)<Precision::Angular()) {
++ MyIsTangent=Standard_False;
++ MyHasBeenComputed = MyHasBeenComputedbis = Standard_False;
++ return(Standard_False);
++ }
++
+ DeltaU = (TgTU * TVTV - TgTV * TUTV ) / DIS ;
+ DeltaV = (TgTV * TUTU - TgTU * TUTV ) / DIS ;
+
+@@ -189,7 +195,12 @@
+ TUTV = TU.Dot(TV);
+ TgTU = Tg.Dot(TU);
+ TgTV = Tg.Dot(TV);
+- DIS = TUTU * TVTV - TUTV * TUTV;
++ DIS = TUTU * TVTV - TUTV * TUTV;
++ if(fabs(DIS)<Precision::Angular()) {
++ MyIsTangent=Standard_False;
++ MyHasBeenComputed = MyHasBeenComputedbis = Standard_False;
++ return(Standard_False);
++ }
+
+ DeltaU = (TgTU * TVTV - TgTV * TUTV ) / DIS ;
+ DeltaV = (TgTV * TUTU - TgTU * TUTV ) / DIS ;
+diff -Naur --exclude=CVS OCCT-6.5.3_SRC_orig/src/ApproxInt/ApproxInt_PrmPrmSvSurfaces.gxx OCCT-6.5.3_SRC_patch/src/ApproxInt/ApproxInt_PrmPrmSvSurfaces.gxx
+--- OCCT-6.5.3_SRC_orig/src/ApproxInt/ApproxInt_PrmPrmSvSurfaces.gxx 2012-04-13 16:38:37.000000000 +0400
++++ OCCT-6.5.3_SRC_patch/src/ApproxInt/ApproxInt_PrmPrmSvSurfaces.gxx 2012-05-18 12:29:02.000000000 +0400
+@@ -24,6 +24,7 @@
+
+ #include <TColStd_Array1OfReal.hxx>
+ #include <math_FunctionSetRoot.hxx>
++#include <Precision.hxx>
+
+ #define Debug(expr) cout<<" expr :"<<expr;
+ #define MySurf1 MyIntersectionOn2S.Function().AuxillarSurface1()
+@@ -173,7 +174,12 @@
+ TgTU = Tg.Dot(TU);
+ TgTV = Tg.Dot(TV);
+ DIS = TUTU * TVTV - TUTV * TUTV;
+-
++ if(fabs(DIS)<Precision::Angular()) {
++ MyIsTangent=Standard_False;
++ MyHasBeenComputed = MyHasBeenComputedbis = Standard_False;
++ return(Standard_False);
++ }
++
+ DeltaU = (TgTU * TVTV - TgTV * TUTV ) / DIS ;
+ DeltaV = (TgTV * TUTU - TgTU * TUTV ) / DIS ;
+
+@@ -189,7 +195,12 @@
+ TUTV = TU.Dot(TV);
+ TgTU = Tg.Dot(TU);
+ TgTV = Tg.Dot(TV);
+- DIS = TUTU * TVTV - TUTV * TUTV;
++ DIS = TUTU * TVTV - TUTV * TUTV;
++ if(fabs(DIS)<Precision::Angular()) {
++ MyIsTangent=Standard_False;
++ MyHasBeenComputed = MyHasBeenComputedbis = Standard_False;
++ return(Standard_False);
++ }
+
+ DeltaU = (TgTU * TVTV - TgTV * TUTV ) / DIS ;
+ DeltaV = (TgTV * TUTU - TgTU * TUTV ) / DIS ;