diff --git a/src/Classic/AbsBeamline/Bend2D.cpp b/src/Classic/AbsBeamline/Bend2D.cpp
index ceb2de9a6e992f5eee55f1eb8034dcb7443b8646..87a0f7e5feda0db756a6df481fe24e0fc231979e 100644
--- a/src/Classic/AbsBeamline/Bend2D.cpp
+++ b/src/Classic/AbsBeamline/Bend2D.cpp
@@ -692,31 +692,22 @@ void Bend2D::findBendStrength() {
     if (error < tolerance)
         return;
 
-    double fieldStep = estimateFieldAdjustmentStep(actualBendAngle);
+    double fieldStep = std::copysign(1.0, fieldAmplitude_m) * std::abs(estimateFieldAdjustmentStep(actualBendAngle));
     double amplitude1 = fieldAmplitude_m;
+    double amplitude2 = amplitude1;
     double bendAngle1 = actualBendAngle;
-
-    double amplitude2 = fieldAmplitude_m + fieldStep;
-    fieldAmplitude_m = amplitude2;
-    double bendAngle2 = calculateBendAngle();
-
-    if (std::abs(bendAngle1) > std::abs(angle_m)) {
-        while (std::abs(bendAngle2) > std::abs(angle_m)) {
-            amplitude1 = amplitude2;
-            bendAngle1 = bendAngle2;
-
-            amplitude2 += fieldStep;
-            fieldAmplitude_m = amplitude2;
-            bendAngle2 = calculateBendAngle();
-        }
-    } else {
-        while (std::abs(bendAngle2) < std::abs(angle_m)) {
-            amplitude1 = amplitude2;
-            bendAngle1 = bendAngle2;
-
-            amplitude2 += fieldStep;
-            fieldAmplitude_m = amplitude2;
-            bendAngle2 = calculateBendAngle();
+    double bendAngle2 = bendAngle1;
+
+    int stepSign = std::abs(bendAngle1) > std::abs(angle_m) ? -1: 1;
+    while (true) {
+        amplitude1 = amplitude2;
+        bendAngle1 = bendAngle2;
+
+        amplitude2 += stepSign * fieldStep;
+        fieldAmplitude_m = amplitude2;
+        bendAngle2 = calculateBendAngle();
+        if (stepSign * (std::abs(bendAngle2) - std::abs(angle_m)) > 0) {
+            break;
         }
     }