diff --git a/src/js/slaveInteract.js b/src/js/slaveInteract.js
index 13d2d4399ed54fb0fc4cce297c4906e5d6f5a34d..c0788602d0cffe62481d6f8439d37f1dbbf14775 100644
--- a/src/js/slaveInteract.js
+++ b/src/js/slaveInteract.js
@@ -1142,9 +1142,1089 @@ App.UI.SlaveInteract.fertility = function(slave) {
 	return jQuery('#fertilityblock').empty().append(fertilityblock);
 };
 
+App.UI.SlaveInteract.curatives = function(slave) {
+    let el = document.createElement('div');
+
+	const
+		{
+			// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+	const curativeOptions = [];
+
+	drugOptions.push({text: `None`, drug: 0});
+	drugOptions.push({text: `Preventatives`, drug: 1});
+	drugOptions.push({text: `Curatives`, drug: 2});
+	
+	let title = document.createElement('div');
+	title.append(`Health: `);
+	let chosenOption = document.createElement('span')
+	chosenOption.style.fontWeight = "bold";
+	if (slave.curatives > 1) {
+		chosenOption.textContent = `curatives`;
+	} else if (slave.curatives > 0) {
+		chosenOption.textContent = `preventatives`;
+	} else {
+		chosenOption.textContent = `none`
+	}
+	title.append(`.`);
+	App.UI.SlaveInteract.generateRows(drugOptions);
+
+
+	Aphrodisiacs: <span id="aphrodisiacs"><strong>
+	if (slave.aphrodisiacs > 1) {
+	extreme
+	} else if (slave.aphrodisiacs > 0) {
+	applied
+	} else if (slave.aphrodisiacs === -1) {
+	anaphrodisiacs
+	} else {
+	none
+	}</strong></span>.
+		<<link "None">>
+	slave.aphrodisiacs = 0;
+	<<replace "#aphrodisiacs">><strong>none</strong>
+	<</replace>>
+	<</link>>
+		| <<link "Apply">>
+	slave.aphrodisiacs = 1;
+	<<replace "#aphrodisiacs">><strong>applied</strong>
+	<</replace>>
+	<</link>>
+		| <<link "Extreme">>
+	slave.aphrodisiacs = 2;
+	<<replace "#aphrodisiacs">><strong>extreme</strong>
+	<</replace>>
+	<</link>>
+		| <<link "Anaphrodisiacs">>
+	slave.aphrodisiacs = -1;
+	<<replace "#aphrodisiacs">><strong>anaphrodisiacs</strong>
+	<</replace>>
+	<</link>>
+	<br>
+	<span id="fertilityblock"></span>
+	<script>App.UI.SlaveInteract.fertility(V.activeSlave)</script>
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	V.reservedChildrenNursery = FetusGlobalReserveCount("nursery");
+	let _reservedIncubator = WombReserveCount(slave, "incubator");
+	let _reservedNursery = WombReserveCount(slave, "nursery");
+	let _WL = slave.womb.length;
+
+	if (V.incubator > 0) {
+		if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") {
+			if ((slave.assignment === "work in the dairy" && V.dairyPregSetting > 0) || (slave.assignment === "work in the farmyard" && V.farmyardBreeding > 0)) {
+			} else {
+				<br>&nbsp;&nbsp;&nbsp;&nbsp;
+				if (_WL - _reservedNursery === 0) {
+					//V.His children are already reserved for V.nurseryName//
+				} else {
+					V.freeTanks = (V.incubator-V.tanks.length);
+					if (_reservedIncubator > 0) {
+						if (_WL === 1) {
+							r += `V.His child will be placed in V.incubatorName. `;
+						} else if (_reservedIncubator < _WL) {
+							_reservedIncubator of V.his children will be placed in V.incubatorName.
+						} else if (_WL === 2) {
+							r += `Both of V.his children will be placed in V.incubatorName. `;
+						} else {
+							r += `All ${_reservedIncubator} of V.his children will be placed in V.incubatorName. `;
+						}
+						if ((_reservedIncubator + _reservedNursery < _WL) && (V.reservedChildren < V.freeTanks)) {
+							<<link "Keep another child" "Slave Interact">>
+	WombAddToGenericReserve(slave, "incubator", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							if (_reservedIncubator > 0) {
+								| <<link "Keep one less child" "Slave Interact">>
+	WombCleanGenericReserve(slave, "incubator", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							}
+							if (_reservedIncubator > 1) {
+								| <<link "Keep none of V.his children" "Slave Interact">>
+	WombCleanGenericReserve(slave, "incubator", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							}
+							if ((V.reservedChildren + _WL - _reservedIncubator) <= V.freeTanks) {
+								| <<link "Keep the rest of V.his children" "Slave Interact">>
+	WombAddToGenericReserve(slave, "incubator", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							}
+						} else if ((_reservedIncubator === _WL) || (V.reservedChildren === V.freeTanks) || (_reservedIncubator - _reservedNursery >= 0)) {
+							<<link "Keep one less child" "Slave Interact">>
+	WombCleanGenericReserve(slave, "incubator", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							if (_reservedIncubator > 1) {
+								| <<link "Keep none of V.his children" "Slave Interact">>
+	WombCleanGenericReserve(slave, "incubator", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+							}
+						}
+					} else if (V.reservedChildren < V.freeTanks) {
+						V.He is pregnant and you have
+						if (V.freeTanks === 1) {
+							an
+						}
+						<span class="lime">available aging tank
+						if (V.freeTanks > 1) {
+							s
+						}
+						.</span>
+						let _cCount = (_WL > 1 ? "a" : "the");
+						<<link "Keep _cCount child" "Slave Interact">>
+	WombAddToGenericReserve(slave, "incubator", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+						if ((_WL > 1) && (V.reservedChildren + _WL) <= V.freeTanks) {
+							| <<link "Keep all of V.his children" "Slave Interact">>
+	WombAddToGenericReserve(slave, "incubator", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("incubator");
+	<</link>>
+						}
+					} else if (V.reservedChildren === V.freeTanks) {
+						r += `You have no available tanks for V.his children. `;
+					}
+				}
+			}
+		}
+	}
+
+	if (V.nursery > 0) {
+		if (slave.preg > 0 && slave.broodmother === 0 && slave.pregKnown === 1 && slave.eggType === "human") {
+			if ((slave.assignment === "work in the dairy" && V.dairyPregSetting > 0) || (slave.assignment === "work in the farmyard" && V.farmyardBreeding > 0)) {
+			} else {
+				<br>&nbsp;&nbsp;&nbsp;&nbsp;
+				if (_WL - _reservedIncubator === 0) {
+					V.reservedChildren = 0;
+					//V.His children are already reserved for V.incubatorName//
+				} else {
+					V.freeCribs = (V.nursery-V.cribs.length);
+					if (_reservedNursery > 0) {
+						if (_WL === 1) {
+							r += `V.His child will be placed in V.nurseryName. `;
+						} else if (_reservedNursery < _WL) {
+							_reservedNursery of V.his children will be placed in V.nurseryName.
+						} else if (_WL === 2) {
+							r += `Both of V.his children will be placed in V.nurseryName. `;
+						} else {
+							r += `All ${_reservedNursery} of V.his children will be placed in V.nurseryName. `;
+						}
+						if (((_reservedIncubator + _reservedNursery < _WL) && (V.reservedChildrenNursery < V.freeCribs))) {
+							<<link "Keep another child" "Slave Interact">>
+	WombAddToGenericReserve(slave, "nursery", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+							if (_reservedNursery > 0) {
+								| <<link "Keep one less child" "Slave Interact">>
+	WombCleanGenericReserve(slave, "nursery", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+							}
+							if (_reservedNursery > 1) {
+								| <<link "Keep none of V.his children" "Slave Interact">>
+	WombCleanGenericReserve(slave, "nursery", 9999);
+	<</link>>
+							}
+							if ((V.reservedChildrenNursery + _WL - _reservedNursery) <= V.freeCribs) {
+								| <<link "Keep the rest of V.his children" "Slave Interact">>
+	WombAddToGenericReserve(slave, "nursery", 9999);
+	<</link>>
+							}
+						} else if ((_reservedNursery === _WL) || (V.reservedChildrenNursery === V.freeCribs) || (_reservedNursery - _reservedIncubator >= 0)) {
+							<<link "Keep one less child" "Slave Interact">>
+	WombCleanGenericReserve(slave, "nursery", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+							if (_reservedNursery > 1) {
+								| <<link "Keep none of V.his children" "Slave Interact">>
+	WombCleanGenericReserve(slave, "nursery", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+							}
+						}
+					} else if (V.reservedChildrenNursery < V.freeCribs) {
+						V.He is pregnant and you have
+						if (V.freeCribs === 1) {
+							an
+						}
+						<span class="lime">available room
+						if (V.freeCribs > 1) {
+							s
+						}
+						</span> in V.nurseryName.
+						let _cCount = (_WL > 1 ? "a" : "the");
+						<<link "Keep _cCount child" "Slave Interact">>
+	WombAddToGenericReserve(slave, "nursery", 1);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+						if ((_WL > 1) && (V.reservedChildrenNursery + _WL) <= V.freeCribs) {
+							| <<link "Keep all of V.his children" "Slave Interact">>
+	WombAddToGenericReserve(slave, "nursery", 9999);
+	V.slaves[V.slaveIndices[slave.ID]] = slave;
+	V.reservedChildren = FetusGlobalReserveCount("nursery");
+	<</link>>
+						}
+					} else if (V.reservedChildrenNursery === V.freeCribs) {
+						r += `You have no available rooms for V.his children. `;
+					}
+				}
+			}
+		}
+	}
+
+	if (V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") {
+		if (slave.breedingMark === 0 && slave.fuckdoll === 0 && slave.eggType === "human" && isFertile(slave) && slave.preg === 0) {
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;
+			[[Breeder Eligibility Exam|BreedingTest]]
+		}
+	}
+
+	<span id="bloating"></span>
+	<script>App.UI.SlaveInteract.bloating(V.activeSlave)</script>
+
+	Hormones: <strong><span id="hormones">
+	if (slave.hormones === -2) {
+	intensive male
+	} else if (slave.hormones === -1) {
+	male
+	} else if (slave.hormones === 2) {
+	intensive female
+	} else if (slave.hormones === 1) {
+	female
+	} else {
+	none
+	}</span></strong>.
+	if (slave.indentureRestrictions < 2) {
+		<<link "Intensive Female">>
+	slave.hormones = 2;
+	<<replace "#hormones">>
+	intensive female
+	<</replace>>
+	<</link>>
+	|
+	}
+	<<link "Female">>
+	slave.hormones = 1;
+	<<replace "#hormones">>
+	female
+	<</replace>>
+	<</link>>
+	|
+	<<link "None">>
+	slave.hormones = 0;
+	<<replace "#hormones">>
+	none
+	<</replace>>
+	<</link>>
+	|
+	<<link "Male">>
+	slave.hormones = -1;
+	<<replace "#hormones">>
+	male
+	<</replace>>
+	<</link>>
+	|
+	if (slave.indentureRestrictions < 2) {
+		<<link "Intensive Male">>
+	slave.hormones = -2;
+	<<replace "#hormones">>
+	intensive male
+	<</replace>>
+	<</link>>
+	}
+
+	<br>Diet: <strong><span id="diet">slave.diet</span></strong>.
+	<<link "Healthy">>
+	slave.diet = "healthy";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	if ((slave.health.condition < 90 || slave.chem >= 10) && (V.dietCleanse === 1)) {
+		| <<link "Cleanse">>
+	slave.diet = "cleansing";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	} else if ((V.dietCleanse === 1)) {
+		| //V.He is already healthy//
+	}
+	if ((slave.balls > 0) && (V.cumProDiet === 1)) {
+		| <<link "Cum production">>
+	slave.diet = "cum production";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	}
+	if (isFertile(slave) && slave.preg === 0 && (V.dietFertility === 1)) {
+		| <<link "Fertility">>
+	slave.diet = "fertility";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	}
+	if ((slave.weight >= -95)) {
+		| <<link "Lose weight">>
+	slave.diet = "restricted";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	} else {
+		| //V.He is already underweight//
+	}
+	if (slave.weight <= 200) {
+		| <<link "Fatten">>
+	slave.diet = "fattening";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	} else {
+		| //V.He is already extremely overweight//
+	}
+	if (V.feeder === 1) {
+		| <<link "Estrogen enriched">>
+	slave.diet = "XX";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+		| <<link "Testosterone enriched">>
+	slave.diet = "XY";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+		if (V.dietXXY === 1 && slave.balls > 0 && (slave.ovaries === 1 || slave.mpreg === 1)) {
+			| <<link "Herm hormone blend">>
+	slave.diet = "XXY";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+		}
+	}
+	if ((slave.muscles <= 95) && !isAmputee(slave)) {
+		| <<link "Build muscle">>
+	slave.diet = "muscle building";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	} else if (!isAmputee(slave)) {
+		| //V.He is maintaining V.his enormous musculature//
+	} else {
+		| //V.He has no limbs and thus can't effectively build muscle//
+	}
+	if ((slave.muscles > 5 || slave.fuckdoll === 0) && canWalk(slave)) {
+		| <<link "Slim down">>
+	slave.diet = "slimming";
+	<<replace "#diet">>
+	slave.diet
+	<</replace>>
+	<</link>>
+	} else if (!canWalk(slave)) {
+		| //V.He can't move and thus can't trim down//
+	} else if (slave.fuckdoll > 0) {
+		| //V.He has no muscles left to lose//
+	}
+
+	<br>Diet Base: <strong><span id="dietBase">
+	if (slave.dietCum === 2) {
+	cum based
+	} else if ((slave.dietCum === 1) && (slave.dietMilk === 0)) {
+	cum added
+	} else if ((slave.dietCum === 1) && (slave.dietMilk === 1)) {
+	cum and milk added
+	} else if ((slave.dietMilk === 1) && (slave.dietCum === 0)) {
+	milk added
+	} else if ((slave.dietMilk === 2)) {
+	milk based
+	} else if ((slave.dietCum === 0) && (slave.dietMilk === 0)) {
+	normal
+	} else {
+	THERE HAS BEEN AN ERROR
+	}</span></strong>.
+	<<link "Normal">>
+	slave.dietCum = 0;
+	slave.dietMilk = 0;
+	<<replace "#dietBase">>
+	normal
+	<</replace>>
+	<</link>>
+	|
+	<<link "Cum added">>
+	slave.dietCum = 1;
+	slave.dietMilk = 0;
+	<<replace "#dietBase">>
+	cum added
+	<</replace>>
+	<</link>>
+	|
+	<<link "Milk added">>
+	slave.dietCum = 0;
+	slave.dietMilk = 1;
+	<<replace "#dietBase">>
+	milk added
+	<</replace>>
+	<</link>>
+	|
+	<<link "Cum & milk added">>
+	slave.dietCum = 1;
+	slave.dietMilk = 1;
+	<<replace "#dietBase">>
+	cum & milk added
+	<</replace>>
+	<</link>>
+	|
+	<<link "Cum based">>
+	slave.dietCum = 2;
+	slave.dietMilk = 0;
+	<<replace "#dietBase">>
+	cum based
+	<</replace>>
+	<</link>>
+	|
+	<<link "Milk based">>
+	slave.dietCum = 0;
+	slave.dietMilk = 2;
+	<<replace "#dietBase">>
+	milk based
+	<</replace>>
+	<</link>>
+
+	if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) {
+		<br>Solid Slave Food Access: <strong><span id="snacks">
+	if (slave.onDiet === 0) {
+	Free to stuff V.himself.
+	} else {
+	On a strict diet.
+	}</span></strong>
+		<<link "No access">>
+	slave.onDiet = 1;
+	<<replace "#snacks">>
+	On a strict diet.
+	<</replace>>
+	<</link>>
+	|
+		<<link "Full access">>
+	slave.onDiet = 0;
+	<<replace "#snacks">>
+	Free to stuff V.himself.
+	<</replace>>
+	<</link>>
+	}
+
+	<br><br>__Behavior__:<br>
+	if (slave.fuckdoll > 0) {
+		//Rules have little meaning for living sex toys//
+	} else {
+		<<set _visibleSlaves = V.slaves.filter(s => assignmentVisible(s) && (s.assignment !== "be your Head Girl" || V.HGSuite !== 1) && (s.assignment !== "guard you" || V.dojo <= 1)),
+			V.dormitoryPopulation = _visibleSlaves.filter(s => s.rules.living !== "luxurious").length;
+			V.roomsPopulation = _visibleSlaves.length - V.dormitoryPopulation - _visibleSlaves.filter(s => s.rules.living === "luxurious" && s.relationship >= 4).length * 0.5;
+
+		r += `Living standard: ''<span id="livingRules">slave.rules.living</span>.'' `;
+		if (setup.facilityCareers.includes(slave.assignment)) {
+			//V.His living conditions are managed by V.his assignment.//
+		} else if ((slave.assignment === "be your Head Girl") && (V.HGSuite === 1)) {
+			//V.He has V.his own little luxurious room in the penthouse with everything V.he needs to be a proper Head Girl.//
+		} else if ((slave.assignment === "guard you") && (V.dojo > 1)) {
+			//V.He has a comfortable room in the armory to call V.his own.//
+		} else {
+			<<link "Spare">>
+	slave.rules.living = "spare";
+	<<replace "#livingRules">>
+	slave.rules.living
+	<</replace>>
+	<</link>>
+	|
+			<<link "Normal">>
+	slave.rules.living = "normal";
+	<<replace "#livingRules">>
+	slave.rules.living
+	<</replace>>
+	<</link>>
+	|
+			if (V.roomsPopulation <= V.rooms-0.5) {
+	<<link "Luxurious">>
+	slave.rules.living = "luxurious";
+	<<replace "#livingRules">>
+	slave.rules.living
+	<</replace>>
+	<</link>>
+	} else {//No luxurious rooms available//
+	}
+		}
+
+		<br>Typical punishment: ''<span id="standardPunishment">slave.rules.punishment</span>.''
+		<<link "Confinement">>
+	slave.rules.punishment = "confinement";
+	<<replace "#standardPunishment">>
+	slave.rules.punishment
+	<</replace>>
+	<</link>>
+	|
+		<<link "Whipping">>
+	slave.rules.punishment = "whipping";
+	<<replace "#standardPunishment">>
+	slave.rules.punishment
+	<</replace>>
+	<</link>>
+	|
+		<<link "Chastity">>
+	slave.rules.punishment = "chastity";
+	<<replace "#standardPunishment">>
+	slave.rules.punishment
+	<</replace>>
+	<</link>>
+	|
+		<<link "Situational">>
+	slave.rules.punishment = "situational";
+	<<replace "#standardPunishment">>
+	slave.rules.punishment
+	<</replace>>
+	<</link>>
+		&nbsp;&nbsp;&nbsp;&nbsp;
+		r += `Typical reward: ''<span id="standardReward">slave.rules.reward</span>.'' `;
+		<<link "Relaxation">>
+	slave.rules.reward = "relaxation";
+	<<replace "#standardReward">>
+	slave.rules.reward
+	<</replace>>
+	<</link>>
+	|
+		<<link "Drugs">>
+	slave.rules.reward = "drugs";
+	<<replace "#standardReward">>
+	slave.rules.reward
+	<</replace>>
+	<</link>>
+	|
+		<<link "Orgasm">>
+	slave.rules.reward = "orgasm";
+	<<replace "#standardReward">>
+	slave.rules.reward
+	<</replace>>
+	<</link>>
+	|
+		<<link "Situational">>
+	slave.rules.reward = "situational";
+	<<replace "#standardReward">>
+	slave.rules.reward
+	<</replace>>
+	<</link>>
+
+		if (setup.facilityHeads.includes(slave.assignment)) {
+			if (slave.lactation !== 2) {
+				<br>Lactation maintenance for facility heads: ''<span id="lactationRules">slave.rules.lactation</span>.''
+				<<link "Left alone">>
+	slave.rules.lactation = "none";
+	<<replace "#lactationRules">>
+	slave.rules.lactation
+	<</replace>>
+	<</link>>
+	|
+				if (slave.lactation === 0) {
+					<<link "Induce lactation">>
+	slave.rules.lactation = "induce";
+	<<replace "#lactationRules">>
+	slave.rules.lactation
+	<</replace>>
+	<</link>>
+				} else {
+					<<link "Maintain lactation">>
+	slave.rules.lactation = "maintain";
+	<<replace "#lactationRules">>
+	slave.rules.lactation
+	<</replace>>
+	<</link>>
+				}
+			}
+		}
+
+		<br><br>Non-assignment orgasm rules:
+		<div style="text-indent:2em">
+		r += `Masturbation is ''<span id="relMasturbation"> `;
+			if (slave.rules.release.masturbation === 1) {
+				allowed
+			} else {
+				forbidden
+			}
+		</span>
+		.''
+			<<link "Allow">>
+	slave.rules.release.masturbation = 1;
+	<<replace "#relMasturbation">>
+	allowed
+	<</replace>>
+	<</link>>
+	|
+			<<link "Forbid">>
+	slave.rules.release.masturbation = 0;
+	<<replace "#relMasturbation">>
+	forbidden
+	<</replace>>
+	<</link>>
+		</div>
+		<div style="text-indent:2em">
+		r += `Sex with romantic partner is ''<span id="relPartner"> `;
+			if (slave.rules.release.partner === 1) {
+				allowed
+			} else {
+				forbidden
+			}
+			</span>
+			.''
+			<<link "Allow">>
+	slave.rules.release.partner = 1;
+	<<replace "#relPartner">>
+	allowed
+	<</replace>>
+	<</link>>
+	|
+			<<link "Forbid">>
+	slave.rules.release.partner = 0;
+	<<replace "#relPartner">>
+	forbidden
+	<</replace>>
+	<</link>>
+		</div>
+		if (V.seeIncest === 1) {
+			<div style="text-indent:2em">
+			r += `Sex with close family is ''<span id="relFamily"> `;
+				if (slave.rules.release.family === 1) {
+					allowed
+				} else {
+					forbidden
+				}
+				</span>
+				.''
+				<<link "Allow">>
+	slave.rules.release.family = 1;
+	<<replace "#relFamily">>
+	allowed
+	<</replace>>
+	<</link>>
+	|
+				<<link "Forbid">>
+	slave.rules.release.family = 0;
+	<<replace "#relFamily">>
+	forbidden
+	<</replace>>
+	<</link>>
+			</div>
+		}
+		<div style="text-indent:2em">
+		r += `Sex with other slaves is ''<span id="relSlaves"> `;
+			if (slave.rules.release.slaves === 1) {
+				allowed
+			} else {
+				forbidden
+			}
+			</span>
+			.''
+			<<link "Allow">>
+	slave.rules.release.slaves = 1;
+	<<replace "#relSlaves">>
+	allowed
+	<</replace>>
+	<</link>>
+	|
+			<<link "Forbid">>
+	slave.rules.release.slaves = 0;
+	<<replace "#relSlaves">>
+	forbidden
+	<</replace>>
+	<</link>>
+		</div>
+		<div style="text-indent:2em">
+		r += `Routine sex with ${properMaster()} is ''<span id="relMaster"> `;
+			if (slave.rules.release.master === 1) {
+				granted
+			} else {
+				denied
+			}
+			</span>
+			.''
+			<<link "Grant">>
+	slave.rules.release.master = 1;
+	<<replace "#relMaster">>
+	granted
+	<</replace>>
+	<</link>>
+	|
+			<<link "Deny">>
+	slave.rules.release.master = 0;
+	<<replace "#relMaster">>
+	denied
+	<</replace>>
+	<</link>>
+		</div>
+	}
+
+	if (slave.clitPiercing === 3 || slave.vaginalAccessory === "smart bullet vibrator") {
+		<div>
+		if (slave.clitPiercing === 3) {
+			if (slave.dick < 1) {
+				V.His smart clit piercing
+				if (slave.vaginalAccessory === "smart bullet vibrator") {
+					and smart bullet vibrator are
+					} else {
+						is
+						}
+						set to
+			} else {
+				r += `V.His smart frenulum piercing  `;
+				if (slave.vaginalAccessory === "smart bullet vibrator") {
+				and smart bullet vibrator are
+				} else {
+					is
+					}
+					set to
+			}
+		} else {
+			r += `V.His smart bullet vibe is set to `;
+		}
+		<strong><span id="setting">slave.clitSetting</span></strong>.
+		<<link "Vanilla">>
+	slave.clitSetting = "vanilla";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Oral">>
+	slave.clitSetting = "oral";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Anal">>
+	slave.clitSetting = "anal";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Boobs">>
+	slave.clitSetting = "boobs";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Sub">>
+	slave.clitSetting = "submissive";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Dom">>
+	slave.clitSetting = "dom";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Humiliation">>
+	slave.clitSetting = "humiliation";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		if (V.seePreg !== 0) {
+			| <<link "Preg">>
+	slave.clitSetting = "pregnancy";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		}
+		| <<link "Pain">>
+	slave.clitSetting = "masochist";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Sadism">>
+	slave.clitSetting = "sadist";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Men">>
+	slave.clitSetting = "men";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Anti-men">>
+	slave.clitSetting = "anti-men";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Women">>
+	slave.clitSetting = "women";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "Anti-women">>
+	slave.clitSetting = "anti-women";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "All sex">>
+	slave.clitSetting = "all";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		| <<link "No sex">>
+	slave.clitSetting = "none";
+	<<replace "#setting">>
+	slave.clitSetting
+	<</replace>>
+	<</link>>
+		</div>
+	}
+
+	if (slave.voice !== 0) {
+		<br>Speech rules: ''<span id="speechRules">slave.rules.speech</span>.''
+		<<link "Restrictive">>
+	slave.rules.speech = "restrictive";
+	<<replace "#speechRules">>
+	slave.rules.speech
+	<</replace>>
+	<</link>>
+	|
+		<<link "Permissive">>
+	slave.rules.speech = "permissive";
+	<<replace "#speechRules">>
+	slave.rules.speech
+	<</replace>>
+	<</link>>
+		if (slave.accent > 0 && slave.accent < 4) {| 
+	<<link "Accent elimination">>
+	slave.rules.speech = "accent elimination";
+	<<replace "#speechRules">>
+	slave.rules.speech
+	<</replace>>
+	<</link>>
+		} else if (slave.accent > 3) {| 
+	<<link "Language lessons">>
+	slave.rules.speech = "language lessons";
+	<<replace "#speechRules">>
+	slave.rules.speech
+	<</replace>>
+	<</link>>
+		}
+	}
+
+	<br>
+	Relationship rules: ''<span id="relationshipRules">slave.rules.relationship</span>.''
+	<<link "Restrictive">>
+	slave.rules.relationship = "restrictive";
+	<<replace "#relationshipRules">>
+	slave.rules.relationship
+	<</replace>>
+	<</link>>
+	|
+	<<link "Just friends">>
+	slave.rules.relationship = "just friends";
+	<<replace "#relationshipRules">>
+	slave.rules.relationship
+	<</replace>>
+	<</link>>
+	|
+	<<link "Permissive">>
+	slave.rules.relationship = "permissive";
+	<<replace "#relationshipRules">>
+	slave.rules.relationship
+	<</replace>>
+	<</link>>
+
+	if (V.studio === 1) {
+
+		<br><br>__Media__:<br>
+		if (slave.porn.prestige === 3) {
+			//V.He is so prestigious in the realm of slave.porn.fameType porn that V.his fame is self-sustaining.//
+		} else if (slave.porn.feed === 0) {
+			r += `The media hub is not releasing highlights of V.his sex life. [[Release|Slave Interact][slave.porn.feed = 1]] `;
+		} else {
+			r += `The media hub is releasing highlights of V.his sex life  `;
+	if (slave.porn.spending < 500) {
+	to those who can find it
+	} else if (slave.porn.spending < 2500) {
+	on several websites
+	} else if (slave.porn.spending > 5000) {
+	through your old distributor
+	} else {
+	on many websites
+	}.
+			if (slave.porn.spending === 0) {
+				[[Halt|Slave Interact][slave.porn.feed = 0, slave.porn.focus = "none"]] |
+				[[Publicize|Slave Interact][slave.porn.spending += 1000]]
+				//Will cost ${cashFormat(1000)} weekly.//
+			} else {
+				<<textbox "_newPornSpending" slave.porn.spending>>
+	weekly is spent to publicize them. [[Save changes|Slave Interact][slave.porn.spending = Number(_newPornSpending) || 0]] |
+				[[Halt|Slave Interact][slave.porn.feed = 0, slave.porn.spending = 0, slave.porn.focus = "none", V.PCSlutContacts = 1]] |
+				if (slave.porn.spending < 5000) {
+					[[Increase|Slave Interact][slave.porn.spending += 1000]] |
+				}
+				[[Decrease|Slave Interact][slave.porn.spending -= 1000]]
+				if (slave.porn.spending > 5000) {
+	let _warn = 1;
+	}
+				slave.porn.spending = Number(slave.porn.spending) || 0;
+				slave.porn.spending = Math.clamp(Math.ceil(slave.porn.spending/1000)*1000, 0, 5000);
+				if (_warn) {<br>//Spending more than ${cashFormat(5000)>>
+	weekly will have no effect.//
+	<</if}
+				if (V.PC.career === "escort") {
+					<br>
+					r += `You retain some contacts from your past life in the industry that may be willing to cut you some discounts should you return to it. `;
+					if (V.PCSlutContacts !== 2) {
+						r += `You are not baring your body for all to see. `;
+						[[Star in porn for a discount|Slave Interact][V.PCSlutContacts = 2]]
+					} else {
+						r += `You are starring in hardcore porn once more. `;
+						[[Stop doing porn for a discount|Slave Interact][V.PCSlutContacts = 1]]
+					}
+				}
+			}
+
+			if (V.studioFeed === 1) {
+				<br>
+				if (slave.porn.viewerCount < 100) {
+					r += `V.He lacks the fame in porn needed to discern what V.his feed is getting tagged as. `;
+				} else {
+					if (slave.porn.prestige > 0) {
+						r += `V.He is known for slave.porn.fameType porn `;
+	if (slave.porn.prestige > 1) {
+	and viewers have grown to expect it from V.him
+	}.
+					}
+					if (slave.porn.focus === "none") {
+						r += `You are allowing V.his viewers to guide the direction of V.his content. `;
+					} else {
+						r += `You are focusing attention on the slave.porn.focus aspect of V.his content. `;
+					}
+					${App.Porn.genreChoiceLinks("Slave Interact", slave)} | [[No focus|Slave Interact][slave.porn.focus = "none"]]
+				}
+			}
+		}
+	}
+		}
+
+
+
+}}}}}
+App.UI.SlaveInteract.generateRows = function(array, category, slave, accessCheck = false) { // category should be in the form of slave.category, the thing we want to update.
+	let row = document.createElement('span');
+	for (let i = 0; i < array.length; i++) {
+		let link;
+		const separator = document.createTextNode(` | `);
+		const keys = Object.keys(array[i]);
+
+		// Test to see if there was a problem with the key
+		for (let j = 0; j < keys.length; j++) {
+			if (["FS", "text", "updateSlave", "update", "note", "disabled"].includes(keys[j])) {
+				continue;
+			} else {
+				array[i].text += " ERROR, THIS SCENE WAS NOT ENTERED CORRECTLY";
+				console.log("Trash found while generateRows() was running: " + keys[j] + ": " + array[i][keys[j]]);
+				break;
+			}
+		}
+		// Some items will never be in App.data.misc, especially "none" if it falls in between harsh and nice data sets.  Trying to look it up would cause an error, which is what access check works around.
+		let unlocked = false;
+		if (accessCheck === true) {
+			if (category === "chastity") {
+				let text = array[i].text.toLowerCase(); // Yucky.  Category name does not match for chastity (since it sets multiple kinds of chastity at once).  Compare using a lowercased name instead.
+				unlocked = isClothingAccessible.entry(text, `${category}`, slave, true);
+			} else {
+				unlocked = isClothingAccessible.entry(array[i].updateSlave[category], `${category}`, slave, true);
+			}
+		}
+		if (accessCheck === false || unlocked) {
+			if (i < array.length && i !== 0) { // start with separator (after first loop); can't after since the last loop may not have any text.
+				row.appendChild(separator);
+			}
+			// is it just text?
+			if (array[i].disabled) {
+				link = App.UI.DOM.disabledLink(array[i].text, [array[i].disabled]);
+			} else if (typeof unlocked === 'string') {
+				link = App.UI.DOM.disabledLink(array[i].text, [unlocked]);
+			} else {
+				link = document.createElement('span');
+
+				// Set up the link
+				link.appendChild(
+					App.UI.DOM.link(
+						`${array[i].text} `,
+						() => { click(array[i]); },
+					)
+				);
+
+				if (array[i].FS) {
+					let FS = array[i].FS.substring(2); // Given "FSEdoRevivalist", cut off the first two letters to start a user friendly tooltip
+					FS = FS.replace(/([A-Z])/g, ` $1`); // Given "EdoRevivalist", find every capital letter and put a space in front of it
+					FS = App.UI.DOM.disabledLink(`FS`, [FS]); // Tooltip should read "Edo Revivalist"
+					FS.style.fontStyle = "italic";
+					link.appendChild(FS);
+				}
+
+				// add a note node if required
+				if (array[i].note) {
+					let note = document.createElement('span');
+					note.textContent = (` ${array[i].note}`);
+					note.className = "note";
+					link.appendChild(note);
+				}
+			}
+			row.appendChild(link);
+		}
+	}
+
+	return row;
+
+	function click(arrayOption) {
+		if (arrayOption.updateSlave) {
+			Object.assign(slave, arrayOption.updateSlave);
+		}
+		if (arrayOption.update) {
+			Object.assign(V, arrayOption.update);
+		}
+		App.UI.Wardrobe.refreshAll(slave);
+		return;
+	}
+};
+
 App.UI.SlaveInteract.refreshAll = function(slave) {
 	App.UI.SlaveInteract.bloating(slave);
 	App.UI.SlaveInteract.fertility(slave);
 	App.UI.SlaveInteract.useSlaveDisplay(slave);
 	App.UI.SlaveInteract.drugs(slave);
 };
+ 
\ No newline at end of file
diff --git a/src/js/wardrobeUse.js b/src/js/wardrobeUse.js
index 517e42d9a3fd20ed3f369ea0c766eaf23d6f0b37..07d35ee33879a79f638cb4d24cabd2bb189a1618 100644
--- a/src/js/wardrobeUse.js
+++ b/src/js/wardrobeUse.js
@@ -24,7 +24,7 @@ App.UI.Wardrobe.clothes = function(slave) {
 	if (slave.clothes !== `choosing her own clothes`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `Let ${him} choose`, updateSlave: {clothes: `choosing her own clothes`, choosesOwnClothes: 1}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "clothes", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "clothes", slave, false));
 	}
 	el.appendChild(label);
 
@@ -66,14 +66,14 @@ App.UI.Wardrobe.clothes = function(slave) {
 	let links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Nice: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "clothes", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(niceOptionsArray, "clothes", slave, true));
 	el.appendChild(links);
 
 	// Harsh options
 	links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Harsh: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "clothes", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(harshOptionsArray, "clothes", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#clothes').empty().append(el);
@@ -98,7 +98,7 @@ App.UI.Wardrobe.collar = function(slave) {
 	if (slave.collar !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {collar: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "collar", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "collar", slave, false));
 	}
 
 	el.appendChild(label);
@@ -138,14 +138,14 @@ App.UI.Wardrobe.collar = function(slave) {
 	let links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Nice: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "collar", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(niceOptionsArray, "collar", slave, true));
 	el.appendChild(links);
 
 	// Harsh options
 	links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Harsh: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "collar", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(harshOptionsArray, "collar", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#collar').empty().append(el);
@@ -171,7 +171,7 @@ App.UI.Wardrobe.armAccessory = function(slave) {
 	// Choose her own
 	if (slave.armAccessory !== "none") {
 		array.push({text: `None`, updateSlave: {armAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(array, "armAccessory", slave, false));
 	}
 
 	el.appendChild(label);
@@ -182,7 +182,7 @@ App.UI.Wardrobe.armAccessory = function(slave) {
 		{text: "Hand gloves", updateSlave: {armAccessory: "hand gloves"}},
 		{text: "Elbow gloves", updateSlave: {armAccessory: "elbow gloves"}}
 	];
-	links.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, false));
+	links.appendChild(App.UI.SlaveInteract.generateRows(array, "armAccessory", slave, false));
 	el.appendChild(links);
 
 	return jQuery('#armAccessory').empty().append(el);
@@ -214,7 +214,7 @@ App.UI.Wardrobe.shoes = function(slave) {
 	if (slave.shoes !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {shoes: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "shoes", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "shoes", slave, false));
 	}
 	*/
 	el.appendChild(label);
@@ -239,7 +239,7 @@ App.UI.Wardrobe.shoes = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "shoes", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "shoes", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#shoes').empty().append(el);
@@ -270,7 +270,7 @@ App.UI.Wardrobe.legAccessory = function(slave) {
 	// Choose her own
 	if (slave.legAccessory !== "none") {
 		array.push({text: `None`, updateSlave: {legAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(array, "legAccessory", slave, false));
 	}
 
 	el.appendChild(label);
@@ -281,7 +281,7 @@ App.UI.Wardrobe.legAccessory = function(slave) {
 		{text: "Short stockings", updateSlave: {legAccessory: "short stockings"}},
 		{text: "Long stockings", updateSlave: {legAccessory: "long stockings"}}
 	];
-	links.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, false));
+	links.appendChild(App.UI.SlaveInteract.generateRows(array, "legAccessory", slave, false));
 	el.appendChild(links);
 
 	return jQuery('#legAccessory').empty().append(el);
@@ -331,7 +331,7 @@ App.UI.Wardrobe.bellyAccessory = function(slave) {
 
 	// Choose her own
 	if (slave.bellyAccessory !== `none`) {
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "bellyAccessory", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "bellyAccessory", slave, false));
 	}
 
 	el.appendChild(label);
@@ -339,7 +339,7 @@ App.UI.Wardrobe.bellyAccessory = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "bellyAccessory", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "bellyAccessory", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#bellyAccessory').empty().append(el);
@@ -368,7 +368,7 @@ App.UI.Wardrobe.buttplug = function(slave) {
 	if (slave.buttplug !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {buttplug: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "buttplug", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "buttplug", slave, false));
 	}
 	el.appendChild(label);
 
@@ -396,7 +396,7 @@ App.UI.Wardrobe.buttplug = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "buttplug", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "buttplug", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#buttplug').empty().append(el);
@@ -427,7 +427,7 @@ App.UI.Wardrobe.buttplugAttachment = function(slave) {
 	if (slave.buttplugAttachment !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {buttplugAttachment: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "buttplugAttachment", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "buttplugAttachment", slave, false));
 	}
 	el.appendChild(label);
 
@@ -455,7 +455,7 @@ App.UI.Wardrobe.buttplugAttachment = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "buttplugAttachment", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "buttplugAttachment", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#buttplugAttachment').empty().append(el);
@@ -484,7 +484,7 @@ App.UI.Wardrobe.vaginalAccessory = function(slave) {
 	if (slave.vaginalAccessory !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {vaginalAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "vaginalAccessory", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "vaginalAccessory", slave, false));
 	}
 	el.appendChild(label);
 
@@ -512,7 +512,7 @@ App.UI.Wardrobe.vaginalAccessory = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "vaginalAccessory", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "vaginalAccessory", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#vaginalAccessory').empty().append(el);
@@ -543,7 +543,7 @@ App.UI.Wardrobe.vaginalAttachment = function(slave) {
 	if (slave.vaginalAttachment !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {vaginalAttachment: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "vaginalAttachment", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "vaginalAttachment", slave, false));
 	}
 	el.appendChild(label);
 
@@ -571,7 +571,7 @@ App.UI.Wardrobe.vaginalAttachment = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "vaginalAttachment", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "vaginalAttachment", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#vaginalAttachment').empty().append(el);
@@ -600,7 +600,7 @@ App.UI.Wardrobe.dickAccessory = function(slave) {
 	if (slave.dickAccessory !== `none`) {
 		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {dickAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "dickAccessory", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "dickAccessory", slave, false));
 	}
 	el.appendChild(label);
 
@@ -628,7 +628,7 @@ App.UI.Wardrobe.dickAccessory = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "dickAccessory", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "dickAccessory", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#dickAccessory').empty().append(el);
@@ -685,7 +685,7 @@ App.UI.Wardrobe.chastity = function(slave) {
 				chastityVagina: 0
 			}
 		});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "chastity", slave, false));
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, "chastity", slave, false));
 	}
 	el.appendChild(label);
 
@@ -713,93 +713,12 @@ App.UI.Wardrobe.chastity = function(slave) {
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "chastity", slave, true));
+	links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, "chastity", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#chastity').empty().append(el);
 };
 
