diff --git a/Marlin/src/lcd/malyanlcd.cpp b/Marlin/src/lcd/malyanlcd.cpp
index d01d0367d243401ef89ac8e693fbe265a51e3b97..39c1bc0bda8140a8f4026160a92c4900d809833c 100644
--- a/Marlin/src/lcd/malyanlcd.cpp
+++ b/Marlin/src/lcd/malyanlcd.cpp
@@ -79,7 +79,6 @@ int inbound_count;
 
 // For sending print completion messages
 bool last_printing_status = false;
-uint8_t last_percent_done = 100;
 
 // Everything written needs the high bit set.
 void write_to_lcd_P(const char * const message) {
@@ -442,25 +441,18 @@ void lcd_update() {
     // The way last printing status works is simple:
     // The UI needs to see at least one TQ which is not 100%
     // and then when the print is complete, one which is.
-    if (card.sdprinting) {
-      if (card.percentDone() != last_percent_done) {
-        char message_buffer[10];
-        last_percent_done = card.percentDone();
-        sprintf_P(message_buffer, PSTR("{TQ:%03i}"), last_percent_done);
-        write_to_lcd(message_buffer);
-
-        if (!last_printing_status) last_printing_status = true;
-      }
-    }
-    else {
-      // If there was a print in progress, we need to emit the final
-      // print status as {TQ:100}. Reset last percent done so a new print will
-      // issue a percent of 0.
-      if (last_printing_status) {
-        last_printing_status = false;
-        last_percent_done = 100;
-        write_to_lcd_P(PSTR("{TQ:100}"));
-      }
+    static uint8_t last_percent_done = 100;
+
+    // If there was a print in progress, we need to emit the final
+    // print status as {TQ:100}. Reset last percent done so a new print will
+    // issue a percent of 0.
+    const uint8_t percent_done = card.sdprinting ? card.percentDone() : last_printing_status ? 100 : 0;
+    if (percent_done != last_percent_done) {
+      char message_buffer[10];
+      sprintf_P(message_buffer, PSTR("{TQ:%03i}"), percent_done);
+      write_to_lcd(message_buffer);
+      last_percent_done = percent_done;
+      last_printing_status = card.sdprinting;
     }
   #endif
 }