From dfbc6be31b7d286f877078c2ae0905627deadb15 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Tue, 7 Feb 2023 11:44:37 -0500
Subject: [PATCH] add 3 new gene mods + 1 new genetic quirk

---
 CHANGELOG.md                                  |   4 +
 js/003-data/gameVariableData.js               |  14 ++-
 js/003-data/slaveGeneData.js                  |  56 +++++++++
 js/medicine/surgery/exotic/treatment.js       |  78 +++++++++++-
 .../backwardsCompatibility/datatypeCleanup.js |   4 +-
 .../updateSlaveObject.js                      |   5 +-
 src/endWeek/economics/persBusiness.js         |   2 +
 src/endWeek/nextWeek/nextWeek.js              |   5 +-
 src/endWeek/player/prDiet.js                  |  55 +++++----
 src/endWeek/player/prLongTermEffects.js       |   5 +-
 .../player/prLongTermPhysicalEffects.js       |   5 +-
 src/endWeek/player/prMobility.js              |   8 ++
 src/endWeek/player/prPregnancy.js             |  17 +++
 src/endWeek/reports/clinicReport.js           |   2 +-
 src/endWeek/reports/spaReport.js              |  28 +++++
 src/endWeek/saAgent.js                        |   3 +
 src/endWeek/saDiet.js                         |  57 ++++-----
 src/endWeek/saGetMilked.js                    |  33 ++++-
 src/endWeek/saLongTermEffects.js              |   4 +-
 src/endWeek/saLongTermPhysicalEffects.js      |  11 +-
 src/endWeek/saPregnancy.js                    |  13 ++
 src/endWeek/saRewardAndPunishment.js          |  37 +++++-
 src/endWeek/saSharedVariables.js              |   4 +
 src/endWeek/slaveAssignmentReport.js          |  20 ++-
 src/events/RESS/review/diet.js                |   2 +-
 src/facilities/geneLab.js                     |  14 +++
 .../surgery/surgeryPassageExotic.js           |  48 ++++++--
 src/interaction/main/fcnn.js                  |   5 +
 src/interaction/main/mainLinks.js             |   6 +-
 src/js/SlaveState.js                          |  30 ++++-
 src/js/birth/birth.js                         |  16 ++-
 src/js/economyJS.js                           |  27 +++++
 src/js/pregJS.js                              |  33 ++++-
 src/js/statsChecker/statsChecker.js           |   8 ++
 src/js/storyJS.js                             |  49 +++++---
 src/js/utilsPC.js                             |   4 +-
 src/js/utilsSlave.js                          |   3 +
 src/js/wombJS.js                              |   2 +-
 src/npc/descriptions/boobs/boobs.js           |   4 +-
 src/npc/descriptions/crotch/dick.js           | 114 ++++++++++++++++--
 src/npc/descriptions/crotch/vagina.js         |   9 ++
 src/npc/descriptions/descriptionWidgets.js    |  21 ++--
 src/npc/descriptions/style/hair.js            |  20 +++
 src/npc/descriptions/womb/pregnancy.js        |   4 +-
 src/npc/generate/generateGenetics.js          |  49 +++++++-
 src/npc/generate/generateNewSlaveJS.js        |   9 ++
 src/npc/generate/heroCreator.js               |  16 +--
 src/npc/interaction/fFeelings.js              |   6 +
 src/player/desc/pLongBelly.js                 |   6 +-
 src/player/desc/pLongBoobs.js                 |   8 +-
 src/player/desc/pLongButt.js                  |   8 ++
 src/player/desc/pLongCrotch.js                |  69 +++++++++--
 src/player/js/PlayerState.js                  |  23 +++-
 src/pregmod/blackMarket.js                    |  77 +++++++++++-
 54 files changed, 991 insertions(+), 169 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index b477f4b8f94..0fe5624e8a8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 
 ## Unreleased
 
+* added isVirile() function
+* vasectomies cut sperm release
+* fixes
+
 ## 0.10.7.1-4.0.0-alpha.23 - 2023-01-15
 
 * Fix issue related to function names not being camalCase.
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index cf60c7d28f6..2bfe255594e 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -343,6 +343,8 @@ App.Data.illegalWares = [
 	"childhoodFertilityInducedNCS",
 	"PGHack",
 	"RapidCellGrowthFormula",
+	"optimizedSpermFormula",
+	"optimizedBreedingFormula",
 	"sympatheticOvaries",
 	"UterineRestraintMesh",
 ];
