diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index 6944f87bc8de9fb990a75ae7fb73d01627f380c5..fa2e590df7737d3983ad3b5a3ada8aec9dfd0138 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -1091,6 +1091,8 @@ App.Data.resetOnNGPlus = {
 	/** @type {FC.Bool} */
 	youngerOvaries: 0,
 	/** @type {FC.Bool} */
+	immortalOvaries: 0,
+	/** @type {FC.Bool} */
 	sympatheticOvaries: 0,
 	/** @type {FC.Bool} */
 	fertilityImplant: 0,
diff --git a/js/medicine/surgery/addGenitals/freshOvaries.js b/js/medicine/surgery/addGenitals/freshOvaries.js
index ad4e6af972feaad66465a51813e091d0f9840d31..efe53de4c9fa9d63b7c0b4bff6a67e9781dc59b9 100644
--- a/js/medicine/surgery/addGenitals/freshOvaries.js
+++ b/js/medicine/surgery/addGenitals/freshOvaries.js
@@ -39,11 +39,7 @@ App.Medicine.Surgery.Procedures.OFFreshOvaries = class extends App.Medicine.Surg
 	}
 
 	apply(cheat) {
-		if (this._slave.ovaryAge >= 47) {
-			this._slave.ovaryAge = 45;
-		} else {
-			this._slave.ovaryAge = -2; // It shouldn't matter if this goes negative as it is just a signal for menopause to occur.
-		}
+		this._slave.ovaryAge = Math.clamp(this._slave.ovaryAge - 2, 0, 45);
 		if (this._slave.preg < 0) {
 			this._slave.preg = 0;
 		}
diff --git a/js/medicine/surgery/addGenitals/immortalOvaries.js b/js/medicine/surgery/addGenitals/immortalOvaries.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa0d887bb54c728cda37201f05e77054f9fe9649
--- /dev/null
+++ b/js/medicine/surgery/addGenitals/immortalOvaries.js
@@ -0,0 +1,62 @@
+App.Medicine.Surgery.Reactions.ImmortalOvaries = class extends App.Medicine.Surgery.SimpleReaction {
+	reaction(slave, diff) {
+		const reaction = super.reaction(slave, diff);
+		const {He, His, he, his, him} = getPronouns(slave);
+		const r = [];
+
+		if (slave.ovaryAge >= 45 && this._hasEmotion(slave)) { // use same reactions as freshOvaries - slave doesn't know the difference
+			if (this._strongKnownFetish(slave, "pregnancy") || slave.origin === "$He sold $himself to you in the hope of someday bearing children.") {
+				r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has a chance to get pregnant once more. ${He} is <span class="devotion inc">filled with joy</span> whenever ${he} thinks about the fact that ${he}'ll have the chance to feel a life growing within ${him} again. ${He}'s so pleased that ${he} now <span class="trust inc">trusts</span> your plans for ${his} body. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`);
+				reaction.trust += 4;
+				reaction.devotion += 5;
+			} else if (slave.devotion > 50) {
+				r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} now has the chance to get pregnant again. ${He}'s <span class="devotion inc">grateful</span> that you think ${him} worthy of extending ${his} fertility, and even a little nervous about how ${he}'ll perform as a mother that has tasted menopause. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`);
+				reaction.devotion += 4;
+			} else if (slave.devotion >= -20) {
+				r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to know that it means ${he} may now be impregnated once more. ${He} understands the realities of ${his} life as a slave, but didn't expect to have ${his} waning fertility renewed. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`);
+				reaction.trust -= 5;
+			} else {
+				r.push(`${He} leaves the surgery with nothing but a nonspecific ache, yet a familiar warmth, in ${his} lower abdomen, but ${he} knows enough about surgery and sex slaves to believe you have forced fertility upon ${him} again. ${He} does not understand the realities of ${his} life as a slave at a core level, so ${he}'s <span class="devotion dec">terrified and angry</span> at the potential that ${he}'ll be forced to carry children. As with all surgery <span class="health dec">${his} health has been slightly affected.</span> ${He} is <span class="trust dec">sensibly fearful</span> of your total power over ${his} body.`);
+				reaction.trust -= 5;
+				reaction.devotion -= 5;
+			}
+		} else {
+			r.push(`${He} leaves the surgery with nothing but a nonspecific ache in ${his} lower abdomen; it won't be clear to ${him} that menopause will never be a concern for ${him} again. As with all surgery <span class="health dec">${his} health has been slightly affected.</span>`);
+		}
+		if (slave.geneMods.immortality === 1) {
+			r.push(`${His} immortal body accepts the genetically modified organs as its own without protest.`);
+		} else {
+			r.push(`A temporary regimen of anti-rejection drugs is required while ${his} body integrates the extensively genetically modified organs, leaving ${him} feeling <span class="health dec">rather ill</span> over the following week.`);
+			healthDamage(slave, 10);
+			slave.chem += 100;
+		}
+
+		reaction.longReaction.push(r);
+		return reaction;
+	}
+};
+
+App.Medicine.Surgery.Procedures.OFImmortalOvaries = class extends App.Medicine.Surgery.Procedure {
+	get name() {
+		return "Implant";
+	}
+
+	get healthCost() {
+		return 20;
+	}
+
+	apply(cheat) {
+		this._slave.ovaryAge = -100;
+		if (this._slave.preg < 0) {
+			this._slave.preg = 0;
+		}
+		if (this._slave.pubertyXX === 0 && this._slave.physicalAge >= V.fertilityAge) {
+			if (V.precociousPuberty === 1) {
+				this._slave.pubertyAgeXX = this._slave.physicalAge + 1;
+			} else {
+				this._slave.pubertyXX = 1;
+			}
+		}
+		return this._assemble(new App.Medicine.Surgery.Reactions.ImmortalOvaries());
+	}
+};
diff --git a/js/medicine/z001-organFarm/3-organMap.js b/js/medicine/z001-organFarm/3-organMap.js
index cc0dea1e7bba8ab48c92703b38adc3ae6f74187e..a37d4550dcc4e44070ca20cde7816fae55bf4373 100644
--- a/js/medicine/z001-organFarm/3-organMap.js
+++ b/js/medicine/z001-organFarm/3-organMap.js
@@ -88,8 +88,34 @@ App.Medicine.OrganFarm.Organs = new Map([
 				new App.Medicine.OrganFarm.OrganImplantAction({
 					name: "Implant",
 					surgeryProcedure: App.Medicine.Surgery.Procedures.OFFreshOvaries,
-					canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70,
-					implantError: s => s.physicalAge >= 70 ? "This slave's body is too old to handle pregnancy." : "This slave lacks a viable womb.",
+					canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70 && s.ovaryAge >= 45,
+					implantError: s =>
+						s.ovaryAge < 45
+						? "This slave's ovaries are too young to benefit from rejuvenation."
+						: s.physicalAge >= 70
+						? "This slave's body is too old to handle pregnancy."
+						: "This slave lacks a viable womb.",
+				})
+			]
+		})],
+	["immortalOvaries",
+		new App.Medicine.OrganFarm.Organ({
+			name: "Immortal Ovaries",
+			tooltip: "requires a womb for successful implantation",
+			cost: 50000, time: 20,
+			canGrow: () => V.immortalOvaries === 1,
+			dependencies: ["ovaries", "pigOvaries", "dogOvaries", "horseOvaries", "cowOvaries", "mpreg", "mpregPig", "mpregDog", "mpregHorse", "mpregCow"],
+			actions: [
+				new App.Medicine.OrganFarm.OrganImplantAction({
+					name: "Implant",
+					surgeryProcedure: App.Medicine.Surgery.Procedures.OFImmortalOvaries,
+					canImplant: s => (s.mpreg !== 0 || s.ovaries !== 0) && s.bellyImplant === -1 && s.physicalAge < 70 && s.ovaryAge >= 0,
+					implantError: s =>
+						s.ovaryAge < 0
+						? "This slave already has immortal ovaries."
+						: s.physicalAge >= 70
+						? "This slave's body is too old to handle pregnancy."
+						: "This slave lacks a viable womb.",
 				})
 			]
 		})],
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 2e19d969e4876856617669e1aa2cddff05426f7b..e72f4e5b889ee8b287f3d5a96c795bda67a2dc5f 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -2539,6 +2539,15 @@ App.Update.oldVersions = function(node) {
 			V.imageChoice = 5;
 		}
 	}
