diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 07ff17b8655aaf964fe9fce8b2c01195fd84de47..7850e884018067cb31d84d652c8d58dce62ba28d 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -1206,6 +1206,7 @@ DairyRestraintsSetting($dairyRestraintsSetting)
 <<set $one_time_age_overrides_pedo_mode = 0>>
 <<set $activeSlaveOneTimeMinAge = 0>>
 <<set $activeSlaveOneTimeMaxAge = 999>>
+<<set $oneTimeDisableDisability = 0>>
 <<set $targetAge = $minimumSlaveAge>>
 <<set $pubertyLength = 5>>
 <<set $maxGrowthAge = 24>>
diff --git a/src/js/slaveGenerationJS.tw b/src/js/slaveGenerationJS.tw
index dda6d8d217e51e0f0522a793a909ad58cb7b5741..66c7e332feac5d7d6ce229354b185a7ca431e959 100644
--- a/src/js/slaveGenerationJS.tw
+++ b/src/js/slaveGenerationJS.tw
@@ -1262,3 +1262,41 @@ window.randomizeAttraction = function randomizeAttraction(slave) {
 	slave.attrXX = Math.clamp(slave.attrXX + jsRandom(-5, 5), 0, 100);
 	slave.attrXY = Math.clamp(slave.attrXY + jsRandom(-5, 5), 0, 100);
 };
+
+window.disabilityRoll = function disabilityRoll(slave) {
+	const V = State.variables;
+	let disList = [];
+	disList.push("hearNot");
+	disList.push("seeNot");
+	disList.push("speakNot");
+	let disableCount = 0;
+	if (V.oneTimeDisableDisability === 0) {
+		while (disList.length > 0) {
+			let rolled jsEither(disList);
+			switch (rolled) {
+			case "hearNot":
+				if ((jsRandom(1,100)-(disableCount*2)) > 90) {
+					slave.hears = -2;
+				}
+				removeFromArray(disList, hearNot);
+				disableCount++;
+				break;
+			case "seeNot":
+				if ((jsRandom(1,100)-(disableCount*2)) > 90) {
+					slave.eyes = -2;
+				}
+				removeFromArray(disList, seeNot);
+				disableCount++;
+				break;
+			case "speakNot":
+				if ((jsRandom(1,100)-(disableCount*2)) > 90) {
+					slave.voice = 0;
+				}
+				removeFromArray(disList, speakNot);
+				disableCount++;
+				break;
+			}
+		}
+	}
+	V.oneTimeDisableDisability = 0;
+};
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index cbf4286770b170923761ae50ab8bc1b1c24504b5..433961d34f97b388c43ac6bc20581ce12c9976b2 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -709,6 +709,9 @@
 <<if ndef $activeSlaveOneTimeMaxAge>>
 	<<set $activeSlaveOneTimeMaxAge = 999>>
 <</if>>
+<<if ndef $oneTimeDisableDisability>>
+	<<set $oneTimeDisableDisability = 0>>
+<</if>>
 <<if ndef $AgePenalty>>
 	<<set $AgePenalty = 1>>
 <</if>>
diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw
index 8237e9b77f48ee02174666f039ca595933032338..4267a695385a64229828212380f0dff7d1aeee9b 100644
--- a/src/uncategorized/generateXXSlave.tw
+++ b/src/uncategorized/generateXXSlave.tw
@@ -183,13 +183,8 @@
 	<<set $activeSlave.waist = random(50,100)>>
 <</if>>
 
-<<if ($activeSlave.physicalAge > random(0,100))>>
+<<if ($activeSlave.physicalAge > random(30,100))>>
 	<<set $activeSlave.eyes = -1>>
-	<<if random(0,100) > 90>>
-		<<if setup.gratefulCareers.includes($activeSlave.career)>>
-			<<set $activeSlave.eyes = -2>>
-		<</if>>
-	<</if>>
 <</if>>
 <<if ($activeSlave.physicalAge > random(30,100))>>
 	<<set $activeSlave.hears = -1>>
@@ -518,3 +513,5 @@
 	<</if>>
 	<</if>>
 <</if>>
+
+<<run disabilityRoll($activeSlave)>>
diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw
index 7537f1e26d42c9013d5ded3853d5fab81da7fd06..895accc6d324d32244816f146327d25e13f4ffd1 100644
--- a/src/uncategorized/generateXYSlave.tw
+++ b/src/uncategorized/generateXYSlave.tw
@@ -91,19 +91,15 @@
 <<set $activeSlave.devotion = random(-90,-60)>>
 <<set $activeSlave.trust = random(-45,-25)>>
 
-/% Begin height replacement section. %/
-<<if ($activeSlave.physicalAge > random(0,100))>>
+<<if ($activeSlave.physicalAge > random(30,100))>>
 	<<set $activeSlave.eyes = -1>>
-	<<if random(0,100) > 90>>
-		<<if setup.gratefulCareers.includes($activeSlave.career)>>
-			<<set $activeSlave.eyes = -2>>
-		<</if>>
-	<</if>>
 <</if>>
 <<if ($activeSlave.physicalAge > random(30,100))>>
 	<<set $activeSlave.hears = -1>>
 <</if>>
 
+/% Begin height replacement section. %/
+
 /% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/
 <<if $fixedRace == 0>>
 	<<if $fixedNationality == 0>>
@@ -680,3 +676,5 @@
 	<</if>>
 	<</if>>
 <</if>>
+
+<<run disabilityRoll($activeSlave)>>