@@ -1290,15 +1292,21 @@ App.Data.resetOnNGPlus = {
 	/* prosthetics: {research: int, amount: int} */
 	prosthetics: {},
 
+	/* Black Market */
 	merchantFSWares: App.Data.FSWares,
 	merchantIllegalWares: App.Data.illegalWares,
-	RapidCellGrowthFormula: 0,
-	immortalityFormula: 0,
-	bioEngineeredFlavoringResearch: 0,
 	UterineRestraintMesh: 0,
 	PGHack: 0,
 	BlackmarketPregAdaptation: 0,
 
+	/* Gene Mods */
+	RapidCellGrowthFormula: 0,
+	immortalityFormula: 0,
+	bioEngineeredFlavoringResearch: 0,
+	optimizedSpermFormula: 0,
+	enhancedProductionFormula: 0,
+	optimizedBreedingFormula: 0,
+
 	/* Medical Pavilion */
 	doctor: {
 		state: 0, // controls introduction
diff --git a/js/003-data/slaveGeneData.js b/js/003-data/slaveGeneData.js
index 63603d59db8..5e9abbb4378 100644
--- a/js/003-data/slaveGeneData.js
+++ b/js/003-data/slaveGeneData.js
@@ -83,6 +83,14 @@ App.Data.geneticQuirks = new Map([
 			restricted: true
 		}
 	],
+	["potent",
+		{
+			title: "potency",
+			abbreviation: "ptnt",
+			goodTrait: true,
+			description: "a heightened impregnation rate"
+		}
+	],
 	["fertility",
 		{
 			title: "fertility",
@@ -121,6 +129,14 @@ App.Data.geneticQuirks = new Map([
 			description: "pleasurable pregnancy and orgasmic birth"
 		}
 	],
+	["bustSize",
+		{
+			title: "",
+			abbreviation: "",
+			description: "",
+			restricted: true
+		}
+	],
 	["macromastia",
 		{
 			title: "macromastia",
@@ -188,6 +204,14 @@ App.Data.geneticQuirks = new Map([
 			description: "constant muscle loss"
 		}
 	],
+	["twinning",
+		{
+			title: "twinning",
+			abbreviation: "twns",
+			description: "ova split when space permits",
+			restricted: true
+		}
+	],
 	["girlsOnly",
 		{
 			title: "girls only",
@@ -224,6 +248,38 @@ App.Data.geneticMods = new Map([
 			description: "slave stops aging. Can still die of other causes."
 		},
 	],
+	["flavoring",
+		{
+			title: "flavored milk",
+			abbreviation: "fmilk",
+			goodTrait: true,
+			description: "altered milk flavor"
+		},
+	],
+	["aggressiveSperm",
+		{
+			title: "enhanced potency",
+			abbreviation: "pot",
+			goodTrait: true,
+			description: "sperm optimization treatment"
+		},
+	],
+	["livestock",
+		{
+			title: "production optimization",
+			abbreviation: "lvstck",
+			goodTrait: true,
+			description: "production optimization treatment"
+		},
+	],
+	["progenitor",
+		{
+			title: "progenitor",
+			abbreviation: "prgntr",
+			goodTrait: true,
+			description: "breeding optimization treatment"
+		},
+	],
 ]);
 
 App.Data.milk = {
diff --git a/js/medicine/surgery/exotic/treatment.js b/js/medicine/surgery/exotic/treatment.js
index c0ed5c9ae41..5e408ce8ac9 100644
--- a/js/medicine/surgery/exotic/treatment.js
+++ b/js/medicine/surgery/exotic/treatment.js
@@ -87,7 +87,7 @@ App.Medicine.Surgery.Procedures.milkFlavoring = class extends App.Medicine.Surge
 
 	get description() {
 		const {his} = getPronouns(this.originalSlave);
-		return `This will alter ${his} genetics to allow flavored milk`;
+		return `this will alter ${his} genetics to allow flavored milk`;
 	}
 
 	get cost() {
@@ -99,12 +99,88 @@ App.Medicine.Surgery.Procedures.milkFlavoring = class extends App.Medicine.Surge
 	}
 
 	apply(cheat) {
+		this._slave.geneMods.flavoring = 1;
 		this._slave.milkFlavor = "natural";
 		this._slave.chem += 100;
 		return this._assemble(new App.Medicine.Surgery.Reactions.GeneTreatment());
 	}
 };
 
+App.Medicine.Surgery.Procedures.OptimizedSpermTreatment = class extends App.Medicine.Surgery.Procedure {
+	get name() {
+		return "Optimized sperm treatment";
+	}
+
+	get description() {
+		const {his} = getPronouns(this.originalSlave);
+		return `this will alter ${his} genetic code to encourage ${his} body to produce far more aggressive sperm cells`;
+	}
+
+	get cost() {
+		return super.cost * 4;
+	}
+
+	get healthCost() {
+		return 40;
+	}
+
+	apply(cheat) {
+		this._slave.geneMods.aggressiveSperm = 1;
+		this._slave.chem += 100;
+		return this._assemble(new App.Medicine.Surgery.Reactions.GeneTreatment());
+	}
+};
+
+App.Medicine.Surgery.Procedures.EnhancedProductionTreatment = class extends App.Medicine.Surgery.Procedure {
+	get name() {
+		return "Enhanced production treatment";
+	}
+
+	get description() {
+		const {his} = getPronouns(this.originalSlave);
+		return `this will alter ${his} genetic code to encourage ${his} body to produce larger volumes of sellable resources`;
+	}
+
+	get cost() {
+		return super.cost * 4;
+	}
+
+	get healthCost() {
+		return 40;
+	}
+
+	apply(cheat) {
+		this._slave.geneMods.livestock = 1;
+		this._slave.chem += 100;
+		return this._assemble(new App.Medicine.Surgery.Reactions.GeneTreatment());
+	}
+};
+
+App.Medicine.Surgery.Procedures.OptimizedBreedingTreatment = class extends App.Medicine.Surgery.Procedure {
+	get name() {
+		return "Optimized breeding treatment";
+	}
+
+	get description() {
+		const {his} = getPronouns(this.originalSlave);
+		return `this will alter ${his} genetic code to encourage ${his} body to be far more efficient at bearing children`;
+	}
+
+	get cost() {
+		return super.cost * 4;
+	}
+
+	get healthCost() {
+		return 40;
+	}
+
+	apply(cheat) {
+		this._slave.geneMods.progenitor = 1;
+		this._slave.chem += 100;
+		return this._assemble(new App.Medicine.Surgery.Reactions.GeneTreatment());
+	}
+};
+
 
 App.Medicine.Surgery.Procedures.RemoveGene = class extends App.Medicine.Surgery.Procedure {
 	/**
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index 8ee0bac518a..48f8a1fb664 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -582,7 +582,7 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 			// should never get here, but if it does, just immediately abort!
 			slave.boobsMilk = 0;
 		}
-		slave.lactationAdaptation = Math.clamp(+slave.lactationAdaptation, 0, 100) || 0;
+		slave.lactationAdaptation = Math.clamp(+slave.lactationAdaptation, 0, 200) || 0;
 	}
 
 	/**
@@ -1325,7 +1325,7 @@ globalThis.PCDatatypeCleanup = (function PCDatatypeCleanup() {
 			// should never get here, but if it does, just immediately abort!
 			PC.boobsMilk = 0;
 		}
-		PC.lactationAdaptation = Math.clamp(+PC.lactationAdaptation, 0, 100) || 0;
+		PC.lactationAdaptation = Math.clamp(+PC.lactationAdaptation, 0, 200) || 0;
 	}
 
 	/**
diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js
index 0cc826e3bd5..23cfd18dde5 100644
--- a/src/data/backwardsCompatibility/updateSlaveObject.js
+++ b/src/data/backwardsCompatibility/updateSlaveObject.js
@@ -100,11 +100,14 @@ App.Update.Slave = function(slave, genepool = false) {
 		}
 	}
 	if (slave.genetics !== undefined) { delete slave.genetics; }
-	slave.geneMods = Object.assign({NCS: 0, rapidCellGrowth: 0, immortality: 0, bioEngineeredMilkFlavoring: 0}, slave.geneMods);
+	slave.geneMods = Object.assign({NCS: 0, rapidCellGrowth: 0, immortality: 0, flavoring: 0, aggressiveSperm: 0, livestock: 0, progenitor: 0}, slave.geneMods);
 	if (slave.inducedNCS !== undefined) {
 		slave.geneMods.NCS = slave.inducedNCS;
 		delete slave.inducedNCS;
 	}
+	if (slave.geneMods.bioEngineeredMilkFlavoring !== undefined) {
+		delete slave.geneMods.bioEngineeredMilkFlavoring;
+	}
 	if (slave.milkFlavor === undefined) { slave.milkFlavor = "none"; }
 	if (slave.PCSlutContacts !== undefined) { delete slave.PCSlutContacts; }
 	if (slave.superfetation !== undefined) { delete slave.superfetation; }
diff --git a/src/endWeek/economics/persBusiness.js b/src/endWeek/economics/persBusiness.js
index 004de45cc05..47093064854 100644
--- a/src/endWeek/economics/persBusiness.js
+++ b/src/endWeek/economics/persBusiness.js
@@ -95,6 +95,8 @@ App.EndWeek.personalBusiness = function() {
 			r.push(`You focus on getting ready to give birth this week; when it happens, you want to be prepared.`);
 		} else if (isInduced(V.PC)) {
 			r.push(`This week, you focus on your labor and the impending birth of your ${V.PC.pregType > 1 ? "children" : "child"}.`);
+		} else if (PC.geneMods.rapidCellGrowth !== 1 && PC.bellyPreg >= 100000 && PC.belly > (PC.pregAdaptation * 3200) && (PC.bellyPreg >= 500000 || PC.wombImplant !== "restraint")) {
+			r.push(`You're stuck in bed waiting to pop. Hopefully this means giving birth, and not the alternative.`);
 		}
 	} else if (V.personalAttention.task === PersonalAttention.WHORING) {
 		whoring();
diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js
index 9d68d114839..9b0138073b5 100644
--- a/src/endWeek/nextWeek/nextWeek.js
+++ b/src/endWeek/nextWeek/nextWeek.js
@@ -46,6 +46,9 @@ App.EndWeek.nextWeek = function() {
 			}
 		}
 	}
+	if (V.PC.geneMods.progenitor === 1 && canGetPregnant(V.PC)) { // Progenitor mod causes ovarian burnout if not put to use.
+		V.PC.ovaryAge += 0.4;
+	}
 	if (V.PC.majorInjury > 0) {
 		V.PC.majorInjury--;
 	}
@@ -249,7 +252,7 @@ App.EndWeek.nextWeek = function() {
 		slave.skill.whoring = Math.clamp(slave.skill.whoring.toFixed(1), 0, 100);
 		slave.skill.entertainment = Math.clamp(slave.skill.entertainment.toFixed(1), 0, 100);
 		slave.skill.combat = Math.clamp(slave.skill.combat.toFixed(1), 0, 100);
-		slave.lactationAdaptation = Math.clamp(slave.lactationAdaptation.toFixed(1), 0, 100);
+		slave.lactationAdaptation = Math.clamp(slave.lactationAdaptation.toFixed(1), 0, 200);
 		slave.intelligenceImplant = Math.clamp(slave.intelligenceImplant.toFixed(1), -15, 30);
 		slave.prematureBirth = 0;
 		if (V.HGSuiteEquality === 1 && V.HeadGirlID !== 0 && slave.devotion > 50) {
diff --git a/src/endWeek/player/prDiet.js b/src/endWeek/player/prDiet.js
index f470ac257de..1c5b52927c1 100644
--- a/src/endWeek/player/prDiet.js
+++ b/src/endWeek/player/prDiet.js
@@ -12,6 +12,7 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 	const boobSize = PC.boobs - PC.boobsImplant - PC.boobsMilk;
 	const buttSize = PC.butt - PC.buttImplant;
 	const ballSize = PC.balls - PC.ballsImplant;
+	const weightDirection = (PC.geneticQuirks.wLoss === 2 || PC.geneticQuirks.wGain === 2 || PC.geneMods.livestock === 0) ? PC.weightDirection : 1;
 
 	if (canEatFood(PC)) {
 		playerFoodEffects();
@@ -30,10 +31,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				break;
 			case "restricted":
 				weightLoss = 4;
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight -= (weightLoss + 3);
 					r.push(`You stick to a strict diet, <span class="change positive">losing a lot of weight.</span>`);
-				} else if (PC.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					PC.weight -= (weightLoss - 3);
 					r.push(`Despite sticking to a strict diet, <span class="change positive">you barely lose any weight.</span>`);
 				} else {
@@ -49,10 +50,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				break;
 			case "fattening": // weight gain
 				weightGain = 7;
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight += (weightGain - 3);
 					r.push(`Despite gorging yourself constantly during your day, you <span class="change positive">only put on a little weight.</span>`);
-				} else if (PC.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					PC.weight += (weightGain + 3);
 					r.push(`You eat near constantly during your waking hours, gorging yourself and <span class="change positive">putting on a lot of weight.</span>`);
 				} else {
@@ -123,10 +124,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 		switch (PC.diet) {
 			case "restricted": // weight loss
 				weightLoss = 5 + (V.feeder * 2);
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight -= (weightLoss + 3);
 					r.push(`You stick to a strict diet, <span class="change positive">losing a lot of weight.</span>`);
-				} else if (PC.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					PC.weight -= (weightLoss - 3) - (V.feeder);
 					r.push(`Despite sticking to a strict diet, <span class="change positive">you barely lose any weight.</span>`);
 				} else {
@@ -142,10 +143,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				break;
 			case "fattening": // weight gain
 				weightGain = 5 + (V.feeder * 2);
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight += Math.max((weightGain - 3) - (V.feeder), 1);
 					r.push(`Despite gorging yourself on extra food throughout the day, you <span class="change positive">only put on a little weight.</span>`);
-				} else if (PC.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					PC.weight += weightGain + 3;
 					r.push(`You take extra meals throughout the day, gorging yourself and <span class="change positive">putting on a lot of weight.</span>`);
 				} else {
@@ -167,9 +168,9 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				} else if (PC.weight > 10) {
 					weightShift = -(V.feeder + 1);
 				}
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight += (weightShift - random(0, 1));
-				} else if (PC.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					PC.weight += (weightShift + random(0, 1));
 				} else {
 					PC.weight += weightShift;
@@ -269,10 +270,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 			case "XX": // Female Hormones
 				r.push(`You make an exception for female hormones to be added to your diet, however${V.feeder === 1 ? ", with support from the upgraded kitchen" : ""}.`);
 				if ((PC.ovaries === 1 || PC.mpreg === 1) && PC.balls > 0) { // herm
-					if (PC.weight < (30 - (V.feeder * 20)) && PC.weightDirection !== -1) {
+					if (PC.weight < (30 - (V.feeder * 20)) && weightDirection !== -1) {
 						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
 						PC.weight += 1;
-						if (PC.weightDirection === 1) {
+						if (weightDirection === 1) {
 							PC.weight += 2;
 						}
 					}
@@ -297,10 +298,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 						PC.balls -= 1;
 					}
 				} else if (PC.ovaries === 1 || PC.mpreg === 1) { // female
-					if (PC.weight < (40 - (V.feeder * 15)) && PC.weightDirection !== 1) {
+					if (PC.weight < (40 - (V.feeder * 15)) && weightDirection !== 1) {
 						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
 						PC.weight += 1;
-						if (PC.weightDirection === 1) {
+						if (weightDirection === 1) {
 							PC.weight += 2;
 						}
 					}
@@ -317,10 +318,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 						PC.butt += 1;
 					}
 				} else if (PC.balls > 0) { // male
-					if (PC.weight < (30 - (V.feeder * 10)) && PC.weightDirection !== 1) {
+					if (PC.weight < (30 - (V.feeder * 10)) && weightDirection !== 1) {
 						r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
 						PC.weight += 1;
-						if (PC.weightDirection === 1) {
+						if (weightDirection === 1) {
 							PC.weight += 2;
 						}
 					}
@@ -445,10 +446,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 					r.push(`You feel stronger, an observation supported by your <span class="change positive">growing muscles.</span>`);
 					PC.muscles += 1 + V.feeder + PC.geneticQuirks.mGain;
 				}
-				if (PC.weight < 50 && PC.weightDirection !== -1) {
+				if (PC.weight < 50 && weightDirection !== -1) {
 					r.push(`You <span class="change positive">gain a little weight</span> in all the right places.`);
 					PC.weight += 1;
-					if (PC.weightDirection === 1) {
+					if (weightDirection === 1) {
 						PC.weight += 2;
 					}
 				}
@@ -658,10 +659,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
 				improveCondition(PC, 10);
 			}
-			if (PC.weight > 10 && PC.weightDirection !== 1) {
+			if (PC.weight > 10 && weightDirection !== 1) {
 				r.push(`Unsurprisingly, the heavy workouts also <span class="change positive">burn off some excess fat.</span>`);
 				PC.weight -= 2;
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight -= 2;
 				}
 			}
@@ -743,10 +744,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
 				improveCondition(PC, 10);
 			}
-			if (PC.weight > 10 && PC.weightDirection !== 1) {
+			if (PC.weight > 10 && weightDirection !== 1) {
 				r.push(`Unsurprisingly, the workouts also <span class="change positive">burn off some excess fat.</span>`);
 				PC.weight -= 2;
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight -= 2;
 				}
 			}
@@ -780,10 +781,10 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				r.push(`You <span class="health inc">feel better</span> after a successful workout.`);
 				improveCondition(PC, 5);
 			}
-			if (PC.weight > 10 && PC.weightDirection !== 1) {
+			if (PC.weight > 10 && weightDirection !== 1) {
 				r.push(`Unsurprisingly, the workouts also <span class="change positive">burn off some excess fat.</span>`);
 				PC.weight -= 2;
-				if (PC.weightDirection === -1) {
+				if (weightDirection === -1) {
 					PC.weight -= 2;
 				}
 			}
@@ -880,7 +881,7 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 			}
 		}
 		if (!["fattening", "restricted", "slimming"].includes(PC.diet)) {
-			if (PC.weightDirection === -1 && PC.weight > -100) {
+			if (weightDirection === -1 && PC.weight > -100) {
 				if (V.geneticMappingUpgrade >= 1) {
 					r.push(`Your body <span class="lime">aggressively burns fat</span> due to your`);
 					if (PC.geneticQuirks.wGain === 2 && PC.geneticQuirks.wLoss === 2) {
@@ -890,7 +891,7 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 					}
 				}
 				PC.weight = Math.clamp(PC.weight - 3, -100, 200);
-			} else if (PC.weightDirection === 1 && PC.weight < 200) {
+			} else if (weightDirection === 1 && PC.geneticQuirks.wGain === 2 && PC.weight < 200) {
 				if (V.geneticMappingUpgrade >= 1) {
 					r.push(`Your body <span class="lime">aggressively stores fat</span> due to your`);
 					if (PC.geneticQuirks.wGain === 2 && PC.geneticQuirks.wLoss === 2) {
@@ -904,6 +905,8 @@ App.EndWeek.Player.diet = function(PC = V.PC) {
 				r.push(`There is too much delicious food, and little of it healthy, available to you as you tour your domain. A little snacking here and there isn't a problem, but to do so to this extent <span class="lime">pads out your waistline</span> and can get out of hand fast if not kept tabs on.`);
 				PC.weight++;
 			}
+		} else if (PC.geneMods.livestock === 1) {
+			r.push(`The gene therapy to boost your productivity has a side effect of weight gain, but it really feels like it's just trying to <class="lime">fatten you up for wholesale.</span>`);
 		}
 	}
 };
diff --git a/src/endWeek/player/prLongTermEffects.js b/src/endWeek/player/prLongTermEffects.js
index 4ac5dea9dac..bf185a061cd 100644
--- a/src/endWeek/player/prLongTermEffects.js
+++ b/src/endWeek/player/prLongTermEffects.js
@@ -16,6 +16,7 @@ App.EndWeek.Player.longTermEffects = function(PC = V.PC) {
 	if (PC.pubertyXX === 0 || PC.pubertyXY === 0) {
 		puberty();
 	}
+	// Period stuff will go here, remember progenitor mod causes periods to be heavy.
 	r.push(App.EndWeek.Player.pregnancy());
 	if (PC.bellyFluid >= 100) {
 		r.push(App.EndWeek.Player.inflation());
@@ -788,7 +789,7 @@ App.EndWeek.Player.longTermEffects = function(PC = V.PC) {
 			} else if (WombBirthReady(PC, PC.pregData.normalBirth) > 0 && (random(1, 100) > 50)) {
 				// check for really ready fetuses - 40 weeks - normal
 				startLabor(PC);
-			} else if (WombBirthReady(PC, PC.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90)) {
+			} else if (WombBirthReady(PC, PC.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90) && PC.geneMods.progenitor !== 1) {
 				// check for really ready fetuses - 36 weeks minimum
 				startLabor(PC);
 			}
@@ -833,7 +834,7 @@ App.EndWeek.Player.longTermEffects = function(PC = V.PC) {
 					}
 				}
 				miscarriageChance = Math.round(miscarriageChance);
-				if (miscarriageChance > random(0, 100)) {
+				if (miscarriageChance > random(0, 100) && slave.geneMods.progenitor !== 1) {
 					const chance = random(1, 100);
 					if (PC.preg >= PC.pregData.normalBirth / 1.33) {
 						startLabor(PC);
diff --git a/src/endWeek/player/prLongTermPhysicalEffects.js b/src/endWeek/player/prLongTermPhysicalEffects.js
index e141c20d201..51fc6ae2463 100644
--- a/src/endWeek/player/prLongTermPhysicalEffects.js
+++ b/src/endWeek/player/prLongTermPhysicalEffects.js
@@ -867,6 +867,9 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) {
 				}
 			}
 		}
+		if (PC.lactation > 0 && PC.geneMods.livestock === 1 && PC.lactationAdaptation < 200) {
+			PC.lactationAdaptation = Math.min(PC.lactationAdaptation + 4, 200);
+		}
 	}
 
 	function boobsEffects() {
@@ -926,7 +929,7 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) {
 	}
 
 	function bellyEffects() {
-		if (PC.pregAdaptation > 40 && (PC.belly < 5000 && PC.preg < 1 && PC.pregWeek === 0) && PC.geneticQuirks.uterineHypersensitivity !== 2) {
+		if (PC.pregAdaptation > 40 && (PC.belly < 5000 && PC.preg < 1 && PC.pregWeek === 0) && PC.geneticQuirks.uterineHypersensitivity !== 2 && PC.geneMods.livestock !== 1 && PC.geneMods.geneMods.progenitor !== 1) {
 			if (PC.pregAdaptation > 1001) { // TODO: Compact, or expand useless branches below
 				PC.pregAdaptation--;
 			} else if (PC.pregAdaptation >= 751 && PC.pregAdaptation < 1000) {
diff --git a/src/endWeek/player/prMobility.js b/src/endWeek/player/prMobility.js
index a982cdca9ee..c4074defd40 100644
--- a/src/endWeek/player/prMobility.js
+++ b/src/endWeek/player/prMobility.js
@@ -110,6 +110,8 @@ App.EndWeek.Player.mobility = function(PC = V.PC) {
 				r.push(`<span class="hindrance high">You are on mandatory bed rest due to serious injury.</span> You won't be able to do much until your body recovers.`);
 			} else if (PC.health.condition < -90) {
 				r.push(`<span class="hindrance high">You are on mandatory bed rest due to your poor health.</span> You won't be doing much other than sleeping until you recover.`);
+			} else if (PC.geneMods.rapidCellGrowth !== 1 && PC.bellyPreg >= 100000 && PC.belly > (PC.pregAdaptation * 3200) && (PC.bellyPreg >= 500000 || PC.wombImplant !== "restraint")) {
+				r.push(`<span class="hindrance high">You are on mandatory bed rest</span> in the hope that staying relatively still will keep ${V.seeExtreme === 1 && V.dangerousPregnancy === 1 ? "your strained belly from bursting open" : "the dam holding back the flood waters from breaking."}.`);
 			} else if ((PC.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20)) || (PC.bellyPreg >= PC.pregAdaptation * 2200)) {
 				r.push(`<span class="hindrance high">You are on bed rest</span> in an attempt to not further complicate your already troublesome pregnancy. While it is not compulsory, it does cut into both your work and play time.`);
 			}
@@ -369,6 +371,12 @@ App.EndWeek.Player.mobility = function(PC = V.PC) {
 				PC.pregAdaptation += .1 * RCGmod;
 			}
 		}
+		if (PC.geneMods.progenitor === 1 && PC.belly > (PC.pregAdaptation * 750)) {
+			if (PC.belly > (PC.pregAdaptation * 1000)) {
+				r.push(`At least your genetically treated body is raipidly adjusting to your gravidity.`);
+			}
+			slave.pregAdaptation += 1;
+		}
 		if (PC.wombImplant === "restraint" && PC.belly >= 400000) {
 			r.push(`The mesh implanted into the walls of your uterus is nearing its limit and <span class="health dec">beginning to strangle</span> the organ it is meant to support. While it is still structurally sound, it may fail on you if it is forced to stretch much more.`);
 			healthDamage(PC, 15, 2);
diff --git a/src/endWeek/player/prPregnancy.js b/src/endWeek/player/prPregnancy.js
index eceaf20e706..3dc2adfee97 100644
--- a/src/endWeek/player/prPregnancy.js
+++ b/src/endWeek/player/prPregnancy.js
@@ -471,6 +471,12 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) {
 	function impregnation() {
 		if (PC.vagina === 0 || (PC.anus === 0 && PC.mpreg > 0)) {
 			// You aren't putting out.
+			if (isVirile(PC) && PC.geneMods.aggressiveSperm === 1 && canFemImpreg(PC, PC)) {
+				// But ejaculating with the sperm mod can result in splashback. More sex, more chances.
+				if (random(1, 100) > (99 - (PC.energy / 2))) {
+					knockMeUp(PC, 0, 2, -1); // 0% chance is correct. Gene mod adds 75% in knockMeUp().
+				}
+			}
 		} else if (random(1, 100) > (70 - (V.reproductionFormula * 10))) {
 			/** @type {Map<FC.Assignment, number>} */
 			const assignmentWeight = new Map([
@@ -502,6 +508,10 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) {
 				if (onBedRest(PC) && weight < 3) {
 					weight = 0;
 				}
+				if (s.geneMods.aggressiveSperm === 1) { // Doing it with someone with the sperm mod is pretty much going to have them knock you up.
+					weight *= 20;
+				}
+
 				return weight;
 			};
 
@@ -517,6 +527,13 @@ App.EndWeek.Player.pregnancy = function(PC = V.PC) {
 				knockMeUp(PC, 100, 2, chosenDadID);
 			}
 		}
+		if (canGetPregnant(PC) && !onBedRest(PC, true) && !isPCCareerInCategory("servant")) {
+			// Sperm mod leavings around the penthouse. Gives servants more of a point too.
+			let slobs = V.slaves.filter(s => canFemImpreg(PC, s) && isSlaveAvailable(s) && s.geneMods.aggressiveSperm === 1 && (s.fetish === "mindbroken" || s.energy > 95 || (s.devotion < -20 && s.trust > 20) || (s.intelligence + s.intelligenceImplant < -10)));
+			if (slobs.length > (totalServantCapacity() / 5)) {
+				knockMeUp(PC, -50, 2, slobs.random());
+			}
+		}
 	}
 
 	function autoImpregnation() {
diff --git a/src/endWeek/reports/clinicReport.js b/src/endWeek/reports/clinicReport.js
index 731070c1306..0f51b4fdb64 100644
--- a/src/endWeek/reports/clinicReport.js
+++ b/src/endWeek/reports/clinicReport.js
@@ -367,7 +367,7 @@ App.EndWeek.clinicReport = function() {
 				remainReasons.push(`to hurry ${his} pregnancy along safely`);
 			}
 			if (V.clinicObservePregnancy !== 0) {
-				const highRisk = slave.pregAdaptation * 1000 < slave.bellyPreg;
+				const highRisk = (slave.pregAdaptation * 1000 < slave.bellyPreg && slave.geneMods.progenitor !== 1) || (slave.geneMods.rapidCellGrowth !== 1 && slave.bellyPreg >= 100000 && slave.belly > (slave.pregAdaptation * 3200) && (slave.bellyPreg >= 500000 || slave.wombImplant !== "restraint"));
 				const closeToGivingBirth = slave.preg > slave.pregData.normalBirth / 1.33;
 				if (highRisk || (V.clinicObservePregnancy === 1 && closeToGivingBirth)) {
 					remainReasons.push(`to wait for childbirth`);
diff --git a/src/endWeek/reports/spaReport.js b/src/endWeek/reports/spaReport.js
index e98640a80da..816839bfb9a 100644
--- a/src/endWeek/reports/spaReport.js
+++ b/src/endWeek/reports/spaReport.js
@@ -294,9 +294,23 @@ App.EndWeek.spaReport = function() {
 		App.Events.addNode(el, r, "p", ["indent", "bold"]);
 	}
 
+	if (App.EndWeek.saVars.poolJizzers.length > 0) {
+		r.push(`The filters${S.Attendant ? ` and ${S.Attendant.slaveName}` : ""} have been overwhelmed by the sheer quantity of resilient sperm swimming around in the pool.`);
+		if (V.seePreg) {
+			 r.push(`Any woman that enters these fertile waters is liable to be gifted with new life.`);
+		}
+		App.Events.addNode(el, r, "div", "indent");
+	}
+
 	if (S.Attendant) {
 		const slave = App.SlaveAssignment.reportSlave(S.Attendant);
 		tired(slave);
+		if (isFertile(slave) && slave.preg !== -1 && App.EndWeek.saVars.poolJizzers.length > 0) { // Free swimming sperm do not respect chastity.
+			const spermAtt = App.EndWeek.saVars.poolJizzers.random();
+			if (canBreed(slave, getSlave(spermAtt.ID))) {
+				knockMeUp(slave, 25, 2, spermAtt.ID);
+			}
+		}
 		/* apply following SA passages to facility leader */
 		if (V.showEWD !== 0) {
 			const attendantEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report");
@@ -331,6 +345,20 @@ App.EndWeek.spaReport = function() {
 		} else if (slave.devotion < 40) {
 			slave.devotion += 10;
 		}
+		if (App.EndWeek.saVars.poolJizzers.length > 0) {
+			if (slave.fetish === "cumslut" && (canSee(slave) || canTaste(slave) || canSmell(slave))) {
+				slave.devotion++;
+			}
+			if (isFertile(slave) && slave.preg !== -1) { // Free swimming sperm do not respect chastity.
+				const spermSlave = App.EndWeek.saVars.poolJizzers.random();
+				if (canBreed(slave, getSlave(spermSlave.ID))) {
+					knockMeUp(slave, 25, 2, spermSlave.ID);
+				}
+				if (slave.sexualFlaw === "breeder" && (canSee(slave) || canTaste(slave) || canSmell(slave))) {
+					slave.devotion++;
+				}
+			}
+		}
 		switch (V.spaDecoration) {
 			case "Chattel Religionist":
 			case "Chinese Revivalist":
diff --git a/src/endWeek/saAgent.js b/src/endWeek/saAgent.js
index f7031b142ec..35e2ab91b3e 100644
--- a/src/endWeek/saAgent.js
+++ b/src/endWeek/saAgent.js
@@ -568,6 +568,9 @@ App.SlaveAssignment.agent = function(slave) {
 			slave.lactation = 1;
 		}
 	}
+	if (slave.lactation > 0 && slave.geneMods.livestock === 1 && slave.lactationAdaptation < 200) {
+		slave.lactationAdaptation = Math.min(slave.lactationAdaptation + 4, 200);
+	}
 	if (slave.lactation === 0 && slave.geneticQuirks.galactorrhea === 2 && random(1, 100) <= slave.hormoneBalance) {
 		slave.lactationDuration = 2;
 		slave.lactation = 1;
diff --git a/src/endWeek/saDiet.js b/src/endWeek/saDiet.js
index 956fdc75980..ea25f33c341 100644
--- a/src/endWeek/saDiet.js
+++ b/src/endWeek/saDiet.js
@@ -10,6 +10,7 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 	const rearQuirk = slave.geneticQuirks.rearLipedema === 2 ? 2 : 0;
 	const boobSize = slave.boobs - slave.boobsImplant - slave.boobsMilk;
 	const buttSize = slave.butt - slave.buttImplant;
+	const weightDirection = (slave.geneticQuirks.wLoss === 2 || slave.geneticQuirks.wGain === 2 || slave.geneMods.livestock === 0) ? slave.weightDirection : 1;
 
 	let growthGoal;
 	let roll;
@@ -83,9 +84,9 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 		let weightLoss = 5;
 		if (slave.fuckdoll > 0) {
 			r.push(`The ports in Fuckdoll suits allow total dietary control, and ${he}'s barely aware ${he}'s being <span class="change positive">slimmed down.</span>`);
-			if (slave.weightDirection === -1) {
+			if (weightDirection === -1) {
 				slave.weight -= 12;
-			} else if (slave.weightDirection === 1) {
+			} else if (weightDirection === 1) {
 				slave.weight -= 6;
 			} else {
 				slave.weight -= 9;
@@ -205,9 +206,9 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				r.push(`${He} <span class="change positive">loses weight.</span>`);
 			}
 			weightLoss += V.feeder * 2;
-			if (slave.weightDirection === -1) {
+			if (weightDirection === -1) {
 				slave.weight -= (weightLoss + 3);
-			} else if (slave.weightDirection === 1) {
+			} else if (weightDirection === 1) {
 				slave.weight -= (weightLoss - 3) - (V.feeder);
 			} else {
 				slave.weight -= weightLoss;
@@ -264,9 +265,9 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 		weightGain = 5;
 		if (slave.fuckdoll > 0) {
 			r.push(`The ports in Fuckdoll suits allow total dietary control, and ${he}'s barely aware ${he}'s being <span class="change positive">fattened up.</span>`);
-			if (slave.weightDirection === 1) {
+			if (weightDirection === 1) {
 				slave.weight += 12;
-			} else if (slave.weightDirection === -1) {
+			} else if (weightDirection === -1) {
 				slave.weight += 6;
 			} else {
 				slave.weight += 9;
@@ -493,9 +494,9 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 					slave.trust -= 1;
 				}
 				weightGain += V.feeder * 2;
-				if (slave.weightDirection === -1) {
+				if (weightDirection === -1) {
 					slave.weight += Math.max((weightGain - 3) - (V.feeder), 1);
-				} else if (slave.weightDirection === 1) {
+				} else if (weightDirection === 1) {
 					slave.weight += weightGain + 3;
 				} else {
 					slave.weight += weightGain;
@@ -504,7 +505,7 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				if (slave.geneticQuirks.galactorrhea === 2 && random(1, 100) < slave.hormoneBalance && slave.lactation === 0) {
 					slave.inappropriateLactation = 1;
 				}
-			} else if (slave.weightDirection === 1) {
+			} else if (weightDirection === 1) {
 				r.push(`${He} gains a little weight this week despite ${his} dietary troubles.`);
 				slave.weight += 1;
 			} else {
@@ -527,9 +528,9 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 			weightShift = -(V.feeder + 1);
 			r.push(`By carefully adjusting ${his} intake, ${he} slowly loses weight without realizing it.`);
 		}
-		if (slave.weightDirection === -1) {
+		if (weightDirection === -1) {
 			slave.weight += (weightShift - random(0, 1));
-		} else if (slave.weightDirection === 1) {
+		} else if (weightDirection === 1) {
 			slave.weight += (weightShift + random(0, 1));
 		} else {
 			slave.weight += weightShift;
@@ -634,10 +635,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				slave.butt -= 1;
 			}
 		}
-		if (slave.weight > 10 && slave.weightDirection !== 1) {
+		if (slave.weight > 10 && weightDirection !== 1) {
 			r.push(`${His} workouts have also <span class="change positive">burned off some excess fat.</span>`);
 			slave.weight -= 2;
-			if (slave.weightDirection === -1) {
+			if (weightDirection === -1) {
 				slave.weight -= 2;
 			}
 		}
@@ -673,10 +674,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 			r.push(`${His} workout successes have <span class="health inc">improved ${his} health.</span>`);
 			improveCondition(slave, 10);
 		}
-		if (slave.weight > 10 && slave.weightDirection !== 1) {
+		if (slave.weight > 10 && weightDirection !== 1) {
 			r.push(`${His} workouts have also <span class="change positive">burned off some excess fat.</span>`);
 			slave.weight -= 2;
-			if (slave.weightDirection === -1) {
+			if (weightDirection === -1) {
 				slave.weight -= 2;
 			}
 		}
@@ -905,10 +906,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 					r.push(`${His} workout successes have <span class="health inc">improved ${his} health.</span>`);
 					improveCondition(slave, 5);
 				}
-				if (slave.weight > 10 && slave.weightDirection !== 1) {
+				if (slave.weight > 10 && weightDirection !== 1) {
 					r.push(`${His} workouts have also <span class="change positive">burned off some excess fat.</span>`);
 					slave.weight -= 2;
-					if (slave.weightDirection === -1) {
+					if (weightDirection === -1) {
 						slave.weight -= 2;
 					}
 				}
@@ -981,10 +982,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 			}
 		}
 		if ((slave.ovaries === 1 || slave.mpreg === 1) && slave.balls > 0) { // herm
-			if (slave.weight < 30 && slave.weightDirection !== -1) {
+			if (slave.weight < 30 && weightDirection !== -1) {
 				r.push(`Hormonal changes encourage ${his} body to <span class="change positive">grow softer.</span>`);
 				slave.weight += 1;
-				if (slave.weightDirection === 1) {
+				if (weightDirection === 1) {
 					slave.weight += 2;
 				}
 			}
@@ -1019,10 +1020,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				slave.balls -= 1;
 			}
 		} else if (slave.ovaries === 1 || slave.mpreg === 1) { // female
-			if (slave.weight < 40 && slave.weightDirection !== 1) {
+			if (slave.weight < 40 && weightDirection !== 1) {
 				r.push(`Hormonal changes encourage ${his} body to <span class="change positive">grow softer.</span>`);
 				slave.weight += 1;
-				if (slave.weightDirection === 1) {
+				if (weightDirection === 1) {
 					slave.weight += 2;
 				}
 			}
@@ -1039,10 +1040,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				slave.butt += 1;
 			}
 		} else if (slave.balls > 0) { // male
-			if (slave.weight < 20 && slave.weightDirection !== 1) {
+			if (slave.weight < 20 && weightDirection !== 1) {
 				r.push(`Hormonal changes encourage ${his} body to <span class="change positive">grow softer.</span>`);
 				slave.weight += 1;
-				if (slave.weightDirection === 1) {
+				if (weightDirection === 1) {
 					slave.weight += 2;
 				}
 			}
@@ -1203,10 +1204,10 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 			r.push(`Hormonal changes encourage ${his} body to <span class="change positive">gain muscle.</span>`);
 			slave.muscles += 1 + slave.geneticQuirks.mGain;
 		}
-		if (slave.weight < 50 && slave.weightDirection !== -1) {
+		if (slave.weight < 50 && weightDirection !== -1) {
 			r.push(`Hormonal changes encourage ${his} body to <span class="change positive">grow softer.</span>`);
 			slave.weight += 1;
-			if (slave.weightDirection === 1) {
+			if (weightDirection === 1) {
 				slave.weight += 2;
 			}
 		}
@@ -1494,7 +1495,7 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 			}
 		}
 		if (!["fattening", "restricted", "slimming"].includes(slave.diet)) {
-			if (slave.weightDirection === -1 && slave.weight > -100) {
+			if (weightDirection === -1 && slave.weight > -100) {
 				if (V.geneticMappingUpgrade >= 1) {
 					r.push(`${His} body <span class="lime">aggressively burns fat</span> due to ${his}`);
 					if (slave.geneticQuirks.wGain === 2 && slave.geneticQuirks.wLoss === 2) {
@@ -1504,7 +1505,7 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 					}
 				}
 				slave.weight = Math.clamp(slave.weight - 3, -100, 200);
-			} else if (slave.weightDirection === 1 && slave.weight < 200) {
+			} else if (weightDirection === 1 && slave.geneticQuirks.wGain === 2 && slave.weight < 200) {
 				if (V.geneticMappingUpgrade >= 1) {
 					r.push(`${His} body <span class="lime">aggressively stores fat</span> due to ${his}`);
 					if (slave.geneticQuirks.wGain === 2 && slave.geneticQuirks.wLoss === 2) {
@@ -1515,6 +1516,8 @@ App.SlaveAssignment.diet = function saDiet(slave) {
 				}
 				slave.weight = Math.clamp(slave.weight + 3, -100, 200);
 			}
+		} else if (slave.geneMods.livestock === 1) {
+			r.push(`The gene therapy to boost ${his} productivity has a side effect of weight gain, and since it complicates weight loss in the process, it might as well be <class="lime">fattening ${him} up for wholesale.</span>`);
 		}
 	}
 
diff --git a/src/endWeek/saGetMilked.js b/src/endWeek/saGetMilked.js
index 4e73732bb59..f360ccbe75e 100644
--- a/src/endWeek/saGetMilked.js
+++ b/src/endWeek/saGetMilked.js
@@ -259,7 +259,9 @@
 			}
 
 			if (slave.lactationAdaptation > 10) {
-				if (slave.lactationAdaptation > 50) {
+				if (slave.lactationAdaptation > 150) {
+					r.text += ` ${His} body has completely redesigned itself around milk production, making ${him} a shining example of productivity.`;
+				} else if (slave.lactationAdaptation > 50) {
 					r.text += ` ${His} body has adapted heavily to milk production, making ${him} extremely productive.`;
 				} else {
 					r.text += ` ${His} body has gotten used to producing milk, making ${him} very productive.`;
@@ -477,8 +479,16 @@
 				r.text += ` balls.`;
 			}
 
-			if (slave.diet === "cum production") {
-				r.text += ` ${His} diet is designed for cum production.`;
+			if (slave.vasectomy !== 1 && isVirile(slave)) {
+				if (slave.geneMods.aggressiveSperm === 1) {
+					r.text += ` ${His} testicles produce oversized, durable sperm cells that are not only diffuclt to ejaculate out en mass, but also tend to clog the tubbing with their density, lowering ${his} overall productivity.`;
+				}
+				if (slave.geneMods.livestock === 1) {
+					r.text += ` ${He} has been genetically altered to overproduce sperm.`;
+				}
+				if (slave.diet === "cum production") {
+					r.text += ` ${His} diet is designed for cum production.`;
+				}
 			}
 
 			const cumHormones = (slave.hormoneBalance / 50);
@@ -492,8 +502,10 @@
 				r.text += ` ${His} internal chemistry is poorly suited to cum production.`;
 			}
 
-			if (slave.scrotum === 0) {
-				r.text += ` ${He} does produce cum despite ${his} apparent ballslessness, but less than ${he} would if they weren't hidden inside ${him}.`;
+			if (slave.vasectomy !== 1 && isVirile(slave)) {
+				if (slave.scrotum === 0) {
+					r.text += ` ${He} does produce cum despite ${his} apparent ballslessness, but less than ${he} would if they weren't hidden inside ${him}.`;
+				}
 			}
 
 			if (slave.prostate > 0) {
@@ -526,6 +538,12 @@
 			} else if (slave.ballType === "sterile") {
 				r.text += ` ${His} cum lacks vigor entirely, thanks to ${his} chemical castration, <span class="cash dec">considerably lowering the value</span> of ${his} ejaculate.`;
 				qualityMultiplier *= 0.2;
+			} else if (!isVirile(slave)) {
+				r.text += ` ${His} cum lacks the primary ingredient, sperm, as ${he} has not yet become a man. While it is <span class="cash dec">valued less</span> than normal ejaculate, this unique fluid is still valuable to certain groups.`;
+				qualityMultiplier *= 0.8;
+			} else if (slave.geneMods.aggressiveSperm === 1) {
+				r.text += ` ${His} vigorous cum is considered exotic, <span class="cash inc">increasing its value</span> and helping to offset the losses from harvesting it.`;
+				qualityMultiplier *= 1.3;
 			}
 
 			if (slave.assignment === Job.DAIRY) {
@@ -595,7 +613,7 @@
 				}
 			}
 
-			if (slave.balls < 3 && slave.ballType !== "sterile") {
+			if (slave.balls < 3 && isVirile(slave)) {
 				if (slave.balls < 2) {
 					if (jsRandom(1, 100) > (70 + (slave.geneMods.NCS * 15))) {
 						r.text += ` Constant semen production and continual emptying and refilling <span class="change positive">increases the size of ${his} tiny testicles.</span>`;
@@ -622,6 +640,9 @@
 					r.text += ` ${His} natural vaginal secretions add to the mix.`;
 				}
 			}
+			if (slave.geneMods.livestock === 1) {
+				r.text += ` ${His} genetic alterations aid in increasing the volume.`;
+			}
 			if (slave.energy > 10) {
 				if (slave.health.condition > 50) {
 					if (slave.energy > 90) {
diff --git a/src/endWeek/saLongTermEffects.js b/src/endWeek/saLongTermEffects.js
index b55312fc156..c809610584e 100644
--- a/src/endWeek/saLongTermEffects.js
+++ b/src/endWeek/saLongTermEffects.js
@@ -2283,7 +2283,7 @@ App.SlaveAssignment.longTermEffects = function saLongTermEffects(slave) {
 				} else if (WombBirthReady(slave, slave.pregData.normalBirth) > 0 && (random(1, 100) > 50)) {
 					// check for really ready fetuses - 40 weeks - normal
 					startLabor(slave);
-				} else if (WombBirthReady(slave, slave.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90)) {
+				} else if (WombBirthReady(slave, slave.pregData.normalBirth / 1.1111) > 0 && (random(1, 100) > 90) && slave.geneMods.progenitor !== 1) {
 					// check for really ready fetuses - 36 weeks minimum
 					startLabor(slave);
 				}
@@ -2346,7 +2346,7 @@ App.SlaveAssignment.longTermEffects = function saLongTermEffects(slave) {
 					}
 				}
 				miscarriageChance = Math.round(miscarriageChance);
-				if (miscarriageChance > random(0, 100)) {
+				if (miscarriageChance > random(0, 100) && slave.geneMods.progenitor !== 1) { // Progenitor refuses to miscarry or give birth early.
 					const chance = random(1, 100);
 					if (slave.preg >= slave.pregData.normalBirth / 1.33) {
 						startLabor(slave);
diff --git a/src/endWeek/saLongTermPhysicalEffects.js b/src/endWeek/saLongTermPhysicalEffects.js
index a1e6f60f14b..b7ac1d56c0c 100644
--- a/src/endWeek/saLongTermPhysicalEffects.js
+++ b/src/endWeek/saLongTermPhysicalEffects.js
@@ -1142,6 +1142,9 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects
 				}
 			}
 		}
+		if (slave.lactation > 0 && slave.geneMods.livestock === 1 && slave.lactationAdaptation < 200) {
+			slave.lactationAdaptation = Math.min(slave.lactationAdaptation + 4, 200);
+		}
 		if (slave.breastMesh !== 1) {
 			if (slave.boobs - (slave.muscles * 30) > 5000 && slave.boobs <= 8000 && slave.boobsImplant / slave.boobs < .50) { // Check now requires breasts to be less than half implant to sag.
 				if (slave.physicalAge < random(10, 200)) {
@@ -1204,7 +1207,7 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects
 	 *
 	 */
 	function bellyEffects(slave) {
-		if (slave.pregAdaptation > 40 && (slave.belly < 5000 && slave.preg < 1 && slave.pregWeek === 0) && slave.geneticQuirks.uterineHypersensitivity !== 2) {
+		if (slave.pregAdaptation > 40 && (slave.belly < 5000 && slave.preg < 1 && slave.pregWeek === 0) && slave.geneticQuirks.uterineHypersensitivity !== 2 && slave.geneMods.livestock !== 1 && slave.geneMods.progenitor !== 1) {
 			if (slave.pregAdaptation > 1001) { // TODO: Compact, or expand useless branches below
 				slave.pregAdaptation--;
 			} else if (slave.pregAdaptation >= 751 && slave.pregAdaptation < 1000) {
@@ -2358,12 +2361,16 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects
 				slave.pregAdaptation += .1;
 			}
 		}
+		if (slave.geneMods.progenitor === 1 && slave.belly > (slave.pregAdaptation * 750)) {
+			r.push(`${His} genetically altered body quickly adjusts to ${his} increased gravidity.`);
+			slave.pregAdaptation += 1;
+		}
 		if (slave.wombImplant === "restraint" && slave.belly >= 400000) {
 			r.push(`The mesh implanted into the walls of ${his} uterus is nearing its limit and <span class="health dec">beginning to strangle</span> the organ it is meant to support. While it is still structurally sound, it can only expand so much before failing.`);
 			healthDamage(slave, 15);
 		}
 
-		if (V.seeExtreme === 1 && V.dangerousPregnancy === 1 && ((slave.belly > (slave.pregAdaptation * 3200)) || slave.bellyPreg > 600000) && slave.bellyPreg >= 100000) {
+		if (V.seeExtreme === 1 && V.dangerousPregnancy === 1 && slave.geneMods.rapidCellGrowth !== 1 && slave.bellyPreg >= 100000 && slave.belly > (slave.pregAdaptation * 3200) && (slave.bellyPreg >= 500000 || slave.wombImplant !== "restraint")) {
 			if (slave.assignment === Job.CLINIC) {
 				if (S.Nurse) {
 					r.push(`The fast actions of ${V.clinicName}'s nurse, ${S.Nurse.slaveName}, saved ${his} life a few times. <span class="health dec">${His} womb is breaking!</span>`);
diff --git a/src/endWeek/saPregnancy.js b/src/endWeek/saPregnancy.js
index c640eb0db0e..ae416c256d6 100644
--- a/src/endWeek/saPregnancy.js
+++ b/src/endWeek/saPregnancy.js
@@ -938,6 +938,12 @@ App.SlaveAssignment.pregnancy = function saPregnancy(slave) {
 			}
 		} else if ((slave.vagina === 0 || (slave.anus === 0 && slave.mpreg > 0)) && !studIgnoresRules) {
 			// Skip virgins.
+			if (isVirile(slave) && slave.geneMods.aggressiveSperm === 1 && canFemImpreg(slave, slave)) {
+				// Ejaculating with the sperm mod can result in splashback. More sex, more chances.
+				if (random(1, 100) > (99 - (slave.energy / 2))) {
+					knockMeUp(slave, 0, 2, slave.ID); // 0% chance is correct. Gene mod adds 75% in knockMeUp().
+				}
+			}
 		} else if (V.HeadGirlID !== 0 && slave.ID !== V.HeadGirlID && V.universalRulesImpregnation === "HG" && canPenetrate(S.HeadGirl) && (slave.pregKnown === 0 || (V.universalRulesSuperfetationImpregnation === 1 && slave.geneticQuirks.superfetation === 2 && (slave.pregKnown === 1 || V.geneticMappingUpgrade > 0 || slave.counter.birthsTotal > 0)))) {
 			const {
 				he2, His2, his2, him2,
@@ -1757,6 +1763,13 @@ App.SlaveAssignment.pregnancy = function saPregnancy(slave) {
 							knockMeUp(slave, 100, 2, pregSource);
 						}
 					} /* closes random chance and non-zero sex acts check */
+					if (canGetPregnant(slave) && canWalk(slave) && isSlaveAvailable(slave) && (V.personalAttention.task !== PersonalAttention.MAID || onBedRest(V.PC))) {
+						// Sperm mod leavings around the penthouse. Gives servants more of a point too.
+						let slobs = V.slaves.filter(s => canFemImpreg(slave, s) && isSlaveAvailable(s) && s.geneMods.aggressiveSperm === 1 && (s.fetish === "mindbroken" || s.energy > 95 || (s.devotion < -20 && s.trust > 20) || (s.intelligence + s.intelligenceImplant < -10)));
+						if (slobs.length > (totalServantCapacity() / 5)) {
+							knockMeUp(slave, -50, 2, slobs.random());
+						}
+					}
 			} /* closes assignment checks */
 		} /* closes all impregnation checks */
 	}
diff --git a/src/endWeek/saRewardAndPunishment.js b/src/endWeek/saRewardAndPunishment.js
index dce20eff661..e090109628a 100644
--- a/src/endWeek/saRewardAndPunishment.js
+++ b/src/endWeek/saRewardAndPunishment.js
@@ -73,8 +73,27 @@ App.SlaveAssignment.rewardAndPunishment = function rewardAndPunish(forSlave) {
 				} else if (slave.assignment === Job.ATTENDANT) {
 					r.push(`usually spends soaking in a hot bath or enjoying the amenities ${his} facility has to offer.`);
 				} else if (slave.assignment === Job.CONCUBINE) {
-					if (V.spa !== 0) {
+					if (onBedRest(V.PC, true)) {
+						r.push(`usually spends in bed with you, helping to ease your worries.`);
+					} else if (V.spa !== 0) {
 						r.push(`usually sets aside to spend with you in ${V.spaName}.`);
+						if (V.PC.intelligence + V.PC.intelligenceImplant < 10 || !canSee(V.PC)) {
+							if (App.EndWeek.saVars.poolJizzers.length > 0) { // Free swimming sperm do not respect chastity.
+								let sperm;
+								if (isFertile(slave) && slave.preg !== -1) {
+									sperm = App.EndWeek.saVars.poolJizzers.random();
+									if (canBreed(slave, getSlave(sperm.ID))) {
+										knockMeUp(slave, 25, 2, sperm.ID);
+									}
+								}
+								if (isFertile(V.PC) && V.PC.preg !== -1) {
+									sperm = App.EndWeek.saVars.poolJizzers.random();
+									if (canBreed(V.PC, getSlave(sperm.ID))) {
+										knockMeUp(V.PC, 25, 2, sperm.ID);
+									}
+								}
+							}
+						}
 					} else {
 						r.push(`usually spends relaxing with you.`);
 					}
@@ -82,6 +101,22 @@ App.SlaveAssignment.rewardAndPunishment = function rewardAndPunish(forSlave) {
 					const where = (slave.assignment !== Job.SPA) ? V.spaName : `a private bath`;
 					const attendant = S.Attendant ? `, enjoying ${S.Attendant.slaveName}'s care` : ``;
 					r.push(`usually spends in ${where}${attendant}.`);
+					if (slave.assignment !== Job.SPA && App.EndWeek.saVars.poolJizzers.length > 0) {
+						if (slave.fetish === "cumslut" && (canSee(slave) || canTaste(slave) || canSmell(slave))) {
+							r.push(`As an added bonus, ${he} gets to soak in a pool teeming with live sperm; <span class="hotpink">what luck!</span>`);
+							slave.devotion++;
+						}
+						if (isFertile(slave) && slave.preg !== -1) { // Free swimming sperm do not respect chastity.
+							const sperm = App.EndWeek.saVars.poolJizzers.random();
+							if (canBreed(slave, getSlave(sperm.ID))) {
+								knockMeUp(slave, 25, 2, sperm.ID);
+							}
+							if (slave.sexualFlaw === "breeder" && (canSee(slave) || canTaste(slave) || canSmell(slave))) {
+								r.push(`${He} finds the ropes of cum swarming ${his} loins <span class="hotpink">a nice touch.</span>`);
+								slave.devotion++;
+							}
+						}
+					}
 				} else if (slave.assignment === Job.MASTERSUITE) {
 					r.push(`usually spends relaxing on ${his} favorite pillow.`);
 				} else if (slave.assignment === Job.HEADGIRLSUITE) {
diff --git a/src/endWeek/saSharedVariables.js b/src/endWeek/saSharedVariables.js
index d4c7d2942ea..79c9462c8fa 100644
--- a/src/endWeek/saSharedVariables.js
+++ b/src/endWeek/saSharedVariables.js
@@ -22,6 +22,10 @@ App.EndWeek.SASharedVariables = class {
 		this.whorePriceAdjustment = {};
 		/** How many slaves can the designated stud still impregnate? */
 		this.StudCum = 0;
+		/** Are slaves with the agressive sperm gene mod jacking off or having sex in the spa pool? */
+		this.poolJizz = 0;
+		/** Which agressive sperm slaves are knocking up the spa bathers? */
+		this.poolJizzers = [];
 		/** How much energy does the player have left to fuck slaves who need it? */
 		this.freeSexualEnergy = 0;
 		/** How big is the average dick on a slave? */
diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js
index c11b035d994..3f93c019627 100644
--- a/src/endWeek/slaveAssignmentReport.js
+++ b/src/endWeek/slaveAssignmentReport.js
@@ -3,7 +3,7 @@ App.EndWeek.slaveAssignmentReport = function() {
 	const arcology = V.arcologies[0];
 
 	const initialEmployeesCount = App.Utils.countFacilityWorkers(); // will be used to show differences after all the assignment changes
-	const initialPenthouseTotalEmployeesCount = _countPenthousePopulation();
+	const initialPenthouseTotalEmployeesCount = _countPenthousePopulation(); 
 
 	/* Initialize global SA variables */
 	App.EndWeek.saVars = new App.EndWeek.SASharedVariables();
@@ -162,6 +162,24 @@ App.EndWeek.slaveAssignmentReport = function() {
 		}
 	} // for (const slave of V.slaves)
 
+	// Optimized sperm slaves cumming up the spa pool.
+	if (facilities.spa.established) {
+		const potentialPoolFathers = [];
+		let cum;
+		for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.spa)) {
+			if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave) && (slave.rules.release.masturbation || App.Utils.hasNonassignmentSex(slave) || slave.rules.release.facilityLeader) && slave.energy > 20) {
+				cum = Math.trunc(cumAmount(slave) / 2);
+				App.EndWeek.saVars.poolJizz += cum;
+				potentialPoolFathers.push({ID: slave.ID, weight: cum});
+			}
+		}
+		if (App.EndWeek.saVars.poolJizz > (S.Attendant ? 5000 : 1000)) {
+			for (let i = 0; i < potentialPoolFathers.length; i++) {
+				App.EndWeek.saVars.poolJizzers.push(weightedRandom(potentialPoolFathers));
+			}
+		}
+	}
+
 	if (V.HeadGirlID !== 0) {
 		App.EndWeek.saVars.HGEnergy++;
 		const slave = slaveStateById(V.HeadGirlID);
diff --git a/src/events/RESS/review/diet.js b/src/events/RESS/review/diet.js
index 73a635c56a8..71e4fb79406 100644
--- a/src/events/RESS/review/diet.js
+++ b/src/events/RESS/review/diet.js
@@ -11,7 +11,7 @@ App.Events.RESSDiet = class RESSDiet extends App.Events.BaseEvent {
 				hasAnyLegs,
 				s => s.devotion <= 50,
 				s => s.trust >= -50,
-				s => s.behavioralFlaw === "gluttonous",
+				s => (s.behavioralFlaw === "gluttonous" || s.geneMods.livestock === 1),
 				s => s.diet === "restricted",
 			]
 		];
diff --git a/src/facilities/geneLab.js b/src/facilities/geneLab.js
index bd24b876d80..8250c8644c9 100644
--- a/src/facilities/geneLab.js
+++ b/src/facilities/geneLab.js
@@ -23,6 +23,7 @@ App.UI.geneLab = function() {
 	App.UI.DOM.appendNewElement("h2", node, `Genetic Modification`);
 	const immortalityCost = 50000000;
 	const flavoringCost = 150000;
+	const enhancedProductionFormulaCost = 150000 * PCSkillCheck;
 	if (V.dispensaryUpgrade === 0) {
 		App.UI.DOM.appendNewElement("div", node, `The fabricator must be upgraded before it can produce treatments to alter genes`, "note");
 	} else {
@@ -33,6 +34,19 @@ App.UI.geneLab = function() {
 		if (V.RapidCellGrowthFormula === 1) {
 			App.UI.DOM.appendNewElement("div", node, `The fabricator is capable of producing treatments to accelerate cellular reproduction.`);
 		}
+		if (V.enhancedProductionFormula === 1) {
+			App.UI.DOM.appendNewElement("div", node, `The fabricator is capable of producing treatments to permanently enhance the production of harvestable resources from dairy slaves. Side effects include, but are not limited to, increased appetite, weight gain, dehydrationand other complications related to overproduction of fluids.`);
+		} else if (V.cash >= enhancedProductionFormulaCost) {
+			App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
+				"Purchase designs for optimizing dairy slaves",
+				() => {
+					cashX(forceNeg(enhancedProductionFormulaCost), "capEx");
+					V.enhancedProductionFormula = 1;
+					App.UI.reload();
+				}, [], "",
+				`Costs ${cashFormat(enhancedProductionFormulaCost)}. Will boost production of harvestable slave resources`
+			));
+		}
 		if (V.immortalityFormula === 1) {
 			App.UI.DOM.appendNewElement("div", node, `The fabricator is capable of producing treatments to permanently reverse aging.`);
 		} else if (V.cash >= immortalityCost) {
diff --git a/src/facilities/surgery/surgeryPassageExotic.js b/src/facilities/surgery/surgeryPassageExotic.js
index fb2d825ca31..51759018093 100644
--- a/src/facilities/surgery/surgeryPassageExotic.js
+++ b/src/facilities/surgery/surgeryPassageExotic.js
@@ -79,24 +79,56 @@ App.UI.surgeryPassageExotic = function(slave, refresh, cheat = false) {
 					}
 				}
 
-				if (V.immortalityFormula === 1) {
-					if (slave.geneMods.immortality === 0) {
+				if (V.bioEngineeredFlavoringResearch === 1){
+					if (slave.geneMods.flavoring === 0) {
 						linkArray.push(App.Medicine.Surgery.makeLink(
-							new App.Medicine.Surgery.Procedures.ImmortalityTreatment(slave),
+							new App.Medicine.Surgery.Procedures.milkFlavoring(slave),
 							refresh, cheat));
 					} else {
-						App.UI.DOM.appendNewElement("div", el, `${He} is already immortal`, ["choices", "note"]);
+						App.UI.DOM.appendNewElement("div", el, `${His} milk can already be flavored`, ["choices", "note"]);
 					}
 				}
-				if (V.bioEngineeredFlavoringResearch === 1){
-					if (slave.milkFlavor === "none") {
+
+				if (V.optimizedSpermFormula === 1) {
+					if (slave.geneMods.aggressiveSperm === 0) {
 						linkArray.push(App.Medicine.Surgery.makeLink(
-							new App.Medicine.Surgery.Procedures.milkFlavoring(slave),
+							new App.Medicine.Surgery.Procedures.OptimizedSpermTreatment(slave),
 							refresh, cheat));
 					} else {
-						App.UI.DOM.appendNewElement("div", el, `${His} milk can already be flavored`, ["choices", "note"]);
+						App.UI.DOM.appendNewElement("div", el, `${His} body has already been altered to produce more aggressive sperm.`, ["choices", "note"]);
+					}
+				}
+
+				if (V.enhancedProductionFormula === 1) {
+					if (slave.geneMods.livestock === 0) {
+						linkArray.push(App.Medicine.Surgery.makeLink(
+							new App.Medicine.Surgery.Procedures.EnhancedProductionTreatment(slave),
+							refresh, cheat));
+					} else {
+						App.UI.DOM.appendNewElement("div", el, `${His} body has already been altered to produce more usable products.`, ["choices", "note"]);
 					}
 				}
+
+				if (V.optimizedBreedingFormula === 1) {
+					if (slave.geneMods.progenitor === 0) {
+						linkArray.push(App.Medicine.Surgery.makeLink(
+							new App.Medicine.Surgery.Procedures.OptimizedBreedingTreatment(slave),
+							refresh, cheat));
+					} else {
+						App.UI.DOM.appendNewElement("div", el, `${His} body has already been altered to better carry children.`, ["choices", "note"]);
+					}
+				}
+
+				if (V.immortalityFormula === 1) {
+					if (slave.geneMods.immortality === 0) {
+						linkArray.push(App.Medicine.Surgery.makeLink(
+							new App.Medicine.Surgery.Procedures.ImmortalityTreatment(slave),
+							refresh, cheat));
+					} else {
+						App.UI.DOM.appendNewElement("div", el, `${He} is already immortal`, ["choices", "note"]);
+					}
+				}
+
 				App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
 			}
 			el.append(retroVirus());
diff --git a/src/interaction/main/fcnn.js b/src/interaction/main/fcnn.js
index 48d774bfedb..df83802e33a 100644
--- a/src/interaction/main/fcnn.js
+++ b/src/interaction/main/fcnn.js
@@ -120,6 +120,10 @@ App.FCNN = (function() {
 		"...and Free Cities have definitely shaken up the stock market in recent..."
 	];
 
+	const geneMods = [
+		"...27 women confirmed pregnant after man masturbates in pool. Should gene therapy..."
+	];
+
 	const catgirlsPublic = [
 		"...Catgirl slaves: Fad, fluke, or fashion? Tune in for an exclusive FCNN interview with Doctor Radomir Nieskowitz later tonight..."
 	];
@@ -142,6 +146,7 @@ App.FCNN = (function() {
 		{valid: () => V.TFS.schoolUpgrade === 3, text: () => TFSCompromise},
 		{valid: () => V.FCNNstation === 1, text: () => [`...is FCNN, broadcasting live from its international headquarters within ${V.arcologies[0].name}...`]},
 		{valid: () => V.corp.Announced === 1, text: () => corpAnnounced},
+		{valid: () => V.geneticMappingUpgrade === 1, text: () => geneMods},
 		{valid: () => V.seeCats === 1 && V.projectN.public === 1, text: () => catgirlsPublic},
 		{valid: () => V.seeCats === 1 && V.projectN.status >= 5, text: () => projectNComplete},
 		// custom headlines can be stored in game state by events
diff --git a/src/interaction/main/mainLinks.js b/src/interaction/main/mainLinks.js
index b589aef0e59..d7387d58acb 100644
--- a/src/interaction/main/mainLinks.js
+++ b/src/interaction/main/mainLinks.js
@@ -15,6 +15,8 @@ App.UI.View.mainLinks = function() {
 			fragment.append(`You plan to give birth this week.`);
 		} else if (isInduced(V.PC)) {
 			fragment.append(`You are giving birth this week.`);
+		} else if (V.PC.geneMods.rapidCellGrowth !== 1 && V.PC.bellyPreg >= 100000 && V.PC.belly > (V.PC.pregAdaptation * 3200) && (V.PC.bellyPreg >= 500000 || V.PC.wombImplant !== "restraint")) {
+			fragment.append(`You're laid up in bed until you pop.`);
 		}
 	} else {
 		switch (V.personalAttention.task) {
@@ -37,8 +39,8 @@ App.UI.View.mainLinks = function() {
 				fragment.append(`You plan to make some easy (but dirty) money this week.`);
 				break;
 			case PersonalAttention.FIGHT:
-					text.push(`You plan to enter a fistfight for some quick (but hopefully not too bloody) money this week.`);
-					break;
+				text.push(`You plan to enter a fistfight for some quick (but hopefully not too bloody) money this week.`);
+				break;
 			case PersonalAttention.SUPPORTHG:
 				fragment.append(`You plan to support your Head Girl this week, `);
 				if (S.HeadGirl) {
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 1b3d708fce9..d34bd27eee8 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -1402,10 +1402,7 @@ App.Entity.SlaveState = class SlaveState {
 		 */
 		this.pregType = 0;
 		/**
-		 * Number of ready to be impregnated ova (override normal cases),
-		 *
-		 * For delayed impregnations with multiples.Used onetime on next call of the SetPregType
-		 * widget. After SetPregType use it to override .pregType, it set back to 0 automatically.
+		 * How adapted a slave's body is to being pregnant. 1 pregAdaption supports 1000cc of pregnancy. A normal singleton pregnancy is about 15 pregAdaption.
 		 */
 		this.pregAdaptation = 50;
 		/**
@@ -2290,6 +2287,8 @@ App.Entity.SlaveState = class SlaveState {
 			 *
 			 * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
 			gigantomastia: 0,
+			/** sperm is much more likely to knock someone up */
+			potent: 0,
 			/** is prone to having twins, shorter pregnancy recovery rate */
 			fertility: 0,
 			/** is prone to having multiples, even shorter pregnancy recovery rate
@@ -2327,6 +2326,8 @@ App.Entity.SlaveState = class SlaveState {
 			rearLipedema: 0,
 			/** has (or will have) a huge dong */
 			wellHung: 0,
+			/** predisposed to having and supporting larger tits. DO NOT USE! This will become genetic breast size! */
+			bustSize: 0,
 			/** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
 			wGain: 0,
 			/** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
@@ -2337,6 +2338,9 @@ App.Entity.SlaveState = class SlaveState {
 			mGain: 0,
 			/** constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */
 			mLoss: 0,
+			/** ova will split if room is available
+			 *  only affects fetuses */
+			twinning: 0,
 			/** slave can only ever birth girls */
 			girlsOnly: 0
 		};
@@ -2680,7 +2684,23 @@ App.Entity.SlaveState = class SlaveState {
 			/** Is the slave immortal?
 			 * @type {FC.Bool}
 			 * 0: no; 1: yes */
-			immortality: 0
+			immortality: 0,
+			/** Has the slave been treated to produce flavored milk?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			flavoring: 0,
+			/** Has the slave's sperm been optimized?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			aggressiveSperm: 0,
+			/** Has the slave been optimized for production?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			livestock: 0,
+			/** Has the slave been optimized for child bearing?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			progenitor: 0
 		};
 		/** flavor of their milk*/
 		this.milkFlavor = "none";
diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js
index 24cc9d30cb6..038c385d139 100644
--- a/src/js/birth/birth.js
+++ b/src/js/birth/birth.js
@@ -174,6 +174,9 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 		} else if (slave.pregAdaptation >= 100) {
 			suddenBirth += 1;
 		}
+		if (slave.geneMods.progenitor === 1) {
+			suddenBirth += 20; // optimized, baby birthing machine
+		}
 		if (slave.health.condition < 0) {
 			suddenBirth += 2;
 		}
@@ -545,7 +548,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 					birthDamage += 1;
 				}
 			}
-			if (slave.hips < 0) {
+			if (slave.hips < 0 && slave.geneMods.progenitor !== 1) {
 				r.push([
 					`${His} narrow hips made birth`,
 					App.UI.DOM.makeElement("span", `troublesome.`, ["health", "dec"])
@@ -785,6 +788,15 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 				birthDamage -= 1;
 			}
 
+			if (slave.geneMods.progenitor === 1) {
+				r.push([
+					`${He} was`,
+					App.UI.DOM.makeElement("span", `genetically modified to be superior in child bearing;`, ["health", "inc"]),
+					`${his} body popped ${his} ${children} out like it was nothing.`
+				]);
+				birthDamage -= 200;
+			}
+
 			if (slave.curatives > 0) {
 				r.push([
 					`${His} `,
@@ -1150,7 +1162,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 				healthDamage(slave, 10);
 				App.Events.addNode(el, r, "div");
 			}
-			if (slave.hips < -1) {
+			if (slave.hips < -1 && slave.geneMods.progenitor !== 1) {
 				r = [];
 				r.push(`${He} had exceedingly narrow hips, completely unsuitable for childbirth. As ${he} struggled on ${his}`);
 				if (numBeingBorn > 1) {
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 4a80f7f644c..5181bd4b93b 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -860,6 +860,15 @@ globalThis.calculateCosts = (function() {
 		if (V.PC.geneticQuirks.wGain === 2 && V.PC.geneticQuirks.wLoss !== 2) {
 			costs += Math.trunc(foodCost * 0.2);
 		}
+		if (V.PC.geneMods.livestock === 1) {
+			costs += Math.trunc(foodCost * 0.2);
+			if (V.PC.lactation > 0) {
+				costs += Math.trunc(foodCost * (1 + V.PC.lactationAdaptation / 400));
+			}
+			if (V.PC.balls > 0 && V.PC.pubertyXY === 1 && V.PC.vasectomy === 0 && V.PC.ballType !== "sterile") {
+				costs += foodCost * V.PC.lactation * (1.1 + Math.trunc(V.PC.balls / 100));
+			}
+		}
 		if (V.PC.drugs === 'appetite suppressors') {
 			costs -= foodCost;
 		}
@@ -1361,6 +1370,24 @@ globalThis.getSlaveCostArray = function(s) {
 			value: Math.trunc(foodCost * s.lactation * (1 + (s.boobs / 10000)))
 		});
 	}
+	if (s.geneMods.livestock === 1) {
+		retval.push({
+			text: "Increased portion sizes for gene therapy induced appetite increase",
+			value: Math.trunc(foodCost * 0.2)
+		});
+		if (s.lactation > 0) {
+			retval.push({
+				text: "Extra feeding costs to support gene therapy enhanced milk production",
+				value:  Math.trunc(foodCost * (1 + s.lactationAdaptation / 400))
+			});
+		}
+		if (s.balls > 0 && s.pubertyXY === 1 && s.vasectomy === 0 && s.ballType !== "sterile") {
+			retval.push({
+				text: "Extra feeding costs to support gene therapy enhanced sperm production",
+				value: Math.trunc(foodCost * 0.2 * s.lactation * (1.1 + Math.trunc(s.balls / 100)))
+			});
+		}
+	}
 	if (s.preg > s.pregData.normalBirth / 8) {
 		if (s.assignment === Job.DAIRY && V.dairyFeedersSetting > 0) {
 			// Extra feeding costs to support pregnancy are covered by dairy feeders.
diff --git a/src/js/pregJS.js b/src/js/pregJS.js
index 124a613224e..98ee619aae3 100644
--- a/src/js/pregJS.js
+++ b/src/js/pregJS.js
@@ -67,6 +67,8 @@ globalThis.setPregType = function(actor) {
 
 	let ovum = jsRandom(actor.pregData.normalOvaMin, actor.pregData.normalOvaMax); // for default human profile it's always 1.
 	let fertilityStack = 0; // adds an increasing bonus roll for stacked fertility drugs
+	let wombCapacity = Math.floor(actor.pregAdaptation / 15); // Used for a gene mod
+	let minFertStack = 0;
 
 	/* Suggestion for better animal pregnancy support - usage of another variable then ovum for fertility drugs bonus, and then adding actor.pregData.drugsEffect multiplier to it before adding to ovum. Example:
 
@@ -332,17 +334,24 @@ globalThis.setPregType = function(actor) {
 					ovum += jsEither([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3]);
 					fertilityStack++;
 				}
+				if (actor.geneMods.livestock === 1) {
+					ovum += Math.max(0, ovum - wombCapacity);
+				}
+				if (actor.geneMods.progenitor === 1) {
+					minFertStack = fertilityStack;
+					fertilityStack += wombCapacity;
+				}
 				if (V.seeHyperPreg === 1) {
 					if (actor.drugs === "super fertility drugs") {
-						ovum += jsRandom(0, fertilityStack * 2);
+						ovum += jsRandom(minFertStack, fertilityStack * 2);
 					} else {
-						ovum += jsRandom(0, fertilityStack);
+						ovum += jsRandom(minFertStack, fertilityStack);
 					}
 					if (actor.ovaImplant === "sympathy") {
 						ovum *= 2;
 					}
 				} else {
-					ovum += jsRandom(0, fertilityStack);
+					ovum += jsRandom(minFertStack, fertilityStack);
 					if (actor.ovaImplant === "sympathy") {
 						ovum *= 2;
 						if (ovum > 12) {
@@ -406,6 +415,19 @@ globalThis.setPregType = function(actor) {
 globalThis.knockMeUp = function(target, chance, hole, fatherID) {
 	let r = ``;
 	if (V.seePreg !== 0) {
+		if (target.geneMods.progenitor === 1) {
+			chance += 20;
+		}
+		let father = findFather(fatherID);
+		if (father !== undefined) {
+			if (father.geneMods.aggressiveSperm === 1) {
+				chance += 75;
+				// While I would like to give a chance of self-impreg here, the risk of recursion seems high.
+			}
+			if (father.geneticQuirks.potent === 1) {
+				chance *= 1.5;
+			}
+		}
 		// eslint-disable-next-line no-nested-ternary
 		if (jsRandom(0, 99) < (chance + (V.reproductionFormula * ((target.pregSource <= 0) ? ((target.ID === -1) ? 0 : 10) : 20)))) {
 			if (target.mpreg === hole || hole === 2) {
@@ -459,6 +481,9 @@ globalThis.getNurseryReserved = function( /* slaves */ ) {
  */
 globalThis.findFather = function(fatherID) {
 	let father = getSlave(fatherID);
+	if (fatherID === -1) {
+		father = V.PC;
+	}
 	if (father === undefined) {
 		if (V.incubator.capacity > 0) {
 			father = V.incubator.tanks.find(s => s.ID === fatherID);
@@ -489,7 +514,7 @@ globalThis.getBaseBoobs = function(slave) {
 globalThis.TerminatePregnancy = function(slave) {
 	if (slave.bellyPreg > 1500) {
 		// late term - highly fertile slaves spring back quicker
-		if (slave.geneticQuirks.fertility + slave.geneticQuirks.hyperFertility >= 4) {
+		if ((slave.geneticQuirks.fertility + slave.geneticQuirks.hyperFertility >= 4) || slave.geneMods.progenitor === 1) {
 			slave.pregWeek = -2;
 		} else if (slave.geneticQuirks.hyperFertility > 1) {
 			slave.pregWeek = -3;
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index 2f524397f36..2279b4449ee 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -478,6 +478,14 @@ globalThis.isPure = function(slave) {
 	return ((slave.boobsImplant === 0) && (slave.buttImplant === 0) && (slave.waist >= -95) && (slave.lipsImplant === 0) && (slave.faceImplant < 30) && (slave.bellyImplant === -1) && (Math.abs(slave.shouldersImplant) < 2) && (Math.abs(slave.hipsImplant) < 2));
 };
 
+/**
+ * @param {App.Entity.SlaveState} slave
+ * @returns {boolean}
+ */
+globalThis.isVirile = function(slave) {
+	return (slave.balls > 0 && slave.pubertyXY === 1 && slave.vasectomy === 0 && slave.ballType !== "sterile");
+};
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {boolean}
diff --git a/src/js/storyJS.js b/src/js/storyJS.js
index bd590dc6fba..688d24f2af8 100644
--- a/src/js/storyJS.js
+++ b/src/js/storyJS.js
@@ -197,25 +197,36 @@ globalThis.milkAmount = function(slave) {
  * @returns {number}
  */
 globalThis.cumAmount = function(slave) {
-	let cum = 0;
-	if (slave.drugs === "testicle enhancement") {
-		cum = ((slave.balls * 3.5) + 1);
-	} else if (slave.drugs === "hyper testicle enhancement") {
-		cum = ((slave.balls * 5) + 1);
-	} else {
-		cum = ((slave.balls * 2.5) + 1);
-	}
-	if (slave.ballType === "sterile") {
-		cum *= 0.8;
-	}
-	if (slave.diet === "cum production") {
-		cum *= 1.2;
+	let cum = 1;
+	if (slave.vasectomy !== 1) {
+		if (isVirile(slave)) {
+			if (slave.drugs === "testicle enhancement") {
+				cum += (slave.balls * 3.5);
+			} else if (slave.drugs === "hyper testicle enhancement") {
+				cum += (slave.balls * 5);
+			} else {
+				cum += (slave.balls * 2.5);
+			}
+			if (slave.scrotum === 0) {
+				cum *= 0.8;
+			}
+			if (slave.geneMods.livestock === 1) {
+				cum *= 1.5;
+			}
+			if (slave.diet === "cum production") {
+				cum *= 1.2;
+			}
+		}
+		if (slave.ballType === "sterile") {
+			cum *= 0.8;
+		} else if (slave.geneMods.aggressiveSperm === 1 && isVirile(slave)) {
+			cum *= 0.5;
+		}
 	}
+
 	const calcs = (slave.hormoneBalance / 50);
 	cum *= (1 - (calcs * 0.1));
-	if (slave.scrotum === 0) {
-		cum *= 0.8;
-	}
+
 	if (slave.prostate === 0) {
 		cum *= 0.2; // being generous here
 	} else if (slave.prostate === 2) {
@@ -223,6 +234,7 @@ globalThis.cumAmount = function(slave) {
 	} else if (slave.prostate === 3) {
 		cum *= 1.5;
 	}
+
 	if (slave.devotion > 50) {
 		cum += (cum * (slave.devotion / 100));
 	} else if (slave.devotion < -50) {
@@ -260,6 +272,9 @@ globalThis.girlCumAmount = function(slave) {
 			fluid *= (1 + (slave.health.condition / 50));
 		}
 	}
+	if (slave.geneMods.livestock === 1) {
+		fluid *= 1.2;
+	}
 	fluid = Math.trunc(fluid);
 	if (fluid < 1) {
 		fluid = 1;
@@ -430,7 +445,7 @@ globalThis.overpowerCheck = function(slave, PC) {
 	let strength = 0;
 	strength += (PC.muscles - slave.muscles);
 	strength += (PC.height - slave.height);
-	strength += ((PC.weight / 5) - (slave.weight / 5))
+	strength += ((PC.weight / 5) - (slave.weight / 5));
 	strength -= (PC.bellyPreg / 1000);
 	strength += (PC.skill.combat - slave.skill.combat);
 	// strength -= (PC.health.shortDamage);
diff --git a/src/js/utilsPC.js b/src/js/utilsPC.js
index f61f71f50e4..f7612fea45d 100644
--- a/src/js/utilsPC.js
+++ b/src/js/utilsPC.js
@@ -641,10 +641,12 @@ globalThis.onBedRest = function(actor, workingFromBed = false) {
 		return true;
 	} else if (actor.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20) && !workingFromBed) {
 		return true;
-	} else if (actor.bellyPreg >= actor.pregAdaptation * 2200 && !workingFromBed) {
+	} else if (actor.bellyPreg >= actor.pregAdaptation * 2200 && actor.geneMods.progenitor !== 1 && !workingFromBed) {
 		return true;
 	} else if (isInduced(actor)) {
 		return true;
+	} else if (actor.geneMods.rapidCellGrowth !== 1 && actor.bellyPreg >= 100000 && actor.belly > (actor.pregAdaptation * 3200) && (actor.bellyPreg >= 500000 || actor.wombImplant !== "restraint")) {
+		return true;
 	}
 	return false;
 };
diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index bc6bd08ec51..3058e20fb57 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -2812,6 +2812,9 @@ globalThis.ageSlaveWeeks = function(slave, weeks = 1) {
 			}
 		}
 	}
+	if (slave.geneMods.progenitor === 1 && canGetPregnant(slave)) { // Progenitor mod causes ovarian burnout if not put to use.
+		slave.ovaryAge += 0.4;
+	}
 };
 
 /** advances the age of a slave by one year, incurring all aging side effects
diff --git a/src/js/wombJS.js b/src/js/wombJS.js
index b7726154785..00b724f1be4 100644
--- a/src/js/wombJS.js
+++ b/src/js/wombJS.js
@@ -588,7 +588,7 @@ globalThis.WombSort = function(actor) {
  */
 globalThis.fetalSplit = function(actor, chance) {
 	for (const s of actor.womb) {
-		if (jsRandom(1, chance) >= chance) {
+		if (jsRandom(1, chance) >= chance || (actor.geneticQuirks.twinning === 2 && (actor.womb.length < Math.floor(actor.pregAdaptation / 32) || actor.womb.length === 1) && (s.twinID === "" || s.twinID === undefined))) {
 			// if this fetus is not already an identical, generate a new twin ID before cloning it
 			if (s.twinID === "" || s.twinID === undefined) {
 				s.twinID = generateNewID();
diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js
index 38aa2826da8..f3ec31268c7 100644
--- a/src/npc/descriptions/boobs/boobs.js
+++ b/src/npc/descriptions/boobs/boobs.js
@@ -1813,7 +1813,9 @@ App.Desc.nipples = function(slave, descType) {
 			}
 		}
 		if (slave.lactationAdaptation > 10) {
-			if (slave.lactationAdaptation > 50) {
+			if (slave.lactationAdaptation > 150) {
+				r += ` ${He}'s produced such a vast amount of milk that ${his} body is now dedicated to copious production.`;
+			} else if (slave.lactationAdaptation > 50) {
 				r += ` ${He}'s given so much milk that ${his} body is now well-adapted to copious production.`;
 			} else {
 				r += ` ${His} body has become used to milk production.`;
diff --git a/src/npc/descriptions/crotch/dick.js b/src/npc/descriptions/crotch/dick.js
index c48a3447559..eeb08a21eb8 100644
--- a/src/npc/descriptions/crotch/dick.js
+++ b/src/npc/descriptions/crotch/dick.js
@@ -755,10 +755,14 @@ App.Desc.dick = function(slave, descType = DescType.NORMAL) {
 				}
 			}
 
-			if (slave.balls > 0 && slave.vasectomy === 1) {
-				r.push(`${He} shoots blanks thanks to ${his} vasectomy.`);
-			} else if (slave.balls > 0 && slave.ballType === "sterile") {
-				r.push(`${He} no longer produces sperm, so ${his} ejaculate lacks potency.`);
+			if (!isVirile(slave)) {
+				if (slave.vasectomy === 1) {
+					r.push(`${He} shoots blanks thanks to ${his} vasectomy.`);
+				} else if (slave.ballType === "sterile") {
+					r.push(`${He} no longer produces sperm, so ${his} ejaculate lacks potency.`);
+				} else if (slave.pubertyXY !== 1) {
+					r.push(`While ${he} does ejaculate, ${his} testicles aren't mature enough to add sperm to it.`);
+				}
 			}
 
 			if (slave.physicalAge <= 3) {
@@ -858,6 +862,36 @@ App.Desc.dick = function(slave, descType = DescType.NORMAL) {
 			if (slave.prostate > 2) {
 				r.push(`${His} ejaculate has a distinct clearness to it from the sheer amount of prostate fluid produced by ${his} overstimulated prostate.`);
 			}
+			if (isVirile(slave)) {
+				if (slave.geneMods.livestock === 1) {
+					r.push(`${His} loads are ${slave.prostate < 2 ? "incredibly thick" : "noticeably thicker"} thanks to ${his} genetic modifications.`);
+					if (slave.geneMods.aggressiveSperm === 1) {
+						r.push(`It also takes an effort to shoot it all out, which seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+						if (!V.seePreg) {
+							r.push(`you get a nasty surprise should you sit down without looking.`);
+						} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+							r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+						} else {
+							r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+						}
+						if (V.seePreg && canGetPregnant(slave) && canImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+							r.push(`Odds are some of ${his} sperm will eventually find its way to ${his} womb, so sooner or later ${he} will grow pregnant with ${his} own child.`);
+						}
+					}
+				} else if (slave.geneMods.aggressiveSperm === 1) {
+					r.push(`${His} gene therapy has reduced the density of ${his} loads, but the volume of it slowly working through ${his} urethra seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+					if (!V.seePreg) {
+						r.push(`you get a nasty surprise should you sit down without looking.`);
+					} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+						r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+					} else {
+						r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+					}
+					if (V.seePreg && canGetPregnant(slave) && canImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+						r.push(`Odds are some of ${his} sperm will eventually find its way to ${his} womb, so sooner or later ${he} will grow pregnant with ${his} own child.`);
+					}
+				}
+			}
 
 			if (slave.physicalAge <= 3) {
 				massiveTesticles1();
@@ -1300,10 +1334,44 @@ App.Desc.dick = function(slave, descType = DescType.NORMAL) {
 			if (slave.prostate > 2) {
 				r.push(`${His} ejaculate has a distinct clearness to it from the sheer amount of prostate fluid produced by ${his} overstimulated prostate.`);
 			}
-			if (slave.balls > 0 && slave.vasectomy === 1) {
-				r.push(`${He} shoots blanks thanks to ${his} vasectomy.`);
-			} else if (slave.balls > 0 && slave.ballType === "sterile") {
-				r.push(`${He} no longer produces sperm, so ${his} cum lacks potency.`);
+			if (isVirile(slave)) {
+				if (slave.geneMods.livestock === 1) {
+					r.push(`${His} loads are ${slave.prostate < 2 ? "incredibly thick" : "noticeably thicker"} thanks to ${his} genetic modifications.`);
+					if (slave.geneMods.aggressiveSperm === 1) {
+						r.push(`It also takes an effort to shoot it all out, which seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+						if (!V.seePreg) {
+							r.push(`you get a nasty surprise should you sit down without looking.`);
+						} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+							r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+						} else {
+							r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+						}
+						if (V.seePreg && canGetPregnant(slave) && canImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+							r.push(`Odds are some of ${his} sperm will eventually find its way to ${his} womb, so sooner or later ${he} will grow pregnant with ${his} own child.`);
+						}
+					}
+				} else if (slave.geneMods.aggressiveSperm === 1) {
+					r.push(`${His} gene therapy has reduced the density of ${his} loads, but the volume of it slowly working through ${his} urethra seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+					if (!V.seePreg) {
+						r.push(`you get a nasty surprise should you sit down without looking.`);
+					} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+						r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+					} else {
+						r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+					}
+					if (V.seePreg && canGetPregnant(slave) && canFemImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+						r.push(`Odds are some of ${his} sperm will eventually find its way to ${his} womb, so sooner or later ${he} will grow pregnant with ${his} own child.`);
+					}
+				}
+			}
+			if (!isVirile(slave)) {
+				if (slave.vasectomy === 1) {
+					r.push(`${He} shoots blanks thanks to ${his} vasectomy.`);
+				} else if (slave.ballType === "sterile") {
+					r.push(`${He} no longer produces sperm, so ${his} ejaculate lacks potency.`);
+				} else if (slave.pubertyXY !== 1) {
+					r.push(`While ${he} does ejaculate, ${his} testicles aren't mature enough to add sperm to it.`);
+				}
 			}
 		}
 	} else if (slave.balls > 0) {
@@ -1484,6 +1552,36 @@ App.Desc.dick = function(slave, descType = DescType.NORMAL) {
 			if (slave.prostate > 2) {
 				r.push(`${His} ejaculate has a distinct clearness to it from the sheer amount of prostate fluid produced by ${his} overstimulated prostate.`);
 			}
+			if (isVirile(slave)) {
+				if (slave.geneMods.livestock === 1) {
+					r.push(`${His} loads are ${slave.prostate < 2 ? "incredibly thick" : "noticeably thicker"} thanks to ${his} genetic modifications.`);
+					if (slave.geneMods.aggressiveSperm === 1) {
+						r.push(`It also takes an effort to shoot it all out, which seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+						if (!V.seePreg) {
+							r.push(`you get a nasty surprise should you sit down without looking.`);
+						} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+							r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+						} else {
+							r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+						}
+						if (V.seePreg && canGetPregnant(slave) && canImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+							r.push(`Odds are some of ${his} sperm will eventually find its way to ${his} womb, so sooner or later ${he} will grow pregnant with ${his} own child.`);
+						}
+					}
+				} else if (slave.geneMods.aggressiveSperm === 1) {
+					r.push(`${His} gene therapy has reduced the density of ${his} loads, but the volume of it slowly working through ${his} urethra seems to make it more pleasurable than a typical cumshot. ${He} is required to be extra vigilant in cleaning up after ${himself} lest`);
+					if (!V.seePreg) {
+						r.push(`you get a nasty surprise should you sit down without looking.`);
+					} else if (canGetPregnant(V.PC) && canImpreg(V.PC, slave) && (V.PC.mpreg === 1 || V.PC.vagina >= 0)) {
+						r.push(`you take a seat somewhere ${he} came and suddenly find yourself in the family way.`);
+					} else {
+						r.push(`a wayward glob of ${his} cum somehow meets a fertile pussy and causes you a whole lot of problems.`);
+					}
+					if (V.seePreg && canGetPregnant(slave) && canFemImpreg(slave, slave) && (slave.mpreg === 1 || slave.vagina >= 0)) {
+						r.push(`Since some of ${his} sperm leaks down into ${his} pussy whenever ${he} cums, sooner or later ${he} will grow pregnant with ${his} own child.`);
+					}
+				}
+			}
 		} else {
 			if (slave.prostate > 2) {
 				r.push(`The area above ${his} crotch has a slight swell to it from ${his} prostate implant.`);
diff --git a/src/npc/descriptions/crotch/vagina.js b/src/npc/descriptions/crotch/vagina.js
index 424337c0659..3d2bbe3a178 100644
--- a/src/npc/descriptions/crotch/vagina.js
+++ b/src/npc/descriptions/crotch/vagina.js
@@ -273,6 +273,15 @@ App.Desc.vagina = function(slave) {
 		}
 	}
 
+	if (slave.geneMods.progenitor === 1) {
+		r.push(`${He} has been genetically treated to enhance ${his} ability to bear children.`);
+		if (canGetPregnant(slave)) {
+			r.push(`${His} body is very eager for that to happen, and at the rate it is keeping itself ready, early menopause is inevitable unless it is given what it wants.`);
+		} else if (slave.preg > 0 && slave.pregKnown) {
+			r.push(`Now that ${his} body has life growing within it, it is unlikely to let it go until it is fully ready.`);
+		}
+	}
+
 	if (slave.dick === 0 && slave.balls === 0 && slave.vagina < 0 && V.arcologies[0].FSRestart > 60) {
 		r.push(`Society looks fondly on ${his} complete inability to reproduce.`);
 	}
diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js
index 047dcd6391a..e940088c029 100644
--- a/src/npc/descriptions/descriptionWidgets.js
+++ b/src/npc/descriptions/descriptionWidgets.js
@@ -468,25 +468,22 @@ App.Desc.ageAndHealth = function(slave) {
 		}
 		age = slave.actualAge + 1;
 		r += ` ${He} `;
-		if(slave.actualAge === V.idealAge || (slave.actualAge === V.idealAge - 1 && slave.birthWeek >= 52 && V.seeAge)) {
-			if(slave.birthWeek >= 52 && V.seeAge) {
+		if (slave.actualAge === V.idealAge || (slave.actualAge === V.idealAge - 1 && slave.birthWeek >= 52 && V.seeAge)) {
+			if (slave.birthWeek >= 52 && V.seeAge) {
 				r += `is going to turn ${age} this week`;
 				if (V.showAgeDetail && V.seeAge !== 0 && slave.actualAge !== V.idealAge) {
 					r += `, and people are already beginning to eye ${him}.`;
 				} else {
 					r += `.`;
 				}
-			}
-			else if(!slave.birthWeek && V.seeAge) {
+			} else if (!slave.birthWeek && V.seeAge) {
 				r += `just turned ${num(slave.actualAge)} this week, which many citizens find especially appealing.`;
-			}
-			else if (slave.birthWeek < 4 && V.seeAge) {
+			} else if (slave.birthWeek < 4 && V.seeAge) {
 				r += `only turned ${num(slave.actualAge)} this month. `;
 			} else {
 				r += `is ${num(slave.actualAge)} years old${birthday}. `;
 			}
-		}
-		else if (slave.birthWeek >= 52 && V.seeAge) {
+		} else if (slave.birthWeek >= 52 && V.seeAge) {
 			r += `is going to turn ${age} this week,`;
 		} else if (slave.actualAge < 3) {
 			r += `is an infant, only `;
@@ -748,9 +745,6 @@ App.Desc.ageAndHealth = function(slave) {
 			if (slave.geneMods.immortality === 1) {
 				r += `Due to extensive genetic modification, ${he} is essentially immortal and will not die of old age. `;
 			}
-			if (slave.geneMods.flavoring === 1) {
-				r += `Due to genetic modification ${his} milk tastes like ${slave.milkFlavor}. `;
-			}
 		}
 	} else {
 		r += ` The Fuckdoll gives no external indication of ${his} health or age, but upon query ${his} systems reports that ${he} is `;
@@ -1523,6 +1517,11 @@ App.Desc.geneticQuirkAssessment = function(slave) {
 		if (slave.geneticQuirks.uFace === 1 && V.geneticMappingUpgrade >= 2) {
 			r.push(`${He} is a carrier of a combination of traits that can result in raw ugliness.`);
 		}
+		if (slave.geneticQuirks.potent === 2) {
+			r.push(`${He} is naturally potent${isVirile(slave) ? " and excels at impregnation" : ""}.`);
+		} else if (slave.geneticQuirks.potent === 1 && V.geneticMappingUpgrade >= 2) {
+			r.push(`${He} is a carrier of a genetic condition resulting in increased potency.`);
+		}
 		if (slave.geneticQuirks.fertility === 2 && slave.geneticQuirks.hyperFertility === 2) {
 			r.push(`${He} has a unique genetic condition resulting in inhumanly high`);
 			if (slave.ovaries === 1 || slave.mpreg === 1) {
diff --git a/src/npc/descriptions/style/hair.js b/src/npc/descriptions/style/hair.js
index d3fb85f93fe..30d7949ad6e 100644
--- a/src/npc/descriptions/style/hair.js
+++ b/src/npc/descriptions/style/hair.js
@@ -157,6 +157,26 @@ App.Desc.hair = function(slave) {
 				r.push(`${slave.hColor} hair${slave.hEffect === "none" ? `` : ` that has ${slave.hEffect} to it,`}`);
 				r.push(App.Desc.hairClothing(slave));
 				break;
+			case "unique": // For custom hair and really indescribable hairstyles.
+				if (hairLength > 0.9) {
+					r.push(`floor-length,`);
+				} else if (hairLength > 0.8) {
+					r.push(`calf-length,`);
+				} else if (hairLength > 0.7) {
+					r.push(`knee-length,`);
+				} else if (hairLength >= 0.6) {
+					r.push(`thigh-length,`);
+				} else if (hairLength >= 0.4) {
+					r.push(`ass-length,`);
+				} else if (hairLength >= 0.2) {
+					r.push(`long,`);
+				} else if (hairLength >= 15) {
+					r.push(`shoulder-length,`);
+				} else {
+					r.push(`short,`);
+				}
+				r.push(`${slave.hColor} hair${slave.hEffect === "none" ? `` : ` that is stylized with ${slave.hEffect},`} is truley unique to ${him}.`);
+				break;
 			default:
 				r.push(`${slave.hColor} hair${slave.hEffect === "none" ? `` : `, that is stylized with ${slave.hEffect},`} is ${slave.hStyle} and`);
 				if (hairLength > 0.9) {
diff --git a/src/npc/descriptions/womb/pregnancy.js b/src/npc/descriptions/womb/pregnancy.js
index 1beb67819a4..0f66527bce7 100644
--- a/src/npc/descriptions/womb/pregnancy.js
+++ b/src/npc/descriptions/womb/pregnancy.js
@@ -599,7 +599,9 @@ App.Desc.pregnancy = function(slave, descType = DescType.NORMAL) {
 			}
 		}
 	}
-	if (slave.bellyPreg > (slave.pregAdaptation * 1000) || (slave.preg > slave.pregData.normalBirth / 2 && slave.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20))) {
+	if (slave.geneMods.rapidCellGrowth !== 1 && slave.bellyPreg >= 100000 && slave.belly > (slave.pregAdaptation * 3200) && (slave.bellyPreg >= 500000 || slave.wombImplant !== "restraint")) {
+		r.push(`${He} is undergoing a <span class="red">very high risk pregnancy${V.seeExtreme === 1 && V.dangerousPregnancy === 1 ? " and may burst" : ""}.</span>`);
+	} else if ((slave.bellyPreg > (slave.pregAdaptation * 1000) || (slave.preg > slave.pregData.normalBirth / 2 && slave.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20))) && slave.geneMods.progenitor !== 1) {
 		r.push(`${He} is undergoing a <span class="red">high risk pregnancy.</span>`);
 	}
 
diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js
index 420d519c8cf..23cfcc48ee8 100644
--- a/src/npc/generate/generateGenetics.js
+++ b/src/npc/generate/generateGenetics.js
@@ -726,7 +726,45 @@ globalThis.generateGenetics = (function() {
 		// Normal male, carrier female:				50% of daughters carriers,	50% of sons carriers						geneTotal 1
 		// Carrier male, normal female:				100% of daughters carriers, sons normal									geneTotal 1
 
-		// Sex-linked traits (fertility-affecting, well-hung) left handled by the old method; latter made mirror image to former.
+		// Sex-linked traits (fertility-affecting, potent, well-hung) left handled by the old method; latter made mirror image to former.
+
+		// potency
+		if (mother.geneticQuirks.potent === 2) {
+			if (sex === "XY") {
+				quirks.potent = 2;
+			} else {
+				quirks.potent = 1;
+			}
+		} else if (mother.geneticQuirks.potent === 1) {
+			chance = jsRandom(0, 1000);
+			if (father !== 0) {
+				if (father.geneticQuirks.potent >= 1) {
+					if (sex === "XY") {
+						if (chance > 500) {
+							quirks.potent = 2;
+						} else if (chance > 50) {
+							quirks.potent = 1;
+						}
+					} else {
+						if (chance > 500) {
+							quirks.potent = 1;
+						}
+					}
+				}
+			} else {
+				if (sex === "XY") {
+					if (chance > 950) {
+						quirks.potent = 2;
+					} else if (chance > 200) {
+						quirks.potent = 1;
+					}
+				} else {
+					if (chance > 500) {
+						quirks.potent = 1;
+					}
+				}
+			}
+		}
 
 		// fertility
 		if (mother.geneticQuirks.fertility === 2) {
@@ -937,6 +975,15 @@ globalThis.generateGenetics = (function() {
 			}
 		}
 
+		// twinning
+		if (mother.geneticQuirks.twinning === 2) {
+			if (sex === "XX") {
+				quirks.twinning = 2;
+			} else {
+				quirks.twinning = 1;
+			}
+		}
+
 		// perfect face
 		quirks.pFace = genes(father !== 0 ? father.geneticQuirks.pFace : 0, mother.geneticQuirks.pFace);
 
diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js
index 504680174ad..771360302c3 100644
--- a/src/npc/generate/generateNewSlaveJS.js
+++ b/src/npc/generate/generateNewSlaveJS.js
@@ -1177,6 +1177,9 @@ globalThis.GenerateNewSlave = (function() {
 		} else if (chance >= 9900) {
 			slave.geneticQuirks.hyperFertility = 1;
 		}
+		if (jsRandom(1, 10000) >= 9900) {
+			slave.geneticQuirks.potent = 1;
+		}
 		chance = jsRandom(1, 100000);
 		if (chance < 3) {
 			slave.geneticQuirks.superfetation = 2;
@@ -1293,6 +1296,12 @@ globalThis.GenerateNewSlave = (function() {
 		} else if (chance >= 9500) {
 			slave.geneticQuirks.wellHung = 1;
 		}
+		chance = jsRandom(1, 10000);
+		if (chance >= 9750) {
+			slave.geneticQuirks.potent = 2;
+		} else if (chance >= 9000) {
+			slave.geneticQuirks.potent = 1;
+		}
 		chance = jsRandom(1, 1000);
 		if (chance >= 950) {
 			slave.geneticQuirks.fertility = 1;
diff --git a/src/npc/generate/heroCreator.js b/src/npc/generate/heroCreator.js
index 2f821c29c9e..8ebe65004b8 100644
--- a/src/npc/generate/heroCreator.js
+++ b/src/npc/generate/heroCreator.js
@@ -88,19 +88,9 @@ App.Utils.getHeroSlave = function(heroSlave) {
 	}
 	generatePronouns(heroSlave);
 	if (heroSlave.geneMods === undefined) {
-		heroSlave.geneMods = {NCS: 0, rapidCellGrowth: 0, immortality: 0, bioEngineeredMilkFlavoring: 0};
-	}
-	if (heroSlave.geneMods.NCS === undefined) {
-		heroSlave.geneMods.NCS = 0;
-	}
-	if (heroSlave.geneMods.rapidCellGrowth === undefined) {
-		heroSlave.geneMods.rapidCellGrowth = 0;
-	}
-	if (heroSlave.geneMods.immortality === undefined) {
-		heroSlave.geneMods.immortality = 0;
-	}
-	if (heroSlave.geneMods.flavoring === undefined) {
-		heroSlave.geneMods.flavoring = 0;
+		heroSlave.geneMods = {NCS: 0, rapidCellGrowth: 0, immortality: 0, flavoring: 0, aggressiveSperm: 0, livestock: 0, progenitor: 0};
+	} else {
+		heroSlave.geneMods = Object.assign({NCS: 0, rapidCellGrowth: 0, immortality: 0, flavoring: 0, aggressiveSperm: 0, livestock: 0, progenitor: 0}, heroSlave.geneMods);
 	}
 
 	// WombInit(heroSlave);
diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js
index da675d4fb2e..b8a2590c988 100644
--- a/src/npc/interaction/fFeelings.js
+++ b/src/npc/interaction/fFeelings.js
@@ -1380,6 +1380,12 @@ App.Interact.fFeelings = function(slave) {
 					}
 					break;
 			}
+			if (slave.geneMods.livestock === 1) {
+				text.push(`Ah! You heard my stomach rumble just now, didn't you? I've been so hungry lately, I'm not sure why.`);
+				if (canGetPregnant(slave)) {
+					text.push(`Am I pregnant?`);
+				}
+			}
 
 			return text.join(' ');
 		}
diff --git a/src/player/desc/pLongBelly.js b/src/player/desc/pLongBelly.js
index aac178a8266..32c1b91fcc9 100644
--- a/src/player/desc/pLongBelly.js
+++ b/src/player/desc/pLongBelly.js
@@ -1608,12 +1608,14 @@ App.Desc.Player.belly = function(PC = V.PC) {
 		if (onBedRest(PC)) {
 			if (isInduced(PC)) {
 				r.push(`You've taken drugs to induce labor and are already feeling the effects. The birth is coming up fast!`);
-			} else if ((PC.bellyPreg >= PC.pregAdaptation * 2200) || (PC.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20))) {
+			} else if (((PC.bellyPreg >= PC.pregAdaptation * 2200) || (PC.womb.find((ft) => ft.genetics.geneticQuirks.polyhydramnios === 2 && ft.age >= 20))) && PC.geneMods.progenitor !== 1) {
 				r.push(`You are undergoing a <span class="red">very high risk pregnancy,</span> so to avoid giving birth prematurely, you have been placed on medical bed rest.`);
 			} else if (PC.preg > PC.pregData.normalBirth / 1.05) {
 				r.push(`You're far enough along at this point that it's in your best interest to stay in the nest and wait things out instead of risking going to labor at an inopportune time.`);
 			}
-			if (PC.bellyPreg > PC.pregAdaptation * 1000 && PC.bellyPreg < PC.pregAdaptation * 2200) {
+			if (PC.geneMods.rapidCellGrowth !== 1 && PC.bellyPreg >= 100000 && PC.belly > (PC.pregAdaptation * 3200) && (PC.bellyPreg >= 500000 || PC.wombImplant !== "restraint")) {
+				r.push(`You are undergoing a <span class="red">very high risk pregnancy,</span> so to decrease the likelyhood of ${V.seeExtreme === 1 && V.dangerousPregnancy === 1 ? "abdominal rupture" : "your water breaking early"}, you have been placed on medical bed rest.`);
+			} else if (PC.bellyPreg > PC.pregAdaptation * 1000 && PC.bellyPreg < PC.pregAdaptation * 2200 && slave.geneMods.progenitor !== 1) {
 				r.push(`You are undergoing a <span class="red">high risk pregnancy,</span> so taking things easy is probably a good idea.`);
 			}
 		}
diff --git a/src/player/desc/pLongBoobs.js b/src/player/desc/pLongBoobs.js
index 74281dcbd63..a15309f5834 100644
--- a/src/player/desc/pLongBoobs.js
+++ b/src/player/desc/pLongBoobs.js
@@ -337,7 +337,9 @@ App.Desc.Player.boobs = function(PC = V.PC) {
 			}
 			if (PC.lactationAdaptation > 10) {
 				r.push(`As if on demand, your milk starts to dribble down your tits.`);
-				if (PC.lactationAdaptation > 50) {
+				if (PC.lactationAdaptation > 150) {
+					r.push(`Your body is so dedicated to producing milk that these breaks are a luxury.`);
+				} else if (PC.lactationAdaptation > 50) {
 					r.push(`Your body is so well-adapted to milk production that this is a regular affair now.`);
 				} else {
 					r.push(`Your body has become accustomed to milk production.`);
@@ -354,7 +356,9 @@ App.Desc.Player.boobs = function(PC = V.PC) {
 				r.push(`Your nipples cap a pair of painfully swollen bumps; milk constantly trickles from them unless you regularly milk yourself.`);
 			}
 			if (PC.lactationAdaptation > 10) {
-				if (PC.lactationAdaptation > 50) {
+				if (PC.lactationAdaptation > 150) {
+					r.push(`Your body is so dedicated to producing milk that this break only lasts minutes. You have to stay attached to a milking machine to truly relieve the stress.`);
+				} else if (PC.lactationAdaptation > 50) {
 					r.push(`Your body is so well-adapted to milk production that this only results in fleeting relief.`);
 				} else {
 					r.push(`Your body has become accustomed to milk production that this is become annoyingly frequent.`);
diff --git a/src/player/desc/pLongButt.js b/src/player/desc/pLongButt.js
index 70caba5619d..470f26bd28a 100644
--- a/src/player/desc/pLongButt.js
+++ b/src/player/desc/pLongButt.js
@@ -373,6 +373,14 @@ App.Desc.Player.butt = function(PC = V.PC) {
 					r.push(`pregnancies.`);
 				}
 			}
+			if (PC.geneMods.progenitor === 1) {
+				r.push(`You've undergone gene therapy to better carry children.`);
+				if (canGetPregnant(PC)) {
+					r.push(`Your body is just wasting eggs at this point; menopause will be upon you before you realize it unless you get yourself pregnant.`);
+				} else if (PC.preg > 0 && PC.pregKnown && V.dangerousPregnancy === 1) {
+					r.push(`According to the data, it shouldn't be possive for you to prematurely give birth.`);
+				}
+			}
 			if (PC.ovaImplant !== 0) {
 				if (PC.wombImplant === "restraint") {
 					r.push(`You ovaries are modified as well;`);
diff --git a/src/player/desc/pLongCrotch.js b/src/player/desc/pLongCrotch.js
index 68928031e4a..e6b7bd2bd45 100644
--- a/src/player/desc/pLongCrotch.js
+++ b/src/player/desc/pLongCrotch.js
@@ -4,7 +4,7 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 	const legs = hasBothLegs(PC) ? "legs" : "leg";
 	const hands = hasBothArms(PC) ? "hands" : "hand";
 	const isAroused = isPlayerHorny(PC);
-	const isVirile = (PC.balls > 0 && PC.pubertyXY === 1 && PC.vasectomy === 0 && PC.ballType !== "sterile");
+	const virile = isVirile(PC);
 	const cumTotal = (cumAmount(PC) / 70) || 0;
 	const foreskinRatio = (PC.foreskin - PC.dick);
 	const bigBelly = (PC.belly >= 100000 || PC.weight > 130);
@@ -556,7 +556,23 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 			ballThoughts(),
 			scrotumDesc()
 		);
-		if (!isVirile) {
+		if (virile) {
+			if (PC.geneMods.livestock === 1) {
+				r.push(`Your loads are thick and enormous thanks to your gene therapy.`);
+				if (PC.geneMods.aggressiveSperm === 1) {
+					r.push(`It's also really difficult to shoot it all out.`);
+					if (canGetPregnant(PC) && canImpreg(PC, PC) && (PC.mpreg === 1 || PC.vagina >= 0) && V.seePreg) {
+						r.push(`You have to be mindful of where your loads land too; one bad angle is all it would take for your belly to start rounding out with your own child.`);
+					}
+				}
+			} else if (PC.geneMods.aggressiveSperm === 1) {
+				r.push(`Your gene therapy has reduced the density of your loads, but the volume of it slowly working through your urethra feels magical.`);
+				if (canGetPregnant(PC) && canImpreg(PC, PC) && (PC.mpreg === 1 || PC.vagina >= 0) && V.seePreg) {
+					r.push(`You have to be mindful of where your loads go, however, as one bad shot is all it would take for your belly to start rounding out with your own child.`);
+				}
+			}
+		}
+		if (!virile) {
 			if (PC.vasectomy === 1) {
 				r.push(`You're had a vasectomy`);
 				if (PC.pubertyXY !== 1) {
@@ -769,7 +785,23 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 		} else {
 			r.push(`internal testicles.</span>`);
 		}
-		if (!isVirile) {
+		if (virile && PC.geneMods.livestock === 1) {
+			if (PC.geneMods.livestock === 1) {
+				r.push(`Your loads are thick and enormous thanks to your gene therapy.`);
+				if (PC.geneMods.aggressiveSperm === 1) {
+					r.push(`It's also really difficult to shoot it all out.`);
+					if (canGetPregnant(PC) && canImpreg(PC, PC) && (PC.mpreg === 1 || PC.vagina >= 0) && V.seePreg) {
+						r.push(`You have to be mindful of where your loads land too; one bad angle is all it would take for your belly to start rounding out with your own child.`);
+					}
+				}
+			} else if (PC.geneMods.aggressiveSperm === 1) {
+				r.push(`Your gene therapy has reduced the density of your loads, but the volume of it slowly working through your urethra feels magical.`);
+				if (canGetPregnant(PC) && canImpreg(PC, PC) && (PC.mpreg === 1 || PC.vagina >= 0) && V.seePreg) {
+					r.push(`You have to be mindful of where your loads go, however, as one bad shot is all it would take for your belly to start rounding out with your own child.`);
+				}
+			}
+		}
+		if (!virile) {
 			if (PC.vasectomy === 1) {
 				r.push(`They're not connected to anything at the moment, but you can always get your vasectomy reversed if you wanted.`);
 			} else if (PC.ballType === "sterile") {
@@ -1186,7 +1218,7 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 				r.push(`This hole is normally almost invisible, so it's`);
 				if (PC.prostate > 2 || cumTotal >= 1) {
 					r.push(`absolutely shocking to new partners when you climax and fire a massive cumshot out of it.`);
-				} else if (PC.balls > 0 && isVirile) {
+				} else if (PC.balls > 0 && virile) {
 					r.push(`quite surprising to new partners when you climax and shoot cum out of it.`);
 				} else if (PC.prostate > 0) {
 					r.push(`quite surprising to new partners when you climax and squirt from it.`);
@@ -1196,15 +1228,15 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 				if (PC.prostate > 0 && PC.balls > 0) {
 					r.push(`a functional prostate gland attached to your urethra and <span class="orange">a pair of ${ballSize} internal testicles</span> to go with it, you`);
 					if (PC.prostate > 2 || cumTotal >= 1) {
-						r.push(`soak yourself and your surroundings with ${isVirile ? "semen and " : ""}sexual fluids every time you cum.`);
+						r.push(`soak yourself and your surroundings with ${virile ? "semen and " : ""}sexual fluids every time you cum.`);
 					} else {
-						r.push(`squirt copious amounts of fluid ${isVirile ? "and semen " : ""}with each orgasm.`);
+						r.push(`squirt copious amounts of fluid ${virile ? "and semen " : ""}with each orgasm.`);
 					}
 				} else if (PC.balls > 0) {
 					if (cumTotal >= 1) {
-						r.push(`<span class="orange">an overproductive pair of ${ballSize} internal testicles</span> hooked up to your urethra, you release a flood of ${isVirile ? "semen" : "ejaculate"} every time you cum.`);
+						r.push(`<span class="orange">an overproductive pair of ${ballSize} internal testicles</span> hooked up to your urethra, you release a flood of ${virile ? "semen" : "ejaculate"} every time you cum.`);
 					} else {
-						r.push(`<span class="orange">a pair of ${ballSize} internal testicles</span> hooked up to your urethra, you squirt a little ${isVirile ? "semen" : "ejaculate"} with each orgasm.`);
+						r.push(`<span class="orange">a pair of ${ballSize} internal testicles</span> hooked up to your urethra, you squirt a little ${virile ? "semen" : "ejaculate"} with each orgasm.`);
 					}
 				} else if (PC.prostate > 0) {
 					r.push(`a functional prostate gland attached to your urethra, you`);
@@ -1219,7 +1251,7 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 				r.push(`Your prostate is under constant pressure from your advanced pregnancy, forcing frequent bouts of extreme arousal on you.`);
 			}
 			if (PC.balls > 0) {
-				if (!isVirile) {
+				if (!virile) {
 					r.push(`This fluid isn't virile`);
 					if (PC.vasectomy === 1) {
 						r.push(`since you've had a vasectomy.`);
@@ -1231,6 +1263,17 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 				} else if (V.geneticMappingUpgrade >= 1 && PC.genes === "XY" && V.seeDicksAffectsPregnancy === 0) {
 					r.push(`Analysis of the sperm mixed into this fluid reveals that you have a ${PC.spermY}% chance of fathering a son.`);
 				}
+				if (virile && PC.geneMods.aggressiveSperm === 1 && canGetPregnant(PC) && canFemImpreg(PC, PC) && (PC.mpreg === 1 || PC.vagina >= 0)) {
+					r.push(`Your gene therapy has greatly increased the survivability of your sperm and since you don't project it far from your body on ejaculation,`);
+					if (PC.mpreg === 1) {
+						r.push(`it's quite likely that some of it will find its way to your anus.`);
+					} else {
+						r.push(`some of it always trickles into your pussy.`);
+					}
+					if (V.seePreg) {
+						r.push(`You need to use birth control or your constant self-seeding will see you pregnant.`);
+					}
+				}
 			}
 		}
 
@@ -1300,6 +1343,14 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 		if (PC.vagina === -1) {
 			r.push(`You lack a vagina, which means you can only bear children surgically.`);
 		}
+		if (PC.geneMods.progenitor === 1) {
+			r.push(`You've undergone gene therapy to better carry children.`);
+			if (canGetPregnant(PC)) {
+				r.push(`Your body is just wasting eggs at this point; menopause will be upon you before you realize it unless you put your womb to work.`);
+			} else if (PC.preg > 0 && PC.pregKnown && V.dangerousPregnancy === 1) {
+				r.push(`According to the data, it shouldn't be possive for you to prematurely give birth.`);
+			}
+		}
 		if (PC.ovaImplant !== 0) {
 			if (PC.wombImplant === "restraint") {
 				r.push(`You ovaries are modified as well;`);
diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js
index 57442d5d7f3..caec5ce53db 100644
--- a/src/player/js/PlayerState.js
+++ b/src/player/js/PlayerState.js
@@ -1665,6 +1665,8 @@ App.Entity.PlayerState = class PlayerState {
 			 *
 			 * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
 			gigantomastia: 0,
+			/** sperm is much more likely to knock someone up */
+			potent: 0,
 			/** is prone to having twins, shorter pregnancy recovery rate */
 			fertility: 0,
 			/** is prone to having multiples, even shorter pregnancy recovery rate
@@ -1702,6 +1704,8 @@ App.Entity.PlayerState = class PlayerState {
 			rearLipedema: 0,
 			/** has (or will have) a huge dong */
 			wellHung: 0,
+			/** predisposed to having and supporting larger tits */
+			bustSize: 0,
 			/** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
 			wGain: 0,
 			/** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
@@ -1712,6 +1716,9 @@ App.Entity.PlayerState = class PlayerState {
 			mGain: 0,
 			/** constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */
 			mLoss: 0,
+			/** ova will split if room is available
+			 *  only affects fetuses */
+			twinning: 0,
 			/** slave can only ever birth girls */
 			girlsOnly: 0
 		};
@@ -2008,11 +2015,23 @@ App.Entity.PlayerState = class PlayerState {
 			/** Are you immortal?
 			 * @type {FC.Bool}
 			 * 0: no; 1: yes */
-			 immortality: 0,
+			immortality: 0,
 			 /** Is your milk flavored?
 			  * @type {FC.Bool}
 			  * 0: no; 1: yes */
-			 flavoring: 0
+			flavoring: 0,
+			/** Has the slave's sperm been optimized?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			aggressiveSperm: 0,
+			/** Has the slave been optimized for production?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			livestock: 0,
+			/** Has the slave been optimized for child bearing?
+			 * @type {FC.Bool}
+			 * 0: no; 1: yes */
+			progenitor: 0
 		 };
 		/** flavor of their milk*/
 		this.milkFlavor = "none";
diff --git a/src/pregmod/blackMarket.js b/src/pregmod/blackMarket.js
index 1257bc5b250..88475283f57 100644
--- a/src/pregmod/blackMarket.js
+++ b/src/pregmod/blackMarket.js
@@ -559,6 +559,81 @@ App.UI.blackMarket = function() {
 						}
 					}
 					break;
+				case "optimizedSpermFormula":
+					if (V.geneticMappingUpgrade === 0) {
+						r.push(`You lack the facilities required for such a treatment to be effective on specific individuals.`);
+					} else if (V.dispensaryUpgrade === 0) {
+						r.push(`You lack the facilities required to produce complex gene-altering treatments.`);
+					} else {
+						if (V.optimizedSpermFormula === 0) {
+							const spermCash = 40000;
+							if (V.cash >= spermCash) {
+								App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
+									"Purchase formulas for injections to greatly improve sperm efficiency",
+									() => {
+										cashX(-spermCash, "capEx");
+										V.optimizedSpermFormula = 1;
+										V.merchantIllegalWares.delete("optimizedSpermFormula");
+										App.UI.reload();
+									},
+									[],
+									"",
+									`Costs ${(cashFormat(spermCash))}`
+								));
+							} else {
+								r.push(`You cannot afford the asking price of <span class="cash dec">${(cashFormat(spermCash))}</span> for sperm optimizing injections.`);
+							}
+							App.Events.addNode(node, r, "div");
+							r = [];
+							r.push(`"Managed to get these from a pissed off employee just before their employer got sued out of existence. Makes sperm super resilient and vigorous, and from what I've heard, able to survive outside the body for an extended period of time. Apparently`);
+							if (!V.seePreg) {
+								r.push(`seeing puddles of spunk crawling around on the floor seemingly 'hunting' fertile women was enough to freak people out.`);
+							} else {
+								r.push(`being hunted down and unknowingly inseminated by a wandering puddle of spunk your ${V.seeIncest ? "kid" : "roommate"} left in your bed is enough to really piss people off. Ooh! And there was that herm that got pregnant after blowing a load on her own chest and not cleaning it off fast enough! And that's not even mentioning how well they can swim either — what a headline that debacle was!`);
+							}
+							r.push(`Funny when things work too well, right?"`);
+						} else {
+							r.push(`You already possess formulas for that make sperm way too aggressive.`);
+							V.merchantIllegalWares.delete("optimizedSpermFormula");
+						}
+					}
+					break;
+				case "optimizedBreedingFormula":
+					if (!V.seePreg) {
+						r.push(`You have no interest in research to support pregnancy.`);
+						V.merchantIllegalWares.delete("optimizedBreedingFormula");
+					} else if (V.geneticMappingUpgrade === 0) {
+						r.push(`You lack the facilities required for such a treatment to be effective on specific individuals.`);
+					} else if (V.dispensaryUpgrade === 0) {
+						r.push(`You lack the facilities required to produce complex gene-altering treatments.`);
+					} else {
+						if (V.optimizedBreedingFormula === 0) {
+							const breederCash = 100000;
+							if (V.cash >= breederCash) {
+								App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
+									"Purchase formulas for injections designed to enhance the ability to bear children",
+									() => {
+										cashX(-breederCash, "capEx");
+										V.optimizedBreedingFormula = 1;
+										V.merchantIllegalWares.delete("optimizedBreedingFormula");
+										App.UI.reload();
+									},
+									[],
+									"",
+									`Costs ${(cashFormat(breederCash))}`
+								));
+							} else {
+								r.push(`You cannot afford the asking price of <span class="cash dec">${(cashFormat(breederCash))}</span> for optimized breeder injections.`);
+							}
+							App.Events.addNode(node, r, "div");
+							r = [];
+							r.push(`"These injections optimize a woman's body for child production. They work amazingly too! The only downside is they take their job a tad too seriously. See, under no circumstances can a girl miscarry with these tweaks, but that's not the problem no — it's how badly they reacted to any sort of fertility agent that might so happen to be in her. By design, she'll be able to handle larger and larger pregnancies as the therapy pushes her to be more productive, but, you see, anything that makes her more fertile causes this to happen far faster than her body can keep up, and with the whole 'refuses to miscarry' thing, well..." He makes a gesture like a popping balloon. "You end up with quite the mess."`);
+						} else {
+							r.push(`You already possess formulas for enhancing a body's capability of bearing children.`);
+							V.merchantIllegalWares.delete("optimizedBreedingFormula");
+						}
+					}
+					break;
 				case "sympatheticOvaries":
 					if (V.sympatheticOvaries === 0) {
 						if (V.seePreg === 1) {
@@ -720,7 +795,7 @@ App.UI.blackMarket = function() {
 		App.UI.DOM.appendNewElement("div", node, App.UI.DOM.link(
 			"Refresh illicit wares list",
 			() => {
-				V.thisWeeksIllegalWares = ["childhoodFertilityInducedNCS", "UterineRestraintMesh", "PGHack", "BlackmarketPregAdaptation", "RapidCellGrowthFormula", "sympatheticOvaries", "asexualReproduction"];
+				V.thisWeeksIllegalWares = ["childhoodFertilityInducedNCS", "UterineRestraintMesh", "PGHack", "BlackmarketPregAdaptation", "RapidCellGrowthFormula", "optimizedSpermFormula", "optimizedBreedingFormula", "sympatheticOvaries", "asexualReproduction"];
 				App.UI.reload();
 			}
 		));
-- 
GitLab