diff --git a/src/005-passages/facilitiesPassages.js b/src/005-passages/facilitiesPassages.js
index 7cc3640ea05ce90f289661635ec2bcd189f755c3..d111733c1d5b89dd4af44a8c6951b9eacf8efe32 100644
--- a/src/005-passages/facilitiesPassages.js
+++ b/src/005-passages/facilitiesPassages.js
@@ -40,18 +40,144 @@ new App.DomPassage("Agent Select",
 		V.nextLink = "Neighbor Interact";
 		V.encyclopedia = "Agents";
 
-		const f = document.createDocumentFragment();
-		App.UI.DOM.appendNewElement("h2", f, "Appoint an Agent from your devoted slaves");
+		return App.Facilities.AgentSelect();
+	}, ["jump-from-safe"]
+);
 
-		f.append(App.UI.SlaveList.slaveSelectionList(
-			s => App.Entity.facilities.arcologyAgent.manager.checkRequirements(s),
-			(slave) => App.UI.DOM.passageLink(SlaveFullName(slave), "Agent Workaround",
-				() => { V.i = V.slaves.findIndex((s) => s.ID === slave.ID); }),
-			s => App.Entity.facilities.arcologyAgent.manager.slaveHasExperience(s)
-		));
+new App.DomPassage("Attendant Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Spa";
+		V.encyclopedia = "Attendant";
 
-		return f;
-	}, ["jump-from-safe"]
+		return App.Facilities.AttendantSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("BG Select",
+	() => {
+		V.nextButton = "Back to Main";
+		V.nextLink = "Main";
+		V.encyclopedia = "Bodyguard";
+
+		return App.Facilities.BGSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Concubine Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Master Suite";
+		V.encyclopedia = "Concubine";
+
+		return App.Facilities.ConcubineSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("DJ Select",
+	() => {
+		return App.Facilities.DJSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("HG Select",
+	() => {
+		V.nextButton = "Back to Main";
+		V.nextLink = "Main";
+		V.encyclopedia = "Head Girl";
+
+		return App.Facilities.HGSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Madam Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Brothel";
+		V.encyclopedia = "Madam";
+
+		return App.Facilities.MadamSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Milkmaid Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Dairy";
+		V.encyclopedia = "Milkmaid";
+
+		return App.Facilities.MilkmaidSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Nurse Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Clinic";
+		V.encyclopedia = "Nurse";
+
+		return App.Facilities.NurseSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Recruiter Select",
+	() => {
+		V.nextButton = "Back to Main";
+		V.nextLink = "Main";
+		V.encyclopedia = "Recruiter";
+
+		return App.Facilities.RecruiterSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Schoolteacher Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Schoolroom";
+		V.encyclopedia = "Schoolteacher";
+
+		return App.Facilities.SchoolTeacherSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Stewardess Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Servants' Quarters";
+		V.encyclopedia = "Stewardess";
+
+		return App.Facilities.StewardessSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Wardeness Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Cellblock";
+		V.encyclopedia = "Wardeness";
+
+		return App.Facilities.WardenessSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Farmer Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Farmyard";
+		V.encyclopedia = "Farmer";
+
+		return App.Facilities.FarmerSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
+);
+
+new App.DomPassage("Matron Select",
+	() => {
+		V.nextButton = "Back";
+		V.nextLink = "Nursery";
+		V.encyclopedia = "Matron";
+
+		return App.Facilities.MatronSelect();
+	}, ["jump-to-safe", "jump-hidden", "jump-from-safe"]
 );
 
 new App.DomPassage("Rules Assistant",
diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js
index 2c5745850af6ed89473dd911639d797bf9185eb7..96c0dfc96fac4d83624b144ffc0421d3da2c8caa 100644
--- a/src/endWeek/slaveAssignmentReport.js
+++ b/src/endWeek/slaveAssignmentReport.js
@@ -183,7 +183,7 @@ App.EndWeek.slaveAssignmentReport = function() {
 			App.EndWeek.saVars.HGEnergy = 0;
 		}
 		if (canAchieveErection(slave)) {
-			App.EndWeek.saVars.HGCum = 2 + Math.trunc((slave.balls / 5) + (slave.energy / 95) + (slave.health.condition / 95) + (slave.devotion / 95) + (V.reproductionFormula * 5));
+			App.EndWeek.saVars.HGCum = resetHGCum(slave);
 		}
 	}
 
diff --git a/src/events/RESS/bondageGear.js b/src/events/RESS/bondageGear.js
new file mode 100644
index 0000000000000000000000000000000000000000..104173930bc9ffe0673416c5d9f00984991cb88e
--- /dev/null
+++ b/src/events/RESS/bondageGear.js
@@ -0,0 +1,213 @@
+App.Events.RESSBondageGear = class RESSBondageGear extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return []; // always valid if sufficient actors can be cast successfully
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				s => s.devotion < -20,
+				s => s.trust >= -20,
+				s => s.clothes === "uncomfortable straps",
+				canMove,
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {He, he, His, his, him, himself} = getPronouns(eventSlave);
+		const {title: Master, say} = getEnunciation(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		V.nextLink = "Next Week";
+
+		let t = [];
+		t.push(`One day, you catch sight of`);
+		t.push(contextualIntro(V.PC, eventSlave, "DOM"));
+		if (!canWalk(eventSlave)) {
+			t.push(`crawling`);
+		} else if (shoeHeelCategory(eventSlave) > 1) {
+			t.push(`tottering`);
+		} else if (eventSlave.belly >= 10000) {
+			t.push(`waddling`);
+		} else {
+			t.push(`walking`);
+		}
+		t.push(`around stark naked. This is unacceptable, as ${he} has been ordered to wear humiliating and uncomfortable bondage gear. When confronted,`);
+		if (!canTalk(eventSlave)) {
+			if (!hasAnyArms(eventSlave)) {
+				t.push(`${he} tries to communicate ${his} reluctance to wear the clothing as best as ${he} can with various head movements and facial`);
+				if (eventSlave.bellyPreg >= 5000) {
+					t.push(`expressions, including several nods towards ${his} rounded middle.`);
+				} else {
+					t.push("expressions.");
+				}
+			} else {
+				t.push(`${he} uses gestures to communicate ${his} embarrassment with ${his} clothing, covering ${his} nipples, crotch, and anus with ${his} ${hands} one after the other, and begging for clothes that do the same.`);
+				if (eventSlave.bellyPreg >= 5000) {
+					t.push(`${He} also gestures to ${his} rounded belly with a look of concern.`);
+				}
+			}
+		} else {
+			t.push(`${he} ${say}s fearfully,`);
+			if (eventSlave.bellyPreg >= 5000) {
+				t.push(Spoken(eventSlave, `"I'm sorry, ${Master}, but those things are just so embarrassing! I'm also worried for my ${eventSlave.pregType > 1 ? "babies'" : "baby's"} safety."`));
+			} else {
+				t.push(Spoken(eventSlave, `"I'm sorry, ${Master}, but those things are just so embarrassing!"`));
+			}
+		}
+
+		App.Events.addParagraph(node, t);
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Let ${him} go naked`, naked),
+			new App.Events.Result(`Force ${him} to choose between ${his} straps and public nudity`, publicNude),
+			(eventSlave.buttplug === "none" && (eventSlave.vagina < 0 || (eventSlave.vaginalAccessory === "none" && eventSlave.vaginalAttachment === "none")))
+				? new App.Events.Result(`Add dildos to ${his} gear`, dildos, (eventSlave.anus === 0 && canDoAnal(eventSlave)) || (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) ? `This option will take ${his} virginity` : null)
+				: new App.Events.Result(),
+			(V.arcade > 0)
+				? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade)
+				: new App.Events.Result(),
+
+		]);
+
+		function naked() {
+			t = [];
+			if (!canWalk(eventSlave)) {
+				t.push(`${He} cheerfully leaves your office,`);
+			} else {
+				t.push(`${He} skips away happily,`);
+			}
+			t.push(`overjoyed to be free of the clothing you ordered ${him} to wear. ${His} obedience to you <span class="devotion dec">has decreased,</span> as has <span class="trust inc">${his} fear</span> of you.`);
+			eventSlave.devotion -= 5;
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function publicNude() {
+			t = [];
+			t.push(`You tell ${him} that you understand, and that ${he} can go naked; ${he} looks thrilled until you ${canHear(eventSlave) ? "tell" : "inform"} ${him} ${he}'ll be ${canWalk(eventSlave) ? "walking" : `dragging ${himself} down`} every hallway in ${V.arcologies[0].name} today, nude. Before ${he} can protest, you add that ${his} only other option is to put ${his} proper clothes back on and be a good little bitch.`);
+			if (eventSlave.fetish === "humiliation") {
+				t.push(`${He} <span class="devotion inc">happily accepts the alternative,</span>`);
+				if (canAchieveErection(eventSlave) && !(eventSlave.chastityPenis)) {
+					t.push(`${his} dick hardening`);
+				} else if (eventSlave.dick > 0) {
+					t.push(`${his} dick leaking precum`);
+				} else if (eventSlave.vagina > 0) {
+					t.push(`${his} pussy moistening`);
+				} else {
+					t.push(`${his} nipples`);
+					if (eventSlave.nipples !== "fuckable") {
+						t.push(`hardening`);
+					} else {
+						t.push(`swelling`);
+					}
+				}
+				t.push(`with anticipation.`);
+				eventSlave.devotion += 4;
+				eventSlave.clothes = "no clothing";
+				if (eventSlave.fetishKnown === 0) {
+					t.push(`That was not the response you expected; turns out ${he} has a <span class="fetish gain">humiliation fetish.</span>`);
+					eventSlave.fetishKnown = 1;
+				}
+			} else {
+				t.push(`${He} shudders and <span class="trust dec">hurries to get ${his} straps back on.</span>`);
+				eventSlave.trust -= 5;
+			}
+			return t;
+		}
+
+		function dildos() {
+			t = [];
+			t.push(`You tell ${him} that you understand, and that you will get ${him} some new clothing. ${He} is thrilled, but ${his} pleasure turns to horror when ${he} ${canSee(eventSlave) ? "sees" : "finds"} that the new clothes are a version of the same slave bondage gear, just with inward-facing dildos for ${his}`);
+			if (eventSlave.vagina > -1) {
+				t.push(`pussy and`);
+			}
+			t.push(`asshole.`);
+			if (eventSlave.anus === 0 && eventSlave.vagina === 0 && canDoAnal(eventSlave) && canDoVaginal(eventSlave)) {
+				t.push(`You pause before getting ${him} dressed; there's little reason to waste virginities on plugs. You`);
+				if (V.PC.dick !== 0) {
+					t.push(`stroke yourself to erection`);
+				} else {
+					t.push(`don a strap-on`);
+				}
+				t.push(`and bend ${him} over, opting to start with ${his} tight pussy.`);
+				t.push(VCheck.Both(eventSlave, 1));
+			} else if (eventSlave.anus === 0 && canDoAnal(eventSlave)) {
+				t.push(`You pause before getting ${him} dressed; there's little reason to waste ${his} anal virginity on a plug. You `);
+				if (V.PC.dick !== 0) {
+					t.push(`stroke yourself to erection`);
+				} else {
+					t.push(`don a strap-on`);
+				}
+				t.push(`and bend ${him} over before working your way into ${his} tight anus.`);
+				t.push(VCheck.Anal(eventSlave, 1));
+			} else if (eventSlave.vagina === 0 && canDoVaginal(eventSlave)) {
+				t.push(`You pause before getting ${him} dressed; there's little reason to waste ${his} virginity on a plug. You`);
+				if (V.PC.dick !== 0) {
+					t.push(`stroke yourself to erection`);
+				} else {
+					t.push(`don a strap-on`);
+				}
+				t.push(` and bend ${him} over before working your way into ${his} tight pussy.`);
+				t.push(VCheck.Vaginal(eventSlave, 1));
+			}
+			t.push(`For the rest of the week, ${he} ${canWalk(eventSlave) ? "walks" : "crawls"} around awkwardly, unable to find a comfortable position`);
+			if (eventSlave.belly >= 1500) {
+				t.push(`between`);
+			} else {
+				t.push(`since`);
+			}
+			t.push(`${his}`);
+			if (V.seeRace === 1) {
+				t.push(`${eventSlave.race}`);
+			}
+			t.push(`body`);
+			if (eventSlave.belly < 1500) {
+				t.push(`is`);
+			}
+			if (eventSlave.belly >= 1500) {
+				t.push(`being penetrated by ${his} own clothing and the straps digging into ${his} ${belly} rounded belly`);
+			} else {
+				t.push(`being penetrated by ${his} own clothing.`);
+			}
+			t.push(`<span class="devotion inc">${He} has become more submissive.</span>`);
+			eventSlave.devotion += 4;
+			return t;
+		}
+
+		function arcade() {
+			t = [];
+			t.push(`${eventSlave.slaveName} ${canTalk(eventSlave) ? "screams and " : ""}begs when ${he} realizes what ${his} punishment is, but you are obdurate.`);
+			if (eventSlave.muscles > 30) {
+				t.push(`${His} powerful form has to be sedated for immurement in the arcade.`);
+			} else if ((eventSlave.weight >= 190)) {
+				t.push(`${He} is so massively fat that immuring ${him} in the arcade is a struggle, even when ${he} isn't trying to.`);
+			} else if (eventSlave.belly >= 120000) {
+				t.push(`${He} is so enormously gravid that immuring ${him} in the arcade is a hassle, even though ${his} ${belly} middle limits ${his} ability to struggle.`);
+			} else if ((eventSlave.weight >= -10)) {
+				t.push(`${His} desperate struggles make immuring ${him} in the arcade difficult.`);
+			} else if (eventSlave.belly >= 1500) {
+				t.push(`${His}`);
+				if (eventSlave.bellyPreg >= 3000) {
+					t.push(`pregnant`);
+				} else {
+					t.push(belly);
+				}
+				t.push(`body makes it slightly difficult to fit ${him} properly into the restraints for immurement in the arcade.`);
+			} else if (eventSlave.muscles < -15) {
+				t.push(`${His} weak body makes immuring ${him} in the arcade pathetically easy.`);
+			} else {
+				t.push(`${His} thin form makes immuring ${him} in the arcade pathetically easy.`);
+			}
+			t.push(`After ${he}'s properly confined, the only sign of ${his} discomfiture is a slight movement of ${his} ${eventSlave.skin} butt as ${he} wriggles desperately against ${his} restraints.`);
+			assignJob(eventSlave, "be confined in the arcade");
+			eventSlave.sentence = 4;
+			return t;
+		}
+	}
+};
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index b844fe234b1bc6d868d17e4c87e688c22c81d6b1..80542b0b170bd2bfe27b942e1108ddf32e243756 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -10,12 +10,13 @@ App.Events.getIndividualEvents = function() {
 	return [
 		// instantiate all possible random individual events here
 		// example: new App.Events.TestEvent(),
-		new App.Events.RESSDevotedFearfulSlave(),
 		new App.Events.RESSAssFitting(),
+		new App.Events.RESSBondageGear(),
 		new App.Events.RESSCockFeederResistance(),
 		new App.Events.RESSComfortableSeat(),
 		new App.Events.RESSDevotedAnalVirgin(),
 		new App.Events.RESSDevotedEducated(),
+		new App.Events.RESSDevotedFearfulSlave(),
 		new App.Events.RESSDevotedShortstack(),
 		new App.Events.RESSDevotedVirgin(),
 		new App.Events.RESSDevotedWaist(),
diff --git a/src/events/scheduled/pitFight.js b/src/events/scheduled/pitFight.js
index 4f5b02f0efa77fbc04a0c77604c9d28eb525c14e..a79f2897d0f20c26e85640a5b1a05786087a2670 100644
--- a/src/events/scheduled/pitFight.js
+++ b/src/events/scheduled/pitFight.js
@@ -7,52 +7,48 @@ App.Events.SEPitFight = class SEPitFight extends App.Events.BaseEvent {
 		return [
 			() => !!V.pit,
 			() => !V.pit.fought,
-			() => !!V.pit.slaveFightingBodyguard
-				|| (V.pit.fighterIDs.length > 0 && (!!V.pit.animal || V.pit.bodyguardFights))
-				|| (V.pit.fighterIDs.length > 1) /* TODO: this condition should probably be reimplemented as casting for this event, rather than prereq... */
 		];
 	}
 
-	execute(node) {
-		/** @type {number[]} */
+	castActors() {
 		const available = [...new Set(V.pit.fighterIDs)];
-		/** @type {number[]} */
-		const fighters = [];
-
-		V.nextButton = "Continue";
-		V.nextLink = "Scheduled Event";
-		V.returnTo = "Scheduled Event";
-
-		V.pit.fought = true;
 
 		if (V.pit.slaveFightingBodyguard) {	// slave is fighting bodyguard for their life
-			fighters.push(S.Bodyguard.ID, V.pit.slaveFightingBodyguard);
+			this.actors.push(S.Bodyguard.ID, V.pit.slaveFightingBodyguard);
 		} else {
 			if (available.length > 0) {
 				// first fighter
 				if (S.Bodyguard && V.pit.bodyguardFights) {
 					available.delete(S.Bodyguard.ID);
-					fighters.push(S.Bodyguard.ID);
+					this.actors.push(S.Bodyguard.ID);
 				} else {
-					fighters.push(available.pluck());
+					this.actors.push(available.pluck());
 				}
 
 				// second fighter
-				if (available.length > 0 && !V.pit.animal) {
-					fighters.push(available.pluck());
+				if (!V.pit.animal) {
+					if (available.length > 0) {
+						this.actors.push(available.pluck());
+					} else {
+						return false; // couldn't cast second fighter
+					}
 				}
-			} else {
-				throw new Error(`Pit fight triggered with ${V.pit.fighterIDs.length} fighters.`);	// should technically never be triggered
 			}
 		}
 
+		return this.actors.length > 0;
+	}
+
+	execute(node) {
+		V.nextButton = "Continue";
+		V.nextLink = "Scheduled Event";
+		V.returnTo = "Scheduled Event";
+
+		V.pit.fought = true;
+
 		node.appendChild(V.pit.lethal ?
-			App.Facilities.Pit.lethalFight(fighters) :
-			App.Facilities.Pit.nonlethalFight(fighters)
+			App.Facilities.Pit.lethalFight(this.actors) :
+			App.Facilities.Pit.nonlethalFight(this.actors)
 		);
-
-		if (V.debugMode) {
-			console.log(`Available:\n${available}\nFighters:\n${fighters}`);
-		}
 	}
 };
diff --git a/src/facilities/AgentSelect.js b/src/facilities/AgentSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d67d8d8eb6bbc73eefac04b76f477fc2b781d48
--- /dev/null
+++ b/src/facilities/AgentSelect.js
@@ -0,0 +1,12 @@
+App.Facilities.AgentSelect = function() {
+	const f = document.createDocumentFragment();
+
+	App.UI.DOM.appendNewElement("h2", f, "Appoint an Agent from your devoted slaves");
+	f.append(App.UI.SlaveList.slaveSelectionList(
+		s => App.Entity.facilities.arcologyAgent.manager.checkRequirements(s),
+		(slave) => App.UI.DOM.passageLink(SlaveFullName(slave), "Agent Workaround",
+			() => { V.i = V.slaves.findIndex((s) => s.ID === slave.ID); }),
+		s => App.Entity.facilities.arcologyAgent.manager.slaveHasExperience(s)
+	));
+	return f;
+};
diff --git a/src/facilities/armory/BGSelect.js b/src/facilities/armory/BGSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a8115b75bea69454251bc416b1a42d3324dabca
--- /dev/null
+++ b/src/facilities/armory/BGSelect.js
@@ -0,0 +1,21 @@
+App.Facilities.BGSelect = function() {
+	let div = document.createElement("div");
+	const f = document.createDocumentFragment();
+
+	if (S.Bodyguard) {
+		f.append(`${SlaveFullName(S.Bodyguard)} is working as your Bodyguard, remaining close to you at all times and guards your person. `);
+		f.append(App.UI.DOM.link("Remove Bodyguard", () => {
+			removeJob(S.Bodyguard, Job.BODYGUARD);
+		},
+		[], "Main"
+		));
+	} else {
+		f.append(`No Bodyguard assigned, appoint one from your devoted slaves.`);
+	}
+
+	div.append(App.UI.DOM.makeCheckbox("bodyguardTrains"), " Can train potential successors.");
+	f.append(div);
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.armory, "Main"));
+	return f;
+};
diff --git a/src/facilities/brothel/MadamSelect.js b/src/facilities/brothel/MadamSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d883bcb9495f1943971b38445b0af1c370e8d01
--- /dev/null
+++ b/src/facilities/brothel/MadamSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.MadamSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Madam) {
+		f.append(`Madam: ${SlaveFullName(S.Madam)}, manages the brothel. `);
+		f.append(App.UI.DOM.link("Remove Madam", () => {
+			removeJob(S.Madam, Job.MADAM);
+		},
+		[], "Brothel"
+		));
+	} else {
+		f.append(`No Madam assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.brothel, "Brothel"));
+	return f;
+};
diff --git a/src/facilities/cellblock/WardenessSelect.js b/src/facilities/cellblock/WardenessSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab9b749520f639806bb2db72f841b5958d28ba8e
--- /dev/null
+++ b/src/facilities/cellblock/WardenessSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.WardenessSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Wardeness) {
+		f.append(`Wardeness: ${SlaveFullName(S.Wardeness)}, helps breaking your prisoners. `);
+		f.append(App.UI.DOM.link("Remove Wardeness", () => {
+			removeJob(S.Wardeness, Job.WARDENESS);
+		},
+		[], "Cellblock"
+		));
+	} else {
+		f.append(`No Wardeness assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.cellblock, "Cellblock"));
+	return f;
+};
diff --git a/src/facilities/clinic/NurseSelect.js b/src/facilities/clinic/NurseSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..b63ebff3cbeab4653a8ef2e22cb9e88bef1b0901
--- /dev/null
+++ b/src/facilities/clinic/NurseSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.NurseSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Nurse) {
+		f.append(`${SlaveFullName(S.Nurse)} is working as your Nurse, helping to heal your slaves. `);
+		f.append(App.UI.DOM.link("Remove Nurse", () => {
+			removeJob(S.Nurse, Job.NURSE);
+		},
+		[], "Clinic"
+		));
+	} else {
+		f.append(`No Nurse assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.clinic, "Clinic"));
+	return f;
+};
diff --git a/src/facilities/club/DJSelect.js b/src/facilities/club/DJSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c9709074305f1a13092b2543b5366d85db82500
--- /dev/null
+++ b/src/facilities/club/DJSelect.js
@@ -0,0 +1,20 @@
+App.Facilities.DJSelect = function() {
+	const f = document.createDocumentFragment();
+	V.nextButton = "Back";
+	V.nextLink = "Club";
+	V.encyclopedia = "DJ";
+
+	if (S.DJ) {
+		f.append(`${SlaveFullName(S.DJ)} is working as your DJ, managing entertainment in ${V.clubName}. `);
+		f.append(App.UI.DOM.link("Remove DJ", () => {
+			removeJob(S.Concubine, Job.DJ);
+		},
+		[], "Club"
+		));
+	} else {
+		f.append(`No DJ assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.club, "Club"));
+	return f;
+};
diff --git a/src/facilities/dairy/MilkmaidSelect.js b/src/facilities/dairy/MilkmaidSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..71d0137889fecd798c6cbb54bc5c51b4c76a1903
--- /dev/null
+++ b/src/facilities/dairy/MilkmaidSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.MilkmaidSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Milkmaid) {
+		f.append(`${SlaveFullName(S.Milkmaid)} is working as your Milkmaid, looking after your livestock, helping them give milk${V.seeDicks > 0 ? ' and semen' : ''}. `);
+		f.append(App.UI.DOM.link("Remove Milkmaid", () => {
+			removeJob(S.Milkmaid, Job.MILKMAID);
+		},
+		[], "Dairy"
+		));
+	} else {
+		f.append(`No Milkmaid assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.dairy, "Dairy"));
+	return f;
+};
diff --git a/src/facilities/farmyard/FarmerSelect.js b/src/facilities/farmyard/FarmerSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..12e8db3a450746bf8da2218017394d32e94c86c9
--- /dev/null
+++ b/src/facilities/farmyard/FarmerSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.FarmerSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Farmer) {
+		f.append(`Farmer: ${SlaveFullName(S.Farmer)}, tends to your crops and animals. `);
+		f.append(App.UI.DOM.link("Remove Farmer", () => {
+			removeJob(S.Farmer, Job.FARMER);
+		},
+		[], "Farmyard"
+		));
+	} else {
+		f.append(`No Farmer assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.farmyard, "Farmyard"));
+	return f;
+};
diff --git a/src/facilities/farmyard/farmerSelect.tw b/src/facilities/farmyard/farmerSelect.tw
deleted file mode 100644
index dfaadbb1a96df02ad478825766207ce21efd0ea8..0000000000000000000000000000000000000000
--- a/src/facilities/farmyard/farmerSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Farmer Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Farmyard", $encyclopedia = "Farmer">>
-<<if ($FarmerID != 0)>>
-	<<setLocalPronouns _S.Farmer>>
-	<span class='slave-name'><<= SlaveFullName(_S.Farmer)>></span> is serving as your Farmer.<br><br>$He will tend to your crops and animals.
-<<else>>
-	You have not selected a Farmer.
-<</if>>
-
-<br><br>''Appoint a Farmer from your obedient slaves:''
-<br><br>[[None|Farmyard][removeJob(_S.Farmer, Job.FARMER)]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.farmyard, "Farmyard")>>
diff --git a/src/facilities/masterSuite/ConcubineSelect.js b/src/facilities/masterSuite/ConcubineSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..289eeb32199ebf51d64f3d3ab8f11681c1a0c424
--- /dev/null
+++ b/src/facilities/masterSuite/ConcubineSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.ConcubineSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Concubine) {
+		f.append(`${SlaveFullName(S.Concubine)} is your Concubine, taking the lead in seeing to your pleasure. `);
+		f.append(App.UI.DOM.link("Remove Concubine", () => {
+			removeJob(S.Concubine, Job.CONCUBINE);
+		},
+		[], "Master Suite"
+		));
+	} else {
+		f.append(`No Concubine assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.masterSuite, "Master Suite"));
+	return f;
+};
diff --git a/src/facilities/nursery/MatronSelect.js b/src/facilities/nursery/MatronSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..b67973ca9eaed2e25adadda46e11dfdb0aff50f6
--- /dev/null
+++ b/src/facilities/nursery/MatronSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.MatronSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Matron) {
+		f.append(`${SlaveFullName(S.Matron)} is working as your Matron, managing the nursery. `);
+		f.append(App.UI.DOM.link("Remove Matron", () => {
+			removeJob(S.Matron, Job.MATRON);
+		},
+		[], "Nursery"
+		));
+	} else {
+		f.append(`No Matron assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.nursery, "Nursery"));
+	return f;
+};
diff --git a/src/facilities/nursery/matronSelect.tw b/src/facilities/nursery/matronSelect.tw
deleted file mode 100644
index 1f00599be61f945e66b825c517dc574407accc5f..0000000000000000000000000000000000000000
--- a/src/facilities/nursery/matronSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Matron Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Nursery", $encyclopedia = "Matron">>
-<<if ($MatronID != 0)>>
-	<<setLocalPronouns _S.Matron>>
-	<span class='slave-name'><<= SlaveFullName(_S.Matron)>></span> is serving as your Matron.<br><br>$He will manage the nursery.
-<<else>>
-	You have not selected a Matron.
-<</if>>
-
-<br><br>''Appoint a Matron from your devoted slaves:''
-<br><br>[[None|Nursery][removeJob(_S.Matron, Job.MATRON)]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.nursery, "Nursery")>>
diff --git a/src/facilities/penthouse/HGSelect.js b/src/facilities/penthouse/HGSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..27b993c23689b74529f269f7ef14bae69ad192e2
--- /dev/null
+++ b/src/facilities/penthouse/HGSelect.js
@@ -0,0 +1,218 @@
+App.Facilities.HGSelect = function() {
+	let HGName = "Your Head Girl";
+	let div = document.createElement("div");
+	const f = document.createDocumentFragment();
+	let r = [];
+	let links = [];
+
+	if (S.HeadGirl) {
+		const {
+			His, He, he,
+			his, him, himself
+		} = getPronouns(S.HeadGirl);
+		HGName = SlaveFullName(S.HeadGirl);
+	}
+
+	App.UI.DOM.appendNewElement("h1", f, "Head Girl Management");
+
+	if (S.HeadGirl) {
+		f.append(`${SlaveFullName(S.HeadGirl)} is working as your HeadGirl. `);
+		if (V.arcologies[0].FSEgyptianRevivalistLaw === 1) {
+			f.append(`${He} is also your Consort; serving and providing comfort, in addition to performing normal Head Girl duties. `);
+		}
+		if (V.HGSuite) {
+			f.append(`Currently living in ${capFirstChar(V.HGSuiteName)} `);
+		}
+		f.append(App.UI.DOM.link("Remove HeadGirl", () => {
+			removeJob(S.HeadGirl, Job.HEADGIRL);
+		},
+		[], "Main"
+		));
+	} else {
+		f.append(`No HeadGirl assigned, appoint one from your devoted slaves.`);
+	}
+
+	App.UI.DOM.appendNewElement("div", f, `Slave training	${HGName} will prioritize enabled items in the following order`, "bold");
+
+	div.append(App.UI.DOM.makeCheckbox("headGirlTrainsHealth"), " Health");
+	App.UI.DOM.appendNewElement("div", f, div, "indent");
+	
+	div = document.createElement("div");
+	div.append(App.UI.DOM.makeCheckbox("headGirlTrainsParaphilias"), " Paraphilias");
+	App.UI.DOM.appendNewElement("div", f, div, "indent");
+	
+	if (V.headGirlTrainsFlaws) {
+		r.push(`${HGName} will train flaws.`,);
+	} else if (V.headGirlSoftensFlaws) {
+		r.push(`${HGName} will softern flaws into quirks.`);
+	} else if (V.headGirlOverridesQuirks) {
+		r.push(`${HGName} will override quirks.`);
+	}
+
+	links.push(App.UI.DOM.link(" Override quirks", () => {
+		V.headGirlTrainsFlaws = 0;
+		V.headGirlSoftensFlaws = 0;
+		V.headGirlOverridesQuirks = 1;
+	},
+	[], passage()
+	));
+	links.push(App.UI.DOM.link(" Soften flaws", () => {
+		V.headGirlTrainsFlaws = 0;
+		V.headGirlSoftensFlaws = 1;
+		V.headGirlOverridesQuirks = 0;
+	},
+	[], passage()
+	));
+	links.push(App.UI.DOM.link(" Train flaws", () => {
+		V.headGirlTrainsFlaws = 1;
+		V.headGirlSoftensFlaws = 0;
+		V.headGirlOverridesQuirks = 0;
+	},
+	[], passage()
+	));
+	
+	r.push(App.UI.DOM.generateLinksStrip(links));
+	App.Events.addNode(f, r, "div", "indent");
+
+	div = document.createElement("div");
+	div.append(App.UI.DOM.makeCheckbox("headGirlTrainsObedience"), " Obedience");
+	App.UI.DOM.appendNewElement("div", f, div, "indent");
+
+	div = document.createElement("div");
+	div.append(App.UI.DOM.makeCheckbox("headGirlTrainsSkills"), " Skills");
+	App.UI.DOM.appendNewElement("div", f, div, "indent");
+
+	App.UI.DOM.appendNewElement("div", f, "Training methods: ", "underline");
+	
+	r = [];
+	if (V.HGSeverity === 1) {
+		r.push(`${HGName} will be <span class="bold">aggressive</span> when punishing, with rape strongly encouraged.`);
+		r.push(App.UI.DOM.link(" Moderate", () => {
+			V.HGSeverity = 0;
+		},
+		[], passage()
+		));
+	} else if (V.HGSeverity === 0) {
+		links = [];
+		r.push(`${HGName} will be <span class="bold">moderate</span> when punishing, carefully selecting appropriate consequences.`);
+		links.push(App.UI.DOM.link(" Be aggressive", () => {
+			V.HGSeverity = 1;
+		},
+		[], passage()
+		));
+		links.push(App.UI.DOM.link(` Apply restrictions`, () => {
+			V.HGSeverity = -1;
+		},
+		[], passage()
+		));
+		r.push(App.UI.DOM.generateLinksStrip(links));
+	} else if (V.HGSeverity === -1) {
+		r.push(`${HGName} will be <span class="bold">respectful</span> when punishing, treating slaves decently.`);
+		r.push(App.UI.DOM.link(" Be stricter", () => {
+			V.HGSeverity = 0;
+		},
+		[], passage()
+		));
+	}
+	App.Events.addNode(f, r, "div", "indent");
+
+	r = [];
+	if (V.HGPiercings === 1) {
+		r.push(`${HGName} is <span class="bold">allowed</span> to use piercings as a tool to improve slaves' attitudes.`);
+		r.push(App.UI.DOM.link(" Disallow", () => {
+			V.HGPiercings = 0;
+		},
+		[], passage()
+		));
+	} else {
+		r.push(`${HGName} is <span class="bold">not allowed</span> to use piercings as a tool to improve slaves' attitudes.`);
+		r.push(App.UI.DOM.link(" Allow", () => {
+			V.HGPiercings = 1;
+		},
+		[], passage()
+		));
+	}
+	App.Events.addNode(f, r, "div", "indent");
+
+	r = [];
+	App.UI.DOM.appendNewElement("div", f, "Behavior towards you: ", "underline");
+	if (V.HGFormality === 1) {
+		r.push(`${HGName} will be <span class="bold">formal:</span> you will always be called ${getWrittenTitle(S.HeadGirl)}, just like any other slave.`);
+		r.push(App.UI.DOM.link(" Allow private informality", () => {
+			V.HGFormality = 0;
+		},
+		[], passage()
+		));
+	} else {
+		r.push(`${HGName} is allowed to be <span class="bold">informal:</span> in private, you can be called ${properTitle()}.`);
+		r.push(App.UI.DOM.link(" Maintain complete formality", () => {
+			V.HGFormality = 1;
+		},
+		[], passage()
+		));
+	}
+	App.Events.addNode(f, r, "div", "indent");
+
+	if (V.seePreg !== 0 && S.HeadGirl) {
+		if (V.universalRulesImpregnation === "HG") {
+			f.append(`${HGName} is responsible for impregnating fertile slaves.`);
+			V.HGCum = resetHGCum(S.HeadGirl);
+			if (canPenetrate(S.HeadGirl) && S.HeadGirl.pubertyXY === 1) {
+				f.append(`To maximize the chances of impregnation, ${he} will fuck fertile pussies frequently during the week. ${S.HeadGirl.slaveName} can service ${V.HGCum} slaves this way.`);
+				if (S.HeadGirl.devotion > 95) {
+					f.append(`${He} loves you so much ${he}'ll fuck them until ${he}'s sore.`);
+				} else {
+					f.append(`If ${he} were more devoted to you, ${he} might be able to drive ${himself} to get hard and service one more.`);
+				}
+				if (S.HeadGirl.balls >= 120) {
+					r.push(`${His} unreal balls produce nearly an endless supply of semen; ${his} ability to impregnate is almost limitless.`);
+				} else if (S.HeadGirl.balls >= 80) {
+					r.push(`${His} inhuman balls produce so much semen ${he} can easily impregnate twenty girls in one sitting.`);
+				} else if (S.HeadGirl.balls >= 50) {
+					r.push(`${His} giant balls produce so much semen ${he} can easily impregnate twelve girls in one sitting.`);
+				} else if (S.HeadGirl.balls >= 25) {
+					r.push(`${His} oversized balls produce so much semen ${he} can cum repeatedly in a single session.`);
+				} else if (S.HeadGirl.balls >= 5) {
+					r.push(`${His} big balls produce so much semen ${he} can cum more before ${he}'s drained.`);
+				} else {
+					r.push(`Bigger balls would let ${him} cum more before ${he}'s drained.`);
+				}
+				if (S.HeadGirl.health.condition > 95) {
+					f.append(`${His} wonderful health lets ${him} get hard and stay hard all the time.`);
+				} else {
+					f.append(`If ${his} health were perfect, ${he} might be able to get hard more often.`);
+				}
+				if (S.HeadGirl.energy > 95) {
+					f.append(`${His} nymphomania drives ${him} to go above and beyond in this.`);
+				} else {
+					f.append(`A more powerful sex drive could reduce ${his} refractory period.`);
+				}
+			} else {
+				f.append(`However, ${S.HeadGirl.slaveName} cannot perform this duty.`);
+			}
+			r.push(App.UI.DOM.link(` Rescind ${his} impregnation responsibility`, () => {
+				V.universalRulesImpregnation = "none";
+			},
+			[], passage()
+			));
+			r.push(App.UI.DOM.link(` See to it yourself`, () => {
+				V.universalRulesImpregnation = "PC";
+			},
+			[], passage()
+			));
+			f.append(App.UI.DOM.generateLinksStrip(r));
+		} else {
+			if (canPenetrate(S.HeadGirl) && S.HeadGirl.pubertyXY === 1) {
+				App.UI.DOM.appendNewElement("div", f, `${HGName} is capable of impregnating slaves, but it's not part of ${his} responsibilities.`).append(
+					App.UI.DOM.link(` Assign ${him} to impregnate`, () => {
+						V.universalRulesImpregnation = "HG";
+					},
+					[], passage()
+					));
+			}
+		}
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.headGirlSuite, "Main"));
+	return f;
+};
diff --git a/src/facilities/penthouse/RecruiterSelect.js b/src/facilities/penthouse/RecruiterSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f143a82e5906260efded3d1c1b1e4c8c27b89c3
--- /dev/null
+++ b/src/facilities/penthouse/RecruiterSelect.js
@@ -0,0 +1,160 @@
+App.Facilities.RecruiterSelect = function() {
+	const f = document.createDocumentFragment();
+	const recruiterCap = document.createDocumentFragment();
+	let newLine = document.createElement("div");
+	let r = [];
+
+	if (S.Recruiter) {
+		f.append(`${SlaveFullName(S.Recruiter)} is working as your Recruiter, currently ${V.recruiterTarget !== "other arcologies" ? 'recruiting girls. ' : 'acting as a sexual Ambassador'}`);
+		if (V.recruiterTarget === "other arcologies") {
+			if (V.arcologies[0].influenceTarget === -1) {
+				f.append(`.<span class='red'>Since you have not selected another arcology to influence, your recruiter's talents are going to waste. Select an influence target to apply them. `);
+			} else {
+				f.append(` to `);
+				for (const arc of V.arcologies) {
+					if (arc.direction === V.arcologies[0].influenceTarget) {
+						f.append(`${arc.name}` );
+						break;
+					}
+				}
+			}
+		}
+		f.append(App.UI.DOM.link("Remove Recruiter", () => {
+			removeJob(S.Recruiter, Job.RECRUITER);
+		},
+		[], "Main"
+		));
+	} else {
+		f.append(`No Recruiter assigned, appoint one from your devoted slaves.`);
+	}
+
+	App.UI.DOM.appendNewElement("div", f);
+	f.append(`Your recruiter will target ${V.recruiterTarget}, `);
+	if (V.recruiterTarget === "desperate whores") {
+		f.append("they will be skilled but unhealthy. ");
+	} else if (V.recruiterTarget === "young migrants") {
+		f.append("they will be young and inexperienced but unhealthy. ");
+	} else if (V.recruiterTarget === "Will be mature") {
+		f.append("they will be mature. ");
+	} else if (V.recruiterTarget === "expectant mothers") {
+		f.append("they will be pregnant and likely unhealthy. ");
+	} else if (V.recruiterTarget === "dissolute sissies") {
+		f.append("they will be born male and have some experience. ");
+	} else if (V.recruiterTarget === "reassignment candidates") {
+		f.append("they will be born male. ");
+	} else if (V.recruiterTarget === "other arcologies") {
+		f.append("they will appoint the Recruiter to be a sexual Ambassador. ");
+	}
+
+	r.push(App.UI.DOM.link(`Desperate whores`, () => {
+		V.recruiterTarget = "desperate whores";
+	},
+	[], passage()
+	));
+
+	r.push(App.UI.DOM.link("Young migrants", () => {
+		V.recruiterTarget = "young migrants";
+	},
+	[], passage()
+	));
+
+	r.push(App.UI.DOM.link("Recent divorcees", () => {
+		V.recruiterTarget = "recent divorcees";
+	},
+	[], passage()
+	));
+
+	if (V.seeDicks !== 100 && V.seePreg !== 0) {
+		r.push(App.UI.DOM.link("Expectant mothers", () => {
+			V.recruiterTarget = "expectant mothers";
+		},
+		[], passage()
+		));
+	}
+
+	if (V.seeDicks !== 0) {
+		r.push(App.UI.DOM.link("Dissolute sissies", () => {
+			V.recruiterTarget = "dissolute sissies";
+		},
+		[], passage()
+		));
+
+		r.push(App.UI.DOM.link("Reassignment candidates", () => {
+			V.recruiterTarget = "reassignment candidates";
+		},
+		[], passage()
+		));
+	}
+
+	if (V.arcologies.length > 1) {
+		r.push(App.UI.DOM.link("Other arcologies' cultures", () => {
+			V.oldRecruiterTarget = V.recruiterTarget;
+			V.recruiterTarget = "other arcologies";
+		},
+		[], passage()
+		));
+	}
+
+	f.append(App.UI.DOM.generateLinksStrip(r));
+
+	newLine.append(App.UI.DOM.makeCheckbox("recruiterEugenics"), App.UI.DOM.makeElement("note", " Target only individuals that can pass eugenics SMRs. This option will increase time it takes to recruit depending on how many eugenics SMR are active."));
+	f.append(newLine);
+
+	let idleTarget = 2 +
+	(V.brothel + V.club + V.arcade + V.dairy + V.servantsQuarters) +
+	V.masterSuite + V.HGSuite + V.dojo + V.brothel + V.club;
+	if (V.dairy && V.dairyRestraintsSetting < 2) {
+		idleTarget++;
+	}
+	idleTarget += V.farmyard + V.servantsQuarters + V.masterSuite + V.schoolroom + V.spa;
+	idleTarget += V.nursery + V.clinic + V.cellblock;
+
+	newLine = document.createElement("div");
+	newLine.append("Suspend active recruiting and focus on publicity when: ");
+	if (V.recruiterIdleRule === "number") {
+		newLine.append(`${V.recruiterIdleNumber} sex slaves owned`);
+	} else if (V.recruiterIdleRule === "facility") {
+		newLine.append(`match facility expansion, `);
+		if (idleTarget >= 20) {
+			newLine.append(`${idleTarget} positions.`);
+		} else {
+			newLine.append("20 positions (rule minimum).");
+		}
+	} else {
+		newLine.append("always recruit");
+	}
+	f.append(newLine);
+
+	r = [];
+	r.push(App.UI.DOM.link("Always recruit", () => {
+		V.recruiterIdleRule = "always";
+	},
+	[], passage()
+	));
+	r.push(App.UI.DOM.link("Facilities & leadership", () => {
+		V.recruiterIdleRule = "facility";
+	},
+	[], passage()
+	));
+
+	recruiterCap.append(App.UI.DOM.link("Set to this many slaves ", () => {
+		V.recruiterIdleRule = "number";
+	},
+	[], passage()
+	));
+	if (V.recruiterIdleRule === "number") {
+		recruiterCap.append(App.UI.DOM.makeTextBox(V.recruiterIdleNumber, (v) => {
+			V.recruiterIdleNumber = v;
+			Engine.play(passage());
+		}, true));
+	}
+	r.push(recruiterCap);
+
+	f.append(App.UI.DOM.generateLinksStrip(r));
+	App.UI.DOM.appendNewElement("div", f, "'Facilities' doesn't include training slots in cellblock, schoolroom, spa, clinic (but does include those leaders)");
+
+	V.recruiterIdleNumber = Math.max(Math.trunc(Number(V.recruiterIdleNumber) || 20), 20);
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.penthouse, "Main"));
+	return f;
+};
diff --git a/src/facilities/schoolroom/SchoolTeacherSelect.js b/src/facilities/schoolroom/SchoolTeacherSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..8501f5f29a9768cbdcc22ecc94e6ea93032cf53a
--- /dev/null
+++ b/src/facilities/schoolroom/SchoolTeacherSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.SchoolTeacherSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Schoolteacher) {
+		f.append(`${SlaveFullName(S.Schoolteacher)} is working as your Schoolteacher, helping to teach your slaves. `);
+		f.append(App.UI.DOM.link("Remove Schoolteacher", () => {
+			removeJob(S.Schoolteacher, Job.TEACHER);
+		},
+		[], "Schoolroom"
+		));
+	} else {
+		f.append(`No Schoolteacher assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.schoolroom, "Schoolroom"));
+	return f;
+};
diff --git a/src/facilities/servantsQuarters/StewardessSelect.js b/src/facilities/servantsQuarters/StewardessSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..cee631852fc790241f045afac9b051ef59907b21
--- /dev/null
+++ b/src/facilities/servantsQuarters/StewardessSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.StewardessSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Stewardess) {
+		f.append(`${SlaveFullName(S.Stewardess)} is working as your Stewardess, managing the Servants' Quarters. `);
+		f.append(App.UI.DOM.link("Remove Stewardess", () => {
+			removeJob(S.Stewardess, Job.STEWARD);
+		},
+		[], "Servants' Quarters"
+		));
+	} else {
+		f.append(`No Stewardess assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.servantsQuarters, "Servants' Quarters"));
+	return f;
+};
diff --git a/src/facilities/spa/AttendantSelect.js b/src/facilities/spa/AttendantSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5cdd28a9d28036cd504ded8a0fb13773b700983
--- /dev/null
+++ b/src/facilities/spa/AttendantSelect.js
@@ -0,0 +1,17 @@
+App.Facilities.AttendantSelect = function() {
+	const f = document.createDocumentFragment();
+
+	if (S.Attendant) {
+		f.append(`${SlaveFullName(S.Attendant)} is working as your Attendant, pampering and counseling your slaves. `);
+		f.append(App.UI.DOM.link("Remove Attendant", () => {
+			removeJob(S.Attendant, Job.ATTENDANT);
+		},
+		[], "Spa"
+		));
+	} else {
+		f.append(`No Attendant assigned, appoint one from your devoted slaves.`);
+	}
+
+	f.append(App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.spa, "Spa"));
+	return f;
+};
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index c1a0c6f3703349d40454a07a3adbe6ad604b7f28..3a68bd417b2a8e03762cf0fe8e2a39f546ffddd7 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -754,14 +754,6 @@ if(eventSlave.drugs === "breast injections") {
 				}
 			}
 
-			if (eventSlave.devotion < -20) {
-				if (eventSlave.trust >= -20) {
-					if (eventSlave.clothes === "uncomfortable straps") {
-						V.RESSevent.push("bondage gear");
-					}
-				}
-			}
-
 			if (eventSlave.labia > 1 && eventSlave.vagina >= 0) {
 				if (eventSlave.muscles > 5 || eventSlave.diet === "muscle building") {
 					if (eventSlave.belly < 10000) {
diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js
index 2767961d99f387cec4bb0ff4b7fb1b908985ca45..e46a14a10471165eeef4441092fe66a6f7add545 100644
--- a/src/js/utilsDOM.js
+++ b/src/js/utilsDOM.js
@@ -523,3 +523,18 @@ App.UI.DOM.makeRow = function(table, ...items) {
 		cell.innerHTML = item;
 	}
 };
+
+/**
+ * Creates a checkbox.
+ * @param arg - item to be checked. Currently only designed to with items that have values of 0 - 1.
+ */
+App.UI.DOM.makeCheckbox = function(arg) {
+	const checkbox = document.createElement("input");
+	checkbox.setAttribute("type", "checkbox");
+	checkbox.checked = (V[arg] === 1);
+
+	checkbox.onchange = () => {
+		V[arg] = checkbox.checked ? 1 : 0;
+	};
+	return checkbox;
+};
diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index 34f5c25651415bdbf1b2c0a18d97443f1b39c3d3..bf003da1defeb9196c739fd2fb257b0a00192262 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -3565,3 +3565,7 @@ globalThis.addPartner = function(slave, partner) {
 		partnerState.partners.add(slave.ID);
 	}
 };
+
+globalThis.resetHGCum = function(s) {
+	return 2 + Math.trunc((s.balls / 5) + (s.energy / 95) + (s.health.condition / 95) + (s.devotion / 95) + (V.reproductionFormula * 5));
+};
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index 953fadce9ff077bcf9cde64c689222788bcca714..07d1413fc8a2faba971882dedb4252fc27d2d2e0 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "implant inspection" "language lesson" "mindbroken morning" "modest clothes" "mods please" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave dick huge" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bonded love" "breast expansion blues" "confident tanning" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "implant inspection" "language lesson" "mindbroken morning" "modest clothes" "mods please" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave dick huge" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -927,27 +927,6 @@ One day, you give $him inconsequential orders, naturally addressing $him by $his
 <</if>>
 $He sets $his jaw and <<if canSee($activeSlave)>>manages to meet your eyes without flinching<<else>>meets your glare with a look of defiance<</if>>.
 
-<<case "bondage gear">>
-
-One day, you catch sight of <<= App.UI.slaveDescriptionDialog($activeSlave)>>
-<<if ($activeSlave.heels == 1 && shoeHeelCategory($activeSlave) == 0)>>
-	crawling
-<<elseif shoeHeelCategory($activeSlave) > 1>>
-	tottering
-<<else>>
-	walking
-<</if>>
-around stark naked. This is unacceptable, as $he has been ordered to wear humiliating and uncomfortable bondage gear. When confronted,
-<<if !canTalk($activeSlave)>>
-	<<if !hasAnyArms($activeSlave)>>
-		$he tries to communicate $his reluctance to wear the clothing as best as $he can with various head movements and facial expressions<<if $activeSlave.bellyPreg >= 5000>>, including several nods towards $his rounded middle<</if>>.
-	<<else>>
-		$he uses gestures to communicate $his embarrassment with $his clothing, covering $his nipples, crotch, and anus with $his hand<<if hasBothArms($activeSlave)>>s<</if>> one after the other, and begging for clothes that do the same.<<if $activeSlave.bellyPreg >= 5000>> $He also gestures to $his rounded belly with a look of concern.<</if>>
-	<</if>>
-<<else>>
-	$he <<say>>s fearfully, "I'm <<s>>orry, <<Master>>, but tho<<s>>e thing<<s>> are ju<<s>>t <<s>>o embarra<<ss>>ing!<<if $activeSlave.bellyPreg >= 5000>> I'm al<<s>>o worried for my <<if $activeSlave.pregType > 1>>babie<<s>>'<<else>>baby'<<s>><</if>> <<s>>afety.<</if>>"
-<</if>>
-
 <<case "vocal disobedience">>
 
 One morning, despite the fact that $he is not allowed to speak without being spoken to, <<= App.UI.slaveDescriptionDialog($activeSlave)>> <<if canSee($activeSlave)>>looks you directly in the eye<<else>>faces you<</if>> and asks
@@ -6750,85 +6729,6 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look.
 	<</link>>
 <</if>>
 
-<<case "bondage gear">>
-
-<<link "Let $him go naked">>
-	<<replace "#result">>
-		<<if canWalk($activeSlave)>>$He skips away happily,<<elseif isAmputee($activeSlave)>>$He wriggles $his stumps with pleasure,<<else>>$He cheerfully leaves your office,<</if>> overjoyed to be free of the clothing you ordered $him to wear. $His obedience to you @@.mediumorchid;has decreased,@@ as has @@.mediumaquamarine;$his fear@@ of you.
-		<<set $activeSlave.devotion -= 5, $activeSlave.trust += 4>>
-	<</replace>>
-<</link>>
-<br><<link "Force $him to choose between $his straps and public nudity">>
-	<<replace "#result">>
-		You tell $him that you understand, and that $he can go naked; $he looks thrilled until you tell $him $he'll be walking every hallway in $arcologies[0].name today, nude. Before $he can protest, you add that $his only other option is to put $his proper clothes back on and be a good little bitch.
-		<<if $activeSlave.fetish == "humiliation">>
-			$He @@.hotpink;happily accepts the alternative,@@
-			<<if canAchieveErection($activeSlave) && !($activeSlave.chastityPenis)>>
-				$his dick hardening
-			<<elseif $activeSlave.dick > 0>>
-				$his dick leaking precum
-			<<elseif $activeSlave.vagina > 0>>
-				$his pussy moistening
-			<<else>>
-				$his nipples <<if $activeSlave.nipples != "fuckable">>hardening<<else>>swelling<</if>>
-			<</if>>
-			with anticipation.
-			<<set $activeSlave.devotion += 4, $activeSlave.clothes = "no clothing">>
-			<<if $activeSlave.fetishKnown == 0>>
-				That was not the response you expected; turns out $he has a @@.lightcoral;humiliation fetish.@@
-				<<set $activeSlave.fetishKnown = 1>>
-			<</if>>
-		<<else>>
-			$He shudders and @@.gold;hurries to get $his straps back on.@@
-			<<set $activeSlave.trust -= 5>>
-		<</if>>
-	<</replace>>
-<</link>>
-<<if $activeSlave.buttplug == "none" && ($activeSlave.vagina < 0 || ($activeSlave.vaginalAccessory == "none" && $activeSlave.vaginalAttachment == "none"))>>
-	<br><<link "Add dildos to $his gear">>
-		<<replace "#result">>
-			You tell $him that you understand, and that you will get $him some new clothing. $He is thrilled, but $his pleasure turns to horror when $he sees that the new clothes are a version of the same slave bondage gear, just with inward-facing dildos for $his <<if $activeSlave.vagina > -1>>pussy and <</if>> asshole.
-			<<if $activeSlave.anus == 0 && $activeSlave.vagina == 0 && canDoAnal($activeSlave) && canDoVaginal($activeSlave)>>
-				You pause before getting $him dressed; there's little reason to waste virginities on plugs. You <<if $PC.dick != 0>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over, opting to start with $his tight pussy.
-				<<= VCheck.Both($activeSlave, 1)>>
-			<<elseif $activeSlave.anus == 0 && canDoAnal($activeSlave)>>
-				You pause before getting $him dressed; there's little reason to waste $his anal virginity on a plug. You <<if $PC.dick != 0>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over before working your way into $his tight anus.
-				<<= VCheck.Anal($activeSlave, 1)>>
-			<<elseif $activeSlave.vagina == 0 && canDoVaginal($activeSlave)>>
-				You pause before getting $him dressed; there's little reason to waste $his virginity on a plug. You <<if $PC.dick != 0>>stroke yourself to erection<<else>>don a strap-on<</if>> and bend $him over before working your way into $his tight pussy.
-				<<= VCheck.Vaginal($activeSlave, 1)>>
-			<</if>>
-			For the rest of the week, $he walks around awkwardly, unable to find a comfortable position <<if $activeSlave.belly >= 1500>>between<<else>>since<</if>> $his <<if $seeRace == 1>>$activeSlave.race <</if>>body <<if $activeSlave.belly < 1500>>is<</if>> being penetrated by $his own clothing<<if $activeSlave.belly >= 1500>> and the straps digging into $his _belly rounded belly<</if>>. @@.hotpink;$He has become more submissive.@@
-		<</replace>>
-		<<set $activeSlave.devotion += 4>>
-	<</link>><<if ($activeSlave.anus == 0 && canDoAnal($activeSlave)) || ($activeSlave.vagina == 0 && canDoVaginal($activeSlave))>> //This option will take $his virginity//<</if>>
-<</if>>
-<<if $arcade > 0>>
-	<br><<link "Sentence $him to a month in the arcade">>
-		<<replace "#result">>
-			$activeSlave.slaveName screams and begs when $he realizes what $his punishment is, but you are obdurate.
-			<<if ($activeSlave.muscles > 30)>>
-				$His powerful form has to be sedated for immurement in the arcade.
-			<<elseif ($activeSlave.weight >= 190)>>
-				$He is so massively fat that immuring $him in the arcade is a struggle, even when $he isn't trying to.
-			<<elseif $activeSlave.belly >= 120000>>
-				$He is so enormously gravid that immuring $him in the arcade is a hassle, even though $his _belly middle limits $his ability to struggle.
-			<<elseif ($activeSlave.weight >= -10)>>
-				$His desperate struggles make immuring $him in the arcade difficult.
-			<<elseif $activeSlave.belly >= 1500>>
-				$His <<if $activeSlave.bellyPreg >= 3000>>pregnant<<else>>_belly<</if>> body makes it slightly difficult to fit $him properly into the restraints for immurement in the arcade.
-			<<elseif $activeSlave.muscles < -15>>
-				$His weak body makes immuring $him in the arcade pathetically easy.
-			<<else>>
-				$His thin form makes immuring $him in the arcade pathetically easy.
-			<</if>>
-			After $he's properly confined, the only sign of $his discomfiture is a slight movement of $his $activeSlave.skin butt as $he wriggles desperately against $his restraints.
-			<<= assignJob($activeSlave, "be confined in the arcade")>>
-			<<set $activeSlave.sentence = 4>>
-		<</replace>>
-	<</link>>
-<</if>>
-
 <<case "vocal disobedience">>
 
 <<link "Give $him a rough spanking">>
diff --git a/src/uncategorized/attendantSelect.tw b/src/uncategorized/attendantSelect.tw
deleted file mode 100644
index f563ca18ad97374086798e02bcee9b96fc7b9285..0000000000000000000000000000000000000000
--- a/src/uncategorized/attendantSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Attendant Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Spa", $encyclopedia = "Attendant">>
-<<if _S.Attendant>>
-	<<setLocalPronouns _S.Attendant>>
-	<span class='slave-name'><<= SlaveFullName(_S.Attendant)>></span> is serving as your Attendant.<br><br>$He will help pamper and counsel your slaves.
-<<else>>
-	You have not selected an Attendant.
-<</if>>
-
-<br><br>''Appoint an Attendant from your devoted slaves:''
-<br><br>[[None|Spa][removeJob(_S.Attendant, Job.ATTENDANT)]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.spa, "Spa")>>
diff --git a/src/uncategorized/bgSelect.tw b/src/uncategorized/bgSelect.tw
deleted file mode 100644
index a1094cd42992729a37a444d0485d0fe4952b1560..0000000000000000000000000000000000000000
--- a/src/uncategorized/bgSelect.tw
+++ /dev/null
@@ -1,40 +0,0 @@
-:: BG Select [nobr jump-to-safe jump-from-safe]
-
-<<set $nextButton = "Back to Main", $nextLink = "Main", $encyclopedia = "Bodyguard">>
-
-<p class="scene-intro">
-</p>
-
-<p>
-	<<if (_S.Bodyguard)>>
-		<<setLocalPronouns _S.Bodyguard>>
-		<span class="slave-name"><<= SlaveFullName(_S.Bodyguard)>></span>
-		is serving as your bodyguard. $He will remain close to you at all times and guard your person.
-	<<else>>
-		You have not selected a bodyguard.
-	<</if>>
-</p>
-
-<div>
-	<<if $bodyguardTrains == 0>>
-		Your Bodyguard ''is not allowed'' to train potential successors.
-		<div class="choices">
-			[[Allow training|BG Select][$bodyguardTrains = 1]]
-		</div>
-	<<else>>
-		Your Bodyguard ''is allowed'' to train potential successors.
-		<div class="choices">
-			[[Stop training|BG Select][$bodyguardTrains = 0]]
-		</div>
-	<</if>>
-</div>
-
-<div style="font-weight:bold">
-	Appoint a bodyguard from your devoted slaves:
-</div>
-<div class="choices">
-	[[None|Main][removeJob(_S.Bodyguard, Job.BODYGUARD)]]
-</div>
-<p>
-	<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.armory, "Main")>>
-</p>
diff --git a/src/uncategorized/concubineSelect.tw b/src/uncategorized/concubineSelect.tw
deleted file mode 100644
index bc2b520e072bc93718c5252d550861726e49ff40..0000000000000000000000000000000000000000
--- a/src/uncategorized/concubineSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Concubine Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Master Suite", $encyclopedia = "Concubine">>
-<<if ($ConcubineID != 0)>>
-	<<setLocalPronouns _S.Concubine>>
-	<span class='slave-name'><<= SlaveFullName(_S.Concubine)>></span> is serving as your Concubine.<br><br>$He will take the lead in seeing to your pleasure.
-<<else>>
-	You have not selected a Concubine.
-<</if>>
-
-<br><br>''Appoint a Concubine from your devoted slaves:''
-<br><br>[[None|Master Suite][removeJob(_S.Concubine, Job.CONCUBINE)]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.masterSuite, "Master Suite")>>
diff --git a/src/uncategorized/djSelect.tw b/src/uncategorized/djSelect.tw
deleted file mode 100644
index 7a962c67acb2dcb087239931f6a6fc6ff834293f..0000000000000000000000000000000000000000
--- a/src/uncategorized/djSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: DJ Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Club", $encyclopedia = "DJ">>
-<<if (_S.DJ)>>
-	<<setLocalPronouns _S.DJ>>
-	<span class='slave-name'><<= SlaveFullName(_S.DJ)>></span> is serving as your DJ.<br><br>$He will headline entertainment in $clubName.
-<<else>>
-	You have not selected a DJ.
-<</if>>
-
-<br><br>''Appoint a DJ from your devoted slaves:''
-<br><br>[[None|Club][removeJob(_S.DJ, "be the DJ")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.club, "Club")>>
diff --git a/src/uncategorized/hgSelect.tw b/src/uncategorized/hgSelect.tw
deleted file mode 100644
index 8ef653742e91d627531e1c47b57b915b2310411e..0000000000000000000000000000000000000000
--- a/src/uncategorized/hgSelect.tw
+++ /dev/null
@@ -1,95 +0,0 @@
-:: HG Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back to Main", $nextLink = "Main", $encyclopedia = "Head Girl">>
-
-<h1>Head Girl Management</h1>
-
-<<set _HGName = "Your Head Girl">>
-<<if ($HeadGirlID != 0)>>
-	<<setLocalPronouns _S.HeadGirl>>
-	<<set _HGName = SlaveFullName(_S.HeadGirl)>>
-	<span class='slave-name'>_HGName</span> is serving as your Head Girl<<if $arcologies[0].FSEgyptianRevivalistLaw == 1>> and Consort; it is $his role to serve and comfort you at your side, in addition to performing normal Head Girl duties<</if>>.
-	<<if ($HGSuite)>>
-		<br> Currently $he lives in <<link "<<= capFirstChar($HGSuiteName)>>""Head Girl Suite">><</link>>
-	<</if>>
-	<br><br>
-<</if>>
-
-__Slave training__
-&nbsp;&nbsp;&nbsp;&nbsp;
-//_HGName will prioritize enabled items in the following order.//
-
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-<<if $headGirlTrainsHealth>><<checkbox "$headGirlTrainsHealth" 0 1 checked>><<else>><<checkbox "$headGirlTrainsHealth" 0 1>><</if>>
-Health
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-<<if $headGirlTrainsParaphilias>><<checkbox "$headGirlTrainsParaphilias" 0 1 checked>><<else>><<checkbox "$headGirlTrainsParaphilias" 0 1>><</if>>
-Paraphilias
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-<<if $headGirlTrainsFlaws>><<checkbox "$headGirlTrainsFlaws" 0 1 checked>><<else>><<checkbox "$headGirlTrainsFlaws" 0 1>><</if>>
-Flaws
-<<if $headGirlSoftensFlaws>><<checkbox "$headGirlSoftensFlaws" 0 1 checked>><<else>><<checkbox "$headGirlSoftensFlaws" 0 1>><</if>>
-Soften
-<<if $headGirlOverridesQuirks>><<checkbox "$headGirlOverridesQuirks" 0 1 checked>><<else>><<checkbox "$headGirlOverridesQuirks" 0 1>><</if>>
-Soften and Replace
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-<<if $headGirlTrainsObedience>><<checkbox "$headGirlTrainsObedience" 0 1 checked>><<else>><<checkbox "$headGirlTrainsObedience" 0 1>><</if>>
-Obedience
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-<<if $headGirlTrainsSkills>><<checkbox "$headGirlTrainsSkills" 0 1 checked>><<else>><<checkbox "$headGirlTrainsSkills" 0 1>><</if>>
-Skills
-
-<br>__Training methods__
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-_HGName will be
-<<if ($HGSeverity > 0)>>
-	''aggressive'' when punishing, with rape strongly encouraged. [[Moderate|HG Select][$HGSeverity = 0]]
-<<elseif ($HGSeverity == 0)>>
-	''moderate'' when punishing, carefully selecting appropriate consequences. [[Be aggressive|HG Select][$HGSeverity = 1]] | [["Restrict " + $him|HG Select][$HGSeverity = -1]]
-<<else>>
-	''respectful'' when punishing, treating slaves decently. [[Be stricter|HG Select][$HGSeverity = 0]]
-<</if>>
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-_HGName is
-<<if $HGPiercings>>
-	''allowed'' to use piercings as a tool to improve slaves' attitudes. [[Disallow|HG Select][$HGPiercings = 0]]
-<<else>>
-	''not allowed'' to use piercings as a tool to improve slaves' attitudes. [[Allow|HG Select][$HGPiercings = 1]]
-<</if>>
-
-<br>__Behavior towards you__
-<br>&nbsp;&nbsp;&nbsp;&nbsp;
-_HGName
-<<if ($HGFormality != 0)>>
-	will be ''formal'': $he will always call you <<= getWrittenTitle(_S.HeadGirl)>>, just like any other slave. [[Allow private informality|HG Select][$HGFormality = 0]]
-<<else>>
-	is allowed to be ''informal'': in private, $he may call you <<= properTitle()>>. [[Maintain complete formality|HG Select][$HGFormality = 1]]
-<</if>>
-
-<<if $seePreg != 0>>
-	<<if $HeadGirlID != 0>>
-		<<if $universalRulesImpregnation == "HG">>
-			<br><br>_HGName is responsible for impregnating fertile slaves.
-			<<set $HGCum = 2+Math.trunc((_S.HeadGirl.balls/5)+(_S.HeadGirl.energy/95)+(_S.HeadGirl.health.condition/95)+(_S.HeadGirl.devotion/95)+($reproductionFormula*5))>>
-			<<if canPenetrate(_S.HeadGirl) && _S.HeadGirl.pubertyXY == 1>>
-				To maximize the chances of impregnation, $he will fuck fertile pussies frequently during the week. _S.HeadGirl.slaveName can service $HGCum slaves this way.
-				<<if _S.HeadGirl.devotion > 95>>$He loves you so much $he'll fuck them until $he's sore.<<else>>If $he were more devoted to you, $he might be able to drive $himself to get hard and service one more.<</if>>
-				<<if _S.HeadGirl.balls >= 120>>$His unreal balls produce nearly an endless supply of semen; $his ability to impregnate is almost limitless.<<elseif _S.HeadGirl.balls >= 80>>$His inhuman balls produce so much semen $he can easily impregnate twenty girls in one sitting.<<elseif _S.HeadGirl.balls >= 50>>$His giant balls produce so much semen $he can easily impregnate twelve girls in one sitting.<<elseif _S.HeadGirl.balls >= 25>>$His oversized balls produce so much semen $he can cum repeatedly in a single session.<<elseif _S.HeadGirl.balls >= 5>>$His big balls produce so much semen $he can cum more before $he's drained.<<else>>Bigger balls would let $him cum more before $he's drained.<</if>>
-				<<if _S.HeadGirl.health.condition > 95>>$His wonderful health lets $him get hard and stay hard all the time.<<else>>If $his health were perfect, $he might be able to get hard more often.<</if>>
-				<<if _S.HeadGirl.energy > 95>>$His nymphomania drives $him to go above and beyond in this.<<else>>A more powerful sex drive could reduce $his refractory period.<</if>>
-			<<else>>
-				However, _S.HeadGirl.slaveName cannot perform this duty.
-			<</if>>
-			[["Rescind " + $his + " impregnation responsibility"|HG Select][$universalRulesImpregnation = "none"]] | [[See to it yourself|HG Select][$universalRulesImpregnation = "PC"]]
-		<<else>>
-			<<if canPenetrate(_S.HeadGirl) && _S.HeadGirl.pubertyXY == 1>>
-				<br><br>_HGName is capable of impregnating slaves, but it's not part of $his responsibilities. [["Assign " + $him + " to impregnate"|HG Select][$universalRulesImpregnation = "HG"]]
-			<</if>>
-		<</if>>
-	<</if>>
-<</if>>
-
-<br><br>''Appoint a Head Girl from among your devoted slaves:''
-<br><br>[[None|Main][removeJob(_S.HeadGirl, "be your Head Girl")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.headGirlSuite, "Main")>>
diff --git a/src/uncategorized/madamSelect.tw b/src/uncategorized/madamSelect.tw
deleted file mode 100644
index 35ec6c33eb6b97f7f5f6e8f5dca0c69b1643e038..0000000000000000000000000000000000000000
--- a/src/uncategorized/madamSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Madam Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Brothel", $encyclopedia = "Madam">>
-<<if ($MadamID != 0)>>
-	<<setLocalPronouns _S.Madam>>
-	<span class='slave-name'><<= SlaveFullName(_S.Madam)>></span> is serving as your Madam.<br><br>$He will manage the brothel.
-<<else>>
-	You have not selected a Madam.
-<</if>>
-
-<br><br>''Appoint a Madam from your devoted slaves:''
-<br><br>[[None|Brothel][removeJob(_S.Madam, "be the Madam")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.brothel, "Brothel")>>
diff --git a/src/uncategorized/milkmaidSelect.tw b/src/uncategorized/milkmaidSelect.tw
deleted file mode 100644
index 02bfe668d0e973b28a3b8deef5ae6eb7d2e896b4..0000000000000000000000000000000000000000
--- a/src/uncategorized/milkmaidSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Milkmaid Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Dairy", $encyclopedia = "Milkmaid">>
-<<if ($MilkmaidID != 0)>>
-	<<setLocalPronouns _S.Milkmaid>>
-	<span class='slave-name'><<= SlaveFullName(_S.Milkmaid)>></span> is serving as your Milkmaid.<br><br>$He will look after your livestock, helping them give milk<<if $seeDicks > 0>> and semen<</if>>.
-<<else>>
-	You have not selected a Milkmaid.
-<</if>>
-
-<br><br>''Appoint a Milkmaid from your obedient slaves:''
-<br><br>[[None|Dairy][removeJob(_S.Milkmaid, "be the Milkmaid")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.dairy, "Dairy")>>
diff --git a/src/uncategorized/nurseSelect.tw b/src/uncategorized/nurseSelect.tw
deleted file mode 100644
index 84211a0e169b22a1ea03c3bf0e92c6006fdfad19..0000000000000000000000000000000000000000
--- a/src/uncategorized/nurseSelect.tw
+++ /dev/null
@@ -1,15 +0,0 @@
-:: Nurse Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Clinic", $encyclopedia = "Nurse">>
-<<if _S.Nurse>>
-	<<setLocalPronouns _S.Nurse>>
-	<span class='slave-name'><<= SlaveFullName(_S.Nurse)>></span> is serving as your Nurse.<br><br>$He will help heal your slaves.
-<<else>>
-	You have not selected a Nurse.
-<</if>>
-
-<br><br>''Appoint a Nurse from your devoted slaves:''
-<br><br>[[None|Clinic][removeJob(_S.Nurse, "be the Nurse")]]
-<br><br>
-
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.clinic, "Clinic")>>
diff --git a/src/uncategorized/recruiterSelect.tw b/src/uncategorized/recruiterSelect.tw
deleted file mode 100644
index 23c96f0d8cc23063cdd6b7620c8c611222adee15..0000000000000000000000000000000000000000
--- a/src/uncategorized/recruiterSelect.tw
+++ /dev/null
@@ -1,67 +0,0 @@
-:: Recruiter Select [nobr jump-to-safe jump-from-safe]
-
-<<set $nextButton = "Back to Main", $nextLink = "Main", $encyclopedia = "Recruiter">>
-<<if ($RecruiterID != 0)>>
-	<<setLocalPronouns _S.Recruiter>>
-	<span class='slave-name'><<= SlaveFullName(_S.Recruiter)>></span> is
-	<<if $recruiterTarget != "other arcologies">>
-		recruiting girls.
-	<<else>>
-		acting as a sexual
-		<<if $arcologies[0].influenceTarget == -1>>
-			Ambassador. @@.red;Since you have not selected another arcology to influence, $he has no target for Ambassadorial duties. Select an influence target to apply $his talents.@@
-		<<else>>
-			Ambassador to <<for $i = 0; $i < $arcologies.length; $i++>><<if $arcologies[$i].direction == $arcologies[0].influenceTarget>>$arcologies[$i].name<<break>><</if>><</for>>.
-		<</if>>
-	<</if>>
-<<else>>
-	You do not have a recruiter working at present.
-<</if>>
-
-<br><br>Your recruiter will <<if $recruiterTarget != "other arcologies">>target ''$recruiterTarget.''<<else>>spread your arcology's culture to neighboring arcologies.<</if>> __Assign a different focus:__
-<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Desperate whores|Recruiter Select][$recruiterTarget = "desperate whores"]] //Likely to be skilled but unhealthy//
-<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Young migrants|Recruiter Select][$recruiterTarget = "young migrants"]] //Young and inexperienced but unhealthy//
-<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Recent divorcees|Recruiter Select][$recruiterTarget = "recent divorcees"]] //Will be mature//
-<<if ($seeDicks != 100) && $seePreg != 0>>
-	<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Expectant mothers|Recruiter Select][$recruiterTarget = "expectant mothers"]] //Will be pregnant, and likely unhealthy//
-<</if>>
-<<if ($seeDicks != 0)>>
-	<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Dissolute sissies|Recruiter Select][$recruiterTarget = "dissolute sissies"]] //Will be born male and have some experience//
-	<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Reassignment candidates|Recruiter Select][$recruiterTarget = "reassignment candidates"]] //Will be born male//
-<</if>>
-<<if $arcologies.length > 1>>
-	<<if $FSAnnounced>>
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;[[Other arcologies' cultures|Recruiter Select][$oldRecruiterTarget = $recruiterTarget, $recruiterTarget = "other arcologies"]] //Will appoint the Recruiter to be a sexual Ambassador//
-	<</if>>
-<</if>>
-
-<br><br>Target only individuals that can pass eugenics SMR.
-<<if $recruiterEugenics < 1>>[[Target|Recruiter Select][$recruiterEugenics = 1]]
-	<<else>>[[Stop targeting|Recruiter Select][$recruiterEugenics = 0]]
-<</if>>
-<br>&nbsp;//This option will increase time it takes to recruit depending on how many eugenics SMR are active.//
-
-/* sum for "facilities & leadership" */
-<<set _idleTarget = (2 + $brothel + $club + $arcade + $dairy + $servantsQuarters + $masterSuite)>>
-<<if $HGSuite>><<set _idleTarget++>><</if>>
-<<if $dojo>><<set _idleTarget++>><</if>>
-<<if $brothel>><<set _idleTarget++>><</if>>
-<<if $club>><<set _idleTarget++>><</if>>
-<<if $dairy && ($dairyRestraintsSetting < 2)>><<set _idleTarget++>><</if>>
-<<if $farmyard>><<set _idleTarget++>><</if>>
-<<if $servantsQuarters>><<set _idleTarget++>><</if>>
-<<if $masterSuite>><<set _idleTarget++>><</if>>
-<<if $schoolroom>><<set _idleTarget++>><</if>>
-<<if $spa>><<set _idleTarget++>><</if>>
-<<if $nursery>><<set _idleTarget++>><</if>>
-<<if $clinic>><<set _idleTarget++>><</if>>
-<<if $cellblock>><<set _idleTarget++>><</if>>
-
-<br><br>Suspend active recruiting and focus on publicity when: <span id="idleRule"><<switch $recruiterIdleRule>><<case "number">>''$recruiterIdleNumber sex slaves owned''<<case "facility">>''match facility expansion'', currently <<if _idleTarget >= 20>>_idleTarget positions<<else>>20 positions (rule minimum)<</if>><<default>>''always recruit''<</switch>></span>
-<br>&nbsp;&nbsp;&nbsp;&nbsp; <<link "Always recruit">><<set $recruiterIdleRule = "always">><<replace "#idleRule">>''always recruit''<</replace>><</link>> | <<link "Facilities & leadership">><<set $recruiterIdleRule = "facility">><<replace "#idleRule">>''match facility expansion'', currently <<if _idleTarget >=20>>_idleTarget positions<<else>>20 positions (rule minimum)<</if>><</replace>><</link>> | <<link "Set to this many slaves:">><<set $recruiterIdleRule = "number", $recruiterIdleNumber = Math.max(Math.trunc(Number($seed) || 20), 20)>><<replace "#idleRule">>''$recruiterIdleNumber sex slaves owned''<</replace>><<replace "#numberBox">><<textbox "$seed" $recruiterIdleNumber>><</replace>><</link>> <span id="numberBox"><<textbox "$seed" $recruiterIdleNumber>></span> /* use of $seed in conjunction with link prevents NaN error */
-<br>&nbsp; //"Facilities" doesn't include training slots in cellblock, schoolroom, spa, clinic (but does include those leaders)//
-
-<br><br>''Appoint a recruiter from among your devoted slaves:''
-<br>[[None|Main][removeJob(_S.Recruiter, "recruit girls")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.penthouse, "Main")>>
diff --git a/src/uncategorized/schoolteacherSelect.tw b/src/uncategorized/schoolteacherSelect.tw
deleted file mode 100644
index 7572a3d974d9a863dcab5b573fc2886f6a5cb300..0000000000000000000000000000000000000000
--- a/src/uncategorized/schoolteacherSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Schoolteacher Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Schoolroom", $encyclopedia = "Schoolteacher">>
-<<if _S.Schoolteacher>>
-	<<setLocalPronouns _S.Schoolteacher>>
-	<span class='slave-name'><<= SlaveFullName(_S.Schoolteacher)>></span> is serving as your Schoolteacher.<br><br>$He will help teach your slaves.
-<<else>>
-	You have not selected a Schoolteacher.
-<</if>>
-
-<br><br>''Appoint a Schoolteacher from your devoted slaves:''
-<br><br>[[None|Schoolroom][removeJob(_S.Schoolteacher, "be the Schoolteacher")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.schoolroom, "Schoolroom")>>
diff --git a/src/uncategorized/stewardessSelect.tw b/src/uncategorized/stewardessSelect.tw
deleted file mode 100644
index a9dc36cfaa208ee59e6792dc62cb935d5337c05b..0000000000000000000000000000000000000000
--- a/src/uncategorized/stewardessSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Stewardess Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Servants' Quarters", $encyclopedia = "Stewardess">>
-<<if (_S.Stewardess)>>
-	<<setLocalPronouns _S.Stewardess>>
-	<span class='slave-name'><<= SlaveFullName(_S.Stewardess)>></span> is serving as your Stewardess.<br><br>$He will manage the Servants' Quarters.
-<<else>>
-	You have not selected a Stewardess.
-<</if>>
-
-<br><br>''Appoint a Stewardess from your devoted slaves:''
-<br><br>[[None|Servants' Quarters][removeJob(_S.Stewardess, Job.STEWARD)]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.servantsQuarters, "Servants' Quarters")>>
diff --git a/src/uncategorized/wardenessSelect.tw b/src/uncategorized/wardenessSelect.tw
deleted file mode 100644
index 6ae7bf5aed1652a53263bca874574444d24f3719..0000000000000000000000000000000000000000
--- a/src/uncategorized/wardenessSelect.tw
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Wardeness Select [nobr jump-to-safe jump-hidden jump-from-safe]
-
-<<set $nextButton = "Back", $nextLink = "Cellblock", $encyclopedia = "Wardeness">>
-<<if (_S.Wardeness)>>
-	<<setLocalPronouns _S.Wardeness>>
-	<span class='slave-name'><<= SlaveFullName(_S.Wardeness)>></span> is serving as your Wardeness.<br><br>$He will help break your prisoners.
-<<else>>
-	You have not selected a Wardeness.
-<</if>>
-
-<br><br>''Appoint a Wardeness from your devoted slaves:''
-<br><br>[[None|Cellblock][removeJob(_S.Wardeness, "be the Wardeness")]]
-<br><br>
-<<includeDOM App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.cellblock, "Cellblock")>>