diff --git a/.eslintrc.json b/.eslintrc.json
index a6e42b5d1274fad3a79cc052a9a0b0ec9249abaa..82ee849b4bb73273ecf94939a04feca8da63589c 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -31,6 +31,7 @@
 		}
 	},
 	"rules": {
+		"no-prototype-builtins": "off",
 		"semi": ["warn", "always"],
 		"semi-spacing": "warn",
 		"semi-style": "warn",
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index b21c33472b2279f2c9925510f323eef013c27ee6..31eec13a017d7b762f927b9d5b8af6af2a0b566b 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -237,7 +237,7 @@ App.Data.FSWares = [
 ];
 
 App.Data.illegalWares = [
-	// "AnimalOrgans" for future use
+	"AnimalOrgans",
 	"asexualReproduction",
 	"BlackmarketPregAdaptation",
 	"childhoodFertilityInducedNCS",
@@ -810,7 +810,7 @@ App.Data.resetOnNGPlus = {
 	farmMenialsSpace: 0,
 	farmyardDecoration: "standard",
 	farmyardUpgrade: {
-		pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0, lab: 0
+		pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0
 	},
 	farmyardCrops: 0,
 	farmyardStable: 0,
@@ -819,8 +819,6 @@ App.Data.resetOnNGPlus = {
 	activeCanine: 0,
 	activeHooved: 0,
 	activeFeline: 0,
-	farmyardLab: 0,
-	farmyardLabUpgrades: {animalOvaries: 0, animalTesticles: 0, animalMpreg: 0},
 	animalsBought: {
 		canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0
 	},
@@ -1064,8 +1062,6 @@ App.Data.resetOnNGPlus = {
 	/** @type {FC.SlaveStateOrZero} */
 	Farmer: 0,
 	/** @type {FC.SlaveStateOrZero} */
-	Collectrix: 0,
-	/** @type {FC.SlaveStateOrZero} */
 	Stewardess: 0,
 	stewardessImpregnates: 0,
 	/** @type {FC.SlaveStateOrZero} */
diff --git a/src/003-assets/CSS/tabs.css b/src/003-assets/CSS/tabs.css
index 6076e6b370d7eb4cc90280436768323b287d6e46..dfbbd57abb7104b61f994bbd2e0fa052532a8e3d 100644
--- a/src/003-assets/CSS/tabs.css
+++ b/src/003-assets/CSS/tabs.css
@@ -1,24 +1,11 @@
-div.tabbar button.show-warning { /* dumb name, but warning and error already exist */
-	background-color: #b30000;
-	border-color: #b30000;
-}
-
-div.tabbar button.show-warning:hover {
-	background-color: #e60000
-}
-
-div.tabbar button.show-warning.active {
-	background-color: #4d0000;
-}
-
 div.tabbar {
 	overflow: hidden;
 }
 
 div.tabbar button {
-	background-color: #252525;
-	border: solid 2px #252525;
-	color: #68d;
+	background-color: var(--button-color);
+	border: solid 2px var(--button-color);
+	color: var(--link-color);
 	float: left;
 	outline: none;
 	cursor: pointer;
@@ -38,14 +25,27 @@ div.tabbar button.card.active {
 }
 
 div.tabbar button:hover {
-	background-color: #414141;
+	background-color: var(--button-hover-color);
 }
 
 div.tabbar button.active {
-	background-color: #050505;
+	background-color: var(--button-selected-color);
 	color: #c7cedf;
 }
 
+div.tabbar button.show-warning { /* dumb name, but warning and error already exist */
+	background-color: #b30000;
+	border-color: #b30000;
+}
+
+div.tabbar button.show-warning:hover {
+	background-color: #e60000
+}
+
+div.tabbar button.show-warning.active {
+	background-color: #4d0000;
+}
+
 div.tabbar a.active {
 	color: white;
 	pointer-events: none;
diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 465475f98395b36a0d53a928ba156a241c8d07b4..e7ee3b917e044a04abc91478acc48fe6f5394748 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -123,29 +123,29 @@ App.Entity.Facilities.Job = class {
 
 	/**
 	 * Returns link text for the penthouse assignment
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [passage] passage to go to
 	 * @param {linkCallback} [callback]
 	 * @param {string} [linkText]
 	 * @returns {string}
 	 */
-	assignmentLink(i, passage, callback, linkText) {
+	assignmentLink(ID, passage, callback, linkText) {
 		linkText = linkText || this.desc.position;
 		const linkAction = callback !== undefined ? callback(this.desc.assignment) : '';
-		return `<<link "${linkText}"${passage !== undefined ? ' "' + passage + '"' : ''}>><<= assignJob(${App.Utils.slaveRefString(i)}, "${this.desc.assignment}")>>${linkAction}<</link>>`;
+		return `<<link "${linkText}"${passage !== undefined ? ' "' + passage + '"' : ''}>><<= assignJob(slaveStateById(${ID}), "${this.desc.assignment}")>>${linkAction}<</link>>`;
 	}
 
 	/**
 	 * Returns link text for the penthouse assignment
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [passage] passage to go to
 	 * @param {assignmentCallback} [callback]
 	 * @param {string} [linkText]
 	 * @returns {HTMLAnchorElement}
 	 */
-	assignmentLinkElement(i, passage, callback, linkText) {
+	assignmentLinkElement(ID, passage, callback, linkText) {
 		linkText = linkText || this.desc.position;
-		return App.UI.DOM.assignmentLink(State.variables.slaves[i], this.desc.assignment, passage, callback, linkText);
+		return App.UI.DOM.assignmentLink(slaveStateById(ID), this.desc.assignment, passage, callback, linkText);
 	}
 
 	/**
@@ -408,15 +408,15 @@ App.Entity.Facilities.Facility = class {
 
 	/**
 	 * Returns link text for the job assignments
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [job] generate link only for this job
 	 * @param {string} [passage]
 	 * @param {linkCallback} callback
 	 * @returns {string[]}
 	 */
-	assignmentLinks(i, job, passage, callback) {
+	assignmentLinks(ID, job, passage, callback) {
 		/** @type {App.Entity.SlaveState} */
-		const slave = App.Utils.slaveByIndex(i);
+		const slave = slaveStateById(ID);
 		const jobs = job === undefined ? this._jobs : {job: this._jobs[job]};
 
 		let res = [];
@@ -424,7 +424,7 @@ App.Entity.Facilities.Facility = class {
 			const j = jobs[jn];
 			let rejects = j.canEmploy(slave);
 			if (rejects.length === 0) {
-				res.push(j.assignmentLink(i, passage, callback));
+				res.push(j.assignmentLink(ID, passage, callback));
 			} else {
 				res.push(App.UI.disabledLink(j.desc.position, rejects));
 			}
@@ -434,15 +434,15 @@ App.Entity.Facilities.Facility = class {
 
 	/**
 	 * Returns link text for the job assignments
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [job] generate link only for this job
 	 * @param {string} [passage]
 	 * @param {assignmentCallback} callback
 	 * @returns {HTMLElement[]}
 	 */
-	assignmentLinkElements(i, job, passage, callback) {
+	assignmentLinkElements(ID, job, passage, callback) {
 		/** @type {App.Entity.SlaveState} */
-		const slave = App.Utils.slaveByIndex(i);
+		const slave = slaveStateById(ID);
 		const jobs = job === undefined ? this._jobs : {job: this._jobs[job]};
 
 		let res = [];
@@ -450,7 +450,7 @@ App.Entity.Facilities.Facility = class {
 			const j = jobs[jn];
 			let rejects = j.canEmploy(slave);
 			if (rejects.length === 0) {
-				res.push(j.assignmentLinkElement(i, passage, callback));
+				res.push(j.assignmentLinkElement(ID, passage, callback));
 			} else {
 				res.push(App.UI.DOM.disabledLink(j.desc.position, rejects));
 			}
@@ -460,28 +460,28 @@ App.Entity.Facilities.Facility = class {
 
 	/**
 	 * Returns link text for the facility transfer
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [job] transfer to this job (uses default job if this is undefined)
 	 * @param {string} [passage]
 	 * @param {linkCallback} [callback]
 	 * @returns {string}
 	 */
-	transferLink(i, job, passage, callback) {
+	transferLink(ID, job, passage, callback) {
 		job = job || this.desc.defaultJob;
-		return this._jobs[job].assignmentLink(i, passage, callback, this.genericName);
+		return this._jobs[job].assignmentLink(ID, passage, callback, this.genericName);
 	}
 
 	/**
 	 * Returns link text for the facility transfer
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [job] transfer to this job (uses default job if this is undefined)
 	 * @param {string} [passage]
-	 * @param {linkCallback} [callback]
+	 * @param {assignmentCallback} [callback]
 	 * @returns {HTMLElement}
 	 */
-	transferLinkElement(i, job, passage, callback) {
+	transferLinkElement(ID, job, passage, callback) {
 		job = job || this.desc.defaultJob;
-		return this._jobs[job].assignmentLinkElement(i, passage, callback, this.genericName);
+		return this._jobs[job].assignmentLinkElement(ID, passage, callback, this.genericName);
 	}
 
 	/**
@@ -533,38 +533,33 @@ App.Entity.Facilities.Facility = class {
 App.Entity.Facilities.FacilitySingleJob = class extends App.Entity.Facilities.Job {
 	/**
 	 * Returns link text for the penthouse assignment
-	 * @param {number} i slave index
-	 * @param {string} [passage] passage to go to
+	 * @param {number} ID slave ID
+	 * @param {string} [targetPassage] passage to go to
 	 * @param {linkCallback} [callback]
 	 * @param {string} [linkText]
 	 * @returns {string}
 	 */
-	assignmentLink(i, passage, callback, linkText) {
+	assignmentLink(ID, targetPassage, callback, linkText) {
 		linkText = linkText || this.facility.genericName;
 		const linkAction = callback !== undefined ? callback(this.desc.assignment) : '';
-		const psg = passage === undefined ? '' : `, $returnTo = "${passage}"`;
-		return `<<link "${linkText}" "Assign">><<set $assignTo = "${this.facility.genericName}", $i = ${i}${psg}>>${linkAction}<</link>>`;
+		return `<<link "${linkText}">>${linkAction}<<run assignmentTransition(slaveStateById(${ID}), "${this.facility.genericName}", "${targetPassage || passage()}")>><</link>>`;
 	}
 
 	/**
-	 * @param {number} i slave index
+	 * @param {number} ID slave ID
 	 * @param {string} [targetPassage] passage to go to
 	 * @param {assignmentCallback} [callback]
 	 * @param {string} [linkText]
 	 * @returns {HTMLAnchorElement}
 	 */
-	assignmentLinkElement(i, targetPassage, callback, linkText) {
+	assignmentLinkElement(ID, targetPassage, callback, linkText) {
 		linkText = linkText || this.desc.position;
-		return App.UI.DOM.assignmentLink(State.variables.slaves[i], this.desc.assignment, "Assign",
+		return App.UI.DOM.assignmentLink(slaveStateById(ID), this.desc.assignment, "",
 			(slave, assignment) => {
 				if (callback) {
 					callback(slave, assignment);
 				}
-				// Set up environment for the "Assign" passage
-				V.i = V.slaveIndices[slave.ID];
-				V.activeSlave = slave;
-				V.assignTo = this.facility.genericName;
-				V.returnTo = targetPassage ? targetPassage : passage();
+				assignmentTransition(slave, assignment, targetPassage || passage());
 			}, linkText);
 	}
 
diff --git a/src/004-base/proxies.js b/src/004-base/proxies.js
index 40af52badfbb5fff43cec0fbf2036be990dbfec2..d28b2503a69bc3e04547a4efc47ff3ff24ac24d7 100644
--- a/src/004-base/proxies.js
+++ b/src/004-base/proxies.js
@@ -103,7 +103,8 @@ Object.defineProperty(window, "V", {
 		return State.variables;
 	}
 });
-//This should be used if the user might use V under normal, non-cheating circumstances but shouldn't be punished for accidentally setting the value. The attempt to make the change will simply be disregarded.
+
+// This should be used if the user might use V under normal, non-cheating circumstances but shouldn't be punished for accidentally setting the value. The attempt to make the change will simply be disregarded.
 globalThis.runWithReadonlyProxy = function(callback) {
 	globalThis.storyProxy = createReadonlyProxy(State.variables);
 	try {
diff --git a/src/004-base/specialSlavesProxy.js b/src/004-base/specialSlavesProxy.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e6c1c7af988ef59c5d713c0d494f700ab11520a
--- /dev/null
+++ b/src/004-base/specialSlavesProxy.js
@@ -0,0 +1,58 @@
+App.SpecialSlavesProxy = class SpecialSlavesProxy {
+	constructor() {
+	}
+
+	get Attendant() {
+		return V.Attendant;
+	}
+	get Bodyguard() {
+		return V.Bodyguard;
+	}
+	get Concubine() {
+		return V.Concubine;
+	}
+	get DJ() {
+		return V.DJ;
+	}
+	get Farmer() {
+		return V.Farmer;
+	}
+	get HeadGirl() {
+		return V.HeadGirl;
+	}
+	get Lurcher() {
+		return slaveStateById(V.LurcherID);
+	}
+	get Madam() {
+		return V.Madam;
+	}
+	get Matron() {
+		return V.Matron;
+	}
+	get Milkmaid() {
+		return V.Milkmaid;
+	}
+	get Nurse() {
+		return V.Nurse;
+	}
+	get Recruiter() {
+		return V.Recruiter;
+	}
+	get Schoolteacher() {
+		return V.Schoolteacher;
+	}
+	get Stewardess() {
+		return V.Stewardess;
+	}
+	get Stud() {
+		return slaveStateById(V.StudID);
+	}
+	get Wardeness() {
+		return V.Wardeness;
+	}
+	get activeSlave() {
+		return V.activeSlave;
+	}
+};
+
+globalThis.S = new App.SpecialSlavesProxy();
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 2aff3afe4511ab089c609f0bef05ef855fcfe225..1f88910795b16ec3f83529e4da12347a6643fe8f 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -308,7 +308,7 @@ App.Update.globalVariables = function(node) {
 	animalsBought.forEach(function(species) { V.animalsBought[species] = V.animalsBought[species] || 0; });
 	if (typeof V.farmyardUpgrade !== "object") {
 		V.farmyardUpgrade = {
-			pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0, lab: 0
+			pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0
 		};
 	}
 
diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js
index d562c80f5f89d3b3f52555b60daa5b58e38949c2..9e85353fffe49c46b898e94893944817959c0b0d 100644
--- a/src/endWeek/endWeek.js
+++ b/src/endWeek/endWeek.js
@@ -297,7 +297,6 @@ globalThis.endWeek = (function() {
 		V.DJRepBonus = 0;
 		V.Milkmaid = 0;
 		V.Farmer = 0;
-		V.Collectrix = 0;
 		V.Stewardess = 0;
 		V.Schoolteacher = 0;
 		V.Wardeness = 0;
diff --git a/src/endWeek/saPorn.js b/src/endWeek/saPorn.js
index 593c435bb36096387553bb2b0ef22333104c9147..e5b71af2f88ada3a66883cf9c0e0454614a62560 100644
--- a/src/endWeek/saPorn.js
+++ b/src/endWeek/saPorn.js
@@ -285,11 +285,13 @@ App.SlaveAssignment.porn = (function() {
 		if (slave.porn.prestige === 0 && slave.porn.viewerCount >= 100000) {
 			const pornFameGrabBag = App.Porn.getAllGenres().filter((g) => slave.porn.fame[g.fameVar] >= 10000);
 			if (pornFameGrabBag.length > 0) {
-				const genre = pornFameGrabBag.pluck();
+				const weightedGrabBagIndices = {};
+				pornFameGrabBag.forEach((g, i) => weightedGrabBagIndices[i] = slave.porn.fame[g.fameVar]); // Attach weights to the indices of pornFameGrabBag
+				const genre = pornFameGrabBag[hashChoice(weightedGrabBagIndices)]; // hashChoice selects an index according to the weights
 				slave.porn.fameType = genre.fameName;
 				slave.porn.prestige = 1;
 
-				r += `<span style="green">${He} has gained a following in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc1}, but ${he} isn't famous enough to be called prestigious yet. `;
+				r += `<span class="green">${He} has gained a following in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc1}, but ${he} isn't famous enough to be called prestigious yet. `;
 				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
 				if (genre.type === App.Porn.GenreType.fetish && slave.fetishKnown !== 1) {
 					slave.fetishKnown = 1;
diff --git a/src/facilities/farmyard/farmyard.tw b/src/facilities/farmyard/farmyard.tw
index 4669c8803bca2e3c5d6bdf6d6573434b4d17d3f3..943d081a97d5b7b82468a02a54a06508383d1a46 100644
--- a/src/facilities/farmyard/farmyard.tw
+++ b/src/facilities/farmyard/farmyard.tw
@@ -79,7 +79,7 @@
 				<<if $farmMenials > 0>>
 					<<set $menials += $farmMenials>>
 				<</if>>
-				<<set $farmyardName = "the Farmyard", $farmyard = 0, $farmyardDecoration = "standard", $farmMenials = 0, $farmMenialsSpace = 0, $farmyardShows = 0, $farmyardBreeding = 0, $farmyardUpgrade = {pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0, lab: 0}, $farmyardLab = 0, $farmyardLabUpgrades = {animalOvaries: 0, animalTesticles: 0, animalMpreg: 0}, $farmyardCrops = 0, $farmyardKennels = 0, $farmyardStable = 0, $farmyardCages = 0, $activeCanine = 0, $activeHooved = 0, $activeFeline = 0, $animalsBought = {canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0}, $pitAnimal = 0, $pitAnimalType = 0, $canines = [], $hooved = [], $felines = []>>
+				<<set $farmyardName = "the Farmyard", $farmyard = 0, $farmyardDecoration = "standard", $farmMenials = 0, $farmMenialsSpace = 0, $farmyardShows = 0, $farmyardBreeding = 0, $farmyardUpgrade = {pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0}, $farmyardCrops = 0, $farmyardKennels = 0, $farmyardStable = 0, $farmyardCages = 0, $activeCanine = 0, $activeHooved = 0, $activeFeline = 0, $animalsBought = {canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0}, $pitAnimal = 0, $pitAnimalType = 0, $canines = [], $hooved = [], $felines = []>>
 				<<run App.Arcology.cellUpgrade($building, App.Arcology.Cell.Manufacturing, "Farmyard", "Manufacturing")>>
 			<</link>>
 		</div>
@@ -276,19 +276,6 @@
 		<</if>>
 	<</if>>
 <</if>>
-<<if $rep > 18000>>
-	<<if $farmyardUpgrade.lab == 0>>
-		[[Purchase an R&D lab to experiment with different plant and animal types|Farmyard][cashX(forceNeg(Math.trunc(50000*$upgradeMultiplierArcology)), "farmyard"), $farmyardUpgrade.lab = 1, $farmyardLab = 1]]
-		<span class="note">
-			Costs <<print cashFormat(Math.trunc(50000*$upgradeMultiplierArcology))>> and unlocks the Research Lab.
-		</span>
-		<<run $merchantIllegalWares.push("AnimalOrgans")>>
-		<br>
-	<<else>>
-		A high-tech metal door, complete with retinal and fingerprint scanners, stands at the far end of $farmyardName.
-		<br>
-	<</if>>
-<</if>>
 </span>
 
 <span id="animalhousing">
@@ -464,11 +451,6 @@
 		}, $canines = [], $hooved = [], $felines = []]]
 	//Will cost @@.yellowgreen;<<print cashFormat(_removeCost)>>@@//
 <</if>>
-
-<<if $farmyardLab > 0>>
-	<br><br>
-	A <<link "research and development lab" "FarmyardLab">><</link>> has been built at one end of $farmyardName.
-<</if>>
 </span>
 
 <br><hr><br>
diff --git a/src/facilities/farmyard/farmyardLab.tw b/src/facilities/farmyard/farmyardLab.tw
deleted file mode 100644
index 2616e5991476f801ad3cb1cf5052cc87f8d21736..0000000000000000000000000000000000000000
--- a/src/facilities/farmyard/farmyardLab.tw
+++ /dev/null
@@ -1,34 +0,0 @@
-:: FarmyardLab [nobr]
-
-<<set $nextButton = "Back", $nextLink = "Farmyard", $returnTo = "FarmyardLab", $showEncyclopedia = 1, $encyclopedia = "Farmyard">>
-
-/* TODO: add plant types and research for them */
-
-<br>
-$farmyardNameCaps Research Lab
-<hr>
-
-<<if $farmyardLabUpgrades.animalOvaries == 0>>
-	[[Retrofit the pharmaceutical fabricator to work with animal ovaries|FarmyardLab][cashX(forceNeg(25000), "capEx"), $farmyardLabUpgrades.animalOvaries = 1]]
-	<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal ovaries into slaves.//
-	<br>
-<<elseif $farmyardLabUpgrades.animalOvaries == 1>>
-	The pharmaceutical fabricator has been retrofitted to work with animal ovaries, allowing you to implant them into slaves.
-	<br>
-<</if>>
-<<if $farmyardLabUpgrades.animalTesticles == 0>>
-	[[Retrofit the pharmaceutical fabricator to work with animal testicles|FarmyardLab][cashX(forceNeg(25000), "capEx"), $farmyardLabUpgrades.animalTesticles = 1]]
-	<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal testicles into slaves.//
-	<br>
-<<elseif $farmyardLabUpgrades.animalTesticles == 1>>
-	The pharmaceutical fabricator has been retrofitted to work with animal testicles, allowing you to implant them into slaves.
-	<br>
-<</if>>
-<<if $farmyardLabUpgrades.animalMpreg == 0>>
-	[[Retrofit the pharmaceutical fabricator to work with animal anal wombs and ovaries|FarmyardLab][cashX(forceNeg(25000), "capEx"), $farmyardLabUpgrades.animalMpreg = 1]]
-	<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal anal wombs and ovaries into slaves.//
-	<br>
-<<elseif $farmyardLabUpgrades.animalMpreg == 1>>
-	The pharmaceutical fabricator has been retrofitted to work with animal anal wombs and ovaries, allowing you to implant them into slaves.
-	<br>
-<</if>>
\ No newline at end of file
diff --git a/src/facilities/penthouse/penthouseFramework.js b/src/facilities/penthouse/penthouseFramework.js
index f53f20fd1d3c63eb5452f4814d4128555b9c1f1f..821d06e541080ab38d1b0a3cac3f2af6ff3371bd 100644
--- a/src/facilities/penthouse/penthouseFramework.js
+++ b/src/facilities/penthouse/penthouseFramework.js
@@ -160,21 +160,21 @@ App.Entity.Facilities.PenthouseJobs = {
 			return r;
 		}
 
-		assignmentLink(i, passage, callback, linkText) {
-			return super.assignmentLink(i, "Subordinate Targeting",
+		assignmentLink(ID, passage, callback, linkText) {
+			return super.assignmentLink(ID, "Subordinate Targeting",
 				(assignment) => {
-					return `<<run App.Utils.setActiveSlaveByIndex(${i})>>` + (callback !== undefined ? callback(assignment) : '');
+					return `<<set $activeSlave = slaveStateById(${ID})>>` + (callback !== undefined ? callback(assignment) : '');
 				}, linkText);
 		}
 
-		assignmentLinkElement(i, passage, callback, linkText) {
+		assignmentLinkElement(ID, passage, callback, linkText) {
 			linkText = linkText || this.desc.position;
-			return App.UI.DOM.assignmentLink(V.slaves[i], this.desc.assignment, "Subordinate Targeting",
+			return App.UI.DOM.assignmentLink(slaveStateById(ID), this.desc.assignment, "Subordinate Targeting",
 				(slave, assignment) => {
 					if (callback) {
 						callback(slave, assignment);
 					}
-					App.Utils.setActiveSlaveByIndex(i);
+					V.activeSlave = slave;
 					V.returnTo = passage;
 				}, linkText);
 		}
diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js
index ac0d8927024816294b25445dff640069da4af7c8..ca88780f3c6f1f829379ec40aff9dc264d9b64f3 100644
--- a/src/facilities/pit/pitFramework.js
+++ b/src/facilities/pit/pitFramework.js
@@ -4,7 +4,7 @@ App.Data.Facilities.pit = {
 	jobs: {
 		fighter: {
 			position: "fighter",
-			assignment: "",
+			assignment: "@Pit", /* pseudo-assignment for assignmentTransition/assignJob/removeJob */
 			publicSexUse: false,
 			fuckdollAccepted: false,
 			partTime: true
diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css
index 8f40c12843f90db977aec4ab55ef0e883cd777eb..083a1985fe51bbd417f4718fbc95ced8beb78041 100644
--- a/src/gui/css/mainStyleSheet.css
+++ b/src/gui/css/mainStyleSheet.css
@@ -180,7 +180,7 @@ span.zeroButton > a:hover { text-decoration: none; }
 
 /* Colors are made as css classes, to allow them to be changed for a light color scheme (for example). */
 /* a version is for this case: <span class="-.."><a>text</a></span> */
-.link, .link a { color: #68D } /* link color */
+.link, .link a { color: var(--link-color) } /* link color */
 .aquamarine, .aquamarine a, .skill, .skill a { color: aquamarine }
 .coral, .coral a, .fetish.loss, .fetish.loss a { color: coral }
 .cyan, .cyan a { color: cyan } /* used for aphrodisiac & neighbor arcs */
@@ -240,7 +240,7 @@ white-space: normal;
 /* css rules for rules assistant */
 .rajs-listitem {
 	display: inline-block;
-	color: #68D;
+	color: var(--link-color);
 	margin-right: 1em;
 }
 .rajs-listitem.selected {
diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js
index 880731c7c7a043d16de199423c94a3ba96903ff7..0f76886ea32cd5c42bd794cbddff8db9bc5cf0a3 100644
--- a/src/interaction/slaveInteract.js
+++ b/src/interaction/slaveInteract.js
@@ -222,7 +222,7 @@ App.UI.SlaveInteract.assignmentBlock = function(blockId, slave) {
 	links.className = "choices";
 	links.appendChild(
 		App.UI.jobLinks.assignmentsFragment(
-			V.slaveIndices[slave.ID], passage(),
+			slave.ID, passage(),
 			(slave, assignment) => {
 				assignJob(slave, assignment);
 				V.activeSlave = slave;
diff --git a/src/js/assignJS.js b/src/js/assignJS.js
index 8fae2294b2329aae50147fc0d88f322c446f0d8c..3524622ddee6a712d65ca75f03c8accbcf0fa225 100644
--- a/src/js/assignJS.js
+++ b/src/js/assignJS.js
@@ -10,7 +10,14 @@ globalThis.assignJob = function(slave, job) {
 	let r = "";
 	let oldJob = slave.assignment;
 
-	if (job === "Pit" || job === "Coursing Association") { return r; }
+	// handle non-exclusive pseudo-assignments as special cases
+	if (job === "@Pit") {
+		V.fighterIDs.push(slave.ID);
+		return r;
+	} else if (job === "@Lurcher") {
+		V.LurcherID = slave.ID;
+		return r;
+	}
 
 	removeJob(slave, slave.assignment, true);
 	const idx = V.slaveIndices[slave.ID];
@@ -460,9 +467,9 @@ globalThis.removeJob = function(slave, assignment, saveRecord) {
 
 	const idx = V.slaveIndices[slave.ID];
 
-	if (assignment === "Pit") {
+	if (assignment === "@Pit") {
 		V.fighterIDs.delete(slave.ID);
-	} else if (assignment === "Coursing Association") {
+	} else if (assignment === "@Lurcher") {
 		V.LurcherID = 0;
 	} else {
 		if (V.HeadGirl !== 0 && slave.ID === V.HeadGirl.ID) {
@@ -494,8 +501,6 @@ globalThis.removeJob = function(slave, assignment, saveRecord) {
 			V.Wardeness = 0;
 		} else if (V.Concubine !== 0 && slave.ID === V.Concubine.ID) {
 			V.Concubine = 0;
-		} else if (V.Collectrix !== 0 && slave.ID === V.Collectrix.ID) {
-			V.Collectrix = 0;
 		} else if (slave.ID === V.StudID) {
 			V.StudID = 0;
 		}
@@ -770,21 +775,21 @@ App.UI.jobLinks = function() {
 
 	/**
 	 * Generates assignment links
-	 * @param {number} index in the slaves array or -1 for the activeSlave
+	 * @param {number} ID slave ID
 	 * @param {string} [passage] optional next passage to go to
 	 * @param {linkCallback} [callback]
 	 * @returns {string}
 	 */
-	function assignmentLinks(index, passage, callback) {
-		let penthouseJobs = App.Entity.facilities.penthouse.assignmentLinks(index, undefined, passage, callback);
-		const slave = App.Utils.slaveByIndex(index);
+	function assignmentLinks(ID, passage, callback) {
+		let penthouseJobs = App.Entity.facilities.penthouse.assignmentLinks(ID, undefined, passage, callback);
+		const slave = slaveStateById(ID);
 		const sp = getPronouns(slave);
 
 		if (slave.fuckdoll === 0) {
 			const assignment = "choose her own job";
 			if (slave.assignment !== assignment) {
 				const linkAction = callback !== undefined ? callback(assignment) : '';
-				penthouseJobs.push(`<<link "Let ${sp.object} choose" ${passage !== undefined ? `"${passage}"` : ''}>><<= assignJob(${App.Utils.slaveRefString(index)}, "${assignment}")>>${linkAction}<</link>>`);
+				penthouseJobs.push(`<<link "Let ${sp.object} choose" ${passage !== undefined ? `"${passage}"` : ''}>><<= assignJob(slaveStateById(${ID}), "${assignment}")>>${linkAction}<</link>>`);
 			}
 		} else {
 			penthouseJobs.push(App.UI.disabledLink(`Let ${sp.object} choose`, ["Fuckdolls can't choose their job"]));
@@ -793,16 +798,16 @@ App.UI.jobLinks = function() {
 		return penthouseJobs.join("&thinsp;|&thinsp;");
 	}
 
-	function transferLinks(index) {
+	function transferLinks(ID) {
 		/** @type {string[]} */
 		const transfers = [];
-		const slave = App.Utils.slaveByIndex(index);
+		const slave = slaveStateById(ID);
 
 		for (const f of facilitiesOrder) {
 			if (!f.established) { continue; }
 			const rejects = f.canHostSlave(slave);
 			if (rejects.length === 0) {
-				transfers.push(f.transferLink(index, undefined, passage()));
+				transfers.push(f.transferLink(ID, undefined, passage()));
 			} else {
 				transfers.push(App.UI.disabledLink(f.genericName, rejects));
 			}
@@ -813,22 +818,20 @@ App.UI.jobLinks = function() {
 
 	/**
 	 *
-	 * @param {number} index
+	 * @param {number} ID
 	 * @param {string} passage
 	 * @param {assignmentCallback} [callback]
 	 * @returns {DocumentFragment}
 	 */
-	function assignmentsFragment(index, passage, callback) {
-		let penthouseJobs = App.Entity.facilities.penthouse.assignmentLinkElements(index, undefined, passage, callback);
-		const slave = App.Utils.slaveByIndex(index);
+	function assignmentsFragment(ID, passage, callback) {
+		let penthouseJobs = App.Entity.facilities.penthouse.assignmentLinkElements(ID, undefined, passage, callback);
+		const slave = slaveStateById(ID);
 		const sp = getPronouns(slave);
 
 		if (slave.fuckdoll === 0) {
 			const assignment = "choose her own job";
 			if (slave.assignment !== assignment) {
-				penthouseJobs.push(
-					App.UI.DOM.assignmentLink(State.variables.slaves[index],
-						assignment, passage, callback, `Let ${sp.object} choose`));
+				penthouseJobs.push(App.UI.DOM.assignmentLink(slave, assignment, passage, callback, `Let ${sp.object} choose`));
 			}
 		} else {
 			penthouseJobs.push(App.UI.DOM.disabledLink(`Let ${sp.object} choose`, ["Fuckdolls can't choose their job"]));
@@ -843,16 +846,16 @@ App.UI.jobLinks = function() {
 		return res;
 	}
 
-	function transfersFragment(index, callback) {
+	function transfersFragment(ID, callback) {
 		/** @type {HTMLElement[]} */
 		const transfers = [];
-		const slave = App.Utils.slaveByIndex(index);
+		const slave = slaveStateById(ID);
 
 		for (const f of facilitiesOrder) {
 			if (!f.established) { continue; }
 			const rejects = f.canHostSlave(slave);
 			if (rejects.length === 0) {
-				transfers.push(f.transferLinkElement(index, undefined, passage(), callback));
+				transfers.push(f.transferLinkElement(ID, undefined, passage(), callback));
 			} else {
 				transfers.push(App.UI.DOM.disabledLink(f.genericName, rejects));
 			}
@@ -932,3 +935,32 @@ App.Utils.jobForAssignment = function() {
 	}
 	return getJob;
 }();
+
+/** Assign a slave, play the appropriate assignment scene if necessary, and redirect to a destination passage.
+ * @param {App.Entity.SlaveState} slave
+ * @param {string} assignTo
+ * @param {string} passage
+ */
+globalThis.assignmentTransition = function(slave, assignTo, passage) {
+	/** @param {string} scene */
+	function detourThroughScene(scene) {
+		V.returnTo = passage;
+		Engine.play(scene);
+	}
+
+	V.activeSlave = slave; // might be needed by the passage we're transitioning to (TODO: get rid of this)
+	assignJob(slave, assignTo);
+	if (V.showAssignToScenes === 1 && slave.fetish !== "mindbroken") {
+		if (assignTo === "Dairy" && ((V.dairyStimulatorsSetting >= 2) || (V.dairyFeedersSetting >= 2) || (V.dairyPregSetting >= 2))) {
+			detourThroughScene("Industrial Dairy Assignment Scene");
+		} else if (assignTo === "Dairy" && (V.dairyRestraintsSetting === 0 && V.activeSlave.devotion > 0)) {
+			detourThroughScene("Free Range Dairy Assignment Scene");
+		} else if (assignTo === "Brothel") {
+			detourThroughScene("Brothel Assignment Scene");
+		} else {
+			Engine.play(passage);
+		}
+	} else {
+		Engine.play(passage);
+	}
+};
diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js
index 2423d1aefa96c75d89e8461af77ec27a89aa92ab..c21b3f7f0832b3ccfd6d1da3646eff15ca64d76b 100644
--- a/src/js/slaveListing.js
+++ b/src/js/slaveListing.js
@@ -52,7 +52,6 @@ App.UI.SlaveList.render = function() {
 	function listDOM(indices, rejectedSlaves, interactionLink, postNote) {
 		passageName = passage();
 		slaves = V.slaves;
-		V.assignTo = passageName; // would be passed to the "Assign" passage
 
 		let res = document.createDocumentFragment();
 
@@ -320,12 +319,12 @@ App.UI.SlaveList.render = function() {
 		res.appendChild(document.createTextNode(' '));
 
 		if ((V.displayAssignments === 1) && (passageName === "Main") && (slave.ID !== V.HeadGirl.ID) && (slave.ID !== V.Recruiter.ID) && (slave.ID !== V.Bodyguard.ID)) {
-			res.appendChild(App.UI.jobLinks.assignmentsFragment(index, "Main", (slave, assignment) => { App.UI.SlaveList.ScrollPosition.record(); assignJob(slave, assignment); }));
+			res.appendChild(App.UI.jobLinks.assignmentsFragment(slave.ID, "Main", (slave, assignment) => { App.UI.SlaveList.ScrollPosition.record(); assignJob(slave, assignment); }));
 		}
 		if (showTransfers) {
 			res.appendChild(document.createElement("br"));
 			res.appendChild(document.createTextNode('Transfer to: '));
-			res.appendChild(App.UI.jobLinks.transfersFragment(index, (slave, assignment) => { App.UI.SlaveList.ScrollPosition.record(); assignJob(slave, assignment); }));
+			res.appendChild(App.UI.jobLinks.transfersFragment(slave.ID, (slave, assignment) => { App.UI.SlaveList.ScrollPosition.record(); assignJob(slave, assignment); }));
 		}
 
 		res.appendChild(App.UI.SlaveSummary.render(slave));
@@ -652,8 +651,8 @@ App.UI.SlaveList.listSJFacilitySlaves = function(facility, facilityPassage, show
 		SlaveSort.indices(facilitySlaves);
 		r += App.UI.tabbar.makeTab("remove", App.UI.SlaveList.render.listMarkup(facilitySlaves, [],
 			App.UI.SlaveList.SlaveInteract.stdInteract,
-			(slave, index) => App.UI.DOM.passageLink(`Retrieve ${getPronouns(slave).object} from ${facility.name}`, "Retrieve",
-				() => { variables().i = index; })));
+			(slave) => App.UI.DOM.link(`Retrieve ${getPronouns(slave).object} from ${facility.name}`, () => removeJob(slave, job.desc.assignment), [], facilityPassage)
+			));
 	} else {
 		r += App.UI.tabbar.makeTab("remove", `<em>${capFirstChar(facility.name)} is empty for the moment</em>`);
 	}
@@ -677,8 +676,7 @@ App.UI.SlaveList.listSJFacilitySlaves = function(facility, facilityPassage, show
 		}, []);
 		return App.UI.SlaveList.render.listMarkup(passedSlaves, rejectedSlaves,
 			App.UI.SlaveList.SlaveInteract.stdInteract,
-			(slave, index) => App.UI.DOM.passageLink(`Send ${getPronouns(slave).object} to ${facility.name}`, "Assign",
-				() => { variables().i = index; }));
+			(slave) => App.UI.DOM.link(`Send ${getPronouns(slave).object} to ${facility.name}`, () => { assignmentTransition(slave, job.desc.assignment, facilityPassage); }));
 	}
 	if (facility.hasFreeSpace) {
 		const assignableSlaveIdxs = job.desc.partTime ?
diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js
index 57e70dbb96afda5924f10a661de9b82b1bf920c1..77881bb343e264c1fc2d824b1398cfb178abff93 100644
--- a/src/js/utilsFC.js
+++ b/src/js/utilsFC.js
@@ -2667,15 +2667,6 @@ App.Utils.slaveRefString = function(i) {
 	return i >= 0 ? `$slaves[${i}]` : '$activeSlave';
 };
 
-/**
- * Returns slave by index in the slave array, Accepts -1 for the activeSlave
- * @param {number} i slave array index or -1 for activeSlave
- * @returns {App.Entity.SlaveState}
- */
-App.Utils.slaveByIndex = function(i) {
-	return i === -1 ? V.activeSlave : V.slaves[i];
-};
-
 /**
  * Sets active slave to the slave with the given index. Does nothing if index < 0
  * @param {number} index
diff --git a/src/npc/interaction/passage/matchmaking.tw b/src/npc/interaction/passage/matchmaking.tw
index 8bc46162494cec2e074c749e6ee40224abded46f..ab1a90294aac1f154e31d152893f570d5c080220 100644
--- a/src/npc/interaction/passage/matchmaking.tw
+++ b/src/npc/interaction/passage/matchmaking.tw
@@ -41,7 +41,7 @@ Their relationship would probably be somewhat artificial at first, and they'd ha
 	s => s.devotion >= 100 && s.relationship === $activeSlave.relationship && s.ID !== $activeSlave.ID,
 	App.UI.SlaveList.SlaveInteract.stdInteract,
 	null,
-	(s, i) => App.UI.DOM.passageLink('Match them', 'Matchmaking', () => { variables().subSlave = App.Utils.slaveByIndex(i); })
+	(s) => App.UI.DOM.passageLink('Match them', 'Matchmaking', () => { variables().subSlave = s; })
 )>>
 </span>
 
diff --git a/src/pregmod/fatGraftingWorkaround.tw b/src/pregmod/fatGraftingWorkaround.tw
index 0913e20d5ec1f90e34d9b57fa51feb3c61e7a7a9..31f43a970152ac69cc00e16b733b2ebc5571fc18 100644
--- a/src/pregmod/fatGraftingWorkaround.tw
+++ b/src/pregmod/fatGraftingWorkaround.tw
@@ -2,7 +2,7 @@
 
 <<set $nextButton = "Finalize fat transfer", $nextLink = "Surgery Degradation">>
 
-Enough graftable body fat was harvested for an additional <<print $availabeFat*100>>ccs per breast or an additional <<if $activeSlave.butt <= 10>><<print $availabeFat/2>><<else>><<print $availabeFat/5>><</if>> sizes to $his rear. <<if $availabeFat == 0>>All fat marked for use<<else>>A total of $availabeFat unit<<if $availabeFat > 1>>s<</if>> remain<</if>>.
+Enough graftable body fat was harvested for an additional <<print $availabeFat*100>>ccs per breast or an additional <<if getSlave($AS).butt <= 10>><<print $availabeFat/2>><<else>><<print $availabeFat/5>><</if>> sizes to $his rear. <<if $availabeFat == 0>>All fat marked for use<<else>>A total of $availabeFat unit<<if $availabeFat > 1>>s<</if>> remain<</if>>.
 
 <br><br>
 $boobFat units of fat will be added to $his breasts for a size gain of <<print $boobFat*100>>ccs.
@@ -19,8 +19,8 @@ $boobFat units of fat will be added to $his breasts for a size gain of <<print $
 <</if>>
 
 <br><br>
-<<if $activeSlave.butt <= 10>><<print $buttFat*2>><<else>><<print $buttFat*5>><</if>> units of fat will be added to $his ass for a size gain of $buttFat.
-<<if $activeSlave.butt > 10>>
+<<if getSlave($AS).butt <= 10>><<print $buttFat*2>><<else>><<print $buttFat*5>><</if>> units of fat will be added to $his ass for a size gain of $buttFat.
+<<if getSlave($AS).butt > 10>>
 	<br>
 	<<if $availabeFat > 0>>
 		[[Increase|fat grafting workaround][$buttFat += .2, $availabeFat -= 1]] |
diff --git a/src/pregmod/huskSlaveSwapWorkaround.tw b/src/pregmod/huskSlaveSwapWorkaround.tw
index 9c409a6f210025545ca1f0182c32190820972e83..42064edb598c3280e177c8123eb0cc740b6ade00 100644
--- a/src/pregmod/huskSlaveSwapWorkaround.tw
+++ b/src/pregmod/huskSlaveSwapWorkaround.tw
@@ -1,6 +1,6 @@
 :: husk Slave Swap Workaround [nobr]
 
-<<if $activeSlave.tankBaby != 3>>
+<<if getSlave($AS).tankBaby != 3>>
 	<<set $nextButton = "Abort Operation", $nextLink = "Scheduled Event", $returnTo = "Scheduled Event">>
 <<else>>
 	<<set $nextButton = "Abort Operation", $nextLink = "Main", $returnTo = "Incubator">>
@@ -20,7 +20,7 @@ __Select an eligible slave:__
 					<<if $slaves[_i].indenture == -1>>
 						<<if $slaves[_i].breedingMark == 0 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset">>
 							<<if WombReserveCount($slaves[_i]) == 0>>
-								<<if $slaves[_i].ID != $activeSlave.ID>>
+								<<if $slaves[_i].ID != $AS>>
 									<<set _name = SlaveFullName($slaves[_i])>>
 									<br>[[_name|Husk Slave Swap][$swappingSlave = $slaves[_i], cashX(-10000, "slaveSurgery", $slaves[_i])]]
 								<</if>>
diff --git a/src/pregmod/organFarm.tw b/src/pregmod/organFarm.tw
index 63c37890bee896b3087e0fcfd5cbda413132b9c1..39e4921a0cf9018d37f9d103e34e41be9d6e2b23 100644
--- a/src/pregmod/organFarm.tw
+++ b/src/pregmod/organFarm.tw
@@ -78,31 +78,27 @@
 	<</if>>
 
 	<<if $seePreg != 0 && $seeBestiality == 1 && $experimental.animalOvaries == 1>>
-		<<if $farmyardLabUpgrades.animalOvaries > 0>>
-			<<if $animalOvaries < 1>>
-				<div class="note">
-					You lack the required designs for cloning animal ovaries for slaves.
-				</div>
-			<<else>>
-				<div>
-					The organ farm is capable of growing animal ovaries for slaves.
-				</div>
-			<</if>>
+		<<if $animalOvaries < 1>>
+			<div class="note">
+				You lack the required designs for cloning animal ovaries for slaves.
+			</div>
+		<<else>>
+			<div>
+				The organ farm is capable of growing animal ovaries for slaves.
+			</div>
 		<</if>>
 
-		<<if $farmyardLabUpgrades.animalTesticles > 0>>
-			<<if $animalTesticles < 1>>
-				<div class="note">
-					You lack the required designs for cloning animal testicles for slaves.
-				</div>
-			<<else>>
-				<div>
-					The organ farm is capable of growing animal testicles for slaves.
-				</div>
-			<</if>>
+		<<if $animalTesticles < 1>>
+			<div class="note">
+				You lack the required designs for cloning animal testicles for slaves.
+			</div>
+		<<else>>
+			<div>
+				The organ farm is capable of growing animal testicles for slaves.
+			</div>
 		<</if>>
 
-		<<if $farmyardLabUpgrades.animalMpreg > 0 && $arcologies[0].FSGenderRadicalistResearch == 1>>
+		<<if $arcologies[0].FSGenderRadicalistResearch == 1>>
 			<<if $animalMpreg < 1>>
 				<div class="note">
 					You lack the required designs for cloning animal anal wombs and ovaries for slaves.
diff --git a/src/pregmod/pcAppearanceIntro.tw b/src/pregmod/pcAppearanceIntro.tw
index ed4ee69b37be364d0d75ae349b287ba10e14c11a..d61a263a08065c1ae548bf786857d778336ff982 100644
--- a/src/pregmod/pcAppearanceIntro.tw
+++ b/src/pregmod/pcAppearanceIntro.tw
@@ -95,130 +95,130 @@
 		What is your skin tone?
 	</div>
 	<div id = "skin">
-		You have $PC.origSkin skin.
+		You have $PC.skin skin.
 	</div>
 	<<link "Pure White">>
-		<<set $PC.origSkin = "pure white">>
+		<<set $PC.skin = "pure white">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Ivory">>
-		<<set $PC.origSkin = "ivory">>
+		<<set $PC.skin = "ivory">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "White">>
-		<<set $PC.origSkin = "white">>
+		<<set $PC.skin = "white">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Extremely Pale">>
-		<<set $PC.origSkin = "extremely pale">>
+		<<set $PC.skin = "extremely pale">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Very Pale">>
-		<<set $PC.origSkin = "very pale">>
+		<<set $PC.skin = "very pale">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Pale">>
-		<<set $PC.origSkin = "pale">>
+		<<set $PC.skin = "pale">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Extremely Fair">>
-		<<set $PC.origSkin = "extremely fair">>
+		<<set $PC.skin = "extremely fair">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Very Fair">>
-		<<set $PC.origSkin = "very fair">>
+		<<set $PC.skin = "very fair">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Fair">>
-		<<set $PC.origSkin = "fair">>
+		<<set $PC.skin = "fair">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Light">>
-		<<set $PC.origSkin = "light">>
+		<<set $PC.skin = "light">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Light Olive">>
-		<<set $PC.origSkin = "light olive">>
+		<<set $PC.skin = "light olive">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Tan">>
-		<<set $PC.origSkin = "tan">>
+		<<set $PC.skin = "tan">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Olive">>
-		<<set $PC.origSkin = "olive">>
+		<<set $PC.skin = "olive">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Bronze">>
-		<<set $PC.origSkin = "bronze">>
+		<<set $PC.skin = "bronze">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Dark Olive">>
-		<<set $PC.origSkin = "dark olive">>
+		<<set $PC.skin = "dark olive">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Dark">>
-		<<set $PC.origSkin = "dark">>
+		<<set $PC.skin = "dark">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Light Beige">>
-		<<set $PC.origSkin = "light beige">>
+		<<set $PC.skin = "light beige">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Beige">>
-		<<set $PC.origSkin = "beige">>
+		<<set $PC.skin = "beige">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Dark Beige">>
-		<<set $PC.origSkin = "dark beige">>
+		<<set $PC.skin = "dark beige">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Light Brown">>
-		<<set $PC.origSkin = "light brown">>
+		<<set $PC.skin = "light brown">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Brown">>
-		<<set $PC.origSkin = "brown">>
+		<<set $PC.skin = "brown">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Dark Brown">>
-		<<set $PC.origSkin = "dark brown">>
+		<<set $PC.skin = "dark brown">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Black">>
-		<<set $PC.origSkin = "black">>
+		<<set $PC.skin = "black">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Ebony">>
-		<<set $PC.origSkin = "ebony">>
+		<<set $PC.skin = "ebony">>
 		<<PlayerSkin>>
 	<</link>>
 	|
 	<<link "Pure Black">>
-		<<set $PC.origSkin = "pure black">>
+		<<set $PC.skin = "pure black">>
 		<<PlayerSkin>>
 	<</link>>
 </p>
diff --git a/src/pregmod/surrogacy.tw b/src/pregmod/surrogacy.tw
index 4c5f98cc67baf2749b5585d2748eba8f329251e5..dbebf1dbc0e5933a64fdc20982a6e512c1172746 100644
--- a/src/pregmod/surrogacy.tw
+++ b/src/pregmod/surrogacy.tw
@@ -59,12 +59,12 @@
 <<case "transplant">>
 
 	<<if $receptrix.ID == -1>>
-		Since the surgery required only a local anesthetic, you are very aware that you are now carrying $activeSlave.slaveName's child. You slowly rise to your feet, a hand to your lower belly, appreciating the new life growing within you.
-		<<set _fetus = WombRemoveFetus($activeSlave, $wombIndex)>>
+		Since the surgery required only a local anesthetic, you are very aware that you are now carrying <<= getSlave($AS).slaveName>>'s child. You slowly rise to your feet, a hand to your lower belly, appreciating the new life growing within you.
+		<<set _fetus = WombRemoveFetus(getSlave($AS), $wombIndex)>>
 		<<run WombAddFetus($PC, _fetus)>>
-		<<set $PC.pregKnown = 1, $PC.preg = WombMaxPreg($PC), $activeSlave.preg = WombMaxPreg($activeSlave)>>
+		<<set $PC.pregKnown = 1, $PC.preg = WombMaxPreg($PC), getSlave($AS).preg = WombMaxPreg(getSlave($AS))>>
 		<<run WombNormalizePreg($PC)>>
-		<<run WombNormalizePreg($activeSlave)>>
+		<<run WombNormalizePreg(getSlave($AS))>>
 	<<else>>
 		<<set _fetus = WombRemoveFetus($donatrix, $wombIndex)>>
 		<<run WombAddFetus($receptrix, _fetus)>>
@@ -75,7 +75,7 @@
 			<<set $PC = $donatrix>>
 		<<else>>
 			<<set _surr = $slaves.findIndex(function(s) { return s.ID == $donatrix.ID; })>>
-			<<set $activeSlave = $donatrix>>
+			<<set $slaves[$slaveIndices[$AS]] = $donatrix>>
 		<</if>>
 		<<setLocalPronouns $receptrix>>
 		<<if $receptrix.fetish == "mindbroken">>
diff --git a/src/pregmod/theBlackMarket.tw b/src/pregmod/theBlackMarket.tw
index 4d15dd794256f0036a4b79d4e4e5a65b490b24e6..bb79ae17127215475953611ea25d1e29fc0fbf05 100644
--- a/src/pregmod/theBlackMarket.tw
+++ b/src/pregmod/theBlackMarket.tw
@@ -50,135 +50,122 @@ The main draw, however, is the prominent stage to the rear of the building where
 <br><br>
 Of all the wonders present, the thing that catches your eye the most is a shady looking stall with a somehow even shadier looking merchant — a merchant who is beckoning you to come over. "A prominent arcology owner like yourself wandering around in here can only be looking for one thing: new and exciting ways to spice up _hisP slaves! I've got the hottest research and tech straight from the labs waiting for you to peruse and some of the 'hottest' tech straight out of the research labs, if you catch my drift." He shuffles around behind the counter, pulling out a stack of papers.
 
-<br>
-
-<<if ndef $thisWeeksFSWares>>
-	<<set $thisWeeksFSWares = $merchantFSWares.randomMany(2)>>
-<</if>>
-<<if ndef $thisWeeksIllegalWares>>
-	<<set $thisWeeksIllegalWares = $merchantIllegalWares.randomMany(1)>>
-<</if>>
-
-<br>
+<br><br>
 "Now when it comes to the legal, relatively boring stuff, I've got the following available:"
 
 <<if $thisWeeksFSWares.length > 0>>
 	<<for _bm = 0; _bm < $thisWeeksFSWares.length; _bm++>>
-		<br>
-		<<if $thisWeeksFSWares[_bm] == "GenderRadicalistResearch">>
-			<<if $seePreg != 0 && $arcologies[0].FSGenderRadicalistResearch == 0>>
-				<<if $organFarmUpgrade > 0>>
-					<<if $cash >= 75000>>
-						[[Purchase schematics for anal pregnancy|The Black Market][cashX(-75000, "capEx"), $arcologies[0].FSGenderRadicalistResearch = 1, _dump = $merchantFSWares.delete("GenderRadicalistResearch")]] //@@.yellowgreen;<<print cashFormat(75000)>>.@@//
+		<div>
+			<<switch $thisWeeksFSWares[_bm]>>
+				<<case "GenderRadicalistResearch">>
+					<<if $seePreg != 0 && $arcologies[0].FSGenderRadicalistResearch == 0>>
+						<<if $organFarmUpgrade > 0>>
+							<<if $cash >= 75000>>
+								[[Purchase schematics for anal pregnancy|The Black Market][cashX(-75000, "capEx"), $arcologies[0].FSGenderRadicalistResearch = 1, _dump = $merchantFSWares.delete("GenderRadicalistResearch")]] //@@.yellowgreen;<<print cashFormat(75000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(75000)>>@@ for anal pregnancy schematics. "No discounts. No haggling. No price naming. Take it or leave it."
+							<</if>>
+						<<else>>
+							You lack the facilities needed to grow organs, so anal pregnancy schematics are currently out of your reach.
+						<</if>>
+					<<elseif $seePreg == 0>>
+						You have no interest in this pregnancy based research.
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(75000)>>@@ for anal pregnancy schematics. "No discounts. No haggling. No price naming. Take it or leave it."
+						You already possess designs to facilitate anal pregnancy.
+						<<run $merchantFSWares.delete("GenderRadicalistResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to grow organs, so anal pregnancy schematics are currently out of your reach.
-				<</if>>
-			<<elseif $seePreg == 0>>
-				You have no interest in this pregnancy based research.
-			<<else>>
-				You already possess designs to facilitate anal pregnancy.
-				<<run $merchantFSWares.delete("GenderRadicalistResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "SlaveProfessionalismResearch">>
-			<<if $arcologies[0].FSSlaveProfessionalismResearch == 0>>
-				<<if $dispensary == 1>>
-					<<if $cash >= 90000>>
-						[[Purchase the recipe for a proven intelligence boosting compound|The Black Market][cashX(-90000, "capEx"), $arcologies[0].FSSlaveProfessionalismResearch = 1, _dump = $merchantFSWares.delete("SlaveProfessionalismResearch")]] //@@.yellowgreen;<<print cashFormat(90000)>>.@@//
+				<<case "SlaveProfessionalismResearch">>
+					<<if $arcologies[0].FSSlaveProfessionalismResearch == 0>>
+						<<if $dispensary == 1>>
+							<<if $cash >= 90000>>
+								[[Purchase the recipe for a proven intelligence boosting compound|The Black Market][cashX(-90000, "capEx"), $arcologies[0].FSSlaveProfessionalismResearch = 1, _dump = $merchantFSWares.delete("SlaveProfessionalismResearch")]] //@@.yellowgreen;<<print cashFormat(90000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(90000)>>@@ for a proven intelligence boosting compound. "A cup of tea brewed from this compound makes one smarter. Too bad I don't hand out free samples so people like you can remember where they left their money."
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce drugs of this complexity, so the recipe for a proven intelligence boosting compound is currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(90000)>>@@ for a proven intelligence boosting compound. "A cup of tea brewed from this compound makes one smarter. Too bad I don't hand out free samples so people like you can remember where they left their money."
+						You already possess a recipe for a mind improving tea.
+						<<run $merchantFSWares.delete("SlaveProfessionalismResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce drugs of this complexity, so the recipe for a proven intelligence boosting compound is currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess a recipe for a mind improving tea.
-				<<run $merchantFSWares.delete("SlaveProfessionalismResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "TransformationFetishistResearch">>
-			<<if $arcologies[0].FSTransformationFetishistResearch == 0>>
-				<<if $ImplantProductionUpgrade == 1>>
-					<<if $cash >= 50000>>
-						[[Purchase designs for immense implants|The Black Market][cashX(-50000, "capEx"), $arcologies[0].FSTransformationFetishistResearch = 1, _dump = $merchantFSWares.delete("TransformationFetishistResearch")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+				<<case "TransformationFetishistResearch">>
+					<<if $arcologies[0].FSTransformationFetishistResearch == 0>>
+						<<if $ImplantProductionUpgrade == 1>>
+							<<if $cash >= 50000>>
+								[[Purchase designs for immense implants|The Black Market][cashX(-50000, "capEx"), $arcologies[0].FSTransformationFetishistResearch = 1, _dump = $merchantFSWares.delete("TransformationFetishistResearch")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for absurdly huge implant designs. "No big fake boobs for you. How sad it must be to be flat and enslaved by such a poor <<if $PC.title == 1>>Master<<else>>Mistress<</if>>"
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce implants of this caliber, so absurdly huge implant designs are currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for absurdly huge implant designs. "No big fake boobs for you. How sad it must be to be flat and enslaved by such a poor <<if $PC.title == 1>>Master<<else>>Mistress<</if>>"
+						You already possess designs for oversized implants.
+						<<run $merchantFSWares.delete("TransformationFetishistResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce implants of this caliber, so absurdly huge implant designs are currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess designs for oversized implants.
-				<<run $merchantFSWares.delete("TransformationFetishistResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "AssetExpansionistResearch">>
-			<<if $arcologies[0].FSAssetExpansionistResearch == 0>>
-				<<if $dispensary == 1>>
-					<<if $cash >= 50000>>
-						[[Purchase formulas for extremely powerful growth drugs|The Black Market][cashX(-50000, "capEx"), $arcologies[0].FSAssetExpansionistResearch = 1, _dump = $merchantFSWares.delete("AssetExpansionistResearch")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+				<<case "AssetExpansionistResearch">>
+					<<if $arcologies[0].FSAssetExpansionistResearch == 0>>
+						<<if $dispensary == 1>>
+							<<if $cash >= 50000>>
+								[[Purchase formulas for extremely powerful growth drugs|The Black Market][cashX(-50000, "capEx"), $arcologies[0].FSAssetExpansionistResearch = 1, _dump = $merchantFSWares.delete("AssetExpansionistResearch")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for extremely powerful growth drug formulas. "Why'd you even come here if you didn't have the credits to buy anything?"
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce drugs of this complexity, so absurdly powerful implant growth drug formulas are currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for extremely powerful growth drug formulas. "Why'd you even come here if you didn't have the credits to buy anything?"
+						You already possess formulas for extremely powerful growth drugs.
+						<<run $merchantFSWares.delete("AssetExpansionistResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce drugs of this complexity, so absurdly powerful implant growth drug formulas are currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess formulas for extremely powerful growth drugs.
-				<<run $merchantFSWares.delete("AssetExpansionistResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "SlimnessEnthusiastResearch">>
-			<<if $arcologies[0].FSSlimnessEnthusiastResearch == 0>>
-				<<if $dispensary == 1>>
-					<<if $cash >= 75000>>
-						[[Purchase formulas for growth reversing drugs|The Black Market][cashX(-75000, "capEx"), $arcologies[0].FSSlimnessEnthusiastResearch = 1, _dump = $merchantFSWares.delete("SlimnessEnthusiastResearch")]] //@@.yellowgreen;<<print cashFormat(75000)>>.@@//
+				<<case "SlimnessEnthusiastResearch">>
+					<<if $arcologies[0].FSSlimnessEnthusiastResearch == 0>>
+						<<if $dispensary == 1>>
+							<<if $cash >= 75000>>
+								[[Purchase formulas for growth reversing drugs|The Black Market][cashX(-75000, "capEx"), $arcologies[0].FSSlimnessEnthusiastResearch = 1, _dump = $merchantFSWares.delete("SlimnessEnthusiastResearch")]] //@@.yellowgreen;<<print cashFormat(75000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(75000)>>@@ for growth reversing drug formulas. "<<if $PC.boobs >= 1000>>Guess you'll be keeping those knockers for now, <<if $PC.title == 0>>Little-Miss-Top-Heavy<<else>>Mr. Busty<</if>><<else>>Guess you don't mind sore backs. Leads to less sore knees, from what I've heard<</if>>."
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce drugs of this complexity, so growth reversing drug formulas are currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(75000)>>@@ for growth reversing drug formulas. "<<if $PC.boobs >= 1000>>Guess you'll be keeping those knockers for now, <<if $PC.title == 0>>Little-Miss-Top-Heavy<<else>>Mr. Busty<</if>><<else>>Guess you don't mind sore backs. Leads to less sore knees, from what I've heard<</if>>."
+						You already possess formulas for growth reversing drugs.
+						<<run $merchantFSWares.delete("SlimnessEnthusiastResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce drugs of this complexity, so growth reversing drug formulas are currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess formulas for growth reversing drugs.
-				<<run $merchantFSWares.delete("SlimnessEnthusiastResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "YouthPreferentialistResearch">>
-			<<if $arcologies[0].FSYouthPreferentialistResearch == 0>>
-				<<if $dispensary == 1>>
-					<<if $cash >= 45000>>
-						[[Purchase formulas for extremely effective anti-aging beauty creams|The Black Market][cashX(-45000, "capEx"), $arcologies[0].FSYouthPreferentialistResearch = 1, _dump = $merchantFSWares.delete("YouthPreferentialistResearch")]] //@@.yellowgreen;<<print cashFormat(45000)>>.@@//
+				<<case "YouthPreferentialistResearch">>
+					<<if $arcologies[0].FSYouthPreferentialistResearch == 0>>
+						<<if $dispensary == 1>>
+							<<if $cash >= 45000>>
+								[[Purchase formulas for extremely effective anti-aging beauty creams|The Black Market][cashX(-45000, "capEx"), $arcologies[0].FSYouthPreferentialistResearch = 1, _dump = $merchantFSWares.delete("YouthPreferentialistResearch")]] //@@.yellowgreen;<<print cashFormat(45000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(45000)>>@@ for extremely effective anti-aging beauty creams. "<<if $PC.visualAge > 40>>Those wrinkles don't look that bad on you, so don't worry about not being able to afford this<<else>>Just tell them they look young, and, well, don't give them any mirrors. Probably should keep your money troubles from them, too<</if>>."
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce drugs of this complexity, so extremely effective anti-aging beauty creams formulas are currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(45000)>>@@ for extremely effective anti-aging beauty creams. "<<if $PC.visualAge > 40>>Those wrinkles don't look that bad on you, so don't worry about not being able to afford this<<else>>Just tell them they look young, and, well, don't give them any mirrors. Probably should keep your money troubles from them, too<</if>>."
+						You already possess formulas for extremely effective anti-aging beauty cream.
+						<<run $merchantFSWares.delete("YouthPreferentialistResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce drugs of this complexity, so extremely effective anti-aging beauty creams formulas are currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess formulas for extremely effective anti-aging beauty cream.
-				<<run $merchantFSWares.delete("YouthPreferentialistResearch")>>
-			<</if>>
-		<</if>>
-		<<if $thisWeeksFSWares[_bm] == "HedonisticDecadenceResearch">>
-			<<if $arcologies[0].FSHedonisticDecadenceResearch == 0>>
-				<<if $dispensary == 1>>
-					<<if $cash >= 65000>>
-						[[Purchase recipes for highly addictive solid slave food|The Black Market][cashX(-65000, "capEx"), $arcologies[0].FSHedonisticDecadenceResearch = 1, _dump = $merchantFSWares.delete("HedonisticDecadenceResearch")]] //@@.yellowgreen;<<print cashFormat(65000)>>.@@//
+				<<case "HedonisticDecadenceResearch">>
+					<<if $arcologies[0].FSHedonisticDecadenceResearch == 0>>
+						<<if $dispensary == 1>>
+							<<if $cash >= 65000>>
+								[[Purchase recipes for highly addictive solid slave food|The Black Market][cashX(-65000, "capEx"), $arcologies[0].FSHedonisticDecadenceResearch = 1, _dump = $merchantFSWares.delete("HedonisticDecadenceResearch")]] //@@.yellowgreen;<<print cashFormat(65000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(65000)>>@@ for highly addictive solid slave food recipes. "I promise you'll not be able to recreate this at home, so if you want to give your begging slave the treat she deserves, buy now! Or, you know, come back with money."
+							<</if>>
+						<<else>>
+							You lack the facilities needed to produce drugs of this complexity, so highly addictive solid slave food recipes are currently unobtainable.
+						<</if>>
 					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(65000)>>@@ for highly addictive solid slave food recipes. "I promise you'll not be able to recreate this at home, so if you want to give your begging slave the treat she deserves, buy now! Or, you know, come back with money."
+						You already possess recipes for highly addictive solid slave food.
+						<<run $merchantFSWares.delete("HedonisticDecadenceResearch")>>
 					<</if>>
-				<<else>>
-					You lack the facilities needed to produce drugs of this complexity, so highly addictive solid slave food recipes are currently unobtainable.
-				<</if>>
-			<<else>>
-				You already possess recipes for highly addictive solid slave food.
-				<<run $merchantFSWares.delete("HedonisticDecadenceResearch")>>
-			<</if>>
-		<</if>>
+			<</switch>>
+		</div>
 	<</for>>
 <<else>>
 	<br>You appear to already possess all the societal based schematics he has to offer.
@@ -192,262 +179,247 @@ Of all the wonders present, the thing that catches your eye the most is a shady
 He gestures to a door in the back of the stall. "The good shit's back there<<if $thisWeeksIllegalWares.length > 1>> — here's a list: <<elseif $thisWeeksIllegalWares.length == 1>> — only one this week: <<else>>.<</if>>"
 <<if $thisWeeksIllegalWares.length > 0>>
 	<<for _bim = 0; _bim < $thisWeeksIllegalWares.length; _bim++>>
-		<<if $thisWeeksIllegalWares[_bim] == "childhoodFertilityInducedNCS">>
-			<br>
-			<<if $minimumSlaveAge <= 15>>
-				<dt>@@.cyan;Childhood Fertility Induced NCS (Induced Neotenic Complex Syndrome or Syndrome X modified for fertility).@@</dt>
-				<<if $minimumSlaveAge > 8>>
-					<br>&nbsp;&nbsp;&nbsp;&nbsp;
-					Illegal information for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
-					"I'm sorry, I can't sell this product to you, even if I wanted to," he says. "I have this technology, which if applied, would make slaves appear younger than the legal age of majority. I picked it up from an exotics dealer, who picked it up from some old world government research center. And yes, I know, this is a black market, and I would be happy to sell it to you, except, you see, too many of the wrong people know I have it, and while the knowledge isn't illegal, selling or using it is. See if I sell this to you, you'd start getting younger looking slaves, and those people would try to take us both down, and since I'm not the master of an arcology, I would probably end up enslaved, and I'm not interested in that. If only the laws were more open about who could have sex with who, I could sell this to anyone interested."
-					Since the agreed upon minimum age in your Free City is greater than eight, it would draw way too much attention for you to make use of the research recipe for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend).
-					<br>
-					He notices your interest and lets you read the information [[Childhood Fertility Induced NCS|Encyclopedia][$encyclopedia = "Childhood Fertility Induced NCS"]].
-					<<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>>
-				<<else>>
-					<<if $arcologies[0].FSYouthPreferentialist > 0>>
-						<<set _match = "Knowing your arcology, I think you could be happy with the results!">>
-					<<else>>
-						<<set _match = "I'm not sure this is a good match for your arcology's current society at this moment, but I'm sure you could have fun with it.">>
-					<</if>>
-					<<if ($pedo_mode)>>
-						<<set _toydolls = "If you like sexy little toy dolls, I mean biological ''@@.coral;lolis@@'' or ''@@.coral;shotas@@'' for life, then this is the one for you. I picked it up from an exotics dealer, who picked it up from some old world government research center.", _norefunds = "Remember, though, no money back on this. Technology like this doesn't exist anywhere else, your younger slaves will stay that way forever, and your older ones will slowly begin to regress towards that nice mid-childhood state. If you want to build yourself a cadre of ''@@.coral;preteen@@'' delights for yourself or your customers, then buy now!">>
-					<<else>>
-						<<set _toydolls = "This might be a little too shady or perverted for you. But, if you want your slaves to last longer, you know, look younger for longer, well this treatment can help. However it comes at a price, this treatment will eventually turn your slave girls younger and younger looking, until the point you might not want to use them as sex slaves because they'll appear as teenagers or even younger. I'm serious, your slaves treated with this treatment will eventually look like children! They won't be, really, but this is no fountain of perpetual youth, and to be fair, maybe none of this will be up your alley. If that's the case, I guess you could just sell them once they get too young looking, and possibly for a higher price than if they looked older. It's, at best, for possibly more discerning or eclectic tastes then you might have. I picked it up from an exotics dealer, who picked it up from some old world government research center.", _norefunds = "Remember, though, no money back on this. Technology like this doesn't exist anywhere else, your treated slaves will stay and become younger looking forever, and your older ones will slowly begin to regress towards a disturbingly young mid-childhood state. All those caveats aside, if this sounds like something you'd want, then buy now!">>
-					<</if>>
-					<<if $geneticMappingUpgrade == 0>>
-						You lack the facilities required for such a treatment to be effective on specific individuals.
-					<<elseif $dispensaryUpgrade == 0>>
-						You lack the facilities required to produce complex gene-altering treatments.
-					<<else>>
-						<<if $arcologies[0].childhoodFertilityInducedNCSResearch == 0>>
-							<<if $cash >= 135000>>
-								"_toydolls _match _norefunds"<br>
-								[[Purchase childhood fertility induced NCS|The Black Market][cashX(-135000, "capEx"), $arcologies[0].childhoodFertilityInducedNCSResearch = 1, _dump = $merchantFSWares.delete("childFertilityInducedSyndromeX")]] //@@.yellowgreen;<<print cashFormat(135000)>>.@@//<br>
-							<<else>>
-								"_toydolls _match _norefunds Or, you know, come back with money."<br>
-								You cannot afford the asking price of @@.red;<<print cashFormat(135000)>>@@ for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
-							<</if>>
+		<div>
+			<<switch $thisWeeksIllegalWares[_bim]>>
+				<<case "childhoodFertilityInducedNCS">>
+					<<if $minimumSlaveAge <= 15>>
+						<dt>@@.cyan;Childhood Fertility Induced NCS (Induced Neotenic Complex Syndrome or Syndrome X modified for fertility).@@</dt>
+						<<if $minimumSlaveAge > 8>>
+							<br>&nbsp;&nbsp;&nbsp;&nbsp;
+							Illegal information for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
+							"I'm sorry, I can't sell this product to you, even if I wanted to," he says. "I have this technology, which if applied, would make slaves appear younger than the legal age of majority. I picked it up from an exotics dealer, who picked it up from some old world government research center. And yes, I know, this is a black market, and I would be happy to sell it to you, except, you see, too many of the wrong people know I have it, and while the knowledge isn't illegal, selling or using it is. See if I sell this to you, you'd start getting younger looking slaves, and those people would try to take us both down, and since I'm not the master of an arcology, I would probably end up enslaved, and I'm not interested in that. If only the laws were more open about who could have sex with who, I could sell this to anyone interested."
+							Since the agreed upon minimum age in your Free City is greater than eight, it would draw way too much attention for you to make use of the research recipe for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend).
+							<br>
 							He notices your interest and lets you read the information [[Childhood Fertility Induced NCS|Encyclopedia][$encyclopedia = "Childhood Fertility Induced NCS"]].
-						<<else>>
-							You already possess the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
 							<<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>>
+						<<else>>
+							<<if $arcologies[0].FSYouthPreferentialist > 0>>
+								<<set _match = "Knowing your arcology, I think you could be happy with the results!">>
+							<<else>>
+								<<set _match = "I'm not sure this is a good match for your arcology's current society at this moment, but I'm sure you could have fun with it.">>
+							<</if>>
+							<<if ($pedo_mode)>>
+								<<set _toydolls = "If you like sexy little toy dolls, I mean biological ''@@.coral;lolis@@'' or ''@@.coral;shotas@@'' for life, then this is the one for you. I picked it up from an exotics dealer, who picked it up from some old world government research center.", _norefunds = "Remember, though, no money back on this. Technology like this doesn't exist anywhere else, your younger slaves will stay that way forever, and your older ones will slowly begin to regress towards that nice mid-childhood state. If you want to build yourself a cadre of ''@@.coral;preteen@@'' delights for yourself or your customers, then buy now!">>
+							<<else>>
+								<<set _toydolls = "This might be a little too shady or perverted for you. But, if you want your slaves to last longer, you know, look younger for longer, well this treatment can help. However it comes at a price, this treatment will eventually turn your slave girls younger and younger looking, until the point you might not want to use them as sex slaves because they'll appear as teenagers or even younger. I'm serious, your slaves treated with this treatment will eventually look like children! They won't be, really, but this is no fountain of perpetual youth, and to be fair, maybe none of this will be up your alley. If that's the case, I guess you could just sell them once they get too young looking, and possibly for a higher price than if they looked older. It's, at best, for possibly more discerning or eclectic tastes then you might have. I picked it up from an exotics dealer, who picked it up from some old world government research center.", _norefunds = "Remember, though, no money back on this. Technology like this doesn't exist anywhere else, your treated slaves will stay and become younger looking forever, and your older ones will slowly begin to regress towards a disturbingly young mid-childhood state. All those caveats aside, if this sounds like something you'd want, then buy now!">>
+							<</if>>
+							<<if $geneticMappingUpgrade == 0>>
+								You lack the facilities required for such a treatment to be effective on specific individuals.
+							<<elseif $dispensaryUpgrade == 0>>
+								You lack the facilities required to produce complex gene-altering treatments.
+							<<else>>
+								<<if $arcologies[0].childhoodFertilityInducedNCSResearch == 0>>
+									<<if $cash >= 135000>>
+										"_toydolls _match _norefunds"<br>
+										[[Purchase childhood fertility induced NCS|The Black Market][cashX(-135000, "capEx"), $arcologies[0].childhoodFertilityInducedNCSResearch = 1, _dump = $merchantFSWares.delete("childFertilityInducedSyndromeX")]] //@@.yellowgreen;<<print cashFormat(135000)>>.@@//<br>
+									<<else>>
+										"_toydolls _match _norefunds Or, you know, come back with money."<br>
+										You cannot afford the asking price of @@.red;<<print cashFormat(135000)>>@@ for the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
+									<</if>>
+									He notices your interest and lets you read the information [[Childhood Fertility Induced NCS|Encyclopedia][$encyclopedia = "Childhood Fertility Induced NCS"]].
+								<<else>>
+									You already possess the Childhood Fertility @@.orange;Induced NCS@@ (genetic engineering and hormonal blend) research recipe.<br>
+									<<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>>
+								<</if>>
+							<</if>>
 						<</if>>
+					<<else>>
+						You have no interest in such a distasteful research.
+						<<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>>
 					<</if>>
-				<</if>>
-			<<else>>
-				You have no interest in such a distasteful research.
-				<<run $merchantIllegalWares.delete("childhoodFertilityInducedNCS")>>
-			<</if>>
-		<</if>>
-
-		<<if $thisWeeksIllegalWares[_bim] == "UterineRestraintMesh">>
-			<br>
-			<<if $UterineRestraintMesh == 0>>
-				<<if $seePreg == 1>>
-					<<if $ImplantProductionUpgrade == 1>>
-						<<if $surgeryUpgrade == 1>>
-							<<if $cash >= 20000>>
-								[[Purchase blueprints for a supportive uterine mesh|The Black Market][cashX(-20000, "capEx"), $UterineRestraintMesh = 1, _dump = $merchantIllegalWares.delete("UterineRestraintMesh")]] //@@.yellowgreen;<<print cashFormat(20000)>>.@@//
+				<<case "UterineRestraintMesh">>
+					<<if $UterineRestraintMesh == 0>>
+						<<if $seePreg == 1>>
+							<<if $ImplantProductionUpgrade == 1>>
+								<<if $surgeryUpgrade == 1>>
+									<<if $cash >= 20000>>
+										[[Purchase blueprints for a supportive uterine mesh|The Black Market][cashX(-20000, "capEx"), $UterineRestraintMesh = 1, _dump = $merchantIllegalWares.delete("UterineRestraintMesh")]] //@@.yellowgreen;<<print cashFormat(20000)>>.@@//
+									<<else>>
+										You cannot afford the asking price of @@.red;<<print cashFormat(20000)>>@@ for a supportive uterine mesh.
+									<</if>>
+									<br>"This is an interesting one... It's designed to prevent any sort of rupturing of the uterus, but, while that idea is great and all, it does jack shit to prevent leaks from elsewhere in the organ. The guy funding the research company was pissed when his slave bloated up like a cum-filled balloon and dropped dead, destroyed most of the development lab. Fortunately, he failed to ruin the best part of it — these blueprints. Now, you're probably wondering what good is something like this, but I've done business with a number of industrial slave farms, and they swear upon its ability to force a girl to carry far more children than physically possible; well, up until their wombs crushed their organs, that is. I supposed it'd work with anything solid, really, if you enjoy sticking things up into slave girls."
+								<<else>>
+									The autosurgery lacks the finesse needed to implant something of this complexity, so designs for a supportive uterine mesh are unusable until it is upgraded.
+								<</if>>
 							<<else>>
-								You cannot afford the asking price of @@.red;<<print cashFormat(20000)>>@@ for a supportive uterine mesh.
+								You lack the facilities needed to produce implants of this complexity, so designs for a supportive uterine mesh are currently unobtainable.
 							<</if>>
-							<br>"This is an interesting one... It's designed to prevent any sort of rupturing of the uterus, but, while that idea is great and all, it does jack shit to prevent leaks from elsewhere in the organ. The guy funding the research company was pissed when his slave bloated up like a cum-filled balloon and dropped dead, destroyed most of the development lab. Fortunately, he failed to ruin the best part of it — these blueprints. Now, you're probably wondering what good is something like this, but I've done business with a number of industrial slave farms, and they swear upon its ability to force a girl to carry far more children than physically possible; well, up until their wombs crushed their organs, that is. I supposed it'd work with anything solid, really, if you enjoy sticking things up into slave girls."
 						<<else>>
-							The autosurgery lacks the finesse needed to implant something of this complexity, so designs for a supportive uterine mesh are unusable until it is upgraded.
+							You have no interest in research to support pregnancy.
+							<<run $merchantIllegalWares.delete("UterineRestraintMesh")>>
 						<</if>>
 					<<else>>
-						You lack the facilities needed to produce implants of this complexity, so designs for a supportive uterine mesh are currently unobtainable.
+						You already possess blueprints for a supportive uterine mesh.
+						<<run $merchantIllegalWares.delete("UterineRestraintMesh")>>
 					<</if>>
-				<<else>>
-					You have no interest in research to support pregnancy.
-					<<run $merchantIllegalWares.delete("UterineRestraintMesh")>>
-				<</if>>
-			<<else>>
-				You already possess blueprints for a supportive uterine mesh.
-				<<run $merchantIllegalWares.delete("UterineRestraintMesh")>>
-			<</if>>
-		<</if>>
 
-		<<if $thisWeeksIllegalWares[_bim] == "PGHack">>
-			<br>
-			<<if $PGHack == 0>>
-				<<if $seePreg == 1>>
-					<<if $ImplantProductionUpgrade == 1>>
-						<<if $surgeryUpgrade == 1>>
-							<<if $cash >= 20000>>
-								[[Purchase documents regarding the broodmother implant firmware hack|The Black Market][cashX(-20000, "capEx"), $PGHack = 1, _dump = $merchantIllegalWares.delete("PGHack")]] //@@.yellowgreen;<<print cashFormat(20000)>>.@@//
+				<<case "PGHack">>
+					<<if $PGHack == 0>>
+						<<if $seePreg == 1>>
+							<<if $ImplantProductionUpgrade == 1>>
+								<<if $surgeryUpgrade == 1>>
+									<<if $cash >= 20000>>
+										[[Purchase documents regarding the broodmother implant firmware hack|The Black Market][cashX(-20000, "capEx"), $PGHack = 1, _dump = $merchantIllegalWares.delete("PGHack")]] //@@.yellowgreen;<<print cashFormat(20000)>>.@@//
+									<<else>>
+										You cannot afford the asking price of @@.red;<<print cashFormat(20000)>>@@ for the broodmother implant firmware data.
+									<</if>>
+									<br>"I might have something for you, if you're interested. Some time ago a hacker manage to crack the firmware of the publicly available broodmother implant and found how to manipulate it through the radio channel normally used for monitoring. His goal was to take revenge on an arcology owner whose beloved concubine had this implant, but this plan failed as he couldn't hide his hacking attempt; to send something to the implant you need to be very close to it. In fact, you need a special actuator inserted up to the cervix, which just so happens to be included in this deal. It is very much advised to use it from within a surgical suite, in case of complications, such as the sudden activation of the birthing process. But anyway, the hack, if applied appropriately, can interfere with the original logic of the implant, forcing it to release more than one ovum every week. Originally, the hacker made it about a dozen, but after we tweaked his initial code, now it will be just two or three ova. You will get all the required data and schematics for the autosurgery upgrade, but you will need to make and install it on your own."
+								<<else>>
+									The autosurgery lacks the needed actuators, so applying the broodmother implant hack complex is impossible.
+								<</if>>
 							<<else>>
-								You cannot afford the asking price of @@.red;<<print cashFormat(20000)>>@@ for the broodmother implant firmware data.
+								You lack the facilities needed to produce something this complex, so production of broodmother implant hack complex is out of your reach.
 							<</if>>
-							<br>"I might have something for you, if you're interested. Some time ago a hacker manage to crack the firmware of the publicly available broodmother implant and found how to manipulate it through the radio channel normally used for monitoring. His goal was to take revenge on an arcology owner whose beloved concubine had this implant, but this plan failed as he couldn't hide his hacking attempt; to send something to the implant you need to be very close to it. In fact, you need a special actuator inserted up to the cervix, which just so happens to be included in this deal. It is very much advised to use it from within a surgical suite, in case of complications, such as the sudden activation of the birthing process. But anyway, the hack, if applied appropriately, can interfere with the original logic of the implant, forcing it to release more than one ovum every week. Originally, the hacker made it about a dozen, but after we tweaked his initial code, now it will be just two or three ova. You will get all the required data and schematics for the autosurgery upgrade, but you will need to make and install it on your own."
 						<<else>>
-							The autosurgery lacks the needed actuators, so applying the broodmother implant hack complex is impossible.
+							You have no interest in research that involves pregnancy.
+							<<run $merchantIllegalWares.delete("PGHack")>>
 						<</if>>
 					<<else>>
-						You lack the facilities needed to produce something this complex, so production of broodmother implant hack complex is out of your reach.
+						You already possess the broodmother implant hack.
+						<<run $merchantIllegalWares.delete("PGHack")>>
 					<</if>>
-				<<else>>
-					You have no interest in research that involves pregnancy.
-					<<run $merchantIllegalWares.delete("PGHack")>>
-				<</if>>
-			<<else>>
-				You already possess the broodmother implant hack.
-				<<run $merchantIllegalWares.delete("PGHack")>>
-			<</if>>
-		<</if>>
 
-		<<if $thisWeeksIllegalWares[_bim] == "BlackmarketPregAdaptation">>
-			<br>
-			<<if $BlackmarketPregAdaptation == 0 && $minimumSlaveAge <= 6>>
-				<<if $seePreg == 1>>
-					<<if $cash >= 120000 && !($arcologies[0].FSRepopulationFocus >= 60)>>
-						[[Purchase documents regarding an incubator pregnancy adaptation module|The Black Market][cashX(-120000, "capEx"), $BlackmarketPregAdaptation = 1, _dump = $merchantIllegalWares.delete("BlackmarketPregAdaptation")]] //@@.yellowgreen;<<print cashFormat(120000)>>.@@//
-					<<elseif $cash < 120000>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(120000)>>@@ for documentation on an incubator pregnancy adaptation module.
-					<</if>>
-					<br>"I'm not sure about this... but you still might be interested. Let me just begin with a story... Some time ago, there was a man with very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results."
-					<<if $arcologies[0].FSRepopulationFocus >= 60>>
-						<p style="text-indent:2em"> As a repopulationist society, you already have similar documentation in your possession. Buying this would be a waste of money. </p>
-					<<elseif $incubatorUpgradeReproduction < 1 || $incubatorUpgradeOrgans < 1 || $dispensaryUpgrade < 1 || $bellyImplants < 1 || $incubatorUpgradeGrowthStims < 1>>
-						<p style="text-indent:2em"> You lack the facilities needed to manufacture something this complex, so while you can buy its documentation, actual production and installation of the module is currently out of your reach.</p>
-					<</if>>
-				<<else>>
-					You have no interest in research that involves pregnancy.
-					<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
-				<</if>>
-			<<elseif $incubatorUpgradePregAdaptation == 0 && $minimumSlaveAge > 6>>
-				You have no interest in such a distasteful offer.
-				<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
-			<<else>>
-				You already possess the incubator pregnancy adaptation module.
-				<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
-			<</if>>
-		<</if>>
-
-		<<if $thisWeeksIllegalWares[_bim] == "RapidCellGrowthFormula">>
-			<br>
-			<<if $geneticMappingUpgrade == 0>>
-				You lack the facilities required for such a treatment to be effective on specific individuals.
-			<<elseif $dispensaryUpgrade == 0>>
-				You lack the facilities required to produce complex gene-altering treatments.
-			<<else>>
-				<<if $RapidCellGrowthFormula == 0>>
-					<<if $cash >= 70000>>
-						[[Purchase formulas for elasticity increasing injections|The Black Market][cashX(-70000, "capEx"), $RapidCellGrowthFormula = 1, _dump = $merchantIllegalWares.delete("RapidCellGrowthFormula")]] //@@.yellowgreen;<<print cashFormat(70000)>>.@@//
-					<<else>>
-						You cannot afford the asking price of @@.red;<<print cashFormat(70000)>>@@ for elasticity increasing injections.
-					<</if>>
-					<br>"These injections will loosen up any skin, muscle, organ or whatever living flesh you inject them into. I'm not entirely sure how they work, something about increased cell growth or something. Probably not the safest thing to use, what with it pretty much being cancer in a vial. From what I've gathered, they were originally being developed to use with fillable breast implants. Some rich investor got his rocks off from BE and decided to make his dream a reality. Worked great too, save for the fact that the breasts didn't shrink down when the implant was emptied. Yep, she was left with a big ol' pair of floppy tits after being stretched so much. My take is, if you want to get big, fast, this is the drug for you, but only if you don't care about ever going back."
-				<<else>>
-					You already possess formulas for elasticity increasing injections.
-					<<run $merchantIllegalWares.delete("RapidCellGrowthFormula")>>
-				<</if>>
-			<</if>>
-		<</if>>
-
-		<<if $thisWeeksIllegalWares[_bim] == "sympatheticOvaries">>
-			<br>
-			<<if $sympatheticOvaries == 0>>
-				<<if $seePreg == 1>>
-					<<if $ImplantProductionUpgrade == 1>>
-						<<if $cash >= 50000>>
-							[[Purchase schematics for implants that synchronize ova release|The Black Market][cashX(-50000, "capEx"), $sympatheticOvaries = 1, _dump = $merchantIllegalWares.delete("sympatheticOvaries")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+				<<case "BlackmarketPregAdaptation">>
+					<<if $BlackmarketPregAdaptation == 0 && $minimumSlaveAge <= 6>>
+						<<if $seePreg == 1>>
+							<<if $cash >= 120000 && !($arcologies[0].FSRepopulationFocus >= 60)>>
+								[[Purchase documents regarding an incubator pregnancy adaptation module|The Black Market][cashX(-120000, "capEx"), $BlackmarketPregAdaptation = 1, _dump = $merchantIllegalWares.delete("BlackmarketPregAdaptation")]] //@@.yellowgreen;<<print cashFormat(120000)>>.@@//
+							<<elseif $cash < 120000>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(120000)>>@@ for documentation on an incubator pregnancy adaptation module.
+							<</if>>
+							<br>"I'm not sure about this... but you still might be interested. Let me just begin with a story... Some time ago, there was a man with very pregnant girl in tow. Not so unusual in these days, but what made it really stand out was the girl's age — she couldn't have been any older then six! And looked ready to birth full sized triplets, no less. To top it all off, she did not look stressed by it at all, which was just amazing, given her size. The man said that he invented some sort of subsystem for those modern incubators to prep the occupant's body in a special way, and that this girl was a test subject. I do not understand much about this technical stuff, but the documentation seems legit enough. If you like, I can sell it to you; no guarantees though, on either the construction or the results."
+							<<if $arcologies[0].FSRepopulationFocus >= 60>>
+								<p style="text-indent:2em"> As a repopulationist society, you already have similar documentation in your possession. Buying this would be a waste of money. </p>
+							<<elseif $incubatorUpgradeReproduction < 1 || $incubatorUpgradeOrgans < 1 || $dispensaryUpgrade < 1 || $bellyImplants < 1 || $incubatorUpgradeGrowthStims < 1>>
+								<p style="text-indent:2em"> You lack the facilities needed to manufacture something this complex, so while you can buy its documentation, actual production and installation of the module is currently out of your reach.</p>
+							<</if>>
 						<<else>>
-							You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for implants that synchronize ova release.
+							You have no interest in research that involves pregnancy.
+							<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
 						<</if>>
-						<br>"This pair of implants attaches directly to a girl's ovaries and uses signals to communicate with each other. When one releases an egg, the other is spurred to do the same — in other words, guaranteed twins, always. Now, you're probably wondering why I have this for sale and not one of the big names; well what do you think happens when you mix fertility drugs, or hell just a girl prone to twins, and something that effectively doubles egg counts? That's right: she gets really, really pregnant, like, dangerously so. Kind of boring compared to some of the other stuff I get in, to be honest. Though I sometimes wonder what would happen if you got multiple slaves with these implanted and kept them close to each other... Would one ovulating trigger every other implant to do the same?"
+					<<elseif $incubatorUpgradePregAdaptation == 0 && $minimumSlaveAge > 6>>
+						You have no interest in such a distasteful offer.
+						<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
 					<<else>>
-						You lack the facilities needed to produce implants of this complexity, so schematics for implants that synchronize ova release are currently unobtainable.
+						You already possess the incubator pregnancy adaptation module.
+						<<run $merchantIllegalWares.delete("BlackmarketPregAdaptation")>>
 					<</if>>
-				<<else>>
-					You have no interest in research to support pregnancy.
-					<<run $merchantIllegalWares.delete("sympatheticOvaries")>>
-				<</if>>
-			<<else>>
-				You already possess schematics for implants that synchronize ova release.
-				<<run $merchantIllegalWares.delete("sympatheticOvaries")>>
-			<</if>>
-		<</if>>
 
-		<<if $thisWeeksIllegalWares[_bim] == "asexualReproduction">>
-			<br>
-			<<if $asexualReproduction == 0>>
-				<<if $seePreg == 1>>
-					<<if $organFarmUpgrade > 0>>
-						<<if $cash >= 80000>>
-							[[Purchase designs for asexually reproducing ovaries|The Black Market][cashX(-80000, "capEx"), $asexualReproduction = 1, _dump = $merchantIllegalWares.delete("asexualReproduction")]] //@@.yellowgreen;<<print cashFormat(80000)>>.@@//
+				<<case "RapidCellGrowthFormula">>
+					<<if $geneticMappingUpgrade == 0>>
+						You lack the facilities required for such a treatment to be effective on specific individuals.
+					<<elseif $dispensaryUpgrade == 0>>
+						You lack the facilities required to produce complex gene-altering treatments.
+					<<else>>
+						<<if $RapidCellGrowthFormula == 0>>
+							<<if $cash >= 70000>>
+								[[Purchase formulas for elasticity increasing injections|The Black Market][cashX(-70000, "capEx"), $RapidCellGrowthFormula = 1, _dump = $merchantIllegalWares.delete("RapidCellGrowthFormula")]] //@@.yellowgreen;<<print cashFormat(70000)>>.@@//
+							<<else>>
+								You cannot afford the asking price of @@.red;<<print cashFormat(70000)>>@@ for elasticity increasing injections.
+							<</if>>
+							<br>"These injections will loosen up any skin, muscle, organ or whatever living flesh you inject them into. I'm not entirely sure how they work, something about increased cell growth or something. Probably not the safest thing to use, what with it pretty much being cancer in a vial. From what I've gathered, they were originally being developed to use with fillable breast implants. Some rich investor got his rocks off from BE and decided to make his dream a reality. Worked great too, save for the fact that the breasts didn't shrink down when the implant was emptied. Yep, she was left with a big ol' pair of floppy tits after being stretched so much. My take is, if you want to get big, fast, this is the drug for you, but only if you don't care about ever going back."
 						<<else>>
-							You cannot afford the asking price of @@.red;<<print cashFormat(80000)>>@@ for asexually reproducing ovaries.
+							You already possess formulas for elasticity increasing injections.
+							<<run $merchantIllegalWares.delete("RapidCellGrowthFormula")>>
 						<</if>>
-						<br>"Ever wanted kids but were too lazy to even try? Then this is the modification for you! Just replace your slave's existing ovaries with these bad girls and she'll never be without child again! Sure there might be a little bit of inbreeding going on, given that she'd be both the mother and father and all that, and sure she might uncontrollably orgasm herself into a coma from trying to fertilize her own eggs, but think of all the time you'd save from not fucking her! Now, why it was designed that way I couldn't tell you, but from what I hear it's quite the show to watch a girl squirming in constant orgasm as she impregnates herself."
-					<<else>>
-						You lack the facilities needed to grow organs, so methods of asexual reproduction are currently unobtainable.
 					<</if>>
-				<<else>>
-					You have no interest in research to support pregnancy.
-					<<run $merchantIllegalWares.delete("asexualReproduction")>>
-				<</if>>
-			<<else>>
-				You already possess methods of asexual reproduction.
-				<<run $merchantIllegalWares.delete("asexualReproduction")>>
-			<</if>>
-		<</if>>
 
-		/* Stop fucking enabling this, it breaks everything.
-		<<if $farmyard>>
-			<<if $thisWeeksIllegalWares[_bim] == "AnimalOrgans">>
-				<br>
-				<<if $animalOvaries == 0 || $animalTesticles == 0 || $animalMpreg == 0>>
-					<<if $organFarmUpgrade > 0>>
-						<<if $cash >= 25000>>
-							<<if $animalOvaries == 0>>
-								[[Purchase schematics for animal ovaries|FarmyardLab][cashX(-25000, "capEx"), $animalOvaries = 1]]
-								<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal ovaries into slaves.//
-								<br>
+				<<case "sympatheticOvaries">>
+					<<if $sympatheticOvaries == 0>>
+						<<if $seePreg == 1>>
+							<<if $ImplantProductionUpgrade == 1>>
+								<<if $cash >= 50000>>
+									[[Purchase schematics for implants that synchronize ova release|The Black Market][cashX(-50000, "capEx"), $sympatheticOvaries = 1, _dump = $merchantIllegalWares.delete("sympatheticOvaries")]] //@@.yellowgreen;<<print cashFormat(50000)>>.@@//
+								<<else>>
+									You cannot afford the asking price of @@.red;<<print cashFormat(50000)>>@@ for implants that synchronize ova release.
+								<</if>>
+								<br>"This pair of implants attaches directly to a girl's ovaries and uses signals to communicate with each other. When one releases an egg, the other is spurred to do the same — in other words, guaranteed twins, always. Now, you're probably wondering why I have this for sale and not one of the big names; well what do you think happens when you mix fertility drugs, or hell just a girl prone to twins, and something that effectively doubles egg counts? That's right: she gets really, really pregnant, like, dangerously so. Kind of boring compared to some of the other stuff I get in, to be honest. Though I sometimes wonder what would happen if you got multiple slaves with these implanted and kept them close to each other... Would one ovulating trigger every other implant to do the same?"
 							<<else>>
-								You already possess schematics for implanting animal ovaries.
-								<br>
+								You lack the facilities needed to produce implants of this complexity, so schematics for implants that synchronize ova release are currently unobtainable.
 							<</if>>
 						<<else>>
-							You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal ovaries.
+							You have no interest in research to support pregnancy.
+							<<run $merchantIllegalWares.delete("sympatheticOvaries")>>
 						<</if>>
-						<<if $cash >= 25000>>
-							<<if $animalTesticles == 0>>
-								[[Purchase schematics for animal testicles|FarmyardLab][cashX(-25000, "capEx"), $animalTesticles = 1]]
-								<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal testicles into slaves.//
-								<br>
+					<<else>>
+						You already possess schematics for implants that synchronize ova release.
+						<<run $merchantIllegalWares.delete("sympatheticOvaries")>>
+					<</if>>
+
+				<<case "asexualReproduction">>
+					<<if $asexualReproduction == 0>>
+						<<if $seePreg == 1>>
+							<<if $organFarmUpgrade > 0>>
+								<<if $cash >= 80000>>
+									[[Purchase designs for asexually reproducing ovaries|The Black Market][cashX(-80000, "capEx"), $asexualReproduction = 1, _dump = $merchantIllegalWares.delete("asexualReproduction")]] //@@.yellowgreen;<<print cashFormat(80000)>>.@@//
+								<<else>>
+									You cannot afford the asking price of @@.red;<<print cashFormat(80000)>>@@ for asexually reproducing ovaries.
+								<</if>>
+								<br>"Ever wanted kids but were too lazy to even try? Then this is the modification for you! Just replace your slave's existing ovaries with these bad girls and she'll never be without child again! Sure there might be a little bit of inbreeding going on, given that she'd be both the mother and father and all that, and sure she might uncontrollably orgasm herself into a coma from trying to fertilize her own eggs, but think of all the time you'd save from not fucking her! Now, why it was designed that way I couldn't tell you, but from what I hear it's quite the show to watch a girl squirming in constant orgasm as she impregnates herself."
 							<<else>>
-								You already possess schematics for implanting animal testicles.
-								<br>
+								You lack the facilities needed to grow organs, so methods of asexual reproduction are currently unobtainable.
 							<</if>>
 						<<else>>
-							You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal testicles.
+							You have no interest in research to support pregnancy.
+							<<run $merchantIllegalWares.delete("asexualReproduction")>>
 						<</if>>
-						<<if $cash >= 25000>>
-							<<if $animalMpreg == 0>>
-								[[Purchase schematics for animal anal wombs and ovaries|FarmyardLab][cashX(-25000, "capEx"), $animalMpreg = 1]]
-								<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal anal wombs and ovaries into slaves.//
-								<br>
+					<<else>>
+						You already possess methods of asexual reproduction.
+						<<run $merchantIllegalWares.delete("asexualReproduction")>>
+					<</if>>
+
+				<<case "AnimalOrgans">>
+					<<if $experimental.animalOvaries>>
+						<<if $animalOvaries == 0 || $animalTesticles == 0 || $animalMpreg == 0>>
+							<<if $organFarmUpgrade > 0>>
+								<<if $cash >= 25000>>
+									<<if $animalOvaries == 0>>
+										[[Purchase schematics for animal ovaries|The Black Market][cashX(-25000, "capEx"), $animalOvaries = 1]]
+										<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal ovaries into slaves.//
+										<br>
+									<<else>>
+										You already possess schematics for implanting animal ovaries.
+										<br>
+									<</if>>
+								<<else>>
+									You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal ovaries.
+								<</if>>
+								<<if $cash >= 25000>>
+									<<if $animalTesticles == 0>>
+										[[Purchase schematics for animal testicles|The Black Market][cashX(-25000, "capEx"), $animalTesticles = 1]]
+										<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal testicles into slaves.//
+										<br>
+									<<else>>
+										You already possess schematics for implanting animal testicles.
+										<br>
+									<</if>>
+								<<else>>
+									You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal testicles.
+								<</if>>
+								<<if $cash >= 25000>>
+									<<if $animalMpreg == 0>>
+										[[Purchase schematics for animal anal wombs and ovaries|The Black Market][cashX(-25000, "capEx"), $animalMpreg = 1]]
+										<br>//Costs <<print cashFormat(25000)>> and allows you to implant animal anal wombs and ovaries into slaves.//
+										<br>
+									<<else>>
+										You already possess schematics for implanting animal anal wombs and ovaries.
+										<br>
+									<</if>>
+								<<else>>
+									You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal anal wombs and ovaries.
+								<</if>>
+								/* TODO: flesh this out some more */
+								<br>"Got something real special this week. These are schematics for implanting non-human organs into humans. My supplier told me they came from some military experiments or something — maybe they were trying to make some kind of super soldier. Not my business, though."
 							<<else>>
-								You already possess schematics for implanting animal anal wombs and ovaries.
-								<br>
+								You lack the facilities required to grow organs.
 							<</if>>
-						<<else>>
-							You cannot afford the asking price of @@.red;<<print cashFormat(25000)>>@@ for animal anal wombs and ovaries.
+						<<else>>	/* if all schematics have already been purchased */
+							You already possess all of the schematics for implanting animal organs.
+							<<run $merchantIllegalWares.delete("AnimalOrgans")>>
 						<</if>>
-						/ TODO: flesh this out some more /
-						<br>"Got something real special this week. These are schematics for implanting non-human organs into humans. My supplier told me they came from some military experiments or something — maybe they were trying to make some kind of super soldier. Not my business, though."
-					<<else>>
-						You lack the facilities required to grow organs.
 					<</if>>
-				<<else>>	/ if all schematics have already been purchased /
-					You already possess all of the schematics for implanting animal organs.
-					<<run $merchantIllegalWares.delete("AnimalOrgans")>>
-				<</if>>
-			<</if>>
-		<</if>>
-		*/
+			<</switch>>
+		</div>
 	<</for>>
 <<else>>
 	<br>You appear to already possess all the black market schematics he has to offer.
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index 228518821db73b3bc629b41ae5079b8b364d96a2..901b945419e636355ddb1b784897157546c0226f 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -604,7 +604,7 @@ $activeSlave.slaveName is up for review:
 
 <<widget "PlayerSkin">>
 	<<replace #skin>>
-		You have $PC.origSkin skin.
+		You have $PC.skin skin.
 	<</replace>>
 <</widget>>
 
diff --git a/src/uncategorized/assign.tw b/src/uncategorized/assign.tw
deleted file mode 100644
index 8476f10e7bf34d15f1425e519dc0dc6a74ebb08d..0000000000000000000000000000000000000000
--- a/src/uncategorized/assign.tw
+++ /dev/null
@@ -1,32 +0,0 @@
-:: Assign [nobr]
-
-<<if $i >= 0 && $i < $slaves.length && ((ndef $activeSlave) || $activeSlave.ID != $slaves[$i].ID)>> /* don't overwrite activeSlave unnecessarily */
-	<<set $activeSlave = $slaves[$i]>>
-<</if>>
-<<if (ndef $activeSlave)>>
-	@@.red;ERROR: $activeSlave undefined in Assign.tw, $$i = $i, previous passage was '<<print previous()>>'@@ <<link "Continue">><<goto $returnTo>><</link>>
-<<else>>
-	<<switch $assignTo>>
-	<<case "Pit">>
-		<<set $fighterIDs.push($activeSlave.ID)>>
-		<<goto $returnTo>>
-	<<case "Coursing Association">>
-		<<set $LurcherID = $activeSlave.ID>>
-		<<goto $returnTo>>
-	<<default>>
-		<<= assignJob($activeSlave, $assignTo)>>
-		<<if ($showAssignToScenes == 1) && ($activeSlave.fetish != "mindbroken")>>
-			<<if ($assignTo == "Dairy") && (($dairyStimulatorsSetting >= 2) || ($dairyFeedersSetting >= 2) || ($dairyPregSetting >= 2))>>
-				<<goto "Industrial Dairy Assignment Scene">>
-			<<elseif ($assignTo == "Dairy") && ($dairyRestraintsSetting == 0 && $activeSlave.devotion > 0)>>
-				<<goto "Free Range Dairy Assignment Scene">>
-			<<elseif ($assignTo == "Brothel")>>
-				<<goto "Brothel Assignment Scene">>
-			<<else>>
-				<<goto $returnTo>>
-			<</if>>
-		<<else>>
-			<<goto $returnTo>>
-		<</if>>
-	<</switch>>
-<</if>>
diff --git a/src/uncategorized/coursingAssociation.tw b/src/uncategorized/coursingAssociation.tw
index 5eed13c2ebef0874aad06ee85905bc838a7ddc60..bfc787958a9897af0c2d84a436eb9a55fb11d897 100644
--- a/src/uncategorized/coursingAssociation.tw
+++ b/src/uncategorized/coursingAssociation.tw
@@ -17,13 +17,12 @@ The chasing slaves are known as lurchers, the term once used for the sighthounds
 <<if $LurcherID != 0>>
 	<br><br>''Fire your Lurcher:''
 	<<= App.UI.SlaveList.render.listMarkup([App.Utils.slaveIndexForId($LurcherID)], [],
-		(slave, index) => App.UI.DOM.passageLink(SlaveFullName(slave), 'Retrieve',
-		() => { $i = App.Utils.slaveIndexForId($LurcherID) }))>>
+		(slave) => App.UI.DOM.passageLink(SlaveFullName(slave), 'Coursing Association', () => removeJob(slave, "@Lurcher")))>>
 <</if>>
 
 <br><br>''Select a slave to course as a Lurcher:''
 <br><br>
 <<= App.UI.SlaveList.slaveSelectionList(
 		s => $LurcherID !== s.ID && canWalk(s) && canHold(s) && (canSee(s) || canHear(s)) && s.fuckdoll === 0 && isSlaveAvailable(s),
-		(slave, index) => App.UI.DOM.passageLink(SlaveFullName(slave), 'Assign', () => { variables().i = index; })
+		(slave) => App.UI.DOM.link(SlaveFullName(slave), () => assignmentTransition(slave, "@Lurcher", "Coursing Association"))
 	)>>
diff --git a/src/uncategorized/retrieve.tw b/src/uncategorized/retrieve.tw
deleted file mode 100644
index b9c423b16be276c6b38cc9c75daf531262db44c1..0000000000000000000000000000000000000000
--- a/src/uncategorized/retrieve.tw
+++ /dev/null
@@ -1,12 +0,0 @@
-:: Retrieve [silently]
-
-<<switch $returnTo>>
-<<case "Pit">>
-	<<set $fighterIDs.delete($slaves[$i].ID)>>
-<<case "Coursing Association">>
-	<<set $LurcherID = 0>>
-<<default>>
-	<<= removeJob($slaves[$i], $slaves[$i].assignment)>>
-<</switch>>
-
-<<goto $returnTo>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index b2842a8b890b8a72a23c5f7b2bb4af2e9a8d5ca4..d5b3c0d1fec51e3a45ba98baaa3576a8d81440c8 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -208,7 +208,7 @@
 					<<set _numFacilities = $brothel+$club+$dairy+$farmyard+$servantsQuarters+$masterSuite+$spa+$nursery+$clinic+$schoolroom+$cellblock+$arcade+$HGSuite>>
 
 					<<if _numFacilities > 0>>
-						Transfer to: <<= App.UI.jobLinks.transfers(-1)>>
+						Transfer to: <<= App.UI.jobLinks.transfers(V.activeSlave.ID)>>
 					<</if>> /* closes _numFacilities */
 
 					<div id="fucktoypref"></div>
diff --git a/src/utility/descriptionWidgetsStyle.tw b/src/utility/descriptionWidgetsStyle.tw
index e804e3984d6bbb0d65788af2653211a28804c6bc..d6d7a9d78c00bb88fd7ed9e0c57fa4281cb6fca9 100644
--- a/src/utility/descriptionWidgetsStyle.tw
+++ b/src/utility/descriptionWidgetsStyle.tw
@@ -763,7 +763,7 @@ $activeSlave.slaveName is
 	$His uniform is pinned with the
 	<<if ($activeSlave.ID == $Bodyguard.ID) || ($activeSlave.ID == $HeadGirl.ID) || ($activeSlave.ID == $Recruiter.ID) || ($activeSlave.ID == $Concubine.ID)>>
 		golden whip and manacles insignia of a senior slave officer,
-	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID) || ($activeSlave.ID == $Collectrix.ID)>>
+	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID)>>
 		golden manacles insignia of a junior slave officer,
 	<<elseif ($activeSlave.skill.combat > 0) && getLimbCount($activeSlave, 105) > 0>>
 		silver spear and manacles insignia of an augmented slave soldier,
@@ -785,7 +785,7 @@ $activeSlave.slaveName is
 	$His uniform is pinned with the
 	<<if ($activeSlave.ID == $Bodyguard.ID) || ($activeSlave.ID == $HeadGirl.ID) || ($activeSlave.ID == $Recruiter.ID) || ($activeSlave.ID == $Concubine.ID)>>
 		golden whip and manacles insignia of a senior slave officer,
-	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID) || ($activeSlave.ID == $Collectrix.ID)>>
+	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID)>>
 		golden manacles insignia of a junior slave officer,
 	<<elseif ($activeSlave.skill.combat > 0) && getLimbCount($activeSlave, 105)>>
 		silver spear and manacles insignia of an augmented slave soldier,
@@ -807,7 +807,7 @@ $activeSlave.slaveName is
 	$His uniform is pinned with the
 	<<if ($activeSlave.ID == $Bodyguard.ID) || ($activeSlave.ID == $HeadGirl.ID) || ($activeSlave.ID == $Recruiter.ID) || ($activeSlave.ID == $Concubine.ID)>>
 		golden whip and manacles insignia of a senior slave officer,
-	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID) || ($activeSlave.ID == $Collectrix.ID)>>
+	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID)>>
 		golden manacles insignia of a junior slave officer,
 	<<elseif ($activeSlave.skill.combat > 0) && getLimbCount($activeSlave, 105)>>
 		silver spear and manacles insignia of an augmented slave soldier,
@@ -829,7 +829,7 @@ $activeSlave.slaveName is
 	$His uniform is pinned with the
 	<<if ($activeSlave.ID == $Bodyguard.ID) || ($activeSlave.ID == $HeadGirl.ID) || ($activeSlave.ID == $Recruiter.ID) || ($activeSlave.ID == $Concubine.ID)>>
 		golden whip and manacles insignia of a senior slave officer,
-	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID) || ($activeSlave.ID == $Collectrix.ID)>>
+	<<elseif ($activeSlave.ID == $Madam.ID) || ($activeSlave.ID == $Nurse.ID) || ($activeSlave.ID == $Attendant.ID) || ($activeSlave.ID == $Matron.ID) || ($activeSlave.ID == $DJ.ID) || ($activeSlave.ID == $Milkmaid.ID) || ($activeSlave.ID == $Farmer.ID) || ($activeSlave.ID == $Stewardess.ID) || ($activeSlave.ID == $Schoolteacher.ID) || ($activeSlave.ID == $Wardeness.ID)>>
 		golden manacles insignia of a junior slave officer,
 	<<elseif ($activeSlave.skill.combat > 0) && getLimbCount($activeSlave, 105)>>
 		silver spear and manacles insignia of an augmented slave soldier,
diff --git a/src/zz1-last/setupEventHandlers.js b/src/zz1-last/setupEventHandlers.js
index 190756ccced5b1ba246a99d25876336893d5d9dc..44cba09f389236f963c15e85054696220dd01ff1 100644
--- a/src/zz1-last/setupEventHandlers.js
+++ b/src/zz1-last/setupEventHandlers.js
@@ -9,3 +9,9 @@ $(document).on(':storyready', function(ev) {
 $(document).one(':passagestart', function() {
 	App.EventHandlers.optionsChanged();
 });
+
+$(document).on(':passagestart', function() {
+	Object.defineProperty(State.temporary, "S", {
+		get: () => S
+	});
+});