diff --git a/src/Contap/Contap_Contour.cxx b/src/Contap/Contap_Contour.cxx
index 90a00e7779..16d2d58625 100644
--- a/src/Contap/Contap_Contour.cxx
+++ b/src/Contap/Contap_Contour.cxx
@@ -1236,8 +1236,11 @@ void ComputeInternalPoints
         // std::cout << "Changement de signe detecte" << std::endl;
         solution = Standard_False;
         while (!solution) {
-          X(1) = (XInf(1) + XSup(1)) /2.;
-          X(2) = (XInf(2) + XSup(2)) /2.;
+          // Selecting the middle point between XInf and XSup leads situation, where X values almost do not change.
+          // To prevent this situation, select shifted point instead of middle.
+          const Standard_Real aCoef = 2. / 3.;
+          X(1) = XInf(1) + aCoef * (XSup(1) - XInf(1));
+          X(2) = XInf(2) + aCoef * (XSup(2) - XInf(2));
           rsnld.Perform(SFunc,X,infb,supb);
 
           if (!rsnld.IsDone()) {
diff --git a/tests/hlr/exact_hlr/bug33450 b/tests/hlr/exact_hlr/bug33450
new file mode 100644
index 0000000000..efe6ca5de0
--- /dev/null
+++ b/tests/hlr/exact_hlr/bug33450
@@ -0,0 +1,5 @@
+set viewname "vfront"
+set length 63.8689
+
+restore [locate_data_file bug33450.brep] a
+COMPUTE_HLR $viewname $algotype