diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 32885af6ca352747bbd239d36fe9cc865720f5a8..cced238ddce809f23845045cc133da180ab3a6ee 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -446,7 +446,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
 
       #if HAS_HEATED_CHAMBER
         case 141: M141(); break;                                  // M141: Set chamber temperature
-        //case 191: M191(); break;                                // M191: Wait for chamber temperature to reach target
+        case 191: M191(); break;                                  // M191: Wait for chamber temperature to reach target
       #endif
 
       #if ENABLED(AUTO_REPORT_TEMPERATURES) && HAS_TEMP_SENSOR
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 619f50b61f13541c3b9e9401285bfae17fd6bfd1..9d2b11a07b6473920e649deedd604f79272d5046 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -620,7 +620,7 @@ private:
 
   #if HAS_HEATED_CHAMBER
     static void M141();
-    //static void M191();
+    static void M191();
   #endif
 
   #if HOTENDS && HAS_LCD_MENU
diff --git a/Marlin/src/gcode/temperature/M141_M191.cpp b/Marlin/src/gcode/temperature/M141_M191.cpp
index a319faa8ace13dfddb230a16a5fe412d73fb35fa..eef546649caf5c542f7e4a65e4d47466b589543a 100644
--- a/Marlin/src/gcode/temperature/M141_M191.cpp
+++ b/Marlin/src/gcode/temperature/M141_M191.cpp
@@ -27,7 +27,6 @@
 #include "../gcode.h"
 #include "../../module/temperature.h"
 
-/*
 #include "../../module/motion.h"
 #include "../../lcd/ultralcd.h"
 
@@ -40,7 +39,6 @@
 #endif
 
 #include "../../Marlin.h" // for wait_for_heatup and idle()
-*/
 
 /**
  * M141: Set chamber temperature
@@ -54,7 +52,6 @@ void GcodeSuite::M141() {
  * M191: Sxxx Wait for chamber current temp to reach target temp. Waits only when heating
  *       Rxxx Wait for chamber current temp to reach target temp. Waits when heating and cooling
  */
-/*
 void GcodeSuite::M191() {
   if (DEBUGGING(DRYRUN)) return;
 
@@ -68,10 +65,11 @@ void GcodeSuite::M191() {
   }
   else return;
 
-  lcd_setstatusPGM(thermalManager.isHeatingChamber() ? GET_TEXT(MSG_CHAMBER_HEATING) : GET_TEXT(MSG_CHAMBER_COOLING));
-
-  thermalManager.wait_for_chamber(no_wait_for_cooling);
+  const bool is_heating = thermalManager.isHeatingChamber();
+  if (is_heating || !no_wait_for_cooling) {
+    lcd_setstatusPGM(is_heating ? GET_TEXT(MSG_CHAMBER_HEATING) : GET_TEXT(MSG_CHAMBER_COOLING));
+    thermalManager.wait_for_chamber(false);
+  }
 }
-*/
 
 #endif // HAS_HEATED_CHAMBER
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index e1cd9c56191e500c44064289a52ad5f5cc28641e..c33efb403003f296d28c2eeb3554b50285bf0f69 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -3160,7 +3160,7 @@ void Temperature::isr() {
 
   #endif // HAS_HEATED_BED
 
-  #if 0 && HAS_HEATED_CHAMBER
+  #if HAS_HEATED_CHAMBER
 
     #ifndef MIN_COOLING_SLOPE_DEG_CHAMBER
       #define MIN_COOLING_SLOPE_DEG_CHAMBER 1.50