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)