diff --git a/src/js/ageAdjustYoungRelative.js b/src/js/ageAdjustYoungRelative.js
deleted file mode 100644
index 90ec07b756932691e78aec9dcaca889e23e2f1ba..0000000000000000000000000000000000000000
--- a/src/js/ageAdjustYoungRelative.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/* When generating a younger relative by cloning an older one (for example, for Household Liquidators),
- * clamp certain physical parameters of the younger relative appropriately for their physical age.
- * Generally these adjustments should match the age limiters found in generateNewSlave.js.
- */
-
-window.AgeAdjustYoungRelative = function(slave) {
-	/* breast size */
-	const origBoobs = slave.boobs;
-	if (slave.physicalAge <= 10) {
-		slave.boobs = Math.clamp(slave.boobs, 0, 100);
-	} else if (slave.physicalAge <= 12) {
-		slave.boobs = Math.clamp(slave.boobs, 0, 300);
-	} else if (slave.physicalAge <= 14) {
-		slave.boobs = Math.clamp(slave.boobs, 0, 400);
-	} else if (slave.physicalAge <= 15) {
-		slave.boobs = Math.clamp(slave.boobs, 0, 450);
-	}
-
-	/* if we've reduced breast size because of age, reapply minimum weight modifiers */
-	if (origBoobs > slave.boobs && State.variables.weightAffectsAssets !== 0) {
-		if (slave.weight > 190) {
-			slave.boobs += 300;
-		} else if (slave.weight > 160) {
-			slave.boobs += 200;
-		} else if (slave.weight > 30) {
-			slave.boobs += 100;
-		}
-	}
-
-	/* if we've managed to *increase* breast size, just put it back */
-	if (origBoobs < slave.boobs) {
-		slave.boobs = origBoobs;
-	}
-
-	/* breast shape - preserve if it would have been valid, otherwise reset to normal (don't reroll) */
-	const AllowedBoobShapes = [];
-	if (slave.boobs > 250 && slave.boobs < 800) {
-		AllowedBoobShapes.push("perky");
-		AllowedBoobShapes.push("downward-facing");
-	}
-	if (slave.boobs > 400 && slave.boobs < 1200) {
-		AllowedBoobShapes.push("torpedo-shaped");
-		AllowedBoobShapes.push("wide-set");
-	}
-	if (!AllowedBoobShapes.includes(slave.boobShape)) {
-		slave.boobShape = "normal";
-	}
-
-	/* voice */
-	if (slave.physicalAge <= 16 && slave.voice <= 1) {
-		slave.voice = 2;
-	}
-
-	/* XX genitals */
-	if (slave.physicalAge < 20 && slave.vagina > 1) {
-		slave.vagina = 1;
-	}
-
-	if (slave.physicalAge <= 13 && slave.clit > 1) {
-		slave.clit = 1;
-	}
-
-	if (slave.physicalAge <= 13 && slave.labia > 1) {
-		slave.labia = 1;
-	} else if (slave.physicalAge <= 15 && slave.labia > 2) {
-		slave.labia = 2;
-	}
-
-	/* XY genitals */
-	if (slave.physicalAge <= 13) {
-		if (slave.geneticQuirks.wellHung === 2 && slave.physicalAge >= 8 && slave.dick > 4) {
-			slave.dick = 4;
-		} else if (slave.dick > 3) {
-			slave.dick = 3;
-		}
-		if (slave.balls > 3) {
-			slave.balls = 3;
-			slave.scrotum = slave.balls;
-		}
-	} else if (slave.physicalAge <= 15) {
-		if (slave.geneticQuirks.wellHung === 2 && slave.dick > 5) {
-			slave.dick = 5;
-		} else if (slave.dick > 3) {
-			slave.dick = 3;
-		}
-		if (slave.balls > 4) {
-			slave.balls = 4;
-			slave.scrotum = slave.balls;
-		}
-	}
-
-	/* teeth */
-	if (slave.physicalAge < 6) {
-		slave.teeth = "baby";
-	} else if (slave.physicalAge < 12) {
-		slave.teeth = "mixed";
-	}
-
-	/* reset puberty status */
-	generatePuberty(slave);
-};
diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js
index 1f2a39c7b37e6a537e8687224941d119b5841fe7..eca89ee589e12b92b3864f37bb2fc3857c2ebb02 100644
--- a/src/js/generateNewSlaveJS.js
+++ b/src/js/generateNewSlaveJS.js
@@ -40,7 +40,7 @@ window.GenerateNewSlave = (function() {
 	}
 
 	function preGenCombinedStats() {
-		slave.ID = V.IDNumber++;
+		slave.ID = generateSlaveID();
 		slave.weekAcquired = V.week;
 		slave.canRecruit = 1;
 		slave.devotion = jsRandom(-90, -60);
diff --git a/src/js/generateRelatedSlave.js b/src/js/generateRelatedSlave.js
new file mode 100644
index 0000000000000000000000000000000000000000..935501bce457b40d5497d27088f670efb23b9b59
--- /dev/null
+++ b/src/js/generateRelatedSlave.js
@@ -0,0 +1,291 @@
+window.generateRelatedSlave = (function() {
+	/**
+	 * Generate a very similar relative for an existing slave (for use in Household Liquidators, for example).
+	 * @param {SlaveState} slave - the source relative
+	 * @param {string} relationship - the relationship that the new relative has with the source.  Currently supports "daughter", "sibling", "twin".
+	 * @returns {SlaveState} - new relative
+	 */
+	function generateRelative(slave, relationship) {
+		let relative = prepareClone(slave);
+		if (relationship === "twin") {
+			makeTwin(relative);
+		} else if (relationship === "daughter") {
+			makeDaughter(relative);
+		} else if (relationship === "sibling") {
+			makeSibling(relative);
+		}
+		return relative;
+	}
+
+	/**
+	 * Clone the original slave and do some common preparations to it.
+	 * @param {SlaveState} slave - the source relative
+	 * @returns {SlaveState} - the new relative
+	 */
+	function prepareClone(slave) {
+		let relative = clone(slave);
+
+		// match surnames
+		const surname = slave.slaveSurname;
+		const birthSurname = slave.birthSurname;
+		nationalityToName(relative);
+		relative.slaveSurname = surname;
+		relative.birthSurname = birthSurname;
+
+		// regenerate accent
+		nationalityToAccent(relative);
+
+		// fuzz trust/devotion
+		relative.devotion += random(-5, 5);
+		relative.oldDevotion = relative.devotion;
+		relative.trust += random(-5, 5);
+		relative.oldTrust = relative.trust;
+
+		// fuzz attraction and energy
+		relative.attrXX += random(-20, 20);
+		relative.attrXX = Math.clamp(relative.attrXX, 0, 100);
+		relative.attrXY += random(-20, 20);
+		relative.attrXY = Math.clamp(relative.attrXX, 0, 100);
+		relative.energy += random(-20, 20);
+
+		// set ID (the original slave expects this to be their ID + 1000)
+		relative.ID += 1000;
+
+		return relative;
+	}
+
+	/**
+	 * Finish configuring an identical twin
+	 * @param {SlaveState} slave - the new twin
+	 */
+	function makeTwin(slave) {
+		if (!V.familyTesting) {
+			slave.relation = "twin";
+			slave.relationTarget = slave.ID - 1000;
+		}
+	}
+
+	/**
+	 * Finish configuring a sibling
+	 * @param {SlaveState} slave - the new sibling
+	 */
+	function makeSibling(slave) {
+		if (!V.familyTesting) {
+			slave.relation = "sister";
+			slave.relationTarget = slave.ID - 1000;
+		}
+
+		// reduce age
+		slave.actualAge -= random(1, 5);
+		slave.actualAge = Math.max(slave.actualAge, V.minimumSlaveAge);
+		slave.visualAge = slave.actualAge;
+		slave.physicalAge = slave.actualAge;
+		slave.ovaryAge = slave.actualAge;
+
+		// fuzz boobs/butt
+		if (slave.boobs > 200) {
+			slave.boobs += either(-100, 0, 100);
+		}
+		if (slave.butt > 1) {
+			slave.butt += random(-1, 1);
+		}
+
+		randomiseFetishFlaws(slave);
+		ageFixup(slave);
+	}
+
+	/**
+	 * Finish configuring a daughter
+	 * @param {SlaveState} slave - the new daughter
+	 */
+	function makeDaughter(slave) {
+		if (!V.familyTesting) {
+			slave.relation = "daughter";
+			slave.relationTarget = slave.ID - 1000;
+		}
+
+		// select age
+		const parentAge = slave.actualAge;
+		let maxAge = Math.min(22, Math.max(V.minimumSlaveAge, parentAge - 11));
+		let minAge = Math.min(Math.max(8, V.minimumSlaveAge), maxAge);
+		if (V.pedo_mode === 1) {
+			minAge = V.minimumSlaveAge;
+		}
+		slave.actualAge = random(minAge, maxAge);
+		slave.visualAge = slave.actualAge;
+		slave.physicalAge = slave.actualAge;
+		slave.ovaryAge = slave.actualAge;
+
+		// daughter always has less devotion/trust
+		slave.devotion -= 10;
+		slave.trust -= 10;
+
+		// daughter always has less boobs/butt
+		slave.boobs -= 100;
+		slave.butt -= 1;
+
+		// fuzz boobs/butt
+		if (slave.boobs > 200) {
+			slave.boobs += either(-100, 100);
+		}
+		if (slave.butt > 1) {
+			slave.butt += random(-1, 1);
+		}
+
+		// daughter has never had children and is likely a virgin
+		slave.vagina = either(0, 0, 0, 1);
+		slave.counter.birthsTotal = 0;
+
+		randomiseFetishFlaws(slave);
+		ageFixup(slave);
+	}
+
+	/**
+	 * Randomize fetish and flaws
+	 * @param {SlaveState} slave
+	 */
+	function randomiseFetishFlaws(slave) {
+		slave.fetishStrength = random(0, 90);
+		slave.fetish = either("buttslut", "cumslut", "dom", "humiliation", "masochist", "none", "none", "none", "none", "none", "none", "pregnancy", "sadist", "submissive");
+		slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "devout", "gluttonous", "hates men", "hates women", "hates women", "liberated", "masochist", "none", "none", "none", "odd");
+		if (slave.behavioralFlaw === "devout") {
+			slave.sexualFlaw = either("apathetic", "none", "repressed", "shamefast");
+		} else {
+			slave.sexualFlaw = either("apathetic", "crude", "hates anal", "hates oral", "hates penetration", "idealistic", "judgemental", "none", "none", "none", "none", "repressed", "shamefast");
+		}
+	}
+
+	/**
+	 * Fix age-related factors including physical immaturity, height, pregnancy, and health
+	 * Must be after age is recomputed, obviously; should not be needed for twins
+	 * @param {SlaveState} slave - the new relative
+	 */
+	function ageFixup(slave) {
+		// adjust for age
+		if (slave.physicalAge <= 15) {
+			ageAdjustYoungRelative(slave);
+		}
+		slave.height = Math.trunc(Height.random(slave));
+
+		// reset pregnancy
+		WombFlush(slave);
+		if (V.arcologies[0].FSRepopulationFocusSMR === 1 && canGetPregnant(slave)) {
+			slave.preg = random(1, 38);
+			slave.pregWeek = slave.preg;
+			slave.pregKnown = 1;
+			slave.pregType = setPregType(slave);
+			if (slave.vagina === 0) {
+				slave.vagina = 1;
+			}
+		}
+		SetBellySize(slave);
+
+		// reset health
+		setHealth(slave, slave.health.condition);
+	}
+
+	/**
+	 * When generating a younger relative by cloning an older one (for example, for Household Liquidators),
+	 * clamp certain physical parameters of the younger relative appropriately for their physical age.
+	 * Generally these adjustments should match the age limiters found in generateNewSlave.js.
+	 * @param {SlaveState} slave - the slave to adjust
+	 */
+	function ageAdjustYoungRelative(slave) {
+		/* breast size */
+		const origBoobs = slave.boobs;
+		if (slave.physicalAge <= 10) {
+			slave.boobs = Math.clamp(slave.boobs, 0, 100);
+		} else if (slave.physicalAge <= 12) {
+			slave.boobs = Math.clamp(slave.boobs, 0, 300);
+		} else if (slave.physicalAge <= 14) {
+			slave.boobs = Math.clamp(slave.boobs, 0, 400);
+		} else if (slave.physicalAge <= 15) {
+			slave.boobs = Math.clamp(slave.boobs, 0, 450);
+		}
+
+		/* if we've reduced breast size because of age, reapply minimum weight modifiers */
+		if (origBoobs > slave.boobs && State.variables.weightAffectsAssets !== 0) {
+			if (slave.weight > 190) {
+				slave.boobs += 300;
+			} else if (slave.weight > 160) {
+				slave.boobs += 200;
+			} else if (slave.weight > 30) {
+				slave.boobs += 100;
+			}
+		}
+
+		/* if we've managed to *increase* breast size, just put it back */
+		if (origBoobs < slave.boobs) {
+			slave.boobs = origBoobs;
+		}
+
+		/* breast shape - preserve if it would have been valid, otherwise reset to normal (don't reroll) */
+		const AllowedBoobShapes = [];
+		if (slave.boobs > 250 && slave.boobs < 800) {
+			AllowedBoobShapes.push("perky");
+			AllowedBoobShapes.push("downward-facing");
+		}
+		if (slave.boobs > 400 && slave.boobs < 1200) {
+			AllowedBoobShapes.push("torpedo-shaped");
+			AllowedBoobShapes.push("wide-set");
+		}
+		if (!AllowedBoobShapes.includes(slave.boobShape)) {
+			slave.boobShape = "normal";
+		}
+
+		/* voice */
+		if (slave.physicalAge <= 16 && slave.voice <= 1) {
+			slave.voice = 2;
+		}
+
+		/* XX genitals */
+		if (slave.physicalAge < 20 && slave.vagina > 1) {
+			slave.vagina = 1;
+		}
+
+		if (slave.physicalAge <= 13 && slave.clit > 1) {
+			slave.clit = 1;
+		}
+
+		if (slave.physicalAge <= 13 && slave.labia > 1) {
+			slave.labia = 1;
+		} else if (slave.physicalAge <= 15 && slave.labia > 2) {
+			slave.labia = 2;
+		}
+
+		/* XY genitals */
+		if (slave.physicalAge <= 13) {
+			if (slave.geneticQuirks.wellHung === 2 && slave.physicalAge >= 8 && slave.dick > 4) {
+				slave.dick = 4;
+			} else if (slave.dick > 3) {
+				slave.dick = 3;
+			}
+			if (slave.balls > 3) {
+				slave.balls = 3;
+				slave.scrotum = slave.balls;
+			}
+		} else if (slave.physicalAge <= 15) {
+			if (slave.geneticQuirks.wellHung === 2 && slave.dick > 5) {
+				slave.dick = 5;
+			} else if (slave.dick > 3) {
+				slave.dick = 3;
+			}
+			if (slave.balls > 4) {
+				slave.balls = 4;
+				slave.scrotum = slave.balls;
+			}
+		}
+
+		/* teeth */
+		if (slave.physicalAge < 6) {
+			slave.teeth = "baby";
+		} else if (slave.physicalAge < 12) {
+			slave.teeth = "mixed";
+		}
+
+		/* reset puberty status */
+		generatePuberty(slave);
+	}
+
+	return generateRelative;
+})();
diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js
index 4b9b4d2a68fd03fb40b0009c5b2b57170cc20f4a..cf29f65fa0c810a6646432b77e6a84843ec3162a 100644
--- a/src/js/utilsFC.js
+++ b/src/js/utilsFC.js
@@ -2817,3 +2817,17 @@ getBestSlaves({part:"boobs"});//defaults to top 3
 getBestSlaves({part:"dick", smallest:true, filter:(slave)=>slave.dick > 0});//defaults to top 3
 getBestSlaves({part:slave=>slave.intelligence+slave.intelligenceImplant});
 */
+
+/**
+ * Generates a new slave ID that is guaranteed to be unused
+ * @returns {number} slave ID
+ */
+window.generateSlaveID = function() {
+	// household liquidators and recETS generate slaves at an offset of 1000 (and many such slaves already exist)
+	// if you go through enough slaves you WILL generate collisions, so make sure we haven't just done that.
+	let allSlaveIDs = V.slaves.map((s) => s.ID);
+	while (allSlaveIDs.contains(V.IDNumber)) {
+		V.IDNumber++;
+	}
+	return V.IDNumber++;
+};
diff --git a/src/npc/importSlave.tw b/src/npc/importSlave.tw
index 888cc32df60cd3a03bafc043b81d586b3f5b7524..23bf55f3fd5ff3f250c385f9d8e846ee78344301 100644
--- a/src/npc/importSlave.tw
+++ b/src/npc/importSlave.tw
@@ -13,8 +13,7 @@
 <<link "Apply">>
 	<<if (def $tempSlave) && ($tempSlave !== "")>>
 		<<set $tempSlave = eval('({' + $tempSlave + '})')>>
-		<<set $tempSlave.ID = $IDNumber>>
-		<<set $IDNumber += 1>>
+		<<set $tempSlave.ID = generateSlaveID()>>
 		<<run newSlave($tempSlave)>>
 		<<replace #import>>
 			''Slave imported successfully!''
diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw
index caa05211cfcbde850a122ea55a4bf6eb67725a2f..33c01665de5ebfc52b30c6fe7824c977993e72df 100644
--- a/src/npc/startingGirls/startingGirls.tw
+++ b/src/npc/startingGirls/startingGirls.tw
@@ -26,7 +26,7 @@
 
 <<if $startingGirlCopied == 1>>
 	<<set _tempSlave = clone($activeSlave), $activeSlave = $slaveWithoutBonuses>>
-	<<set $activeSlave.ID = $IDNumber++>>
+	<<set $activeSlave.ID = generateSlaveID()>>
 	<<if $startingGirlRelation>>
 		<<if $familyTesting == 1>>
 			/*
diff --git a/src/uncategorized/bulkSlaveIntro.tw b/src/uncategorized/bulkSlaveIntro.tw
index f5a3b9159f67f5533afe45231c7f40b79ad310ca..a4644202af26682d40b019c1e6de1aec63f3af17 100644
--- a/src/uncategorized/bulkSlaveIntro.tw
+++ b/src/uncategorized/bulkSlaveIntro.tw
@@ -45,6 +45,9 @@
 	<</if>>
 	You spent @@.yellowgreen;<<print cashFormat($spent)>>@@ on your new slaves.<br><br>
 
+<<case "liquidator">>
+	<p>Your new pair of slaves look frightened and uncertain, but seem encouraged by each other's presence.</p>
+
 <<case "event">>
 	This is placeholder event info.
 
diff --git a/src/uncategorized/householdLiquidator.tw b/src/uncategorized/householdLiquidator.tw
index 16a72613898974e9d9dec37a6f84780f91b34abd..bb0a556300223ab1e1c5d863d2bcb504a347321e 100644
--- a/src/uncategorized/householdLiquidator.tw
+++ b/src/uncategorized/householdLiquidator.tw
@@ -1,10 +1,10 @@
 :: Household Liquidator [nobr]
 
 <<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $showEncyclopedia = 1, $encyclopedia = "Household Liquidations">>
+<<set $introType = "liquidator", $newSlavesDone = 0, $newSlaveIndex = 0, $newSlaves = []>>
 
 <<if random(1,100) > 50>>
 
-
 <<set $oneTimeDisableDisability = 1>>
 <<set $activeSlave = GenerateNewSlave()>>
 <<set $activeSlave.origin = "You bought $him from the household liquidator.">>
@@ -27,21 +27,12 @@
 The household liquidator is offering a set of siblings for sale. As usual, you will only be permitted to inspect the older, but there is a guarantee that the younger will be similar.
 <br><br>
 
+<<set _relativeSlave = generateRelatedSlave($activeSlave, "sibling")>>
+<<run $newSlaves.push($activeSlave), $newSlaves.push(_relativeSlave)>>
+
 <<set _slaveCost = slaveCost($activeSlave)>>
 <<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>>
-
-The price is <<print cashFormat(_slaveCost*3)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>>
-<br><br>
-
-<<if $cash >= _slaveCost*3>>
-	[[Buy their slave contract|Siblings Workaround][cashX(forceNeg(_slaveCost*3), "slaveTransfer", $activeSlave),$nextButton = "Continue",$nextLink = "Main"]]
-<<else>>
-	//You lack the necessary funds to buy these slaves.//
-<</if>>
-<br>[[Decline to purchase them and check out another set of slaves|Household Liquidator][$slavesSeen += 2]]
-<br><br>
-
-<<set $saleDescription = 1, $applyLaw = 1>><<include "Long Slave Description">>
+<<set _totalCost = _slaveCost*3>>
 
 <<elseif random(1,100) > 20>>
 
@@ -73,24 +64,12 @@ The price is <<print cashFormat(_slaveCost*3)>>.<<if $slavesSeen > $slaveMarketL
 The household liquidator is offering a mother and $his daughter for sale. As usual, you will only be permitted to inspect the mother, but there is a guarantee that the daughter will be similar.
 <br><br>
 
+<<set _relativeSlave = generateRelatedSlave($activeSlave, "daughter")>>
+<<run $newSlaves.push($activeSlave), $newSlaves.push(_relativeSlave)>>
+
 <<set _slaveCost = slaveCost($activeSlave)>>
 <<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>>
-
-The price is <<print cashFormat(_slaveCost*3)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>>
-<br><br>
-
-<<if $cash >= _slaveCost*3>>
-	[[Buy their slave contract|Mother Daughter Workaround][cashX(forceNeg(_slaveCost*3), "slaveTransfer", $activeSlave),"Continue",$nextLink = "Main"]]
-<<else>>
-	//You lack the necessary funds to buy these slaves.//
-<</if>>
-<br>[[Decline to purchase them and check out another set of slaves|Household Liquidator][$slavesSeen += 2]]
-<br><br>
-
-<<set $saleDescription = 1>>
-<<set $applyLaw = 1>>
-<<include "Long Slave Description">>
-<<set $saleDescription = 0>>
+<<set _totalCost = _slaveCost*3>>
 
 <<else>>
 
@@ -116,23 +95,25 @@ The price is <<print cashFormat(_slaveCost*3)>>.<<if $slavesSeen > $slaveMarketL
 The household liquidator is offering something special: identical twins. The markup is huge, but the merchandise isn't something you see every day.
 <br><br>
 
+<<set _relativeSlave = generateRelatedSlave($activeSlave, "twin")>>
+<<run $newSlaves.push($activeSlave), $newSlaves.push(_relativeSlave)>>
+
 <<set _slaveCost = slaveCost($activeSlave)>>
 <<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>>
+<<set _totalCost = _slaveCost*4>>
+
+<</if>>
 
-The price is <<print cashFormat(_slaveCost*4)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>>
+The price is <<print cashFormatColor(_totalCost)>>. <<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>>
 <br><br>
 
-<<if $cash >= _slaveCost*4>>
-	[[Buy their slave contract|Twins Workaround][cashX(forceNeg(_slaveCost*4), "slaveTransfer", $activeSlave),$nextButton = "Continue",$nextLink = "Main"]]
+<<if $cash >= _totalCost>>
+	[[Buy their slave contract|Bulk Slave Intro][$newSlaves.forEach((s) => cashX(forceNeg(_totalCost/$newSlaves.length), "slaveTransfer", s))]]
 <<else>>
 	//You lack the necessary funds to buy these slaves.//
 <</if>>
 <br>[[Decline to purchase them and check out another set of slaves|Household Liquidator][$slavesSeen += 2]]
 <br><br>
 
-<<set $saleDescription = 1>>
-<<set $applyLaw = 1>>
+<<set $saleDescription = 1, $applyLaw = 1>>
 <<include "Long Slave Description">>
-<<set $saleDescription = 0>>
-
-<</if>>
diff --git a/src/uncategorized/motherDaughterWorkaround.tw b/src/uncategorized/motherDaughterWorkaround.tw
deleted file mode 100644
index f95b694ac997c346742d73a576e4d52ad1df1b61..0000000000000000000000000000000000000000
--- a/src/uncategorized/motherDaughterWorkaround.tw
+++ /dev/null
@@ -1,79 +0,0 @@
-:: Mother Daughter Workaround
-
-Your new pair of slaves look frightened and uncertain, but seem encouraged by each other's presence.
-
-<<run newSlave($activeSlave)>>
-
-<<set _secondSlave = clone($activeSlave)>>
-<<unset $activeSlave>>
-<<if _secondSlave.slaveSurname>><<set _familyName = _secondSlave.slaveSurname>><</if>>
-<<set _familyBirthSurname = _secondSlave.birthSurname>>
-<<run nationalityToName(_secondSlave)>>
-<<if _familyName>><<set _secondSlave.slaveSurname = _familyName>><</if>>
-<<set _secondSlave.birthSurname = _familyBirthSurname>>
-<<run nationalityToAccent(_secondSlave)>>
-
-<<set _secondSlave.ID = _secondSlave.ID + 1000>>
-<<set _secondSlave.devotion -= random(5,15)>>
-<<set _secondSlave.oldDevotion = _secondSlave.devotion>>
-<<set _secondSlave.trust -= random(5,15)>>
-<<set _secondSlave.oldTrust = _secondSlave.trust>>
-<<set _secondSlave.boobs -= 100>>
-<<set _secondSlave.butt -= 1>>
-<<set _secondSlave.vagina = either(0, 0, 0, 1)>>
-<<set _secondSlave.counter.birthsTotal = 0>>
-
-<<set $activeSlaveOneTimeMaxAge = Math.min(22, Math.max($minimumSlaveAge, _secondSlave.actualAge - 11))>>
-<<set $activeSlaveOneTimeMinAge = Math.min(Math.max(8, $minimumSlaveAge), $activeSlaveOneTimeMaxAge)>>
-<<if $pedo_mode == 1>><<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>><</if>>
-<<set _secondSlave.actualAge = random($activeSlaveOneTimeMinAge, $activeSlaveOneTimeMaxAge)>>
-<<set _secondSlave.visualAge = _secondSlave.actualAge>>
-<<set _secondSlave.physicalAge = _secondSlave.actualAge>>
-<<set _secondSlave.ovaryAge = _secondSlave.actualAge>>
-
-<<set WombFlush(_secondSlave)>>
-<<if (($precociousPuberty == 1 && _secondSlave.actualAge < $fertilityAge) || _secondSlave.actualAge >= $fertilityAge) && $arcologies[0].FSRepopulationFocusSMR == 1>>
-	<<set _secondSlave.preg = random(1,24)>>
-	<<set _secondSlave.pregWeek = _secondSlave.preg>>
-	<<set _secondSlave.pregKnown = 1>>
-	<<set _secondSlave.pregType = setPregType(_secondSlave)>>
-<</if>>
-<<run SetBellySize(_secondSlave)>>
-
-<<set _secondSlave.attrXX += random(-20,20)>>
-<<set _secondSlave.attrXX = Math.clamp(_secondSlave.attrXX, 0, 100)>>
-<<set _secondSlave.attrXY += random(-20,20)>>
-<<set _secondSlave.attrXY = Math.clamp(_secondSlave.attrXY, 0, 100)>>
-<<set _secondSlave.energy += random(-20,20)>>
-<<set _secondSlave.fetishStrength = random(0,90)>>
-<<set _secondSlave.fetish = either("buttslut", "cumslut", "dom", "humiliation", "masochist", "none", "none", "none", "none", "none", "none", "pregnancy", "sadist", "submissive")>>
-<<set _secondSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "devout", "gluttonous", "hates men", "hates women", "hates women", "liberated", "masochist", "none", "none", "none", "odd")>>
-<<if (_secondSlave.behavioralFlaw == "devout")>>
-	<<set _secondSlave.sexualFlaw = either("apathetic", "none", "repressed", "shamefast")>>
-<<else>>
-	<<set _secondSlave.sexualFlaw = either("apathetic", "crude", "hates anal", "hates oral", "hates penetration", "idealistic", "judgemental", "none", "none", "none", "none", "repressed", "shamefast")>>
-<</if>>
-
-<<if $familyTesting == 1>>
-	<<set _secondSlave.mother = _secondSlave.ID - 1000>>
-<<else>>
-	<<set _secondSlave.relation = "daughter">>
-	<<set _secondSlave.relationTarget = _secondSlave.ID - 1000>>
-<</if>>
-
-<<if _secondSlave.boobs > 200>>
-	<<set _secondSlave.boobs += random(-1, 1)*100>>
-<</if>>
-
-<<if _secondSlave.butt > 1>>
-	<<set _secondSlave.butt += random(-1, 1)>>
-<</if>>
-
-<<if _secondSlave.physicalAge <= 15>>
-	<<run AgeAdjustYoungRelative(_secondSlave)>>
-<</if>>
-<<set _secondSlave.height = Math.trunc(Height.random(_secondSlave))>>
-
-<<run setHealth(_secondSlave, _secondSlave.health.condition + 20)>>
-
-<<run newSlave(_secondSlave)>>
diff --git a/src/uncategorized/siblingsWorkaround.tw b/src/uncategorized/siblingsWorkaround.tw
deleted file mode 100644
index fdccb7fdefe9a5b48b01bdb8347fcf82d4dc1ca9..0000000000000000000000000000000000000000
--- a/src/uncategorized/siblingsWorkaround.tw
+++ /dev/null
@@ -1,77 +0,0 @@
-:: Siblings Workaround
-
-Your new pair of slaves look frightened and uncertain, but seem encouraged by each other's presence.
-
-<<run newSlave($activeSlave)>>
-
-<<set _secondSlave = clone($activeSlave)>>
-<<unset $activeSlave>>
-<<if _secondSlave.slaveSurname>><<set _familyName = _secondSlave.slaveSurname>><</if>>
-<<set _familyBirthSurname = _secondSlave.birthSurname>>
-<<run nationalityToName(_secondSlave)>>
-<<if _familyName>><<set _secondSlave.slaveSurname = _familyName>><</if>>
-<<set _secondSlave.birthSurname = _familyBirthSurname>>
-<<run nationalityToAccent(_secondSlave)>>
-
-<<set _secondSlave.ID = _secondSlave.ID + 1000>>
-<<set _secondSlave.devotion -= random(5,-5)>>
-<<set _secondSlave.oldDevotion = _secondSlave.devotion>>
-<<set _secondSlave.trust -= random(5,-5)>>
-<<set _secondSlave.oldTrust = _secondSlave.trust>>
-<<set _secondSlave.oldDevotion = _secondSlave.devotion>>
-<<set _secondSlave.actualAge -= random(1,5)>>
-<<set _secondSlave.visualAge = _secondSlave.actualAge>>
-<<set _secondSlave.physicalAge = _secondSlave.actualAge>>
-<<set _secondSlave.ovaryAge = _secondSlave.actualAge>>
-
-<<set WombFlush(_secondSlave)>>
-<<if (($precociousPuberty == 1 && _secondSlave.actualAge < $fertilityAge) || _secondSlave.actualAge >= $fertilityAge) && $arcologies[0].FSRepopulationFocusSMR == 1>>
-	<<set _secondSlave.preg = random(1,38)>>
-	<<set _secondSlave.pregWeek = _secondSlave.preg>>
-	<<set _secondSlave.pregKnown = 1>>
-	<<set _secondSlave.pregType = setPregType(_secondSlave)>>
-<</if>>
-<<run SetBellySize(_secondSlave)>>
-
-<<set _secondSlave.attrXX += random(-20,20)>>
-<<set _secondSlave.attrXX = Math.clamp(_secondSlave.attrXX, 0, 100)>>
-<<set _secondSlave.attrXY += random(-20,20)>>
-<<set _secondSlave.attrXY = Math.clamp(_secondSlave.attrXY, 0, 100)>>
-<<set _secondSlave.energy += random(-20,20)>>
-<<set _secondSlave.fetishStrength = random(0,90)>>
-<<set _secondSlave.fetish = either("buttslut", "cumslut", "dom", "humiliation", "masochist", "none", "none", "none", "none", "none", "none", "pregnancy", "sadist", "submissive")>>
-<<set _secondSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "devout", "gluttonous", "hates men", "hates women", "hates women", "liberated", "masochist", "none", "none", "none", "odd")>>
-<<if (_secondSlave.behavioralFlaw == "devout")>>
-	<<set _secondSlave.sexualFlaw = either("apathetic", "none", "repressed", "shamefast")>>
-<<else>>
-	<<set _secondSlave.sexualFlaw = either("apathetic", "crude", "hates anal", "hates oral", "hates penetration", "idealistic", "judgemental", "none", "none", "none", "none", "repressed", "shamefast")>>
-<</if>>
-
-<<if $familyTesting == 0>>
-	<<set _secondSlave.relation = "sister">>
-	<<set _secondSlave.relationTarget = _secondSlave.ID - 1000>>
-<</if>>
-
-<<if _secondSlave.actualAge < $minimumSlaveAge>>
-	<<set _secondSlave.actualAge = $minimumSlaveAge>>
-	<<set _secondSlave.visualAge = _secondSlave.actualAge>>
-	<<set _secondSlave.physicalAge = _secondSlave.actualAge>>
-	<<set _secondSlave.ovaryAge = _secondSlave.actualAge>>
-<</if>>
-
-<<if _secondSlave.boobs > 200>>
-	<<set _secondSlave.boobs += random (-100, 100)>>
-<</if>>
-
-<<if _secondSlave.butt > 1>>
-	<<set _secondSlave.butt += random (-1, 1)>>
-<</if>>
-
-<<if _secondSlave.physicalAge <= 15>>
-	<<run AgeAdjustYoungRelative(_secondSlave)>>
-<</if>>
-<<set _secondSlave.height = Math.trunc(Height.random(_secondSlave))>>
-
-<<run setHealth(_secondSlave, _secondSlave.health.condition)>>
-
-<<run newSlave(_secondSlave)>>
diff --git a/src/uncategorized/twinsWorkaround.tw b/src/uncategorized/twinsWorkaround.tw
deleted file mode 100644
index 3bdcc64acd1b9b34ddc4336c46eddd1d2cf595aa..0000000000000000000000000000000000000000
--- a/src/uncategorized/twinsWorkaround.tw
+++ /dev/null
@@ -1,22 +0,0 @@
-:: Twins Workaround
-
-Your new pair of slaves look frightened and uncertain, but seem encouraged by each other's presence.
-
-<<run newSlave($activeSlave)>>
-
-<<set _secondSlave = clone($activeSlave)>>
-<<unset $activeSlave>>
-<<if _secondSlave.slaveSurname>><<set _familyName = _secondSlave.slaveSurname>><</if>>
-<<set _familyBirthSurname = _secondSlave.birthSurname>>
-<<run nationalityToName(_secondSlave)>>
-<<if _familyName>><<set _secondSlave.slaveSurname = _familyName>><</if>>
-<<set _secondSlave.birthSurname = _familyBirthSurname>>
-<<run nationalityToAccent(_secondSlave)>>
-
-<<set _secondSlave.ID = _secondSlave.ID + 1000>>
-<<if $familyTesting == 0>>
-	<<set _secondSlave.relation = "twin">>
-	<<set _secondSlave.relationTarget = _secondSlave.ID - 1000>>
-<</if>>
-
-<<run newSlave(_secondSlave)>>