diff --git a/config/example-extras.cfg b/config/example-extras.cfg
index 453e894a3..63e3e70be 100644
--- a/config/example-extras.cfg
+++ b/config/example-extras.cfg
@@ -350,6 +350,11 @@
 #max_adjust: 4
 #   Saftey limit if an ajustment greater than this value is requested
 #   quad_gantry_level will abort.
+#retries: 0
+#   number of times to retry if the probed points aren't within tolerance
+#retry_tolerance: 0
+#   if retries are enabled then retry if largest and smallest probed points
+#   differ more than retry_tolerance
 
 
 # In a multi-extruder printer add an additional extruder section for
diff --git a/klippy/extras/quad_gantry_level.py b/klippy/extras/quad_gantry_level.py
index 1f915d4f9..4a66d5775 100644
--- a/klippy/extras/quad_gantry_level.py
+++ b/klippy/extras/quad_gantry_level.py
@@ -9,6 +9,8 @@ import probe, z_tilt
 class QuadGantryLevel:
     def __init__(self, config):
         self.printer = config.get_printer()
+        self.retry_helper = z_tilt.RetryHelper(config,
+            "Possibly Z motor numbering is wrong")
         self.max_adjust = config.getfloat("max_adjust", 4, above=0)
         self.horizontal_move_z = config.getfloat("horizontal_move_z", 5.0)
         self.probe_helper = probe.ProbePointsHelper(config, self.probe_finalize)
@@ -36,6 +38,7 @@ class QuadGantryLevel:
     cmd_QUAD_GANTRY_LEVEL_help = (
         "Conform a moving, twistable gantry to the shape of a stationary bed")
     def cmd_QUAD_GANTRY_LEVEL(self, params):
+        self.retry_helper.start(params)
         self.probe_helper.start_probe(params)
     def probe_finalize(self, offsets, positions):
         # Mirror our perspective so the adjustments make sense
@@ -89,6 +92,7 @@ class QuadGantryLevel:
 
         speed = self.probe_helper.get_lift_speed()
         self.z_helper.adjust_steppers(z_adjust, speed)
+        return self.retry_helper.check_retry(z_positions)
     def linefit(self,p1,p2):
         if p1[1] == p2[1]:
             # Straight line