diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index c9061920d47cdb47eec578f978e38d5d19a83d45..1523f20d3a9b7eeb740d5d086e719b16ce08289a 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -379,7 +379,6 @@ App.Data.resetOnNGPlus = {
 	arcRepairTime: 0,
 	garrison: {},
 	/* battle relevant vars */
-	attackThisWeek: 0,
 	majorBattle: 0,
 	SecExp: {},
 
diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js
index 752e67af5819e30a91e565e0d319e9412cbde984..850be7db3e9a73bb810ac01a5107a5fa25534f20 100644
--- a/js/003-data/policiesData.js
+++ b/js/003-data/policiesData.js
@@ -612,7 +612,6 @@ App.Data.Policies.Selection = {
 				title: "St. Claver Preparatory subsidy",
 				text: "you will subsidize this school's branch campus in your arcology.",
 				activatedText: "you are subsidizing this school's branch campus in your arcology.",
-				enable: -1,
 				get requirements() { return (V.SCP.schoolProsperity < 10 && V.SCP.schoolPresent === 1); },
 				get note() { return `Will cost ${cashFormat(1000)} weekly to maintain; does not cost reputation to start`; },
 			},
diff --git a/src/Mods/SecExp/attackReport.tw b/src/Mods/SecExp/attackReport.tw
index 70533971f5f184b21495ea550d13412b251706b3..740a8dc1298ebdb1545803581e0e1cd73b3a83aa 100644
--- a/src/Mods/SecExp/attackReport.tw
+++ b/src/Mods/SecExp/attackReport.tw
@@ -1507,7 +1507,6 @@
 <</if>>
 
 /* resets variables */
-<<set $attackThisWeek = 0>>
 <<set $majorBattle = 0>>
 <<set $SecExp.units.bots.isDeployed = 0>>
 <<for _squad range App.SecExp.unit.humanSquads()>>
diff --git a/src/Mods/SecExp/buildings/securityHQ.tw b/src/Mods/SecExp/buildings/securityHQ.tw
index 0cbcb456dbc800ab81446d4d1acfc427a4645de6..5fc43dfb626dd01fe8da8e579f1ed03eb1dc7993 100644
--- a/src/Mods/SecExp/buildings/securityHQ.tw
+++ b/src/Mods/SecExp/buildings/securityHQ.tw
@@ -23,6 +23,9 @@ The security headquarters stand in front of you. Innumerable screens flood with
 <<if $cash > _menialPrice>>
 	<<if _bulkMax > 0 || $menials+$fuckdolls+$menialBioreactors == 0>>
 		<br>[[Buy|securityHQ][$menials++,$menialSupplyFactor -= 1, cashX(-_menialPrice, "menialTransfer")]]
+		<<if $cash > (menialSlaveCost(5))*5>>
+			[[(x5)|securityHQ][$menials += 5,$menialSupplyFactor -= 5, cashX(-(menialSlaveCost(5)*5), "menialTransfer")]]
+		<</if>>
 		<<if $cash > (menialSlaveCost(10))*10>>
 			[[(x10)|securityHQ][$menials += 10,$menialSupplyFactor -= 10, cashX(-(menialSlaveCost(10)*10), "menialTransfer")]]
 		<</if>>
@@ -234,7 +237,7 @@ Considering the current upgrades the maximum level of crime is <<print App.SecEx
 		<<if $SecExp.core.authority > 10000>>
 			<<if $SecExp.buildings.secHub.upgrades.crime.autoTrial == 0>>
 				<br>[[Install automated trials software|securityHQ][cashX(-Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier), "capEx"), $SecExp.buildings.secHub.upgrades.crime.autoTrial = 1, $PC.skill.hacking += 1]]
-				<br>//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will bring down the crime level cap by 15 points, but will require 10 extra slaves in the headquarters and increases upkeep. The remaining slaves will be more efficient in dealing with crime.//
+				<br>//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology*_HistoryDiscount*$HackingSkillMultiplier))>>. Will bring down the crime level cap by 15 points, but will require 5 extra slaves in the headquarters and increases upkeep. The remaining slaves will be more efficient in dealing with crime.//
 			<<else>>
 				<br>You have installed advanced legal algorithms that allows the handling of legal matters much quicker and much more accurately.
 			<</if>>
@@ -277,7 +280,7 @@ Considering the current upgrades the maximum level of crime is <<print App.SecEx
 	<br><br>Readiness<hr>
 	<<if $SecExp.buildings.secHub.upgrades.readiness.pathways == 0>>
 		[[Build specialized pathways in the arcology|securityHQ][cashX(-Math.trunc(5000*$upgradeMultiplierArcology*_HistoryDiscount), "capEx"), $SecExp.buildings.secHub.upgrades.readiness.pathways = 1]]
-		<br>//Costs <<print cashFormat(Math.trunc(5000*$upgradeMultiplierArcology*_HistoryDiscount))>>. Will increase readiness by 1, but will increase upkeep. The remaining slaves will be more efficient in dealing with crime.//
+		<br>//Costs <<print cashFormat(Math.trunc(5000*$upgradeMultiplierArcology*_HistoryDiscount))>>. Will increase readiness by 1, but will require 5 extra slaves in the headquarters and increase upkeep. The remaining slaves will be more efficient in dealing with crime.//
 	<<else>>
 		You have built specialized pathways inside the arcology to quickly move troops around the structure.
 	<</if>>
