diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index 28c3250a30c955d92b2ab3cb5dbbfc0c102378cc..2faeb9f86728937329eb7208b86e22901e35330b 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -379,6 +379,7 @@ extern uint8_t active_extruder;
extern float mixing_factor[MIXING_STEPPERS];
#endif
+void update_software_endstops(AxisEnum axis);
void calculate_volumetric_multipliers();
// Buzzer
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 0a385622bc048b2f3c0ed67ab536a3d6ae5b2e5c..af4312071d1bf00ebd9f67f4f186e1578769b261 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1470,7 +1470,7 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
* the software endstop positions must be refreshed to remain
* at the same positions relative to the machine.
*/
-static void update_software_endstops(AxisEnum axis) {
+void update_software_endstops(AxisEnum axis) {
float offs = LOGICAL_POSITION(0, axis);
#if ENABLED(DUAL_X_CARRIAGE)
diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp
index db10bba1500c1831e21408928ac795c8e3c982df..f54cd88a2f8d0a027b6385d4c1c29f4a7f8fa590 100644
--- a/Marlin/configuration_store.cpp
+++ b/Marlin/configuration_store.cpp
@@ -186,6 +186,9 @@ void Config_Postprocess() {
#endif
calculate_volumetric_multipliers();
+
+ // Software endstops depend on home_offset
+ LOOP_XYZ(i) update_software_endstops((AxisEnum)i);
}
#if ENABLED(EEPROM_SETTINGS)