-App.UI.Wardrobe.generateRows = function(array, category, slave, accessCheck = false) { // category should be in the form of slave.category, the thing we want to update.
-	let row = document.createElement('span');
-	for (let i = 0; i < array.length; i++) {
-		let link;
-		const separator = document.createTextNode(` | `);
-		const keys = Object.keys(array[i]);
-
-		// Test to see if there was a problem with the key
-		for (let j = 0; j < keys.length; j++) {
-			if (["FS", "text", "updateSlave", "update", "note", "disabled"].includes(keys[j])) {
-				continue;
-			} else {
-				array[i].text += " ERROR, THIS SCENE WAS NOT ENTERED CORRECTLY";
-				console.log("Trash found while generateRows() was running: " + keys[j] + ": " + array[i][keys[j]]);
-				break;
-			}
-		}
-		// Some items will never be in App.data.misc, especially "none" if it falls in between harsh and nice data sets.  Trying to look it up would cause an error, which is what access check works around.
-		let unlocked = false;
-		if (accessCheck === true) {
-			if (category === "chastity") {
-				let text = array[i].text.toLowerCase(); // Yucky.  Category name does not match for chastity (since it sets multiple kinds of chastity at once).  Compare using a lowercased name instead.
-				unlocked = isClothingAccessible.entry(text, `${category}`, slave, true);
-			} else {
-				unlocked = isClothingAccessible.entry(array[i].updateSlave[category], `${category}`, slave, true);
-			}
-		}
-		if (accessCheck === false || unlocked) {
-			if (i < array.length && i !== 0) { // start with separator (after first loop); can't after since the last loop may not have any text.
-				row.appendChild(separator);
-			}
-			// is it just text?
-			if (array[i].disabled) {
-				link = App.UI.DOM.disabledLink(array[i].text, [array[i].disabled]);
-			} else if (typeof unlocked === 'string') {
-				link = App.UI.DOM.disabledLink(array[i].text, [unlocked]);
-			} else {
-				link = document.createElement('span');
-
-				// Set up the link
-				link.appendChild(
-					App.UI.DOM.link(
-						`${array[i].text} `,
-						() => { click(array[i]); },
-					)
-				);
-
-				if (array[i].FS) {
-					let FS = array[i].FS.substring(2); // Given "FSEdoRevivalist", cut off the first two letters to start a user friendly tooltip
-					FS = FS.replace(/([A-Z])/g, ` $1`); // Given "EdoRevivalist", find every capital letter and put a space in front of it
-					FS = App.UI.DOM.disabledLink(`FS`, [FS]); // Tooltip should read "Edo Revivalist"
-					FS.style.fontStyle = "italic";
-					link.appendChild(FS);
-				}
-
-				// add a note node if required
-				if (array[i].note) {
-					let note = document.createElement('span');
-					note.textContent = (` ${array[i].note}`);
-					note.className = "note";
-					link.appendChild(note);
-				}
-			}
-			row.appendChild(link);
-		}
-	}
-
-	return row;
-
-	function click(arrayOption) {
-		if (arrayOption.updateSlave) {
-			Object.assign(slave, arrayOption.updateSlave);
-		}
-		if (arrayOption.update) {
-			Object.assign(V, arrayOption.update);
-		}
-		App.UI.Wardrobe.refreshAll(slave);
-		return;
-	}
-};
-
 App.UI.Wardrobe.refreshAll = function(slave) {
 	App.UI.Wardrobe.clothes(slave);
 	App.UI.Wardrobe.collar(slave);
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 7db74c82bf2712844bf465c1e967238e2c3f2fb5..84918c1f4c5b00e2b10a4bf418dccb3f02596dcc 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -236,10 +236,8 @@
 <span id="drugs"></span>
 <script>App.UI.SlaveInteract.drugs(V.activeSlave)</script>
 
-Health: <span id="curatives"><strong><<if $activeSlave.curatives > 1>>curatives<<elseif $activeSlave.curatives > 0>>preventatives<<else>>none<</if>></strong></span>.
-	<<link "None">><<set $activeSlave.curatives = 0>><<replace "#curatives">><strong>none</strong><</replace>><</link>>
-	| <<link "Preventatives">><<set $activeSlave.curatives = 1>><<replace "#curatives">><strong>preventatives</strong><</replace>><</link>>
-	| <<link "Curatives">><<set $activeSlave.curatives = 2>><<replace "#curatives">><strong>curatives</strong><</replace>><</link>>
+<span id="curatives"></span>
+<script>App.UI.SlaveInteract.curatives(V.activeSlave)</script>
 
 &nbsp;&nbsp;&nbsp;&nbsp;