+	if (V.releaseID < 1207) {
+		V.slaves.forEach(s => {
+			if (s.geneMods.NCS === 1 || (s.geneticQuirks.neoteny >= 2 && s.geneticQuirks.progeria !== 2)) {
+				s.ovaryAge = Math.max(s.ovaryAge, Math.min(s.physicalAge * 0.5, s.physicalAge - 2, 45));
+			} else {
+				s.ovaryAge = Math.max(s.ovaryAge, Math.min(s.physicalAge * 0.8, s.physicalAge - 2, 45));
+			}
+		});
+	}
 	node.append(`Done!`);
 };
 
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index fd5ab8613b0888c10ca794c4182bee3755cf8be9..ddfd8e89112942d2b2030c68ac6746703dc344d8 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -464,7 +464,7 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		}
 		slave.visualAge = Math.max(+slave.visualAge, 0) || slave.actualAge;
 		slave.physicalAge = Math.max(+slave.physicalAge, 0) || slave.actualAge;
-		if (typeof slave.ovaryAge !== "number") { // freshOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently
+		if (typeof slave.ovaryAge !== "number") { // immortalOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently
 			slave.ovaryAge = slave.physicalAge;
 		}
 		slave.pubertyAgeXX = Math.max(+slave.pubertyAgeXX, 0) || V.fertilityAge;
@@ -1202,7 +1202,9 @@ globalThis.PCDatatypeCleanup = (function PCDatatypeCleanup() {
 		}
 		PC.physicalAge = Math.clamp(+PC.physicalAge, 10, Infinity) || PC.actualAge;
 		PC.visualAge = Math.clamp(+PC.visualAge, 10, Infinity) || PC.actualAge;
-		PC.ovaryAge = Math.clamp(+PC.ovaryAge, 10, Infinity) || PC.physicalAge;
+		if (typeof PC.ovaryAge !== "number") { // immortalOvaries intentionally sets ovaryAge to a negative number, so treat it more leniently
+			PC.ovaryAge = PC.physicalAge;
+		}
 		if (V.playerAging !== 0) {
 			V.playerAging = Math.clamp(+V.playerAging, 0, 2) || 2;
 		}
diff --git a/src/endWeek/events/expire.js b/src/endWeek/events/expire.js
index 61721c9adcd6410286edb51ed5ee77fd6e4a0d74..56c1e67e2822d44a65c0676639452472dafc0f4f 100644
--- a/src/endWeek/events/expire.js
+++ b/src/endWeek/events/expire.js
@@ -178,7 +178,7 @@ App.Events.SEExpiration = class SEExpiration extends App.Events.BaseEvent {
 				if (slave.origin === "$He put $himself up as collateral at a poker game, and lost.") {
 					r.push(`A bet is a bet, but that was a lonnng year. There's still room for ${him} in your ${V.mercenariesTitle}, but many of them have come to see ${him} in a new, more... intimate way. As a free ${woman}, ${he}'ll have to decide if it's worth the risk and the sex to stay here and fight for you who ${he} loathes... or else take up arms elsewhere in an ever more uncertain world.`);
 					if (slave.addict > 5) {
-						r.push(`They'll need to make money fast as they remain addicted to your aphrodisiacs.`);
+						r.push(`${He}'ll need to make money fast as ${he} remains addicted to your aphrodisiacs.`);
 					}
 				} else {
 					r.push(`It seems very unlikely that ${he}'ll stay in the arcology; ${he}'ll probably take what remains of ${his} indenture payment, held in escrow for this day, and be off to wherever it is that ${he} came from in the first place.`);
diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js
index 3cd26122a1ff8ae751e08e814f33f35668c4f963..2b7588c2108622a604b6e601799b708beca42d1f 100644
--- a/src/endWeek/nextWeek/nextWeek.js
+++ b/src/endWeek/nextWeek/nextWeek.js
@@ -42,6 +42,9 @@ App.EndWeek.nextWeek = function() {
 				if (V.PC.physicalAge <= 20 && V.loliGrow > 0) {
 					App.EndWeek.Shared.physicalDevelopment(V.PC, true);
 				}
+				if ((V.PC.ovaries > 0 || V.PC.mpreg > 0) && V.PC.ovaryAge < 0) {
+					V.PC.ovaryAge = -100; // once PC can have immortal ovaries, this is where it takes effect
+				}
 				agePCEffects();
 			}
 		}
diff --git a/src/endWeek/player/prLongTermPhysicalEffects.js b/src/endWeek/player/prLongTermPhysicalEffects.js
index 80d7bc88ab4d247afe592d3a24a2e0c92a4af71b..b1e3ec86d394fccc7ebc59c5827ea024686c8af2 100644
--- a/src/endWeek/player/prLongTermPhysicalEffects.js
+++ b/src/endWeek/player/prLongTermPhysicalEffects.js
@@ -463,7 +463,9 @@ App.EndWeek.Player.longTermPhysicalEffects = function(PC = V.PC) {
 				}
 				PC.physicalAge++;
 				PC.visualAge++;
-				PC.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy.
+				if (PC.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge
+					PC.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy.
+				}
 			}
 		}
 	}
