diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index dcc9d044351f0dea9a74399ef817187a6bddbe17..c18f5db53ee83f19915ff319fcf11e8c87e950d7 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -310,7 +310,6 @@ extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ];
   extern float bilinear_grid_factor[2],
                z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
   float bilinear_z_offset(const float logical[XYZ]);
-  void set_bed_leveling_enabled(bool enable=true);
 #endif
 
 #if ENABLED(AUTO_BED_LEVELING_UBL)
@@ -319,6 +318,9 @@ extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ];
 #endif
 
 #if HAS_LEVELING
+  bool leveling_is_valid();
+  bool leveling_is_active();
+  void set_bed_leveling_enabled(const bool enable=true);
   void reset_bed_level();
 #endif
 
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 75edc0e6feb2778dc3af123d857581ea7090e21c..d14dc93ffb04952b05143ef2e7f350d632d7a510 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -815,7 +815,7 @@ static bool drain_injected_commands_P() {
  * Aborts the current queue, if any.
  * Note: drain_injected_commands_P() must be called repeatedly to drain the commands afterwards
  */
-void enqueue_and_echo_commands_P(const char* pgcode) {
+void enqueue_and_echo_commands_P(const char * const pgcode) {
   injected_commands_P = pgcode;
   drain_injected_commands_P(); // first command executed asap (when possible)
 }
@@ -2300,6 +2300,33 @@ static void clean_up_after_endstop_or_probe_move() {
 #endif // HAS_BED_PROBE
 
 #if HAS_LEVELING
+
+  bool leveling_is_valid() {
+    return
+      #if ENABLED(MESH_BED_LEVELING)
+        mbl.has_mesh()
+      #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
+        !!bilinear_grid_spacing[X_AXIS]
+      #elif ENABLED(AUTO_BED_LEVELING_UBL)
+        true
+      #else // 3POINT, LINEAR
+        true
+      #endif
+    ;
+  }
+
+  bool leveling_is_active() {
+    return
+      #if ENABLED(MESH_BED_LEVELING)
+        mbl.active()
+      #elif ENABLED(AUTO_BED_LEVELING_UBL)
+        ubl.state.active
+      #else
+        planner.abl_enabled
+      #endif
+    ;
+  }
+
   /**
    * Turn bed leveling on or off, fixing the current
    * position as-needed.
@@ -2307,41 +2334,39 @@ static void clean_up_after_endstop_or_probe_move() {
    * Disable: Current position = physical position
    *  Enable: Current position = "unleveled" physical position
    */
-  void set_bed_leveling_enabled(bool enable/*=true*/) {
-    #if ENABLED(MESH_BED_LEVELING)
+  void set_bed_leveling_enabled(const bool enable/*=true*/) {
+
+    #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
+      const bool can_change = (!enable || leveling_is_valid());
+    #else
+      constexpr bool can_change = true;
+    #endif
 
-      if (enable != mbl.active()) {
+    if (can_change && enable != leveling_is_active()) {
+
+      #if ENABLED(MESH_BED_LEVELING)
 
         if (!enable)
           planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]);
 
-        mbl.set_active(enable && mbl.has_mesh());
+        const bool enabling = enable && leveling_is_valid();
+        mbl.set_active(enabling);
+        if (enabling) planner.unapply_leveling(current_position);
 
-        if (enable && mbl.has_mesh()) planner.unapply_leveling(current_position);
-      }
+      #elif ENABLED(AUTO_BED_LEVELING_UBL)
 
-    #elif ENABLED(AUTO_BED_LEVELING_UBL)
+        #if PLANNER_LEVELING
 
-      #if PLANNER_LEVELING
-        if (ubl.state.active != enable) {
           if (!enable)   // leveling from on to off
             planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]);
           else
             planner.unapply_leveling(current_position);
-        }
-      #endif
-
-      ubl.state.active = enable;
 
-    #else
+        #endif
 
-      #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
-        const bool can_change = (!enable || (bilinear_grid_spacing[0] && bilinear_grid_spacing[1]));
-      #else
-        constexpr bool can_change = true;
-      #endif
+        ubl.state.active = enable;
 
-      if (can_change && enable != planner.abl_enabled) {
+      #else // ABL
 
         #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
           // Force bilinear_z_offset to re-calculate next time
@@ -2360,8 +2385,9 @@ static void clean_up_after_endstop_or_probe_move() {
           );
         else
           planner.unapply_leveling(current_position);
-      }
-    #endif
+
+      #endif
+    }
   }
 
   #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
