diff --git a/Core/Detector/RectangularDetector.cpp b/Core/Detector/RectangularDetector.cpp
index 31281e2ae4d7f9cb36e7d663f8a61aaf86f4ed6b..06baf2a9b7ad68a52d72db10d6af23772f65b97e 100644
--- a/Core/Detector/RectangularDetector.cpp
+++ b/Core/Detector/RectangularDetector.cpp
@@ -220,9 +220,9 @@ size_t RectangularDetector::indexOfSpecular(const Beam& beam) const
     const double kd = k_spec.dot(normal_unit);
     if (kd <= 0.0)
         return totalSize();
-    const kvector_t k_orth = (k_spec / kd - normal_unit) * m_distance;
-    const double u = k_orth.dot(m_u_unit) + m_u0;
-    const double v = k_orth.dot(m_v_unit) + m_v0;
+    const kvector_t rpix = k_spec * (m_distance / kd);
+    const double u = rpix.dot(m_u_unit) + m_u0;
+    const double v = rpix.dot(m_v_unit) + m_v0;
     const IAxis& u_axis = getAxis(0);
     const IAxis& v_axis = getAxis(1);
     if (u_axis.contains(u) && v_axis.contains(v))