diff --git a/devNotes/Useful JS Function Documentation.txt b/devNotes/Useful JS Function Documentation.txt
index 1eb994b029d85db4ce1135360f8ec81807f04d74..83245d0f8bdf8fcbb8e3017acb0be28aad342c53 100644
--- a/devNotes/Useful JS Function Documentation.txt	
+++ b/devNotes/Useful JS Function Documentation.txt	
@@ -16,6 +16,8 @@ isNotPreg(slave) - Returns if slave has no sizable belly.
 
 isPure(slave) - Returns if slave has not been surgically enhanced (to a noticeable degree).
 
+isSurgicallyImproved(slave) - Returns if slave has been surgically enhanced with boob, butt and lip implants and also has a small waist.
+
 PiercingScore(slave) - Returns int representing degree of piercings. Higher means more piercings.
 
 TatScore(slave) - Returns int representing degree of tattooing. Higher means more tattoos.
diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js
index 31dbb0aacf9ba65261884d1a051cbcd55a2f4e44..10d8ac335a98aa6581966e0f365d55697d8fe5c7 100644
--- a/src/endWeek/saServeThePublic.js
+++ b/src/endWeek/saServeThePublic.js
@@ -5,11 +5,6 @@ window.saServeThePublic = (function saServeThePublic() {
 	let r;
 	let arcology;
 
-	// if the following are set outside this file, they must be set in it too!
-	let beauty;
-	let FuckResult;
-
-	let beautyMultiplier;
 	let cervixPump;
 	let pronouns;
 	let he, him, his, hers, himself, girl, loli, He, His;
@@ -35,12 +30,10 @@ window.saServeThePublic = (function saServeThePublic() {
 		girl === "girl" ? loli = "loli" : loli = "shota";
 
 		gatherStatistics(slave);
-		beauty = Beauty(slave); // This needs to be set before applyFSDecoration()
 		if (slave.assignment === "serve in the club") {
-			// By being at the end, every slave after the first will get a bonus. By moving it up, the first can enjoy it too. updateNonSlaveVariables() checks Edo Rivalist, so here we are.
-			applyFSDecoration();
+			// By being at the end, every slave after the first will get a bonus. By moving it up, the first can enjoy it too. slaveJobValues() checks Edo Rivalist, so here we are.
+			applyFSDecoration(slave);
 		}
-		updateNonSlaveVariables(slave);
 		addRep(slave);
 		sexCounts(slave);
 		jobPreface(slave);
@@ -71,160 +64,9 @@ window.saServeThePublic = (function saServeThePublic() {
 		/* Statistics gathering */
 		const facility = slave.assignment === Job.CLUB ? V.facility.club : undefined;
 		T.incomeStats = getSlaveStatisticData(slave, facility);
+		T.incomeStats.customers = slave.sexAmount;
 	}
-
-	// I suspect this one will mostly be cut out in the overhauling
-	/** @param {App.Entity.SlaveState} slave */
-	function updateNonSlaveVariables(slave) {
-		if (slave.assignment === "serve in the club" || slave.assignment === "serve the public") {
-			V.publicServants += 1;
-		}
-
-		// FResult setting
-		FuckResult = FResult(slave);
-		//slave needs release
-		if ((slave.releaseRules === "restrictive" || slave.releaseRules === "chastity") && slave.standardReward !== "orgasm" && slave.energy >= 20) {
-			FuckResult += 2;
-		}
-		if (V.ACitizens > (V.ASlaves * 4)) {
-			FuckResult = Math.trunc(FuckResult * 1.1);
-		} else if (V.ACitizens > (V.ASlaves * 2)) {
-			FuckResult = Math.trunc(FuckResult * 1);
-		} else if (V.ACitizens > V.ASlaves) {
-			FuckResult = Math.trunc(FuckResult * 0.95);
-		} else if (V.ACitizens > (V.ASlaves * 0.5)) {
-			FuckResult = Math.trunc(FuckResult * 0.9);
-		} else {
-			FuckResult = Math.trunc(FuckResult * 0.85);
-		}
-		if (canDoVaginal(slave) && slave.vagina === 0) {
-			FuckResult += 5;
-		}
-		if (canDoAnal(slave) && slave.anus === 0) {
-			FuckResult += 10;
-		}
-
-		// Beauty setting
-		if (V.ACitizens > (V.ASlaves * 4)) {
-			beauty = Math.trunc(beauty * 1.1);
-		} else if (V.ACitizens > (V.ASlaves * 2)) {
-			beauty = Math.trunc(beauty * 1);
-		} else if (V.ACitizens > V.ASlaves) {
-			beauty = Math.trunc(beauty * 0.95);
-		} else if (V.ACitizens > (V.ASlaves * 0.5)) {
-			beauty = Math.trunc(beauty * 0.9);
-		} else {
-			beauty = Math.trunc(beauty * 0.85);
-		}
-		if (slave.sexualFlaw === "attention whore") {
-			beauty = Math.trunc(beauty * 1.1);
-		}
-		if (slave.assignment === "be the DJ") {
-			if (V.clubSlaves + V.slavesGettingHelp > 0) {
-				beauty = Math.trunc(beauty * ((10 - V.clubSlaves - V.slavesGettingHelp) / 10));
-			}
-		}
-		if (slave.minorInjury !== 0) {
-			beauty -= 1;
-		}
-
-		// Beauty multipliers
-		if (arcology.FSEdoRevivalist === "unset") {
-			beautyMultiplier = 1;
-		} else {
-			beautyMultiplier = (1 + (arcology.FSEdoRevivalist / (V.FSLockinLevel * 3)));
-		}
-		if (V.club > 0) {
-			if ((V.universalRulesFacilityWork === 1 && slave.assignment === "serve the public" && V.clubSpots > 0) || (slave.assignment === "serve in the club")) {
-				if (slave.assignment === "serve the public") {
-					V.clubSpots -= 1;
-				}
-				// ads
-				if (V.clubAdsSpending !== 0) {
-					if (V.clubAdsStacked === 1) {
-						if (slave.butt > 4 && slave.boobs > 800) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsStacked === -1) {
-						if (slave.boobs < 500 && slave.butt < 3 && slave.weight <= 10 && slave.muscles <= 30) {
-							beautyMultiplier += 0.05;
-						}
-					}
-					if (V.clubAdsPreg === 1) {
-						if (slave.bellyPreg >= 5000 || slave.bellyImplant >= 5000) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsPreg === -1) {
-						if (slave.belly < 100 && slave.weight < 30 && !setup.fakeBellies.includes(slave.bellyAccessory) && slave.bellyImplant <= 0) {
-							beautyMultiplier += 0.05;
-						}
-					}
-					if (V.clubAdsModded === 1) {
-						if ((V.modScore > 15) || (V.piercingScore > 8 && V.tatScore > 5)) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsModded === -1) {
-						if (slave.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
-							beautyMultiplier += 0.05;
-						}
-					}
-					if (V.clubAdsImplanted === 1) {
-						if (slave.boobsImplant > 0 && slave.buttImplant > 0 && slave.waist < -10 && slave.lipsImplant > 0) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsImplanted === -1) {
-						if (slave.boobsImplant === 0 && slave.buttImplant === 0 && slave.waist >= -95 && slave.lipsImplant === 0 && slave.bellyImplant === -1 && slave.faceImplant < 30) {
-							beautyMultiplier += 0.05;
-						}
-					}
-					if (V.clubAdsOld === 1) {
-						if (slave.physicalAge >= 30) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsOld === -1) {
-						if (slave.physical < 30 && slave.physical >= 18) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsOld === -2) {
-						if (slave.physical <= 18 && slave.physical >= 13) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsOld === -3) {
-						if (slave.physical < 13) {
-							beautyMultiplier += 0.05;
-						}
-					}
-					if (V.clubAdsXX === 1) {
-						if (slave.dick === 0 && slave.scrotum === 0) {
-							beautyMultiplier += 0.05;
-						}
-					} else if (V.clubAdsXX === -1) {
-						if (slave.dick > 0) {
-							beautyMultiplier += 0.05;
-						}
-					}
-				}
-				if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) {
-					beautyMultiplier -= 0.15;
-				}
-				if (V.DJ !== 0) {
-					if (V.DJRepBonus > 0) {
-						beautyMultiplier += V.DJRepBonus;
-					}
-				}
-			}
-		}
-		beauty = Math.trunc(beauty * beautyMultiplier);
-		if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") ||(slave.hears === -2)) {
-			if (!canHear(slave)) {
-				beauty *= .5;
-			} else {
-				beauty *= .75;
-			}
-		}
-		T.incomeStats.customers = beauty;
-	}
-
+	
 	/** @param {App.Entity.SlaveState} slave */
 	function jobPreface(slave) {
 		if (slave.devotion > 95 || slave.energy > 95) {
@@ -358,8 +200,8 @@ window.saServeThePublic = (function saServeThePublic() {
 
 	/** @param {App.Entity.SlaveState} slave */
 	function usageCountDescripions(slave) {
-		r += ` ${His} appearance attracted ${beauty} members of the public (${Math.trunc(beauty / 7)} a day)`;
-		if (beauty > 160) {
+		r += ` ${His} appearance attracted ${slave.sexAmount} members of the public (${Math.trunc(slave.sexAmount / 7)} a day)`;
+		if (slave.sexAmount > 160) {
 			r += `, so many that `;
 			if (canDoVaginal(slave) && canDoAnal(slave)) {
 				r += `each of ${his} holes was`;
@@ -369,9 +211,9 @@ window.saServeThePublic = (function saServeThePublic() {
 				r += `${his} mouth and anywhere else a dick could fit was`;
 			}
 			r += ` often filled by more than one cock`;
-		} else if (beauty > 140) {
+		} else if (slave.sexAmount > 140) {
 			r += `, so many that ${he} spent much of ${his} time getting gangbanged`;
-		} else if (beauty > 120) {
+		} else if (slave.sexAmount > 120) {
 			r += `, so many that citizens often `;
 			if (canDoAnal(slave) || canDoVaginal(slave)) {
 				r += `spitroasted`;
@@ -379,17 +221,17 @@ window.saServeThePublic = (function saServeThePublic() {
 				r += `double-teamed`;
 			}
 			r += ` the slut`;
-		} else if (beauty > 100) {
+		} else if (slave.sexAmount > 100) {
 			r += `, so many that ${he} frequently had sex with multiple citizens at once`;
-		} else if (beauty > 70) {
+		} else if (slave.sexAmount > 70) {
 			r += `, so many that ${he} occasionally had sex with multiple citizens at once`;
 		}
 		r += `. Most of them `;
-		if (FuckResult > 15) {
+		if (slave.sexQuality > 15) {
 			r += `were putty in ${his} hands.`;
-		} else if (FuckResult > 10) {
+		} else if (slave.sexQuality > 10) {
 			r += `greatly enjoyed ${his} services.`;
-		} else if (FuckResult > 5) {
+		} else if (slave.sexQuality > 5) {
 			r += `enjoyed ${his} body.`;
 		} else {
 			r += `liked using ${him}.`;
@@ -536,7 +378,7 @@ window.saServeThePublic = (function saServeThePublic() {
 					slave.vagina = 1;
 				}
 			} else if (slave.vagina < 3) {
-				if (jsRandom(1, 100) > ((170 - beauty) + (slave.vagina * 10) + (slave.skill.vaginal / 3))) {
+				if (jsRandom(1, 100) > ((170 - slave.sexAmount) + (slave.vagina * 10) + (slave.skill.vaginal / 3))) {
 					r += ` <span class="lime">${His} pussy gets loosened by the intense use.</span>`;
 					slave.vagina += 1;
 				}
@@ -561,17 +403,17 @@ window.saServeThePublic = (function saServeThePublic() {
 				}
 			} else if (slave.anus < 3) {
 				if (slave.vagina < 0) {
-					if (jsRandom(1, 100) > ((150 - beauty) + (slave.anus * 10) + (slave.skill.anal / 6))) {
+					if (jsRandom(1, 100) > ((150 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
 						r += ` <span class="lime">${His} asshole sees constant use in place of a pussy and loosens.</span>`;
 						slave.anus += 1;
 					}
 				} else if (!canDoVaginal(slave)) {
-					if (jsRandom(1, 100) > ((150 - beauty) + (slave.anus * 10) + (slave.skill.anal / 6))) {
+					if (jsRandom(1, 100) > ((150 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
 						r += ` <span class="lime">${His} asshole sees constant use in place of ${his} protected pussy and loosens.</span>`;
 						slave.anus += 1;
 					}
 				} else {
-					if (jsRandom(1, 100) > ((160 - beauty) + (slave.anus * 10) + (slave.skill.anal / 6))) {
+					if (jsRandom(1, 100) > ((160 - slave.sexAmount) + (slave.anus * 10) + (slave.skill.anal / 6))) {
 						r += ` <span class="lime">${His} asshole loosens with constant use.</span>`;
 						slave.anus += 1;
 					}
@@ -641,8 +483,8 @@ window.saServeThePublic = (function saServeThePublic() {
 						r += `popular`;
 					}
 					r += ` pussy,`;
-				} else if (beauty > 70 && jsRandom(1, 3) === 1) {
-					r += `getting gangbanged,`;
+				} else if (slave.sexAmount > 70 && jsRandom(1, 3) === 1) {
+					r += `getting gangbanged,`
 				} else if (jsRandom(1, 2) === 1) {
 					r += `giving away one of ${his} `;
 					if (slave.prestige > 1 || slave.pornPrestige > 2) {
@@ -1123,22 +965,22 @@ window.saServeThePublic = (function saServeThePublic() {
 		if (slave.attrKnown === 1) {
 			if (slave.energy > 95) {
 				r += ` As a nymphomaniac ${he} gets sexual release from every sex act and is a crowd favorite.`;
-				slave.need -= beauty;
+				slave.need -= slave.sexAmount;
 			} else if (slave.energy > 80) {
 				r += ` With ${his} powerful sex drive ${he} rarely has to fake an orgasm.`;
-				slave.need -= (beauty * .9);
+				slave.need -= (slave.sexAmount * .9);
 			} else if (slave.aphrodisiacs > 0 || slave.inflationType === "aphrodisiac") {
 				r += ` With ${his} aphrodisiac boosted libido, it's barely possible to discern ${him} from a natural nymphomaniac.`;
-				slave.need -= (beauty * .9);
+				slave.need -= (slave.sexAmount * .9);
 			} else if (slave.energy > 60) {
 				r += ` With ${his} good sex drive ${he} often orgasms with citizens.`;
-				slave.need -= (beauty * .8);
+				slave.need -= (slave.sexAmount * .8);
 			} else if (slave.energy > 40) {
 				r += ` With ${his} average sex drive ${he} occasionally orgasms with citizens.`;
-				slave.need -= (beauty * .5);
+				slave.need -= (slave.sexAmount * .5);
 			} else if (slave.energy > 20) {
 				r += ` With ${his} poor sex drive ${he} almost never orgasms with citizens.`;
-				slave.need -= (beauty * .1);
+				slave.need -= (slave.sexAmount * .1);
 			} else {
 				r += ` Since ${he}'s frigid, ${he} rarely experiences authentic arousal with citizens.`;
 			}
@@ -1351,19 +1193,20 @@ window.saServeThePublic = (function saServeThePublic() {
 	function addRep(slave) {
 		if (slave.assignment !== "recruit girls") {
 			if (slave.assignment === "serve in the club") {
-				repX(Math.trunc((beauty * FuckResult) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServantClub", slave);
+				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServantClub", slave);
 			} else if (slave.assignment === "serve the public") {
-				repX(Math.trunc((beauty * FuckResult) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServant", slave);
+				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "publicServant", slave);
 			} else {
-				repX(Math.trunc((beauty * FuckResult) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "serving the public in an unregistered building", slave);
+				repX(Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15), "serving the public in an unregistered building", slave);
 			}
 		}
-		T.incomeStats.income += Math.trunc((beauty * FuckResult) * (1 + (0.003 * slave.skill.entertainment)) * 0.15);
+		T.incomeStats.income += Math.trunc((slave.sexAmount * slave.sexQuality) * (1 + (0.003 * slave.skill.entertainment)) * 0.15);
 	}
-
-	function applyFSDecoration() {
+	
+	/** @param {App.Entity.SlaveState} slave */
+	function applyFSDecoration(slave) {
 		/* FACILITY DECORATION IMPACTS */
-		const fsBeauty = (0.0005 * V.FSSingleSlaveRep * beauty);
+		const fsBeauty = (0.0005 * V.FSSingleSlaveRep * slave.sexAmount);
 		switch (V.clubDecoration) {
 			case "Roman Revivalist":
 				arcology.FSRomanRevivalist += fsBeauty;
@@ -1488,11 +1331,11 @@ window.saServeThePublic = (function saServeThePublic() {
 		}
 
 		const demand = (oralUse + analUse + vaginalUse + mammaryUse + penetrativeUse);
-		oralUse = Math.trunc((oralUse / demand) * beauty);
-		analUse = Math.trunc((analUse / demand) * beauty);
-		vaginalUse = Math.trunc((vaginalUse / demand) * beauty);
-		mammaryUse = Math.trunc((mammaryUse / demand) * beauty);
-		penetrativeUse = Math.trunc((penetrativeUse / demand) * beauty);
+		oralUse = Math.trunc((oralUse / demand) * slave.sexAmount);
+		analUse = Math.trunc((analUse / demand) * slave.sexAmount);
+		vaginalUse = Math.trunc((vaginalUse / demand) * slave.sexAmount);
+		mammaryUse = Math.trunc((mammaryUse / demand) * slave.sexAmount);
+		penetrativeUse = Math.trunc((penetrativeUse / demand) * slave.sexAmount);
 
 		slave.oralCount += oralUse;
 		slave.publicCount += oralUse;
@@ -1577,7 +1420,7 @@ window.saServeThePublic = (function saServeThePublic() {
 						break;
 					case "humiliation":
 						r += ` ${He} enjoys the humiliation of being a public slut, and got a bit of sexual satisfaction from every sex act ${he} performed this week.`;
-						slave.need -= beauty;
+						slave.need -= slave.sexAmount;
 				}
 			}
 		}
@@ -1608,14 +1451,14 @@ window.saServeThePublic = (function saServeThePublic() {
 			r += ` __This week__ ${vignette.text} `;
 			if (vignette.type === "cash") {
 				if (vignette.effect > 0) {
-					r += `<span class="yellowgreen">making you an extra ${cashFormat(Math.trunc(FuckResult * vignette.effect))}.</span>`;
+					r += `<span class="yellowgreen">making you an extra ${cashFormat(Math.trunc(slave.sexQuality * vignette.effect))}.</span>`;
 				} else if (vignette.effect < 0) {
-					r += `<span class="red">losing you ${cashFormat(Math.abs(Math.trunc(FuckResult * vignette.effect)))}.</span>`;
+					r += `<span class="red">losing you ${cashFormat(Math.abs(Math.trunc(slave.sexQuality * vignette.effect)))}.</span>`;
 				} else {
 					r += `an incident without lasting effect.`;
 				}
-				cashX(Math.trunc(FuckResult * vignette.effect), "publicServant", slave);
-				T.incomeStats.rep += Math.trunc(FuckResult * vignette.effect);
+				cashX(Math.trunc(slave.sexQuality * vignette.effect), "publicServant", slave);
+				T.incomeStats.rep += Math.trunc(slave.sexQuality * vignette.effect);
 			} else if (vignette.type === "devotion") {
 				if (vignette.effect > 0) {
 					if (slave.devotion > 50) {
@@ -1679,8 +1522,8 @@ window.saServeThePublic = (function saServeThePublic() {
 				} else {
 					r += `an incident without lasting effect.`;
 				}
-				repX(Math.trunc(FuckResult * vignette.effect * 0.1), "vignette", slave);
-				T.incomeStats.income += Math.trunc(FuckResult * vignette.effect * 0.1);
+				repX(Math.trunc(slave.sexQuality * vignette.effect * 0.1), "vignette", slave);
+				T.incomeStats.income += Math.trunc(slave.sexQuality * vignette.effect * 0.1);
 			}
 		}
 	}
diff --git a/src/endWeek/saWorkAGloryHole.js b/src/endWeek/saWorkAGloryHole.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d03bb0aabd8c35f9e0b7ef4289e7bebaf9d4a8
--- /dev/null
+++ b/src/endWeek/saWorkAGloryHole.js
@@ -0,0 +1,437 @@
+window.saWorkAGloryHole = (function saWorkAGloryHole() {
+	"use strict";
+	let V;
+	let T;
+	let r;
+	let beauty;
+	let FResult;
+	let pronouns;
+	let he, him, his, hers, himself, boy, He, His;
+	
+	return saWorkAGloryHole;
+
+	/** @param {App.Entity.SlaveState} slave */
+	function saWorkAGloryHole(slave) {
+		V = State.variables;
+		T = State.temporary;
+		r = ``;
+		pronouns = getPronouns(slave);
+		he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun;
+		He = capFirstChar(he), His = capFirstChar(his);
+		beauty = slave.sexAmount; /* This gets calculated during slaveAssignmentReport and stored on the slave for later use */
+		FResult = V.arcadePrice; /* This gets calculated during slaveAssignmentReport after we know the total 'arcade' sex slave supply */
+		
+		gatherStatistics(slave);
+		jobPreface(slave);
+		physicalEffects(slave);
+		mentalEffects(slave);
+		jobBody(slave);
+		applyFSDecoration(slave);
+		sexCounts(slave);
+		profitReport(slave);
+
+		return r;
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function gatherStatistics(slave) {
+		/* Statistics gathering */
+		const facility = slave.assignment === Job.ARCADE ? V.facility.arcade : undefined;
+		T.incomeStats = getSlaveStatisticData(slave, facility);
+		T.incomeStats.customers = beauty;
+	}
+	
+	/** @param {App.Entity.SlaveState} slave */
+	function jobPreface(slave) {
+
+		r += ` is `;
+		if (slave.fuckdoll === 0) {
+			r += `restrained in a glory hole.`;
+		} else {
+			r += `set out for use.`;
+		}
+		r += ` ${beauty} customers (${Math.trunc(beauty/7)} a day) `;
+		if (V.publicFuckdolls === 1) {
+			r += `enjoyed ${his} holes free of charge thanks to your gracious policies.`;
+		} else {
+			r += `paid `;
+			// is this right? This really doesn't feel right. < 1 credit?
+			if (FResult === 3) {
+				r += `${cashFormat(3)}`;
+			} else if (FResult >= 2.5) {
+				r += `a little under ${cashFormat(3)}`;
+			} else if (FResult >= 2) {
+				r += `a little over ${cashFormat(2)}`;
+			} else if (FResult >= 1.5) {
+				r += `a little under ${cashFormat(2)}`;
+			} else if (FResult >= 1) {
+				r += `a little over ${cashFormat(1)}`;
+			} else {
+				r += `less than ${cashFormat(1)}`;
+			}
+			r += ` to use ${his} holes.`;
+		}
+		if (V.arcologies[0].FSDegradationist > 0) {
+			r += ` Demand for ${his} holes is strong due to the appetite for degradation rampant in ${V.arcologies[0].name}.`;
+		}
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function physicalEffects(slave) {
+
+		//check usage counts for these — more fucks should be more damaging
+		if (slave.curatives > 0 || slave.inflationType === "curative") {
+			r += ` The drugs ${he}'s `;
+			if (slave.inflationType === "curative") {
+				r += `harboring inside ${his} guts`;
+			} else {
+				r += `on`;
+			}
+			r += ` protect ${his} health from the stress of being used as a sexual appliance.`;
+		} else if (slave.health < -50) {
+			r += ` The stress of being used while very ill <span class="red">damaged ${his} health.</span>`;
+			slave.health -= Math.max(Math.trunc((slave.sexAmount - 100) / 25) + jsRandom(-2, 2), 1);
+		} else if (slave.health < -10) {
+			if (jsRandom(1,100) < 10) {
+				r += ` The stress of being used while weak has <span class="red">damaged ${his} health.</span>`;
+				slave.health -= Math.max(Math.trunc((slave.sexAmount - 100) / 25) + jsRandom(-2, 2), 1);
+			}
+		} else if (!canDoVaginal(slave) && !canDoAnal(slave)) {
+			if (jsRandom(1,100) < 75) {
+				r += ` The stress of being used repeatedly in only one hole has <span class="red">damaged ${his} health.</span>`;
+				slave.health -= Math.max(Math.trunc((slave.sexAmount - 100) / 25) + jsRandom(-2, 2), 1);
+			}
+		} else if (!canDoVaginal(slave)) {
+			if (jsRandom(1,100) < 50) {
+				r += ` The stress of being used in only two holes has <span class="red">damaged ${his} health.</span>`;
+				slave.health -= Math.max(Math.trunc((slave.sexAmount - 100) / 25) + jsRandom(-2, 2), 1);
+			}
+		} else if (jsRandom(1,100) < 25) {
+			r += ` The stress of being used has <span class="red">damaged ${his} health.</span>`;
+			slave.health -= Math.max(Math.trunc((slave.sexAmount - 100) / 25) + jsRandom(-2, 2), 1);
+		}
+
+		if (slave.vagina === 0 && canDoVaginal(slave)) {
+			r += ` A `;
+			if (slave.fuckdoll === 0) {
+				r += `glory hole`;
+			} else {
+				r += `Fuckdoll`;
+			}
+			r += ` user takes ${his} virginity. He does not notice or care. <span class="lime">${His} pussy has been broken in</span> in a <span class="gold">painful</span> and <span class="mediumorchid">degrading</span> way.`;
+			slave.devotion -= 10;
+			slave.trust -= 10;
+			slave.vagina = 1;
+		} else if (slave.vagina < 3 && canDoVaginal(slave) && jsRandom(1,100) > ((310 - beauty) + (slave.vagina * 10))) {
+			r += ` <span class="lime">${His} pussy gets stretched out by the use.</span>`;
+			slave.vagina += 1;
+		}
+
+		if (slave.anus == 0 && canDoAnal(slave)) {
+			r += ` ${His} anal virginity goes to a `;
+			if (slave.fuckdoll === 0) {
+				r += `glory hole`;
+			} else {
+				r += `Fuckdoll`;
+			}
+			r += ` user, who doesn't understand why this particular run at `;
+			if (slave.fuckdoll === 0) {
+				r += `the glory hole`;
+			} else {
+				r += `a Fuckdoll`;
+			}
+			r += ` is so great. <span class="lime">${His} ass has been broken in</span> in a <span class="gold">painful</span> and <span class="mediumorchid">degrading</span> way.`;
+			slave.devotion -= 5;
+			slave.trust -= 5;
+			slave.anus = 1;
+		} else if (slave.anus < 3 && canDoAnal(slave) && jsRandom(1,100) > ((290 - beauty) + (slave.anus * 10))) {
+			r += ` <span class="lime">${His} asshole sees constant use and loosens.</span>`;
+			slave.anus += 1;
+		}
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function mentalEffects(slave) {
+
+		if (slave.fetish === "mindbroken") {
+			r += ` ${He} serves ${his} role as a mindless set of holes to perfection.`;
+		} else {
+			if (slave.skill.oral <= 10) {
+				r += ` With ${his} throat being brutally used, ${his} gag reflex is suppressed and ${his} oral skills improve.`;
+				r += `${SkillIncrease.Oral(slave, 5)}`;
+			} else if (slave.skill.vaginal <= 10 && canDoVaginal(slave)) {
+				r += ` With ${his} pussy being harshly used, ${his} vaginal skills improve.`;
+				r += `${SkillIncrease.Vaginal(slave, 5)}`;
+			} else if (slave.skill.anal <= 10 && canDoAnal(slave)) {
+				r += ` With ${his} butt being mercilessly fucked, ${his} anal skills improve.`;
+				r += `${SkillIncrease.Anal(slave, 5)}`;
+			}
+			if (slave.sexualFlaw === "self hating") {
+				r += ` ${His} self hatred is so deep that ${he} believes ${he} deserves to serve in a glory hole, and even gets off on the degradation.`;
+			} else if (slave.sentence > 0) {
+				if (slave.behavioralFlaw !== "odd" && jsRandom(1,100) > (100 + (slave.devotion / 5))) {
+					r += ` Constant confinement coupled with brutal use has left ${him} with involuntary nervous tics.`;
+					slave.behavioralFlaw = "odd";
+				}
+				if (slave.devotion > 50) {
+					r += ` ${He} does $his best to tolerate ${his} sentence to the glory hole, but <span class="mediumorchid">${his} devotion is hurt</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion > 20) {
+					r += ` ${He} does not understand why ${his} obedience has earned ${him} a sentence to this torture. <span class="mediumorchid">${His} obedience is hurt</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion >= -20) {
+					r += ` ${His} fear of you turns to desperation during ${his} sentence. <span class="mediumorchid">${His} obedience is reduced</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion >= -50) {
+					r += ` Though ${he} is only temporarily sentenced to suffer, <span class="mediumorchid">${his} resistance is increased</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else {
+					r += ` ${He} has hope ${he}'ll be released after ${his} sentence, but <span class="mediumorchid">${his} hatred of you is increased</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				}
+				slave.devotion -= 5;
+				slave.trust -= 5;
+			} else {
+				if (slave.behavioralFlaw !== "odd" && jsRandom(1,100) > (70 + (slave.devotion / 5))) {
+					r += ` Constant confinement coupled with brutal use has left ${him} with involuntary nervous tics.`;
+					slave.behavioralFlaw = "odd";
+				}
+				if (slave.devotion > 50) {
+					r += ` ${He} feels starved of personal contact. <span class="mediumorchid">${His} devotion is hurt</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion > 20) {
+					r += ` ${He} does not understand why ${his} obedience has earned ${him} this immurement. <span class="mediumorchid">${His} obedience is hurt</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion >= -20) {
+					r += ` ${His} fear of you has increased into something like a pathology. <span class="mediumorchid">${His} obedience is reduced</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else if (slave.devotion >= -50) {
+					r += ` ${His} resistance is deepening into hatred. <span class="mediumorchid">${His} resistance is increased</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				} else {
+					r += ` <span class="mediumorchid">${His} helpless hatred of you is increased</span> and ${he} is <span class="gold">filled with fear</span> ${he} won't be let out.`;
+				}
+				slave.devotion -= 10;
+				slave.trust -= 10;
+			}
+		}
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function jobBody(slave) {
+		r += ` ${His} feelings, skills, and appearance do not matter. ${He} is condemned to a world that consists of a tiny cell, featureless except for the never-ending dicks ${he} is required to service. You `;
+		if (V.publicFuckdolls === 0) {
+			r += `were paid <span class="yellowgreen">${cashFormat((Math.trunc(beauty * FResult)))}</span>`;
+		} else {
+			r += `<span class="green">gained reputation</span>`;
+		}
+		r += ` for the use of ${slave.slaveName}'s holes this week.`;
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function applyFSDecoration(slave) {
+
+		/* FACILITY DECORATION IMPACTS */
+		if (slave.assignment === "be confined in the arcade" && V.arcadeDecoration !== "standard") {
+			let impact = (0.0001 * V.FSSingleSlaveRep * beauty);
+			switch (V.arcadeDecoration) {
+				case "Roman Revivalist":
+					V.arcologies[0].FSRomanRevivalist += impact;
+					break;
+				case "Aztec Revivalist":
+					V.arcologies[0].FSAztecRevivalist += impact;
+					break;
+				case "Egyptian Revivalist":
+					V.arcologies[0].FSEgyptianRevivalist += impact;
+					break;
+				case "Edo Revivalist":
+					V.arcologies[0].FSEdoRevivalist += impact;
+					break;
+				case "Arabian Revivalist":
+					V.arcologies[0].FSArabianRevivalist += impact;
+					break;
+				case "Chinese Revivalist":
+					V.arcologies[0].FSChineseRevivalist += impact;
+					break;
+				case "Repopulation Focus":
+					V.arcologies[0].FSRepopulationFocus += impact;
+					break;
+				case "Eugenics":
+					V.arcologies[0].FSRestart += impact;
+					break;
+				case "Chattel Religionist":
+					V.arcologies[0].FSChattelReligionist += impact;
+					break;
+				case "Degradationist":
+					V.arcologies[0].FSDegradationist += impact;
+					break;
+				case "Asset Expansionist":
+					V.arcologies[0].FSAssetExpansionist += impact;
+					break;
+				case "Transformation Fetishist":
+					V.arcologies[0].FSTransformationFetishist += impact;
+					break;
+				case "Gender Radicalist":
+					V.arcologies[0].FSGenderRadicalist += impact;
+					break;
+				case "Gender Fundamentalist":
+					V.arcologies[0].FSGenderFundamentalist += impact;
+					break;
+				case "Physical Idealist":
+					V.arcologies[0].FSPhysicalIdealist += impact;
+					break;
+				case "Hedonistic":
+					V.arcologies[0].FSHedonisticDecadence += impact;
+					break;
+				case "Supremacist":
+					V.arcologies[0].FSSupremacist += impact;
+					break;
+				case "Subjugationist":
+					V.arcologies[0].FSSubjugationist += impact;
+					break;
+				case "Paternalist":
+					V.arcologies[0].FSPaternalist += impact;
+					break;
+				case "Pastoralist":
+					V.arcologies[0].FSPastoralist += impact;
+					break;
+				case "Maturity Preferentialist":
+					V.arcologies[0].FSMaturityPreferentialist += impact;
+					break;
+				case "Youth Preferentialist":
+					V.arcologies[0].FSYouthPreferentialist += impact;
+					break;
+				case "Body Purist":
+					V.arcologies[0].FSBodyPurist += impact;
+					break;
+				case "Slimness Enthusiast":
+					V.arcologies[0].FSSlimnessEnthusiast += impact;
+					break;
+			}
+		}
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function sexCounts(slave) {
+
+		/* SEX ACT COUNTS AND SEXUAL SATISFACTION */
+
+		let oralUse = (V.oralUseWeight + (slave.lips / 20));
+		let analUse;
+		if (canDoAnal(slave)) {
+			analUse = V.analUseWeight - slave.anus;
+			if (analUse < 0) {
+				analUse = 0;
+			}
+		}
+		let vaginalUse;
+		if (canDoVaginal(slave)) {
+			vaginalUse = V.vaginalUseWeight - slave.vagina;
+			if (vaginalUse < 0) {
+				vaginalUse = 0;
+			}
+		}
+
+		let demand = (oralUse + analUse + vaginalUse);
+		let cervixPump = 0;
+		
+		oralUse = Math.trunc((oralUse / demand) * beauty);
+		analUse = Math.trunc((analUse / demand) * beauty);
+		vaginalUse = Math.trunc((vaginalUse / demand) * beauty);
+
+		slave.need -= ((analUse + vaginalUse) / 4);
+
+		slave.oralCount += oralUse;
+		V.oralTotal += oralUse;
+		slave.analCount += analUse;
+		V.analTotal += analUse;
+		slave.vaginalCount += vaginalUse;
+		V.vaginalTotal += vaginalUse;
+		slave.publicCount += oralUse + analUse + vaginalUse;
+		
+		if (slave.cervixImplant === 1 || slave.cervixImplant === 3) {
+			cervixPump += (20 * vaginalUse);
+		}
+		if (slave.cervixImplant === 2 || slave.cervixImplant === 3) {
+			cervixPump += (20 * analUse);
+		}
+
+		//this may need improvement with the new system
+		if (slave.need) {
+			if (slave.fetishKnown) {
+				switch (slave.fetish) {
+					case "submissive":
+					case "masochist":
+						if ((analUse + vaginalUse) > 0) {
+							r += ` ${He} enjoys being used, and got sexual satisfaction from the ${analUse + vaginalUse} dicks stuck inside ${him} this week.`;
+							slave.need -= (analUse + vaginalUse);
+						}
+						break;
+					case "dom":
+					case "sadist":
+						break;
+					case "cumslut":
+						if (oralUse > 0) {
+							r += ` ${He} enjoys being facefucked, and got sexual satisfaction from the ${oralUse} dicks shoved inside ${his} throat this week.`;
+							slave.need -= oralUse;
+						}
+						break;
+					case "buttslut":
+						if (analUse > 0) {
+							r += ` ${He} enjoys getting buttfucked, and got sexual satisfaction from the ${analUse} times ${he} was sodomized this week.`;
+							slave.need -= analUse;
+						}
+						break;
+					case "pregnancy":
+						if (canGetPregnant(slave)) {
+							if (slave.mpreg === 0) {
+								if (vaginalUse > 0) {
+									r += ` ${He} enjoys having ${his} pussy fucked, and got sexual satisfaction from the ${vaginalUse} loads ${he} received this week.`;
+									slave.need -= vaginalUse;
+								}
+							} else {
+								if (analUse > 0) {
+									r += ` ${He} enjoys having ${his} ass fucked, and got sexual satisfaction from the ${analUse} loads ${he} received this week.`;
+									slave.need -= analUse;
+								}
+							}
+						}
+						break;
+					case "humiliation":
+						r += ` ${He} enjoys the humiliation of having ${his} most intimate parts presented for public use, and got a bit of sexual satisfaction from every sex act ${he} performed this week.`;
+						slave.need -= beauty;
+						break;
+				}
+			}
+		}
+
+		if (cervixPump > 0) {
+			r += ` ${He} notices ${his} <span class="lime">belly has swollen</span> from all the `;
+			if (slave.cervixImplant === 1) {
+				r += `vaginal `;
+			} else if (slave.cervixImplant === 2) {
+				r += `anal `;
+			}
+			r += `sex ${he} had throughout the week.`;
+			slave.bellyImplant += cervixPump;
+		}
+	}
+
+	/** @param {App.Entity.SlaveState} slave */
+	function profitReport(slave) {
+
+		if (V.publicFuckdolls === 0) {
+			if (slave.assignment === "work a glory hole") {
+				cashX(Math.trunc(beauty * FResult), "gloryhole", slave);
+			} else if (slave.assignment === "be confined in the arcade") {
+				cashX(Math.trunc(beauty * FResult), "gloryholeArcade", slave);
+			} else {
+				cashX(Math.trunc(beauty * FResult), "working a gloryhole in an unregistered building", slave);
+			}
+			T.profits += Math.trunc(beauty * FResult);
+			T.incomeStats.income += Math.trunc(beauty * FResult);
+		} else {
+			if (slave.assignment === "work a glory hole") {
+				cashX(Math.trunc(beauty * FResult / 5), "gloryhole", slave);
+			} else if (slave.assignment === "be confined in the arcade") {
+				cashX(Math.trunc(beauty * FResult / 5), "gloryholeArcade", slave);
+			} else {
+				cashX(Math.trunc(beauty * FResult / 5), "working a gloryhole in an unregistered building", slave);
+			}
+			T.profits += Math.trunc(beauty * FResult / 5);
+			T.incomeStats.income += Math.trunc(beauty * FResult / 5);
+		}
+	}
+
+})();
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 3642ff563f2cb46e9515dad2a688076bdfae3f0e..7b74b8c585761df7197fa4355580a412f4646cf3 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -590,7 +590,7 @@ You should have received a copy of the GNU General Public License along with thi
 <<set $arcadeUpgradeInjectors = 0>>
 <<set $arcadeUpgradeFuckdolls = 0>>
 <<set $arcadeUpgradeCollectors = 0>>
-<<set $arcadeUpgradeMenials = 0>>
+<<set $arcadeUpgradeHealth = -1>>
 <<set $arcadeName = "the Arcade">>
 <<set $arcadeNameCaps = "The Arcade">>
 <<set $arcade = 0>>
@@ -824,6 +824,16 @@ You should have received a copy of the GNU General Public License along with thi
 <<set $corpIncorporated = 0>>
 <<set $corpMarket = 0>>
 
+/* Slave sexual services and goods variables */
+<<set $publicFuckdolls = 0>>
+<<set $lowerClassSexDemand = 15600>>
+<<set $lowerClassSatisfied = 0>>
+<<set $middleClassSexDemand = 10780>>
+<<set $upperClassSexDemand = 8000>>
+<<set $topClassSexDemand = 8000>>
+<<set $arcadePrice = 2>>
+<<set $clubSlaveSexAmount = 0>>
+
 <<set $shelterSlave = 0>>
 <<set $shelterSlaveBought = 0>>
 <<set $shelterAbuse = 0>>
@@ -1110,6 +1120,9 @@ You should have received a copy of the GNU General Public License along with thi
 <<set $slaveCostRandom = 0>>
 <<set $deltaDemand = 0>>
 <<set $deltaSupply = 0>>
+<<set $NPCSexSupply = {lowerClass: 3000}>>
+<<set $sexSubsidiesLC = 0>>
+<<set $sexSupplyBarriersLC = 0>>
 <<set $minimumSlaveCost = 2500>>
 <<set $facilityCost = 100>>
 <<set $enduringRep = 1000>>
diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js
index 0a31de8114b1c0d0b22fd20bb7d2fd82656c437a..1319fe90b98b304f937ed06f295cb324143ecd4d 100644
--- a/src/js/datatypeCleanupJS.js
+++ b/src/js/datatypeCleanupJS.js
@@ -1411,6 +1411,9 @@ window.EconomyDatatypeCleanup = function EconomyDatatypeCleanup() {
 	V.elapsedSupplyTimer = Math.max(+V.elapsedSupplyTimer, 0) || 0;
 	V.deltaSupply = Math.clamp(+V.deltaSupply, -3000, 3000) || 0;
 	V.deltaDemand = Math.clamp(+V.deltaDemand, -3000, 3000) || 0;
+	V.NPCSexSupply.lowerClass = Math.max(+V.NPCSexSupply.lowerClass, 0) || 3000;
+	V.sexSubsidiesLC = Math.clamp(+V.sexSubsidiesLC, 0, 4) || 0;
+	V.sexSupplyBarriersLC = Math.clamp(+V.sexSupplyBarriersLC, 0, 4) || 0;
 	V.econWeatherDamage = Math.max(+V.econWeatherDamage, 0) || 0;
 	V.disasterResponse = Math.clamp(+V.disasterResponse, 0, 2) || 0;
 	V.antiWeatherFreeze = Math.clamp(+V.antiWeatherFreeze, 0, 2) || 0;
@@ -1723,9 +1726,9 @@ window.FacilityDatatypeCleanup = (function() {
 		/* upgrades */
 		V.arcade = Math.max(+V.arcade, 0) || 0;
 		V.arcadeUpgradeInjectors = Math.clamp(+V.arcadeUpgradeInjectors, 0, 1) || 0;
-		V.arcadeUpgradeCollectors = Math.clamp(+V.arcadeUpgradeCollectors, 0, 1) || 0;
-		V.arcadeUpgradeMenials = Math.clamp(+V.arcadeUpgradeMenials, 0, 1) || 0;
-		V.arcadeUpgradeFuckdolls = Math.clamp(+V.arcadeUpgradeFuckdolls, 0, 1) || 0;
+		V.arcadeUpgradeCollectors = Math.clamp(+V.arcadeUpgradeCollectors, 0, 1.5) || 0;
+		V.arcadeUpgradeFuckdolls = Math.clamp(+V.arcadeUpgradeFuckdolls, 0, 2) || 0;
+		V.arcadeUpgradeHealth = Math.clamp(+V.arcadeUpgradeHealth, -1, 2) || 0;
 	}
 
 	function CellblockDatatypeCleanup() {
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 39adaec4fa81de8a9fd167b4b7d2a654957716a4..ff05dae9c0b492552a7c18e111c8dea1190210cf 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -149,11 +149,10 @@ window.getBrothelAdsCosts = function() {
 };
 
 window.getArcadeCosts = function() {
-	const facilityCost = State.variables.facilityCost;
-	const arcade = State.variables.arcade;
-	let costs = (arcade * facilityCost * 0.5);
-	costs += (0.2 * State.variables.arcadeUpgradeInjectors * arcade * facilityCost)
-	+ (0.2 * State.variables.arcadeUpgradeCollectors * arcade * facilityCost);
+	var facilityCost = State.variables.facilityCost;
+	var arcade = State.variables.arcade;
+	var costs = (arcade * facilityCost * 0.05);
+	costs += (0.02 * State.variables.arcadeUpgradeInjectors * arcade * facilityCost) + (0.05 * State.variables.arcadeUpgradeCollectors * arcade * facilityCost) + (0.02 * State.variables.arcadeUpgradeHealth * arcade * facilityCost);
 	return costs;
 };
 
@@ -900,6 +899,350 @@ window.menialSlaveCost = function(q) {
 	return (Math.trunc(baseCost + demand / 400 - supply / 400 + q / 400) + random);
 };
 
+window.NPCSexSupply = function(LC) {
+	const V = State.variables;
+	let NPCSexSupply = {lowerClass: V.NPCSexSupply.lowerClass};
+
+	// Lower class calculations
+	LC += V.sexSubsidiesLC / 10 - V.sexSupplyBarriersLC / 20;
+	if(LC >= 0.5) {
+		NPCSexSupply.lowerClass += Math.max(Math.trunc(NPCSexSupply.lowerClass * ((LC - 0.5) * (0.2 - V.sexSupplyBarriersLC / 25))), (50 * (1 - V.sexSupplyBarriersLC / 5))); // Max growth of 10% per week, unless it is really low, than a flat 50
+	} else if(LC < 0.5) {
+		if(NPCSexSupply.lowerClass > $lowerClass * (3 - V.sexSupplyBarriersLC / 2)) { // Natural market share of competitors is at least 30%
+			NPCSexSupply.lowerClass -= Math.trunc(NPCSexSupply.lowerClass * ((0.5 - LC) / 5)); // Max reduction of 10% per week
+		}
+	}
+
+	return NPCSexSupply;
+};
+
+// The function for calculating and storing a slave's sexual interaction with citizens/'the outside'
+window.slaveJobValues = function() {
+	const V = State.variables;
+	let slaveJobValues = {arcade: 0, club: 0, clubSP: 0}, clubSpots = 0, toTheClubTotal = 0, DJRepBonus = 0;
+	V.slavesGettingHelp = 0;
+
+	// This section is for specific slaves or non-unique slaves adding their values to the whole
+	// Accounting for fuckdolls
+	if(V.fuckdolls > 0) {
+		slaveJobValues.arcade += (V.fuckdolls - (V.arcade - V.arcadeSlaves)) * 140 + (V.arcade - V.arcadeSlaves) * (175 + 35 * V.arcadeUpgradeInjectors);
+	}
+
+	// Accounting for the DJ.
+	V.DJ = V.slaves.find(s => {
+		return s.assignment == "be the DJ";
+	});
+	if(V.DJ !== 0) {
+		if(!canTalk(V.DJ)) {
+			//''__@@.pink;$DJ.slaveName@@__'' can't speak @@.yellow;and cannot serve as your DJ any more.@@<br>
+			V.DJ = 0;
+			V.unDJ = 1;
+		} else if(V.DJ.preg > 37 && $DJ.broodmother == 2) {
+			//''__@@.pink;$DJ.slaveName@@__'' spends so much time giving birth and laboring that @@.yellow;$he cannot effectively serve as your DJ any longer@@.
+			V.DJ = 0;
+			V.unDJ = 2;
+		} else if(V.DJ.fetish == "mindbroken") {
+			//''__@@.pink;$DJ.slaveName@@__'' is mindbroken @@.yellow;and cannot serve as your DJ any more.@@<br>
+			V.DJ = 0;
+			V.unDJ = 3;
+		} else if(!canWalk(V.DJ)) {
+			//''__@@.pink;$DJ.slaveName@@__'' is no longer independently mobile @@.yellow;and cannot serve as your DJ any more.@@<br>
+			V.DJ = 0;
+			V.unDJ = 4;
+		} else if(!canHear(V.DJ)) {
+			//''__@@.pink;$DJ.slaveName@@__'' can no longer hear @@.yellow;and cannot serve as your DJ any more.@@<br>
+			V.DJ = 0;
+			V.unDJ = 5;
+		}
+	}
+	if(V.DJ !== 0) {
+		if(V.DJ.relationship === -3 && V.DJ.devotion > 50) {
+			DJRepBonus += 0.1;
+			//$He tries $his best to be your energetic, cheerful wife.
+		}
+		if(V.DJ.eyes === -2) {
+			DJRepBonus += 0.15;
+		}
+		if(V.DJ.skill.entertainment <= 10) {
+			//Though $DJ.slaveName does $his best to lead on the club, with $his lack of skill $he can do little.
+		} else if(V.DJ.skill.entertainment <= 30) {
+			DJRepBonus += 0.05;
+			//$DJ.slaveName's basic skills marginally @@.green;improve@@ the atmosphere on $clubName.
+		} else if(V.DJ.skill.entertainment <= 60) {
+			DJRepBonus += 0.1;
+			//$DJ.slaveName's skills @@.green;improve@@ the atmosphere on $clubName.
+		} else if(V.DJ.skill.entertainment < 100) {
+			DJRepBonus += 0.15;
+			//$DJ.slaveName's skills greatly @@.green;improve@@ the atmosphere on $clubName.
+		} else if(V.DJ.skill.entertainment >= 100) {
+			DJRepBonus += 0.20;
+			//$DJ.slaveName's mastery immensely @@.green;improves@@ the atmosphere on $clubName.
+		}
+		if(V.DJ.muscles > 5 && V.DJ.muscles <= 95) {
+			V.DJRepBonus += 0.05;
+			//$His toned body helps $him lead $his fellow club girls by letting $him dance all night.
+		}
+		if(V.DJ.intelligence + V.DJ.intelligenceImplant > 15) {
+			DJRepBonus += 0.05 * Math.floor((V.DJ.intelligence + V.DJ.intelligenceImplant)/32);
+			//$He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience.
+		}
+		if(V.DJ.face > 95) {
+			DJRepBonus += 0.05;
+			//$His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance.
+		}
+		if(setup.DJCareers.includes(V.DJ.career)) {
+			DJRepBonus += 0.05;
+			//$He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth.
+		} else if(V.DJ.skill.DJ >= V.masteredXP) {
+			DJRepBonus += 0.05;
+			//$He has musical experience from working for you, giving $his tracks actual depth.
+		}
+		
+		// The DJ adding to 'club'
+		SJVClub(V.slaves[V.slaveIndices[V.DJ.ID]]);
+	}
+
+	// Checking for space in the club
+	if(V.club > 0 && V.ClubiIDs.length < V.club) {
+		clubSpots = V.club - V.ClubiIDs.length;
+	}
+
+	// Glory hole slaves adding to 'arcade'
+	V.JobIDArray["work a glory hole"].forEach(ID => {
+		let s = V.slaves[V.slaveIndices[ID]];
+		s.sexAmount = Math.trunc((jsRandom(160,200) + (20 * (4 - s.anus)) + (10 * (4 - s.vagina)) + Math.trunc(s.health / 5)) * 0.8);
+		slaveJobValues.arcade += s.sexAmount;
+	});
+
+	// Public sluts adding to 'club'
+	V.JobIDArray["serve the public"].forEach(ID => {
+		SJVClub(V.slaves[V.slaveIndices[ID]]);
+	});
+
+	// This loops through every slave, checks their assignment and applies the appropriate value to both slave and the aggregate
+	// The slave value sees use during individual end of the week evaluation
+	// The aggregate is used for determining macro variables like 'prices' for slave goods and services to then be used in end week calculations
+	V.slaves.forEach(s => {
+
+		// Arcade slaves adding to 'arcade'
+		if(s.assignment === "be confined in the arcade") {
+			s.sexAmount = (jsRandom(200,240) + (20 * (4 - (s.anus - 2 * V.arcadeUpgradeInjectors))) + (10 * (4 - (s.vagina - 2 * V.arcadeUpgradeInjectors))) + Math.trunc(s.health / 5));
+			slaveJobValues.arcade += s.sexAmount;
+		}
+		
+		// Club and public sluts adding to 'club'. Also recruiters assigned as sexual ambassador to another arcology.
+		if(s.assignment === "serve in the club" || (s.assignment === "recruit girls" && V.recruiterTarget === "other arcologies")) {
+			SJVClub(s);
+		}
+	});
+		
+	function SJVClub(s) {
+		let toTheClub = 0, beautyMultiplier = 1;
+		s.minorInjury = 0;
+
+		// The beauty multiplier
+		if(s.sexualFlaw === "attention whore") {
+			beautyMultiplier += 0.1;
+		}
+		if(V.arcologies[0].FSEdoRevivalist !== "unset") {
+			beautyMultiplier += V.arcologies[0].FSEdoRevivalist / (V.FSLockinLevel * 3);
+		}
+		if(((V.universalRulesFacilityWork === 1) && (s.assignment === "serve the public") && (clubSpots > 0)) || (s.assignment === "serve in the club")) {
+			if(s.assignment == "serve the public") {
+				toTheClub = 1;
+				V.slavesGettingHelp += 1;
+			}
+			if(V.clubAdsSpending !== 0) {
+				if(V.clubAdsStacked === 1) {
+					if(isStacked(s) === true) {
+						beautyMultiplier += 0.05;
+						//$His stacked body fits $clubName's ad campaign, getting $him more attention.
+					}
+				} else if(V.clubAdsStacked === -1) {
+					if(isSlim(s) === true) {
+						beautyMultiplier += 0.05;
+						//$His slim body fits $clubName's ad campaign, getting $him more attention.
+					}
+				}
+				if(V.clubAdsPreg === 1) {
+					if(isPreg(s) === true) {
+						beautyMultiplier += 0.05;
+						//$His gravid body fits $clubName's ad campaign, getting $him more attention.
+					}
+				} else if(V.clubAdsPreg === -1) {
+					if(isNotPreg(s) === true) {
+						beautyMultiplier += 0.05;
+						//$His flat belly fits $clubName's ad campaign, getting $him more attention.
+					}
+				}
+				if(V.clubAdsModded === 1) {
+					if(isModded(s) === true) {
+						beautyMultiplier += 0.05;
+						//Body art like $hers is a major draw.
+					}
+				} else if(V.clubAdsModded === -1) {
+					if(isUnmodded(s) === true) {
+						beautyMultiplier += 0.05;
+						//Very clean bodies like $hers are a major draw.
+					}
+				}
+				if(V.clubAdsImplanted === 1) {
+					if(isSurgicallyImproved(s) === true) {
+						beautyMultiplier += 0.05;
+						//Many citizens come to $clubName looking to fuck a plastic slut like $him.
+					}
+				} else if(V.clubAdsImplanted === -1) {
+					if(isPure(s) === true) {
+						beautyMultiplier += 0.05;
+						//Many citizens come to $clubName looking to get with a natural $girl like $him.
+					}
+				}
+				if(V.clubAdsOld === 1) {
+					if(isYoung(s) === false) {
+						beautyMultiplier += 0.05;
+						//$He's perfect for $clubName, which practically exists to match citizens up with mature slaves.
+					}
+				} else if(V.clubAdsOld === -1) {
+					if(isYoung(s) === true && s.physical >= 18) {
+						beautyMultiplier += 0.05;
+						//$He's perfect for $clubName, which practically exists to match citizens up with young slaves.
+					}
+				} else if(V.clubAdsOld === -2) {
+					if(s.physical <= 18 && s.physical >= 13) {
+						beautyMultiplier += 0.05;
+						//$He's perfect for $clubName, which practically exists to match citizens up with teenage slaves.
+					}
+				} else if(V.clubAdsOld === -3) {
+					if(s.physical < 13) {
+						beautyMultiplier += 0.05;
+						//$He's perfect for $clubName, which practically exists to match citizens up with $loli slaves.
+					}
+				}
+				if(V.clubAdsXX === 1) {
+					if(s.dick === 0) {
+						beautyMultiplier += 0.05;
+						//Almost everyone who comes to $clubName is looking to fuck a $girl like $him.
+					}
+				} else if(V.clubAdsXX == -1) {
+					if(s.dick > 0) {
+						beautyMultiplier += 0.05;
+						//Almost everyone who comes to $clubName is looking to poke a $girl who cums when buttfucked.
+					}
+				}
+			}
+		}
+		if(s.assignment === "serve in the club" || toTheClub === 1) {
+			beautyMultiplier += DJRepBonus;
+		}
+		if(canHear(s) === false) {
+			beautyMultiplier -= 0.15;
+			//$His inability to move to the rhythm of the music is very off putting to those looking to party.
+		}
+
+		//Injuries
+		if(s.curatives < 1 || s.inflationType !== "curative") {
+			if(s.health < -50) {
+				s.health -= 8;
+				s.minorInjury = 1;
+			} else if(s.health < -20 && jsRandom(1,100) > 50) {
+				s.health -= 5;
+				s.minorInjury = 1;
+			} else if(!canDoVaginal(s)) {
+				if(canDoAnal(s)) {
+					if(jsRandom(1,100) > 40+(10*(s.skill.anal + s.skill.oral))) {
+					s.health -= 5;
+					s.minorInjury = 1;
+					}
+				} else if(jsRandom(1,100) > 40 + (10 * s.skill.oral)) {
+					s.health -= 5;
+					s.minorInjury = 1;
+				}
+			} else if(s.skill.anal + s.skill.oral + s.skill.vaginal < 300) {
+				if(jsRandom(1,100) > 10+((s.skill.anal + s.skill.oral + s.skill.vaginal)/10)) {
+					s.minorInjury = 1;
+				}
+			}
+		}
+		if(s.minorInjury === 1 && s.assignment === "serve the public") {
+			let injuryChance;
+			s.health -= 5;
+			beautyMultiplier -= 0.05;
+			if(canDoAnal(s)) {
+				injuryChance = jsRandom(1,100);
+			} else {
+				injuryChance = jsRandom(1,80);
+			}
+			if(injuryChance > 80) {
+				s.minorInjury = "sore ass";
+			} else if(injuryChance > 60) {
+				s.minorInjury = "black eye";
+			} else if(injuryChance > 40) {
+				s.minorInjury = "split lip";
+			} else if (injuryChance > 20) {
+				s.minorInjury = "bad bruise";
+			} else {
+				s.minorInjury = "sore muscle";
+			}
+		}
+		if((s.hears === -1 && s.earwear !== "hearing aids") || (s.hears === 0 && s.earwear === "muffling ear plugs") || (s.hears === -2)) {
+			if(!canHear(s)) {
+				beautyMultiplier -= 0.5;
+			} else {
+				beautyMultiplier -= 0.75;
+			}
+		}
+
+		// The amount of sexual acts
+		s.sexAmount = Beauty(s) / 2 + 100;
+
+		if(s.assignment === "be the DJ") {
+			if((V.clubSlaves + toTheClubTotal > 0) && (V.clubSlaves + toTheClubTotal < 10)) {
+				s.sexAmount *= (10 - V.clubSlaves - toTheClubTotal) / 10;
+			}
+		}
+		s.sexAmount = Math.trunc(s.sexAmount * beautyMultiplier);
+
+		// The quality/value of each sexual act
+		s.sexQuality = FResult(s);
+		if((s.releaseRules === "restrictive" || s.releaseRules === "chastity") && s.standardReward !== "orgasm" && s.energy >= 20) {
+			s.sexQuality += 2;
+		}
+		if(canDoAnal(s) && s.anus === 0) {
+			s.sexQuality += 5; // This was at 10, not sure what the reasoning behind that was
+		}
+		if(canDoVaginal(s) && s.vagina === 0) {
+			s.sexQuality += 5;
+		}
+		if(s.devotion > 95 || s.energy > 95) {
+			s.sexQuality += 2;
+		} else if(s.devotion > 50) {
+			s.sexQuality += 1;
+		} else if(s.devotion > 20) {
+			// Nothing happens
+		} else if(s.trust < -20) {
+			s.sexQuality -= 1;
+		} else {
+			s.sexQuality -= 2;
+		}
+		if(s.assignment === "serve in the club") {
+			s.sexQuality += 2;
+		} else if(toTheClub === 1) {
+			s.sexQuality += 2;
+			clubSpots -= 1;
+		}
+		if(s.assignment !== "recruit girls") {
+			slaveJobValues.club += s.sexAmount * s.sexQuality;
+		}
+		return;
+	}
+
+	// Saturation penalty for public servants. Even the most beautiful slaves lose some of their shine if they have too much competition.
+	if(slaveJobValues.club > 0) {
+		slaveJobValues.clubSP = (Math.pow(slaveJobValues.club / 1000, 0.95) * 1000) / slaveJobValues.club;
+	}
+	return slaveJobValues;
+};
+
 // Corporation Value
 
 window.corpValue = function() {
diff --git a/src/js/slaveStatsChecker.js b/src/js/slaveStatsChecker.js
index add09e5d79e7d08de3e364c7b6e06fd2946e9895..df3a9defce0e8be3c7b23f6a53b024ba02a74231 100644
--- a/src/js/slaveStatsChecker.js
+++ b/src/js/slaveStatsChecker.js
@@ -173,6 +173,10 @@ window.isPure = /** @param {App.Entity.SlaveState} slave */ function(slave) {
 	return ((slave.boobsImplant === 0) && (slave.buttImplant === 0) && (slave.waist >= -95) && (slave.lipsImplant === 0) && (slave.faceImplant < 30) && (slave.bellyImplant === -1) && (Math.abs(slave.shouldersImplant) < 2) && (Math.abs(slave.hipsImplant) < 2));
 };
 
+window.isSurgicallyImproved = /** @param {App.Entity.SlaveState} slave */ function(slave) {
+	return ((slave.boobsImplant > 0) && (slave.buttImplant > 0) && (slave.waist < -10) && (slave.lipsImplant > 0));
+};
+
 window.isFullyPotent = /** @param {App.Entity.SlaveState} slave */ function(slave) {
 	if (!slave) {
 		return null;
diff --git a/src/pregmod/newChildIntro.tw b/src/pregmod/newChildIntro.tw
index 8c4fc87b1e03ff572d6a86e1c98e18801754eda4..2a84a471d5d86b71823cdef670d01c19973f687e 100644
--- a/src/pregmod/newChildIntro.tw
+++ b/src/pregmod/newChildIntro.tw
@@ -1084,7 +1084,7 @@ You beckon the curious $girl to your hefty breasts, having noticed how hungrily
 		You tell $him that it's in $his interests to be a good $girl. $He smiles happily, taking it as a compliment. You point behind $him; $he turns, and beholds a live feed from $arcadeName. $He gazes at the row of butts sticking out of the wall at dick height, not quite realizing what $he's seeing<<if canAchieveErection($activeSlave)>>, but becoming stiff at the sight of all the holes<</if>>. Then $he notices that there are citizens pumping away in front of two of the butts, and $he understands. As $he watches, aroused, first one citizen and then the other finishes and steps away. The first arcade inmate's <<if $seeDicks != 100>>pussy<<else>>butt<</if>> is left looking sore until $arcadeName's systems cover _himU for a quick cleaning, and the second inmate's asshole <<if $seeDicks != 0>>has obviously seen severe use, since the poor _girlU doesn't have a pussy to spread the load<<else>>is loose enough that the machines have to clean up the cum it drools onto the floor<</if>>. $activeSlave.slaveName lets out a cheer and turns to you, @@.hotpink;eagerly awaiting the day $he gets to go to $arcadeName and play with the holes.@@ It seems $he missed the point.
 	<</replace>>
 	<</link>>
-	<<if ($arcade > $arcadeSlaves) || ($arcadeUpgradeFuckdolls != 0)>>
+	<<if ($arcade > $arcadeSlaves) || ($arcadeUpgradeFuckdolls == 2)>>
 		<br><<link "Send $him straight to the Arcade">>
 		<<= assignJob($activeSlave, "be confined in the arcade")>>
 		<<set $activeSlave.assignmentVisible = 0>>
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index b9dbc8de88ce4974a3b612daaf8f54d78556fb9d..d653d179f4f5559dbb8c3924a2bfbbaebbbc7304 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -417,6 +417,9 @@
 		<<set $PC.genes = "XX">>
 	<</if>>
 <</if>>
+<<if ndef $NPCSexSupply>>
+	<<set $NPCSexSupply = {}>>
+<</if>>
 <<run PCDatatypeCleanup()>>
 <<run BCReserveInit()>>
 
@@ -2641,6 +2644,32 @@ Setting missing global variables:
 	<</for>>
 <</if>>
 
+/*Slave services and goods variables*/
+<<if ndef $publicFuckdolls>>
+	<<set $publicFuckdolls = 0>>
+<</if>>
+<<if ndef $lowerClassSexDemand>>
+	<<set $lowerClassSexDemand = 15600>>
+<</if>>
+<<if ndef $lowerClassSatisfied>>
+	<<set $lowerClassSatisfied = 0>>
+<</if>>
+<<if ndef $middleClassSexDemand>>
+	<<set $middleClassSexDemand = 10780>>
+<</if>>
+<<if ndef $upperClassSexDemand>>
+	<<set $upperClassSexDemand = 8000>>
+<</if>>
+<<if ndef $topClassSexDemand>>
+	<<set $topClassSexDemand = 8000>>
+<</if>>
+<<if ndef $arcadePrice>>
+	<<set $arcadePrice = 2>>
+<</if>>
+<<if ndef $clubSlaveSexAmount>>
+	<<set $clubSlaveSexAmount = 0>>
+<</if>>
+
 <<if ndef $food>>
 	<<set $food = 50000>>
 <</if>>
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index b7040d1244746e724e42c25c0089d1358d705462..7cdea8252c6b66a016296eba82e4e28362084c30 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -19090,6 +19090,8 @@ You tell $him kindly that you understand, and that $he'll be trained to address
 		<br><br>
 		There is little noise; the slaves are closely restrained. Indeed, you have to look closely to see that they're being fucked at all. Here and there, though, there are signs. When someone fucks a slave's face, _hisU throat bulges, and _heU often gags and struggles a little within the restraints. When their <<if _pussy>>pussies<<else>>assholes<</if>> get fucked, there's also some involuntary struggling, and if the phallus being thrust into them is particularly large, a rhythmic bulging of their abdomens can be discerned.
 		<<if $arcadeUpgradeInjectors == 1>>
+			The bodies frequently jerk as electrostimulation is applied to force them to tighten their holes.
+		<<elseif $arcadeUpgradeInjectors == 2>>
 			The quiet hissing of the drug injectors adds a menacing undertone, and the bodies frequently jerk as electrostimulation is applied to force them to tighten their holes.
 		<</if>>
 		<<if $arcadeUpgradeCollectors == 1>>
diff --git a/src/uncategorized/arcade.tw b/src/uncategorized/arcade.tw
index bdffa352370d8958bab98c7150fb41fbab1d3c87..8b7f8a04404a3f6921008a199a86e694d7bd8b52 100644
--- a/src/uncategorized/arcade.tw
+++ b/src/uncategorized/arcade.tw
@@ -67,7 +67,7 @@ $arcadeNameCaps
 <<else>>
 	It's empty and quiet.
 	<<link "Decommission the arcade" "Main">>
-		<<set $arcade = 0, $arcadeUpgradeInjectors = 0, $arcadeUpgradeFuckdolls = 0, $arcadeUpgradeMenials = 0, $arcadeUpgradeCollectors = 0>>
+		<<set $arcade = 0, $arcadeUpgradeInjectors = 0, $arcadeUpgradeFuckdolls = 0, $arcadeUpgradeCollectors = 0>>
 		<<set _arc = $sectors.findIndex(function(s) { return s.type == "Arcade"; })>>
 		<<if _arc != -1>>
 			<<set $sectors[_arc].type = "Markets">>
@@ -88,43 +88,49 @@ $arcadeNameCaps
 <</if>>
 
 <br>It can support $arcade inmates. Currently $arcadeSlaves <<if $arcadeSlaves == 1>>slave is<<else>>slaves are<</if>> incarcerated.
-<<if ($arcade < $arcadeSlaves) && ($arcadeUpgradeFuckdolls == 1)>>
-	@@.yellow;$arcadeNameCaps is overcrowded;@@ the least popular inmate will be converted to a standard Fuckdoll this week.
+<<if $arcadeUpgradeFuckdolls == 1 && $arcadeSlaves > 1>>
+	<br>The arcade has automatic fuckdolification functions and you can decide to convert your least popular slave at the end of the week. [[Activate|Arcade][$arcadeUpgradeFuckdolls == 2]]
+<<elseif $arcadeUpgradeFuckdolls == 2>>
+	<br>You have decided that the least popular inmate will be converted to a standard Fuckdoll this week. [[Deactivate|Arcade][$arcadeUpgradeFuckdolls == 1]]
+<</if>>
+<<if $arcade > $arcadeSlaves && $fuckdolls > 0>>
+	<<set _fuckdollRoom = $arcade - $arcadeSlaves>>
+	<br>There is room in the arcade for <<print _fuckdollRoom>> menial fuckdolls. <<if $fuckdolls > 1>>They'll be more efficient in the arcade so you restrain them here.<<else>>Your fuckdoll will be more efficient serving in the arcade so you send her here.<</if>> 
 <</if>>
 <<set _Tmult0 = Math.trunc($arcade*1000*$upgradeMultiplierArcology)>>
-[[Expand the arcade|Arcade][cashX(forceNeg(_Tmult0), "capEx"), $arcade += 5]] //Costs <<print cashFormat(_Tmult0)>> and will increase upkeep costs//
+[[Expand the arcade|Arcade][cashX(forceNeg(_Tmult0), "capEx"), $arcade += 10]] //Costs <<print cashFormat(_Tmult0)>> and will increase upkeep costs//
 
-<br>
 <<set _Tmult1 = Math.trunc(10000*$upgradeMultiplierArcology)>>
 <<if $arcadeUpgradeInjectors == 1>>
-	It has been upgraded with aphrodisiac injection systems and electroshock applicators. If the aphrodisiacs fail to force an orgasm from an inmate, they are shocked to tighten their holes regardless.
+	<br>It has been upgraded with electroshock applicators. Whether they're enjoying themselves or not is irrelevant, they are shocked to tighten their holes regardless. You may also apply aphrodisiacs to further enhance performance. [[Apply aphrodisiacs|Arcade][$arcadeUpgradeInjectors = 2]]
+<<elseif $arcadeUpgradeInjectors == 2>>
+	<br>It has been upgraded with aphrodisiac injection systems and electroshock applicators. If the aphrodisiacs fail to force an orgasm from an inmate, they are shocked to tighten their holes regardless.
 <<elseif $arcadeUpgradeCollectors == 1>>
-	It has been retrofitted to milk lactating slaves<<if $seeDicks != 0>> and cockmilk slaves capable of ejaculating<</if>>, though less efficiently than a dedicated facility.
+	<br>It has been retrofitted to milk lactating slaves<<if $seeDicks != 0>> and cockmilk slaves capable of ejaculating<</if>>, though less efficiently than a dedicated facility.
 <<else>>
 	<br>It is a standard arcade. It can be upgraded to either maximize the pleasure of those that visit it at the expense of the health of the inmates, or to keep them healthy (if not happy) and milk them of useful fluids.<br>
 	[[Upgrade the arcade with invasive performance-enhancing systems|Arcade][cashX(forceNeg(_Tmult1), "capEx"), $arcadeUpgradeInjectors = 1]] | [[Retrofit the arcade to collect useful fluids|Arcade][cashX(forceNeg(_Tmult1), "capEx"), $arcadeUpgradeCollectors = 1]]<br>
 	//Choosing either upgrade will cost <<print cashFormat(_Tmult1)>> and will increase upkeep costs. They are mutually exclusive; only one can be chosen.// <br>
 <</if>>
 
-<<if $arcologies[0].FSPaternalist == "unset">>
-	<br>
-	<<if $arcadeUpgradeMenials == 1>>
-		<<if $fuckdolls > 0>>
-			Rows of menial Fuckdolls are shackled to the floor in positions that force them to present all their holes. Their latex-clad bodies struggle in their restraints when fucked, offering a different arcade experience.
-		<<else>>
-			In addition to the low walls that house inmates, there are also rows of simple shackles that allow menial Fuckdolls to be restrained here to add still more rapeable holes to $arcadeName's capacity. They're empty at present.
-		<</if>>
-	<<else>>
-		There is no provision for menial Fuckdolls. [[Add shackles to restrain more holes|Arcade][cashX(forceNeg(_Tmult1), "capEx"), $arcadeUpgradeMenials = 1]] //Costs <<print cashFormat(_Tmult1)>>//
-	<</if>>
+<<if $arcadeUpgradeHealth == 2>>
+	<br>It has been upgraded with curative injectors and set to maximum power. Inmates will be kept decently healthy so they can be held locked in place for as long as necessary while remaining productive througout. [[Decrease power|Arcade][$arcadeUpgradeHealth = 1]]
+<<elseif $arcadeUpgradeHealth == 1>>
+	<br>It has been upgraded with curative injectors. inmates will be kept alive and productive, so they may be held locked in place for as long as necessary and available for use. [[Increase power|Arcade][$arcadeUpgradeHealth = 2]] | [[Turn off|Arcade][$arcadeUpgradeHealth = 0]]
+<<elseif $arcadeUpgradeHealth == 0>>
+	<br>It has been upgraded with curative injectors, but they are currently turned off. [[Turn on|Arcade][$arcadeUpgradeHealth = 1]]
+<<else>>
+	<br>The arcade can be upgraded to include curative injectors in order to keep inmates from succumbing under the harsh treatment. You are assured the inmates won't like their time in the arcade any better, it is purely intended to keep them functional and ready for use around the clock. It comes equipped with two settings. [[Install curative injectors|Arcade][$arcadeUpgradeHealth = 1]]
 <</if>>
 
 <br>$arcadeNameCaps is
 <<if $arcadeUpgradeFuckdolls == 1>>
-	equipped to convert surplus inmates into standard Fuckdolls.
+	equipped to convert inmates into standard Fuckdolls. The converter can be put to work on your order. [[Turn on conversion|Arcade][$arcadeUpgradeFuckdolls = 2]]
+<<elseif $arcadeUpgradeFuckdolls == 2>>
+	equipped to convert inmates into standard Fuckdolls. The converter is currently active and will convert the least popular girl at the end of the week. [[Turn off conversion|Arcade][$arcadeUpgradeFuckdolls = 1]]
 <<else>>
 	<<set _Tmult2 = Math.trunc(5000*$upgradeMultiplierArcology)>>
-	not equipped to convert surplus inmates into standard Fuckdolls. [[Upgrade the arcade to create Fuckdolls|Arcade][cashX(forceNeg(_Tmult2), "capEx"), $arcadeUpgradeFuckdolls = 1]] //Costs <<print cashFormat(_Tmult2)>>//
+	not equipped to convert inmates into standard Fuckdolls. [[Upgrade the arcade to create Fuckdolls|Arcade][cashX(forceNeg(_Tmult2), "capEx"), $arcadeUpgradeFuckdolls = 1]] //Costs <<print cashFormat(_Tmult2)>>//
 <</if>>
 
 <!-- Statistics output -->
diff --git a/src/uncategorized/arcadeReport.tw b/src/uncategorized/arcadeReport.tw
index 7c6f1188eea360f64d08db97e546f81d473c6cd1..f95fd0e9b898f1bc1fdddd9844fd336f21c69ded 100644
--- a/src/uncategorized/arcadeReport.tw
+++ b/src/uncategorized/arcadeReport.tw
@@ -12,14 +12,12 @@
 &nbsp;&nbsp;&nbsp;&nbsp;<<if (_DL > 1)>>''There are _DL inmates confined in $arcadeName.''<<else>>''There is one inmate confined in $arcadeName.''<</if>>
 <<if ($arcologies[0].FSDegradationist > 20)>>
 	<<if $arcologies[0].FSDegradationistLaw == 1>>
-		The tenants located near the arcade don't mind having it nearby, even though the crowd of menial slaves waiting their turn spills out into the hallway, 24 hours a day.
+		The tenants located near the arcade consider the facility a normal part of their surroundings, including the crowd of menial slaves waiting their turn spills out into the hallway, 24 hours a day.
 	<<else>>
-		The tenants located near the arcade don't mind having it nearby.
+		The tenants located near the arcade consider the facility a normal part of their surroundings.
 	<</if>>
 <<elseif ($arcologies[0].FSPaternalist > 20)>>
-	Many of the better tenants located near the arcade consider it an @@.red;intolerable@@ establishment to have nearby.
-<<else>>
-	Some of the better tenants located near the arcade consider it an @@.red;obnoxious@@ establishment to have nearby.
+	The tenants located near the arcade consider it an @@.red;intolerable@@ establishment.
 <</if>>
 <<if $arcadeDecoration != "standard">>
 	<br><br>&nbsp;&nbsp;&nbsp;&nbsp;$arcadeNameCaps's customers enjoy @@.green;getting off in $arcadeDecoration surroundings.@@
@@ -31,32 +29,34 @@
 
 	/* Perform facility based rule changes */
 	<<set $slaves[$i].clothes = "no clothing">>
-	<<if ($arcadeUpgradeInjectors == 1)>>
-		<<if ($slaves[$i].health > -60)>>
-			<<set $slaves[$i].health -= 10>>
-		<<elseif ($slaves[$i].health > -80)>>
-			<<set $slaves[$i].health -= 2>>
-		<<else>>
-			<<set $slaves[$i].health -= 1>>
-		<</if>>
-		<<set $slaves[$i].aphrodisiacs = 2, $slaves[$i].devotion -= 5, $slaves[$i].trust -= 10>>
-	<<elseif ($arcadeUpgradeCollectors > 0)>>
-		<<if ($slaves[$i].health > 20)>>
-			<<set $slaves[$i].health -= 5>>
-		<<elseif ($slaves[$i].health > -50)>>
-			<<set $slaves[$i].health -= 3>>
-		<<else>>
-			<<set $slaves[$i].health -= 1>>
+	/* Health */
+	<<if $arcadeUpgradeHealth == 2 && $slaves[$i].health < 40>>
+		<<set $slaves[$i].health += 2>>
+	<<elseif $slaves[$i].health > 20>>
+		<<set $slaves[$i].health -= 5>>
+	<<elseif $arcadeUpgradeHealth == 1 && $slaves[$i].health < -30>>
+		<<set $slaves[$i].health += 2>>
+	<<elseif $slaves[$i].health > -50>>
+		<<set $slaves[$i].health -= 3>>
+	<<elseif $slaves[$i].health > -90>>
+		<<set $slaves[$i].health -= 1>>
+	<</if>>
+	/* Curatives */
+	<<if $arcadeUpgradeHealth == 2>>
+		<<set $slaves[$i].curatives = 2>>
+	<<elseif $arcadeUpgradeHealth == 1>>
+		<<set $slaves[$i].curatives = 1>>
+	<</if>>
+	/* Stimulation or lack thereof trust/devotion effect */
+	<<if ($arcadeUpgradeInjectors > 0)>>
+		<<if $arcadeUpgradeInjectors == 2>>
+			<<set $slaves[$i].aphrodisiacs = 2>>
 		<</if>>
-		<<set $slaves[$i].trust -= 5>>
+		<<set $slaves[$i].devotion -= 5, $slaves[$i].trust -= 10>>
 	<<else>>
-		<<if ($slaves[$i].health > -20)>>
-			<<set $slaves[$i].health -= 5>>
-		<<elseif ($slaves[$i].health > -90)>>
-			<<set $slaves[$i].health -= 1>>
-		<</if>>
 		<<set $slaves[$i].trust -= 5>>
 	<</if>>
+	/* Muscles */
 	<<if ($slaves[$i].muscles > -100)>>
 		<<set $slaves[$i].muscles-->>
 	<</if>>
@@ -76,11 +76,11 @@
 		<<else>>
 			is confined in $arcadeName.
 		<</if>>
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<include "SA work a glory hole">>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<print saWorkAGloryHole($slaves[$i])>>
 	<<else>>
 		<<silently>>
 			<<include "SA chooses own job">>
-			<<include "SA work a glory hole">>
+			<<print saWorkAGloryHole($slaves[$i])>>
 		<</silently>>
 	<</if>>
 	<<if ($arcadeUpgradeCollectors > 0)>>
@@ -156,7 +156,7 @@
 	<</if>>
 <</for>>
 
-<<if _DL > 0>>
+<<if _DL + $fuckdolls > 0>>
 	<br><br>&nbsp;&nbsp;&nbsp;
 	<<if _milked == 1>>
 		One of them is lactating and spends her time in $arcadeName being simultaneously milked and fucked.
@@ -193,16 +193,26 @@
 	<<elseif _cockmilked > 1>>
 		_cockmilked of them retain testicles and are brutally cockmilked as they are used.
 	<</if>>
-	The arcade makes you @@.yellowgreen;<<print cashFormat(_profits)>>@@ from selling the inmates' holes<<if ($arcadeUpgradeCollectors > 0)>> and @@.yellowgreen;<<print cashFormat(_milkprofits)>>@@ from selling the fluids they produced<</if>> this week.
-	<<if ($arcologies[0].FSDegradationist > 20)>>
-	<<elseif ($arcologies[0].FSPaternalist > 20)>>
-		<<run repX(forceNeg(Math.trunc(_profits/20)), "arcade")>>
+
+	The arcade makes you
+	<<if $publicFuckdolls == 0>>
+		@@.yellowgreen;<<print cashFormat(_profits)>>@@ from selling the inmates' holes
 	<<else>>
-		<<run repX(forceNeg(Math.trunc(_profits/100)), "arcade")>>
+		@@.green;more reputable@@ from freely providing the inmates' holes
+	<</if>>
+	<<if $arcadeUpgradeCollectors > 0 && $publicFuckdolls == 0>>
+		and
+	<</if>>
+	<<if $arcadeUpgradeCollectors > 0>>
+		@@.yellowgreen;<<print cashFormat(_milkprofits)>>@@ from selling the fluids they produced
+	<</if>>
+	this week.
+	<<if ($arcologies[0].FSPaternalist > 20)>>
+		<<run repX(forceNeg(Math.trunc(_profits/20)), "arcade")>>
 	<</if>>
 <</if>>
 
-<<if ($arcadeUpgradeFuckdolls == 1) && (_DL > $arcade)>>
+<<if ($arcadeUpgradeFuckdolls == 2)>>
 	<<set $activeSlave = 0, _Age = -1, _FD = -1, _MB = -1, _Con = -1>>
 	<<for _dI = 0; _dI < _DL; _dI++>>
 		<<if $slaves[$i].sentence == 0>> /* lets not convert slaves we are punishing into fuckdolls */
@@ -244,7 +254,7 @@
 	<</if>>
 	<<if $activeSlave != 0>>
 		<<setLocalPronouns $activeSlave>>
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;$activeSlave.slaveName is low-quality and surplus to the needs of the arcade, so $he has been converted into a Fuckdoll.
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;$activeSlave.slaveName is low-quality merchandise, so $he has been converted into a Fuckdoll.
 		<<= removeActiveSlave() >>
 		<<if $activeSlave == 0>> /% if not zero then technically there was an error INVALID SLAVE %/
 			<<set $fuckdolls++, _SL-->>
@@ -268,7 +278,7 @@
 			b.whoreCosts += si.cost;
 			b.rep += si.rep;
 		}
-		b.maintenance = State.variables.arcade * State.variables.facilityCost * (0.5 + 0.2 * State.variables.arcadeUpgradeInjectors + 0.2 * State.variables.arcadeUpgradeCollectors);
+		b.maintenance = State.variables.arcade * State.variables.facilityCost * (0.05 + 0.02 * State.variables.arcadeUpgradeInjectors + 0.05 * State.variables.arcadeUpgradeCollectors);
 		b.totalIncome = b.whoreIncome;
 		b.totalExpenses = b.whoreCosts + b.maintenance;
 		b.profit = b.totalIncome - b.totalExpenses;
diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw
index 542e2e44aaa3e90abb3d407c009531a623bcc64c..54d72d7f7c811524977acc08206fd6861a8bb93d 100644
--- a/src/uncategorized/arcmgmt.tw
+++ b/src/uncategorized/arcmgmt.tw
@@ -3,6 +3,66 @@
 <<if $useTabs == 0>>__Arcology Management__<</if>>
 <br>
 
+/* Sexual Satisfaction */
+
+<<if $arcologies[0].FSDegradationist !== "unset">>
+	<<if $arcadeDemandDegResult == 1>>
+		Your endeavors to see slaves as less than human are hampered as citizens find that there are too few slaves ready to be treated as sexual objects around. @@.red;Development towards a degradationist society is damaged@@ as a result.<br>
+	<<elseif $arcadeDemandDegResult == 2>>
+		Your endeavors to see slaves as less than human are slightly hampered as citizens find that thare are not quite enough slaves ready to be treated as sexual objects around. @@.red;Development towards a degradationist society is lightly damaged@@ as a result.<br>
+	<<elseif $arcadeDemandDegResult == 3>>
+		Your citizens were expecting to see more slaves available as sexual objects, but there aren't enough complaints to damage your societal development at this time.<br>
+	<<elseif $arcadeDemandDegResult == 4>>
+		Your citizens find themselves surrounded by slaves ready to be degraded and used as sexual objects, this @@.green;helps to establish your degradationist society@@.<br>
+	<<elseif $arcadeDemandDegResult == 5>>
+		You are providing your citizens with an adequate amount of slaves to be used as sexual objects, as is expected in your degradationist society.<br>
+	<</if>>
+<</if>>
+<<if $lowerClassSexDemandResult == 1>>
+	Your lower class citizens have @@.red;far too few options for sexual relief@@ inside your arcology.
+	<<if $lowerClassSatisfied == 0>>
+		They trust you will take care of this issue as soon as you are settled in.<br>
+	<<else>>
+		It is @@.red;causing dissatisfaction@@ among your lower class.<br>
+	<</if>>
+<<elseif $lowerClassSexDemandResult == 2>>
+	Your lower class citizens need @@.red;some more avenues for sexual relief@@ inside your arcology.
+	<<if $lowerClassSatisfied == 1>>
+		They see @@.green;you are on the right track@@ and anticipate further improvements.<br>
+	<<elseif $lowerClassSatisfied == 0>>
+		Their patience is being tested.<br>
+	<<else>>
+		It is @@.red;causing dissatisfaction@@ among your lower class.
+	<</if>>
+<<elseif $lowerClassSexDemandResult == 3>>
+	Your lower class citizens have no issue finding the sexual relief they need inside your arcology.
+	<<if $lowerClassSatisfied == 1>>
+		They are @@.green;delighted@@ with how quickly you've provided for them.<br>
+	<<else>>
+		<br>
+	<</if>>
+<<elseif $lowerClassSexDemandResult == 4>>
+	Your lower class citizens are @@.green;happy with the availability of sexual services@@ inside your arcology.<br>
+<<elseif $lowerClassSexDemandResult == 5>>
+	Your lower class citizens are @@.green;delighted with the abundence of sexual services@@ inside your arcology.<br>
+<</if>>
+<<print $NPCMarketShareLC/10>>% of the lower class market is serviced by other suppliers operating inside your arcology.<br>
+
+<<if $sexSupplyBarriersLC == 1>>
+	<<run cashX(1000, "policies")>>
+<<elseif $sexSupplyBarriersLC == 2>>
+	<<run cashX(5000, "policies")>>
+<<elseif $sexSupplyBarriersLC == 3>>
+	<<run cashX(20000, "policies")>>
+<<elseif $sexSupplyBarriersLC == 4>>
+	<<run cashX(60000, "policies")>>
+<</if>>
+<<if $sexSubsidiesLC > 0>>
+	<<run cashX($NPCSlaves.lowerClass * Math.pow($sexSubsidiesLC, 2) * 0.25, "policies")>>
+<</if>>
+
+<br>
+
 /* New Population
 Populations depend on the 'demand' for them. People flock to the Free City when there are jobs. Jobs for lower class people depend on prosperity and the need for labor from other classes. They compete with slaves for work.
 More elite citizens require their own slaves and will cause the population of slaves to increase as they move in. FS and policies will impact how many slaves they desire and how productive they are. The PC's menials also compete for labor within the arcology. Slaves can now 'expire', speed depends on FS and policies. Default lifespan for menials is an average of ~4 years. */
@@ -13,10 +73,10 @@ _slaveDemandU = 1, /*Changes to upperclass slave demand*/
 _slaveDemandT = 1, /*Changes to topclass slave demand*/
 _expirationFS = 0.005, /*changes to likelihood of slave death*/
 _slaveProductivity = 0.8, /*changes to slave productivity*/
-_lowerClass = 0, /*fixed amount of changes to lowerclass interest to move in*/
-_lowerClassP = 1, /*scaling changes to lowerclass interest ("stacking bonus")*/
-_welfareFS = 0.004, /*changes to likelihood of lowerclass getting enslaved*/
-_middleClass = 0, /*see lowerclass examples for the rest of these*/
+_lowerClass = 0, /*fixed amount of changes to lowerClass interest to move in*/
+_lowerClassP = 1, /*scaling changes to lowerClass interest ("stacking bonus")*/
+_welfareFS = 0.004, /*changes to likelihood of lowerClass getting enslaved*/
+_middleClass = 0, /*see lowerClass examples for the rest of these*/
 _middleClassP = 1,
 _upperClass = 0,
 _upperClassP = 1,
@@ -819,19 +879,28 @@ _SCD = Math.trunc(($upperClass * (2 + _slaveDemandU)) + ($topClass * (12 + _slav
 /*Lower Class Citizens*/
 /*Work left for lower class citizens*/
 <<set _LCD = Math.trunc((($LSCBase * ($localEcon / 100)) + ($arcologies[0].prosperity * 4) + _lowerClass + (($middleClass + $visitors * 0.6) * 1.5) + (($upperClass + $visitors * 0.2) * 3.5) + ($topClass * 18) - ($NPCSlaves + $menials) * _slaveProductivity) * $rentEffectL * _lowerClassP)>>
+<<if $lowerClassSatisfied != 0>>
+	<<set _LCD *= 1 + $lowerClassSatisfied * 0.06>>
+<</if>>
 <<if _LCD < 0>>
 	<<set _LCD = 0>>
 <</if>>
 <<if isNaN(_LCD)>>
 	<br>@@.red;LCD is NaN, report this issue!@@
 <<else>>/*Changing population depending on work available*/
+	<br>
+	<<if $lowerClassSatisfied < 0>>
+		Your lower class is @@.red;sexually frustrated@@ and would rather live elsewhere.
+	<<elseif $lowerClassSatisfied > 0>>
+		Your lower class is @@.green;sexually satiated@@ and their happiness attracts others.
+	<</if>>
 	<<if $lowerClass < _LCD>>
 		<<set _LCImmigration = Math.trunc((_LCD - $lowerClass) * (0.3 * _terrain)) + 1,
 		$lowerClass += _LCImmigration>>
 		<<if _LCImmigration > 1>>
-			<br>@@.green;<<print _LCImmigration>> lower class citizens@@ moved to your arcology.
+			@@.green;<<print _LCImmigration>> lower class citizens@@ moved to your arcology.
 		<<elseif _LCImmigration > 0>>
-			<br>@@.green;One lower class citizen@@ moved to your arcology.
+			@@.green;One lower class citizen@@ moved to your arcology.
 		<</if>>
 	<<elseif $lowerClass > _LCD>>
 		<<set _LCEmigration = Math.trunc(($lowerClass - _LCD) * 0.6) + 1>>
@@ -843,14 +912,14 @@ _SCD = Math.trunc(($upperClass * (2 + _slaveDemandU)) + ($topClass * (12 + _slav
 		<<set $lowerClass -= _LCEmigration,
 		_enslaved += _enslavedEmigrants>>
 		<<if _LCEmigration > 1>>
-			<br>@@.red;<<print _LCEmigration>> lower class citizens@@ had no work and tried to leave your arcology.
+			@@.red;<<print _LCEmigration>> lower class citizens@@ had no work and tried to leave your arcology.
 			<<if _enslavedEmigrants > 1>>
 				@@.green;<<print _enslavedEmigrants>> of them were enslaved instead.@@
 			<<elseif _enslavedEmigrants > 0>>
 				@@.green;One of them was enslaved instead.@@
 			<</if>>
 		<<elseif _LCEmigration > 0>>
-			<br>@@.red;One lower class citizen@@ left your arcology due to a lack of work.
+			@@.red;One lower class citizen@@ left your arcology due to a lack of work.
 		<</if>>
 	<</if>>
 	<<if _enslaved > 0>>
@@ -1025,7 +1094,7 @@ _percTopClass = Math.trunc(($topClass / ($ACitizens + $ASlaves)) * 1000) / 10>>
 <<if $arcologies[0].FSPhysicalIdealistSMR == 1>>The arcology must import a very large quantity of nutritive protein to nourish its slaves.<</if>>
 <<if $arcologies[0].FSHedonisticDecadenceSMR == 1>>The arcology must import a very large quantity of fattening food to plump up its slaves.<</if>>
 
-<<if $ACitizens > $ASlaves*2>>
+<<if $ACitizens > $ASlaves*2>> /*This will need to go away Eventually*/
 	Since most citizens do not own sex slaves, @@.yellowgreen;demand for sexual services is intense.@@
 <<elseif $ACitizens > $ASlaves>>
 	Since many citizens do not own sex slaves, @@.yellowgreen;demand for sexual services is healthy.@@
@@ -1113,10 +1182,13 @@ You own
 				<<set _menialEarnings += $Sweatshops*7000>>
 				<<set _menialEarnings += ($menials-$Sweatshops*500)*10>>
 			<<else>>
-				<<set _menialEarnings += $menials*10>>
+				<<set _menialEarnings += $menials*14>>
 			<</if>>
 		<</if>>
 	<</if>>
+	<<if $arcologies[0].FSDegradationistLaw == 1>>
+		<<set _menialEarnings -= 3 * $arcadePrice>>
+	<</if>>
 	<<if $menials > 1>> <<print num($menials)>> menial slaves<<if ($menialBioreactors > 0) && ($fuckdolls == 0)>> and<<else>>,<</if>><<else>>one menial slave<<if ($menialBioreactors > 0) && ($fuckdolls == 0)>> and<<else>>,<</if>><</if>>
 	<<run cashX(_menialEarnings, "menialTrades")>>
 <</if>>
@@ -1130,15 +1202,35 @@ You own
 <</if>>
 
 
-<<if $fuckdolls > 0>>
-	<<set _fuckdollsEarnings = $fuckdolls*(15+(10*$arcologies[0].FSDegradationistLaw))>>
-	<<if $arcade && $arcadeUpgradeMenials>><<set _fuckdollsEarnings += $fuckdolls*5>><</if>>
-	<<if $fuckdolls > 1>> <<print num($fuckdolls)>> standard fuckdolls,<<else>>one fuckdoll,<</if>>
-	<<set _fuckdollsEarnings += random(1,10)>>
+<<if $fuckdolls > 0>> 
+	<<if ($fuckdolls > $arcade - $arcadeSlaves) && ($arcade > $arcadeSlaves)>>
+		<<set _fuckdollsArcade = $arcade - $arcadeSlaves>>
+	<<elseif $fuckdolls < $arcade - $arcadeSlaves>>
+		<<set _fuckdollsArcade = $fuckdolls>>
+	<<else>>
+		<<set _fuckdollsArcade = 0>>
+	<</if>>
+	<<if $arcadeUpgradeInjectors == 0>>
+		<<set _arcadeUpgradeInjectors = 0>>
+	<<elseif $arcadeUpgradeInjectors == 1>>
+		<<set _arcadeUpgradeInjectors = 1>>
+	<<else>>
+		<<set _arcadeUpgradeInjectors = 1.5>>
+	<</if>>
+	<<set _fuckdollsEarnings = Math.trunc((($fuckdolls - _fuckdollsArcade) * 140 + _fuckdollsArcade * (175 + 35 * _arcadeUpgradeInjectors)) * ($arcadePrice - 0.5) / 10)>> /*The "/ 10" at the end is just there to keep the price in line with other current prices, hopefully prices will get to a spot where this can be dropped*/
+	<<if $fuckdolls > 1>> <<print num($fuckdolls)>> standard fuckdolls,<<elseif $fuckdolls == 1>>one fuckdoll,<</if>><<if _fuckdollsArcade > 1>> <<print num(_fuckdollsArcade)>> of them are stationed in the arcade,<<elseif _fuckdollsArcade == 1 && $fuckdolls > 1>>one of them is stationed in the arcade,<<elseif _fuckdollsArcade == 1>>it is stationed in the arcade,<</if>>
+	<<if $publicFuckdolls == 1>>
+		<<run repX(_fuckdollsEarnings / 5, "fuckdolls")>>
+		<<set _fuckdollsEarnings = Math.trunc($fuckdolls * -0.5)>> /*The upkeep of a fuckdoll*/
+	<</if>>
 	<<run cashX(_fuckdollsEarnings, "fuckdolls")>>
 <</if>>
 
+<<if _menialEarnings + _bioreactorEarnings + _fuckdollsEarnings > 0>>
 earning you @@.yellowgreen;<<print cashFormat(_menialEarnings + _bioreactorEarnings + _fuckdollsEarnings)>>.@@
+<<else>>
+costing you @@.red;<<print cashFormat(_menialEarnings + _bioreactorEarnings + _fuckdollsEarnings)>>@@ on account of your free fuckdoll policiy.
+<</if>>
 <</if>>
 
 <<set _AWeekGrowth = $AGrowth>>
@@ -1253,8 +1345,9 @@ earning you @@.yellowgreen;<<print cashFormat(_menialEarnings + _bioreactorEarni
 	<</if>>
 	<<set _AWeekGrowth += _schools>>
 	<<if $arcologies[0].FSDegradationistLaw == 1>>
-		Requiring menials to be given time to fuck human sex toys in the arcade reduces labor efficiency, slowing growth.
+		Requiring menials to be given time to fuck human sex toys in the arcade reduces labor efficiency, slowing growth and costs money for each menial slave you own.
 		<<set _AWeekGrowth-->>
+		<<run cashX($menials * 3 * $arcadePrice, "fuckdolls")>>
 	<</if>>
 	<<if $arcologies[0].FSBodyPuristLaw == 1>>
 		The drug surcharge used to fund the purity regime reduces growth.
diff --git a/src/uncategorized/buySlaves.tw b/src/uncategorized/buySlaves.tw
index be6622fe1bf32f5de725f97067d07155068e0068..75e93f40973fd27636ed241b56d3a917598bd02f 100644
--- a/src/uncategorized/buySlaves.tw
+++ b/src/uncategorized/buySlaves.tw
@@ -427,11 +427,8 @@ The market price of menials is <<print cashFormat(_menialPrice)>>.
 <</if>>
 [[(all)|Buy Slaves][cashX(($menials*(menialSlaveCost(-$menials))), "menialTransfer"),$menialDemandFactor-=$menials,$menials = 0]]
 	<<if $arcologies[0].FSPaternalist == "unset">>
-		<<if $arcadeUpgradeFuckdolls == 1>>
-			<<set _fconvertCost = 1000>>
-			<<if _menialPrice >= 1100>>
-				<<set _fconvertCost = (_menialPrice+100)>>
-			<</if>>
+		<<if $arcadeUpgradeFuckdolls > 0>>
+			<<set _fconvertCost = 100>>
 			<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Convert to Fuckdoll|Buy Slaves][$menials-=1,$fuckdolls+=1,cashX(forceNeg(_fconvertCost), "menialTransfer")]]
 			<<if $menials >= 10>>
 				[[(x10)|Buy Slaves][$menials-=10,$fuckdolls+=10,cashX(forceNeg(10*(_fconvertCost)), "menialTransfer")]]
@@ -443,11 +440,11 @@ The market price of menials is <<print cashFormat(_menialPrice)>>.
 			//Conversion costs <<print cashFormat(_fconvertCost)>> each//
 		<</if>>
 		<<if $dairyFeedersUpgrade > 0>>
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Convert to Bioreactor|Buy Slaves][$menials-=1,$menialBioreactors+=1,cashX(-500, "menialTransfer")]]
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Convert to Bioreactor|Buy Slaves][$menials-=1,$menialBioreactors+=1,cashX(-100, "menialTransfer")]]
 			<<if $menials >= 10>>
-				[[(x10)|Buy Slaves][$menials-=10,$menialBioreactors+=10,cashX(-5000, "menialTransfer")]]
+				[[(x10)|Buy Slaves][$menials-=10,$menialBioreactors+=10,cashX(-1000, "menialTransfer")]]
 			<<if $menials >= 100>>
-				[[(x100)|Buy Slaves][$menials-=100,$menialBioreactors+=100,cashX(-50000, "menialTransfer")]]
+				[[(x100)|Buy Slaves][$menials-=100,$menialBioreactors+=100,cashX(-10000, "menialTransfer")]]
 			<</if>>
 			<</if>>
 			[[(all)|Buy Slaves][$menialBioreactors+=$menials,cashX(forceNeg(500*$menials), "menialTransfer"),$menials=0]]
@@ -464,20 +461,19 @@ The market price of menials is <<print cashFormat(_menialPrice)>>.
 	<br>You do not own any standard Fuckdolls.
 <</if>>
 <<if ($fuckdolls > 0) || ($arcologies[0].FSPaternalist == "unset")>>
-The market price of standard Fuckdolls is <<print cashFormat(_menialPrice*2)>>.
+The market price of standard Fuckdolls is <<print cashFormat(_menialPrice)>>.
 <<set _optionsBreak = 0>>
 <<if _bulkMax > 0>>
-<<if $arcologies[0].FSPaternalist == "unset" && $cash > _menialPrice*2>>
-	[[Buy|Buy Slaves][$fuckdolls+=1,$menialSupplyFactor-=1,cashX(forceNeg(_menialPrice*2), "fuckdollsTransfer")]]
-	<<if $cash > (menialSlaveCost(10)*2)*10>>
-		[[(x10)|Buy Slaves][$fuckdolls+=10,$menialSupplyFactor-=10,cashX(forceNeg((menialSlaveCost(10)*2)*10), "fuckdollsTransfer")]]
+<<if $arcologies[0].FSPaternalist == "unset" && $cash > _menialPrice>>
+	[[Buy|Buy Slaves][$fuckdolls+=1,$menialSupplyFactor-=1,cashX(forceNeg(_menialPrice), "fuckdollsTransfer")]]
+	<<if $cash > menialSlaveCost(10)*10>>
+		[[(x10)|Buy Slaves][$fuckdolls+=10,$menialSupplyFactor-=10,cashX(forceNeg(menialSlaveCost(10)*10), "fuckdollsTransfer")]]
 	<</if>>
-	<<if $cash > (menialSlaveCost(100)*2)*100>>
-		[[(x100)|Buy Slaves][$fuckdolls+=100,$menialSupplyFactor-=100,cashX(forceNeg((menialSlaveCost(100)*2)*100), "fuckdollsTransfer")]]
+	<<if $cash > menialSlaveCost(100)*100>>
+		[[(x100)|Buy Slaves][$fuckdolls+=100,$menialSupplyFactor-=100,cashX(forceNeg(menialSlaveCost(100)*100), "fuckdollsTransfer")]]
 	<</if>>
-	<<if $cash > ((_menialPrice+1)*4)>>
-		<<set _fuckdollBulkPremium = Math.trunc(1 + Math.clamp($cash/(_menialPrice*2),0,_bulkMax)/400)>>
-		[[(max)|Buy Slaves][$fuckdolls+=Math.trunc(Math.clamp($cash/(_menialPrice*2+_fuckdollBulkPremium),0,_bulkMax)),$menialSupplyFactor-=Math.trunc(Math.clamp($cash/(_menialPrice*2+_fuckdollBulkPremium),0,_bulkMax)),cashX(forceNeg(Math.trunc(Math.clamp($cash/(_menialPrice*2+_fuckdollBulkPremium),0,_bulkMax))*(_menialPrice*2+_fuckdollBulkPremium)), "fuckdollsTransfer")]]
+	<<if $cash > ((_menialPrice+1)*2)>>
+		[[(max)|Buy Slaves][$fuckdolls+=Math.trunc(Math.clamp($cash/_menialPrice,0,_bulkMax)),$menialSupplyFactor-=Math.trunc(Math.clamp($cash/_menialPrice,0,_bulkMax)),cashX(forceNeg(Math.trunc(Math.clamp($cash/_menialPrice,0,_bulkMax))*_menialPrice), "fuckdollsTransfer")]]
 	<</if>>
 	//Bulk transactions may require offering a premium.//
 	<<set _optionsBreak = 1>>
@@ -485,14 +481,14 @@ The market price of standard Fuckdolls is <<print cashFormat(_menialPrice*2)>>.
 <</if>>
 <<if $fuckdolls >= 1>>
 	<<if _optionsBreak>>|<</if>>
-	[[Sell|Buy Slaves][$fuckdolls-=1,$menialDemandFactor-=1,cashX((_menialPrice*2), "fuckdollsTransfer")]]
+	[[Sell|Buy Slaves][$fuckdolls-=1,$menialDemandFactor-=1,cashX(_menialPrice, "fuckdollsTransfer")]]
 <<if $fuckdolls >= 10>>
-	[[(x10)|Buy Slaves][$fuckdolls-=10,$menialDemandFactor-=10,cashX((menialSlaveCost(-10)*20), "fuckdollsTransfer")]]
+	[[(x10)|Buy Slaves][$fuckdolls-=10,$menialDemandFactor-=10,cashX((menialSlaveCost(-10)*10), "fuckdollsTransfer")]]
 <<if $fuckdolls >= 100>>
-	[[(x100)|Buy Slaves][$fuckdolls-=100,$menialDemandFactor-=100,cashX((menialSlaveCost(-100)*200), "fuckdollsTransfer")]]
+	[[(x100)|Buy Slaves][$fuckdolls-=100,$menialDemandFactor-=100,cashX((menialSlaveCost(-100)*100), "fuckdollsTransfer")]]
 <</if>>
 <</if>>
-[[(all)|Buy Slaves][cashX($fuckdolls*(menialSlaveCost(-$fuckdolls)*2), "fuckdollsTransfer"),$menialDemandFactor-=$fuckdolls,$fuckdolls = 0]]
+[[(all)|Buy Slaves][cashX($fuckdolls*(menialSlaveCost(-$fuckdolls), "fuckdollsTransfer")),$menialDemandFactor-=$fuckdolls,$fuckdolls = 0]]
 <</if>>
 <</if>>
 
diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw
index f27d22716421590a27280a0ecade20ab23a45332..5fc41166d1f765ad5200b6b59d390d3507f8e7c4 100644
--- a/src/uncategorized/clubReport.tw
+++ b/src/uncategorized/clubReport.tw
@@ -4,7 +4,7 @@
 </span>
 
 <<SlaveSort $ClubiIDs>>
-<<set _DL = $ClubiIDs.length, $clubSlaves = _DL, _SL = $slaves.length, $clubBonuses = 0, $DJRepBonus = 0, $legendaryEntertainerID = 0, _FLsFetish = 0>>
+<<set _DL = $ClubiIDs.length, $clubSlaves = _DL, _SL = $slaves.length, $clubBonuses = 0, $legendaryEntertainerID = 0, _FLsFetish = 0>>
 <<set $legendaryWombID = 0>>
 <<set _implanted =0, _modded = 0, _old = 0, _pure = 0, _slim = 0, _stacked = 0, _unmodded = 0, _XX = 0, _XY = 0, _young = 0, _pregYes = 0, _pregNo = 0, _minBonus = 50, _maxBonus = 150>>
 
@@ -50,7 +50,6 @@
 	&nbsp;&nbsp;&nbsp;&nbsp;<<= SlaveFullName($DJ)>> is performing as the DJ.
 	<<if $DJ.relationship == -3 && $DJ.devotion > 50>>
 		$He tries $his best to be your energetic, cheerful wife.
-		<<set $DJRepBonus += 0.1>>
 	<</if>>
 	<<if (_FLsFetish == 1)>>
 		$He's expected to be the innovative, beautiful DJ spinning beats one minute, and come out of $his booth to grind on the floor the next; $he enjoys the interplay, and finds greater @@.lightcoral;pleasure in exhibitionism.@@
@@ -59,52 +58,38 @@
 	<</if>>
 	<<if $DJ.eyes == -2>>
 		$His lack of eyesight doesn't slow $him down; rather, it strengthens $his other senses. $His tracks have a distinct sound, since $he experiences noise as $his sight.
-		<<set $DJRepBonus += 0.15>>
 	<</if>>
 	<<if ($DJ.skill.entertainment <= 10)>>
 		Though $DJ.slaveName does $his best to lead on the club, with $his lack of skill $he can do little.
 	<<elseif ($DJ.skill.entertainment <= 30)>>
 		$DJ.slaveName's basic skills marginally @@.green;improve@@ the atmosphere on $clubName.
-		<<set $DJRepBonus += 0.05>>
 	<<elseif ($DJ.skill.entertainment <= 60)>>
 		$DJ.slaveName's skills @@.green;improve@@ the atmosphere on $clubName.
-		<<set $DJRepBonus += 0.1>>
 	<<elseif ($DJ.skill.entertainment < 100)>>
 		$DJ.slaveName's skills greatly @@.green;improve@@ the atmosphere on $clubName.
-		<<set $DJRepBonus += 0.15>>
 	<<elseif ($DJ.skill.entertainment >= 100)>>
 		$DJ.slaveName's mastery immensely @@.green;improves@@ the atmosphere on $clubName.
-		<<set $DJRepBonus += 0.20>>
 	<</if>>
 	<<if ($DJ.muscles > 5) && ($DJ.muscles <= 95)>>
 		$His toned body helps $him lead $his fellow club girls by letting $him dance all night.
-		<<set $DJRepBonus += 0.05>>
 	<</if>>
 	<<if ($DJ.intelligence+$DJ.intelligenceImplant > 15)>>
 		$He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience.
-		<<set $DJRepBonus += 0.05*Math.floor(($DJ.intelligence+$DJ.intelligenceImplant)/32)>>
 	<</if>>
 	<<if ($DJ.face > 95)>>
 		$His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance.
-		<<set $DJRepBonus += 0.05>>
 	<</if>>
 	<<if setup.DJCareers.includes($DJ.career)>>
 		$He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth.
-		<<set $DJRepBonus += 0.05>>
 	<<elseif $DJ.skill.DJ >= $masteredXP>>
 		$He has musical experience from working for you, giving $his tracks actual depth.
-		<<set $DJRepBonus += 0.05>>
 	<<else>>
 		<<set $slaves[_FLs].skill.DJ += random(1,Math.ceil(($DJ.intelligence+$DJ.intelligenceImplant)/15) + 8)>>
 	<</if>>
-	<<if (_DL < 10)>>
-		<<set $slavesGettingHelp = 0>>
-		<<if $universalRulesFacilityWork == 1>>
-			<<for $i = 0; $i < _SL; $i++>>
-				<<if ($slaves[$i].assignment == "serve the public")>>
-					<<set $slavesGettingHelp++>>
-				<</if>>
-			<</for>>
+	<<if (_DL + $slavesGettingHelp < 10)>>
+		<<set $i = _FLs>> /* apply following SA passages to facility leader */
+		<<if ($legendaryEntertainerID == 0) && ($slaves[_FLs].prestige == 0) && ($slaves[_FLs].entertainSkill >= 100) && ($slaves[_FLs].devotion > 50)>>
+			<<set $legendaryEntertainerID = $slaves[_FLs].ID>>
 		<</if>>
 		<<if (_DL+$slavesGettingHelp < 10)>>
 			<<set $i = _FLs>> /* apply following SA passages to facility leader */
@@ -119,6 +104,7 @@
 			<</if>>
 			<<run repX(Math.trunc(($beauty*$FResult)*(1+(0.003*$slaves[_FLs].skill.entertainment))*0.1*0.5), "club", $slaves[_FLs])>>
 		<</if>>
+		<<run repX(Math.trunc(($slaves[_FLs].sexAmount*$slaves[_FLs].sexQuality)*(1+(0.003*$slaves[_FLs].entertainSkill))*0.1*0.5), "club", $slaves[_FLs])>>
 	<</if>>
 	<<if (_DL > 0)>><br><br><</if>>
 <</if>>
diff --git a/src/uncategorized/costsWidgets.tw b/src/uncategorized/costsWidgets.tw
index 0941a0542f188e4f8ae57652705c1f01c98dbc23..b127d5d8d722c2d10e61e1d6dc3c3198285f6843 100644
--- a/src/uncategorized/costsWidgets.tw
+++ b/src/uncategorized/costsWidgets.tw
@@ -359,10 +359,9 @@
 		@@.yellowgreen;<<print cashFormat(($drugsCost*2))>>@@
 		<<set _individualCosts += ($drugsCost*2)>>
 	<</switch>>
-	<<if $args[0].curatives == 1 && $args[0].assignmentVisible != 1>>
-	<<elseif $args[0].curatives > 0>>
+	<<if $args[0].curatives > 0>>
 		<br>&nbsp;&nbsp;&nbsp;&nbsp;<i>Health drugs:</i>
-		@@.yellowgreen;<<print cashFormat($drugsCost+($args[0].curatives*$drugsCost))>>@@
+		@@.yellowgreen;<<print cashFormat($args[0].curatives*$drugsCost)>>@@
 		<<set _individualCosts += $drugsCost+($args[0].curatives*$drugsCost)>>
 	<</if>>
 	<<if ($args[0].aphrodisiacs !== 0)>>
@@ -605,6 +604,8 @@ total: 0
 /*Slave Jobs*/
 fucktoy: 0,
 publicServant: 0,
+gloryholeArcade: 0,
+gloryhole: 0,
 
 concubine: 0,
 headGirl: 0,
@@ -612,6 +613,7 @@ bodyguard: 0,
 recruiter: 0,
 
 /*Slaves in general*/
+fuckdolls: 0,
 slaveTransfer: 0,
 babyTransfer: 0,
 birth: 0,
diff --git a/src/uncategorized/endWeek.tw b/src/uncategorized/endWeek.tw
index 51155d1610a83924a20c4a28da56085974ea4f46..8be436bdea0040640c41b6ff438c5063dd17f03a 100644
--- a/src/uncategorized/endWeek.tw
+++ b/src/uncategorized/endWeek.tw
@@ -234,7 +234,7 @@
 	<<set $PC.pregWeek++>>
 <</if>>
 
-<<set $HGEnergy = 0, $HGCum = 0, $HGSlaveSuccess = 0, $HeadGirl = 0, $Recruiter = 0, $Madam = 0, $madamCashBonus = 0, $DJ = 0, $DJRepBonus = 0, $Milkmaid = 0, $Farmer = 0, $Collectrix = 0, $Stewardess = 0, $Schoolteacher = 0, $Wardeness = 0, $Concubine = 0, $Attendant = 0, $Matron = 0, $Nurse = 0, $Bodyguard = 0, $fuckSlaves = 0, $freeSexualEnergy = 0, $publicServants = 0, $cumSlaves = 0, $averageDick = 0, $slavesWithWorkingDicks = 0>>
+<<set $HGEnergy = 0, $HGCum = 0, $HGSlaveSuccess = 0, $HeadGirl = 0, $Recruiter = 0, $Madam = 0, $madamCashBonus = 0, $DJ = 0, $unDJ = 0, $DJRepBonus = 0, $Milkmaid = 0, $Farmer = 0, $Collectrix = 0, $Stewardess = 0, $Schoolteacher = 0, $Wardeness = 0, $Concubine = 0, $Attendant = 0, $Matron = 0, $Nurse = 0, $Bodyguard = 0, $fuckSlaves = 0, $freeSexualEnergy = 0, $publicServants = 0, $cumSlaves = 0, $averageDick = 0, $slavesWithWorkingDicks = 0, $slaveJobValues = {}>>
 
 /* GAMEOVERS */
 <<if $slaves.length < 1>>
diff --git a/src/uncategorized/fullReport.tw b/src/uncategorized/fullReport.tw
index dcf0e0edf3bfb30d44f9d3c7c2c04a02fbeaabcc..b821f4e2ffe616168d37eb83fb99dea7528e4d6c 100644
--- a/src/uncategorized/fullReport.tw
+++ b/src/uncategorized/fullReport.tw
@@ -18,7 +18,7 @@
 <<case "serve the public">>
 	<<= saServeThePublic($slaves[$i])>>
 <<case "work a glory hole">>
-	<<include "SA work a glory hole">>
+	<<print saWorkAGloryHole($slaves[$i])>>
 <<case "get milked">>
 	<<set $servantMilkersMultiplier = 1>>
 	<<include "SA get milked">>
diff --git a/src/uncategorized/manageArcology.tw b/src/uncategorized/manageArcology.tw
index 53817e1651a0ab54e57500cdba7fce574958e81c..fc4f59e1d13153b92df718b5e82f32f45069e9ab 100644
--- a/src/uncategorized/manageArcology.tw
+++ b/src/uncategorized/manageArcology.tw
@@ -165,6 +165,34 @@ __Construction__
 
 <br><br>
 
+__Sexual Service Policies__<br>
+If so desired, your assistant can help you manipulate the business environment within your arcology.<br>
+Currently outside parties are providing <<print $NPCMarketShareLC/10>>% of the sexual services.<br>
+<<if $NPCSexSubsidiesLC == 0>>
+	You can provide a minor subsidy for those selling sexual services to the lower class. //Upkeep is relative to the amount of sex provided by other parties// [[Minor Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 1]]<br>
+<<elseif $NPCSexSubsidiesLC == 1>>
+	You are providing a minor subsidy for those selling sexual services to the lower class. //Upkeep is relative to the amount of sex provided by other parties// [[Cancel Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 0]] | [[Moderate Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 2]]<br>
+<<elseif $NPCSexSubsidiesLC == 2>>
+	You are providing a moderate subsidy for those selling sexual services to the lower class. //Upkeep is relative to the amount of sex provided by other parties// [[Minor Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 1]] | [[Substantial Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 3]]<br>
+<<elseif $NPCSexSubsidiesLC == 3>>
+	You are providing a substantial subsidy for those selling sexual services to the lower class. //Upkeep is relative to the amount of sex provided by other parties// [[Moderate Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 2]] | [[Gratuitous Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 4]]<br>
+<<else>>
+	You are providing a gratuitous subsidy for those selling sexual services to the lower class. //Upkeep is relative to the amount of sex provided by other parties// [[Substantial Subsidy|Manage Arcology][$NPCSexSubsidiesLC = 3]]<br>
+<</if>>
+<<if $sexSupplyBarriersLC == 0>>
+	You can make things more difficult for those supplying sexual services in the lower class segment if you are willing to spend 1000 reputation and pay a flat upkeep of @@.yellowgreen;<<print cashFormat(1000)>>@@. <<if $rep > 1000>>[[Create Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 1, repX(-1000, "policies")]] <<else>>//You are not reputable enough//<</if>>
+<<elseif $sexSupplyBarriersLC == 1>>
+	You have forced some unneeded beauraucracy on those selling sexual services to the lower class making things a little more difficult. If you are willing to spend 1000 reputation you can change this policy. Increasing the beauraucracy further will cost a flat upkeep of @@.yellowgreen;<<print cashFormat(5000)>>@@. <<if $rep > 1000>>[[Abolish Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 0, repX(-1000, "policies")]] | [[Increase Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 2, repX(-1000, "policies")]]<<else>>//You are not reputable enough//<</if>>
+<<elseif $sexSupplyBarriersLC == 2>>
+	You have forced considerable beauraucracy on those selling sexual services to the lower class making things a little more difficult. If you are willing to spend 1000 reputation you can change this policy. Increasing the beauraucracy further will cost a flat upkeep of @@.yellowgreen;<<print cashFormat(20000)>>@@. <<if $rep > 1000>>[[Reduce Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 1, repX(-1000, "policies")]] | [[Increase Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 3, repX(-1000, "policies")]]<<else>>//You are not reputable enough//<</if>>
+<<elseif $sexSupplyBarriersLC == 3>>
+	You have forced stiffling beauraucracy on those selling sexual services to the lower class making things a little more difficult. If you are willing to spend 1000 reputation you can change this policy. Increasing the beauraucracy further will cost a flat upkeep of @@.yellowgreen;<<print cashFormat(60000)>>@@. <<if $rep > 1000>>[[Reduce Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 2, repX(-1000, "policies")]] | [[Increase Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 4, repX(-1000, "policies")]]<<else>>//You are not reputable enough//<</if>>
+<<else>>
+	You have forced suffocating beauraucracy on those selling sexual services to the lower class making things a little more difficult. If you are willing to spend 1000 reputation you can change this policy. <<if $rep > 1000>>[[Reduce Beauraucracy|Manage Arcology][$sexSupplyBarriersLC = 3, repX(-1000, "policies")]]<<else>>//You are not reputable enough//<</if>>
+<</if>>
+
+<br><br>
+
 __Population and Rent__<br>
 <<print $arcologies[0].name>> is home to the following;
 <<set _percACitizens = Math.trunc(($ACitizens / ($ACitizens + $ASlaves)) * 1000) / 10,
diff --git a/src/uncategorized/markets.tw b/src/uncategorized/markets.tw
index 9e8c2956958b012d5f1a383ecc9e60c73cc718aa..9ad8835f5d11589254bb74b195117c19c77b02c2 100644
--- a/src/uncategorized/markets.tw
+++ b/src/uncategorized/markets.tw
@@ -8,7 +8,7 @@ This is an area of the concourse occupied by large stores and markets, many of w
 
 <<if $arcade == 0>>
 	<br>
-	[[Construct a sex arcade to present slaves' holes for public use|Main][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology)), "capEx"), $arcade = 5, $sectors[$AS].type = "Arcade"]]
+	[[Construct a sex arcade to present slaves' holes for public use|Main][cashX(forceNeg(Math.trunc(10000*$upgradeMultiplierArcology)), "capEx"), $arcade = 10, $sectors[$AS].type = "Arcade"]]
 	//Costs <<print cashFormat(Math.trunc(10000*$upgradeMultiplierArcology))>> and will incur upkeep costs//
 <</if>>
 
diff --git a/src/uncategorized/newSlaveIntro.tw b/src/uncategorized/newSlaveIntro.tw
index 441a6c245c32b562d1af1aa487d5066de0cee4a0..57cb103d2af9af9ee64f886d11e8cc4d3c344ce4 100644
--- a/src/uncategorized/newSlaveIntro.tw
+++ b/src/uncategorized/newSlaveIntro.tw
@@ -2013,7 +2013,7 @@ The legalities completed, ''__@@.pink;<<= SlaveFullName($activeSlave)>>@@__'' <<
 		<<set $activeSlave.trust -= 10>>
 	<</link>>
 
-	<<if ($arcade > $arcadeSlaves) || ($arcadeUpgradeFuckdolls != 0)>>
+	<<if ($arcade > $arcadeSlaves) || ($arcadeUpgradeFuckdolls == 2)>>
 		| <<link "Send $him straight to the Arcade">>
 			<<set $activeSlave.assignment = "be confined in the arcade">>
 			<<set $activeSlave.assignmentVisible = 0>>
diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw
index d12f5702b41db198b78d39e80047a9d29756fc67..0dbb440d7aef8eaaf1ea86a1d9691283a6727bd0 100644
--- a/src/uncategorized/nextWeek.tw
+++ b/src/uncategorized/nextWeek.tw
@@ -399,6 +399,9 @@
 
 <<set $coursed = 0, $eventDescription = 0, $pitFought = 0, $preOwnedViewed = 0, $prestigeAuctioned = 0, $eliteAuctioned = 0, $shelterSlave = 0, $shelterSlaveBought = 0, $slaveMarketLimit = 10 + ($rep / 1000), $slavesSeen = 0, $slavesSacrificedThisWeek = 0, $subSlaves = 0>>
 
+/* Not sure where to put this one, so here is where it goes for now. slaveJobValues() also adds .sexAmount and .sexQuality to slave objects, perhaps those too should get zeroed somewhere around here? */
+<<set $slaveJobValues = {}>>
+
 /% These are variables that either should be made into _temp vars or should be Zeroed out once done with them instead of here. This can also interfere with debugging or hide NaN's as zeroing things out would clear a NaN. Also could stop from NaN's getting worse? %/
 /% Integer and float variables. No real need to zero them out but doesn't hurt to have them in a known state, though this might mask variables NaN'ing out. Takes up the least amount of Memory besides a "" string. %/
 <<set $i = 0, $j = 0, $x = 0, $r = 0, $opinion = 0, $influenceBonus = 0, $averageProsperity = 0, $beauty = 0, $beautyMultiplier = 0, $FResult = 0, $groomSlave = -1, $brideSlave = -1, $mother = -1, $daughter = -1, $devMother = -1, $devDaughter = -1, $alphaTwin = -1, $betaTwin = -1, $youngerSister = -1, $olderSister = -1, $recruiterSlave = -1>>
diff --git a/src/uncategorized/pens.tw b/src/uncategorized/pens.tw
index 21c2d713a04017f17792000efe71481587e40969..0e8f31c366fbd74da32d891aab6c5d20c2ec343f 100644
--- a/src/uncategorized/pens.tw
+++ b/src/uncategorized/pens.tw
@@ -27,7 +27,7 @@ This is a space in the arcology's service areas, designed to house hundreds of s
 		<</if>>
 	<</if>>
 	<<if $fuckdolls > 0>>
-		<<if $arcadeUpgradeMenials>>
+		<<if $arcade>>
 			The menial Fuckdolls are endlessly cycled through $arcadeName. They're restrained there and used by the public until their holes are no longer appealing, and then cycled back down here to rest until they've tightened up again.
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/policies.tw b/src/uncategorized/policies.tw
index d8f307855f9796e3eaada65a95ca97f5244e4e2f..3d8f5ce02ff58388ddd072f603656ce93b30dcdd 100644
--- a/src/uncategorized/policies.tw
+++ b/src/uncategorized/policies.tw
@@ -296,7 +296,7 @@
 	<</if>>
 
 <</if>>
-<<if $alwaysSubsidizeGrowth + $alwaysSubsidizeRep + $CashForRep + $RepForCash + $RegularParties + $PAPublic + $CoursingAssociation + $RaidingMercenaries + $Cash4Babies + $goodImageCampaign > 0>>
+<<if $alwaysSubsidizeGrowth + $alwaysSubsidizeRep + $CashForRep + $RepForCash + $RegularParties + $PAPublic + $CoursingAssociation + $RaidingMercenaries + $Cash4Babies + $goodImageCampaign + $publicFuckdolls > 0>>
 	<br><br>__Domestic Policy__
 
 	<<if $alwaysSubsidizeGrowth == 1>>
@@ -356,6 +356,11 @@
 		[[Repeal|Policies][$RaidingMercenaries = 0]]
 	<</if>>
 
+	<<if $publicFuckdolls == 1>>
+		<br>''Free Fuckdolls:'' you are providing fuckdolls free of charge, such generosity increases your standing. 
+		[[Repeal|Policies][$publicFuckdolls = 0]]
+	<</if>>
+
 <</if>>
 <<if ($TSS.subsidize != 0) || ($GRI.subsidize != 0) || ($SCP.subsidize != 0) || ($LDE.subsidize != 0) || ($TGA.subsidize != 0) || ($TFS.subsidize != 0) || ($TCR.subsidize != 0) || ($HA.subsidize != 0)>>
 	<br><br>__Education Policy__
@@ -1144,6 +1149,12 @@
 		<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will cost <<print cashFormat($policyCost)>> weekly to maintain//
 	<</if>>
 
+	<<if $publicFuckdolls == 0>>
+		<br>''Free Fuckdolls:'' you will no longer charge money for restrained slave holes in your arcology, ranging from fuckdolls to the arcade.
+		[[Implement|Policies][$publicFuckdolls = 1]]
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;//Slaves assigned to these jobs will stop making money, fuckdolls will start costing money//
+	<</if>>
+
 	<br><br>__Education Policy__
 
 	<<if $TSS.schoolPresent != 0>>
@@ -1421,7 +1432,7 @@
 			<<if $arcologies[0].FSDegradationistLaw == 0>>
 				<br>''@@.lime;Universal Arcade Access Mandate:@@'' slaveowners will be required to allow their menial slaves to use the sex arcades.
 				[[Implement|Policies][$arcologies[0].FSDegradationistLaw = 1, cashX(-5000, "policies"), repX(-1000, "policies")]]
-				<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will reduce labor efficiency, damaging the arcology's prosperity//
+				<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will reduce labor efficiency, damaging the arcology's prosperity and adds a cost to each menial slave//
 			<</if>>
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/reShelterInspection.tw b/src/uncategorized/reShelterInspection.tw
index 253dccfc7a56a0832fb4b6baffc8dc922e6e6307..62f4f6d7f9d5b7381d51e5696713836b61a89fdc 100644
--- a/src/uncategorized/reShelterInspection.tw
+++ b/src/uncategorized/reShelterInspection.tw
@@ -155,10 +155,12 @@ Not waiting to be greeted, the inspector looks up at the nearest camera and dema
 		<<run cashX(forceNeg($contractCost/2), "slaveTransfer", $activeSlave)>>
 		<<replace "#result">>
 		_Inspectee.slaveName is sealed in a box and currently in use, so it would be extremely unwise to let the inspector report on _Inspectee.slaveName's permanent position in the service industry. So, you greet _him2 politely, and bring _him2 down to $arcadeName to show _him2 _Inspectee.slaveName. The inspector has a single moment to stiffen in shock at the sight before _he2 stiffens involuntarily due to the security drone tasing _him2 unconscious. It takes a few credits here and there to circumvent the Shelter's various legal and contractual defenses to prevent slaveowners from doing exactly what you're doing, but you finish the day richer by three more fuckable holes. When the inspector awakes to a dick intruding _his2 body, the pitch blackness and sound proofing disorientates _him2.
-		<<if $arcadeUpgradeInjectors == 1>>
+		<<if $arcadeUpgradeInjectors == 2>>
 			_He2 gasps as a needle breaks _his2 skin, filling _his2 veins with a potent mixture of aphrodisiacs to help _him2 better service the cock in _his2 cunt. _He2 attempts to defy, but a strong shock forces _him2 to tighten and bring _his2 partner to climax.
+		<<elseif $arcadeUpgradeInjectors == 1>>
+			_He2 attempts to defy, but a strong shock forces _him2 to tighten and bring _his2 partner to climax.
 		<<elseif $arcadeUpgradeCollectors == 1>>
-			_He2 groans at the feeling of something sucking away at _his2 milkless tits, but it does nothing the distract from _his2 rape. _He2 struggles to resist in any way _he2 can, but _he2 is too firmly anchored to move.
+			_He2 groans at the feeling of something sucking away at _his2 milkless tits, but it does nothing to distract from _his2 rape. _He2 struggles to resist in any way _he2 can, but _he2 is too firmly anchored to move.
 		<<else>>
 			_He2 struggles to resist in any way _he2 can, but _he2 is too firmly anchored to move.
 		<</if>>
diff --git a/src/uncategorized/repBudget.tw b/src/uncategorized/repBudget.tw
index c9133ee567e539a7a67808eb466194c9aaee31e5..45c0be4bd92c5811daa004a9639a51c0f365c500 100644
--- a/src/uncategorized/repBudget.tw
+++ b/src/uncategorized/repBudget.tw
@@ -53,6 +53,8 @@ for(var i = 0; i < State.variables.lastWeeksRepIncome.length; i++){
 
 	<<print budgetLine("publicServant", "Public servants")>>
 
+	<<print budgetLine("gloryhole", "Free glory holes")>>
+
 	<<print budgetLine("concubine", "Concubine")>>
 
 	<<print budgetLine("headGirl", "Head girl")>>
@@ -67,6 +69,8 @@ for(var i = 0; i < State.variables.lastWeeksRepIncome.length; i++){
 
 	<<print budgetLine("arcade", "[[$arcadeNameCaps|Arcade][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]] ($arcadeSlaves slaves)")>>
 
+	<<print budgetLine("gloryholeArcade", "Free arcade")>>
+
 	<<print budgetLine("brothel", "[[$brothelNameCaps|Brothel][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]] ($brothelSlaves slaves)")>>
 
 	<<print budgetLine("club", "[[$clubNameCaps|Club][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]] ($clubSlaves slaves)")>>
@@ -108,6 +112,8 @@ for(var i = 0; i < State.variables.lastWeeksRepIncome.length; i++){
 
 	<<print budgetLine("vignette", "Vignettes")>>
 
+	<<print budgetLine("fuckdolls", "Free fuckdolls")>>
+
 	<tr>
 		<h2>Policies</h2>
 	</tr>
diff --git a/src/uncategorized/saWorkAGloryHole.tw b/src/uncategorized/saWorkAGloryHole.tw
deleted file mode 100644
index 4579a84506742c28a926b0cfe2f9e14722471c3e..0000000000000000000000000000000000000000
--- a/src/uncategorized/saWorkAGloryHole.tw
+++ /dev/null
@@ -1,276 +0,0 @@
-:: SA work a glory hole [nobr]
-
-<!-- Statistics gathering -->
-<<set _incomeStats = getSlaveStatisticData($slaves[$i], $slaves[$i].assignment === Job.ARCADE ? $facility.arcade : undefined)>>
-
-<<if $arcologies[0].FSDegradationist != "unset">>
-	<<set $beauty = random(80,100)+(20*(4-$slaves[$i].anus))+(10*(4-$slaves[$i].vagina))+Math.trunc($arcologies[0].FSDegradationist/2)>>
-<<else>>
-	<<set $beauty = random(80,100)+(20*(4-$slaves[$i].anus))+(10*(4-$slaves[$i].vagina))>>
-<</if>>
-<<if $arcologies[0].FSDegradationistLaw == 1>>
-	<<set $beauty = Math.trunc($beauty*1.5)>>
-<<elseif $ACitizens > $ASlaves*4>>
-	<<set $beauty = Math.trunc($beauty*1.1)>>
-<<elseif $ACitizens > $ASlaves*2>>
-	<<set $beauty = Math.trunc($beauty*1)>>
-<<elseif $ACitizens > $ASlaves>>
-	<<set $beauty = Math.trunc($beauty*0.95)>>
-<<elseif $ACitizens > $ASlaves*0.5>>
-	<<set $beauty = Math.trunc($beauty*0.9)>>
-<<else>>
-	<<set $beauty = Math.trunc($beauty*0.85)>>
-<</if>>
-<<if $beauty < 10>>
-	<<set $beauty = 10>>
-<</if>>
-<<if $ACitizens > $ASlaves>>
-	<<set $FResult = 3>>
-<<elseif $ACitizens > $ASlaves*0.5>>
-	<<set $FResult = 2>>
-<<else>>
-	<<set $FResult = 1>>
-<</if>>
-
-<<if ($slaves[$i].assignment == "be confined in the arcade") && ($arcadeUpgradeInjectors == 1)>>
-	<<set $FResult += 1>>
-<</if>>
-
-is <<if $slaves[$i].fuckdoll == 0>>restrained in a glory hole<<else>>set out for use<</if>>. $beauty customers (<<print Math.trunc($beauty/7)>> a day) paid <<print cashFormat($FResult)>> to use $his holes.
-<<set _incomeStats.customers = $beauty>>
-
-<<if ($arcologies[0].FSDegradationist > 0)>>
-	Demand for $his holes is strong due to the appetite for degradation rampant in $arcologies[0].name.
-<</if>>
-
-<<if ($slaves[$i].curatives > 0) || $slaves[$i].inflationType == "curative">>
-	The drugs $he's<<if $slaves[$i].inflationType == "curative">> harboring inside $his guts<<else>> on<</if>> protect $his health from the stress of being used as a sexual appliance.
-<<elseif ($slaves[$i].health < -50)>>
-	The stress of being used while very ill @@.red;damaged $his health.@@
-	<<set $slaves[$i].health -= 10>>
-<<elseif ($slaves[$i].health < -10)>>
-	<<if (random(1,100) > 10)>>
-		The stress of being used while weak has @@.red;damaged $his health.@@
-		<<set $slaves[$i].health -= 10>>
-	<</if>>
-<<elseif ($slaves[$i].vagina == -1)>>
-	<<if (random(1,100) > 70)>>
-		The stress of being used in only two holes has @@.red;damaged $his health.@@
-		<<set $slaves[$i].health -= 10>>
-	<</if>>
-<<elseif (random(1,100) > 25)>>
-	The stress of being used has @@.red;damaged $his health.@@
-	<<set $slaves[$i].health -= 10>>
-<</if>>
-
-<<if ($slaves[$i].vagina == 0) && canDoVaginal($slaves[$i])>>
-	A <<if $slaves[$i].fuckdoll == 0>>glory hole <<else>>Fuckdoll <</if>>user takes $his virginity. He does not notice or care. @@.lime;$His pussy has been broken in@@ in a @@.gold;painful@@ and @@.mediumorchid;degrading@@ way.
-	<<set $slaves[$i].devotion -= 10, $slaves[$i].trust -= 10, $slaves[$i].vagina = 1>>
-<<elseif ($slaves[$i].vagina < 3) && (canDoVaginal($slaves[$i])) && (random(1,100) > ((170-$beauty)+($slaves[$i].vagina*10)))>>
-	@@.lime;$His pussy gets stretched out by the use.@@
-	<<set $slaves[$i].vagina += 1>>
-<</if>>
-
-<<if ($slaves[$i].anus == 0) && canDoAnal($slaves[$i])>>
-	$His anal virginity goes to a <<if $slaves[$i].fuckdoll == 0>>glory hole <<else>>Fuckdoll <</if>>user, who doesn't understand why this particular run at <<if $slaves[$i].fuckdoll == 0>>the glory hole<<else>>a Fuckdoll<</if>> is so great. @@.lime;$His ass has been broken in@@ in a @@.gold;painful@@ and @@.mediumorchid;degrading@@ way.
-	<<set $slaves[$i].devotion -= 5, $slaves[$i].trust -= 5, $slaves[$i].anus = 1>>
-<<elseif ($slaves[$i].anus < 3) && canDoAnal($slaves[$i]) && (random(1,100) > ((150-$beauty)+($slaves[$i].anus*10)))>>
-	@@.lime;$His asshole sees constant use and loosens.@@
-	<<set $slaves[$i].anus += 1>>
-<</if>>
-
-<<if ($slaves[$i].fetish == "mindbroken")>>
-	$He serves $his role as a mindless set of holes to perfection.
-<<else>>
-	<<set $skillIncrease = 5>>
-	<<if ($slaves[$i].skill.oral <= 10)>>
-		With $his throat being brutally used, $his gag reflex is suppressed and $his oral skills improve.
-		<<OralSkillIncrease $slaves[$i]>>
-	<<elseif ($slaves[$i].skill.vaginal <= 10) && (canDoVaginal($slaves[$i]))>>
-		With $his pussy being harshly used, $his vaginal skills improve.
-		<<VaginalSkillIncrease $slaves[$i]>>
-	<<elseif ($slaves[$i].skill.anal <= 10) && (canDoAnal($slaves[$i]))>>
-		With $his butt being mercilessly fucked, $his anal skills improve.
-		<<AnalSkillIncrease $slaves[$i]>>
-	<</if>>
-	<<if $slaves[$i].sexualFlaw == "self hating">>
-		$His self hatred is so deep that $he believes $he deserves to serve in a glory hole, and even gets off on the degradation.
-	<<elseif ($slaves[$i].sentence > 0)>>
-		<<if ($slaves[$i].behavioralFlaw != "odd") && (random(1,100) > (100+($slaves[$i].devotion/5)))>>
-			Constant confinement coupled with brutal use has left $him with involuntary nervous tics.
-			<<set $slaves[$i].behavioralFlaw = "odd">>
-		<</if>>
-		<<set $slaves[$i].devotion -= 5, $slaves[$i].trust -= 5>>
-		<<if ($slaves[$i].devotion > 50)>>
-			$He does $his best to tolerate $his sentence to the glory hole, but @@.mediumorchid;$his devotion is hurt@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion > 20)>>
-			$He does not understand why $his obedience has earned $him a sentence to this torture. @@.mediumorchid;$His obedience is hurt@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion >= -20)>>
-			$His fear of you turns to desperation during $his sentence. @@.mediumorchid;$His obedience is reduced@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion >= -50)>>
-			Though $he is only temporarily sentenced to suffer, @@.mediumorchid;$his resistance is increased@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<else>>
-			$He has hope $he'll be released after $his sentence, but @@.mediumorchid;$his hatred of you is increased@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<</if>>
-	<<else>>
-		<<if ($slaves[$i].behavioralFlaw != "odd") && (random(1,100) > (70+($slaves[$i].devotion/5)))>>
-			Constant confinement coupled with brutal use has left $him with involuntary nervous tics.
-			<<set $slaves[$i].behavioralFlaw = "odd">>
-		<</if>>
-		<<set $slaves[$i].devotion -= 10, $slaves[$i].trust -= 10>>
-		<<if ($slaves[$i].devotion > 50)>>
-			$He feels starved of personal contact. @@.mediumorchid;$His devotion is hurt@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion > 20)>>
-			$He does not understand why $his obedience has earned $him this immurement. @@.mediumorchid;$His obedience is hurt@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion >= -20)>>
-			$His fear of you has increased into something like a pathology. @@.mediumorchid;$His obedience is reduced@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<elseif ($slaves[$i].devotion >= -50)>>
-			$His resistance is deepening into hatred. @@.mediumorchid;$His resistance is increased@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<<else>>
-			@@.mediumorchid;$His helpless hatred of you is increased@@ and $he is @@.gold;filled with fear@@ $he won't be let out.
-		<</if>>
-	<</if>>
-<</if>>
-
-$His feelings, skills, and appearance do not matter. $He is condemned to a world that consists of a tiny cell, featureless except for the never-ending dicks $he is required to service. You were paid @@.yellowgreen;<<print cashFormat(($beauty*$FResult))>>@@ for the use of $slaves[$i].slaveName's holes this week.
-
-/* FACILITY DECORATION IMPACTS */
-
-<<if ($slaves[$i].assignment == "be confined in the arcade") && ($arcadeDecoration != "standard")>>
-<<set _seed = 0.0001*$FSSingleSlaveRep*$beauty>>
-<<switch $arcadeDecoration>>
-<<case "Roman Revivalist">>
-	<<set $arcologies[0].FSRomanRevivalist += _seed>>
-<<case "Aztec Revivalist">>
-	<<set $arcologies[0].FSAztecRevivalist += _seed>>
-<<case "Egyptian Revivalist">>
-	<<set $arcologies[0].FSEgyptianRevivalist += _seed>>
-<<case "Edo Revivalist">>
-	<<set $arcologies[0].FSEdoRevivalist += _seed>>
-<<case "Arabian Revivalist">>
-	<<set $arcologies[0].FSArabianRevivalist += _seed>>
-<<case "Chinese Revivalist">>
-	<<set $arcologies[0].FSChineseRevivalist += _seed>>
-<<case "Repopulation Focus">>
-	<<set $arcologies[0].FSRepopulationFocus += _seed>>
-<<case "Eugenics">>
-	<<set $arcologies[0].FSRestart += _seed>>
-<<case "Chattel Religionist">>
-	<<set $arcologies[0].FSChattelReligionist += _seed>>
-<<case "Degradationist">>
-	<<set $arcologies[0].FSDegradationist += _seed>>
-<<case "Asset Expansionist">>
-	<<set $arcologies[0].FSAssetExpansionist += _seed>>
-<<case "Transformation Fetishist">>
-	<<set $arcologies[0].FSTransformationFetishist += _seed>>
-<<case "Gender Radicalist">>
-	<<set $arcologies[0].FSGenderRadicalist += _seed>>
-<<case "Gender Fundamentalist">>
-	<<set $arcologies[0].FSGenderFundamentalist += _seed>>
-<<case "Physical Idealist">>
-	<<set $arcologies[0].FSPhysicalIdealist += _seed>>
-<<case "Hedonistic">>
-	<<set $arcologies[0].FSHedonisticDecadence += _seed>>
-<<case "Supremacist">>
-	<<set $arcologies[0].FSSupremacist += _seed>>
-<<case "Subjugationist">>
-	<<set $arcologies[0].FSSubjugationist += _seed>>
-<<case "Paternalist">>
-	<<set $arcologies[0].FSPaternalist += _seed>>
-<<case "Pastoralist">>
-	<<set $arcologies[0].FSPastoralist += _seed>>
-<<case "Maturity Preferentialist">>
-	<<set $arcologies[0].FSMaturityPreferentialist += _seed>>
-<<case "Youth Preferentialist">>
-	<<set $arcologies[0].FSYouthPreferentialist += _seed>>
-<<case "Body Purist">>
-	<<set $arcologies[0].FSBodyPurist += _seed>>
-<<case "Slimness Enthusiast">>
-	<<set $arcologies[0].FSSlimnessEnthusiast += _seed>>
-<</switch>>
-<</if>>
-
-/* SEX ACT COUNTS AND SEXUAL SATISFACTION */
-
-<<set _oralUse = $oralUseWeight+($slaves[$i].lips/20)>>
-<<set _analUse = 0>>
-<<if canDoAnal($slaves[$i])>><<set _analUse = $analUseWeight-$slaves[$i].anus>><<if _analUse < 0>><<set _analUse = 0>><</if>><</if>>
-<<set _vaginalUse = 0>>
-<<if canDoVaginal($slaves[$i])>><<set _vaginalUse = $vaginalUseWeight-$slaves[$i].vagina>><<if _vaginalUse < 0>><<set _vaginalUse = 0>><</if>><</if>>
-
-<<set _demand = _oralUse+_analUse+_vaginalUse>>
-<<set _oralUse = Math.trunc((_oralUse/_demand)*$beauty)>>
-<<set _analUse = Math.trunc((_analUse/_demand)*$beauty)>>
-<<set _vaginalUse = Math.trunc((_vaginalUse/_demand)*$beauty)>>
-<<set $slaves[$i].need -= (_analUse+_vaginalUse)/4>>
-
-<<set $slaves[$i].oralCount += _oralUse, $slaves[$i].publicCount += _oralUse, $oralTotal += _oralUse>>
-<<set $slaves[$i].analCount += _analUse, $slaves[$i].publicCount += _analUse, $analTotal += _analUse>>
-<<set $slaves[$i].vaginalCount += _vaginalUse, $slaves[$i].publicCount += _vaginalUse, $vaginalTotal += _vaginalUse>>
-
-<<set _cervixPump = 0>>
-<<if $slaves[$i].cervixImplant == 1 || $slaves[$i].cervixImplant == 3>>
-	<<set _cervixPump += 20*_vaginalUse>>
-<</if>>
-<<if $slaves[$i].cervixImplant == 2 || $slaves[$i].cervixImplant == 3>>
-	<<set _cervixPump += 20*_analUse>>
-<</if>>
-
-<<if $slaves[$i].need>>
-<<if $slaves[$i].fetishKnown>>
-<<switch $slaves[$i].fetish>>
-<<case "submissive" "masochist">>
-	<<if _analUse+_vaginalUse > 0>>
-		$He enjoys being used, and got sexual satisfaction from the <<print _analUse+_vaginalUse>> dicks stuck inside $him this week.
-		<<set $slaves[$i].need -= _analUse+_vaginalUse>>
-	<</if>>
-<<case "dom" "sadist">>
-<<case "cumslut">>
-	<<if _oralUse > 0>>
-		$He enjoys being facefucked, and got sexual satisfaction from the _oralUse dicks shoved inside $his throat this week.
-		<<set $slaves[$i].need -= _oralUse>>
-	<</if>>
-<<case "buttslut">>
-	<<if _analUse > 0>>
-		$He enjoys getting buttfucked, and got sexual satisfaction from the _analUse times $he was sodomized this week.
-		<<set $slaves[$i].need -= _analUse>>
-	<</if>>
-<<case "pregnancy">>
-	<<if $slaves[$i].mpreg == 0>>
-	<<if _vaginalUse > 0>>
-		$He enjoys having $his pussy fucked, and got sexual satisfaction from the _vaginalUse times $he got pounded this week.
-		<<set $slaves[$i].need -= _vaginalUse>>
-	<</if>>
-	<<else>>
-		<<if _analUse > 0>>
-			$He enjoys having $his ass fucked, and got sexual satisfaction from the _analUse times $he got pounded this week.
-			<<set $slaves[$i].need -= _analUse>>
-		<</if>>
-	<</if>>
-<<case "humiliation">>
-	$He enjoys the humiliation of having $his most intimate parts presented for public use, and got a bit of sexual satisfaction from every sex act $he performed this week.
-	<<set $slaves[$i].need -= $beauty>>
-<</switch>>
-<</if>>
-<</if>>
-
-<<if _cervixPump > 0>>
-	$He notices $his @@.lime;belly has swollen@@ from all the
-	<<if $slaves[$i].cervixImplant == 1>>
-		vaginal
-	<<elseif $slaves[$i].cervixImplant == 2>>
-		anal
-	<</if>>
-	sex $he had throughout the week.
-	<<set $slaves[$i].bellyImplant += _cervixPump>>
-<</if>>
-
-<<if $slaves[$i].assignment == "work a glory hole">>
-	<<run cashX(($beauty*$FResult), "gloryhole", $slaves[$i])>>
-<<elseif $slaves[$i].assignment == "be confined in the arcade">>
-	<<run cashX(($beauty*$FResult), "gloryholeArcade", $slaves[$i])>>
-<<else>>
-	<<run cashX(($beauty*$FResult), "working a gloryhole in an unregistered building", $slaves[$i])>>
-<</if>>
-<<set _profits += ($beauty*$FResult)>>
-<<set _incomeStats.income += ($beauty*$FResult)>>
diff --git a/src/uncategorized/slaveAssignmentsReport.tw b/src/uncategorized/slaveAssignmentsReport.tw
index ceae715c6cc32b20f4e8bbcc2af6b1cee7ecb074..e8739d35eb25b25c96fc684b0b63717a23b161a3 100644
--- a/src/uncategorized/slaveAssignmentsReport.tw
+++ b/src/uncategorized/slaveAssignmentsReport.tw
@@ -4,6 +4,158 @@
 
 <h1> $arcologies[0].name Weekly Slave Report - Week $week</h1>
 
+/*Sexual services demand per class*/
+/*We can add milk etc. to this as well, though this is a good that can be traded beyond the arcology and also needs its own market much like the slavemarket. TODO*/
+/*In the default scenario these numbers indicate the amount of money each individual citizen of a particular class is looking to spend on sex (and milk) every week
+Depending on the conditions they may derive more or less 'utility' out of their credits spent
+i.e. a highly paternalist arcology with little choice for its lower class but fuckdolls may still put money into them but not get the same satisfaction out of it*/
+/*Low rent increases demand/available money for sexual services, high rent decreases it*/
+<<set _LCRent = 1 + (20 - $LCRent) / 100,
+_lowerClassSexDemand = Math.trunc($lowerClass * _LCRent) * 10,
+_lowerClassSexDemandRef = Math.max(_lowerClassSexDemand, 0);
+_MCRent = 1 + (50 - $MCRent) / 250,
+_middleClassSexDemand = Math.trunc($middleClass * _MCRent) * 50,
+_UCRent = 1 + (180 - $UCRent) / 900,
+_upperClassSexDemand = Math.trunc($upperClass * _UCRent) * 400,
+_TCRent = 1 + (650 - $TCRent) / 3250,
+_topClassSexDemand = Math.trunc($topClass * _TCRent) * 4000,
+_visitorsSexDemand = Math.trunc($visitors) * 40,
+$slaveJobValues = slaveJobValues()>>
+
+/*Supply of sexual services*/
+<<if ($cheatMode == 1) || ($debugMode == 1)>>
+	<br>Lower Class SD: <<print _lowerClassSexDemand>>
+	<br>Club SP: <<print Math.trunc($slaveJobValues.club * $slaveJobValues.clubSP)>>
+	<br>Arcade SP: <<print $slaveJobValues.arcade>>
+<</if>>
+
+/*Arcade Specific Demand for Degradationists to give it higher priority*/
+<<if $arcologies[0].FSDegradationist != "unset">>
+	<<set _lowerClassArcadeSexDemand = Math.trunc(_lowerClassSexDemand * ($arcologies[0].FSDegradationist / 250) * 5),
+	_middleClassArcadeSexDemand = Math.trunc(_middleClassSexDemand * ($arcologies[0].FSDegradationist / 500) * 12),
+	_upperClassArcadeSexDemand = Math.trunc(_upperClassSexDemand * ($arcologies[0].FSDegradationist / 1000) * 40),
+	_visitorsArcadeSexDemand = Math.trunc(_visitorsSexDemand * ($arcologies[0].FSDegradationist / 500) * 20),
+	_arcadeDemandDeg = _lowerClassArcadeSexDemand + _middleClassArcadeSexDemand + _upperClassArcadeSexDemand + _visitorsArcadeSexDemand>>
+	<<if $arcologies[0].FSDegradationistLaw == 1>>
+		<<set _arcadeDemandDeg += $ASlaves * 3>>
+	<</if>>
+	<<if $slaveJobValues.arcade < _arcadeDemandDeg>>
+		<<if _arcadeDemandDeg > 20000 || $arcologies[0].FSDegradationist > 50>>
+			<<set _degradationistPenalty = ((_arcadeDemandDeg - $slaveJobValues.arcade) / _arcadeDemandDeg),
+			$arcologies[0].FSDegradationist -= Math.trunc(5 * _degradationistPenalty)>>
+			<<run repX(-100 * _degradationistPenalty, "futureSocieties")>>
+			<<if _degradationistPenalty > 0.5>>
+				<<set $arcadeDemandDegResult = 1>>
+			<<else>>
+				<<set $arcadeDemandDegResult = 2>>
+			<</if>>
+		<<else>>
+			<<set $arcadeDemandDegResult = 3>>
+		<</if>>
+		<<set _lowerClassSexDemand -= Math.trunc(1.15 * $slaveJobValues.arcade * (_lowerClassArcadeSexDemand / _arcadeDemandDeg)),
+		_middleClassSexDemand -= Math.trunc(1.15 * $slaveJobValues.arcade * (_middleClassArcadeSexDemand / _arcadeDemandDeg)),
+		_upperClassSexDemand -= Math.trunc(1.15 *$slaveJobValues.arcade * (_upperClassArcadeSexDemand / _arcadeDemandDeg)),
+		_visitorsSexDemand -= Math.trunc(1.15 * $slaveJobValues.arcade * (_visitorsArcadeSexDemand / _arcadeDemandDeg))>> /*There's a 15% satisfaction bonus from getting release in a societally approved way*/
+	<<else>>
+		<<if $slaveJobValues.arcade >= _arcadeDemandDeg * 1.5>>
+			<<set $arcologies[0].FSDegradationist += 2,
+			$arcadeDemandDegResult = 4>>
+			<<run repX(500, "futureSocieties")>>
+		<<else>>
+			<<set $arcadeDemandDegResult = 5>>
+		<</if>>
+		<<set _lowerClassSexDemand -= Math.trunc(1.15 * _lowerClassArcadeSexDemand),
+		_middleClassSexDemand -= Math.trunc(1.15 * _middleClassArcadeSexDemand),
+		_upperClassSexDemand -= Math.trunc(1.15 * _upperClassArcadeSexDemand),
+		_visitorsSexDemand -= Math.trunc(1.15 * _visitorsArcadeSexDemand)>>
+	<</if>>
+<<else>>
+	<<set _arcadeDemandDeg = 0>>
+<</if>>
+
+/*Public slut sex supply. Top and upper class won't partake*/
+<<if $slaveJobValues.club * $slaveJobValues.clubSP < _lowerClassSexDemand + _middleClassSexDemand + _visitorsSexDemand>>
+	<<set _clubDemand = _lowerClassSexDemand + _middleClassSexDemand + _visitorsSexDemand,
+	_lowerClassSexDemand -= Math.trunc($slaveJobValues.club * $slaveJobValues.clubSP * (_lowerClassSexDemand / _clubDemand)),
+	_middleClassSexDemand -= Math.trunc($slaveJobValues.club * $slaveJobValues.clubSP * (_middleClassSexDemand / _clubDemand)),
+	_visitorsSexDemand -= Math.trunc($slaveJobValues.club * $slaveJobValues.clubSP * (_visitorsSexDemand / _clubDemand))>>
+<<else>>
+	<<set _lowerClassSexDemand = 0,
+	_middleClassSexDemand = 0,
+	_visitorsSexDemand = 0>>
+<</if>>
+
+/*Price for sex in the arcade or at a glory hole*/
+<<if $arcologies[0].FSPaternalist != "unset">>
+	<<set _arcadeDemand = Math.max((_arcadeDemandDeg + _lowerClassSexDemand) * (1 - $arcologies[0].FSPaternalist / 50), 0)>> /*Paternalists sap demand for the arcade*/
+<<else>>
+	<<set _arcadeDemand = _arcadeDemandDeg + _lowerClassSexDemand>>
+<</if>>
+<<if $slaveJobValues.arcade + $NPCSexSupply.lowerClass > 0>>
+	<<set $arcadePrice = Math.clamp(Math.pow((_arcadeDemand / ($slaveJobValues.arcade + $NPCSexSupply.lowerClass)), 0.5), 0.5, 3)>> /*This calculates the price charged per fuck*/
+<<else>>
+	<<set $arcadePrice = 0.5>> /*minimum price no matter what*/
+<</if>>
+
+/*Arcade usage beyond degradationist demand*/
+<<if $arcologies[0].FSDegradationist != "unset">>
+	<<if $slaveJobValues.arcade > _arcadeDemandDeg>>
+		<<set $slaveJobValues.arcade -= _arcadeDemandDeg>>
+	<<else>>
+		<<set $slaveJobValues.arcade = 0>>
+	<</if>>
+<</if>>
+<<if $slaveJobValues.arcade > _lowerClassSexDemand>>
+	<<set _lowerClassSexDemand = 0>>
+<<else>>
+	<<set _lowerClassSexDemand -= $slaveJobValues.arcade>>
+<</if>>
+
+/*NPC sex supply*/
+<<set $NPCSexSupply = NPCSexSupply(_lowerClassSexDemand/_lowerClassSexDemandRef),
+$NPCMarketShareLC = Math.trunc(($NPCSexSupply.lowerClass * 1000) / ($NPCSexSupply.lowerClass + $slaveJobValues.arcade + Math.trunc($slaveJobValues.club * $slaveJobValues.clubSP * (_lowerClassSexDemand / _clubDemand)))),
+_lowerClassSexDemand -= $NPCSexSupply.lowerClass>>
+<<if ($cheatMode == 1) || ($debugMode == 1)>>
+	<br>NPC Supply Lower Class: $NPCSexSupply.lowerClass
+<</if>>
+
+<<if ($cheatMode == 1) || ($debugMode == 1)>>
+	<br>Leftover Lower Class SD: <<print _lowerClassSexDemand>>
+<</if>>
+
+/*Sexual satisfaction effects*/
+<<if _lowerClassSexDemand > $lowerClass * _LCRent * 3>> /*You are providing < 40% of their desired amount of sex*/
+	<<set $lowerClassSexDemandResult = 1>>
+	<<if $week <= 30>>
+		<<set $lowerClassSatisfied = 0>>
+	<<else>>
+		<<set $lowerClassSatisfied = -1>>
+	<</if>>
+<<elseif _lowerClassSexDemand > $lowerClass * _LCRent * 2>> /*You are providing between 40 and 60% of their desired amount of sex*/
+	<<set $lowerClassSexDemandResult = 2>>
+	<<if $week <= 40>>
+		<<set $lowerClassSatisfied = 1>>
+	<<elseif $week <= 60>>
+		<<set $lowerClassSatisfied = 0>>
+	<<else>>
+		<<set $lowerClassSatisfied = -1>>
+	<</if>>
+<<elseif _lowerClassSexDemand > $lowerClass * _LCRent>> /*You are providing between 60 and 80% of their desired amount of sex*/
+	<<set $lowerClassSexDemandResult = 3>>
+	<<if $week <= 50>>
+		<<set $lowerClassSatisfied = 1>>
+	<<else>>
+		<<set $lowerClassSatisfied = 0>>
+	<</if>>
+<<elseif _lowerClassSexDemand == 0>> /*You are providing 100% or more of their desired amount of sex*/
+	<<set $lowerClassSexDemandResult = 5,
+	$lowerClassSatisfied = 2>>
+<<else>> /*You are providing > 80% of their desired amount of sex*/
+	<<set $lowerClassSexDemandResult = 4,
+	$lowerClassSatisfied = 1>>
+<</if>>
+<br><br>
+
 <<for $i = 0; $i < _SL; $i++>>
 
 <<if ndef $slaves[$i].skill.whore>>
@@ -132,22 +284,16 @@
 		<<= removeJob($slaves[$i], "be the Madam")>>
 	<</if>>
 <<case "be the DJ">>
-	<<set $DJ = $slaves[$i]>>
-	<<if !canTalk($DJ)>>
+	<<if $unDJ == 1>>
 		''__@@.pink;$DJ.slaveName@@__'' can't speak @@.yellow;and cannot serve as your DJ any more.@@<br>
-		<<set $DJ = 0>>
-	<<elseif $DJ.preg > 37 && $DJ.broodmother == 2>>
-		''__@@.pink;$DJ.slaveName@@__'' spends so much time giving birth and laboring that @@.yellow;$he cannot effectively serve as your DJ any longer@@.
-		<<set $DJ = 0>>
-	<<elseif $DJ.fetish == "mindbroken">>
+	<<elseif $unDJ == 2>>
+		''__@@.pink;$DJ.slaveName@@__'' spends so much time giving birth and laboring that @@.yellow;$he cannot effectively serve as your DJ any longer@@.<br>
+	<<elseif $unDJ == 3>>
 		''__@@.pink;$DJ.slaveName@@__'' is mindbroken @@.yellow;and cannot serve as your DJ any more.@@<br>
-		<<set $DJ = 0>>
-	<<elseif !canWalk($DJ)>>
+	<<elseif $unDJ == 4>>
 		''__@@.pink;$DJ.slaveName@@__'' is no longer independently mobile @@.yellow;and cannot serve as your DJ any more.@@<br>
-		<<set $DJ = 0>>
-	<<elseif !canHear($DJ)>>
+	<<elseif $unDJ == 5>>
 		''__@@.pink;$DJ.slaveName@@__'' can no longer hear @@.yellow;and cannot serve as your DJ any more.@@<br>
-		<<set $DJ = 0>>
 	<</if>>
 	<<if $DJ == 0>>
 		<<= removeJob($slaves[$i], "be the DJ")>>