@@ -2370,13 +2396,7 @@ static void clean_up_after_endstop_or_probe_move() {
       planner.z_fade_height = zfh;
       planner.inverse_z_fade_height = RECIPROCAL(zfh);
 
-      if (
-        #if ENABLED(MESH_BED_LEVELING)
-          mbl.active()
-        #else
-          planner.abl_enabled
-        #endif
-      ) {
+      if (leveling_is_active())
         set_current_from_steppers_for_axis(
           #if ABL_PLANAR
             ALL_AXES
@@ -2384,7 +2404,6 @@ static void clean_up_after_endstop_or_probe_move() {
             Z_AXIS
           #endif
         );
-      }
     }
 
   #endif // LEVELING_FADE_HEIGHT
@@ -2395,7 +2414,7 @@ static void clean_up_after_endstop_or_probe_move() {
   void reset_bed_level() {
     set_bed_leveling_enabled(false);
     #if ENABLED(MESH_BED_LEVELING)
-      if (mbl.has_mesh()) {
+      if (leveling_is_valid()) {
         mbl.reset();
         mbl.set_has_mesh(false);
       }
@@ -3435,7 +3454,7 @@ inline void gcode_G4() {
       #elif ENABLED(AUTO_BED_LEVELING_UBL)
         SERIAL_ECHOPGM("UBL");
       #endif
-      if (planner.abl_enabled) {
+      if (leveling_is_active()) {
         SERIAL_ECHOLNPGM(" (enabled)");
         #if ABL_PLANAR
           float diff[XYZ] = {
@@ -3466,7 +3485,7 @@ inline void gcode_G4() {
     #elif ENABLED(MESH_BED_LEVELING)
 
       SERIAL_ECHOPGM("Mesh Bed Leveling");
-      if (mbl.active()) {
+      if (leveling_is_active()) {
         float lz = current_position[Z_AXIS];
         planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], lz);
         SERIAL_ECHOLNPGM(" (enabled)");
@@ -3622,7 +3641,7 @@ inline void gcode_G28(const bool always_home_all) {
   // Disable the leveling matrix before homing
   #if HAS_LEVELING
     #if ENABLED(AUTO_BED_LEVELING_UBL)
-      const bool ubl_state_at_entry = ubl.state.active;
+      const bool ubl_state_at_entry = leveling_is_active();
     #endif
     set_bed_leveling_enabled(false);
   #endif
@@ -3898,8 +3917,8 @@ void home_all_axes() { gcode_G28(true); }
 
     switch (state) {
       case MeshReport:
-        if (mbl.has_mesh()) {
-          SERIAL_PROTOCOLLNPAIR("State: ", mbl.active() ? MSG_ON : MSG_OFF);
+        if (leveling_is_valid()) {
+          SERIAL_PROTOCOLLNPAIR("State: ", leveling_is_active() ? MSG_ON : MSG_OFF);
           mbl_mesh_report();
         }
         else
@@ -4201,12 +4220,12 @@ void home_all_axes() { gcode_G28(true); }
         abl_probe_index = -1;
       #endif
 
-      abl_should_enable = planner.abl_enabled;
+      abl_should_enable = leveling_is_active();
 
       #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
 
         if (parser.seen('W')) {
-          if (!bilinear_grid_spacing[X_AXIS]) {
+          if (!leveling_is_valid()) {
             SERIAL_ERROR_START;
             SERIAL_ERRORLNPGM("No bilinear grid");
             return;
@@ -4518,7 +4537,6 @@ void home_all_axes() { gcode_G28(true); }
           // Leveling done! Fall through to G29 finishing code below
 
           SERIAL_PROTOCOLLNPGM("Grid probing done.");
-          g29_in_progress = false;
 
           // Re-enable software endstops, if needed
           #if HAS_SOFTWARE_ENDSTOPS
@@ -4542,7 +4560,6 @@ void home_all_axes() { gcode_G28(true); }
         else {
 
           SERIAL_PROTOCOLLNPGM("3-point probing done.");
-          g29_in_progress = false;
 
           // Re-enable software endstops, if needed
           #if HAS_SOFTWARE_ENDSTOPS
@@ -4693,8 +4710,11 @@ void home_all_axes() { gcode_G28(true); }
       if (DEBUGGING(LEVELING)) DEBUG_POS("> probing complete", current_position);
     #endif
 
-    #if ENABLED(PROBE_MANUALLY) && ENABLED(LCD_BED_LEVELING)
-      lcd_wait_for_move = false;
+    #if ENABLED(PROBE_MANUALLY)
+      g29_in_progress = false;
+      #if ENABLED(LCD_BED_LEVELING)
+        lcd_wait_for_move = false;
+      #endif
     #endif
 
     // Calculate leveling, print reports, correct the position
@@ -6591,15 +6611,7 @@ inline void gcode_M42() {
     // Disable bed level correction in M48 because we want the raw data when we probe
 
     #if HAS_LEVELING
-      const bool was_enabled =
-        #if ENABLED(AUTO_BED_LEVELING_UBL)
-          ubl.state.active
-        #elif ENABLED(MESH_BED_LEVELING)
-          mbl.active()
-        #else
-          planner.abl_enabled
-        #endif
-      ;
+      const bool was_enabled = leveling_is_active();
       set_bed_leveling_enabled(false);
     #endif
 
@@ -8727,14 +8739,14 @@ void quickstop_stepper() {
       #if ABL_PLANAR
         planner.bed_level_matrix.debug(PSTR("Bed Level Correction Matrix:"));
       #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
-        if (bilinear_grid_spacing[X_AXIS]) {
+        if (leveling_is_valid()) {
           print_bilinear_leveling_grid();
           #if ENABLED(ABL_BILINEAR_SUBDIVISION)
             bed_level_virt_print();
           #endif
         }
       #elif ENABLED(MESH_BED_LEVELING)
-        if (mbl.has_mesh()) {
+        if (leveling_is_valid()) {
           SERIAL_ECHOLNPGM("Mesh Bed Level data:");
           mbl_mesh_report();
         }
@@ -8760,15 +8772,7 @@ void quickstop_stepper() {
       if (parser.seen('Z')) set_z_fade_height(parser.value_linear_units());
     #endif
 
-    const bool new_status =
-      #if ENABLED(MESH_BED_LEVELING)
-        mbl.active()
-      #elif ENABLED(AUTO_BED_LEVELING_UBL)
-        ubl.state.active
-      #else
-        planner.abl_enabled
-      #endif
-    ;
+    const bool new_status = leveling_is_active();
 
     if (to_enable && !new_status) {
       SERIAL_ERROR_START;
@@ -8987,7 +8991,7 @@ inline void gcode_M503() {
       #endif
 
       #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
-        if (!no_babystep && planner.abl_enabled)
+        if (!no_babystep && leveling_is_active())
           thermalManager.babystep_axis(Z_AXIS, -lround(diff * planner.axis_steps_per_mm[Z_AXIS]));
       #else
         UNUSED(no_babystep);
@@ -9801,7 +9805,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
 
             #if ENABLED(MESH_BED_LEVELING)
 
-              if (mbl.active()) {
+              if (leveling_is_active()) {
                 #if ENABLED(DEBUG_LEVELING_FEATURE)
                   if (DEBUGGING(LEVELING)) SERIAL_ECHOPAIR("Z before MBL: ", current_position[Z_AXIS]);
                 #endif
@@ -11408,7 +11412,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
   inline bool prepare_move_to_destination_cartesian() {
     #if ENABLED(AUTO_BED_LEVELING_UBL)
       const float fr_scaled = MMS_SCALED(feedrate_mm_s);
-      if (ubl.state.active) {
+      if (ubl.state.active) { // direct use of ubl.state.active for speed
         ubl.line_to_destination_cartesian(fr_scaled, active_extruder);
         return true;
       }
@@ -11421,13 +11425,13 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
       else {
         const float fr_scaled = MMS_SCALED(feedrate_mm_s);
         #if ENABLED(MESH_BED_LEVELING)
-          if (mbl.active()) {
+          if (mbl.active()) { // direct used of mbl.active() for speed
             mesh_line_to_destination(fr_scaled);
             return true;
           }
           else
         #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
-          if (planner.abl_enabled) {
+          if (planner.abl_enabled) { // direct use of abl_enabled for speed
             bilinear_line_to_destination(fr_scaled);
             return true;
           }
diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp
index c39508f50d0380ce9371b937abd1dbb649af7d86..0cef5c52a4af232057abb6eb39e59d449a2611ab 100644
--- a/Marlin/configuration_store.cpp
+++ b/Marlin/configuration_store.cpp
@@ -1525,7 +1525,7 @@ void MarlinSettings::reset() {
         SERIAL_ECHOLNPGM("Mesh Bed Leveling:");
       }
       CONFIG_ECHO_START;
-      SERIAL_ECHOPAIR("  M420 S", mbl.has_mesh() ? 1 : 0);
+      SERIAL_ECHOPAIR("  M420 S", leveling_is_valid() ? 1 : 0);
       #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
         SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(planner.z_fade_height));
       #endif
@@ -1549,7 +1549,7 @@ void MarlinSettings::reset() {
         SERIAL_ECHOLNPGM(":");
       }
       CONFIG_ECHO_START;
-      SERIAL_ECHOPAIR("  M420 S", ubl.state.active ? 1 : 0);
+      SERIAL_ECHOPAIR("  M420 S", leveling_is_active() ? 1 : 0);
       #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
         SERIAL_ECHOPAIR(" Z", planner.z_fade_height);
       #endif
@@ -1576,7 +1576,7 @@ void MarlinSettings::reset() {
         SERIAL_ECHOLNPGM("Auto Bed Leveling:");
       }
       CONFIG_ECHO_START;
-      SERIAL_ECHOPAIR("  M420 S", planner.abl_enabled ? 1 : 0);
+      SERIAL_ECHOPAIR("  M420 S", leveling_is_active() ? 1 : 0);
       #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
         SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(planner.z_fade_height));
       #endif
diff --git a/Marlin/language_an.h b/Marlin/language_an.h
index af0981c448a9b103e1e12c8221a143bab9f0045b..2aa0a392911d77bb4a3e70d089979db0861173b2 100644
--- a/Marlin/language_an.h
+++ b/Marlin/language_an.h
@@ -47,7 +47,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Encetar (pretar)")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Vinient punto")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Nivelacion feita!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancelar")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Achustar desfases")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Desfase aplicau")
 #define MSG_SET_ORIGIN                      _UxGT("Establir orichen")
@@ -67,6 +66,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extruir")
 #define MSG_RETRACT                         _UxGT("Retraer")
 #define MSG_MOVE_AXIS                       _UxGT("Mover Eixes")
+#define MSG_BED_LEVELING                    _UxGT("Nivelar base")
 #define MSG_LEVEL_BED                       _UxGT("Nivelar base")
 #define MSG_MOVE_X                          _UxGT("Mover X")
 #define MSG_MOVE_Y                          _UxGT("Mover Y")
diff --git a/Marlin/language_bg.h b/Marlin/language_bg.h
index 34d812eda1a5b328f6f63224af0c03e8379bb220..2370ca5f5f965f21ed136f8df9112234cdbe5b42 100644
--- a/Marlin/language_bg.h
+++ b/Marlin/language_bg.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Click to Begin")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Next Point")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancel")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Задай Начало")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets applied")
 #define MSG_SET_ORIGIN                      _UxGT("Изходна точка")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Екструзия")
 #define MSG_RETRACT                         _UxGT("Откат")
 #define MSG_MOVE_AXIS                       _UxGT("Движение по ос")
+#define MSG_BED_LEVELING                    _UxGT("Нивелиране")
 #define MSG_LEVEL_BED                       _UxGT("Нивелиране")
 #define MSG_MOVE_X                          _UxGT("Движение по X")
 #define MSG_MOVE_Y                          _UxGT("Движение по Y")
diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h
index 4a713c63e3d8c66ff4d0787115ae65700bd3dc9b..01a48d2b9d2ec778f7b83fb65a00c673700828a2 100644
--- a/Marlin/language_ca.h
+++ b/Marlin/language_ca.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Premeu per iniciar")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Següent punt")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Anivellament fet!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancel.la")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ajusta decalatge")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Decalatge aplicat")
 #define MSG_SET_ORIGIN                      _UxGT("Estableix origen")
@@ -70,6 +69,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrudeix")
 #define MSG_RETRACT                         _UxGT("Retreu")
 #define MSG_MOVE_AXIS                       _UxGT("Mou eixos")
+#define MSG_BED_LEVELING                    _UxGT("Anivella llit")
 #define MSG_LEVEL_BED                       _UxGT("Anivella llit")
 #define MSG_MOVING                          _UxGT("Movent..")
 #define MSG_FREE_XY                         _UxGT("XY lliures")
diff --git a/Marlin/language_cn.h b/Marlin/language_cn.h
index 5b471a6724d1ef53ae14df11464eb9b5b43000c7..41efcf09875fef37507b3705cbfc6c109e374e3d 100644
--- a/Marlin/language_cn.h
+++ b/Marlin/language_cn.h
@@ -42,7 +42,6 @@
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
-#define MSG_LEVEL_BED_CANCEL                "Cancel"
 #define MSG_SET_HOME_OFFSETS                "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
 #define MSG_SET_ORIGIN                      "\xbe\xbf\xbc\xbd"
@@ -62,6 +61,7 @@
 #define MSG_EXTRUDE                         "\xcc\xad"
 #define MSG_RETRACT                         "\xbb\xcd"
 #define MSG_MOVE_AXIS                       "\xc1\xb2\xce"
+#define MSG_BED_LEVELING                    "\xcf\xe0\xc4\xc7"
 #define MSG_LEVEL_BED                       "\xcf\xe0\xc4\xc7"
 #define MSG_MOVE_X                          "\xc1\xb2 X"
 #define MSG_MOVE_Y                          "\xc1\xb2 Y"
diff --git a/Marlin/language_cz.h b/Marlin/language_cz.h
index 25cad14b19d40ff36499c90cfeceb99b94c3e9db..2ee3310bcd800d72cded30a7497a15b642f35149 100644
--- a/Marlin/language_cz.h
+++ b/Marlin/language_cz.h
@@ -54,7 +54,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Kliknutim spustte")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Dalsi bod")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Mereni hotovo!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Storno")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Nastavit ofsety")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Ofsety nastaveny")
 #define MSG_SET_ORIGIN                      _UxGT("Nastavit pocatek")
@@ -76,6 +75,7 @@
 #define MSG_EXTRUDE                         _UxGT("Vytlacit (extr.)")
 #define MSG_RETRACT                         _UxGT("Zatlacit (retr.)")
 #define MSG_MOVE_AXIS                       _UxGT("Posunout osy")
+#define MSG_BED_LEVELING                    _UxGT("Vyrovnat podlozku")
 #define MSG_LEVEL_BED                       _UxGT("Vyrovnat podlozku")
 #define MSG_MOVING                          _UxGT("Posunování...")
 #define MSG_FREE_XY                         _UxGT("Uvolnit XY")
diff --git a/Marlin/language_da.h b/Marlin/language_da.h
index 93fdfbd27ab265cd87e9b2445265dd9f853331cd..52391feefa18072cab2dee24913c77856721c4aa 100644
--- a/Marlin/language_da.h
+++ b/Marlin/language_da.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Klik når du er klar")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Næste punkt")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Bed level er færdig!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Annuller bed level")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Sæt forsk. af home")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Forsk. er nu aktiv")
 #define MSG_SET_ORIGIN                      _UxGT("Sæt origin")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extruder")
 #define MSG_RETRACT                         _UxGT("Retract")
 #define MSG_MOVE_AXIS                       _UxGT("Flyt akser")
+#define MSG_BED_LEVELING                    _UxGT("Juster bed")
 #define MSG_LEVEL_BED                       _UxGT("Juster bed")
 #define MSG_MOVE_X                          _UxGT("Flyt X")
 #define MSG_MOVE_Y                          _UxGT("Flyt Y")
diff --git a/Marlin/language_de.h b/Marlin/language_de.h
index 01d8fdea40fe9d6add14ee0bcd3ffc6f4164e5f8..e5216d00512a4fb370e24d9d034d19374fd49ff4 100644
--- a/Marlin/language_de.h
+++ b/Marlin/language_de.h
@@ -51,7 +51,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Klick für Start")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Nächste Koordinate")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Fertig")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Abbruch")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Setze Homeversatz")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Homeversatz aktiv")
 #define MSG_SET_ORIGIN                      _UxGT("Setze Nullpunkt") //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
@@ -73,6 +72,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrudieren")
 #define MSG_RETRACT                         _UxGT("Retract")
 #define MSG_MOVE_AXIS                       _UxGT("Bewegen")
+#define MSG_BED_LEVELING                    _UxGT("Bett nivellieren")
 #define MSG_LEVEL_BED                       _UxGT("Bett nivellieren")
 #define MSG_MOVING                          _UxGT("In Bewegung...")
 #define MSG_FREE_XY                         _UxGT("Abstand XY")
diff --git a/Marlin/language_el-gr.h b/Marlin/language_el-gr.h
index 3e55dd6665036030a4b132b45a8120ba0d6547a5..4104a1daf6914a2655cc6cd16c80549fa80c58ed 100644
--- a/Marlin/language_el-gr.h
+++ b/Marlin/language_el-gr.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Κάντε κλικ για να ξεκινήσετε")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Επόμενο σημείο")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Ολοκλήρωση επιπεδοποίησης!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Ακύρωση")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ορισμός βασικών μετατοπίσεων")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Εφαρμόστηκαν οι μετατοπίσεις")
 #define MSG_SET_ORIGIN                      _UxGT("Ορισμός προέλευσης")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Εξώθηση")
 #define MSG_RETRACT                         _UxGT("Ανάσυρση")
 #define MSG_MOVE_AXIS                       _UxGT("Μετακίνηση άξονα")
+#define MSG_BED_LEVELING                    _UxGT("Επιπεδοποίηση κλίνης")
 #define MSG_LEVEL_BED                       _UxGT("Επιπεδοποίηση κλίνης")
 #define MSG_MOVE_X                          _UxGT("Μετακίνηση X")
 #define MSG_MOVE_Y                          _UxGT("Μετακίνηση Y")
diff --git a/Marlin/language_el.h b/Marlin/language_el.h
index 4203630171841c7c9d8806baf8fec90580326357..af23ede574ef287abcf6e6ade04cd9f54b42861d 100644
--- a/Marlin/language_el.h
+++ b/Marlin/language_el.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει") //SHORTEN
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Επόμενο σημείο")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Ολοκλήρωση επιπεδοποίησης!") //SHORTEN
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Ακύρωση")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ορισμός βασικών μετατοπίσεων") //SHORTEN
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Εφαρμόστηκαν οι μετατοπίσεις") //SHORTEN
 #define MSG_SET_ORIGIN                      _UxGT("Ορισμός προέλευσης")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Εξώθηση")
 #define MSG_RETRACT                         _UxGT("Ανάσυρση")
 #define MSG_MOVE_AXIS                       _UxGT("Μετακίνηση άξονα")
+#define MSG_BED_LEVELING                    _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
 #define MSG_LEVEL_BED                       _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
 #define MSG_MOVE_X                          _UxGT("Μετακίνηση X")
 #define MSG_MOVE_Y                          _UxGT("Μετακίνηση Y")
diff --git a/Marlin/language_en.h b/Marlin/language_en.h
index 9099b049702c4466b22c8a13612a4dcbebe475a5..9d0958d3a25d8b1ba8e92c6914556fc3d96fe79b 100644
--- a/Marlin/language_en.h
+++ b/Marlin/language_en.h
@@ -84,8 +84,8 @@
 #ifndef MSG_LEVEL_BED_DONE
   #define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
 #endif
-#ifndef MSG_LEVEL_BED_CANCEL
-  #define MSG_LEVEL_BED_CANCEL                _UxGT("Cancel")
+#ifndef MSG_Z_FADE_HEIGHT
+  #define MSG_Z_FADE_HEIGHT                   _UxGT("Fade Height")
 #endif
 #ifndef MSG_SET_HOME_OFFSETS
   #define MSG_SET_HOME_OFFSETS                _UxGT("Set home offsets")
@@ -150,6 +150,9 @@
 #ifndef MSG_MOVE_AXIS
   #define MSG_MOVE_AXIS                       _UxGT("Move axis")
 #endif
+#ifndef MSG_BED_LEVELING
+  #define MSG_BED_LEVELING                    _UxGT("Bed Leveling")
+#endif
 #ifndef MSG_LEVEL_BED
   #define MSG_LEVEL_BED                       _UxGT("Level bed")
 #endif
diff --git a/Marlin/language_es.h b/Marlin/language_es.h
index 97decb406d4dd22ac0c9bfc592eba129253d6d6f..30ebb1e21139df40fd3bf5b1e6f34a0a05e8de0e 100644
--- a/Marlin/language_es.h
+++ b/Marlin/language_es.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Iniciar (Presione)")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Siguiente punto")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Nivelacion lista!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancelar")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ajustar desfases")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Desfase aplicado")
 #define MSG_SET_ORIGIN                      _UxGT("Establecer origen")
@@ -72,6 +71,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extruir")
 #define MSG_RETRACT                         _UxGT("Retraer")
 #define MSG_MOVE_AXIS                       _UxGT("Mover ejes")
+#define MSG_BED_LEVELING                    _UxGT("Nivelar plataforma")
 #define MSG_LEVEL_BED                       _UxGT("Nivelar plataforma")
 #define MSG_MOVING                          _UxGT("Moviendo...")
 #define MSG_FREE_XY                         _UxGT("Libre XY")
diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h
index fbf6464d2e7c2a9c73a3f3add4b090cdeb1b2fae..64dbd5caecb9ac843ce9aa70f0e60adddf1e0d0b 100644
--- a/Marlin/language_eu.h
+++ b/Marlin/language_eu.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Klik egin hasteko")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Hurrengo Puntua")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Berdintzea eginda")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Ezeztatu")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Etxe. offset eza.")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsetak ezarrita")
 #define MSG_SET_ORIGIN                      _UxGT("Hasiera ipini")
@@ -72,6 +71,7 @@
 #define MSG_EXTRUDE                         _UxGT("Estruitu")
 #define MSG_RETRACT                         _UxGT("Atzera eragin")
 #define MSG_MOVE_AXIS                       _UxGT("Ardatzak mugitu")
+#define MSG_BED_LEVELING                    _UxGT("Ohea Berdindu")
 #define MSG_LEVEL_BED                       _UxGT("Ohea Berdindu")
 #define MSG_MOVING                          _UxGT("Mugitzen...")
 #define MSG_FREE_XY                         _UxGT("Askatu XY")
diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h
index cd78d80e7388566feba017b6d8f38d41388c7c70..4bb7236177101a25a35ee6bbe2c3ffed92b8c61d 100644
--- a/Marlin/language_fi.h
+++ b/Marlin/language_fi.h
@@ -43,7 +43,6 @@
 #define MSG_LEVEL_BED_HOMING                _UxGT("Homing XYZ")
 #define MSG_LEVEL_BED_WAITING               _UxGT("Click to Begin")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancel")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Set home offsets")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets applied")
 #define MSG_SET_ORIGIN                      _UxGT("Aseta origo")
diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h
index 84b0dd71422084883e7b9ec2d451ef62fb902a55..116f5d8b17a44bf71d4c3aaf07a0d64aaf8067e4 100644
--- a/Marlin/language_fr.h
+++ b/Marlin/language_fr.h
@@ -51,7 +51,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Clic pour commencer")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Point suivant")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Mise à niveau OK!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Annuler")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Regl. décal. origine")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Décalages appliqués")
 #define MSG_SET_ORIGIN                      _UxGT("Régler origine")
@@ -73,6 +72,7 @@
 #define MSG_EXTRUDE                         _UxGT("Éxtrusion")
 #define MSG_RETRACT                         _UxGT("Rétraction")
 #define MSG_MOVE_AXIS                       _UxGT("Déplacer un axe")
+#define MSG_BED_LEVELING                    _UxGT("Règl. Niv. lit")
 #define MSG_LEVEL_BED                       _UxGT("Règl. Niv. lit")
 #define MSG_MOVING                          _UxGT("Déplacement...")
 #define MSG_FREE_XY                         _UxGT("Débloquer XY")
diff --git a/Marlin/language_gl.h b/Marlin/language_gl.h
index d82da020a5ee08000dfd51f861add5a35094865d..d6234e5d3b8e55c61a15cd055b2aa33290fd339f 100644
--- a/Marlin/language_gl.h
+++ b/Marlin/language_gl.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Prema pulsador")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Seguinte punto")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Nivelado feito")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancelar")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Offsets na orixe")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets fixados")
 #define MSG_SET_ORIGIN                      _UxGT("Fixar orixe")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrudir")
 #define MSG_RETRACT                         _UxGT("Retraer")
 #define MSG_MOVE_AXIS                       _UxGT("Mover eixe")
+#define MSG_BED_LEVELING                    _UxGT("Nivelar cama")
 #define MSG_LEVEL_BED                       _UxGT("Nivelar cama")
 #define MSG_MOVE_X                          _UxGT("Mover X")
 #define MSG_MOVE_Y                          _UxGT("Mover Y")
diff --git a/Marlin/language_hr.h b/Marlin/language_hr.h
index 61308142dd3597b7fd035ce0394681303f837275..72a4fd0c3777a102ba5c04b2eb8ad55aa3853179 100644
--- a/Marlin/language_hr.h
+++ b/Marlin/language_hr.h
@@ -47,7 +47,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Klikni za početak")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Sljedeća točka")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Niveliranje gotovo!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Otkaži")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Postavi home offsete")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets postavljeni")
 #define MSG_SET_ORIGIN                      _UxGT("Postavi ishodište")
