diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index 8879b4737f6..19e66c67424 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -1047,15 +1047,14 @@ void Temperature::init() {
     int heater_index = heater_id >= 0 ? heater_id : EXTRUDERS;
 
     // If the target temperature changes, restart
-    if (tr_target_temperature[heater_index] != target_temperature)
-      *state = TRInactive;
+    if (tr_target_temperature[heater_index] != target_temperature) {
+      tr_target_temperature[heater_index] = target_temperature;
+      *state = target_temperature > 0 ? TRFirstHeating : TRInactive;
+    }
 
     switch (*state) {
       // Inactive state waits for a target temperature to be set
-      case TRInactive:
-        if (target_temperature <= 0) break;
-        tr_target_temperature[heater_index] = target_temperature;
-        *state = TRFirstHeating;
+      case TRInactive: break;
       // When first heating, wait for the temperature to be reached then go to Stable state
       case TRFirstHeating:
         if (temperature < tr_target_temperature[heater_index]) break;