diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp
index a0fcb504bf6de8d8f3f662526b10ebcfc7b8626c..2b62f5d569a8f108a2eac3712bec8ec558c834b5 100644
--- a/Marlin/src/gcode/motion/M290.cpp
+++ b/Marlin/src/gcode/motion/M290.cpp
@@ -33,6 +33,15 @@
   #include "../../core/serial.h"
 #endif
 
+
+#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
+  FORCE_INLINE void mod_zprobe_zoffset(const float &offs) {
+    zprobe_zoffset += offs;
+    SERIAL_ECHO_START();
+    SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset);
+  }
+#endif
+
 /**
  * M290: Babystepping
  */
@@ -43,7 +52,7 @@ void GcodeSuite::M290() {
         const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2);
         thermalManager.babystep_axis((AxisEnum)a, offs * planner.axis_steps_per_mm[a]);
         #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
-          if (a == Z_AXIS) zprobe_zoffset += offs;
+          if (a == Z_AXIS && parser.boolval('P', true)) mod_zprobe_zoffset(offs);
         #endif
       }
   #else
@@ -51,14 +60,10 @@ void GcodeSuite::M290() {
       const float offs = constrain(parser.value_axis_units(Z_AXIS), -2, 2);
       thermalManager.babystep_axis(Z_AXIS, offs * planner.axis_steps_per_mm[Z_AXIS]);
       #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
-        zprobe_zoffset += offs;
+        if (parser.boolval('P', true)) mod_zprobe_zoffset(offs);
       #endif
     }
   #endif
-  #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
-    SERIAL_ECHO_START();
-    SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset);
-  #endif
 }
 
 #endif // BABYSTEPPING