diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 839bc3482e..3261998792 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -335,21 +335,44 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
 
 #ifdef ENABLE_AUTO_BED_LEVELING
 
-// Enable auto bed leveling at any 3 points that aren't colinear
-#define AUTO_BED_LEVELING_ANY_POINTS
+// There are 3 different ways to pick the X and Y locations to probe:
+// 1. Basic 3-point probe at left-back, left-front, and right-front corners of a rectangle
+// 2. Probe all points of a 2D lattice, defined by a rectangle and ACCURATE_BED_LEVELING_POINTS
+// 3. 3-point probe at 3 arbitrary points that don't form a line.
 
+// To enable mode 1:
+//   - #define ENABLE_AUTO_BED_LEVELING
+//   - Set the XXXX_PROBE_BED_POSITION values below
+//   - Don't define AUTO_BED_LEVELING_ANY_POINTS or ACCURATE_BED_LEVELING
+
+// To enable mode 2:
+//  - #define ENABLE_AUTO_BED_LEVELING
+//  - Set the XXXX_PROBE_BED_POSITION values below
+//  - #define ACCURATE_BED_LEVELING
+//  - Set the ACCURATE_BED_LEVELING_POINTS to your desired density
+
+// To enable mode 3:
+//  - #define ENABLE_AUTO_BED_LEVELING
+//  - #define AUTO_BED_LEVELING_ANY_POINTS
+//  - Set the ABL_PROBE_PT_XXXX values below
+//  - Comment out (undefine) ACCURATE_BED_LEVELING since that is incompatible
+
+
+
+// Mode 3: Enable auto bed leveling at any 3 points that aren't colinear
+// #define AUTO_BED_LEVELING_ANY_POINTS
 #ifdef AUTO_BED_LEVELING_ANY_POINTS
-  #define ABL_PROBE_PT_1_X -11
-  #define ABL_PROBE_PT_1_Y -15
-  #define ABL_PROBE_PT_2_X -11
+  #define ABL_PROBE_PT_1_X 15
+  #define ABL_PROBE_PT_1_Y 15
+  #define ABL_PROBE_PT_2_X 25
   #define ABL_PROBE_PT_2_Y 75
-  #define ABL_PROBE_PT_3_X 121
-  #define ABL_PROBE_PT_3_Y -15
-
-
+  #define ABL_PROBE_PT_3_X 125
+  #define ABL_PROBE_PT_3_Y 25
 #else // not AUTO_BED_LEVELING_ANY_POINTS
 
-  // these are the positions on the bed to do the probing
+  // Modes 1 & 2:
+  //   For mode 1, probing happens at left-back, left-front, and right-front corners
+  //   For mode 2, probing happens at lattice points within this rectangle (see ACCURATE_BED_LEVELING_POINTS)
   #define LEFT_PROBE_BED_POSITION 15
   #define RIGHT_PROBE_BED_POSITION 170
   #define BACK_PROBE_BED_POSITION 180
@@ -398,8 +421,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
   // with accurate bed leveling, the bed is sampled in a ACCURATE_BED_LEVELING_POINTSxACCURATE_BED_LEVELING_POINTS grid and least squares solution is calculated
   // Note: this feature occupies 10'206 byte
   #define ACCURATE_BED_LEVELING
-
+  // Mode 2 only
   #ifdef ACCURATE_BED_LEVELING
+    #ifdef AUTO_BED_LEVELING_ANY_POINTS
+      #error AUTO_BED_LEVELING_ANY_POINTS is incompatible with ACCURATE_BED_LEVELING
+    #endif
      // I wouldn't see a reason to go above 3 (=9 probing points on the bed)
     #define ACCURATE_BED_LEVELING_POINTS 2
   #endif
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 8a6542b1f2..b3f971a105 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1433,7 +1433,7 @@ void process_commands()
       break;
 
 #ifdef ENABLE_AUTO_BED_LEVELING
-    case 29: // G29 Detailed Z-Probe, probes the bed at 3 points.
+    case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points.
         {
             #if Z_MIN_PIN == -1
             #error "You must have a Z_MIN endstop in order to enable Auto Bed Leveling feature!!! Z_MIN_PIN must point to a valid hardware pin."
@@ -1463,6 +1463,7 @@ void process_commands()
 
             feedrate = homing_feedrate[Z_AXIS];
 #ifdef ACCURATE_BED_LEVELING
+            // probe at the points of a lattice grid
 
             int xGridSpacing = (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION) / (ACCURATE_BED_LEVELING_POINTS-1);
             int yGridSpacing = (BACK_PROBE_BED_POSITION - FRONT_PROBE_BED_POSITION) / (ACCURATE_BED_LEVELING_POINTS-1);
@@ -1545,6 +1546,7 @@ void process_commands()
 
 
   #ifdef AUTO_BED_LEVELING_ANY_POINTS
+            // Probe at 3 arbitrary points
             // probe 1
             float z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING);
 
@@ -1558,14 +1560,14 @@ void process_commands()
 
             set_bed_level_equation_any_pts(z_at_pt_1, z_at_pt_2, z_at_pt_3);
   #else // not AUTO_BED_LEVELING_ANY_POINTS
-
-            // prob 1
+            // probe at 3 corners of a rectangle
+            // probe 1
             float z_at_xLeft_yBack = probe_pt(LEFT_PROBE_BED_POSITION, BACK_PROBE_BED_POSITION, Z_RAISE_BEFORE_PROBING);
 
-            // prob 2
+            // probe 2
             float z_at_xLeft_yFront = probe_pt(LEFT_PROBE_BED_POSITION, FRONT_PROBE_BED_POSITION, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
 
-            // prob 3
+            // probe 3
             float z_at_xRight_yFront = probe_pt(RIGHT_PROBE_BED_POSITION, FRONT_PROBE_BED_POSITION, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
 
             clean_up_after_endstop_move();