diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index c3053cd1c1..26932e455b 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -137,7 +137,6 @@ volatile bool Temperature::temp_meas_ready = false;
   #endif
 
   float Temperature::pid_error[HOTENDS];
-  bool Temperature::pid_reset[HOTENDS];
 #endif
 
 #if ENABLED(PIDTEMPBED)
@@ -195,7 +194,6 @@ uint8_t Temperature::soft_pwm[HOTENDS];
 #endif
 
 #if HAS_PID_HEATING
-
   void Temperature::PID_autotune(float temp, int hotend, int ncycles, bool set_result/*=false*/) {
     float input = 0.0;
     int cycles = 0;
@@ -452,7 +450,6 @@ int Temperature::getHeaterPower(int heater) {
 }
 
 #if HAS_AUTO_FAN
-
   void Temperature::checkExtruderAutoFans() {
     const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
     const int fanBit[] = {
@@ -535,23 +532,17 @@ float Temperature::get_pid_output(int e) {
   #endif
   float pid_output;
   #if ENABLED(PIDTEMP)
-    #if DISABLED(PID_OPENLOOP)
+    #if ENABLED(PID_OPENLOOP)
+      pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
+    #else
       pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
       dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
       temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
-      if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) {
-        pid_output = BANG_MAX;
-        pid_reset[HOTEND_INDEX] = true;
-      }
-      else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0) {
+      if (target_temperature[HOTEND_INDEX] == 0) {
         pid_output = 0;
-        pid_reset[HOTEND_INDEX] = true;
+        temp_iState[HOTEND_INDEX] = 0.0;
       }
       else {
-        if (pid_reset[HOTEND_INDEX]) {
-          temp_iState[HOTEND_INDEX] = 0.0;
-          pid_reset[HOTEND_INDEX] = false;
-        }
         pTerm[HOTEND_INDEX] = PID_PARAM(Kp, HOTEND_INDEX) * pid_error[HOTEND_INDEX];
         temp_iState[HOTEND_INDEX] += pid_error[HOTEND_INDEX];
         iTerm[HOTEND_INDEX] = PID_PARAM(Ki, HOTEND_INDEX) * temp_iState[HOTEND_INDEX];
@@ -584,8 +575,6 @@ float Temperature::get_pid_output(int e) {
           pid_output = 0;
         }
       }
-    #else
-      pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
     #endif //PID_OPENLOOP
 
     #if ENABLED(PID_DEBUG)
diff --git a/Marlin/temperature.h b/Marlin/temperature.h
index 974e05d5e7..b18690c387 100644
--- a/Marlin/temperature.h
+++ b/Marlin/temperature.h
@@ -158,7 +158,6 @@ class Temperature {
       #endif
 
       static float pid_error[HOTENDS];
-      static bool pid_reset[HOTENDS];
     #endif
 
     #if ENABLED(PIDTEMPBED)