diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw
index 029db52dbd097f97120ad237350cb3289c97adc4..2b7898375cc748996444775ba45d740cbae7d5b7 100644
--- a/src/js/DefaultRules.tw
+++ b/src/js/DefaultRules.tw
@@ -1769,6 +1769,18 @@ window.DefaultRules = (function() {
 			}
 		}
 
+		if (rule.haircuts !== undefined && (rule.haircuts !== "no default setting")) {
+			if (slave.bald != 1) {
+				if (rule.haircuts === 1 && slave.haircuts !== 1) {
+					r += `<br>${slave.slaveName}'s hair will now be maintained at ${lengthToEitherUnit(slave.hLength)} long.`;
+					slave.haircuts = 1;
+				} else if (rule.haircuts === 0 && slave.haircuts !== 0) {
+					r += `<br>${slave.slaveName}'s hair length will no longer be maintained.`;
+					slave.haircuts = 0;
+				}
+			}
+		}
+
 		if (rule.pubicHColor !== undefined && (rule.pubicHColor !== "no default setting")) {
 			if (slave.pubicHStyle != "bald" && slave.pubicHStyle != "hairless") {
 				if ((slave.pubicHColor !== rule.pubicHColor)) {
diff --git a/src/js/rulesAssistant.tw b/src/js/rulesAssistant.tw
index 3e0d87f0bdf7b998eebed3f43bfeb22f68b3fe88..c7fcfe7abf3e4eace950ebf7b9140f69f8c5c81e 100644
--- a/src/js/rulesAssistant.tw
+++ b/src/js/rulesAssistant.tw
@@ -208,6 +208,7 @@ window.emptyDefaultRule = function emptyDefaultRule() {
 			nails: "no default setting",
 			hColor: "no default setting",
 			hLength: "no default setting",
+			haircuts: "no default setting",
 			hStyle: "no default setting",
 			pubicHColor: "no default setting",
 			pubicHStyle: "no default setting",
diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw
index 501d897b1bd3ef193f815cfa2d5feea2644a4e01..dd4a98aa105dc16bfd7224fd42bd2e9fc77bf06a 100644
--- a/src/js/rulesAssistantOptions.tw
+++ b/src/js/rulesAssistantOptions.tw
@@ -969,6 +969,7 @@ window.rulesAssistantOptions = (function() {
 			this.appendChild(new MakeupList());
 			this.appendChild(new NailsList());
 			this.appendChild(new HairLengthList());
+			this.appendChild(new HaircutsList());
 			this.appendChild(new HairColourList());
 			this.appendChild(new HairStyleList());
 			this.appendChild(new PubicHairColourList());
@@ -2076,6 +2077,20 @@ window.rulesAssistantOptions = (function() {
 			this.onchange = (value) => current_rule.set.hLength = value;
 		}
 	}
+
+	class HaircutsList extends List {
+		constructor() {
+			const pairs = [
+				["no default setting"],
+				["maintain hair length", 1],
+				["do not maintain hair length", 0]
+			];
+			super("Hair length maintenance", pairs);
+			this.setValue(current_rule.set.haircuts);
+			this.onchange = (value) => current_rule.set.haircuts = value;
+		}
+	}
+
 	class HairColourList extends List {
 		constructor() {
 			const pairs = [
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 7ce96339b6c17c98706d1b3471f98afe8f377748..87c736cf6b95d1689b18f463c83c281344cb1d36 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -2945,3 +2945,7 @@ Done!
 	if (x.set.preg === -1) x.set.preg = true;
 	else x.set.preg = false;
 })>>
+
+<<run $defaultRules.filter(x => !([1, 0, "no default setting"].includes(x.set.haircuts))).forEach(x => {
+	x.set.haircuts = "no default setting";
+})>>
diff --git a/src/uncategorized/initRules.tw b/src/uncategorized/initRules.tw
index 2dc97f98aaeb64670811464707fb82fd24bea6c0..aaf8c51768ee4e10d5c1dc0409c37c5d5d6c9c96 100644
--- a/src/uncategorized/initRules.tw
+++ b/src/uncategorized/initRules.tw
@@ -47,6 +47,7 @@
 	nails: "no default setting",
 	hColor: "no default setting",
 	hLength: "no default setting",
+	haircuts: "no default setting",
 	hStyle: "no default setting",
 	pubicHColor: "no default setting",
 	pubicHStyle: "no default setting",
@@ -169,6 +170,7 @@
 	nails: "no default setting",
 	hColor: "no default setting",
 	hLength: "no default setting",
+	haircuts: "no default setting",
 	hStyle: "no default setting",
 	pubicHColor: "no default setting",
 	pubicHStyle: "no default setting",