@@ -67,6 +66,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrude")
 #define MSG_RETRACT                         _UxGT("Retract")
 #define MSG_MOVE_AXIS                       _UxGT("Miči os")
+#define MSG_BED_LEVELING                    _UxGT("Niveliraj bed")
 #define MSG_LEVEL_BED                       _UxGT("Niveliraj bed")
 #define MSG_MOVE_X                          _UxGT("Miči X")
 #define MSG_MOVE_Y                          _UxGT("Miči Y")
diff --git a/Marlin/language_it.h b/Marlin/language_it.h
index 415ae507ec6818db66f35ee2af1aa884ff44dc86..6ff2337fdfdb36af722ca3df8c57663e1f9572d0 100644
--- a/Marlin/language_it.h
+++ b/Marlin/language_it.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Premi per iniziare")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Punto successivo")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Livel. terminato!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Annulla")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Imp. offset home")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offset applicato")
 #define MSG_SET_ORIGIN                      _UxGT("Imposta Origine")
@@ -72,6 +71,7 @@
 #define MSG_EXTRUDE                         _UxGT("Estrudi")
 #define MSG_RETRACT                         _UxGT("Ritrai")
 #define MSG_MOVE_AXIS                       _UxGT("Muovi Asse")
+#define MSG_BED_LEVELING                    _UxGT("Livella piano")
 #define MSG_LEVEL_BED                       _UxGT("Livella piano")
 #define MSG_MOVING                          _UxGT("In movimento...")
 #define MSG_FREE_XY                         _UxGT("XY liberi")
diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h
index 077a277a7628cdd07fc50e195caa85f41491057b..c8169a265b43a414993c3afdae6a2f5a7a81cd74 100644
--- a/Marlin/language_kana.h
+++ b/Marlin/language_kana.h
@@ -53,7 +53,6 @@
 #define MSG_LEVEL_BED_WAITING               "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xb2\xbc"                         // "レベリングカイシ" ("Click to Begin")
 #define MSG_LEVEL_BED_NEXT_POINT            "\xc2\xb7\xde\xc9\xbf\xb8\xc3\xb2\xc3\xdd\xcd"                     // "ツギノソクテイテンヘ" ("Next Point")
 #define MSG_LEVEL_BED_DONE                  "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xdd\xd8\xae\xb3"                 // "レベリングカンリョウ" ("Leveling Done!")
-#define MSG_LEVEL_BED_CANCEL                "\xc4\xd8\xd4\xd2"                                                 // "トリヤメ" ("Cancel")
 #define MSG_SET_HOME_OFFSETS                "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2"         // "キジュンオフセットセッテイ" ("Set home offsets")
 #define MSG_HOME_OFFSETS_APPLIED            "\xb5\xcc\xbe\xaf\xc4\xb6\xde\xc3\xb7\xd6\xb3\xbb\xda\xcf\xbc\xc0" // "オフセットガテキヨウサレマシタ" ("Offsets applied")
 #define MSG_SET_ORIGIN                      "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4"                                 // "キジュンセット" ("Set origin")
