diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index f04ca2eb99bb2652175386a5dbb5645244ac1ec3..1e70d78f040d1e138bdb47c8e4de3fdee7d623bc 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -448,11 +448,11 @@
 // @section extras
 
 // Arc interpretation settings:
-#define ARC_SUPPORT  // Disabling this saves ~2660bytes
+#define ARC_SUPPORT  // Disabling this saves ~2738 bytes
 #define MM_PER_ARC_SEGMENT 1
 #define N_ARC_CORRECTION 25
 
-// Support for G5 with XYZE destination and IJPQ offsets
+// Support for G5 with XYZE destination and IJPQ offsets. Needs ~2666 bytes
 //#define BEZIER_CURVE_SUPPORT
 
 const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 1f15c0980a3440d497fce924b7cac4d7f27bb316..d7cf57863f65112245d0a4832496dc7bbd4852a6 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -106,7 +106,7 @@
  * G2  - CW ARC
  * G3  - CCW ARC
  * G4  - Dwell S<seconds> or P<milliseconds>
- * G5  - Cubic B-spline with
+ * G5  - Cubic B-spline with XYZE destination and IJPQ offsets
  * G10 - retract filament according to settings of M207
  * G11 - retract recover filament according to settings of M208
  * G28 - Home one or more axes
@@ -2546,14 +2546,7 @@ inline void gcode_G4() {
   inline void gcode_G5() {
     if (IsRunning()) {
 
-      #ifdef SF_ARC_FIX
-        bool relative_mode_backup = relative_mode;
-        relative_mode = true;
-      #endif
       gcode_get_destination();
-      #ifdef SF_ARC_FIX
-        relative_mode = relative_mode_backup;
-      #endif
 
       float offset[] = {
         code_seen('I') ? code_value() : 0.0,
@@ -7604,13 +7597,14 @@ void prepare_move() {
 
     float feed_rate = feedrate * feedrate_multiplier / 60 / 100.0;
 
-    millis_t previous_ms = millis();
+    millis_t next_ping_ms = millis() + 200UL;
 
     for (i = 1; i < segments; i++) { // Iterate (segments-1) times
 
+      thermalManager.manage_heater();
       millis_t now = millis();
-      if (now - previous_ms > 200UL) {
-        previous_ms = now;
+      if (ELAPSED(now, next_ping_ms)) {
+        next_ping_ms = now + 200UL;
         idle();
       }
 
diff --git a/Marlin/planner_bezier.cpp b/Marlin/planner_bezier.cpp
index b72478d75e888f308219b4f6ffd082d07faf2ab1..ad80c6b1989f50d29c4a818f288476b6836db85f 100644
--- a/Marlin/planner_bezier.cpp
+++ b/Marlin/planner_bezier.cpp
@@ -118,15 +118,15 @@ void cubic_b_spline(const float position[NUM_AXIS], const float target[NUM_AXIS]
   bez_target[Y_AXIS] = position[Y_AXIS];
   float step = MAX_STEP;
 
-  uint8_t idle_counter = 0;
   millis_t next_ping_ms = millis() + 200UL;
 
   while (t < 1.0) {
 
+    thermalManager.manage_heater();
     millis_t now = millis();
     if (ELAPSED(now, next_ping_ms)) {
       next_ping_ms = now + 200UL;
-      (idle_counter++ & 0x03) ? thermalManager.manage_heater() : idle();
+      idle();
     }
 
     // First try to reduce the step in order to make it sufficiently
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 7f0b9a271302901a9317aac5bead3f3b80670e2c..4d7f80b95d2ac6d84f84fe84d61540f35a0ed48c 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -282,7 +282,6 @@ menuPosition menu_history[10];
 uint8_t menu_history_depth = 0;
 
 millis_t next_lcd_update_ms;
-uint8_t lcd_status_update_delay;
 bool ignore_click = false;
 bool wait_for_unclick;
 bool defer_return_to_status = false;
@@ -2248,9 +2247,13 @@ void lcd_update() {
       }
     #endif //ULTIPANEL
 
-    // Simply redraw the Info Screen 10 times a second
-    if (currentMenu == lcd_status_screen && !(++lcd_status_update_delay % 10))
+    // Here we arrive every ~100ms when ideling often enough.
+    // Instead of tracking the changes simply redraw the Info Screen ~1 time a second.
+    static int8_t lcd_status_update_delay = 1; // first update one loop delayed
+    if (currentMenu == lcd_status_screen && !lcd_status_update_delay--) {
+      lcd_status_update_delay = 9;
       lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
+    }
 
     if (lcdDrawUpdate) {