diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp
index 47868bb0c6617fe2810c27c4d893a63bace0c46e..2596e6ca8dbdc5f09e193a6330653aafe1e2d7cd 100644
--- a/Marlin/src/gcode/motion/G2_G3.cpp
+++ b/Marlin/src/gcode/motion/G2_G3.cpp
@@ -226,7 +226,7 @@ void plan_arc(
   // As far as the parser is concerned, the position is now == target. In reality the
   // motion control system might still be processing the action and the real tool position
   // in any intermediate location.
-  set_current_from_destination();
+  COPY(current_position, cart);
 } // plan_arc
 
 /**
diff --git a/Marlin/src/gcode/motion/G5.cpp b/Marlin/src/gcode/motion/G5.cpp
index 684646941597978b4b0ef3aa218104d82d6dcc83..01980e37c916cf215d6162ad9b31323eaa4e602b 100644
--- a/Marlin/src/gcode/motion/G5.cpp
+++ b/Marlin/src/gcode/motion/G5.cpp
@@ -27,13 +27,13 @@
 #include "../../module/motion.h"
 #include "../../module/planner_bezier.h"
 
-void plan_cubic_move(const float (&offset)[4]) {
-  cubic_b_spline(current_position, destination, offset, MMS_SCALED(feedrate_mm_s), active_extruder);
+void plan_cubic_move(const float (&cart)[XYZE], const float (&offset)[4]) {
+  cubic_b_spline(current_position, cart, offset, MMS_SCALED(feedrate_mm_s), active_extruder);
 
   // As far as the parser is concerned, the position is now == destination. In reality the
   // motion control system might still be processing the action and the real tool position
   // in any intermediate location.
-  set_current_from_destination();
+  COPY(current_position, cart);
 }
 
 /**
@@ -69,7 +69,7 @@ void GcodeSuite::G5() {
       parser.linearval('Q')
     };
 
-    plan_cubic_move(offset);
+    plan_cubic_move(destination, offset);
   }
 }