@@ -73,6 +72,7 @@
 #define MSG_EXTRUDE                         "\xb5\xbc\xc0\xde\xbc"                                             // "オシダシ" ("Extrude")
 #define MSG_RETRACT                         "\xcb\xb7\xba\xd0\xbe\xaf\xc3\xb2"                                 // "ヒキコミセッテイ" ("Retract")
 #define MSG_MOVE_AXIS                       "\xbc\xde\xb8\xb2\xc4\xde\xb3"                                     // "ジクイドウ" ("Move axis")
+#define MSG_BED_LEVELING                    "\xcd\xde\xaf\xc4\xde\xda\xcd\xde\xd8\xdd\xb8\xde"                 // "ベッドレベリング" ("Bed Leveling")
 #define MSG_LEVEL_BED                       "\xcd\xde\xaf\xc4\xde\xda\xcd\xde\xd8\xdd\xb8\xde"                 // "ベッドレベリング" ("Level bed")
 #define MSG_MOVING                          "\xb2\xc4\xde\xb3\xc1\xad\xb3"                                     // "イドウチュウ" ("Moving...")
 #define MSG_FREE_XY                         "XY\xbc\xde\xb8\x20\xb6\xb2\xce\xb3"                               // "XYジク カイホウ" ("Free XY")
diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h
index 6ca860586e324b8892cbd301cb67239a58519617..874647ad542a50c06e9a54af5d77bc0da52401d2 100644
--- a/Marlin/language_kana_utf8.h
+++ b/Marlin/language_kana_utf8.h
@@ -55,7 +55,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("レベリングカイシ")                // "Click to Begin"
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("ツギノソクテイテンヘ")             // "Next Point"
 #define MSG_LEVEL_BED_DONE                  _UxGT("レベリングカンリョウ")              // "Leveling Done!"
