diff --git a/Firmware/power_panic.cpp b/Firmware/power_panic.cpp index 7c25d85ed..7e9685796 100644 --- a/Firmware/power_panic.cpp +++ b/Firmware/power_panic.cpp @@ -103,7 +103,11 @@ void uvlo_() { // Store the print logical Z position, which we need to recover (a slight error here would be // recovered on the next Gcode instruction, while a physical location error would not) float logical_z = saved_pos[Z_AXIS]; - if(mbl_was_active) logical_z = current_position[Z_AXIS] - mbl.get_z(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS)); + if(mbl_was_active) { + // Mesh bed leveling was being actively applied to the Z-position. Revert the + // mesh bed leveling offset value. + logical_z -= mbl.get_z(saved_pos[X_AXIS], saved_pos[Y_AXIS]); + } eeprom_update_float((float*)EEPROM_UVLO_CURRENT_POSITION_Z, logical_z); // Store the print E position before we lose track