diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 33384530f2fdf471137bf1c2af7e0a0c3c8dc1a2..4d8b0f9fef66550b549094bf59b2d45b5fcaa25c 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -9276,6 +9276,11 @@ inline void gcode_M503() {
    */
   inline void gcode_M600() {
 
+    // Don't allow filament change without homing first
+    if (axis_unhomed_error()) {
+        home_all_axes();
+    }
+
     // Initial retract before move to filament change position
     const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
       #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0