diff --git a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/sTGCAsBuiltData2.cxx b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/sTGCAsBuiltData2.cxx
index b98814e31b7fc1a14e3ead14797de1be008d799d..75e4c7424ecef7fbbc3f948e53fb98a680c67b55 100644
--- a/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/sTGCAsBuiltData2.cxx
+++ b/MuonSpectrometer/MuonAlignment/MuonAlignmentData/src/sTGCAsBuiltData2.cxx
@@ -19,7 +19,12 @@ Amg::Vector2D sTGCAsBuiltData2::correctPosition(const Identifier& channelId, con
     Amg::Vector2D correctedPos = pos;
     Parameters pars = par_itr->second;
     constexpr double convScale = 1.e-3; // parameters are stored in um and mrad therefore dividing by 1000
-    correctedPos.x() = pos.x() + (pars.offset * convScale  + pars.rotation *convScale * pos.y() + pars.scale*convScale*pos.x() + pars.nonPara * convScale * convScale * pos.x()*pos.y()); 
+    
+    // For the QL3 modules described by the legacy (Run 3) geometry EDM the origin of the local frame is shifted with respect to the actual center of the gap.
+    // Therefore a shift is introduced which stabilizes the as built fit which must also be applied here since the parameters are expressed using the actual center of the gap.
+    float shift = (std::fabs(m_idHelperSvc->stationEta(channelId)) == 3 && m_idHelperSvc->stationNameString(channelId) == "STL" ?  24.74 : 0.0);
+
+    correctedPos.x() = pos.x() +  (pars.offset * convScale  + pars.rotation *convScale * pos.y() + pars.scale*convScale*(pos.x() + shift ) + pars.nonPara * convScale * convScale * (pos.x() + shift  )*pos.y()); 
     return correctedPos;
 }
 
@@ -34,4 +39,4 @@ StatusCode sTGCAsBuiltData2::setParameters(const Identifier& channelId, const Pa
     }
     return StatusCode::SUCCESS;
 }
-    
\ No newline at end of file
+