diff --git a/config/example-extras.cfg b/config/example-extras.cfg
index 459e71f4f..256fa886b 100644
--- a/config/example-extras.cfg
+++ b/config/example-extras.cfg
@@ -377,6 +377,28 @@
 #   if retries are enabled then retry if largest and smallest probed points
 #   differ more than retry_tolerance
 
+# Printer Skew Correction.  It is possible to use software to correct
+# printer skew across 3 planes, xy, xz, yz.  This is done by printing
+# a calibration model along a plane and measuring three lengths.  See
+# skew_correction.md in the docs directory for more details.
+#
+#[skew_correction]
+#xy_ac_length:
+#xy_bd_length:
+#xy_ad_length:
+#   The measured lengths (in mm) on the xy plane skew calibration print.
+#   If one length is provided all three lengths must be provided.  The default
+#   is no measurement, which results in no skew correction along the xy plane.
+#xz_ac_length:
+#xz_bd_length:
+#xz_ad_length:
+#   The same as above, on the xz plane.  The default is no skew correction
+#   on the xz plane.
+#yz_ac_length:
+#yz_bd_length:
+#yz_ad_length:
+#   The same as above on the yz plane.  The default is no skew correction
+#   on the yz plane.
 
 # In a multi-extruder printer add an additional extruder section for
 # each additional extruder. The additional extruder sections should be
diff --git a/docs/G-Codes.md b/docs/G-Codes.md
index 3fcdd88ec..12b43fb47 100644
--- a/docs/G-Codes.md
+++ b/docs/G-Codes.md
@@ -468,3 +468,17 @@ of retraction required.
    parameters.
  - `G11`: Unretracts the extruder using the currently configured
    parameters.
+
+## Skew Correction
+
+The following commands are available when the "skew_correction" config
+section is enabled.
+  - `GET_CURRENT_SKEW`: Reports the current printer skew for each plane in
+    both radians and degrees.  The skew is calculated based on parameters
+    provided to the [skew_correction] section of printer.cfg.
+  - `CALC_MEASURED_SKEW [AC=<ac_length>] [BD=<bd_length>] [AD=<ad_length>]`:
+    Calculates and reports the skew (in radians and degrees) based on a
+    measured print.  This can be useful for determining the printer's current
+    skew after correction has been applied.  It may also be useful before
+    correction is applied to determine if skew correction is necessary.   See
+    skew_correction.md for details on skew calibration objects and measurements.
diff --git a/docs/img/skew_lengths.png b/docs/img/skew_lengths.png
new file mode 100644
index 000000000..3c646b0f0
Binary files /dev/null and b/docs/img/skew_lengths.png differ
diff --git a/docs/skew_correction.md b/docs/skew_correction.md
new file mode 100644
index 000000000..f6b7822ef
--- /dev/null
+++ b/docs/skew_correction.md
@@ -0,0 +1,52 @@
+Software based skew correction can help resolve dimensional inaccuracies
+resulting from a printer assembly that is not perfectly square.  Note
+that if your printer is significantly skewed it is strongy recommended to
+first use mechanical means to get your printer as square as possible prior
+to applying software based correction.
+
+# Print a Calibration Object
+The first step in correcting skew is to print a
+[calibration object](https://www.thingiverse.com/thing:2563185/files)
+along the plane you want to correct.  There is also a
+[calibration object](https://www.thingiverse.com/thing:2972743)
+that includes all planes in one model.  You want the object oriented
+so that corner A is toward the origin of the plane.
+
+Make sure that the [skew_correction] module is not enabled in printer.cfg
+prior to printing the calibration part.
+
+# Take your measurements
+The [skew_correcton] module requires 3 measurements for each plane you want
+to correct; the length from Corner A to Corner C, the length from Corner B
+to Corner D, and the length from corner A to corner D.  When measuring length
+AD do not include the flats on the corners that some test objects provide.
+
+![skew_lengths](img/skew_lengths.png)
+
+# Update printer.cfg
+Enter your lengths for the calibration print corresponding to the correct
+plane under the [skew_correction] section in printer.cfg, for example:
+```
+[skew_correction]
+xy_ac_length: 140.4
+xy_bd_length: 142.8
+xy_ad_length: 99.8
+```
+Restart your printer.  If desired, you can reprint the calibration part
+with skew correction enabled. The following gcode can be used to calculate
+skew of a single plane and output the results:
+
+```
+CALC_MEASURED_SKEW AC=<ac_length> BD=<bd_length> AD=<ad_length>
+```
+
+# Caveats
+
+When using the [skew_correction] module it is suggested to home all axes
+before attempting a move.  Homing a single axis to move could result in a
+correction along the x and/or y axis, potentially leading to a homing error.
+
+It is also important to keep in mind that it is possible for [skew_correction]
+to generate a correction that moves the tool beyond the printer's boundries
+on the X and/or Y axes.  It is recommended to arrange parts away from the
+edges when using [skew_correction].