-#define MSG_LEVEL_BED_CANCEL                _UxGT("トリヤメ")                      // "Cancel"
 #define MSG_SET_HOME_OFFSETS                _UxGT("キジュンオフセットセッテイ")         // "Set home offsets"
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("オフセットガテキヨウサレマシタ")       // "Offsets applied"
 #define MSG_SET_ORIGIN                      _UxGT("キジュンセット")                 // "Set origin"
@@ -75,6 +74,7 @@
 #define MSG_EXTRUDE                         _UxGT("オシダシ")                     // "Extrude"
 #define MSG_RETRACT                         _UxGT("ヒキコミセッテイ")                // "Retract"
 #define MSG_MOVE_AXIS                       _UxGT("ジクイドウ")                    // "Move axis"
+#define MSG_BED_LEVELING                    _UxGT("ベッドレベリング")                // "Bed leveling"
 #define MSG_LEVEL_BED                       _UxGT("ベッドレベリング")                // "Level bed"
 #define MSG_MOVING                          _UxGT("イドウチュウ")                   // "Moving..."
 #define MSG_FREE_XY                         _UxGT("XYジク カイホウ")                // "Free XY"
diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h
index b041a35355c775a05a576e22ba20d5dd18ce0ba5..ffb71f69d9a59509b1afc04a1ff4b2a388ace25e 100644
--- a/Marlin/language_nl.h
+++ b/Marlin/language_nl.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Klik voor begin")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Volgende Plaats")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Bed level kompl.")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Bed level afbr.")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Zet home offsets")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("H offset toegep.")
 #define MSG_SET_ORIGIN                      _UxGT("Nulpunt instellen")
@@ -72,6 +71,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrude")
 #define MSG_RETRACT                         _UxGT("Retract")
 #define MSG_MOVE_AXIS                       _UxGT("As verplaatsen")
+#define MSG_BED_LEVELING                    _UxGT("Bed Leveling")
 #define MSG_LEVEL_BED                       _UxGT("Level bed")
 #define MSG_MOVING                          _UxGT("Verplaatsen...")
 #define MSG_FREE_XY                         _UxGT("Vrij XY")
diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h
index 204d3123b4fc6bf7a21f8cf2d868f28ea7b91443..2794a17239b499ec3ceb3411000b9fefc178265a 100644
--- a/Marlin/language_pl.h
+++ b/Marlin/language_pl.h
@@ -50,7 +50,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Kliknij by rozp.")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Następny punkt")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Wypoziomowano!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Anuluj")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ust. poz. zer.")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Poz. zerowa ust.")
 #define MSG_SET_ORIGIN                      _UxGT("Ustaw punkt zero")
@@ -70,6 +69,7 @@
 #define MSG_EXTRUDE                         _UxGT("Ekstruzja")
 #define MSG_RETRACT                         _UxGT("Wycofanie")
 #define MSG_MOVE_AXIS                       _UxGT("Ruch osi")
+#define MSG_BED_LEVELING                    _UxGT("Poziom. stołu")
 #define MSG_LEVEL_BED                       _UxGT("Poziom. stołu")
 #define MSG_MOVE_X                          _UxGT("Przesuń w X")
 #define MSG_MOVE_Y                          _UxGT("Przesuń w Y")
@@ -268,7 +268,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Kliknij by rozp.")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Nastepny punkt")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Wypoziomowano!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Anuluj")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ust. poz. zer.")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Poz. zerowa ust.")
 #define MSG_SET_ORIGIN                      _UxGT("Ustaw punkt zero")
@@ -288,6 +287,7 @@
 #define MSG_EXTRUDE                         _UxGT("Ekstruzja")
 #define MSG_RETRACT                         _UxGT("Wycofanie")
 #define MSG_MOVE_AXIS                       _UxGT("Ruch osi")
+#define MSG_BED_LEVELING                    _UxGT("Poziom. stolu")
 #define MSG_LEVEL_BED                       _UxGT("Poziom. stolu")
 #define MSG_MOVE_X                          _UxGT("Przesun w X")
 #define MSG_MOVE_Y                          _UxGT("Przesun w Y")
diff --git a/Marlin/language_pt-br.h b/Marlin/language_pt-br.h
index 05c91e0b98cfa6c76488722c834f7ce68aaf4425..03e683c5e8a7a2d3e625330ff062b2a8bebfe3b1 100644
--- a/Marlin/language_pt-br.h
+++ b/Marlin/language_pt-br.h
@@ -42,7 +42,6 @@
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
-#define MSG_LEVEL_BED_CANCEL                "Cancel"
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
 #define MSG_SET_ORIGIN                      "Ajustar orig."
diff --git a/Marlin/language_pt-br_utf8.h b/Marlin/language_pt-br_utf8.h
index c9040fcddc9f84c81e01afbb3231995e7891a928..e2d9ced5ee5589af1ae0c79affafcb9686988b60 100644
--- a/Marlin/language_pt-br_utf8.h
+++ b/Marlin/language_pt-br_utf8.h
@@ -42,7 +42,6 @@
 #define MSG_LEVEL_BED_HOMING                _UxGT("Indo para origem")
 #define MSG_LEVEL_BED_WAITING               _UxGT("Click to Begin")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancel")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Ajustar Jogo")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets applied")
 #define MSG_SET_ORIGIN                      _UxGT("Ajustar orig.")
diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h
index 4b82124325986a00da9277c5f1322652b9bd04d6..17d7c21f53ce79f04f23c57c152074ebaee1163c 100644
--- a/Marlin/language_pt.h
+++ b/Marlin/language_pt.h
@@ -46,7 +46,6 @@
 #define MSG_LEVEL_BED_WAITING               "Click para iniciar"
 #define MSG_LEVEL_BED_NEXT_POINT            "Proximo ponto"
 #define MSG_LEVEL_BED_DONE                  "Pronto !"
-#define MSG_LEVEL_BED_CANCEL                "Cancelar"
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
 #define MSG_SET_ORIGIN                      "Definir origem"
diff --git a/Marlin/language_pt_utf8.h b/Marlin/language_pt_utf8.h
index d9345a579ef6b9e2cdd6958e925475bc1b2f6db6..e939c4d0c1248bc0cb2047b5c4e4b25cfc004e78 100644
--- a/Marlin/language_pt_utf8.h
+++ b/Marlin/language_pt_utf8.h
@@ -46,7 +46,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Click para iniciar")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Próximo ponto")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Pronto !")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Cancelar")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Definir desvio")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets aplicados")
 #define MSG_SET_ORIGIN                      _UxGT("Definir origem")
diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h
index 3b2936128b9c63d79acaac2d49388884138b863e..1c82986cbf2f29848157714d9dcd4278bfdc181e 100644
--- a/Marlin/language_ru.h
+++ b/Marlin/language_ru.h
@@ -45,7 +45,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Нажмите начать")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Следующая точка")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Уровень!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Отменить")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Запомнить парковку")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Коррекции примен")
 #define MSG_SET_ORIGIN                      _UxGT("Запомнить ноль")
@@ -65,6 +64,7 @@
 #define MSG_EXTRUDE                         _UxGT("Экструзия")
 #define MSG_RETRACT                         _UxGT("Втягивание")
 #define MSG_MOVE_AXIS                       _UxGT("Движение по осям")
+#define MSG_BED_LEVELING                    _UxGT("Калибровать стол")
 #define MSG_LEVEL_BED                       _UxGT("Калибровать стол")
 #define MSG_MOVE_X                          _UxGT("Движение по X")
 #define MSG_MOVE_Y                          _UxGT("Движение по Y")
diff --git a/Marlin/language_tr.h b/Marlin/language_tr.h
index d15fbfb6dfe8012a635717638e8e7ea328f4403a..edbea97d7b8fcb230cbb1b5aa25ae0254a9bb718 100644
--- a/Marlin/language_tr.h
+++ b/Marlin/language_tr.h
@@ -55,7 +55,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Başlatmak için tıkla")                               // Başlatmak için tıkla
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Sıradaki Nokta")                                     // Sıradaki Nokta
 #define MSG_LEVEL_BED_DONE                  _UxGT("Seviyeleme Tamam!")                                  // Seviyeleme Tamam!
-#define MSG_LEVEL_BED_CANCEL                _UxGT("İptal")                                              // İptal
 #define MSG_SET_HOME_OFFSETS                _UxGT("Offset Ayarla")                                      // Offset Ayarla
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offset Tamam")                                       // Offset Tamam
 #define MSG_SET_ORIGIN                      _UxGT("Sıfır Belirle")                                      // Sıfır Belirle
@@ -77,6 +76,7 @@
 #define MSG_EXTRUDE                         _UxGT("Extrude")                                            // Extrude
 #define MSG_RETRACT                         _UxGT("Geri Çek")                                           // Geri Çek
 #define MSG_MOVE_AXIS                       _UxGT("Eksen Yönet")                                        // Eksenleri Yönet
+#define MSG_BED_LEVELING                    _UxGT("Tabla Seviyele")                                     // Tabla Seviyele
 #define MSG_LEVEL_BED                       _UxGT("Tabla Seviyele")                                     // Tabla Seviyele
 #define MSG_MOVING                          _UxGT("Konumlanıyor...")                                    // Konumlanıyor...
 #define MSG_FREE_XY                         _UxGT("Durdur XY")                                          // Durdur XY
diff --git a/Marlin/language_uk.h b/Marlin/language_uk.h
index 2773b24c3e32fcb55523521090bfbeaea29a08e9..638961e935dfe34c02586c5100fb6beddcf82900 100644
--- a/Marlin/language_uk.h
+++ b/Marlin/language_uk.h
@@ -48,7 +48,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("Почати")
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Слідуюча Точка")
 #define MSG_LEVEL_BED_DONE                  _UxGT("Завершено!")
-#define MSG_LEVEL_BED_CANCEL                _UxGT("Відміна")
 #define MSG_SET_HOME_OFFSETS                _UxGT("Зберегти паркув.")
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Зміщення застос.")
 #define MSG_SET_ORIGIN                      _UxGT("Встанов. початок")
@@ -68,6 +67,7 @@
 #define MSG_EXTRUDE                         _UxGT("Екструзія")
 #define MSG_RETRACT                         _UxGT("Втягування")
 #define MSG_MOVE_AXIS                       _UxGT("Рух по осям")
+#define MSG_BED_LEVELING                    _UxGT("Нівелювання столу")
 #define MSG_LEVEL_BED                       _UxGT("Нівелювання столу")
 #define MSG_MOVE_X                          _UxGT("Рух по X")
 #define MSG_MOVE_Y                          _UxGT("Рух по Y")
diff --git a/Marlin/language_zh_CN.h b/Marlin/language_zh_CN.h
index c42ab6a4fd4eca2fffeffa64bb180857a7d3df71..deefcf6c540ccf8e673ac384be16d12205b96ce1 100644
--- a/Marlin/language_zh_CN.h
+++ b/Marlin/language_zh_CN.h
@@ -45,7 +45,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("单击开始热床调平")  //"Click to Begin"
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("下个热床调平点")  //"Next Point"
 #define MSG_LEVEL_BED_DONE                  _UxGT("完成热床调平")  //"Leveling Done!"
-#define MSG_LEVEL_BED_CANCEL                _UxGT("取消热床调平")  //"Cancel"
 #define MSG_SET_HOME_OFFSETS                _UxGT("设置原点偏移")  //"Set home offsets"
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("偏移已启用")  //"Offsets applied"
 #define MSG_SET_ORIGIN                      _UxGT("设置原点")  //"Set origin"
@@ -65,6 +64,7 @@
 #define MSG_EXTRUDE                         _UxGT("挤出")  //"Extrude"
 #define MSG_RETRACT                         _UxGT("回抽")  //"Retract"
 #define MSG_MOVE_AXIS                       _UxGT("移动轴")  //"Move axis"
+#define MSG_BED_LEVELING                    _UxGT("调平热床")  //"Bed leveling"
 #define MSG_LEVEL_BED                       _UxGT("调平热床")  //"Level bed"
 #define MSG_MOVE_X                          _UxGT("移动X")  //"Move X"
 #define MSG_MOVE_Y                          _UxGT("移动Y")  //"Move Y"
diff --git a/Marlin/language_zh_TW.h b/Marlin/language_zh_TW.h
index 421f4e717b8506e69d99ffb5e90198fe1ae042cc..c7563e786716125831743e2a05ebe70f212ac98b 100644
--- a/Marlin/language_zh_TW.h
+++ b/Marlin/language_zh_TW.h
@@ -45,7 +45,6 @@
 #define MSG_LEVEL_BED_WAITING               _UxGT("單擊開始熱床調平")  //"Click to Begin"
 #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("下個熱床調平點")  //"Next Point"
 #define MSG_LEVEL_BED_DONE                  _UxGT("完成熱床調平")  //"Leveling Done!"
-#define MSG_LEVEL_BED_CANCEL                _UxGT("取消熱床調平")  //"Cancel"
 #define MSG_SET_HOME_OFFSETS                _UxGT("設置原點偏移")  //"Set home offsets"
 #define MSG_HOME_OFFSETS_APPLIED            _UxGT("偏移已啟用")  //"Offsets applied"
 #define MSG_SET_ORIGIN                      _UxGT("設置原點")  //"Set origin"
