diff --git a/src/004-base/facilityFramework.js b/src/004-base/facilityFramework.js
index acbb40f986d103847e37fcf2fe8f544a0f88fc1d..1a216fbced1a1f30c225e38a01e7922172eb7911 100644
--- a/src/004-base/facilityFramework.js
+++ b/src/004-base/facilityFramework.js
@@ -135,9 +135,10 @@ App.Facilities.Facility = class {
 	_makeExpand() {
 		const div = document.createElement("div");
 
-		const capacity = typeof V[this.facility.desc.baseName] === 'object' ?
-			V[this.facility.desc.baseName].capacity :
-			V[this.facility.desc.baseName];
+		// TODO: rework once all facilities are objects
+		const capacity = typeof V[this.facility.desc.baseName] === 'object'
+			? V[this.facility.desc.baseName].capacity
+			: V[this.facility.desc.baseName];
 		const maximum = this.expand.maximum || Number.MAX_SAFE_INTEGER;
 		const amount = this.expand.amount || 5;
 		const cost = this.expand.cost || capacity * 1000 * V.upgradeMultiplierArcology;
diff --git a/src/arcologyBuilding/penthouse.js b/src/arcologyBuilding/penthouse.js
index 2d93d59679e8ef056658a9bb0ba0e98348d0d3e9..eb4a2de95c5cd8af3cc45737bbfb93ec18c8add4 100644
--- a/src/arcologyBuilding/penthouse.js
+++ b/src/arcologyBuilding/penthouse.js
@@ -52,7 +52,6 @@ App.Arcology.Cell.Penthouse = class extends App.Arcology.Cell.BaseCell {
 		}
 
 		if (V.verticalizeArcologyLinks !== -1){
-			
 			addFacility(fcs.masterSuite);
 			addFacility(fcs.headGirlSuite, "Head Girl Suite");
 			addFacility(fcs.armory, "BG Select");
@@ -72,13 +71,13 @@ App.Arcology.Cell.Penthouse = class extends App.Arcology.Cell.BaseCell {
 				if (V.incubator.readySlaves > 0) {
 					wrapper.append(createFacilityDiv(link, App.UI.DOM.combineNodes(desc, App.UI.DOM.makeElement("span", "[!]", 								"noteworthy"))));
 				} else {
-				wrapper.append(createFacilityDiv(link, desc));
+					wrapper.append(createFacilityDiv(link, desc));
 				}
 			}
 			if (V.researchLab.level > 0) {
 				wrapper.append(createFacilityDiv(App.UI.DOM.passageLink("Prosthetic Lab", "Prosthetic Lab")));
 			}
-		}else {
+		} else {
 			addFacility(fcs.headGirlSuite, "Head Girl Suite");
 			addFacility(fcs.armory, "BG Select");
 		}
@@ -93,10 +92,10 @@ App.Arcology.Cell.Penthouse = class extends App.Arcology.Cell.BaseCell {
 			const wrapper = document.createElement("div");
 			if (V.verticalizeArcologyLinks !== 0) {
 				if (V.verticalizeArcologyLinks === -1) {
-					//use double column for HG suite and Armory.
+					// use double column for HG suite and Armory.
 					let gridClass = `grid${2}`;
 					wrapper.classList.add("gridWrapper", gridClass);
-				}else {
+				} else {
 					let gridClass = `grid${V.verticalizeArcologyLinks}`;
 					wrapper.classList.add("gridWrapper", gridClass);
 				}
@@ -114,7 +113,7 @@ App.Arcology.Cell.Penthouse = class extends App.Arcology.Cell.BaseCell {
 		function createFacilityDiv(link, content) {
 			const div = document.createElement("div");
 			div.append(link);
-			// in collapsed mode additional information needs to be in it's own div to stop linebreaks at weird places
+			// in collapsed mode additional information needs to be in its own div to stop linebreaks at weird places
 			if (V.verticalizeArcologyLinks === 0) {
 				div.classList.add("collapsed");
 				if (content) {
diff --git a/src/arcologyBuilding/shops.js b/src/arcologyBuilding/shops.js
index 71c2dc01b0a89b448cb8af69a869723170410dd0..866362e4adbc68fd93428b6de35fc26889c7712e 100644
--- a/src/arcologyBuilding/shops.js
+++ b/src/arcologyBuilding/shops.js
@@ -97,18 +97,18 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				fragment.append("dedicated to Gender Radicalism. The shops here offer a bewildering cornucopia of sex toys. Citizens can kit themselves and their slaves out for anything, regardless of bodily layout. A female citizen is looking over the latest strap-ons, while a male peer is considering versions designed to enable double penetration by one person. ",
 					App.UI.DOM.linkReplace("Try one",
 						`You decide to try one of the latest models. Naturally, the store is eager to have you seen considering their products. The harness is very comfortable, and it ${
-							V.PC.dick !== 0 ?
-								`equips you with a second phallus. The slave sales${girl} lacks a vagina, but encourages you to try the setup on ${him} anyway, promising that ${his} backpussy can accept double penetration. It can.` :
-								`provides you with an extremely large phallus, which cums from an internal reservoir. The slave sales${girl} encourages you to try the setup on ${him}, promising that ${his} holes can accommodate it. They can.`}`
+							V.PC.dick !== 0
+								? `equips you with a second phallus. The slave sales${girl} lacks a vagina, but encourages you to try the setup on ${him} anyway, promising that ${his} backpussy can accept double penetration. It can.`
+								: `provides you with an extremely large phallus, which cums from an internal reservoir. The slave sales${girl} encourages you to try the setup on ${him}, promising that ${his} holes can accommodate it. They can.`}`
 					));
 				break;
 			case "Gender Fundamentalist":
 				fragment.append(`dedicated to Gender Fundamentalism. The establishments here are mostly focused on ${A.FSRestart !== "unset" ? "keeping slaves attractively feminine. There are shops offering all kinds of treatments, drugs, clothes, and furniture to satisfy even the most discerning lady " : "citizen reproduction with slaves. There are shops offering all kinds of treatments, drugs, clothes, and furniture to facilitate the successful impregnation of one's chattel, along with a variety of beauty products to keep them soft and feminine"}. `,
 					App.UI.DOM.linkReplace("Get a massage",
 						`You decide to put in an appearance at a tenant business, and the massage parlors are of course very eager to offer you complimentary services. The masseuse is very well-trained, and not at all a sex toy with poor massage skills as a veneer for handjob services. ${He} releases the muscle soreness from your latest workout, and uses ${his} delicate touch to bring you to an enjoyable orgasm; ${he} ${
-							V.PC.dick !== 0 ?
-								`catches your cum in ${his} mouth and swallows it` :
-								"swallows your femcum"
+							V.PC.dick !== 0
+								? `catches your cum in ${his} mouth and swallows it`
+								: "swallows your femcum"
 						} with every appearance of appetite.`));
 				break;
 			case "Paternalist":
@@ -120,21 +120,21 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				fragment.append("dedicated to Degradationism. The stores for slaveowners sell all sorts of inventive restraints and punishments. There are also a few of a uniquely Degradationist establishment: torture parlors, where any citizen can send a slave for punishment by paying customers, within bounds defined by the owner. ",
 					App.UI.DOM.linkReplace("Try a round",
 						`You decide to put in an appearance at a tenant business and show off your skills, and the torture parlors are very eager to have you accept a complimentary round. You select a pretty ${girl} sent to a torture parlor for some unknown failing by ${his} owner, and use a switch to flog ${his} calves, inner thighs, and breasts until ${he} ${
-							V.seePee === 1 ?
-								`loses control of ${his} bladder` :
-								"passes out"
+							V.seePee === 1
+								? `loses control of ${his} bladder`
+								: "passes out"
 						}. ${
-							V.PC.skill.slaving >= 100 ?
-								"You're skilled at this. The trick is to stop just short of blows that will break the skin, applying all possible pain without any inconvenient blood." :
-								`There's a bit of blood, but ${his} owner will expect that.`}`));
+							V.PC.skill.slaving >= 100
+								? "You're skilled at this. The trick is to stop just short of blows that will break the skin, applying all possible pain without any inconvenient blood."
+								: `There's a bit of blood, but ${his} owner will expect that.`}`));
 				break;
 			case "Body Purist":
 				fragment.append("dedicated to Body Purism. There are high end clinics for citizens, with medical specialists skilled in the latest longevity treatments. Shops offer beauty treatments, anti-aging products, and personal massage services. The slave masseuses are naturally beautiful, and their bodies are obviously part of the services offered. ",
 					App.UI.DOM.linkReplace("Get a massage",
 						`You decide to put in an appearance at a tenant business, and the massage parlors are of course very eager to offer you complimentary services. The masseuse is very well-trained, and not at all a sex toy with poor massage skills as a veneer for handjob services. ${He} releases the muscle soreness from your latest workout, and uses ${his} delicate touch to bring you to an enjoyable orgasm; ${he} ${
-							V.PC.dick !== 0 ?
-								`catches your cum in ${his} mouth and swallows it` :
-								"swallows your femcum"
+							V.PC.dick !== 0
+								? `catches your cum in ${his} mouth and swallows it`
+								: "swallows your femcum"
 						} with every appearance of appetite.`));
 				break;
 			case "Transformation Fetishist":
@@ -147,22 +147,22 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 					V.seeDicks < 100 ? "vaginal and" : ""} anal skills while they're still virgins, with instruction only. `,
 				App.UI.DOM.linkReplace("Look in on the classes",
 					`You decide to put in an appearance and look into the training sessions. Of course, the trainers are very eager to share all the details with the arcology owner, and have you seen displaying an interest in their work. You're shown a classroom of obedient young slaves, right at sale age, paying rapt attention to a male trainer and a slave at the head of the classroom. He's reviewing how to relax during one's first time before 'deflowering' the teacher's assistant, whose ${
-						V.seeDicks > 25 ?
-							"asshole is allowed to rest and return to virgin tightness" :
-							"hymen is surgically restored"
+						V.seeDicks > 25
+							? "asshole is allowed to rest and return to virgin tightness"
+							: "hymen is surgically restored"
 					} between sessions.`));
 				break;
 			case "Maturity Preferentialist":
 				fragment.append("dedicated to Maturity Preferentialism. It's not immediately apparent, though the stores here offer fashions that are obviously designed to flatter mature women, and anti-aging products of all kinds are prominently displayed. What there are, though, are quite a number of pretty, scantily clad female citizens here, obviously retired from sexual slavery and looking to slake their still trained libidos with any handsome fellow citizen interested. ",
 					App.UI.DOM.linkReplace("Hook up with a MILF",
 						`Many of them recognize you, and it's immediately apparent that you have your choice of pretty much every retired slave present. You select the prettiest and make out with ${him} for a while, among many admirers, until you feel like bringing ${him} over to a nearby bench and doing ${him}. ${
-							V.PC.dick === 0 ?
-								`${He}'s as eager as a teenager to have a lesbian experience in public, and can't stop giggling as you fuck.` :
-								A.FSGenderFundamentalist !== "unset" ?
-									`Like many recently retired slaves in your arcology, ${he}'s gotten pregnant as a free ${woman}, and it's supercharged ${his} sex drive. No matter what you do to ${him}, ${he} just wants more.` :
-									A.FSGenderRadicalist !== "unset" ?
-										`${He}'s got a big dick, and clearly has close friends among the other recently retired ${girl}s, but is very willing to be your bottom, especially in public.` :
-										`${He} was horny to begin with, but the foreplay and the naughtiness of doing it out in public has ${him} as eager as a teenager, and ${he} goes wild.`
+							V.PC.dick === 0
+								? `${He}'s as eager as a teenager to have a lesbian experience in public, and can't stop giggling as you fuck.`
+								: A.FSGenderFundamentalist !== "unset"
+									? `Like many recently retired slaves in your arcology, ${he}'s gotten pregnant as a free ${woman}, and it's supercharged ${his} sex drive. No matter what you do to ${him}, ${he} just wants more.`
+									: A.FSGenderRadicalist !== "unset"
+										? `${He}'s got a big dick, and clearly has close friends among the other recently retired ${girl}s, but is very willing to be your bottom, especially in public.`
+										: `${He} was horny to begin with, but the foreplay and the naughtiness of doing it out in public has ${him} as eager as a teenager, and ${he} goes wild.`
 						}`));
 				break;
 			case "Slimness Enthusiast":
@@ -177,8 +177,8 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				break;
 			case "Pastoralist":
 				fragment.append(`dedicated to Pastoralism. Milking is mostly done elsewhere, so the establishments here are a curious mix of farm supply stores and eateries. You can sample all kinds of ice cream, shakes, smoothies, cheeses, butter, and other dairy products here, all made from creamy human milk drawn from a busty slave${girl}'s breasts. ${
-					V.seeDicks > 0 ?
-						`There are also all kinds of slave beauty products and foods made from 'the other slave${girl} milk,' cum.` : ""} `,
+					V.seeDicks > 0
+						? `There are also all kinds of slave beauty products and foods made from 'the other slave${girl} milk,' cum.` : ""} `,
 				App.UI.DOM.linkReplace("Tour the kitchens",
 					"The eateries are very eager to have you seen inspecting their equipment and methods, and roll out the red carpet for you as they show you around. All kinds of old world culinary skill is on display here: artisan cheesemaking, butter hand-churned by muscular slaves, sweet custards and delicate flans that could compete in any dessert contest in the world. It's all so very refined and normal that it's quite easy to forget completely that the milk that is the basis of all this food comes from slaves."));
 				break;
@@ -191,11 +191,11 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				fragment.append("dedicated to Chattel Religionism. The stores offer all the items useful to a slaveowner who holds the new faith: proper slave restraints and penitent slave garments, of course, but also fine oils and incense, candles, tapers, and other devotional necessities. There are also correctional convents for the assistance of citizens with wayward slaves. ",
 					App.UI.DOM.linkReplace("Visit the convents",
 						`As a leader of the new faith, your visitation rights on these convents are unquestioned, and their owners are indeed eager to have you look around and offer your revered advice. The average citizen with only a slave or two often needs help keeping ${girl}s within the faith. The convents are severe houses of correction, and the sounds of prayer and penitence are omnipresent. In one nave, a slave prostrates ${himself} before a religious icon, praying in a loud, desperate tone while ${
-							V.seeDicks === 0 ?
-								"a woman in nun's attire holding a ribbed vibrating dildo" :
-								V.seeDicks < 100 ?
-									"futanari in nun's attire" :
-									"a man in monk's attire"
+							V.seeDicks === 0
+								? "a woman in nun's attire holding a ribbed vibrating dildo"
+								: V.seeDicks < 100
+									? "futanari in nun's attire"
+									: "a man in monk's attire"
 						} fucks ${him} mercilessly from behind.`));
 				break;
 			case "Roman Revivalist":
@@ -240,20 +240,20 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				fragment.append("dedicated to Chinese Revivalism. The longest continuous cultural history humanity has provides so much material that no two establishments here fill quite the same niche. There are calligraphy schools and Confucian academies to teach ignorant citizens how to fit in. There are shops selling traditional cures and the latest pharmacological wonders side by side. There are even martial arts schools. ",
 					App.UI.DOM.linkReplace("Exercise yourself",
 						`You look into one of these. The students are exercising, moving through a series of forms in unison. The teacher recognizes you, ${
-							V.PC.skill.warfare >= 100 ?
-								"and eagerly beckons you to join. Your martial skill is well known, and he's not disappointed. You're familiar with the forms, and join them seamlessly. Much later, when the exercise is done, the students are extremely pleased to discover exactly who their skillful temporary classmate was." :
-								"and gives you a doubtful, questioning glance, politely asking whether you can join with credit to yourself, all without words. You nod and pick up the forms, having a basic familiarity with them. They're difficult, but you're able to get through the enjoyable exercise with credit."
+							V.PC.skill.warfare >= 100
+								? "and eagerly beckons you to join. Your martial skill is well known, and he's not disappointed. You're familiar with the forms, and join them seamlessly. Much later, when the exercise is done, the students are extremely pleased to discover exactly who their skillful temporary classmate was."
+								: "and gives you a doubtful, questioning glance, politely asking whether you can join with credit to yourself, all without words. You nod and pick up the forms, having a basic familiarity with them. They're difficult, but you're able to get through the enjoyable exercise with credit."
 						}`));
 				break;
 			case "Repopulationist":
 				fragment.append(`dedicated to Repopulationism. The shops here offer a lovely mix of sex toys, fertility agents, maternity wear and furniture to fit even the biggest pregnancy. An attractive slave salesgirl with a huge belly is demonstrating the proper use of a swing designed to accommodate ${his} added heft to a female citizen just beginning to show and her curious husband. `,
 					App.UI.DOM.linkReplace("Give the swing a try",
 						`You wait for the couple to leave before approaching the hapless ${girl} and placing a hand on ${his} vulnerable middle. ${He} squeaks in surprise before ${he} realizes just who is browsing ${his} toys and the goods between ${his} legs. ${
-							V.PC.belly >= 5000 ?
-								`Spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}; or ${he} would be, if your own rounded middle wasn't pushing into ${his} own. ${He} asks for a little help getting down, and afterwards, shows you to a series of harnesses designed to hold a ${girl} with ${his} belly dangling beneath ${him}. The perfect toy for the very pregnant slaveowner hoping to plow ${hisP} equally gravid chattel.` :
-								V.PC.dick !== 0 ?
-									`Spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}.` :
-									`Picking out an attractive strap-on, donning it, and spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}.`
+							V.PC.belly >= 5000
+								? `Spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}; or ${he} would be, if your own rounded middle wasn't pushing into ${his} own. ${He} asks for a little help getting down, and afterwards, shows you to a series of harnesses designed to hold a ${girl} with ${his} belly dangling beneath ${him}. The perfect toy for the very pregnant slaveowner hoping to plow ${hisP} equally gravid chattel.`
+								: V.PC.dick !== 0
+									? `Spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}.`
+									: `Picking out an attractive strap-on, donning it, and spreading ${his} legs, you find that ${he} is suspended at the perfect height for you to comfortably penetrate ${him}.`
 						} Even better, the swing handles ${his} weight, so no sprained back!`));
 				break;
 			case "Eugenics":
@@ -283,9 +283,9 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				fragment.append("dedicated to Slave Professionalism. There are surprisingly wide selection of shops here, each designed to stimulate the minds of curious looky-loos. Well-trained slaves can often be spotted seeking out new ways to improve their Masters' reputations and lives. The pride of the strip is a slave run massage parlor featuring some of the most skilled hands the arcology has to offer. ",
 					App.UI.DOM.linkReplace("Get a massage",
 						`You decide to put in an appearance at the facility and the slaves in charge are of course very eager to offer you complimentary services. The masseuse is nothing short of a master of the art and knows how to balance relaxation and physical pleasure. ${He} releases the muscle soreness from your latest workout and throughout ${his} service uses ${his} delicate touch to keep you on the edge of orgasm until ${his} job is complete. The finale of ${his} work pushes you to an exquisite climax where ${he} ${
-							V.PC.dick !== 0 ?
-								`catches your cum in ${his} mouth and swallows it` :
-								"swallows your femcum"
+							V.PC.dick !== 0
+								? `catches your cum in ${his} mouth and swallows it`
+								: "swallows your femcum"
 						} with a grace only found among your slave population.`));
 				break;
 			case "Petite Admiration":
@@ -293,9 +293,9 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 				if (V.PC.height >= 170) {
 					fragment.append(App.UI.DOM.linkReplace("Take a harness out for a spin",
 						`The shop has a selection of harnesses available for testing and a number of minuscule slave${girl}s to try out. You fasten one on and carry on browsing the rest of the stores. ${
-							V.PC.dick > 0 ?
-								`The squirming ${girl} currently housing your cock makes it very difficult to focus on anything else, so you mostly just walk the hall, busting load after load into the overstimulated slave and effectively giving the store free advertisement.` :
-								`The squirming ${girl} currently wrapped around a strap-on makes it very difficult to focus on anything else, so you mostly just walk the hall, further over stimulating the panting slave and effectively giving the store free advertisement.`
+							V.PC.dick > 0
+								? `The squirming ${girl} currently housing your cock makes it very difficult to focus on anything else, so you mostly just walk the hall, busting load after load into the overstimulated slave and effectively giving the store free advertisement.`
+								: `The squirming ${girl} currently wrapped around a strap-on makes it very difficult to focus on anything else, so you mostly just walk the hall, further over stimulating the panting slave and effectively giving the store free advertisement.`
 						} By the time you return, you aren't the only one interested in purchasing a harness for home use.`));
 				} else {
 					fragment.append(App.UI.DOM.linkReplace("Pay it a visit", "As you browse their goods, it becomes more and more apparent that you yourself are too short to really make use of any of them."));
diff --git a/src/endWeek/saNanny.js b/src/endWeek/saNanny.js
index 6c1a49e9b6de216f05bbaacc3d9a95fe73d7724f..0f74cf6faa22b8e58739e21d499d94aa83e36575 100644
--- a/src/endWeek/saNanny.js
+++ b/src/endWeek/saNanny.js
@@ -8,11 +8,11 @@ App.SlaveAssignment.nanny = function(slave) {
 	const {he, him, his, He, His} = getPronouns(slave);
 	const child = `child${V.nurseryChildren > 0 ? `ren` : ``}`;
 
-	let t = `works as a nanny. ${He} ${V.nurseryChildren ?
-		`looks after the ${child} in ${V.nurseryName}, ensuring their needs are met and that they are being raised as ${V.nurseryChildren === 1 ?
-			`a good future slave` :
-			`good future slaves`}` :
-		`keeps ${V.nurseryName} neat and tidy for the children it will one day support`}. `;
+	let t = `works as a nanny. ${He} ${V.nurseryChildren
+		? `looks after the ${child} in ${V.nurseryName}, ensuring their needs are met and that they are being raised as ${V.nurseryChildren === 1
+			? `a good future slave`
+			: `good future slaves`}`
+		: `keeps ${V.nurseryName} neat and tidy for the children it will one day support`}. `;
 
 	t += nannyEffort(slave);
 	t += nannyRelationship(slave);
diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js
index 60d42d64f7fb7bcc774ed4eca6a25697450a49ad..4f02ad93f8f56c857da3d7afe1e383fe1437aae5 100644
--- a/src/endWeek/slaveAssignmentReport.js
+++ b/src/endWeek/slaveAssignmentReport.js
@@ -319,8 +319,8 @@ App.EndWeek.slaveAssignmentReport = function() {
 				if (stats.entriesNumber > 0) {
 					App.UI.DOM.appendNewElement("span", header,
 						`${stats.entriesNumber}${diffText} slave${stats.entriesNumber !== 1 ? "s" : ""} ${
-							stats.manager && stats.manager.currentEmployee ?
-								`and ${capFirstChar(stats.manager.desc.position)}` : ""
+							stats.manager && stats.manager.currentEmployee
+								? `and ${capFirstChar(stats.manager.desc.position)}` : ""
 						} in ${stats.name}`, ["info", "green"]);
 				} else if (stats.manager && stats.manager.currentEmployee) {
 					App.UI.DOM.appendNewElement("span", header,
diff --git a/src/interaction/sellSlave.js b/src/interaction/sellSlave.js
index 249075dea7c25f737c2660635c7feb8509990eea..267a1a8120bcd5e63b6fb717a6df4c0c5ef7c128 100644
--- a/src/interaction/sellSlave.js
+++ b/src/interaction/sellSlave.js
@@ -1017,9 +1017,9 @@ App.Interact.sellSlave = function(slave) {
 				resultNode.append(App.Interact.Sale.separationReactions(slave));
 				cashX(buyer.cost, "slaveTransfer");
 				App.Events.addParagraph(resultNode,
-					buyer.hasOwnProperty("completeSale") ?
-						buyer.completeSale :
-						[`The buyer forwards payment and sends a purchasing agent to collect ${him}. There is nothing more to be done.`]
+					buyer.hasOwnProperty("completeSale")
+						? buyer.completeSale
+						: [`The buyer forwards payment and sends a purchasing agent to collect ${him}. There is nothing more to be done.`]
 				);
 				jQuery(scene).empty().append(resultNode);
 				removeSlave(slave);
@@ -2714,13 +2714,13 @@ App.Interact.sellSlave = function(slave) {
 		]);
 		if (V.peacekeepers !== 0) {
 			buyers.set("peacekeepers", {
-				cost: V.peacekeepers.attitude < 100 ?
-					500 * Math.trunc((cost * 0.5) / 500) :
-					500 * Math.trunc((cost * 1.2) / 500),
+				cost: V.peacekeepers.attitude < 100
+					? 500 * Math.trunc((cost * 0.5) / 500)
+					: 500 * Math.trunc((cost * 1.2) / 500),
 				offerDesc:
-					(V.peacekeepers.attitude < 100) ?
-						`from the officer in charge of 'recreational activities' for General ${V.peacekeepers.generalName}'s forces. This is far less than the slave is worth, but the bid comes with the implicit offer of more influence over the peacekeepers.` :
-						`from the sex slave buyer for General ${V.peacekeepers.generalName}'s client state, which prefers ${V.peacekeepers.tastes}.`,
+					(V.peacekeepers.attitude < 100)
+						? `from the officer in charge of 'recreational activities' for General ${V.peacekeepers.generalName}'s forces. This is far less than the slave is worth, but the bid comes with the implicit offer of more influence over the peacekeepers.`
+						: `from the sex slave buyer for General ${V.peacekeepers.generalName}'s client state, which prefers ${V.peacekeepers.tastes}.`,
 				get requirements() { return (V.plot && V.peacekeepers && V.peacekeepers.strength >= 50); },
 				percentOdds: 100,
 				get completeSale() {
diff --git a/src/interaction/useSlave/useSlave.js b/src/interaction/useSlave/useSlave.js
index bca63469cabbbcd2e0a4e7110ce0c0002e2c0a60..5f324fae5adf7e354d0958ab8682efcbabc6d094 100644
--- a/src/interaction/useSlave/useSlave.js
+++ b/src/interaction/useSlave/useSlave.js
@@ -76,10 +76,10 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 
 		/** @type {boolean} Whether the character is completely naked. */
 		get isNaked() {
-			return this.clothing.top.isOff
-				&& this.clothing.bottom.isOff
-				&& !this.clothing.bra
-				&& !this.clothing.underwear;
+			return this.clothing.top.isOff &&
+				this.clothing.bottom.isOff &&
+				!this.clothing.bra &&
+				!this.clothing.underwear;
 		}
 
 		/** @type {boolean} Whether the character's chest is accessible. */
@@ -198,9 +198,9 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Have ${him} go down on you`,
 			desc: face.slaveGivesOral(tempSlave),
 			tooltip: `Have ${him} give you oral.`,
-			prereq: () => (tempSlave.mouthAccessory === none || tempSlave.mouthAccessory === "ring gag")
-				&& !playerState.isKneeling
-				&& !slaveState.isKneeling,
+			prereq: () => (tempSlave.mouthAccessory === none || tempSlave.mouthAccessory === "ring gag") &&
+				!playerState.isKneeling &&
+				!slaveState.isKneeling,
 			effect: () => {
 				playerState.lust++;
 				slaveState.lust++;
@@ -280,11 +280,11 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Fuck ${his} pussy`,
 			desc: crotch.fuckPussy(tempSlave),
 			tooltip: `Push your ${PC.dick ? `dick` : `strapon`} into ${his} pussy.`,
-			prereq: () => tempSlave.vagina > -1
-				&& slaveState.bottomFree
-				&& !slaveState.clothing.underwear
-				&& !tempSlave.chastityVagina
-				&& playerState.lust > 5,
+			prereq: () => tempSlave.vagina > -1 &&
+				slaveState.bottomFree &&
+				!slaveState.clothing.underwear &&
+				!tempSlave.chastityVagina &&
+				playerState.lust > 5,
 			effect: () => {
 				playerState.lust += 8;
 				slaveState.lust += 8;
@@ -294,10 +294,10 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Fuck ${his} asshole`,
 			desc: crotch.fuckAnus(tempSlave),
 			tooltip: `Push your ${PC.dick ? `dick` : `strapon`} into ${his} asshole.`,
-			prereq: () => slaveState.bottomFree
-				&& !slaveState.clothing.underwear
-				&& !tempSlave.chastityAnus
-				&& playerState.lust > 5,
+			prereq: () => slaveState.bottomFree &&
+				!slaveState.clothing.underwear &&
+				!tempSlave.chastityAnus &&
+				playerState.lust > 5,
 			effect: () => {
 				playerState.lust += 8;
 				slaveState.lust += tempSlave.fetish === Fetish.BUTTSLUT ? 8 : 5;
@@ -571,8 +571,8 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Take off ${his} vaginal chastity device`,
 			desc: clothing.removeChastityVaginal(tempSlave),
 			tooltip: `${He} won't be needing it.`,
-			prereq: () => (clothes === "no clothing" || clothes.includes("dress"))
-				&& tempSlave.chastityVagina === 1,
+			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
+				tempSlave.chastityVagina === 1,
 			effect: () => {
 				tempSlave.chastityVagina = 0;
 
@@ -583,8 +583,8 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Take off ${his} anal chastity device`,
 			desc: clothing.removeChastityAnal(tempSlave),
 			tooltip: `${He} won't be needing it.`,
-			prereq: () => (clothes === "no clothing" || clothes.includes("dress"))
-				&& tempSlave.chastityVagina === 1,
+			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
+				tempSlave.chastityVagina === 1,
 			effect: () => {
 				tempSlave.chastityVagina = 0;
 
@@ -595,8 +595,8 @@ App.UI.SlaveInteract.useSlave = function(slave) {
 			link: `Take the chastity device off of ${his} dick`,
 			desc: clothing.removeChastityPenis(tempSlave),
 			tooltip: `${He} won't be needing it.`,
-			prereq: () => (clothes === "no clothing" || clothes.includes("dress"))
-				&& tempSlave.chastityPenis === 1,
+			prereq: () => (clothes === "no clothing" || clothes.includes("dress")) &&
+				tempSlave.chastityPenis === 1,
 			effect: () => {
 				tempSlave.chastityPenis = 0;
 
diff --git a/src/js/pronouns.js b/src/js/pronouns.js
index 852300fc328a9db25a5491f17910d94a6725db6f..c7a609449281843925751ad333f2615b4d07c26b 100644
--- a/src/js/pronouns.js
+++ b/src/js/pronouns.js
@@ -4,9 +4,9 @@ App.Utils.Pronouns = class {
 	 */
 	constructor(obj) {
 		/** @type {FC.Data.Pronouns.Definition} */
-		this._pronouns = obj.pronoun < App.Data.Pronouns.Kind.custom ?
-			App.Data.Pronouns.Std[obj.pronoun] :
-			V.customPronouns[obj.pronoun];
+		this._pronouns = obj.pronoun < App.Data.Pronouns.Kind.custom
+			? App.Data.Pronouns.Std[obj.pronoun]
+			: V.customPronouns[obj.pronoun];
 	}
 
 	get pronoun() { return this._pronouns.pronoun; }
diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js
index 8a9093e0c24a4995034f2b651e67bde62bfb6cdd..ea79fadd5afb1cb743dd2494d96746da89000b68 100644
--- a/src/js/rulesAssistant.js
+++ b/src/js/rulesAssistant.js
@@ -145,9 +145,9 @@ globalThis.ruleAppliesP = function(rule, slave) {
 					.split(".")
 					.reduce(
 						(reduceSlave, attribute) =>
-							(reduceSlave && reduceSlave[attribute] !== undefined) ?
-								reduceSlave[attribute] :
-								undefined,
+							(reduceSlave && reduceSlave[attribute] !== undefined)
+								? reduceSlave[attribute]
+								: undefined,
 						slave
 					);
 			}
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 30c2d7b15d936e3346f008fb86add32c65734c0c..0b3d00bb4f2322d2d13835713138a5a16a8d5fa7 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -661,9 +661,9 @@ App.RA.options = (function() {
 		}
 		setValue(what) {
 			super.setValue(what);
-			this.value.setAttribute("placeholder", what == null ?
-				`(${capFirstChar(noDefaultSetting.text)})` :
-				'');
+			this.value.setAttribute("placeholder", what == null
+				? `(${capFirstChar(noDefaultSetting.text)})`
+				: '');
 		}
 
 		getTextData() {
@@ -890,8 +890,8 @@ App.RA.options = (function() {
 
 			const vMin = parse(this._minEditor.value);
 			const vMax = parse(this._maxEditor.value);
-			return (vMin === null && vMax === null) ? null :
-				App.RA.makeRange(vMin !== null ? vMin : this._min, vMax !== null ? vMax : this._max);
+			return (vMin === null && vMax === null) ? null
+				: App.RA.makeRange(vMin !== null ? vMin : this._min, vMax !== null ? vMax : this._max);
 		}
 
 		setTextValue(what) {
diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js
index ed8b2183a47c65a7f64070587f30aea04aef6160..768c31a3696e5b30e82e5b119d587af9456dbd75 100644
--- a/src/js/slaveListing.js
+++ b/src/js/slaveListing.js
@@ -556,8 +556,8 @@ App.UI.SlaveList.sortingLinks = function(passage) {
 
 	span = App.UI.DOM.makeElement("span", " Sort direction: ");
 	order = ["descending", "ascending"];
-	span.append(App.UI.DOM.generateLinksStrip(order.map(so => V.sortSlavesOrder !== so ?
-		App.UI.DOM.passageLink(textify(so), passage, () => { V.sortSlavesOrder = so; }) : textify(so))));
+	span.append(App.UI.DOM.generateLinksStrip(order.map(so => V.sortSlavesOrder !== so
+		? App.UI.DOM.passageLink(textify(so), passage, () => { V.sortSlavesOrder = so; }) : textify(so))));
 	div.append(span);
 
 	return div;
@@ -588,9 +588,9 @@ App.UI.SlaveList.listSJFacilitySlaves = function(facility, facilityPassage, show
 	const tabBar = new App.UI.Tabs.TabBar("SlaveListing");
 
 	if (facility.hasFreeSpace) {
-		const assignableSlaveIDs = job.desc.partTime ?
-			V.slaves.map(slave => slave.ID) : // all slaves can work here
-			[...App.Entity.facilities.penthouse.employeesIDs()]; // only slaves from the penthouse can be transferred here
+		const assignableSlaveIDs = job.desc.partTime
+			? V.slaves.map(slave => slave.ID) // all slaves can work here
+			: [...App.Entity.facilities.penthouse.employeesIDs()]; // only slaves from the penthouse can be transferred here
 		tabBar.addTab(tabCaptions.assign, "assign", assignableTabContent(assignableSlaveIDs));
 	} else {
 		tabBar.addTab(tabCaptions.assign, "assign", App.UI.DOM.makeElement("strong", `${capFirstChar(facility.name)} is full and cannot hold any more slaves`));
@@ -1144,17 +1144,17 @@ App.UI.SlaveList.slaveSelectionList = function() {
 
 		// clamsi fragment to create a function which combines results of two optional tests
 		// done this way to test for tests presence only once
-		const listPostNote = options.expCheck ?
-			(options.postNote ?
-				s => options.expCheck(s) ? App.UI.DOM.combineNodes(
+		const listPostNote = options.expCheck
+			? (options.postNote
+				? s => options.expCheck(s) ? App.UI.DOM.combineNodes(
 					App.UI.DOM.makeElement("span", "Has applicable career experience.", "lime"),
 					document.createElement("br"),
 					options.postNote(s)
-				) : options.postNote(s) :
-				s => options.expCheck(s) ? App.UI.DOM.makeElement("span", "Has applicable career experience.", "lime") : null) :
-			options.postNote ?
-				s => options.postNote(s) :
-				() => null;
+				) : options.postNote(s)
+				: s => options.expCheck(s) ? App.UI.DOM.makeElement("span", "Has applicable career experience.", "lime") : null)
+			: options.postNote
+				? s => options.postNote(s)
+				: () => null;
 
 		return App.UI.SlaveList.render(passingIDs, rejects, options.interactionLink, listPostNote);
 	}
diff --git a/src/js/utilsAssessSlave.js b/src/js/utilsAssessSlave.js
index 72e002db993076558b4fad6ad546b8d805e1f39b..908a147fa1604c5950bd7bb3ea9f079de2cb3c4c 100644
--- a/src/js/utilsAssessSlave.js
+++ b/src/js/utilsAssessSlave.js
@@ -213,7 +213,7 @@ globalThis.isShelterSlave = function(slave) {
 	return (typeof slave.origin === "string" && slave.origin.includes("Slave Shelter"));
 };
 
-// TODO: Expand or remove the following unused function. 
+// TODO: Expand or remove the following unused function.
 /**
  * Returns if a slave appears male, female, or androgynous.
  * @param {App.Entity.SlaveState} slave
diff --git a/src/js/utilsMisc.js b/src/js/utilsMisc.js
index c86994a239e3d63a503696624e6715a83991c150..a6a4c4309ca0e9c6565854ce10c524faa5d0c1d6 100644
--- a/src/js/utilsMisc.js
+++ b/src/js/utilsMisc.js
@@ -30,7 +30,7 @@
  */
 globalThis.Categorizer = class {
 	/**
-	 * @param  {...[]} pairs
+	 * @param  {...Array} pairs
 	 */
 	constructor(...pairs) {
 		this.cats = Array.prototype.slice.call(pairs)
@@ -175,9 +175,9 @@ globalThis.asSlave = function(human) {
  * @returns {string}
  */
 App.Utils.translate = function(englishWord) {
-	return App.Data.dictionary[englishWord] && App.Data.dictionary[englishWord].hasOwnProperty(V.language) ?
-		App.Data.dictionary[englishWord][V.language] :
-		englishWord;
+	return App.Data.dictionary[englishWord] && App.Data.dictionary[englishWord].hasOwnProperty(V.language)
+		? App.Data.dictionary[englishWord][V.language]
+		: englishWord;
 };
 
 /**
diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index 89a0435b8fdc285522d01a152181f4bc1d6e194d..2843bdb29b5944065d3a01a690b6cba59998a6ef 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -3359,8 +3359,8 @@ globalThis.slaveSkillIncrease = function(targetSkill, slave, skillIncrease = 1)
 	let r = "";
 	let skillDec;
 	const {He, he, his, him} = getPronouns(slave);
-	const isleadershipRole = ['headGirl', 'recruiter', 'bodyguard', 'madam', 'DJ', 'nurse', 'teacher', 'attendant', 'matron', 'stewardess', 'milkmaid', 'farmer', 'wardeness'].includes(targetSkill);
-	if (isleadershipRole) {
+	const isLeadershipRole = ['headGirl', 'recruiter', 'bodyguard', 'madam', 'DJ', 'nurse', 'teacher', 'attendant', 'matron', 'stewardess', 'milkmaid', 'farmer', 'wardeness'].includes(targetSkill);
+	if (isLeadershipRole) {
 		if (slave.skill[targetSkill] <= 20) {
 			if (slave.skill[targetSkill] + skillIncrease > 20) {
 				r = `<span class="green">${He} now has basic skills as a ${capFirstChar(targetSkill)}</span>`;
@@ -3739,7 +3739,6 @@ globalThis.applyMindbroken = function(slave, oldIntelligence = -200) {
  * @param {Object} original
  * @param {function(string): void} dispatch
  * @param {string} crumb
- 
  */
 App.Utils.showSlaveChanges = function(edited, original, dispatch, crumb = "") {
 	if (!crumb) { crumb = `${original.slaveName}: `; } else { crumb += `.`; }
diff --git a/src/player/managePersonalAffairs.js b/src/player/managePersonalAffairs.js
index 1b86620a4652a50978abb1486b1ee57a104266ef..8dd63c7cd3a4898863181b8fb9ac2176fab935de 100644
--- a/src/player/managePersonalAffairs.js
+++ b/src/player/managePersonalAffairs.js
@@ -101,10 +101,10 @@ App.UI.managePersonalAffairs = function() {
 			hairColorsDiv.append(`You have a selection of hair dyes available: `);
 
 			colors.forEach(color => links.push(
-				PC.hColor === color ?
-					App.UI.DOM.disabledLink(capFirstChar(color),
-						[`Your hair is already ${color}.`]) :
-					App.UI.DOM.link(capFirstChar(color), () => {
+				PC.hColor === color
+					? App.UI.DOM.disabledLink(capFirstChar(color),
+						[`Your hair is already ${color}.`])
+					: App.UI.DOM.link(capFirstChar(color), () => {
 						V.PC.hColor = color;
 
 						App.UI.DOM.replace(appearanceDiv, appearance);
diff --git a/src/player/personalAttentionSelect.js b/src/player/personalAttentionSelect.js
index e3199a8653de88e63c909d62ea3869026ccf3b99..96afc06f2c93106ec864b2540756a49d5cfa1287 100644
--- a/src/player/personalAttentionSelect.js
+++ b/src/player/personalAttentionSelect.js
@@ -238,11 +238,11 @@ App.UI.Player.personalAttention = function() {
 
 									refresh();
 								},
-								null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority" ?
-									`control over the arcology` :
-									V.SecExp.proclamation.currency === "reputation" ?
-										`great influence` :
-										`vast financial means`
+								null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority"
+									? `control over the arcology`
+									: V.SecExp.proclamation.currency === "reputation"
+										? `great influence`
+										: `vast financial means`
 								} to force the arrest of suspected citizens without passing through the normal legal procedures.`),
 							);
 						} else {
@@ -253,11 +253,11 @@ App.UI.Player.personalAttention = function() {
 
 									refresh();
 								},
-								null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority" ?
-									`control over the arcology` :
-									V.SecExp.proclamation.currency === "reputation" ?
-										`great influence` :
-										`vast financial means`
+								null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority"
+									? `control over the arcology`
+									: V.SecExp.proclamation.currency === "reputation"
+										? `great influence`
+										: `vast financial means`
 								} to force citizens to give up on sensitive information for the good of the arcology.`),
 
 								App.UI.DOM.disabledLink(`Issue a proclamation about crime`, [
@@ -273,11 +273,11 @@ App.UI.Player.personalAttention = function() {
 
 								refresh();
 							},
-							null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority" ?
-								`control over the arcology` :
-								V.SecExp.proclamation.currency === "reputation" ?
-									`great influence` :
-									`vast financial means`
+							null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority"
+								? `control over the arcology`
+								: V.SecExp.proclamation.currency === "reputation"
+									? `great influence`
+									: `vast financial means`
 							} to force citizens to give up on sensitive information for the good of the arcology.`),
 
 							App.UI.DOM.link(`Issue a proclamation about crime`, () => {
@@ -286,11 +286,11 @@ App.UI.Player.personalAttention = function() {
 
 								refresh();
 							},
-							null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority" ?
-								`control over the arcology` :
-								V.SecExp.proclamation.currency === "reputation" ?
-									`great influence` :
-									`vast financial means`
+							null, ``, `You will use your ${V.SecExp.proclamation.currency === "authority"
+								? `control over the arcology`
+								: V.SecExp.proclamation.currency === "reputation"
+									? `great influence`
+									: `vast financial means`
 							} to force the arrest of suspected citizens without passing through the normal legal procedures.`),
 						);
 					}
diff --git a/src/pregmod/editGenetics.js b/src/pregmod/editGenetics.js
index 130a42a0175912df633300eac8af7327b38d9cb2..f7c5edb02856e13dbd147506adbef6252809ee97 100644
--- a/src/pregmod/editGenetics.js
+++ b/src/pregmod/editGenetics.js
@@ -320,9 +320,9 @@ App.UI.editGenetics = function() {
 
 			makeHeader(`Ovaries`);
 			cell = App.UI.DOM.appendNewElement("td", row,
-				s.ovaries ?
-					App.Events.makeNode(['working', App.UI.DOM.makeElement("span", "\u2714", "green")]) :
-					App.Events.makeNode(['broken', App.UI.DOM.makeElement("span", "\u2718", "red")])
+				s.ovaries
+					? App.Events.makeNode(['working', App.UI.DOM.makeElement("span", "\u2714", "green")])
+					: App.Events.makeNode(['broken', App.UI.DOM.makeElement("span", "\u2718", "red")])
 			);
 			cell.setAttribute("data-param", "ovaries");
 			cell.setAttribute("data-min", "0");
@@ -348,13 +348,13 @@ App.UI.editGenetics = function() {
 
 			makeHeader(`Prostate`);
 			cell = App.UI.DOM.appendNewElement("td", row,
-				s.prostate ?
-					App.Events.makeNode(['working', App.UI.DOM.makeElement("span", "\u2714", "green")]) :
-					App.Events.makeNode(['broken', App.UI.DOM.makeElement("span", "\u2718", "red")]),
+				s.prostate
+					? App.Events.makeNode(['working', App.UI.DOM.makeElement("span", "\u2714", "green")])
+					: App.Events.makeNode(['broken', App.UI.DOM.makeElement("span", "\u2718", "red")]),
 			);
 			cell.setAttribute("data-param", "prostate");
 
-			makeHeader(`Spermium type`);
+			makeHeader(`Sperm type`);
 			makeCell(s.ballType);
 		}
 
@@ -556,9 +556,9 @@ App.UI.editGenetics = function() {
 			let parent = V.genePool.find(function(s) {
 				return s.ID === id;
 			});
-			return parent ?
-				birthFullName(parent) :
-				App.Events.makeNode([
+			return parent
+				? birthFullName(parent)
+				: App.Events.makeNode([
 					App.UI.DOM.makeElement("span", "missing", "note"),
 					`(${id})`
 				]);