diff --git a/src/endWeek/reports/incubatorReport.js b/src/endWeek/reports/incubatorReport.js
index fce43f22a9fd40130bfe5c3699f19fbae3a8d8a4..b14eb45347b3952def21ca28b532f8812aa62ee6 100644
--- a/src/endWeek/reports/incubatorReport.js
+++ b/src/endWeek/reports/incubatorReport.js
@@ -254,12 +254,14 @@ App.EndWeek.incubatorReport = function() {
 		r = [];
 		if (V.incubator.upgrade.reproduction === 1) {
 			const rearQuirk = tank.geneticQuirks.rearLipedema === 2 ? 2 : 1;
+			const rearLimit = 20; // current maximum ass size, used to avoid reporting failed growth
 			if (tank.incubatorSettings.reproduction === 2) {
 				r.push(`${His} developing body is being flooded with hormones.`);
 				if (tank.incubatorSettings.weight === 1) {
 					r.push(`Combined with the abundant food provided to ${him}, ${his} body grows rapidly.`);
 					if (tank.ovaries === 1) {
 						tank.pubertyXX = 1;
+						tank.pubertyAgeXX = tank.physicalAge - 1;
 						if (tank.hormoneBalance < 500) {
 							tank.hormoneBalance += 100;
 						}
@@ -276,7 +278,7 @@ App.EndWeek.incubatorReport = function() {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`);
 								tank.hips = Math.clamp(tank.hips + 2, -2, 2);
 							}
-							if (tank.butt < 12*rearQuirk && random(1, 100) > 30/rearQuirk) {
+							if (tank.butt < rearLimit && tank.butt < 12*rearQuirk && random(1, 100) > 30/rearQuirk) {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`);
 								tank.butt += 4;
 							}
@@ -289,7 +291,7 @@ App.EndWeek.incubatorReport = function() {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`);
 								tank.hips++;
 							}
-							if (tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) {
+							if (tank.butt < rearLimit && tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`);
 								tank.butt += 3;
 							}
@@ -302,7 +304,7 @@ App.EndWeek.incubatorReport = function() {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">causes ${his} hips to widen for childbirth.</span>`);
 								tank.hips++;
 							}
-							if (tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) {
+							if (tank.butt < rearLimit && tank.butt < 12*rearQuirk && random(1, 100) > 50/rearQuirk) {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear grow fatter.</span>`);
 								tank.butt += 2;
 							}
@@ -315,7 +317,7 @@ App.EndWeek.incubatorReport = function() {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`);
 								tank.hips++;
 							}
-							if (tank.butt < 12*rearQuirk && random(1, 100) > 60/rearQuirk) {
+							if (tank.butt < rearLimit && tank.butt < 12*rearQuirk && random(1, 100) > 60/rearQuirk) {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`);
 								tank.butt++;
 							}
@@ -328,13 +330,14 @@ App.EndWeek.incubatorReport = function() {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} hips to widen for childbirth.</span>`);
 								tank.hips++;
 							}
-							if (tank.butt < 12*rearQuirk && random(1, 100) > 70/rearQuirk) {
+							if (tank.butt < rearLimit && tank.butt < 12*rearQuirk && random(1, 100) > 70/rearQuirk) {
 								r.push(`The excess estrogen-laced growth hormones <span class="green">cause ${his} rear to grow fatter.</span>`);
 								tank.butt++;
 							}
 						}
 					} else if (tank.balls > 0) {
 						tank.pubertyXY = 1;
+						tank.pubertyAgeXY = tank.physicalAge - 1;
 						if (tank.hormoneBalance > -500) {
 							tank.hormoneBalance -= 100;
 						}
@@ -392,6 +395,7 @@ App.EndWeek.incubatorReport = function() {
 					r.push(`Combined with the healthy food provided to ${him}, ${his} body grows readily.`);
 					if (tank.ovaries === 1) {
 						tank.pubertyXX = 1;
+						tank.pubertyAgeXX = tank.physicalAge - 1;
 						if (tank.hormoneBalance < 500) {
 							tank.hormoneBalance += 100;
 						}
@@ -467,6 +471,7 @@ App.EndWeek.incubatorReport = function() {
 						}
 					} else if (tank.balls > 0) {
 						tank.pubertyXY = 1;
+						tank.pubertyAgeXY = tank.physicalAge - 1;
 						if (tank.hormoneBalance > -500) {
 							tank.hormoneBalance -= 100;
 						}
@@ -524,6 +529,7 @@ App.EndWeek.incubatorReport = function() {
 					r.push(`Since ${his} body has little to work with, ${his} growth is fairly minor.`);
 					if (tank.ovaries === 1) {
 						tank.pubertyXX = 1;
+						tank.pubertyAgeXX = tank.physicalAge - 1;
 						if (tank.hormoneBalance < 500) {
 							tank.hormoneBalance += 100;
 						}
@@ -599,6 +605,7 @@ App.EndWeek.incubatorReport = function() {
 						}
 					} else if (tank.balls > 0) {
 						tank.pubertyXY = 1;
+						tank.pubertyAgeXY = tank.physicalAge - 1;
 						if (tank.hormoneBalance > -500) {
 							tank.hormoneBalance -= 100;
 						}
@@ -657,15 +664,16 @@ App.EndWeek.incubatorReport = function() {
 				r.push(`${His} hormone levels are being carefully managed, <span class="green">encouraging early puberty.</span>`);
 				if (tank.ovaries === 1) {
 					tank.pubertyXX = 1;
+					tank.pubertyAgeXX = tank.physicalAge - 1;
 					tank.hormoneBalance = 250;
 					if (tank.geneMods.NCS === 1) {
 						/* NCS blocks hormonal growth of all secondary sexual characteristics */
 						r.push(`${His} <span class="orange">NCS blocks growth</span> despite the added estrogen.`);
 					} else {
 						// Inside the tank we cannot reach ridiculous sizes
+						const origBoobs = tank.boobs;
 						const boobsTarget = Math.min(tank.natural.boobs, 1200);
 						if (tank.boobs < boobsTarget * 0.95) {
-							r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`);
 							tank.boobs += random(
 								Math.floor(boobsTarget * 0.1),
 								Math.floor(boobsTarget * 0.2)
@@ -677,9 +685,11 @@ App.EndWeek.incubatorReport = function() {
 							}
 						}
 						if (tank.boobs < 400 && random(1, 100) > 60) {
-							r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`);
 							tank.boobs += 50;
 						}
+						if (tank.boobs > origBoobs) {
+							r.push(`The added estrogen <span class="green">causes ${his} breasts to swell.</span>`);
+						}
 						if (tank.hips < 2 && random(1, 100) > 90) {
 							r.push(`The added estrogen <span class="green">causes ${his} hips to widen.</span>`);
 							tank.hips++;
@@ -691,6 +701,7 @@ App.EndWeek.incubatorReport = function() {
 					}
 				} else if (tank.balls > 0) {
 					tank.pubertyXY = 1;
+					tank.pubertyAgeXY = tank.physicalAge - 1;
 					tank.hormoneBalance = -250;
 					if (tank.geneMods.NCS === 1) {
 						/* NCS blocks hormonal growth of all secondary sexual characteristics */
diff --git a/src/endWeek/saAgent.js b/src/endWeek/saAgent.js
index 01e9659abe2672f2ccca10d7df29fef18a45c1f5..cf8d07a6cbaf3c93ae9dbf56625da52f3b20a40e 100644
--- a/src/endWeek/saAgent.js
+++ b/src/endWeek/saAgent.js
@@ -612,7 +612,9 @@ App.SlaveAssignment.agent = function(slave) {
 		if (((slave.birthWeek - 2) % 5) === 0) {
 			slave.physicalAge++;
 			slave.visualAge++;
-			slave.ovaryAge += 5;
+			if (slave.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge
+				slave.ovaryAge += 5;
+			}
 		}
 	}
 
diff --git a/src/endWeek/saLongTermPhysicalEffects.js b/src/endWeek/saLongTermPhysicalEffects.js
index d44558b53f54327ac2e921841b5ee68310b8646f..3f353614e7c1621363c42b8f59dbf60d302a70b2 100644
--- a/src/endWeek/saLongTermPhysicalEffects.js
+++ b/src/endWeek/saLongTermPhysicalEffects.js
@@ -698,7 +698,9 @@ App.SlaveAssignment.longTermPhysicalEffects = function saLongTermPhysicalEffects
 				}
 				slave.physicalAge++;
 				slave.visualAge++;
-				slave.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy.
+				if (slave.ovaryAge >= 0) { // immortal ovaries counteract progeria's effect on ovaryAge
+					slave.ovaryAge += 5; // Since we are using .physicalAge, we need to manipulate things to prevent the possibility of pregnancy.
+				}
 			}
 		}
 	}
diff --git a/src/events/RE/reAWOL.js b/src/events/RE/reAWOL.js
index b4974b09ae2fd26be12df0172218befde16b964d..19c1d22563f4d562c4efa38f4b10ec7d0deb3a77 100644
--- a/src/events/RE/reAWOL.js
+++ b/src/events/RE/reAWOL.js
@@ -167,7 +167,7 @@ App.Events.REAWOL = class REAWOL extends App.Events.BaseEvent {
 
 		function enslave() {
 			let r = [];
-			r.push(`Despite the trouble ${he} has caused you, you manage to complete the legalities and biometric scanning quickly and without incident. Of course, this is in large part due to the fact that the would-be mutineer is of course restrained. Based on the accounts of ${his} captors and the numerous injuries evident amongst them, ${he} is likely to be violent when ${he} is finally released.`);
+			r.push(`Despite the trouble ${he} has caused you, you manage to complete the legalities and biometric scanning quickly and without incident. Of course, this is in large part due to the fact that the would-be mutineer is thoroughly restrained. Based on the accounts of ${his} captors and the numerous injuries evident amongst them, ${he} is likely to be violent when ${he} is finally released.`);
 			r.push(App.UI.newSlaveIntro(slave));
 			return r;
 		}
diff --git a/src/events/reRecruit/racerLoser.js b/src/events/reRecruit/racerLoser.js
index eb21051481abbc754fd476a006041c1bb902331d..61677dcbc57f1225a6958ba483120c8f00521ebb 100644
--- a/src/events/reRecruit/racerLoser.js
+++ b/src/events/reRecruit/racerLoser.js
@@ -101,7 +101,7 @@ App.Events.recRacerLoser = class recRacerLoser extends App.Events.BaseEvent {
 			slave.pregWeek = 1;
 			slave.pregType = 1;
 			slave.pregKnown = 1;
-			WombImpregnate(slave, slave.pregType, slave.pregSource, 0);
+			WombImpregnate(slave, slave.pregType, slave.pregSource, 1);
 			return slave;
 		}
 	}
diff --git a/src/events/scheduled/seRaiding.js b/src/events/scheduled/seRaiding.js
index 94c071588054cabd5a8f5d83f223c12f2b4173d5..29255c816505a4d1f5b098bb69f5d11ef1d42d0c 100644
--- a/src/events/scheduled/seRaiding.js
+++ b/src/events/scheduled/seRaiding.js
@@ -996,9 +996,9 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					if (targetEscape > MercCapture) {
 						r.push(`The ${V.mercenariesTitle} clash with the politician's security detail amidst a maelstrom of terrified civilians and the confrontation drags out for some time. By the time your ${V.mercenariesTitle} can advance, they discover that the politician has already been evacuated.`);
 					} else if (raidEscape === 1) {
-						r.push(`With their security detail defeated and their crowd of supporters offering no protection, the politician tries to take up one of ${his} fallen protector's pistols to defend ${himself}. Unfortunately for ${him} and for your mercenaries, the politician has a staggeringly poor understanding of firearms and manages to shoot themselves in the face when they discharge the weapon. With the politician dead, there is little your ${V.mercenariesTitle} can do but exit the venue.`);
+						r.push(`With ${his} security detail defeated and ${his} crowd of supporters offering no protection, the politician tries to take up one of ${his} fallen protectors' pistols to defend ${himself}. Unfortunately for ${him} and for your mercenaries, the politician has a staggeringly poor understanding of firearms and manages to shoot ${himself} in the face when ${he} discharges the weapon. With the politician dead, there is little your ${V.mercenariesTitle} can do but exit the venue.`);
 					} else {
-						r.push(`With their security detail defeated and their crowd of supporters offering no protection, the politician promptly surrenders in the hopes that they won't be harmed and is escorted to the waiting VTOL. The politician spends the VTOL ride quietly, only breaking ${his} silence to ask your ${V.mercenariesTitle} about where ${he} is being brought and why. When they do not answer ${he} simply fusses with ${his} outfit, as if headed to an important interview.`);
+						r.push(`With ${his} security detail defeated and ${his} crowd of supporters offering no protection, the politician promptly surrenders in the hopes that ${he} won't be harmed and is escorted to the waiting VTOL. The politician spends the VTOL ride quietly, only breaking ${his} silence to ask your ${V.mercenariesTitle} about where ${he} is being brought and why. When they do not answer ${he} simply fusses with ${his} outfit, as if headed to an important interview.`);
 						newSlave(slave);
 						// skip New Slave Intro
 					}
@@ -1020,7 +1020,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					} else if (raidEscape === 1) {
 						r.push(`When the ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a terrible stench of dust and decay. Judging by the body hanging limply from the banisters, the shut-in took ${his} own life some time ago.`);
 					} else {
-						r.push(`When your ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a surprised and somewhat unkempt ${woman} staring at them. Despite ${his} lack of social interaction, they know better than to argue with a small army of armed ${V.mercenariesTitle} and quietly accepts being escorted back to the waiting VTOL. The shut-in spends the VTOL ride sitting quietly in ${his} seat. Confused by ${his} silence, your ${V.mercenariesTitle} attempt to engage ${him} in conversation but are granted no response.`);
+						r.push(`When your ${V.mercenariesTitle} break down the door to the shut-in's shack, they are met with a surprised and somewhat unkempt ${woman} staring at them. Despite ${his} lack of social interaction, ${he} knows better than to argue with a small army of armed ${V.mercenariesTitle} and quietly accepts being escorted back to the waiting VTOL. The shut-in spends the VTOL ride sitting quietly in ${his} seat. Confused by ${his} silence, your ${V.mercenariesTitle} attempt to engage ${him} in conversation but are granted no response.`);
 						newSlave(slave);
 						// skip New Slave Intro
 					}
@@ -1042,7 +1042,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					} else if (raidEscape === 1) {
 						r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. Before ${he} can be subdued, the investor swallows a concealed pill and crumples to the ground dead.`);
 					} else {
-						r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. ${He} begrudgingly surrenders and is subsequently escorted back to a waiting VTOL. The investor spends the VTOL ride practicing their sales pitches, techniques and speeches. It seems they haven't grasped what their destination is, nor the fate that awaits them upon arrival.`);
+						r.push(`When your ${V.mercenariesTitle} corner the investor in the exposition, ${he} seemingly mistakes them for international police intent on taking ${him} in for prior economic crimes. ${He} begrudgingly surrenders and is subsequently escorted back to a waiting VTOL. The investor spends the VTOL ride practicing ${his} sales pitches, techniques and speeches. It seems ${he} hasn't grasped what ${his} destination is, nor the fate that awaits ${him} upon arrival.`);
 						newSlave(slave);
 						// skip New Slave Intro
 					}
diff --git a/src/facilities/implantManufactory.js b/src/facilities/implantManufactory.js
index 53834d73056339633a21d5c83e282295ac0cedbe..4c8185cfe81479ab0247d340c34bda82e9595fc8 100644
--- a/src/facilities/implantManufactory.js
+++ b/src/facilities/implantManufactory.js
@@ -36,7 +36,7 @@ App.UI.implantManufactory = function() {
 	if (V.meshImplants > 0) {
 		App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of producing supportive mesh breast implants.");
 	} else {
-		upgradeOption(node, 10_000, "plans for supportive mesh breast implants", ["Will allow the construction of organic and supportive mesh breast implants."],
+		upgradeOption(node, 10_000, "plans for supportive mesh breast implants", ["will allow the construction of organic and supportive mesh breast implants."],
 			40_000, () => { V.meshImplants = 1; });
 	}
 
@@ -45,19 +45,19 @@ App.UI.implantManufactory = function() {
 	}
 
 	if (V.bellyImplants === 0) {
-		upgradeOption(node, 2000, "schematics for fillable abdominal implants", ["Will allow the construction of fillable abdominal implants for the autosurgery."],
+		upgradeOption(node, 2000, "schematics for fillable abdominal implants", ["will allow the construction of fillable abdominal implants for the autosurgery."],
 			30_000, () => { V.bellyImplants = 1; },
 			"access experimental schematics for fillable abdominal implants");
 	} else if (V.bellyImplants > 0) {
 		App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting fillable abdominal implants.");
 		if (V.bellyImplants === 1 && V.cervixImplants === 0) { /* show only after belly implants already researched */
 			/* nanotech like technology much more impressive and costly than simple implant */
-			upgradeOption(node, 6000, "schematics for cervix filter micropumps", ["Will allow the construction of cervix filter micropumps for fillable abdominal implants using the autosurgery."],
+			upgradeOption(node, 6000, "schematics for cervix filter micropumps", ["will allow the construction of cervix filter micropumps for fillable abdominal implants using the autosurgery."],
 				70_000, () => { V.cervixImplants = 1; },
 				"access experimental cervix filter micropumps schematics for abdominal implants");
 		} else if (V.cervixImplants === 1) {
 			App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting cervix filter micropumps for fillable abdominal implants.");
-			upgradeOption(node, 8_000, "conversion kits for rectal filter micropumps", ["Will allow the construction of the anal equivalent of the cervix micropumps using the autosurgery."],
+			upgradeOption(node, 8_000, "conversion kits for rectal filter micropumps", ["will allow the construction of the anal equivalent of the cervix micropumps using the autosurgery."],
 				60_000, () => { V.cervixImplants = 2; },
 				"obtain conversion kits for rectal filter micropumps"
 			);
@@ -72,7 +72,7 @@ App.UI.implantManufactory = function() {
 		if (V.fertilityImplant === 1) {
 			App.UI.DOM.appendNewElement("div", node, "The manufactory is capable of crafting fertility enhancing implants for ovaries.");
 		} else {
-			upgradeOption(node, 3_000, "fertility enhancing ovarian implants", ["Will allow the construction of implants that encourage multiple eggs being released during ovulation."],
+			upgradeOption(node, 3_000, "fertility enhancing ovarian implants", ["will allow the construction of implants that encourage multiple eggs being released during ovulation."],
 				10_000, () => { V.fertilityImplant = 1; },
 				"access fertility boosting ovarian implants"
 			);
@@ -84,7 +84,7 @@ App.UI.implantManufactory = function() {
 
 		if (V.seeHyperPreg === 1 && V.seeExtreme === 1) {
 			if (V.permaPregImplant === 0) {
-				upgradeOption(node, 4_000, "schematics for an experimental implantable pregnancy generator", ["Will allow the construction of implants that force perpetual pregnancy."],
+				upgradeOption(node, 4_000, "schematics for an experimental implantable pregnancy generator", ["will allow the construction of implants that force perpetual pregnancy."],
 					40_000, () => { V.permaPregImplant = 1; },
 					"access experimental pregnancy generator schematics");
 			} else if (V.permaPregImplant > 0) {
@@ -100,7 +100,7 @@ App.UI.implantManufactory = function() {
 
 	if (V.prostateImplants !== 1) {
 		upgradeOption(node, 3_000, "plans for ejaculation enhancing prostate implants",
-			["Will allow the construction of a prostate implant designed to stimulate fluid production for massive ejaculations. Beware of leaking and dehydration."],
+			["will allow the construction of a prostate implant designed to stimulate fluid production for massive ejaculations. Beware of leaking and dehydration."],
 			30_000, () => { V.prostateImplants = 1; },
 			"access plans for prostate implants"
 		);
diff --git a/src/facilities/organFarmPassage.js b/src/facilities/organFarmPassage.js
index 0bb0073c71ff4185e7610098a736f300b81afd0a..2f7980c117ad92771c762e79000d0d88345ae87f 100644
--- a/src/facilities/organFarmPassage.js
+++ b/src/facilities/organFarmPassage.js
@@ -61,13 +61,13 @@ App.UI.organFarm = function() {
 	} else if (V.rep > 10000 * PCSkillCheck) {
 		if (V.organFarmUpgrade === 2) {
 			upgradeOption(node, 10_000, "Upgrade the organ farm to the cutting edge model",
-				["Will allow the organ farm to rapidly grow organs without risk to the implantee's health."],
+				["will allow the organ farm to rapidly grow organs without risk to the implantee's health."],
 				150_000, () => { V.organFarmUpgrade = 3; },
 				""
 			);
 		} else if (V.organFarmUpgrade === 1) {
 			upgradeOption(node, 10_000, "Upgrade the organ farm with an experimental growth accelerator",
-				["Will allow the organ farm to quickly grow organs. Implanted organs may cause health issues."],
+				["will allow the organ farm to quickly grow organs. Implanted organs may cause health issues."],
 				75_000, () => { V.organFarmUpgrade = 2; },
 				""
 			);
@@ -78,12 +78,23 @@ App.UI.organFarm = function() {
 		App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing fertile ovaries for postmenopausal slaves.");
 	} else {
 		upgradeOption(node, 10_000, "Purchase designs for cloning fertile ovaries for menopausal slaves",
-			["Will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most."],
+			["will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most."],
 			30_000, () => { V.youngerOvaries = 1; },
 			"access designs for cloning fertile ovaries for menopausal slaves"
 		);
 	}
 
+	if (V.immortalOvaries > 0) {
+		App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing genetically modified ovaries that will never undergo menopause.");
+	} else if (V.immortalityFormula > 0 && V.youngerOvaries > 0) {
+		upgradeOption(node, 10_000, "Fund research into applying the immortality formula to ovaries",
+			["will allow the growth of genetically modified ovaries that continually regenerate their ovarian follicles, thus never undergoing menopause. As long as the body remains young, it shall remain fertile."],
+			1_000_000, () => { V.immortalOvaries = 1; },
+			"fund additional fertility-focused research into the immortality project"
+		);
+	} else if (V.immortalityFormula > 0) {
+		appendNote("You must acquire the designs to clone younger ovaries before you can research ovary immortality.", node);
+	} // invisible without immortality formula
 
 	if (V.asexualReproduction === 1) {
 		App.UI.DOM.appendNewElement("div", node, "The organ farm is capable of growing modified ovary pairs capable of self-fertilization.");
@@ -120,7 +131,7 @@ App.UI.organFarm = function() {
 		if (V.arcologies[0].FSGenderRadicalistDecoration === 100) {
 			if (V.arcologies[0].FSGenderRadicalistResearch === 0) {
 				upgradeOption(node, 10_000, "Fund research into developing male pregnancy methods",
-					["Will allow cloning and production of anal uteri and ovaries."],
+					["will allow cloning and production of anal uteri and ovaries."],
 					50_000, () => { V.arcologies[0].FSGenderRadicalistResearch = 1; },
 					"access the research necessary to develop anal uteri and ovaries"
 				);
diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index 12536bd84cbec7a94cd6ab5a50cee8388eba202c..1ae04edf6fe5f33110a044ab6d537034ec2859e0 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -2927,6 +2927,9 @@ globalThis.ageSlave = function(slave, forceDevelopment = false) {
 	if (slave.broodmother === 1) {
 		slave.ovaryAge += 0.2;
 	}
+	if ((slave.ovaries > 0 || slave.mpreg > 0) && slave.ovaryAge < 0) {
+		slave.ovaryAge = -100; // reset immortal ovaries every year
+	}
 	if (slave.physicalAge <= 20 && (forceDevelopment || V.loliGrow > 0)) {
 		App.EndWeek.Shared.physicalDevelopment(slave);
 	}
diff --git a/src/markets/theMarket/marketData.js b/src/markets/theMarket/marketData.js
index f3d257f97be554c3af766f12d70c0a0810b069c6..0f3cf97d65f91d2c63d12e4797be69a05e45cf31 100644
--- a/src/markets/theMarket/marketData.js
+++ b/src/markets/theMarket/marketData.js
@@ -93,7 +93,7 @@ App.Data.Markets = {
 			marketType: "wetware",
 			note: "Ruined bodies but keen minds. Requires some TLC, but offers outstanding training at a discount.",
 			encyclopedia: "Wetware CPUs",
-			get requirements() { return FutureSocieties.isActive('FSPaternalist') ? true : `The paternalistic nature of your society blocks the abusive Wetware CPU manufactures from operating within your arcology.`; }
+			get requirements() { return !FutureSocieties.isActive('FSPaternalist') ? true : `The paternalistic nature of your society blocks the abusive Wetware CPU manufactures from operating within your arcology.`; }
 		},
 		{
 			title: "Prisoner Sale",
diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js
index 3936fcd19ba93ce2df7b8a43a6a8e2d67c0f2818..3c1c9ba810f99576c91a90d9dce74441457dbeae 100644
--- a/src/npc/descriptions/belly/belly.js
+++ b/src/npc/descriptions/belly/belly.js
@@ -12107,7 +12107,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) {
 						} else if (slave.bellyImplant > 0) {
 							r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously swollen ${girl} and comes with a gap in the front for ${his} monolithic implant-filled belly to expand out of.`);
 						} else {
-							r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously gravig ${girl} and comes with a gap in the front for ${his} monolithic pregnant belly to uncontrollably billow out of.`);
+							r.push(`${slave.slaveName}'s teddy is specially designed to accommodate such a ridiculously gravid ${girl} and comes with a gap in the front for ${his} monolithic pregnant belly to uncontrollably billow out of.`);
 						}
 					} else if (slave.bellyPreg >= 600000) {
 						if (isBellyFluidLargest) {
@@ -12150,7 +12150,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) {
 							r.push(`${slave.slaveName}'s teddy is carefully fitted to contain ${his} huge pregnant belly, but only emphasizes just how large and ripe ${he} is.`);
 						}
 					} else if (slave.weight > 190) {
-						r.push(`${slave.slaveName}'s tailored teddy is strained to capacity by ${his} massively fat belly. ${His} flab juts out around its edges while drawing it focuses on drawing attention to ${his} folds, rolls and assorted jiggling.`);
+						r.push(`${slave.slaveName}'s tailored teddy is strained to capacity by ${his} massively fat belly. ${His} flab juts out around its edges, while the remaining coverage merely draws attention to ${his} folds, rolls and assorted jiggling.`);
 					} else if (slave.belly >= 15000 || slave.bellyAccessory === "a huge empathy belly") {
 						if (slave.bellyAccessory === "a huge empathy belly") {
 							r.push(`${slave.slaveName}'s teddy is filled to its limit by ${his} huge pregnant belly. ${His} popped navel prominently pokes through the taut material.`);
diff --git a/src/npc/descriptions/crotch/vagina.js b/src/npc/descriptions/crotch/vagina.js
index 99d74e8c7eef211bca70ce20052fedc07a28f1e5..a185acd3899fa042b202daf6784bc248c6a3c536 100644
--- a/src/npc/descriptions/crotch/vagina.js
+++ b/src/npc/descriptions/crotch/vagina.js
@@ -256,6 +256,10 @@ App.Desc.vagina = function(slave) {
 		}
 	}
 
+	if ((slave.ovaries > 0 || slave.mpreg > 0) && slave.ovaryAge < 0) {
+		r.push(`${His} ovaries have been replaced with genetically modified clones that will continue to produce new ova for as long as ${he} lives.`);
+	}
+
 	if (slave.ovaImplant !== 0) {
 		switch (slave.ovaImplant) {
 			case "fertility":
diff --git a/src/player/desc/pLongBoobs.js b/src/player/desc/pLongBoobs.js
index c94ae65490091f53a2204ca19f96872c31436b27..ed6d5ac47fe997aac87393dffff4374eff25ab1e 100644
--- a/src/player/desc/pLongBoobs.js
+++ b/src/player/desc/pLongBoobs.js
@@ -437,56 +437,290 @@ App.Desc.Player.boobs = function(PC = V.PC) {
 	// block unfinished for now!
 	if (PC.boobs >= 90000) {
 		r.push(`you have a <span class="orange">pair of door-jamming breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 70000) {
 		r.push(`you have a <span class="orange">pair of door-crowding breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 55000) {
 		r.push(`you have a <span class="orange">pair of lap-filling breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 40000) {
 		r.push(`you have a <span class="orange">pair of beachball-sized breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 25000) {
 		r.push(`you have a <span class="orange">pair of figure-dominating breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 15000) {
 		r.push(`you have a <span class="orange">pair of arm-filling breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 10000) {
 		r.push(`you have a <span class="orange">pair of obscenely massive breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 9000) {
 		r.push(`you have a <span class="orange">pair of unbelievable ZZZ-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 8500) {
 		r.push(`you have a <span class="orange">pair of unbelievable ZZ-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 8000) {
 		r.push(`you have a <span class="orange">pair of mind-blowing Z-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 7500) {
 		r.push(`you have a <span class="orange">pair of mind-blowing Y-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 7000) {
 		r.push(`you have a <span class="orange">pair of spectacular X-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 6500) {
 		r.push(`you have a <span class="orange">pair of spectacular V-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 5500) {
 		r.push(`you have a <span class="orange">pair of attention-grabbing U-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 5100) {
 		r.push(`you have a <span class="orange">pair of unmissable T-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 4700) {
 		r.push(`you have a <span class="orange">pair of astounding S-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 4300) {
 		r.push(`you have a <span class="orange">pair of unreal R-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 3950) {
 		r.push(`you have a <span class="orange">pair of shocking Q-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 3600) {
 		r.push(`you have a <span class="orange">pair of disproportionate P-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 3250) {
 		r.push(`you have a <span class="orange">pair of awe-inspiring O-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 2900) {
 		r.push(`you have a <span class="orange">pair of tremendous N-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 2600) {
 		r.push(`you have a <span class="orange">pair of magnificent M-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 2300) {
 		r.push(`you have a <span class="orange">pair of stupendous L-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 2050) {
 		r.push(`you have a <span class="orange">pair of titanic K-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 1800) {
 		r.push(`you have a <span class="orange">pair of enormous J-cup breasts.</span>`);
-	} else if (PC.boobs >= 1600) {
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
+	} else if (PC.boobs >= 1600) { //could use more breast descriptions on sizes here and up
 		r.push(`you have a <span class="orange">pair of massive I-cup breasts.</span>`);
+		if (implantRatio >= 0.75) {
+			r.push(oversizedImplants);
+		} else if (implantRatio >= 0.50) {
+			r.push(obviousImplants);
+		} else {
+			r.push(boobShape());
+			r.push(`They refuse to come to a rest once they get moving.`);
+		}
+		r.push(boobVolume());
 	} else if (PC.boobs >= 1400) {
 		r.push(`you have a <span class="orange">pair of huge H-cup breasts.</span>`);
 		if (implantRatio >= 0.75) {
@@ -591,11 +825,13 @@ App.Desc.Player.boobs = function(PC = V.PC) {
 	} else {
 		r.push(`you have nothing in the breast department. You're <span class="orange">completely flat.</span>`);
 	}
-	// temp
+
+	/*
 	if (PC.boobs >= 1600) {
 		r.push(boobShape());
 		r.push(boobVolume());
 	}
+	*/
 	r.push(
 		boobFreckles(),
 		nipples()
diff --git a/src/player/desc/pLongCrotch.js b/src/player/desc/pLongCrotch.js
index 994f3765cad8bd172d33a11e1271eecffd90f986..de406b5342c0d37aa4fb01f9f6616f751d40acfc 100644
--- a/src/player/desc/pLongCrotch.js
+++ b/src/player/desc/pLongCrotch.js
@@ -1378,6 +1378,9 @@ App.Desc.Player.crotch = function(PC = V.PC) {
 				r.push(`According to the data, it shouldn't be possible for you to prematurely give birth.`);
 			}
 		}
+		if ((V.PC.ovaries > 0 || V.PC.mpreg > 0) && V.PC.ovaryAge < 0) { // impossible for now
+			r.push(`You've had your ovaries replaced with genetically modified clones that will continue to produce new ova for as long as you live.`);
+		}
 		if (PC.ovaImplant !== 0) {
 			if (PC.wombImplant === "restraint") {
 				r.push(`You ovaries are modified as well;`);
diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js
index 1ed0323e40ede02b30c7c4b53b230ddf3723c470..5b966375b5826a8089ad3f86a4458db9a260c372 100644
--- a/src/pregmod/FCTV/FCTVshows.js
+++ b/src/pregmod/FCTV/FCTVshows.js
@@ -1060,7 +1060,7 @@ App.Data.FCTV.channels = {
 					if (V.seeDicks === 0) {
 						r.push(`<i>greeting,</i>`);
 					} else {
-						r.push(`dangling cock, even soft it looks massive,`);
+						r.push(`dangling cock – even soft, it looks massive –`);
 					}
 					r.push(`but manages to shake the proffered hand. "Thanks for having me!" She gestures widely to the room. "What's with the lights and... umm... décor?"</p>`);
 					r.push(`<p>The milk maid smiles. "A happy cow is a productive cow, Ma'am. The cows spend lots of time here, and Master says 'a pleasant and relaxing environment makes a big difference in their production.' Master says that it's an investment to make the cows feel like they're in a fancy spa, but that it's so cheap it pays for itself in extra milk lickity-split."</p>`);