@@ -65,6 +64,7 @@
 #define MSG_EXTRUDE                         _UxGT("擠出")  //"Extrude"
 #define MSG_RETRACT                         _UxGT("回抽")  //"Retract"
 #define MSG_MOVE_AXIS                       _UxGT("移動軸")  //"Move axis"
+#define MSG_BED_LEVELING                    _UxGT("調平熱床")  //"Bed leveling"
 #define MSG_LEVEL_BED                       _UxGT("調平熱床")  //"Level bed"
 #define MSG_MOVE_X                          _UxGT("移動X")  //"Move X"
 #define MSG_MOVE_Y                          _UxGT("移動Y")  //"Move Y"
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index e4b1a7463a409afebef08e6d28c58a6b1a8321a0..686ce255eb1095454af675030fc3f36e0e3192ea 100755
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -478,9 +478,10 @@ uint16_t max_display_update_time = 0;
   /**
    * Show "Moving..." till moves are done, then revert to previous display.
    */
-  inline void lcd_synchronize() {
+  inline void lcd_synchronize(const char * const msg=NULL) {
     static bool no_reentry = false;
-    lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_MOVING));
+    const static char moving[] PROGMEM = MSG_MOVING;
+    lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, msg ? msg : moving);
     if (no_reentry) return;
 
     // Make this the current handler till all moves are done
@@ -1403,6 +1404,11 @@ void kill_screen(const char* lcd_msg) {
 
   #endif
 
+  #if ENABLED(EEPROM_SETTINGS)
+    static void lcd_store_settings()   { lcd_completion_feedback(settings.save()); }
+    static void lcd_load_settings()    { lcd_completion_feedback(settings.load()); }
+  #endif
+
   #if ENABLED(LCD_BED_LEVELING)
 
     /**
@@ -1467,7 +1473,7 @@ void kill_screen(const char* lcd_msg) {
 
           // The last G29 will record but not move
           if (manual_probe_index == total_probe_points - 1)
-            enqueue_and_echo_commands_P("G29 V1");
+            enqueue_and_echo_commands_P(PSTR("G29 V1"));
 
         #endif
 
@@ -1481,13 +1487,15 @@ void kill_screen(const char* lcd_msg) {
           #if MANUAL_PROBE_HEIGHT > 0
             current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS) + MANUAL_PROBE_HEIGHT;
             line_to_current(Z_AXIS);
-            lcd_synchronize();
+          #endif
+
+          #if MANUAL_PROBE_HEIGHT > 0 || ENABLED(MESH_BED_LEVELING)
+            lcd_synchronize(PSTR(MSG_LEVEL_BED_DONE));
           #endif
 
           // Enable leveling, if needed
           #if ENABLED(MESH_BED_LEVELING)
 
-            lcd_synchronize();
             mbl.set_has_mesh(true);
             mesh_probing_done();
 
@@ -1607,19 +1615,56 @@ void kill_screen(const char* lcd_msg) {
      * Step 2: Continue Bed Leveling...
      */
     void _lcd_level_bed_continue() {
-        defer_return_to_status = true;
-        axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
-        lcd_goto_screen(_lcd_level_bed_homing);
-        enqueue_and_echo_commands_P(PSTR("G28"));
+      defer_return_to_status = true;
+      axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
+      lcd_goto_screen(_lcd_level_bed_homing);
+      enqueue_and_echo_commands_P(PSTR("G28"));
     }
 
+    static bool _level_state;
+    void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(_level_state); }
+    void _lcd_set_z_fade_height() { set_z_fade_height(planner.z_fade_height); }
+
     /**
-     * Step 1: Bed Level entry-point: "Cancel" or "Level Bed"
+     * Step 1: Bed Level entry-point
+     *  - Cancel
+     *  - Level Bed >
+     *  - Leveling On/Off (if there is leveling data)
+     *  - Fade Height (Req: ENABLE_LEVELING_FADE_HEIGHT)
+     *  - Mesh Z Offset (Req: MESH_BED_LEVELING)
+     *  - Z Probe Offset (Req: HAS_BED_PROBE, Opt: BABYSTEP_ZPROBE_OFFSET)
+     *  - Load Settings (Req: EEPROM_SETTINGS)
+     *  - Save Settings (Req: EEPROM_SETTINGS)
      */
     void lcd_level_bed() {
       START_MENU();
-      MENU_BACK(MSG_LEVEL_BED_CANCEL);
+      MENU_BACK(MSG_PREPARE);
       MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
+      if (leveling_is_valid()) {      // Leveling data exists? Show more options.
+        _level_state = leveling_is_active();
+        MENU_ITEM_EDIT_CALLBACK(bool, MSG_BED_LEVELING, &_level_state, _lcd_toggle_bed_leveling);
+      }
+
+      #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
+        set_z_fade_height(planner.z_fade_height);
+        MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_Z_FADE_HEIGHT, &planner.z_fade_height, 0.0, 100.0, _lcd_set_z_fade_height);
+      #endif
+
+      // Manual bed leveling, Bed Z:
+      #if ENABLED(MESH_BED_LEVELING)
+        MENU_ITEM_EDIT(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
+      #endif
+
+      #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
+        MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
+      #elif HAS_BED_PROBE
+        MENU_ITEM_EDIT_CALLBACK(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, lcd_refresh_zprobe_zoffset);
+      #endif
+
+      #if ENABLED(EEPROM_SETTINGS)
+        MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings);
+        MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
+      #endif
       END_MENU();
     }
 
@@ -2026,7 +2071,7 @@ void kill_screen(const char* lcd_msg) {
       #if ENABLED(PROBE_MANUALLY)
         if (!g29_in_progress)
       #endif
-      MENU_ITEM(submenu, MSG_LEVEL_BED, lcd_level_bed);
+      MENU_ITEM(submenu, MSG_BED_LEVELING, lcd_level_bed);
     #endif
 
     #if HAS_M206_COMMAND
@@ -2444,11 +2489,6 @@ void kill_screen(const char* lcd_msg) {
 
   #endif // HAS_LCD_CONTRAST
 
-  #if ENABLED(EEPROM_SETTINGS)
-    static void lcd_store_settings()   { lcd_completion_feedback(settings.save()); }
-    static void lcd_load_settings()    { lcd_completion_feedback(settings.load()); }
-  #endif
-
   static void lcd_factory_settings() {
     settings.reset();
     lcd_completion_feedback();
@@ -2925,11 +2965,6 @@ void kill_screen(const char* lcd_msg) {
       MENU_ITEM_EDIT_CALLBACK(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, lcd_refresh_zprobe_zoffset);
     #endif
 
-    // Manual bed leveling, Bed Z:
-    #if ENABLED(MESH_BED_LEVELING) && ENABLED(LCD_BED_LEVELING)
-      MENU_ITEM_EDIT(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
-    #endif
-
     // M203 / M205 Feedrate items
     MENU_ITEM(submenu, MSG_FEEDRATE, lcd_control_motion_feedrate_menu);