diff --git a/src/Mods/SecExp/js/secExp.js b/src/Mods/SecExp/js/secExp.js
index dd291f5f0044d223dba52a88e274a71d530d7b95..23992d4263c48e67f549689fdcb2ae178ebd8f6a 100644
--- a/src/Mods/SecExp/js/secExp.js
+++ b/src/Mods/SecExp/js/secExp.js
@@ -47,7 +47,6 @@ App.SecExp.generator = (function() {
 			V.SecExp.battles.lastEncounterWeeks++;
 		} else {
 			let type, terrain, troops, equip = 0, L = 0;
-			V.attackThisWeek = 1;
 			V.SecExp.battles.lastEncounterWeeks = 0;
 			let raider = 25, oldWorld = 25, freeCity = 25, free = 25; // type is the chance out of 100 of an attack of that type happening
 			// the old world attracted by "degenerate" future societies
@@ -832,18 +831,20 @@ App.SecExp.Check = (function() {
 			if (V.SecExp.buildings.secHub.upgrades.security.cryptoAnalyzer === 1) {
 				Req += 10;
 			}
-			if (V.SecExp.buildings.secHub.upgrades.crime.autoTrial === 1) {
-				Req += 5;
+			
+			if (V.SecExp.buildings.secHub.upgrades.crime.advForensic === 1) {
+				Req += 10;
 			}
 			if (V.SecExp.buildings.secHub.upgrades.crime.autoArchive === 1) {
 				Req += 5;
 			}
-			if (V.SecExp.buildings.secHub.upgrades.crime.worldProfiler === 1) {
-				Req += 10;
+			if (V.SecExp.buildings.secHub.upgrades.crime.autoTrial === 1) {
+				Req += 5;
 			}
-			if (V.SecExp.buildings.secHub.upgrades.crime.advForensic === 1) {
+			if (V.SecExp.buildings.secHub.upgrades.crime.worldProfiler === 1) {
 				Req += 10;
 			}
+
 			if (V.SecExp.buildings.secHub.upgrades.intel.sensors === 1) {
 				Req += 5;
 			}
@@ -853,6 +854,10 @@ App.SecExp.Check = (function() {
 			if (V.SecExp.buildings.secHub.upgrades.intel.radar === 1) {
 				Req += 10;
 			}
+
+			if (V.SecExp.buildings.secHub.upgrades.readiness.pathways === 1) {
+				Req += 5;
+			}
 			if (V.SecExp.buildings.secHub.upgrades.readiness.rapidVehicles === 1) {
 				Req += 5;
 			}
diff --git a/src/Mods/SpecialForce/SpecialForce.js b/src/Mods/SpecialForce/SpecialForce.js
index 5baccbb55ea4d8145856a443ef0e40edc1d3fd01..3f9f03d9c73076c4fb414dfdcaac478e5e9d8b97 100644
--- a/src/Mods/SpecialForce/SpecialForce.js
+++ b/src/Mods/SpecialForce/SpecialForce.js
@@ -1453,7 +1453,7 @@ App.SF.AAR = function(endWeekCall = 1) {
 				r += `<span class='red'>barely enough to cover expenses.</span> More growth will be needed to ensure profitability, <span class='yellow'>hopefully purchasing more upgrades will help.</span>`;
 				r += ` Per the estimates that ${App.SF.SFC()} provides, an additional <span class='yellowgreen'>${cashFormat(profit)}</span> is required for sufficient cover.`;
 			}
-			r += `An difference of ${profit/V.SF.lastWeeksProfit}% since last week`;
+			r += `An difference of ${(profit/V.SF.lastWeeksProfit)*100}% since last week`;
 			V.SF.lastWeeksProfit = profit;
 
 			r += ` ${capSF} managed to recruit ${FNG} new soldiers this week, and your reputation has <span class='green'>increased through the improvement of trade security.</span>`;
diff --git a/src/arcologyBuilding/presets.js b/src/arcologyBuilding/presets.js
index 112aa9de1c3f034c2a660dbbfe60d37677503c11..459856a7d1f027f5eb8420d4d8e96a3e7ca05dcd 100644
--- a/src/arcologyBuilding/presets.js
+++ b/src/arcologyBuilding/presets.js
@@ -253,7 +253,7 @@ App.Arcology.presets = (function() {
 				randomShop().type = "Eugenics";
 				return;
 			case "HedonisticDecadence":
-				randomShop().type = "Hedonism";
+				randomShop().type = "Hedonistic";
 				return;
 			case "IntellectualDependency":
 				randomShop().type = "Intellectual Dependency";
diff --git a/src/arcologyBuilding/shops.js b/src/arcologyBuilding/shops.js
index 7d2191a16f4f5f3a52cde0f78cc268a94e969617..036e978a95d2b788a568ad8719bb73d3be1bc73c 100644
--- a/src/arcologyBuilding/shops.js
+++ b/src/arcologyBuilding/shops.js
@@ -1,7 +1,7 @@
 App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 	/**
 	 * @param {number} owner
-	 * @param {string} type
+	 * @param {FC.FutureSocietyDeco|"Brothel"|"Club"|"Shops"} type
 	 */
 	constructor(owner, type = "Shops") {
 		super(owner);
@@ -254,7 +254,7 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 						`You decide to wander between the shops; with so much fine merchandise on offer, it's possible that someone's selling something to catch your discerning eye, and it's always good to see and be seen. The slave sales${girl}s are welcoming and most are so well-trained that they treat you with the respect a member of the Societal Elite deserves. They all offer you a curtsey that allows them lift their skirts, revealing the appropriate chastity. You end up leaving the stores with several fancy chastity belts, a bag of tasty treats and an alluring dress you can't wait to debut at your next social meeting.`));
 				}
 				break;
-			case "Hedonism":
+			case "Hedonistic":
 				fragment.append(`dedicated to Hedonism. The establishments here are nearly all eateries, with a few sex shops and plus size clothing stores thrown in for good measure. Lovely smells fill the air, drawing your attention to the food vendors. Plump, cheerful slave${girl}s are present outside most of them offering free samples of the food sold within. You can't help but sample as you browse the menus. `,
 					App.UI.DOM.linkReplace("Conduct a more thorough culinary inspection",
 						"The eateries are very eager to have you seen enjoying their food, and go all out in their presentations. Plate after plate, vendor after vendor, you are treated to the best they can make and as much as you want, free of charge. You make sure to not go too crazy, but by the final restaurant, your clothing is definitely getting a little tight around your bloated belly. After a number of glowing reviews, you're left with making your way back home. Fortunately, your arcology features plenty of moving walkways and escalators, so you can relax as your infrastructure delivers you right back to your penthouse."));
diff --git a/src/endWeek/reports/clinicReport.js b/src/endWeek/reports/clinicReport.js
index f8d4ff599e6d09926e159471b15d136de28b4d1b..672d3b4ca4b2d56914725abf23dff021b3a70b01 100644
--- a/src/endWeek/reports/clinicReport.js
+++ b/src/endWeek/reports/clinicReport.js
@@ -66,7 +66,7 @@ App.EndWeek.clinicReport = function() {
 				idleBonus++;
 				healthBonus++;
 			} else {
-				S.Nurse.skill.nurse += jsRandom(1, Math.ceil((S.Nurse.intelligence+S.Nurse.intelligenceImplant)/15) + 8);
+				S.Nurse.skill.nurse += jsRandom(1, Math.ceil((S.Nurse.intelligence + S.Nurse.intelligenceImplant) / 15) + 8);
 			}
 			if (S.Nurse.fetish === "dom") {
 				r.push(`${He} raps out commands with the confidence of long and partly sexual experience, so patients are inclined to follow even unpleasant medical instructions.`);
@@ -78,7 +78,7 @@ App.EndWeek.clinicReport = function() {
 				idleBonus++;
 				healthBonus++;
 			}
-			if (S.Nurse.intelligence+S.Nurse.intelligenceImplant > 50) {
+			if (S.Nurse.intelligence + S.Nurse.intelligenceImplant > 50) {
 				r.push(`The diagnostic equipment is state-of-the-art, but ${he}'s smart and perceptive enough that on occasion, ${he} can add meaningfully to its medical scans.`);
 				idleBonus++;
 				healthBonus++;
@@ -339,24 +339,33 @@ App.EndWeek.clinicReport = function() {
 
 		/* Evaluate why the slave even needs to be here, and eject her if she doesn't */
 		const {He, he, his} = getPronouns(slave);
-		let remainReason = "";
+		const remainReasons = [];
 		if (slave.health.illness > 0) {
-			remainReason = `${He} stays in the clinic since ${he} is still sick.`;
-		} else if (slave.health.shortDamage >= 20) {
-			remainReason = `${He} stays in the clinic to recover from ${his} injuries.`;
-		} else if (slave.health.condition <= 40) {
-			remainReason = `${He} stays in the clinic since ${his} health is still poor.`;
-		} else if (S.Nurse && (slave.chem > 15) && (V.clinicUpgradeFilters === 1)) {
-			remainReason = `${He} stays in the clinic as unhealthy chemicals are still being flushed from ${his} system.`;
-		} else if (S.Nurse && (slave.pregKnown === 1) && (V.clinicSpeedGestation > 0 || slave.pregControl === "speed up")) {
-			remainReason = `${He} stays in the clinic to hurry ${his} pregnancy along safely.`;
-		} else if (S.Nurse && (V.clinicObservePregnancy === 1) && (slave.pregAdaptation * 1000 < slave.bellyPreg || slave.preg > slave.pregData.normalBirth / 1.33)) {
-			remainReason = `${He} stays in the clinic waiting for the child to be born.`;
-		} else if (S.Nurse && (V.clinicInflateBelly > 0) && (slave.bellyImplant >= 0) && (slave.bellyImplant <= (V.arcologies[0].FSTransformationFetishistResearch ? 800000 : 130000))) {
-			remainReason = `${He} stays in the clinic as ${his} implants can still receive more filling.`;
-		} else {
+			remainReasons.push(`since ${he} is still sick`);
+		}
+		if (slave.health.shortDamage >= 20) {
+			remainReasons.push(`to recover from ${his} injuries`);
+		}
+		if (slave.health.condition <= 40) {
+			remainReasons.push(`since ${his} health is still poor`);
+		}
+		if (S.Nurse) {
+			if (slave.chem > 15 && V.clinicUpgradeFilters === 1) {
+				remainReasons.push(`to have unhealthy chemicals flushed from ${his} system`);
+			}
+			if (slave.pregKnown === 1 && (V.clinicSpeedGestation > 0 || slave.pregControl === "speed up")) {
+				remainReasons.push(`to hurry ${his} pregnancy along safely`);
+			}
+			if (V.clinicObservePregnancy === 1 && (slave.pregAdaptation * 1000 < slave.bellyPreg || slave.preg > slave.pregData.normalBirth / 1.33)) {
+				remainReasons.push(`to wait for the child to be born`);
+			}
+			if (V.clinicInflateBelly > 0 && slave.bellyImplant >= 0 && (slave.bellyImplant <= (V.arcologies[0].FSTransformationFetishistResearch ? 800000 : 130000))) {
+				remainReasons.push(`as ${his} implants can still receive more filling`);
+			}
+		}
+
+		if (remainReasons.length === 0) {
 			const reassignment = App.UI.DOM.appendNewElement("p", frag, '');
-			const {he, his} = getPronouns(slave);
 			let r = [];
 			r.push(`<span class="slave-name">${slave.slaveName}</span> has been cured${(S.Nurse && V.clinicUpgradeFilters > 0) ? ' and purified' : ''},`);
 			r.push(`<span class="noteworthy">`);
@@ -396,7 +405,9 @@ App.EndWeek.clinicReport = function() {
 			}
 			const patientContent = App.UI.DOM.appendNewElement("div", slaveEntry, '', "indent");
 			$(patientContent).append(`${He} ${App.SlaveAssignment.rest(slave)} `);
-			$(patientContent).append(remainReason);
+			if (remainReasons.length > 0) {
+				$(patientContent).append(`${He} stays in the clinic ${arrayToSentence(remainReasons)}.`);
+			}
 			slaveEntry.append(App.SlaveAssignment.standardSlaveReport(slave, false));
 		} else {
 			// discard return values silently
diff --git a/src/endWeek/saRivalries.js b/src/endWeek/saRivalries.js
index 7869added562293a9ea63212bf48502c4bab3cc2..187f5c176605d406bb1dc7d6d2ffbe287c9681bc 100644
--- a/src/endWeek/saRivalries.js
+++ b/src/endWeek/saRivalries.js
@@ -242,7 +242,7 @@ App.SlaveAssignment.rivalries = (function() {
 						if (App.Utils.sexAllowed(slave, rival)) {
 							if (slave.fetishKnown) {
 								if (slave.fetish === "sadist") {
-									r.push(`${slave.slaveName} is horny and sadistic, so ${he} rapes ${his} rival ${SlaveFullName(rival)}} every chance ${he} gets; this <span class="devotion inc">thrills</span> ${slave.slaveName}, but ${rival.slaveName} is <span class="trust dec">frightened</span> that you let it happen.`);
+									r.push(`${slave.slaveName} is horny and sadistic, so ${he} rapes ${his} rival ${SlaveFullName(rival)} every chance ${he} gets; this <span class="devotion inc">thrills</span> ${slave.slaveName}, but ${rival.slaveName} is <span class="trust dec">frightened</span> that you let it happen.`);
 									slave.need = 0;
 									slave.devotion += 3;
 									rival.trust -= 3;
diff --git a/src/facilities/surgery/analyzePregnancy.js b/src/facilities/surgery/analyzePregnancy.js
new file mode 100644
index 0000000000000000000000000000000000000000..5321dbd1997d6f11fe879253c06994413b5b3b76
--- /dev/null
+++ b/src/facilities/surgery/analyzePregnancy.js
@@ -0,0 +1,91 @@
+/**
+ *
+ * @param {App.Entity.Fetus} fetus
+ */
+
+globalThis.fetusAbnormalities = function(fetus) {
+	const div = App.UI.DOM.makeElement("div", null, "indent");
+	/** @type {Map.<FC.GeneticQuirks|string>} */
+	const quirkNames = new Map([
+		["albinism",
+			{
+				abbreviation: "alb",
+				goodTrait: true
+			}
+		],
+		["gigantism", {abbreviation: "gnt"}],
+		["dwarfism", {abbreviation: "dwrf"}],
+		["neoteny", {abbreviation: "ntny"}],
+		["progeria", {abbreviation: "progeria"}],
+		["heterochromia",
+			{
+				abbreviation: "hetchrom",
+				goodTrait: true
+			}
+		],
+		["androgyny", {abbreviation: "andr"}],
+		["pFace",
+			{
+				abbreviation: "pfce",
+				goodTrait: true
+			}
+		],
+		["uFace", {abbreviation: "ufce"}],
+		["fertility",
+			{
+				abbreviation: "fert",
+				goodTrait: true
+			}
+		],
+		["hyperFertility",
+			{
+				abbreviation: "hfert",
+				goodTrait: true
+			}
+		],
+		["superfetation",
+			{
+				abbreviation: "supfet",
+				goodTrait: true
+			}
+		],
+		["polyhydramnios", {abbreviation: "polyhyd"}],
+		["uterineHypersensitivity",
+			{
+				abbreviation: "uthyp",
+				goodTrait: true
+			}
+		],
+		["macromastia", {abbreviation: "mmast"}],
+		["gigantomastia", {abbreviation: "gmast"}],
+		["galactorrhea", {abbreviation: "rlact"}],
+		["wellHung",
+			{
+				abbreviation: "bigd",
+				goodTrait: true
+			}
+		],
+		["rearLipedema", {abbreviation: "lipe"}],
+		["wGain", {abbreviation: "lepti+"}],
+		["wLoss", {abbreviation: "lepti-"}],
+		["mGain", {abbreviation: "myot+"}],
+		["mLoss", {abbreviation: "myot-"}],
+	]);
+
+	const abnormalitySpans = [];
+	for (const gene in fetus.genetics.geneticQuirks) {
+		const geneObj = quirkNames.get(gene);
+		const quirkName = (geneObj && geneObj.abbreviation) ? geneObj.abbreviation : gene;
+		const quirkColor = (geneObj && geneObj.goodTrait) ? "green" : "red";
+		if (fetus.genetics.geneticQuirks[gene] === 2) {
+			abnormalitySpans.push(App.UI.DOM.makeElement("span", quirkName, quirkColor));
+		} else if (fetus.genetics.geneticQuirks[gene] === 1 && V.geneticMappingUpgrade >= 2) {
+			abnormalitySpans.push(App.UI.DOM.makeElement("span", quirkName, "yellow"));
+		}
+	}
+	if (abnormalitySpans.length > 0) {
+		div.append("Detected abnormalities: ");
+		App.Events.addNode(div, abnormalitySpans);
+	}
+	return div;
+};
diff --git a/src/facilities/surgery/remoteSurgery.tw b/src/facilities/surgery/remoteSurgery.tw
index 985e75e47e01e80dde1ce8de746f9203770d2200..dd3ca84289ac1f0dc0e727d0a02a948d9a8f0d41 100644
--- a/src/facilities/surgery/remoteSurgery.tw
+++ b/src/facilities/surgery/remoteSurgery.tw
@@ -78,433 +78,7 @@
 
 <div id="upper" class="tab-content">
 	<div class="content">
-		/* 000-250-006 */
-		<<if $seeImages == 1>>
-			<<if $imageChoice == 1>>
-				<div class="imageRef lrgVector"><div class="mask">&nbsp;</div><<= SlaveArt(getSlave($AS), 3, 0)>></div>
-			<<else>>
-				<div class="imageRef lrgRender"><div class="mask">&nbsp;</div><<= SlaveArt(getSlave($AS), 3, 0)>></div>
-			<</if>>
-		<</if>>
-		/* 000-250-006 */
-		/*Generic boob desc*/
-		<h3>Chest:</h3>
-		<div>
-			$His
-			<<if getSlave($AS).boobs < 300>><<print either("androgynous", "flat")>> chest is barely there.
-			<<elseif getSlave($AS).boobs < 400>><<print either("pointy", "tiny")>>, <<print getSlave($AS).boobs>>cc chest only fill A-cups.
-			<<elseif getSlave($AS).boobs < 8500>>
-				<<if $showBoobCCs == 1>>
-					<<print App.Desc.boobBits.format("%ADJ %NOUN, %VOLUME CCs, would fill %ACUP.", getSlave($AS).boobs)>>
-				<<else>>
-					<<print App.Desc.boobBits.format("%ADJ %NOUN, would fill %ACUP.", getSlave($AS).boobs)>>
-				<</if>>
-			<<else>>
-				<<print App.Desc.boobBits.format("%ADJ %NOUN, %VOLUME CCs, ", getSlave($AS).boobs)>> fill out an enormous custom bra; $his tits dominate $his entire frame.
-			<</if>>
-		</div>
-
-		/*Boob implants*/
-		<div>
-			$He has
-			<<if ["fillable", "advanced fillable", "hyper fillable"].includes(getSlave($AS).boobsImplantType)>>
-				<<if getSlave($AS).boobsImplantType == "hyper fillable">>
-					<<if getSlave($AS).boobsImplant < 20000>>
-						underfilled,
-					<<else>>
-						enormous,
-					<</if>>
-				<<elseif getSlave($AS).boobsImplantType == "advanced fillable">>
-					<<if getSlave($AS).boobsImplant <= 1000>>
-						deflated,
-					<<elseif getSlave($AS).boobsImplant < 2200>>
-						underfilled,
-					<<elseif getSlave($AS).boobsImplant > 10000>>
-						massively overfilled,
-					<<else>>
-						massive,
-					<</if>>
-				<<else>>
-					<<if getSlave($AS).boobsImplant <= 500>>
-						deflated,
-					<<elseif getSlave($AS).boobsImplant < 800>>
-						underfilled,
-					<<elseif getSlave($AS).boobsImplant > 1800>>
-						massively overfilled,
-					<<elseif getSlave($AS).boobsImplant > 1000>>
-						massive,
-					<<elseif getSlave($AS).boobsImplant >= 800>>
-						giant,
-					<</if>>
-				<</if>>
-				<<print getSlave($AS).boobsImplant>>cc <<= getSlave($AS).boobsImplantType>> breast implants.
-			<<elseif getSlave($AS).boobsImplantType != "none">>
-				<<if getSlave($AS).boobsImplant > 1000>>
-					massive, <<print getSlave($AS).boobsImplant>>cc
-				<<elseif getSlave($AS).boobsImplant > 800>>
-					giant, <<print getSlave($AS).boobsImplant>>cc
-				<<elseif getSlave($AS).boobsImplant > 600>>
-					huge, <<print getSlave($AS).boobsImplant>>cc
-				<<elseif getSlave($AS).boobsImplant > 400>>
-					large, <<print getSlave($AS).boobsImplant>>cc
-				<<elseif getSlave($AS).boobsImplant > 200>>
-					moderate, <<print getSlave($AS).boobsImplant>>cc
-				<<elseif getSlave($AS).boobsImplant > 0>>
-					small, <<print getSlave($AS).boobsImplant>>cc
-				<</if>>
-				<<if getSlave($AS).boobsImplantType != "normal">>
-					<<= getSlave($AS).boobsImplantType>>
-				<</if>>
-				breast implants.
-				<<if getSlave($AS).boobsImplant > 8000 && getSlave($AS).boobsImplantType == "string">>
-					<span class="yellow">Large string based implants are a risk to a slave's health.</span>
-				<</if>>
-			<<else>>
-				no implants.
-			<</if>>
-			<div class="choices">
-				<<set _surgeries = App.Medicine.Surgery.sizingProcedures.boobs(getSlave($AS), App.Medicine.Surgery.allSizingOptions())>>
-				<<set _surgeryLinks = _surgeries.map(s => App.Medicine.Surgery.makeLink("Surgery Degradation", s, getSlave($AS)))>>
-				<<= _surgeryLinks.join('&thinsp;|&thinsp;')>>
-			</div>
-		</div>
-
-		<div>
-			<<if getSlave($AS).boobsImplant != 0>>
-				The shape of $his breasts is determined by $his implants.
-			<<else>>
-				<<if getSlave($AS).boobs <= 250>>
-					$He's so flat-chested that $his breasts don't have much shape.
-				<<else>>
-					<<switch getSlave($AS).boobShape>>
-						<<case "perky">>
-							They're perky, with nipples that point slightly upwards.
-						<<case "downward-facing">>
-							They're not attractively shaped; $his nipples pointing downward.
-						<<case "torpedo-shaped">>
-							They're torpedo-shaped, projecting some way from $his chest.
-						<<case "wide-set">>
-							They're wide-set, with nipples pointing away from $his sternum.
-						<<case "saggy">>
-							They're not attractively shaped, with $his nipples pointing down.
-						<<default>>
-							They're nicely rounded and rest naturally.
-					<</switch>>
-					<div class="choices">
-						<<if getSlave($AS).indentureRestrictions >= 2>>
-							<span class="note">$His indenture does not allow breast restructuring</span>
-						<<elseif getSlave($AS).breastMesh == 1>>
-							<span class="note">$His supportive mesh implant prevents reconstruction</span>
-						<<else>>
-							<<if (getSlave($AS).boobShape == "saggy") || (getSlave($AS).boobShape == "downward-facing")>>
-								[[Breast lift|Surgery Degradation][getSlave($AS).boobShape = "normal", surgeryDamage(getSlave($AS),20),cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "breastLift"]]<<if getSlave($AS).preg > getSlave($AS).pregData.normalBirth/1.42 || (getSlave($AS).boobs >= 5000 && getSlave($AS).boobs < 8000)>> <span class="note">$His current state may result in $his breasts becoming saggy again</span><</if>>
-							<<else>>
-								<<if (getSlave($AS).boobShape == "normal")>>
-									[[Reshape them to be perkier|Surgery Degradation][getSlave($AS).boobShape = "perky",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)),surgeryDamage(getSlave($AS),10),$surgeryType = "breastReconstruction"]]
-									| [[Make them torpedo-shaped|Surgery Degradation][getSlave($AS).boobShape = "torpedo-shaped",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)),surgeryDamage(getSlave($AS),10),$surgeryType = "breastReconstruction"]]
-								<<else>>
-									[[Reshape them to be more normal|Surgery Degradation][getSlave($AS).boobShape = "normal",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)),surgeryDamage(getSlave($AS),10),$surgeryType = "breastReconstruction"]]
-								<</if>>
-								<<if (getSlave($AS).boobShape != "saggy") && (getSlave($AS).boobShape != "downward-facing") && (getSlave($AS).boobs >= 2000) && (getSlave($AS).boobsImplant == 0) && ($meshImplants == 1) && ($surgeryUpgrade == 1)>>
-									| [[Implant a supportive mesh to preserve their shape|Surgery Degradation][getSlave($AS).breastMesh = 1,cashX(forceNeg($surgeryCost*(getSlave($AS).boobs/100)), "slaveSurgery", getSlave($AS)),surgeryDamage(getSlave($AS),10),$surgeryType = "breastShapePreservation"]]
-								<</if>>
-							<</if>>
-						<</if>>
-					</div>
-				<</if>>
-			<</if>>
-		</div>
-
-		/* Nipples*/
-		<div>
-			<<if $surgeryUpgrade == 1>>
-				$He has <<= getSlave($AS).nipples>> nipples.
-				<div class="choices">
-					<<if getSlave($AS).indentureRestrictions >= 2>>
-						<span class="note">$His indenture forbids elective surgery</span>
-					<<elseif getSlave($AS).indentureRestrictions == 1>>
-						<span class="note">$His indenture forbids extreme body modification</span>
-					<<else>> /* split for possible dicknips later on, should lcd wish to attempt it again. */
-						<<if getSlave($AS).nipples == "fuckable">>
-							[[Restore their shape and function|Surgery Degradation][getSlave($AS).nipples = "huge",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-						<<else>>
-							<<if getSlave($AS).boobs-getSlave($AS).boobsMilk < 500>>
-								<span class="note">$His breasts are too small to support reshaping $his nipples to be penetratable</span>
-							<<elseif getSlave($AS).boobs-getSlave($AS).boobsImplant-getSlave($AS).boobsMilk < 500>>
-								<span class="note">$His implants are too large to support reshaping $his nipples to be penetratable</span>
-							<<elseif getSlave($AS).nipples != "huge">>
-								<span class="note">$His nipples are too small to be made fuckable</span>
-							<<else>>
-								[[Reshape them to support being penetrated|Surgery Degradation][getSlave($AS).nipples = "fuckable",getSlave($AS).nipplesPiercing = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),20),$surgeryType = "nippleCunts"]]<<if getSlave($AS).nipplesPiercing > 0>> <span class="note">Will remove piercings.</span><</if>>
-							<</if>>
-						<</if>>
-					<</if>>
-				</div>
-			<</if>>
-		</div>
-
-		/*Areolae*/
-		<div>
-			<<if getSlave($AS).areolae == 0>>
-				$His areolae are small
-				<<if getSlave($AS).areolaeShape != "circle">>
-					and have been surgically altered to be <<= getSlave($AS).areolaeShape>>-shaped.
-				<<else>>
-					and fairly normal.
-				<</if>>
-			<<elseif getSlave($AS).areolae == 1>>
-				$His areolae are large
-				<<if getSlave($AS).areolaeShape != "circle">>
-					and have been surgically altered to be <<= getSlave($AS).areolaeShape>>-shaped.
-				<<else>>
-					but still fairly normal.
-				<</if>>
-			<<elseif getSlave($AS).areolae > 1>>
-				$He has
-				<<if getSlave($AS).areolae == 2>>
-					wide
-				<<elseif getSlave($AS).areolae == 3>>
-					huge
-				<<elseif getSlave($AS).areolae == 4>>
-					massive
-				<</if>>
-				areolae<<if getSlave($AS).areolaeShape != "circle">>, which have been surgically altered to be <<= getSlave($AS).areolaeShape>>-shaped<</if>>.
-			<</if>>
-			<<if getSlave($AS).indentureRestrictions < 2>>
-				<<if getSlave($AS).areolaeShape != "circle">>
-					$His <<= getSlave($AS).areolaeShape>>-shaped areolae can be normalized or reshaped:
-					<div class="choices">
-						[[Normal|Surgery Degradation][getSlave($AS).areolaeShape = "circle",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-						<<if getSlave($AS).areolaeShape != "heart">>
-							| [[Heart-shaped|Surgery Degradation][getSlave($AS).areolaeShape = "heart",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-						<</if>>
-						<<if getSlave($AS).areolaeShape != "star">>
-							| [[Star-shaped|Surgery Degradation][getSlave($AS).areolaeShape = "star",cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]] |
-						<</if>>
-					</div>
-				<</if>>
-				<<if (getSlave($AS).areolae > 0) && (getSlave($AS).areolaeShape == "circle")>>
-					They are big enough that they could be reshaped into a pattern. Graft skin to make $his areolae:
-				<</if>>
-				<div class="choices">
-					<<if (getSlave($AS).areolae > 0) && (getSlave($AS).areolaeShape == "circle")>>
-						[[Heart-shaped|Surgery Degradation][getSlave($AS).areolaeShape = "heart",getSlave($AS).areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-						| [[Star-shaped|Surgery Degradation][getSlave($AS).areolaeShape = "star",getSlave($AS).areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-					<</if>>
-					<<if getSlave($AS).areolae > 0>>
-						| [[Reduce areolae|Surgery Degradation][getSlave($AS).areolae -= 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-					<</if>>
-					<<if getSlave($AS).areolae > 0>>|<</if>>
-					<<if getSlave($AS).areolae < 4>>
-						[[Enlarge areolae|Surgery Degradation][getSlave($AS).areolae += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "areolae"]]
-					<</if>>
-				</div>
-			<</if>>
-		</div>
-
-		/*Lactation*/
-		<div>
-			<<if getSlave($AS).lactation == 0>>
-				$He is not lactating.
-			<<elseif getSlave($AS).lactation == 2>>
-				$He is implanted with slow-release pro-lactation drugs.
-			<<else>>
-				$He is lactating naturally.
-			<</if>>
-			<div class="choices">
-				<<if getSlave($AS).lactation < 2>>
-					<<if getSlave($AS).indentureRestrictions < 2>>
-						[[Implant slow-release pro-lactation drugs|Surgery Degradation][getSlave($AS).lactationDuration = 2, getSlave($AS).induceLactation = 0, getSlave($AS).boobs -= getSlave($AS).boobsMilk, getSlave($AS).boobsMilk = 0, getSlave($AS).rules.lactation = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "lactation"]] <span class="note">This may increase $his natural breast size</span>
-					<</if>>
-				<</if>>
-				<<if getSlave($AS).lactation > 1>>
-					| [[Remove lactation implant|Surgery Degradation][getSlave($AS).lactation = 0, getSlave($AS).lactationDuration = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "endlac"]]
-				<</if>>
-			</div>
-		</div>
-
-		<h3>Midrif:</h3>
-		/*Fat*/
-		<div>
-			<<if getSlave($AS).indentureRestrictions >= 2 && getSlave($AS).weight > 30>>
-				<span class="note">$His indenture forbids elective surgery</span>
-			<<elseif getSlave($AS).weight > 30>>
-				<<if getSlave($AS).weight > 190>>
-					$He is extremely fat. [[Major liposuction|Surgery Degradation][surgeryDamage(getSlave($AS),40), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "liposuction"]]
-				<<elseif getSlave($AS).weight > 130>>
-					$He is fat. [[Heavy liposuction|Surgery Degradation][surgeryDamage(getSlave($AS),20), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "liposuction"]]
-				<<elseif getSlave($AS).weight > 30>>
-					$He is overweight. [[Liposuction|Surgery Degradation][surgeryDamage(getSlave($AS),10), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "liposuction"]]
-				<</if>>
-				<<if $surgeryUpgrade == 1>>
-					| [[Fat grafting|Fat Grafting][surgeryDamage(getSlave($AS),40), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS))*2, $surgeryType = "fat graft"]]
-				<</if>>
-			<</if>>
-		</div>
-
-		/*Also fat*/
-		<div>
-			$He has
-			<<if getSlave($AS).waist > 95>>a masculine
-			<<elseif getSlave($AS).waist > 40>>an ugly
-			<<elseif getSlave($AS).waist > 10>>an unattractive
-			<<elseif getSlave($AS).waist >= -10>>an average
-			<<elseif getSlave($AS).waist >= -40>>a feminine
-			<<elseif getSlave($AS).waist >= -95>>an hourglass
-			<<else>>an absurd
-			<</if>>
-			waist.
-			<<if getSlave($AS).waist >= -75>>
-				<<if getSlave($AS).indentureRestrictions < 2>>
-					[[Liposuction|Surgery Degradation][getSlave($AS).waist -= 20,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "lipo"]]
-				<</if>>
-			<</if>>
-			<<if (getSlave($AS).waist >= -95) && (getSlave($AS).waist < -75) && ($seeExtreme == 1)>>
-				<<if getSlave($AS).indentureRestrictions < 1 && (getSlave($AS).breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-					[["Remove ribs to severely narrow " + $his + " waist"|Surgery Degradation][getSlave($AS).waist = -100,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),40),$surgeryType = "ribs"]]
-				<</if>>
-			<</if>>
-		</div>
-
-		/*Belly*/
-		<div>
-			$He's
-			<<if getSlave($AS).pregKnown > 0>>
-				pregnant.
-			<<elseif getSlave($AS).womb.length == 0 && getSlave($AS).broodmother > 0>>
-				got a dormant broodmother implant in $his womb.
-			<<elseif getSlave($AS).preg > 0>>
-				showing unusual discomfort as $his stomach is inspected. A quick test reveals that <span class="lime">$he is pregnant.</span>
-				<<set getSlave($AS).pregKnown = 1>>
-			<<elseif getSlave($AS).bellyImplant > 0>>
-				got a <<print getSlave($AS).bellyImplant>>cc implant filled implant located in $his abdomen.
-				<<if getSlave($AS).cervixImplant == 1 >>
-					$He also has micropump filter installed in $his cervix feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 2>>
-					$He also has micropump filter installed in $his rectum feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 3>>
-					$He also has micropump filter installed in both $his holes feeding into the implant.
-				<</if>>
-			<<elseif getSlave($AS).bellyFluid >= 1500>>
-				got a <<print getSlave($AS).inflationType>>-filled implant located in $his abdomen.
-				<<if getSlave($AS).cervixImplant == 1 >>
-					$He also has micropump filter installed in $his cervix feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 2>>
-					$He also has micropump filter installed in $his rectum feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 3>>
-					$He also has micropump filter installed in both $his holes feeding into the implant.
-				<</if>>
-			<<elseif getSlave($AS).bellyImplant == 0>>
-				got an empty fillable implant located in $his abdomen.
-				<<if getSlave($AS).cervixImplant == 1 >>
-					$He also has micropump filter installed in $his cervix feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 2>>
-					$He also has micropump filter installed in $his rectum feeding into the implant.
-				<<elseif getSlave($AS).cervixImplant == 3>>
-					$He also has micropump filter installed in both $his holes feeding into the implant.
-				<</if>>
-			<<else>>
-				got a normal stomach.
-			<</if>>
-			<div class="choices">
-				<<if getSlave($AS).indentureRestrictions >= 2>>
-					<span class="note">$His indenture forbids elective surgery</span>
-				<<elseif getSlave($AS).breedingMark == 1 && $propOutcome == 1 && $eugenicsFullControl != 1 && $arcologies[0].FSRestart != "unset">>
-					<span class="note">You are forbidden from affecting $his fertility</span>
-				<<elseif getSlave($AS).preg > 0 || getSlave($AS).inflation > 0 || getSlave($AS).broodmother > 0>>
-					<span class="note">$He is unable to support an abdominal implant at this time</span>
-				<<elseif getSlave($AS).bellyImplant >= 750000>>
-					<span class="note">$His abdominal implant is so far beyond its maximum limit it is at risk of rupturing</span>
-				<<elseif getSlave($AS).bellyImplant >= 600000>>
-					<span class="note">$His abdominal implant is greatly beyond its maximum limit</span>
-				<<elseif getSlave($AS).bellyImplant >= 450000>>
-					<span class="note">$His abdominal implant is over-filled</span>
-				<<elseif getSlave($AS).bellyImplant >= 400000>>
-					<span class="note">$His abdominal implant is at its capacity</span>
-				<<elseif getSlave($AS).bellyImplant > 130000 && $arcologies[0].FSTransformationFetishistResearch != 1>>
-					<span class="note">$His abdominal implant is at its capacity</span>
-				<<elseif getSlave($AS).bellyImplant == -1 && (getSlave($AS).ovaries == 1 || getSlave($AS).mpreg == 1) && $bellyImplants == 1>>
-					[[Implant fillable abdominal implant|Surgery Degradation][getSlave($AS).bellyImplant = 0,getSlave($AS).preg = -2, getSlave($AS).bellyPain += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "bellyIn"]]
-				<<elseif getSlave($AS).bellyImplant == -1 && $bellyImplants == 1>>
-					[[Implant a fillable abdominal implant|Surgery Degradation][getSlave($AS).bellyImplant = 0, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), getSlave($AS).bellyPain += 2, surgeryDamage(getSlave($AS),50), $surgeryType = "bellyInMale"]]
-				<<elseif getSlave($AS).bellyPain == 2>>
-					<span class="note">$His body cannot handle more filler this week</span>
-				<<elseif getSlave($AS).bellyImplant > -1 && getSlave($AS).bellyPain == 0>>
-					[[Add inert filler|Surgery Degradation][getSlave($AS).bellyImplant += 200, getSlave($AS).bellyPain += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10),$surgeryType = "bellyUp"]]
-					| [[Add a considerable amount of inert filler|Surgery Degradation][getSlave($AS).bellyImplant += 500, getSlave($AS).bellyPain += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),20),$surgeryType = "bellyUp"]]
-				<<elseif getSlave($AS).bellyImplant > -1 && getSlave($AS).bellyPain == 1>>
-					[[Add more inert filler|Surgery Degradation][getSlave($AS).bellyImplant += 200, getSlave($AS).bellyPain += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),30),$surgeryType = "bellyUp"]]
-					| [[Add a considerable amount of inert filler|Surgery Degradation][getSlave($AS).bellyImplant += 500, getSlave($AS).bellyPain += 1,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),40),$surgeryType = "bellyUp"]]<<if getSlave($AS).health.health < 0>><span class="note red">This may cause severe health issues</span><</if>>
-				<</if>>
-				<<if getSlave($AS).bellyImplant > -1>>
-					| [[Drain implant|Surgery Degradation][getSlave($AS).bellyImplant -= 200,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),5), $surgeryType = "bellyDown"]]
-					<<if getSlave($AS).bellyImplant >= 500>>
-						| [[Greatly drain implant|Surgery Degradation][getSlave($AS).bellyImplant -= 500, surgeryDamage(getSlave($AS),5),cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "bellyDown"]]
-					<</if>>
-					<<if getSlave($AS).indentureRestrictions < 2>>
-						| [[Remove implant|Surgery Degradation][getSlave($AS).bellyImplant = -1, getSlave($AS).cervixImplant = 0, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),10), $surgeryType = "bellyOut"]]
-						<<if getSlave($AS).cervixImplant != 1 && getSlave($AS).cervixImplant != 3 && $cervixImplants >= 1 && getSlave($AS).vagina > -1>> /* slave should have vagina */
-							<div>
-								[[Install cervix micropump filter|Surgery Degradation][getSlave($AS).cervixImplant = (getSlave($AS).cervixImplant==0?1:3), surgeryDamage(getSlave($AS), 5), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "cervixPump"]]
-								<span class="note">Will allow $his belly implant to slowly swell as people cum in $his vagina</span>
-							</div>
-						<</if>>
-						<<if getSlave($AS).cervixImplant != 2 && getSlave($AS).cervixImplant != 3 && $cervixImplants == 2>>
-							<div>
-								[[Install rectal micropump filter|Surgery Degradation][getSlave($AS).cervixImplant = (getSlave($AS).cervixImplant==0?2:3), surgeryDamage(getSlave($AS), 20), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "cervixPumpA"]]
-								<span class="note">Will allow $his belly implant to slowly swell as people cum in $his anus</span>
-							</div>
-						<</if>>
-					<</if>>
-				<</if>>
-			</div>
-		</div>
-
-		/* Uterine Implants */
-		<div>
-			<<if getSlave($AS).wombImplant == "none" && ($UterineRestraintMesh == 1) && (getSlave($AS).ovaries == 1 || getSlave($AS).mpreg == 1)>>
-				$He has a normal uterus<<if getSlave($AS).mpreg == 1>>, though slightly repositioned<</if>>.
-				<<if getSlave($AS).indentureRestrictions >= 1>>
-					<span class="note">$His indenture forbids invasive elective surgery</span>
-				<<elseif getSlave($AS).bellyImplant > 0 || getSlave($AS).preg > 0>>
-					<span class="note">$His womb is currently in use and unsafe to operate on</span>
-				<<else>>
-					<<if $surgeryUpgrade == 1>>
-						<<if $UterineRestraintMesh == 1>>
-							[[Install reinforcing organic mesh|Surgery Degradation][getSlave($AS).wombImplant = "restraint", surgeryDamage(getSlave($AS),25), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "womb"]]
-						<</if>>
-					<</if>>
-				<</if>>
-			<<elseif getSlave($AS).wombImplant == "restraint">>
-				$He has a mesh reinforced uterus.
-				<<if getSlave($AS).indentureRestrictions >= 1>>
-					<span class="note">$His indenture forbids invasive elective surgery</span>
-				<<elseif getSlave($AS).bellyImplant > 0 || getSlave($AS).preg > 0>>
-					<span class="note">$His womb is currently in use and unsafe to operate on</span>
-				<<else>>
-					[[Remove organic mesh|Surgery Degradation][getSlave($AS).wombImplant = "none", surgeryDamage(getSlave($AS),50), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "womb"]]<<if getSlave($AS).health.health < 0>><span class="note red">This may cause severe health issues</span><</if>>
-				<</if>>
-			<</if>>
-		</div>
-
-		/*Belly sag*/
-		<div>
-			<<if getSlave($AS).bellySagPreg > 0>>
-				<<if getSlave($AS).belly >= 1500>>
-					$He has a sagging midriff, ruined from excessive pregnancy. It is currently filled out by $his swollen belly and cannot safely be worked on.
-				<<else>>
-					$He has a sagging midriff, ruined from excessive pregnancy.
-					[[Tummy tuck|Surgery Degradation][getSlave($AS).bellySag = 0,getSlave($AS).bellySagPreg = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),20),$surgeryType = "tummyTuck"]]
-				<</if>>
-			<<elseif getSlave($AS).bellySag > 0>>
-				<<if getSlave($AS).belly >= 1500>>
-					$He has a sagging midriff, ruined from excessive distention. It is currently filled out by $his swollen belly and cannot safely be worked on.
-				<<else>>
-					$He has a sagging midriff, ruined from excessive distention.
-					[[Tummy tuck|Surgery Degradation][getSlave($AS).bellySag = 0,getSlave($AS).bellySagPreg = 0,cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS),20),$surgeryType = "tummyTuck"]]
-				<</if>>
-			<</if>>
-		</div>
+		<<includeDOM App.UI.surgeryPassageUpper(getSlave($AS))>>
 	</div>
 </div>
 
@@ -688,7 +262,7 @@
 					<</if>>
 				</div>
 			<</if>>
-	</div>
+		</div>
 
 		/* TODO: add a check for slave's eggType */
 		/*Fertility*/
@@ -987,7 +561,7 @@
 					<</if>>
 				<</if>>
 			</div>
-	<</if>>
+		<</if>>
 
 		/*Prostate*/
 		<div>
diff --git a/src/facilities/surgery/surgeryPassageUpper.js b/src/facilities/surgery/surgeryPassageUpper.js
new file mode 100644
index 0000000000000000000000000000000000000000..815ed6de5cedac73392f783b795ccf44f1676c38
--- /dev/null
+++ b/src/facilities/surgery/surgeryPassageUpper.js
@@ -0,0 +1,819 @@
+/**
+ * UI for performing surgery. Refreshes without refreshing the passage.
+ * @param {App.Entity.SlaveState} slave
+ * @param {boolean} [cheat=false]
+ * @returns {HTMLElement}
+ */
+
+App.UI.surgeryPassageUpper = function(slave, cheat = false) {
+	const container = document.createElement("span");
+	container.append(content());
+	return container;
+
+	function content() {
+		const frag = new DocumentFragment();
+		const {
+			His, He,
+			his, he
+		} = getPronouns(slave);
+		/** @type {HTMLAnchorElement[]} */
+
+		App.Events.drawEventArt(frag, slave);
+
+		App.UI.DOM.appendNewElement("h3", frag, `Chest:`);
+		frag.append(
+			boobDesc(),
+			boobImplants(),
+			nipples(),
+			areolae(),
+			lactation()
+		);
+
+		App.UI.DOM.appendNewElement("h3", frag, `Midrif:`);
+
+		frag.append(
+			fat(),
+			moreFat(),
+			belly(),
+			wombImplant(),
+			bellySag()
+		);
+
+		return frag;
+
+		function boobDesc() {
+			const el = new DocumentFragment();
+			const r = [];
+			r.push(`${His}`);
+			if (slave.boobs < 300) {
+				r.push(`${either("androgynous", "flat")} chest is barely there.`);
+			} else if (slave.boobs < 400) {
+				r.push(`${either("pointy", "tiny")}, ${slave.boobs}cc chest only fill A-cups.`);
+			} else if (slave.boobs < 8500) {
+				if (V.showBoobCCs === 1) {
+					r.push(App.Desc.boobBits.format("%ADJ %NOUN, %VOLUME CCs, would fill %ACUP.", slave.boobs));
+				} else {
+					r.push(App.Desc.boobBits.format("%ADJ %NOUN, would fill %ACUP.", slave.boobs));
+				}
+			} else {
+				r.push(App.Desc.boobBits.format("%ADJ %NOUN, %VOLUME CCs, ", slave.boobs));
+				r.push(`fill out an enormous custom bra; ${his} tits dominate ${his} entire frame.`);
+			}
+			App.Events.addNode(el, r, "div");
+			return el;
+		}
+
+		function boobImplants() {
+			const el = new DocumentFragment();
+			let r = [];
+			r.push(`${He} has`);
+			if (["fillable", "advanced fillable", "hyper fillable"].includes(slave.boobsImplantType)) {
+				if (slave.boobsImplantType === "hyper fillable") {
+					if (slave.boobsImplant < 20000) {
+						r.push(`underfilled,`);
+					} else {
+						r.push(`enormous,`);
+					}
+				} else if (slave.boobsImplantType === "advanced fillable") {
+					if (slave.boobsImplant <= 1000) {
+						r.push(`deflated,`);
+					} else if (slave.boobsImplant < 2200) {
+						r.push(`underfilled,`);
+					} else if (slave.boobsImplant > 10000) {
+						r.push(`massively overfilled,`);
+					} else {
+						r.push(`massive,`);
+					}
+				} else {
+					if (slave.boobsImplant <= 500) {
+						r.push(`deflated,`);
+					} else if (slave.boobsImplant < 800) {
+						r.push(`underfilled,`);
+					} else if (slave.boobsImplant > 1800) {
+						r.push(`massively overfilled,`);
+					} else if (slave.boobsImplant > 1000) {
+						r.push(`massive,`);
+					} else if (slave.boobsImplant >= 800) {
+						r.push(`giant,`);
+					}
+				}
+				r.push(`${slave.boobsImplant}cc ${slave.boobsImplantType} breast implants.`);
+			} else if (slave.boobsImplantType !== "none") {
+				if (slave.boobsImplant > 1000) {
+					r.push(`massive, ${slave.boobsImplant}cc`);
+				} else if (slave.boobsImplant > 800) {
+					r.push(`giant, ${slave.boobsImplant}cc`);
+				} else if (slave.boobsImplant > 600) {
+					r.push(`huge, ${slave.boobsImplant}cc`);
+				} else if (slave.boobsImplant > 400) {
+					r.push(`large, ${slave.boobsImplant}cc`);
+				} else if (slave.boobsImplant > 200) {
+					r.push(`moderate, ${slave.boobsImplant}cc`);
+				} else if (slave.boobsImplant > 0) {
+					r.push(`small, ${slave.boobsImplant}cc`);
+				}
+				if (slave.boobsImplantType !== "normal") {
+					r.push(`${slave.boobsImplantType}`);
+				}
+				r.push(`breast implants.`);
+				if (slave.boobsImplant > 8000 && slave.boobsImplantType === "string") {
+					r.push(`<span class="yellow">Large string based implants are a risk to a slave's health.</span>`);
+				}
+			} else {
+				r.push(`no implants.`);
+			}
+			App.Events.addNode(el, r, "div");
+			const _surgeries = App.Medicine.Surgery.sizingProcedures.boobs(slave, App.Medicine.Surgery.allSizingOptions());
+			const _surgeryLinks = _surgeries.map(s => App.Medicine.Surgery.makeLink("Surgery Degradation", s, slave));
+			App.UI.DOM.appendNewElement("div", el, (App.UI.DOM.generateLinksStrip(_surgeryLinks)), "choices");
+
+			r = [];
+			const linkArray = [];
+			if (slave.boobsImplant !== 0) {
+				r.push(`The shape of ${his} breasts is determined by ${his} implants.`);
+			} else {
+				if (slave.boobs <= 250) {
+					r.push(`${He}'s so flat-chested that ${his} breasts don't have much shape.`);
+				} else {
+					switch (slave.boobShape) {
+						case "perky":
+							r.push(`They're perky, with nipples that point slightly upwards.`);
+							break;
+						case "downward-facing":
+							r.push(`They're not attractively shaped; ${his} nipples pointing downward.`);
+							break;
+						case "torpedo-shaped":
+							r.push(`They're torpedo-shaped, projecting some way from ${his} chest.`);
+							break;
+						case "wide-set":
+							r.push(`They're wide-set, with nipples pointing away from ${his} sternum.`);
+							break;
+						case "saggy":
+							r.push(`They're not attractively shaped, with ${his} nipples pointing down.`);
+							break;
+						default:
+							r.push(`They're nicely rounded and rest naturally.`);
+					}
+					if (slave.indentureRestrictions >= 2) {
+						r.push(`<span class="note">${His} indenture does not allow breast restructuring</span>`);
+					} else if (slave.breastMesh === 1) {
+						r.push(`<span class="note">${His} supportive mesh implant prevents reconstruction</span>`);
+					} else {
+						if (slave.boobShape === "saggy" || slave.boobShape === "downward-facing") {
+							linkArray.push(makeLink(
+								"Breast lift",
+								"breastLift",
+								() => {
+									slave.boobShape = "normal";
+									surgeryDamage(slave, 20);
+								}
+							));
+							if (slave.preg > slave.pregData.normalBirth / 1.42 || (slave.boobs >= 5000 && slave.boobs < 8000)) {
+								r.push(` <span class="note">${His} current state may result in ${his} breasts becoming saggy again</span>`);
+							}
+						} else {
+							if (slave.boobShape === "normal") {
+								linkArray.push(makeLink(
+									"Reshape them to be perkier",
+									"breastReconstruction",
+									() => {
+										slave.boobShape = "perky";
+										surgeryDamage(slave, 10);
+									}
+								));
+								linkArray.push(makeLink(
+									"Make them torpedo-shaped",
+									"breastReconstruction",
+									() => {
+										slave.boobShape = "torpedo-shaped";
+										surgeryDamage(slave, 10);
+									}
+								));
+							} else {
+								linkArray.push(makeLink(
+									"Reshape them to be more normal",
+									"breastReconstruction",
+									() => {
+										slave.boobShape = "normal";
+										surgeryDamage(slave, 10);
+									}
+								));
+							}
+							if (slave.boobShape !== "saggy" && slave.boobShape !== "downward-facing" && slave.boobs >= 2000 && slave.boobsImplant === 0 && V.meshImplants === 1 && V.surgeryUpgrade === 1) {
+								linkArray.push(makeLink(
+									"Implant a supportive mesh to preserve their shape",
+									"breastShapePreservation",
+									() => {
+										slave.breastMesh = 1;
+										surgeryDamage(slave, 10);
+									},
+									slave.boobs / 100
+								));
+							}
+						}
+					}
+				}
+			}
+			App.Events.addNode(el, r, "div");
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function nipples() {
+			const el = new DocumentFragment();
+			if (V.surgeryUpgrade === 1) {
+				App.UI.DOM.appendNewElement("div", el, `${He} has ${slave.nipples} nipples.`);
+				if (slave.indentureRestrictions >= 2) {
+					App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
+				} else if (slave.indentureRestrictions === 1) {
+					App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids extreme body modification`, ["choices", "note"]);
+				} else { /* split for possible dicknips later on, should lcd wish to attempt it again. */
+					const linkArray = [];
+					if (slave.nipples === "fuckable") {
+						linkArray.push(makeLink(
+							"Restore their shape and function",
+							"areolae",
+							() => {
+								slave.nipples = "huge";
+								surgeryDamage(slave, 10);
+							}
+						));
+					} else {
+						if (slave.boobs - slave.boobsMilk < 500) {
+							App.UI.DOM.appendNewElement("div", el, `${His} breasts are too small to support reshaping ${his} nipples to be penetratable`, ["choices", "note"]);
+						} else if (slave.boobs - slave.boobsImplant - slave.boobsMilk < 500) {
+							App.UI.DOM.appendNewElement("div", el, `${His} implants are too large to support reshaping ${his} nipples to be penetratable`, ["choices", "note"]);
+						} else if (slave.nipples !== "huge") {
+							App.UI.DOM.appendNewElement("div", el, `${His} nipples are too small to be made fuckable`, ["choices", "note"]);
+						} else {
+							linkArray.push(makeLink(
+								"Reshape them to support being penetrated",
+								"nippleCunts",
+								() => {
+									slave.nipples = "fuckable";
+									slave.nipplesPiercing = 0;
+									surgeryDamage(slave, 20);
+								},
+								1,
+								(slave.nipplesPiercing > 0) ? `Will remove piercings` : ``
+							));
+						}
+					}
+					App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+				}
+			}
+			return el;
+		}
+
+		function areolae() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			if (slave.areolae === 0) {
+				r.push(`${His} areolae are small`);
+				if (slave.areolaeShape !== "circle") {
+					r.push(`and have been surgically altered to be ${slave.areolaeShape}-shaped.`);
+				} else {
+					r.push(`and fairly normal.`);
+				}
+			} else if (slave.areolae === 1) {
+				r.push(`${His} areolae are large`);
+				if (slave.areolaeShape !== "circle") {
+					r.push(`and have been surgically altered to be ${slave.areolaeShape}-shaped.`);
+				} else {
+					r.push(`but still fairly normal.`);
+				}
+			} else if (slave.areolae > 1) {
+				r.push(`${He} has`);
+				if (slave.areolae === 2) {
+					r.push(`wide`);
+				} else if (slave.areolae === 3) {
+					r.push(`huge`);
+				} else if (slave.areolae === 4) {
+					r.push(`massive`);
+				}
+				r.push(`areolae${(slave.areolaeShape !== "circle") ? `, which have been surgically altered to be ${slave.areolaeShape}-shaped` : ``}.`);
+			}
+			if (slave.indentureRestrictions < 2) {
+				if (slave.areolaeShape !== "circle") {
+					r.push(`${His} ${slave.areolaeShape}-shaped areolae can be normalized or reshaped:`);
+					linkArray.push(makeLink(
+						"Normal",
+						"areolae",
+						() => {
+							slave.areolaeShape = "circle";
+							surgeryDamage(slave, 10);
+						}
+					));
+					if (slave.areolaeShape !== "heart") {
+						linkArray.push(makeLink(
+							"Heart-shaped",
+							"areolae",
+							() => {
+								slave.areolaeShape = "heart";
+								surgeryDamage(slave, 10);
+							}
+						));
+					}
+					if (slave.areolaeShape !== "star") {
+						linkArray.push(makeLink(
+							"Star-shaped",
+							"areolae",
+							() => {
+								slave.areolaeShape = "star";
+								surgeryDamage(slave, 10);
+							}
+						));
+					}
+				} else {
+					if (slave.areolae > 0 && slave.areolaeShape === "circle") {
+						r.push(`They are big enough that they could be reshaped into a pattern. Graft skin to make ${his} areolae:`);
+					}
+					if (slave.areolae > 0 && slave.areolaeShape === "circle") {
+						linkArray.push(makeLink(
+							"Heart-shaped",
+							"areolae",
+							() => {
+								slave.areolae -= 1;
+								slave.areolaeShape = "heart";
+								surgeryDamage(slave, 10);
+							}
+						));
+						linkArray.push(makeLink(
+							"Star-shaped",
+							"areolae",
+							() => {
+								slave.areolae -= 1;
+								slave.areolaeShape = "star";
+								surgeryDamage(slave, 10);
+							}
+						));
+					}
+				}
+
+				if (slave.areolae > 0) {
+					linkArray.push(makeLink(
+						"Reduce areolae",
+						"areolae",
+						() => {
+							slave.areolae -= 1;
+							surgeryDamage(slave, 10);
+						}
+					));
+				}
+				if (slave.areolae < 4) {
+					linkArray.push(makeLink(
+						"Enlarge areolae",
+						"areolae",
+						() => {
+							slave.areolae += 1;
+							surgeryDamage(slave, 10);
+						}
+					));
+				}
+			}
+			App.Events.addNode(el, r, "div");
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function lactation() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			if (slave.lactation === 0) {
+				r.push(`${He} is not lactating.`);
+			} else if (slave.lactation === 2) {
+				r.push(`${He} is implanted with slow-release pro-lactation drugs.`);
+			} else {
+				r.push(`${He} is lactating naturally.`);
+			}
+			if (slave.lactation < 2) {
+				if (slave.indentureRestrictions < 2) {
+					linkArray.push(makeLink(
+						"Implant slow-release pro-lactation drugs",
+						"lactation",
+						() => {
+							slave.lactationDuration = 2;
+							slave.induceLactation = 0;
+							slave.boobs -= slave.boobsMilk;
+							slave.boobsMilk = 0;
+							slave.rules.lactation = "none";
+							surgeryDamage(slave, 10);
+						},
+						1,
+						`This may increase ${his} natural breast size`
+					));
+				}
+			}
+			if (slave.lactation > 1) {
+				linkArray.push(makeLink(
+					"Remove lactation implant",
+					"endlac",
+					() => {
+						slave.lactation = 0;
+						slave.lactationDuration = 0;
+						surgeryDamage(slave, 10);
+					}
+				));
+			}
+			App.Events.addNode(el, r, "div");
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function fat() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			if (slave.indentureRestrictions >= 2 && slave.weight > 30) {
+				App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
+			} else if (slave.weight > 30) {
+				if (slave.weight > 190) {
+					r.push(`${He} is extremely fat.`);
+					linkArray.push(makeLink(
+						"Major liposuction",
+						"liposuction",
+						() => {
+							slave.weight = 0;
+							surgeryDamage(slave, 40);
+						}
+					));
+				} else if (slave.weight > 130) {
+					r.push(`${He} is fat.`);
+					linkArray.push(makeLink(
+						"Heavy liposuction",
+						"liposuction",
+						() => {
+							slave.weight = 0;
+							surgeryDamage(slave, 20);
+						}
+					));
+				} else if (slave.weight > 30) {
+					r.push(`${He} is overweight.`);
+					linkArray.push(makeLink(
+						"Liposuction",
+						"liposuction",
+						() => {
+							slave.weight = 0;
+							surgeryDamage(slave, 10);
+						}
+					));
+				}
+				if (V.surgeryUpgrade === 1) {
+					linkArray.push(
+						App.UI.DOM.link(
+							"Fat grafting",
+							() => {
+								surgeryDamage(slave, 40);
+								cashX(forceNeg(V.surgeryCost * 2), "slaveSurgery", slave);
+								V.surgeryType = "fat graft";
+							},
+							[],
+							"Fat Grafting"
+						)
+					);
+				}
+			}
+			App.Events.addNode(el, r, "div");
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function moreFat() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			r.push(`${He} has`);
+			if (slave.waist > 95) {
+				r.push(`a masculine`);
+			} else if (slave.waist > 40) {
+				r.push(`an ugly`);
+			} else if (slave.waist > 10) {
+				r.push(`an unattractive`);
+			} else if (slave.waist >= -10) {
+				r.push(`an average`);
+			} else if (slave.waist >= -40) {
+				r.push(`a feminine`);
+			} else if (slave.waist >= -95) {
+				r.push(`an hourglass`);
+			} else {
+				r.push(`an absurd`);
+			}
+			r.push(`waist.`);
+			App.Events.addNode(el, r, "div");
+			if (slave.waist >= -75) {
+				if (slave.indentureRestrictions < 2) {
+					linkArray.push(makeLink(
+						"Liposuction",
+						"lipo",
+						() => {
+							slave.waist -= 20;
+							surgeryDamage(slave, 10);
+						}
+					));
+				}
+			}
+			if (slave.waist >= -95 && slave.waist < -75 && V.seeExtreme === 1) {
+				if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+					linkArray.push(makeLink(
+						`Remove ribs to severely narrow ${his} waist`,
+						"ribs",
+						() => {
+							slave.waist = -100;
+							surgeryDamage(slave, 40);
+						}
+					));
+				}
+			}
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function belly() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			r.push(`${He}'s`);
+			if (slave.pregKnown > 0) {
+				r.push(`pregnant.`);
+			} else if (slave.womb.length === 0 && slave.broodmother > 0) {
+				r.push(`got a dormant broodmother implant in ${his} womb.`);
+			} else if (slave.preg > 0) {
+				r.push(`showing unusual discomfort as ${his} stomach is inspected. A quick test reveals that <span class="lime">${he} is pregnant.</span>`);
+				slave.pregKnown = 1;
+			} else if (slave.bellyImplant > 0) {
+				r.push(`got a ${slave.bellyImplant}cc implant filled implant located in ${his} abdomen.`);
+				if (slave.cervixImplant === 1) {
+					r.push(`${He} also has micropump filter installed in ${his} cervix feeding into the implant.`);
+				} else if (slave.cervixImplant === 2) {
+					r.push(`${He} also has micropump filter installed in ${his} rectum feeding into the implant.`);
+				} else if (slave.cervixImplant === 3) {
+					r.push(`${He} also has micropump filter installed in both ${his} holes feeding into the implant.`);
+				}
+			} else if (slave.bellyFluid >= 1500) {
+				r.push(`got a ${slave.inflationType}-filled implant located in ${his} abdomen.`);
+				if (slave.cervixImplant === 1) {
+					r.push(`${He} also has micropump filter installed in ${his} cervix feeding into the implant.`);
+				} else if (slave.cervixImplant === 2) {
+					r.push(`${He} also has micropump filter installed in ${his} rectum feeding into the implant.`);
+				} else if (slave.cervixImplant === 3) {
+					r.push(`${He} also has micropump filter installed in both ${his} holes feeding into the implant.`);
+				}
+			} else if (slave.bellyImplant === 0) {
+				r.push(`got an empty fillable implant located in ${his} abdomen.`);
+				if (slave.cervixImplant === 1) {
+					r.push(`${He} also has micropump filter installed in ${his} cervix feeding into the implant.`);
+				} else if (slave.cervixImplant === 2) {
+					r.push(`${He} also has micropump filter installed in ${his} rectum feeding into the implant.`);
+				} else if (slave.cervixImplant === 3) {
+					r.push(`${He} also has micropump filter installed in both ${his} holes feeding into the implant.`);
+				}
+			} else {
+				r.push(`got a normal stomach.`);
+			}
+			App.Events.addNode(el, r, "div");
+			if (slave.indentureRestrictions >= 2) {
+				App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
+			} else if (slave.breedingMark === 1 && V.propOutcome === 1 && V.eugenicsFullControl !== 1 && V.arcologies[0].FSRestart !== "unset") {
+				App.UI.DOM.appendNewElement("div", el, `You are forbidden from affecting ${his} fertility`, ["choices", "note"]);
+			} else if (slave.preg > 0 || slave.inflation > 0 || slave.broodmother > 0) {
+				App.UI.DOM.appendNewElement("div", el, `${He} is unable to support an abdominal implant at this time`, ["choices", "note"]);
+			} else if (slave.bellyImplant >= 750000) {
+				App.UI.DOM.appendNewElement("div", el, `${His} abdominal implant is so far beyond its maximum limit it is at risk of rupturing`, ["choices", "note"]);
+			} else if (slave.bellyImplant >= 600000) {
+				App.UI.DOM.appendNewElement("div", el, `${His} abdominal implant is greatly beyond its maximum limit`, ["choices", "note"]);
+			} else if (slave.bellyImplant >= 450000) {
+				App.UI.DOM.appendNewElement("div", el, `${His} abdominal implant is over-filled`, ["choices", "note"]);
+			} else if (slave.bellyImplant >= 400000) {
+				App.UI.DOM.appendNewElement("div", el, `${His} abdominal implant is at its capacity`, ["choices", "note"]);
+			} else if (slave.bellyImplant > 130000 && V.arcologies[0].FSTransformationFetishistResearch !== 1) {
+				App.UI.DOM.appendNewElement("div", el, `${His} abdominal implant is at its capacity`, ["choices", "note"]);
+			} else if (slave.bellyImplant === -1 && V.bellyImplants === 1) {
+				if (slave.ovaries === 1 || slave.mpreg === 1) {
+					linkArray.push(makeLink(
+						`Implant fillable abdominal implant`,
+						"bellyIn",
+						() => {
+							slave.bellyImplant = 0;
+							slave.preg = -2;
+							slave.bellyPain += 1;
+							surgeryDamage(slave, 10);
+						}
+					));
+				} else {
+					linkArray.push(makeLink(
+						`Implant a fillable abdominal implant`,
+						"bellyInMale",
+						() => {
+							slave.bellyImplant = 0;
+							slave.bellyPain += 2;
+							surgeryDamage(slave, 50);
+						}
+					));
+				}
+			} else if (slave.bellyPain === 2) {
+				App.UI.DOM.appendNewElement("div", el, `${His} body cannot handle more filler this week`, ["choices", "note"]);
+			} else if (slave.bellyImplant > -1) {
+				linkArray.push(makeLink(
+					`Add inert filler`,
+					"bellyUp",
+					() => {
+						slave.bellyImplant += 200;
+						slave.bellyPain += 1;
+						surgeryDamage(slave, (slave.bellyPain) ? 30 : 10);
+					},
+					1,
+					(slave.bellyPain && slave.health.health < 0) ? "This may cause severe health issues" : ""
+				));
+				linkArray.push(makeLink(
+					`Add a considerable amount of inert filler`,
+					"bellyUp",
+					() => {
+						slave.bellyImplant += 500;
+						slave.bellyPain += 1;
+						surgeryDamage(slave, (slave.bellyPain) ? 40 : 20);
+					},
+					1,
+					(slave.bellyPain && slave.health.health < 0) ? "This may cause severe health issues" : ""
+				));
+			}
+			if (slave.bellyImplant > -1) {
+				linkArray.push(makeLink(
+					`Drain implant`,
+					"bellyDown",
+					() => {
+						slave.bellyImplant -= 200;
+						surgeryDamage(slave, 5);
+					}
+				));
+				if (slave.bellyImplant >= 500) {
+					linkArray.push(makeLink(
+						`Greatly drain implant`,
+						"bellyDown",
+						() => {
+							slave.bellyImplant -= 500;
+							surgeryDamage(slave, 5);
+						}
+					));
+				}
+				if (slave.indentureRestrictions < 2) {
+					linkArray.push(makeLink(
+						`Remove implant`,
+						"bellyOut",
+						() => {
+							slave.bellyImplant = -1;
+							slave.cervixImplant = 0;
+							surgeryDamage(slave, 10);
+						}
+					));
+					if (slave.cervixImplant !== 1 && slave.cervixImplant !== 3 && V.cervixImplants >= 1 && slave.vagina > -1) { /* slave should have vagina */
+						linkArray.push(makeLink(
+							`Install cervix micropump filter`,
+							"cervixPump",
+							() => {
+								slave.cervixImplant = (slave.cervixImplant === 0 ? 1 : 3);
+								surgeryDamage(slave, 10);
+							},
+							1,
+							`Will allow ${his} belly implant to slowly swell as people cum in ${his} vagina`
+						));
+					}
+					if (slave.cervixImplant !== 2 && slave.cervixImplant !== 3 && V.cervixImplants === 2) {
+						linkArray.push(makeLink(
+							`Install rectal micropump filter`,
+							"cervixPumpA",
+							() => {
+								slave.cervixImplant = (slave.cervixImplant === 0 ? 2 : 3);
+								surgeryDamage(slave, 20);
+							},
+							1,
+							`Will allow ${his} belly implant to slowly swell as people cum in ${his} anus`
+						));
+					}
+				}
+			}
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function wombImplant() {
+			const el = new DocumentFragment();
+			const linkArray = [];
+			if (slave.wombImplant === "none" && (V.UterineRestraintMesh === 1) && (slave.ovaries === 1 || slave.mpreg === 1)) {
+				App.UI.DOM.appendNewElement("div", el, `${He} has a normal uterus${(slave.mpreg === 1) ? `, though slightly repositioned` : ``}.`);
+				if (slave.indentureRestrictions >= 1) {
+					App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
+				} else if (slave.bellyImplant > 0 || slave.preg > 0) {
+					App.UI.DOM.appendNewElement("div", el, `${His} womb is currently in use and unsafe to operate on`, ["choices", "note"]);
+				} else {
+					if (V.surgeryUpgrade === 1) {
+						if (V.UterineRestraintMesh === 1) {
+							App.UI.DOM.appendNewElement("div", el, ``, ["choices", "note"]);
+							linkArray.push(makeLink(
+								`Install reinforcing organic mesh`,
+								"womb",
+								() => {
+									slave.wombImplant = "restraint";
+									surgeryDamage(slave, 25);
+								}
+							));
+						}
+					}
+				}
+			} else if (slave.wombImplant === "restraint") {
+				App.UI.DOM.appendNewElement("div", el, `${He} has a mesh reinforced uterus.`);
+				if (slave.indentureRestrictions >= 1) {
+					App.UI.DOM.appendNewElement("div", el, `${His} indenture forbids elective surgery`, ["choices", "note"]);
+				} else if (slave.bellyImplant > 0 || slave.preg > 0) {
+					App.UI.DOM.appendNewElement("div", el, `${His} womb is currently in use and unsafe to operate on`, ["choices", "note"]);
+				} else {
+					linkArray.push(makeLink(
+						`Remove organic mesh`,
+						"womb",
+						() => {
+							slave.wombImplant = "none";
+							surgeryDamage(slave, 50);
+						},
+						1,
+						(slave.health.health < 0) ? `This may cause severe health issues` : ""
+					));
+				}
+			}
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+
+		function bellySag() {
+			const el = new DocumentFragment();
+			const r = [];
+			const linkArray = [];
+			if (slave.bellySagPreg > 0) {
+				if (slave.belly >= 1500) {
+					r.push(`${He} has a sagging midriff, ruined from excessive pregnancy. It is currently filled out by ${his} swollen belly and cannot safely be worked on.`);
+				} else {
+					r.push(`${He} has a sagging midriff, ruined from excessive pregnancy.`);
+					linkArray.push(makeLink(
+						`Tummy tuck`,
+						"tummyTuck",
+						() => {
+							slave.bellySag = 0;
+							slave.bellySagPreg = 0;
+							surgeryDamage(slave, 20);
+						}
+					));
+				}
+			} else if (slave.bellySag > 0) {
+				if (slave.belly >= 1500) {
+					r.push(`${He} has a sagging midriff, ruined from excessive distention. It is currently filled out by ${his} swollen belly and cannot safely be worked on.`);
+				} else {
+					r.push(`${He} has a sagging midriff, ruined from excessive distention.`);
+					linkArray.push(makeLink(
+						`Tummy tuck`,
+						"tummyTuck",
+						() => {
+							slave.bellySag = 0;
+							slave.bellySagPreg = 0;
+							surgeryDamage(slave, 20);
+						}
+					));
+				}
+			}
+			App.Events.addNode(el, r, "div");
+			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray), "choices");
+			return el;
+		}
+	}
+
+	/**
+	 *
+	 * @param {string} title
+	 * @param {string} surgeryType
+	 * @param {function(void):void} [func]
+	 * @param {number} [costMult=1]
+	 * @param {string} [note=""]
+	 * @returns {HTMLAnchorElement}
+	 */
+	function makeLink(title, surgeryType, func, costMult = 1, note = "") {
+		const cost = Math.trunc(V.surgeryCost * costMult);
+		return App.UI.DOM.link(
+			title,
+			() => {
+				if (typeof func === "function") {
+					func();
+				}
+				if (cheat) {
+					jQuery(container).empty().append(content());
+				} else {
+					V.surgeryType = surgeryType;
+					// TODO: pass if it affected health or not?
+					cashX(forceNeg(cost), "slaveSurgery", slave);
+					Engine.play("Surgery Degradation");
+				}
+			},
+			[],
+			"",
+			`Costs ${cashFormat(cost)}.${(note) ? ` ${note}.` : ''}`
+		);
+	}
+};
diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js
index 9a5f6b93a9cb170ceca1a256be66e2387d333a18..e91faec3e419a4d722924907ea9b766d8b706985 100644
--- a/src/npc/descriptions/boobs/boobs.js
+++ b/src/npc/descriptions/boobs/boobs.js
@@ -434,23 +434,23 @@ App.Desc.boobs = function() {
 			case "a succubus outfit":
 				r += `${slave.slaveName}'s corset ends just below ${his} ${slave.boobs < 300 ? 'non-existent' : ''} breasts, leaving them bare.`;
 				if (slave.boobs > 2000) {
-					r += `It hugs ${his} tightly and comes up to right under where they start, forcing them to spill over and hide its upper half.`;
+					r += ` It hugs ${his} tightly and comes up to right under where they start, forcing them to spill over and hide its upper half.`;
 				} else if (slave.boobs > 400) {
-					r += `It hugs ${his} tightly and comes up to right under where they start, presenting them like a push-up bra.`;
+					r += ` It hugs ${his} tightly and comes up to right under where they start, presenting them like a push-up bra.`;
 				}
 				break;
 			case "a slutty maid outfit":
 				r += `${slave.slaveName}'s maid dress stops below ${his} ${slave.boobs < 300 ? 'non-existent' : ''} breasts, but the outfit includes a thin white blouse`;
 				if (slave.boobs > 4000) {
-					r += `that fails to even come close to covering ${his} ${adjNoun}.`;
+					r += ` that fails to even come close to covering ${his} ${adjNoun}.`;
 				} else if (slave.boobs > 2000) {
-					r += `that covers them to just over ${his} nipples when ${he} pulls it up over them. It's pulled down by ${his} ${adjNoun} whenever ${he} moves.`;
+					r += ` that covers them to just over ${his} nipples when ${he} pulls it up over them. It's pulled down by ${his} ${adjNoun} whenever ${he} moves.`;
 				} else if (slave.boobs > 800) {
-					r += `that covers them to just over ${his} nipples, leaving a large area of deliciously unsupported and jiggling cleavage.`;
+					r += ` that covers them to just over ${his} nipples, leaving a large area of deliciously unsupported and jiggling cleavage.`;
 				} else if (slave.boobs < 300) {
-					r += `that hugs ${his} flat chest and lets ${his} ${slave.nipples} nipples protrude through the fabric.`;
+					r += ` that hugs ${his} flat chest and lets ${his} ${slave.nipples} nipples protrude through the fabric.`;
 				} else {
-					r += 'to cover them.';
+					r += ' to cover them.';
 				}
 				break;
 			case "a nice maid outfit":
diff --git a/src/npc/interaction/fAnus.tw b/src/npc/interaction/fAnus.tw
index ba3e7e4a1f9cd6a004c4ddb13e22fcb55f8f3695..33ab80883491ed20b1957f7e5c7786a19d531b76 100644
--- a/src/npc/interaction/fAnus.tw
+++ b/src/npc/interaction/fAnus.tw
@@ -32,7 +32,7 @@ You call $him over so you can
 <</if>>
 
 <<if (getSlave($AS).heels == 1)>>
-	<<if shoeHeelCategory($activeSlave) > 0>>
+	<<if shoeHeelCategory(getSlave($AS)) > 0>>
 		As $he went past your desk, $his high heels and surgically altered legs enforced a gait that presented $his butt enticingly.
 	<<else>>
 		As $he crawls along on <<if hasAllLimbs(getSlave($AS))>>all fours<<else>>the ground<</if>>, $his anus is readily available.
diff --git a/src/npc/interaction/fLickPussy.tw b/src/npc/interaction/fLickPussy.tw
index 8dd16ab600106593ad985c6ff666b6de301cb148..457385893e5e2e188e9b1029242c889c18f9888b 100644
--- a/src/npc/interaction/fLickPussy.tw
+++ b/src/npc/interaction/fLickPussy.tw
@@ -21,7 +21,37 @@
 	You have <<= getSlave($AS).slaveName>> brought into your office and placed on your couch.
 <</if>>
 
-After $he is situated, you go over to $him<<if getSlave($AS).clothes != "no clothing">> and take off $his clothing, causing $him to <<if _devotion > 50>>give you a soft smile<<else>>give you an angry glare<</if>><</if>>. You suddenly grab $his hips and pull $his crotch to your face, causing $him to <<if canTalk(getSlave($AS))>>give a shriek of surprise<<else>>shudder in surprise<</if>>. Looking at $him directly in the eyes, you begin to run your tongue along $his labia, drawing a <<if canTalk(getSlave($AS))>>soft<<else>>silent<</if>> moan from $him. The combination of the pleasure and the intense look from <<if areRelated(getSlave($AS), $PC)>>$his <<=relativeTerm(getSlave($AS), $PC)>><<else>>the _womanP $he<<if _devotion > 95>> loves <<elseif _devotion > 50>>'s accepted as $his <<= getWrittenTitle(getSlave($AS))>><<else>> hates/*not sure what to use for "reluctant"*/<</if>><</if>> makes $him blush, but you don't let up.
+After $he is situated, you go over to $him<<if getSlave($AS).clothes != "no clothing">> and take off $his clothing, causing $him to <<if _devotion > 50>>give you a soft smile<<else>>give you an angry glare<</if>><</if>>. You suddenly grab $his hips and pull $his crotch to your face, causing $him to <<if canTalk(getSlave($AS))>>give a shriek of surprise<<else>>shudder in surprise<</if>> 
+
+<<if getSlave($AS).belly >= 30000>>
+	<<if getSlave($AS).bellyPreg > 1000>>
+		as you get familiar under $his huge life-swollen baby bump.
+	<<else>>
+		as you get familiar under $his hugely swollen belly.
+	<</if>>
+
+<<elseif getSlave($AS).belly >= 10000>>
+	<<if getSlave($AS).bellyPreg >= 8000>>
+		as you get under $his baby bump.
+	<<elseif getSlave($AS).bellyImplant >= 8000>>
+		as you get under the swollen orb that is $his stomach.
+	<<else>>
+		as you get under the bloated container of <<= getSlave($AS).inflationType>> that is $his middle.
+	<</if>>
+
+<<elseif getSlave($AS).belly >= 1000>>
+	<<if getSlave($AS).bellyPreg >= 1000>>
+		as you get not far below the life growing within $him.
+	<<elseif getSlave($AS).bellyImplant >= 1000>>
+		as you get not far below the curve of $his stomach.
+	<<else>>
+		as you get not far below the groaning container of <<= getSlave($AS).inflationType>> within $him.
+	<</if>>
+<<elseif getSlave($AS).weight > 95>>
+	as you get familiar with $his fat belly.
+<</if>>
+
+Looking at $him directly in the eyes, you begin to run your tongue along $his labia, drawing a <<if canTalk(getSlave($AS))>>soft<<else>>silent<</if>> moan from $him. The combination of the pleasure and the intense look from <<if areRelated(getSlave($AS), $PC)>>$his <<=relativeTerm(getSlave($AS), $PC)>><<else>>the _womanP $he<<if _devotion > 95>> loves <<elseif _devotion > 50>>'s accepted as $his <<= getWrittenTitle(getSlave($AS))>><<else>> hates/*not sure what to use for "reluctant"*/<</if>><</if>> makes $him blush, but you don't let up.
 <<if getSlave($AS).dick == 0>>
 	You give $his clit a few experimental tweaks, causing $his <<if canTalk(getSlave($AS))>>moans<<else>>squirming<</if>> to intensify<<if hasBothLegs(getSlave($AS))>> and $his legs to tighten around your head<</if>>.
 <</if>>
diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js
index 4777bc268a2e2e0c4e56966a2663940ffbacd767..6c7ab79e59fa35ed9de98f477bf12fd3a6816431 100644
--- a/src/npc/surgery/surgery.js
+++ b/src/npc/surgery/surgery.js
@@ -90,11 +90,11 @@ App.Medicine.Surgery.commit = function(surgery, slave, cheat = false) {
  * @param {FC.Medicine.Surgery.Procedure} surgery
  * @param {App.Entity.SlaveState} slave
  * @param {boolean} [cheat]
- * @returns {string}
+ * @returns {HTMLElement}
  */
 App.Medicine.Surgery.makeLink = function(passage, surgery, slave, cheat = false) {
 	if (surgery.action === undefined) {
-		return App.UI.disabledLink(surgery.label, [surgery.description]);
+		return App.UI.DOM.disabledLink(surgery.label, [surgery.description]);
 	}
 
 	function healthCosts() {
@@ -111,7 +111,7 @@ App.Medicine.Surgery.makeLink = function(passage, surgery, slave, cheat = false)
 		return 'insignificant';
 	}
 
-	return App.UI.link(surgery.label, App.Medicine.Surgery.commit, [surgery, slave], passage,
+	return App.UI.DOM.link(surgery.label, App.Medicine.Surgery.commit, [surgery, slave], passage,
 		`${capFirstChar(surgery.description)}.${cheat ? `` : `\nSurgery costs: ${cashFormat(surgery.costs)}.\nProjected health damage: ${healthCosts()}.`}`);
 };
 
diff --git a/src/npc/surgery/surgeryDegradation.js b/src/npc/surgery/surgeryDegradation.js
index 55b5340b919123b22d515153570d8446999511b1..f35ee75ca22c58ee78e8db2e8bb2dd32668a6aa6 100644
--- a/src/npc/surgery/surgeryDegradation.js
+++ b/src/npc/surgery/surgeryDegradation.js
@@ -2106,7 +2106,6 @@ App.UI.SlaveInteract.surgeryDegradation = function(slave) {
 					r.push(`Due to the large amount of fat removed from ${his} midsection, it droops noticeably after the surgery.`);
 					slave.bellySag = 5;
 				}
-				slave.weight = 0;
 				break;
 			case "fat graft":
 				slave.boobs += (boobFat * 100);
diff --git a/src/pregmod/analyzePlayerPregnancy.tw b/src/pregmod/analyzePlayerPregnancy.tw
index b1bdeb95bbe012893fa6e427d9f707b426e0a6db..ccc64318142b41f749cab12c136a35fcbf0cfac0 100644
--- a/src/pregmod/analyzePlayerPregnancy.tw
+++ b/src/pregmod/analyzePlayerPregnancy.tw
@@ -145,124 +145,7 @@
 							Markings: $PC.womb[_ap].genetics.markings
 						</div>
 					<</if>>
-					<div class="indent">
-						Detected abnormalities:
-						<<if $PC.womb[_ap].genetics.geneticQuirks.albinism == 2>>
-							@@.green;alb@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.albinism == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;alb@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.gigantism == 2>>
-							@@.red;gnt@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.gigantism == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;gnt@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.dwarfism == 2>>
-							@@.red;dwrf@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.dwarfism == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;dwrf@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.neoteny >= 2>>
-							@@.red;ntny@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.neoteny == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;ntny@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.progeria >= 2>>
-							@@.red;progeria@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.progeria == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;progeria@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.heterochromia == 2>>
-							@@.green;hetchrom@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.heterochromia == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;hetchrom@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.androgyny == 2>>
-							@@.red;andr@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.androgyny == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;andr@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.pFace == 2>>
-							@@.green;pfce@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.pFace == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;pfce@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.uFace == 2>>
-							@@.red;ufce@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.uFace == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;ufce@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.fertility == 2>>
-							@@.green;fert@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.fertility == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;fert@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.hyperFertility == 2>>
-							@@.green;hfert@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.hyperFertility == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;hfert@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.superfetation == 2>>
-							@@.green;supfet@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.superfetation == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;supfet@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.polyhydramnios == 2>>
-							@@.red;polyhyd@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.polyhydramnios == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;polyhyd@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.uterineHypersensitivity == 2>>
-							@@.green;uthyp@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.uterineHypersensitivity == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;uthyp@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.macromastia >= 2>>
-							@@.red;mmast@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.macromastia == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;mast@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.gigantomastia >= 2>>
-							@@.red;gmast@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.gigantomastia == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;gmast@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.galactorrhea >= 2>>
-							@@.red;rlact@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.galactorrhea == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;rlact@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.wellHung == 2>>
-							@@.green;bigd@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.wellHung == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;bigd@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.rearLipedema == 2>>
-							@@.red;lipe@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.rearLipedema == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;lipe@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.wGain == 2>>
-							@@.red;lepti+@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.wGain == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;lepti+@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.wLoss == 2>>
-							@@.red;lepti-@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.wLoss == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;lepti-@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.mGain == 2>>
-							@@.red;myot+@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.mGain == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;myot+@@
-						<</if>>
-						<<if $PC.womb[_ap].genetics.geneticQuirks.mLoss == 2>>
-							@@.red;myot-@@
-						<<elseif $PC.womb[_ap].genetics.geneticQuirks.mLoss == 1 && $geneticMappingUpgrade >= 2>>
-							@@.yellow;myot-@@
-						<</if>>
-					</div>
+					<<includeDOM fetusAbnormalities($PC.womb[_ap])>>
 				<<else>>
 					<<if $PC.womb[_ap].age > 13>>
 						<div class="indent">
diff --git a/src/pregmod/analyzePregnancy.tw b/src/pregmod/analyzePregnancy.tw
index b7cc87210cf6ea8a0cfbcec420c80d1fdc12d916..18da93ad6211aba4c58b52bca813c57460fc0051 100644
--- a/src/pregmod/analyzePregnancy.tw
+++ b/src/pregmod/analyzePregnancy.tw
@@ -180,124 +180,7 @@
 									Markings: <<= capFirstChar(getSlave($AS).womb[_ap].genetics.markings)>>
 								</div>
 							<</if>>
-							<div class="indent">
-								Detected abnormalities:
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.albinism == 2>>
-									@@.green;alb@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.albinism == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;alb@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.gigantism == 2>>
-									@@.red;gnt@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.gigantism == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;gnt@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.dwarfism == 2>>
-									@@.red;dwrf@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.dwarfism == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;dwrf@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.neoteny >= 2>>
-									@@.red;ntny@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.neoteny == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;ntny@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.progeria >= 2>>
-									@@.red;progeria@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.progeria == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;progeria@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.heterochromia == 2>>
-									@@.green;hetchrom@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.heterochromia == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;hetchrom@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.androgyny == 2>>
-									@@.red;andr@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.androgyny == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;andr@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.pFace == 2>>
-									@@.green;pfce@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.pFace == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;pfce@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.uFace == 2>>
-									@@.red;ufce@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.uFace == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;ufce@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.fertility == 2>>
-									@@.green;fert@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.fertility == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;fert@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.hyperFertility == 2>>
-									@@.green;hfert@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.hyperFertility == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;hfert@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.superfetation == 2>>
-									@@.green;supfet@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.superfetation == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;supfet@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.polyhydramnios == 2>>
-									@@.red;polyhyd@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.polyhydramnios == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;polyhyd@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.uterineHypersensitivity == 2>>
-									@@.green;uthyp@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.uterineHypersensitivity == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;uthyp@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.macromastia >= 2>>
-									@@.red;mmast@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.macromastia == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;mast@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.gigantomastia >= 2>>
-									@@.red;gmast@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.gigantomastia == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;gmast@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.galactorrhea >= 2>>
-									@@.red;rlact@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.galactorrhea == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;rlact@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.wellHung == 2>>
-									@@.green;bigd@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.wellHung == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;bigd@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.rearLipedema == 2>>
-									@@.red;lipe@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.rearLipedema == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;lipe@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.wGain == 2>>
-									@@.red;lepti+@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.wGain == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;lepti+@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.wLoss == 2>>
-									@@.red;lepti-@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.wLoss == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;lepti-@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.mGain == 2>>
-									@@.red;myot+@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.mGain == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;myot+@@
-								<</if>>
-								<<if getSlave($AS).womb[_ap].genetics.geneticQuirks.mLoss == 2>>
-									@@.red;myot-@@
-								<<elseif getSlave($AS).womb[_ap].genetics.geneticQuirks.mLoss == 1 && $geneticMappingUpgrade >= 2>>
-									@@.yellow;myot-@@
-								<</if>>
-							</div>
+							<<includeDOM fetusAbnormalities(getSlave($AS).womb[_ap])>>
 						<<else>>
 							<<if getSlave($AS).womb[_ap].age > 13>>
 								<div class="indent">
diff --git a/src/uncategorized/multiImplant.tw b/src/uncategorized/multiImplant.tw
index 1f09cfea1f951e387c5d6e0ffeb0c686f17d86f9..edf763e58a6842ec8f3d79c8ee84cdacb8dd70f0 100644
--- a/src/uncategorized/multiImplant.tw
+++ b/src/uncategorized/multiImplant.tw
@@ -46,7 +46,7 @@ that are ready be sent down.
 				<<break>>
 			<<else>>
 				<<run App.Medicine.OrganFarm.implant(getSlave($AS), _sortedOrgans[_k], _l)>>
-				<<include "Surgery Degradation">><br><br>
+				<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>><br><br>
 				<<set _success = true>>
 			<</if>>
 		<</for>>
@@ -93,21 +93,21 @@ that are ready be sent down.
 				<<if getBestVision(getSlave($AS)) === 0>>
 					<<run eyeSurgery(getSlave($AS), "both", "cybernetic"), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS))>>
 					<<set surgeryDamage(getSlave($AS), 20), $surgeryType = "ocular implant">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<<else>>
 					//Since $he has working eyes the <<= setup.prosthetics.ocular.name>> will be put into storage.//
 				<</if>>
 			<<case "cochlear">>
 				<<if getSlave($AS).hears != 0>>
 					<<set getSlave($AS).earImplant = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 20), $surgeryType = "cochlear implant">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<<else>>
 					//Since $he has working ears the <<= setup.prosthetics.cochlear.name>> will be put into storage.//
 				<</if>>
 			<<case "electrolarynx">>
 				<<if getSlave($AS).voice <= 0>>
 					<<set getSlave($AS).electrolarynx = 1, getSlave($AS).voice = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 20), $surgeryType = "electrolarynx">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<<else>>
 					//Since $he has a voice the <<= setup.prosthetics.electrolarynx.name>> will be put into storage.//
 				<</if>>
@@ -118,17 +118,17 @@ that are ready be sent down.
 					//Since $he already has <<= addA(setup.prosthetics.interfaceP2.name)>> installed the <<= setup.prosthetics.interfaceP1.name>> will be put into storage.//
 				<<else>>
 					<<set getSlave($AS).PLimb = 1, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 20), $surgeryType = "PLimb interface1">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<</if>>
 			<<case "interfaceP2">>
 				<<if hasAllNaturalLimbs(getSlave($AS))>>
 					//Since $he has no amputated limbs the <<= setup.prosthetics.interfaceP2.name>> will be put into storage.//
 				<<elseif getSlave($AS).PLimb == 1>>
 					<<set getSlave($AS).PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 5), $surgeryType = "PLimb interface3">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<<else>>
 					<<set getSlave($AS).PLimb = 2, cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 20), $surgeryType = "PLimb interface2">>
-					<<include "Surgery Degradation">>
+					<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 				<</if>>
 			<<case "basicL" "sexL" "beautyL" "combatL" "cyberneticL">>
 				<<if getSlave($AS).fuckdoll != 0>>
@@ -179,7 +179,7 @@ that are ready be sent down.
 				<</if>>
 			<<case "interfaceTail">>
 				<<set getSlave($AS).PTail = 1, getSlave($AS).tail = "none", getSlave($AS).tailColor = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), surgeryDamage(getSlave($AS), 10), $surgeryType = "tailInterface">>
-				<<include "Surgery Degradation">>
+				<<includeDOM App.UI.SlaveInteract.surgeryDegradation(getSlave($AS))>>
 			<<case "modT" "sexT" "combatT">>
 				<<if getSlave($AS).PTail == 0>>
 					//Since $he must have <<= addA(setup.prosthetics.interfaceTail.name)>> installed to attach tails the <<= setup.prosthetics[_p.id].name>> will be put into storage.//