diff --git a/cspell.json b/cspell.json
index c52b9b7968d53bc6e08698cfeea0954cb7ab4ac4..20de34b6f21c0b50709f9a9f2113eb815235fe89 100644
--- a/cspell.json
+++ b/cspell.json
@@ -12,6 +12,7 @@
         "bin",
         "build",
         "devNotes/legacy files",
+        "devTools/tweeGo",
         "js/003-data/arcologyNames.js",
         "js/003-data/miscDataNames.js",
         "js/003-data/poses.js",
@@ -21,11 +22,17 @@
         "src/art/webgl.js",
         "src/art/webgl/engine.js",
         "src/js/displayVariables.js",
+        "src/npc/databases/dSlavesDatabase.js",
+        "src/npc/databases/ddSlavesDatabase.js",
+        "src/npc/databases/cheatmodeDatabase.js",
         "*.min.js",
         "*.json",
         "*.svg",
         "*.sh",
-        "*.bat"
+        "*.bat",
+        "# Below ignored until properly cleaned up #",
+        "src/npc/children",
+        "src/npc/infants"
     ],
     "language": "en",
     "import": [
@@ -46,7 +53,9 @@
         "filetypes",
         "npm",
         "countries",
-        "names"
+        "names",
+        "japanese_custom",
+        "languages"
     ],
     "dictionaryDefinitions": [
         {
@@ -56,6 +65,14 @@
         {
             "name": "names",
             "path": "./devTools/scripts/dictionary_names.txt"
+        },
+        {
+            "name": "japanese_custom",
+            "path": "./devTools/scripts/dictionary_japanese.txt"
+        },
+        {
+            "name": "languages",
+            "path": "./devTools/scripts/dictionary_languages.txt"
         }
     ],
     "flagWords": [
@@ -82,6 +99,7 @@
         "eqnum",
         "eqstr",
         "franklygeorge",
+        "inscrip",
         "isamputee",
         "isfertile",
         "ismodded",
@@ -98,6 +116,7 @@
         "sonarjs",
         "stylelintrc",
         "ternarynum",
+        "ts-nocheck",
         "unittests",
         "vign",
         "xmax",
@@ -107,16 +126,19 @@
     ],
     "words": [
         "abaya",
-        "Ahhhh",
+        "acceptingly",
+        "ahhhh",
         "anaphrodisiacs",
         "arcologies",
         "arcology",
         "atrophiers",
         "autosurgery",
-        "Awwww",
+        "awwww",
         "ballsack",
+        "beribboned",
         "bimbofication",
         "biyelgee",
+        "breastgasm",
         "broodmother",
         "burkini",
         "buttcheeks",
@@ -127,15 +149,15 @@
         "camelcase",
         "cartoonishly",
         "catgirl",
+        "coeff",
         "creampied",
         "cummunist",
         "cumslut",
         "cunny",
         "cybersuit",
-        "décor",
         "degradationist",
-        "DILF",
-        "École",
+        "dilf",
+        "décor",
         "electrolarynx",
         "elven",
         "enculées",
@@ -144,7 +166,11 @@
         "fcnn",
         "fctv",
         "felidae",
+        "fert",
         "fetishize",
+        "fetishizes",
+        "fetishizing",
+        "fleur-de-lis",
         "fuckdoll",
         "fuckdolls",
         "fuckmachine",
@@ -160,6 +186,7 @@
         "gladiatrix",
         "gulpfile",
         "hanbok",
+        "handsy",
         "headgirl",
         "headgirlsuite",
         "heterochromia",
@@ -167,13 +194,17 @@
         "hippolyta",
         "hooved",
         "huipil",
+        "huipils",
         "hyperleptinemia",
         "hypoleptinemia",
+        "impregnatrix",
+        "indo-aryan",
         "jetpack",
         "jizya",
         "jizz",
         "kemonomimi",
         "kitsune",
+        "kitsunegirl",
         "loli",
         "lolis",
         "macromastia",
@@ -184,19 +215,21 @@
         "milkings",
         "mindbreak",
         "mindbroken",
-        "Mmhm",
-        "Mmmhmm",
+        "mmhm",
+        "mmmhmm",
         "moddable",
         "monokini",
         "mounty",
+        "mult",
         "naïvely",
         "nethers",
         "niqab",
+        "nonuplets",
         "nueva",
         "old-timey",
         "old-worlder",
         "omnisexual",
-        "Onahole",
+        "onahole",
         "orcish",
         "orgasmed",
         "outie",
@@ -210,13 +243,17 @@
         "polyhydramnios",
         "poofy",
         "preferentialist",
+        "preggo",
         "preggololi",
         "pregmod",
+        "prereqs",
         "progeria",
+        "pudge",
         "qipao",
+        "qipaos",
         "radicalist",
         "repopulationist",
-        "risu",
+        "retailored",
         "sekhmet",
         "shamefast",
         "shibari",
@@ -237,20 +274,24 @@
         "supremacism",
         "swole",
         "sybian",
-        "tanuki",
+        "tabi",
+        "trib",
         "tribbing",
         "triggerable",
         "tweego",
         "twincest",
+        "uglies",
         "unholstered",
-        "Universidad",
+        "universidad",
         "unmocked",
+        "unsatisfyingly",
         "upscaler",
         "wallscreen",
         "wardeness",
         "webgl",
         "webm",
         "webp",
-        "wesekh"
+        "wesekh",
+        "école"
     ]
-}
+}
\ No newline at end of file
diff --git a/devTools/scripts/dictionary_japanese.txt b/devTools/scripts/dictionary_japanese.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d74a8c9ad766438c5bf469ae351d528c11840965
--- /dev/null
+++ b/devTools/scripts/dictionary_japanese.txt
@@ -0,0 +1,8 @@
+neko
+inu
+kit
+ushi
+tanuki
+usagi
+risu
+uma
diff --git a/devTools/scripts/dictionary_languages.txt b/devTools/scripts/dictionary_languages.txt
new file mode 100644
index 0000000000000000000000000000000000000000..43b9a9edd48d221475c0f584197227713afb072b
--- /dev/null
+++ b/devTools/scripts/dictionary_languages.txt
@@ -0,0 +1,22 @@
+Abkhaz
+Bhojpuri
+Verdean
+Chewa
+Chichewa
+Dari
+Drehu
+Dzongkha
+Khmu
+Kikongo
+Kinyarwanda
+Kirundi
+Luxembourgish
+Makhuwa
+Māori
+Ndebele
+Nengone
+São Toméan
+Sesotho
+Tetum
+Toméan
+Tsonga
diff --git a/devTools/scripts/dictionary_names.txt b/devTools/scripts/dictionary_names.txt
index 2850d71706297b68c68285445bde01889bf852a3..53928e6f00cafac85ac9011420d892dff655aca8 100644
--- a/devTools/scripts/dictionary_names.txt
+++ b/devTools/scripts/dictionary_names.txt
@@ -1,4 +1,5 @@
 Gabe
+Kennerly
 Mikey
 Picarde
 Sotto
diff --git a/src/futureSocieties/futureSociety.js b/src/futureSocieties/futureSociety.js
index d8fdf2b955c7300e24a02caa86dafac6f00cf304..023c45e250440ed934787474eaa5a6d38cd1b660 100644
--- a/src/futureSocieties/futureSociety.js
+++ b/src/futureSocieties/futureSociety.js
@@ -140,9 +140,10 @@ globalThis.FutureSocieties = (function() {
 		return societies;
 	}
 
-	/** returns the set of shared FSes between two arcologies, and the set of conflicts between pairs of FSes between the arcologies
-	 * relatively expensive, try not to call frequently
-	 * call as FutureSocieties.diplomaticFSes(arc1, arc2)
+	/**
+	 * Returns the set of shared FSes between two arcologies, and the set of conflicts between pairs of FSes between the arcologies.
+	 * Relatively expensive, try not to call frequently.
+	 * Call as FutureSocieties.diplomaticFSes(arc1, arc2)
 	 * @param {FC.ArcologyState} arc1
 	 * @param {FC.ArcologyState} arc2
 	 * @returns {{shared: FC.FutureSociety[], conflicting: FC.FutureSociety[][]}}
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 254ad1369be245d27471d6225aca959c50071c7a..0196dc02bbff79734bc5049af61a305d6ee9dda8 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -29,7 +29,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			const style2 = ["coral", "strong"];
 			// Beauty
 			makeSpan(c, "B[" + Beauty(slave) + "].", style1);
-			// Fresult
+			// FResult
 			makeSpan(c, "FR[" + FResult(slave) + "].", style2);
 		},
 
@@ -427,7 +427,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			const style2 = ["coral", "strong"];
 			// Beauty
 			makeSpan(c, "Beauty[" + Beauty(slave) + "].", style1);
-			// Fresult
+			// FResult
 			makeSpan(c, "Sex Score[" + FResult(slave) + "].", style2);
 		},
 
diff --git a/src/neighbor/neighborDisplay.js b/src/neighbor/neighborDisplay.js
index 68b35bfb33b5611b0ca3184eda19d353cce5946c..62fd3db9c2823538671f333aac4297085e780d69 100644
--- a/src/neighbor/neighborDisplay.js
+++ b/src/neighbor/neighborDisplay.js
@@ -127,19 +127,19 @@ App.Neighbor.Display = class {
 		function fsFrag() {
 			let frag = document.createDocumentFragment();
 			frag.appendChild(document.createTextNode("FS: "));
-			const fses = FutureSocieties.activeFSes(arcology);
+			const FSes = FutureSocieties.activeFSes(arcology);
 			if (arcID === 0) {
-				for (const fs of fses) {
+				for (const fs of FSes) {
 					frag.appendChild(withTooltip("⯁", FutureSocieties.displayName(fs), "steelblue"));
 				}
 			} else {
-				const diplo = FutureSocieties.diplomaticFSes(arcology, V.arcologies[0]);
-				for (const fs of fses) {
+				const diplomatic = FutureSocieties.diplomaticFSes(arcology, V.arcologies[0]);
+				for (const fs of FSes) {
 					let style = "white";
-					if (diplo.shared.includes(fs)) {
+					if (diplomatic.shared.includes(fs)) {
 						style = "steelblue";
 					} else {
-						const conflict = diplo.conflicting.find((f) => f[0] === fs);
+						const conflict = diplomatic.conflicting.find((f) => f[0] === fs);
 						if (conflict) {
 							style = "red";
 						}
diff --git a/src/npc/bodyguard/bgDescription.js b/src/npc/bodyguard/bgDescription.js
index b9039febac7c407af215c502ff8a3c9e644e2ba6..10dbb348fcb660f198b6d2d98df9c2044c9cad62 100644
--- a/src/npc/bodyguard/bgDescription.js
+++ b/src/npc/bodyguard/bgDescription.js
@@ -1,3 +1,9 @@
+// cSpell:ignore Austeyr, Bofors, BREN, CETME, Cugir, Daewoo, DGIM, estoc, FACSA, FAMAE, FAMAS, Ferfrans, FMAP,
+// cSpell:ignore Glauberyt, Glock, GPMG, IMBEL, Indumil, Izhmash, jambiya, Khaybar, khopesh, kightly, kilij, KRISS
+// cSpell:ignore Lithgow, macuahuitl, MCIWS, MinebeaCZUB, MKEK, Modelo, Molot, MSBS, MSMC, MTAR, Nexter, Norinco
+// cSpell:ignore Pecheneg, Pernach, Pistolul, Produkt, Rachot, Rheinmetall, SAKO, Sarsilmaz, shamshir, shotel, Stechkin
+// cSpell:ignore Steyr, Vektor, wakizashi, WITU, Xiuhcoatl, yatagan, Zastava
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/npc/descriptions/belly/belly.js b/src/npc/descriptions/belly/belly.js
index 86516a7773cbbc0b26c59c4305c0a1d167c8d12c..290022255fb5444e22d3014ac45d149af8713a0f 100644
--- a/src/npc/descriptions/belly/belly.js
+++ b/src/npc/descriptions/belly/belly.js
@@ -8684,7 +8684,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) {
 					} else if (slave.weight > 160) {
 						r.push(`${slave.slaveName}'s maid dress fails to cover ${his} hugely fat belly, but the outfit includes a thin white blouse that, when stretched, barely manages to contain ${his} gut. ${He} can do little to stop it from riding up the fleshy mass as ${he} moves.`);
 					} else if (slave.weight > 130) {
-						r.push(`${slave.slaveName}'s maid dress fails to cover ${his} big fat belly, but the outfit includes a thin white blouse that, when stretched, manages to wrangle ${his} gut. It does little to stiffle the jiggle, however.`);
+						r.push(`${slave.slaveName}'s maid dress fails to cover ${his} big fat belly, but the outfit includes a thin white blouse that, when stretched, manages to wrangle ${his} gut. It does little to stifle the jiggle, however.`);
 					} else if (slave.belly >= 5000 || (slave.bellyAccessory === "a medium empathy belly")) {
 						if (slave.bellyAccessory === "a medium empathy belly") {
 							r.push(`${slave.slaveName}'s maid dress fails to cover ${his} pregnant belly, but the outfit includes a thin white blouse that tightly hugs ${his} stomach.`);
@@ -10234,7 +10234,7 @@ App.Desc.belly = function(slave, descType = DescType.NORMAL) {
 						if (slave.bellyAccessory === "a medium empathy belly") {
 							r.push(`${slave.slaveName}'s miniskirt rests at the base of ${his} pregnant belly.`);
 						} else if (isBellyFluidLargest) {
-							r.push(`${slave.slaveName}'s miniskirt digs into ${his} jiggling ${slave.inflationType}-filled belly as the top half spills over its egde.`);
+							r.push(`${slave.slaveName}'s miniskirt digs into ${his} jiggling ${slave.inflationType}-filled belly as the top half spills over its edge.`);
 						} else if (slave.bellyImplant > 0) {
 							r.push(`${slave.slaveName}'s miniskirt rests at the base of ${his} implant-filled belly.`);
 						} else {
diff --git a/src/npc/descriptions/boobs/boobs.js b/src/npc/descriptions/boobs/boobs.js
index 920ef97e47a4b3b42a85d27742df90617fe3bed0..092fb438f74fa596fcf2ded4e7d33fad2da23cb4 100644
--- a/src/npc/descriptions/boobs/boobs.js
+++ b/src/npc/descriptions/boobs/boobs.js
@@ -1,3 +1,5 @@
+// cSpell:ignore ACUP
+
 App.Desc.boobBits = function() {
 	'use strict';
 
diff --git a/src/npc/descriptions/describeTattoos.js b/src/npc/descriptions/describeTattoos.js
index 2205fd8a137259013e32cd48a083cf6dd702bc59..8a710d0f5fe5f631d5f13d0f84310160750939ae 100644
--- a/src/npc/descriptions/describeTattoos.js
+++ b/src/npc/descriptions/describeTattoos.js
@@ -1,3 +1,5 @@
+// cSpell:ignore komainu, shishi
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @param {string} surface
diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js
index 03c8d963c4c69f34a2f91fcfba38683d2e1d8359..1ec0360435e2dadd15b58c7c054111be23302ed8 100644
--- a/src/npc/descriptions/descriptionWidgets.js
+++ b/src/npc/descriptions/descriptionWidgets.js
@@ -1,3 +1,5 @@
+// cSpell:ignore neotenous, Immob
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string} Slave's nails
diff --git a/src/npc/descriptions/drugs.js b/src/npc/descriptions/drugs.js
index 9b13f023c495b63bfae933e1b26f8a5dce59f943..7cbece2a917314409836e04360c4546a89b05ddd 100644
--- a/src/npc/descriptions/drugs.js
+++ b/src/npc/descriptions/drugs.js
@@ -1,3 +1,5 @@
+// cSpell:ignore A-TRPH, RDST-D, priapismic
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/npc/descriptions/genericDescriptions.js b/src/npc/descriptions/genericDescriptions.js
index de927adcd82998c43e2174eb306f684bbf542b41..5677c0e77999201e680dde8b3207eee44723565f 100644
--- a/src/npc/descriptions/genericDescriptions.js
+++ b/src/npc/descriptions/genericDescriptions.js
@@ -1,3 +1,5 @@
+// cSpell:ignore siliconed
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/npc/descriptions/heightImplant.js b/src/npc/descriptions/heightImplant.js
index e23f74769a3f2fd7b1ff752e0799dce0b9c50cf7..9c02f67a2d711840444af2da0eb32ea31cbbfd04 100644
--- a/src/npc/descriptions/heightImplant.js
+++ b/src/npc/descriptions/heightImplant.js
@@ -7,27 +7,27 @@ App.Desc.heightImplant = function(slave) {
 	const {his} = getPronouns(slave);
 	if (slave.heightImplant > 1) {
 		r = limbs();
-		r.push(isare());
+		r.push(isAre());
 		r.push(`wrong; it's obvious that`);
-		r.push(ithastheyhave());
+		r.push(itHasTheyHave());
 		r.push(`been artificially lengthened.`);
 	} else if (slave.heightImplant > 0) {
 		r = limbs();
-		r.push(isare());
+		r.push(isAre());
 		r.push(`odd, as though`);
-		r.push(ithastheyhave());
+		r.push(itHasTheyHave());
 		r.push(`been artificially lengthened.`);
 	} else if (slave.heightImplant < -1) {
 		r = limbs();
-		r.push(isare());
+		r.push(isAre());
 		r.push(`wrong; it's obvious that`);
-		r.push(ithastheyhave());
+		r.push(itHasTheyHave());
 		r.push(`been artificially shortened.`);
 	} else if (slave.heightImplant < 0) {
 		r = limbs();
-		r.push(isare());
+		r.push(isAre());
 		r.push(`odd, as though`);
-		r.push(ithastheyhave());
+		r.push(itHasTheyHave());
 		r.push(`been artificially shortened.`);
 	}
 
@@ -56,11 +56,11 @@ App.Desc.heightImplant = function(slave) {
 		return r;
 	}
 
-	function isare() {
+	function isAre() {
 		return getLimbCount(slave) === 1 ? `is` : `are`;
 	}
 
-	function ithastheyhave() {
+	function itHasTheyHave() {
 		return getLimbCount(slave) === 1 ? `it has` : `they have`;
 	}
 };
diff --git a/src/npc/descriptions/longSlave.js b/src/npc/descriptions/longSlave.js
index 70b3009b07a25e82160426da5e2689d0ea3ef5a2..49e84eff943784b606269de8d5e57616b644be4a 100644
--- a/src/npc/descriptions/longSlave.js
+++ b/src/npc/descriptions/longSlave.js
@@ -319,7 +319,7 @@ App.Desc.longSlave = function(slave, {descType, market = 0, marketText, noArt, l
 		r.push(App.UI.DOM.makeElement("span", `of`, ["pink"]));
 		r.push(BeautyTooltip(slave), `and a`);
 
-		// Fresult
+		// FResult
 		r.push(App.UI.DOM.makeElement("span", `sexual score`, ["lightcoral", "bold"]));
 		r.push(App.UI.DOM.makeElement("span", `of`, ["lightcoral"]));
 		r.push(App.UI.DOM.combineNodes(FResultTooltip(slave), App.UI.DOM.makeElement("span", `.`, ["lightcoral"])));
diff --git a/src/npc/descriptions/sceneIntro.js b/src/npc/descriptions/sceneIntro.js
index 3783ed6beff816f70d402a82dde8477b87079ca2..d771a8b9287e87154bce51b9cbfb0217e0ce3bd8 100644
--- a/src/npc/descriptions/sceneIntro.js
+++ b/src/npc/descriptions/sceneIntro.js
@@ -1,3 +1,5 @@
+// cSpell:ignore cybering
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @param {DescType} descType
diff --git a/src/npc/descriptions/style/clothing.js b/src/npc/descriptions/style/clothing.js
index d2df48cdef5fa600fd84e4033400110907a78347..00e32d41b1a732851f397c3854d93f9bcea22579 100644
--- a/src/npc/descriptions/style/clothing.js
+++ b/src/npc/descriptions/style/clothing.js
@@ -1,3 +1,5 @@
+// cSpell:ignore furisode
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/npc/descriptions/style/footwear.js b/src/npc/descriptions/style/footwear.js
index 265c40cedd189eb689a43660060ddcc97dded616..d82eb4babd294341ccaf62c2db9025174873857f 100644
--- a/src/npc/descriptions/style/footwear.js
+++ b/src/npc/descriptions/style/footwear.js
@@ -1,3 +1,5 @@
+// cSpell:ignore jika-tabi, strappy
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js
index 48d90b10281341a7111296633dfacd7cb4841ae9..d9157109c05215688270d9a71b93c8a371ba612f 100644
--- a/src/npc/generate/generateGenetics.js
+++ b/src/npc/generate/generateGenetics.js
@@ -1,3 +1,4 @@
+// CSpell:ignore matronym, patronym, heritance, Yengo, Vedantam, Marouli,
 // Generates a child's genetics based off mother and father and returns it as an object to be attached to an ovum
 
 globalThis.generateGenetics = (function() {
diff --git a/src/npc/generate/lawCompliance.js b/src/npc/generate/lawCompliance.js
index 9a6d1f1538cceeffe00ae98a86f7bba4536a32ff..36bf0a591b25310a050baefa5c15370accf92752 100644
--- a/src/npc/generate/lawCompliance.js
+++ b/src/npc/generate/lawCompliance.js
@@ -1,3 +1,5 @@
+// cSpell:ignore unsalvageable
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @param {FC.Zeroable<FC.SlaveMarketName | FC.SpecialMarketName>} [market=0]
diff --git a/src/npc/interaction/FFuckdollOral.js b/src/npc/interaction/FFuckdollOral.js
index b1a207dbea44589c6a866ec01c9a59b544e543af..f572d6b8db17975979c05ebfc9eab17e028ad4bc 100644
--- a/src/npc/interaction/FFuckdollOral.js
+++ b/src/npc/interaction/FFuckdollOral.js
@@ -1,3 +1,5 @@
+// cSpell:ignore beribbon
+
 /**
  *
  * @param {App.Entity.SlaveState} slave
diff --git a/src/npc/interaction/fBeg.js b/src/npc/interaction/fBeg.js
index e374ac99644a67c37896b42228f39a605ac908fe..7ef7cffa3044fd3a9bfc946e479a44a600a8b2f9 100644
--- a/src/npc/interaction/fBeg.js
+++ b/src/npc/interaction/fBeg.js
@@ -1,3 +1,5 @@
+// cSpell:ignore misandristic
+
 /**
  *
  * @param {App.Entity.SlaveState} slave
diff --git a/src/npc/interaction/fButt.js b/src/npc/interaction/fButt.js
index cfd47ece188db81c605a632dc8d8ef961e044d57..2e8b2fd1fd48a18ad9315fd945f75328c802d58a 100644
--- a/src/npc/interaction/fButt.js
+++ b/src/npc/interaction/fButt.js
@@ -1,3 +1,5 @@
+// cSpell:ignore frotting
+
 /**
  *
  * @param {App.Entity.SlaveState} slave
diff --git a/src/npc/interaction/fDick.js b/src/npc/interaction/fDick.js
index ff2419de5305f29b69e73c2b566ff6069e1edd49..c02d9517cb108ceff2b7f7036528900ca2e29f49 100644
--- a/src/npc/interaction/fDick.js
+++ b/src/npc/interaction/fDick.js
@@ -39,27 +39,27 @@ App.Interact.fDick = function(slave) {
 		load = "an overly massive and unending gush of seed";
 	}
 
-	let nutte;
+	let ballSize;
 	if (slave.balls === 1) {
-		nutte = "vestigial";
+		ballSize = "vestigial";
 	} else if (slave.balls === 2) {
-		nutte = "small";
+		ballSize = "small";
 	} else if (slave.balls === 3) {
-		nutte = "average";
+		ballSize = "average";
 	} else if (slave.balls === 4) {
-		nutte = "large";
+		ballSize = "large";
 	} else if (slave.balls === 5) {
-		nutte = "massive";
+		ballSize = "massive";
 	} else if (slave.balls === 6) {
-		nutte = "huge";
+		ballSize = "huge";
 	} else if (slave.balls === 7) {
-		nutte = "giant";
+		ballSize = "giant";
 	} else if (slave.balls === 8) {
-		nutte = "enormous";
+		ballSize = "enormous";
 	} else if (slave.balls === 9) {
-		nutte = "monstrous";
+		ballSize = "monstrous";
 	} else {
-		nutte = "overly massive";
+		ballSize = "overly massive";
 	}
 
 	let dickAdj;
@@ -187,7 +187,7 @@ App.Interact.fDick = function(slave) {
 			}
 
 			if (slave.scrotum > 0) {
-				text.push(`and stroke ${his} ${nutte} balls,`);
+				text.push(`and stroke ${his} ${ballSize} balls,`);
 			} else if (slave.vagina > -1) {
 				text.push(`and tease ${his} neglected pussy,`);
 			} else {
@@ -385,7 +385,7 @@ App.Interact.fDick = function(slave) {
 			text.push(`You reach back`);
 
 			if (slave.scrotum > 0) {
-				text.push(`and stroke ${his} ${nutte} balls.`);
+				text.push(`and stroke ${his} ${ballSize} balls.`);
 			} else if (slave.vagina > -1) {
 				text.push(`and tease ${his} neglected pussy.`);
 			} else {
diff --git a/src/npc/interaction/fFeelings.js b/src/npc/interaction/fFeelings.js
index e0b6c8713fda852022f1bde9cb8b22617114311a..e38e14c8af90f77d408f7e20c875920c5518b795 100644
--- a/src/npc/interaction/fFeelings.js
+++ b/src/npc/interaction/fFeelings.js
@@ -1,3 +1,4 @@
+// cSpell:ignore fat-assed, kissy
 // TODO: expand this to have slaves with low devotion / trust speak more
 
 /**
diff --git a/src/npc/interaction/fPoolSex.js b/src/npc/interaction/fPoolSex.js
index 9f9fdb314dd3e2ac694d24ae0353d4931f31ab2e..90398732c5d802ae389cad292c1479aeb9e04859 100644
--- a/src/npc/interaction/fPoolSex.js
+++ b/src/npc/interaction/fPoolSex.js
@@ -1,3 +1,5 @@
+// cSpell:ignore quim
+
 /**
  *
  * @param {App.Entity.SlaveState} slave
diff --git a/src/npc/interaction/fSlaveSelfImpreg.js b/src/npc/interaction/fSlaveSelfImpreg.js
index 6a56ce1147569f22ab727df8bba1f79a1f48e569..34699e9b7e5b758fef9339998449d319ab7c8dad 100644
--- a/src/npc/interaction/fSlaveSelfImpreg.js
+++ b/src/npc/interaction/fSlaveSelfImpreg.js
@@ -405,11 +405,11 @@ App.Interact.fSlaveSelfImpreg = function(slave) {
 
 	if (FutureSocieties.isActive('FSRepopulationFocus') && (!FutureSocieties.isActive('FSGenderFundamentalist') || V.arcologies[0].FSRepopulationFocus >= V.arcologies[0].FSGenderFundamentalist)) {
 		// seems logical that repop would trump anything else if it's equal-or-more advanced than fundamentalism.
-		const delt = (FutureSocieties.isActive('FSGenderFundamentalist'))
+		const delta = (FutureSocieties.isActive('FSGenderFundamentalist'))
 			? V.arcologies[0].FSRepopulationFocus - V.arcologies[0].FSGenderFundamentalist
 			: V.arcologies[0].FSRepopulationFocus;
 
-		if (delt > 0) {
+		if (delta > 0) {
 			r.push(`Society is <span class="green">pleased</span> by the addition of a new slave, no matter the means by which it was produced.`);
 			repX(V.FSSingleSlaveRep*(V.arcologies[0].FSRepopulationFocus/V.FSLockinLevel), "futureSocieties", slave);
 		} else {
diff --git a/src/npc/interaction/fSuckDick.js b/src/npc/interaction/fSuckDick.js
index 395a20c5a11cb09580ff11b6c6bdb5b33c0eec29..43aa0978f88cb411ec6c87e6b0a0849e44209cea 100644
--- a/src/npc/interaction/fSuckDick.js
+++ b/src/npc/interaction/fSuckDick.js
@@ -16,36 +16,36 @@ App.Interact.fSuckDick = function(slave) {
 	const amount = cumAmount(slave);
 	let liquid = "precum";
 
-	let nutte;
+	let genitals;
 	if (slave.scrotum > 0) {
 		if (slave.balls === 1) {
-			nutte = "vestigial gonads";
+			genitals = "vestigial gonads";
 		} else if (slave.balls === 2) {
-			nutte = "small testes";
+			genitals = "small testes";
 		} else if (slave.balls === 3) {
-			nutte = "average balls";
+			genitals = "average balls";
 		} else if (slave.balls === 4) {
-			nutte = "large balls";
+			genitals = "large balls";
 		} else if (slave.balls === 5) {
-			nutte = "massive balls";
+			genitals = "massive balls";
 		} else if (slave.balls === 6) {
-			nutte = "huge balls";
+			genitals = "huge balls";
 		} else if (slave.balls === 7) {
-			nutte = "giant balls";
+			genitals = "giant balls";
 		} else if (slave.balls === 8) {
-			nutte = "enormous balls";
+			genitals = "enormous balls";
 		} else if (slave.balls === 9) {
-			nutte = "monstrous balls";
+			genitals = "monstrous balls";
 		} else if (slave.balls === 0) {
-			nutte = "soft scrotum";
+			genitals = "soft scrotum";
 		} else {
-			nutte = "overly massive balls";
+			genitals = "overly massive balls";
 		}
 	} else {
 		if (slave.vagina !== -1) {
-			nutte = "vaginal opening";
+			genitals = "vaginal opening";
 		} else {
-			nutte = "soft perineum";
+			genitals = "soft perineum";
 		}
 	}
 
@@ -233,7 +233,7 @@ App.Interact.fSuckDick = function(slave) {
 			if (slave.dick > 2 && slave.scrotum > 0) {
 				r.push(`while holding ${his} dick with your left hand, with the other`);
 			}
-			r.push(`you fondle ${his} ${nutte}.`);
+			r.push(`you fondle ${his} ${genitals}.`);
 		} else if (V.seePee === 1 && jsRandom(1, 100) > 50) { // Involuntary urination ending
 			r.push(`You continue sucking the slave's member for a long time, without getting any positive reaction. You notice how ${he} ${slave.fetish === Fetish.MINDBROKEN ? "remains impassible" : "strains, tensing up, desperately trying to cum for you"}. Suddenly, you notice a bitter and salty taste filling your mouth and going down your throat, and you move your head away just to receive a hot stream of urine on your face.`);
 
@@ -430,7 +430,7 @@ App.Interact.fSuckDick = function(slave) {
 				r.push(`You slam ${his} hand${hasBothArms(slave) ? "s" : ""} with yours, releasing ${his} grip on your head, and you manage to tear your mouth away from ${his} cock.`);
 				if (canWalk(V.PC)) {
 					if (slave.balls > 0 && slave.scrotum > 0) {
-						r.push(`You stand up and kick ${him} hard in ${his} ${nutte}.`);
+						r.push(`You stand up and kick ${him} hard in ${his} ${genitals}.`);
 					} else if (slave.vagina >= 0) {
 						r.push(`You pinch and twist ${his} labia furiously.`);
 					} else {
@@ -438,7 +438,7 @@ App.Interact.fSuckDick = function(slave) {
 					}
 				} else {
 					if (slave.balls > 0 && slave.scrotum > 0) {
-						r.push(`You move away a bit and give ${him} two strong punches in ${his} ${nutte}.`);
+						r.push(`You move away a bit and give ${him} two strong punches in ${his} ${genitals}.`);
 					} else if (slave.vagina >= 0) {
 						r.push(`You pinch and twist ${his} labia furiously.`);
 					} else {
diff --git a/src/npc/interaction/killSlave.js b/src/npc/interaction/killSlave.js
index 9f4f5b9743e7815c52ed8f0fdf8a49eac141dcc6..4275f5365065bb9305f4537eea1755184ec72426 100644
--- a/src/npc/interaction/killSlave.js
+++ b/src/npc/interaction/killSlave.js
@@ -1,3 +1,5 @@
+// cSpell:ignore gladius, estoc, Tecpatl, kopesh, katana, scimitar, jian, saber
+
 /** @param {App.Entity.SlaveState} slave */
 App.UI.SlaveInteract.killSlave = function(slave) {
 	const frag = new DocumentFragment();
diff --git a/src/npc/surgery/bodySwap/bodySwapReaction.js b/src/npc/surgery/bodySwap/bodySwapReaction.js
index d85ce7c0a77b312124ffcaaf423f22da57b7ea32..16fbfd08c9d4ab1defce6886422db49842837b3f 100644
--- a/src/npc/surgery/bodySwap/bodySwapReaction.js
+++ b/src/npc/surgery/bodySwap/bodySwapReaction.js
@@ -1856,7 +1856,7 @@ globalThis.bodySwapReaction = function(body, soul) {
 					} else if (body.devotion > 20) {
 						r.push(`${He} giggles a bit as ${he} tests out how many fingers ${he} can fit inside ${his} new loose hole, though ${he} wishes ${he} were still tight for you.`);
 					} else {
-						r.push(`${He} <span class="mediumorchid">frowns</span> as ${he} feels out how much looser ${he} is now. ${He} supposes it saves ${him} from getting fucked loose, but it is humiliating how many more fingers ${he} can fit inside ${himself} without even having to part ${his} lips.`); /* This is not how vaginas work goddamit. - is that better? */
+						r.push(`${He} <span class="mediumorchid">frowns</span> as ${he} feels out how much looser ${he} is now. ${He} supposes it saves ${him} from getting fucked loose, but it is humiliating how many more fingers ${he} can fit inside ${himself} without even having to part ${his} lips.`); // TODO: This is not how vaginas work goddammit. - is that better?
 						body.devotion -= 1;
 					}
 				} else if (body.vagina === soul.vagina) {
diff --git a/src/personalAssistant/assistantAppearance.js b/src/personalAssistant/assistantAppearance.js
index 4a3ad2c4bf6ec14476ae7fef3dcbd0cd668a478c..ce73823bbc183f536c0256dac00479dd3ebf5632 100644
--- a/src/personalAssistant/assistantAppearance.js
+++ b/src/personalAssistant/assistantAppearance.js
@@ -1,3 +1,5 @@
+// cSpell:ignore misbuttoned, Bucuresti, bursht
+
 /** Description of your personal assistant.
  * @returns {string}
  */
@@ -196,7 +198,7 @@ globalThis.PersonalAssistantAppearance = function() {
 			} else if (paSeed === 7 && V.assistant.market) {
 				r.push(`${HeA}'s accompanied by your market assistant's demigoddess avatar.`);
 				if (V.assistant.market.relationship === "cute") {
-					r.push(`They're sitting arm in arm, their subtly differing glows casting shadows from their place on your desktop. Their conversation exists on the level of code, not speech, detectable only as slight flickerings of their respective auras.`);
+					r.push(`They're sitting arm in arm, their subtly differing glows casting shadows from their place on your desktop. Their conversation exists on the level of code, not speech, detectable only as slight flickering of their respective auras.`);
 				} else if (V.assistant.market.relationship === "nonconsensual") {
 					r.push(`${V.assistant.name} casts a spell on the junior avatar as you watch. The market assistant's avatar goes from reluctance to a sudden consuming hunger for ${V.assistant.name}'s pregnant pussy. ${V.assistant.name} laughs powerfully at the sudden oral assault.`);
 				} else if (V.assistant.market.relationship === "incestuous") {
@@ -270,7 +272,7 @@ globalThis.PersonalAssistantAppearance = function() {
 			} else if (paSeed === 7 && V.assistant.market) {
 				r.push(`${HeA}'s accompanied by your market assistant's demigoddess avatar.`);
 				if (V.assistant.market.relationship === "cute") {
-					r.push(`They're sitting arm in arm, their subtly differing glows casting shadows from their place on your desktop. Their conversation exists on the level of code, not speech, detectable only as slight flickerings of their respective auras.`);
+					r.push(`They're sitting arm in arm, their subtly differing glows casting shadows from their place on your desktop. Their conversation exists on the level of code, not speech, detectable only as slight flickering of their respective auras.`);
 				} else if (V.assistant.market.relationship === "nonconsensual") {
 					r.push(`${V.assistant.name} casts a spell on the junior avatar as you watch. The market assistant's avatar's flat belly gurgles slightly before it begins quickly swelling, not stopping until it has pinned the hapless demigoddess to the floor. ${V.assistant.name} waddles over ${hisA} immobilized partner and plants ${hisA} pregnant pussy on ${hisM} face. ${V.assistant.name} laughs powerfully at the forced oral assault from ${hisA} bursting plaything.`);
 				} else if (V.assistant.market.relationship === "incestuous") {
@@ -310,7 +312,7 @@ globalThis.PersonalAssistantAppearance = function() {
 			} else if (paSeed === 7 && V.assistant.market) {
 				r.push(`${HeA}'s accompanied by your market assistant's chubby ${loliM} avatar.`);
 				if (V.assistant.market.relationship === "cute") {
-					r.push(`They're sitting face to face, playing a rapid game of pattycake. Their conversation exists on the level of code, not speech, detectable only as slight flickerings when their hands connect.`);
+					r.push(`They're sitting face to face, playing a rapid game of pattycake. Their conversation exists on the level of code, not speech, detectable only as slight flickering when their hands connect.`);
 				} else if (V.assistant.market.relationship === "nonconsensual") {
 					r.push(`${V.assistant.name} has ${hisA} chubby playmate pinned under ${hisA} butt, and is inspecting ${hisA} ${loliM} conquest's pussy. The market assistant's avatar groans as ${V.assistant.name}'s fingers explore ${hisM} tight passage, and then claps both hands over ${hisM} mouth, crying a little, unwilling to give ${V.assistant.name} the satisfaction.`);
 				} else if (V.assistant.market.relationship === "incestuous") {
@@ -1257,7 +1259,7 @@ globalThis.PersonalAssistantAppearance = function() {
 			"fairy": {
 				"default": ``,
 				"eugenics": `fairy wearing ${hisA} birthday suit, since ${heA} is so flawless ${heA} needs nothing else.`,
-				"paternalist": `fairy wearing a well-sewn blue dress, with a large red bow tied to the back of ${hisA} waist length golden-blonde hair. ${HeA} looks like a little Bucuretsi doll.`,
+				"paternalist": `fairy wearing a well-sewn blue dress, with a large red bow tied to the back of ${hisA} waist length golden-blonde hair. ${HeA} looks like a little Bucuresti doll.`,
 				"degradationist": `fairy and completely unclothed, with ${hisA} hair in a mess and covered in dirt.`,
 				"supremacist": `fairy with distinctly ${V.arcologies[0].FSSupremacistRace} features. ${HeA} has wrapped a golden ribbon around ${hisA} torso to fashion ${himselfA} a dress.`,
 				"subjugationist": `fairy with exaggerated ${V.arcologies[0].FSSubjugationistRace} features. ${HeA} is completely unclothed, with ${hisA} hair in a mess and covered in dirt.`,
diff --git a/src/personalAssistant/assistantAppearancePackTwo.js b/src/personalAssistant/assistantAppearancePackTwo.js
index 3d26407a3113fb290e9bfd4f381cb02e680f04d9..c43b24c74ffc74085eac1634f6b5e5db2d40cdc4 100644
--- a/src/personalAssistant/assistantAppearancePackTwo.js
+++ b/src/personalAssistant/assistantAppearancePackTwo.js
@@ -1,3 +1,5 @@
+// cSpell:ignore appeara
+
 App.UI.assistantAppearancePackTwo = function() {
 	const node = new DocumentFragment();
 
diff --git a/src/personalAssistant/assistantOptions.js b/src/personalAssistant/assistantOptions.js
index ff5467ce440c8858f09114a141b3ee00a0f7b794..3dc82803f5b7dfc2683655f49a656e6fc89b042d 100644
--- a/src/personalAssistant/assistantOptions.js
+++ b/src/personalAssistant/assistantOptions.js
@@ -135,10 +135,10 @@ App.UI.personalAssistantOptions = function() {
 		if (V.assistant.market) {
 			const options = new App.UI.OptionsGroup();
 			App.UI.DOM.appendNewElement("h3", frag, "Business Assistant:");
-			const kowalski = `The arcology's upgraded computers support advanced business analysis.`;
+			const textStart = `The arcology's upgraded computers support advanced business analysis.`;
 			if (V.assistant.appearance !== "normal") {
 				App.Events.addParagraph(frag, [
-					kowalski,
+					textStart,
 					`These capabilities are represented by an avatar styled after ${V.assistant.name}'s.`,
 				]);
 				options.addOption(`Simulate a relationship with ${V.assistant.name} that is`, "relationship", V.assistant.market)
@@ -149,7 +149,7 @@ App.UI.personalAssistantOptions = function() {
 						["Incestuous", "incestuous"],
 					]);
 			} else {
-				App.UI.DOM.appendNewElement("p", frag, `${kowalski} Although technically an expanded subroutine within the same app, ${V.assistant.name} uses a distinct icon to identify these alerts and improve your workflow.`);
+				App.UI.DOM.appendNewElement("p", frag, `${textStart} Although technically an expanded subroutine within the same app, ${V.assistant.name} uses a distinct icon to identify these alerts and improve your workflow.`);
 			}
 			V.assistant.market.limit = Math.clamp(V.assistant.market.limit, 0, 10000000);
 			options.addOption("Use excess liquid assets to play the menial slave market.", "limit", V.assistant.market)
diff --git a/src/player/desc/pLongHealth.js b/src/player/desc/pLongHealth.js
index a97a5c0666439d64b8e02f8ff20f87787d6bd3e3..0c6d423254122e94a4b8a5293e38d382858eccb6 100644
--- a/src/player/desc/pLongHealth.js
+++ b/src/player/desc/pLongHealth.js
@@ -136,7 +136,7 @@ App.Desc.Player.health = function(PC = V.PC) {
 		if (PC.balls > 0) {
 			r.push(`it with a <span class="red">serious case of blue balls.</span>`);
 		} else {
-			r.push(`it; you are beleagered by a <span class="red">constant ache in your loins</span> and an intense desire to grind against nearby objects.`);
+			r.push(`it; you are beleaguered by a <span class="red">constant ache in your loins</span> and an intense desire to grind against nearby objects.`);
 		}
 	}
 
diff --git a/src/player/desc/pNotesBelly.js b/src/player/desc/pNotesBelly.js
index 0d30350ab50968925514639b4cd4a4186bfc5d9c..8453efcfff9e713048e97d6a1e9800fe495bdf33 100644
--- a/src/player/desc/pNotesBelly.js
+++ b/src/player/desc/pNotesBelly.js
@@ -1,7 +1,8 @@
+// cSpell:ignore twinner
+
 App.Desc.Player.pNotesBelly = function(PC = V.PC) {
 	const r = [];
-	const fertRefresh = PC.refreshment.includes("fertility") ? 1 : 0;
-	let adjust;
+	const fertilityRefreshment = PC.refreshment.includes("fertility") ? 1 : 0;
 	const {girlP} = getPronouns(PC).appendSuffix("P");
 	const children = PC.pregType > 1 ? "children" : "child";
 
@@ -25,7 +26,7 @@ App.Desc.Player.pNotesBelly = function(PC = V.PC) {
 				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your frumpy dress is also at its limit, and much to your annoyance, your children will not stay still enough to let you fix it.`);
 			} else if (PC.belly >= 90000) {
 				r.push(`You may have a`);
-				if (fertRefresh === 1) {
+				if (fertilityRefreshment === 1) {
 					r.push(`problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
 				} else {
 					r.push(`problem. You took fertility drugs, but you shouldn't be getting this big.`);
@@ -185,7 +186,7 @@ App.Desc.Player.pNotesBelly = function(PC = V.PC) {
 			} else if (PC.belly >= 105000) {
 				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. None of your poses work with your gravid body either, and you're practically popping out of your skimpiest outfit.`);
 			} else if (PC.belly >= 90000) {
-				if (fertRefresh === 1) {
+				if (fertilityRefreshment === 1) {
 					r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
 				} else {
 					r.push(`You may have a problem. You know you took fertility drugs, but you weren't supposed to get this big!`);
@@ -325,7 +326,7 @@ App.Desc.Player.pNotesBelly = function(PC = V.PC) {
 			} else if (PC.belly >= 105000) {
 				r.push(`You can barely function any more. You're so big and heavy that even the simplest of actions requires both intense effort and thought just to get it done. Your suit buttons keep popping, and much to your annoyance, your ${children} will not stay still enough to let you redo them.`);
 			} else if (PC.belly >= 90000) {
-				if (fertRefresh === 1) {
+				if (fertilityRefreshment === 1) {
 					r.push(`You may have a problem, but then again, you did take all those fertility drugs, so you can't really say you didn't want it.`);
 				} else {
 					r.push(`You may have a problem. You took fertility drugs, but you shouldn't be getting this big.`);
diff --git a/src/player/managePersonalAffairs.js b/src/player/managePersonalAffairs.js
index 14ec37a3786fac89485074cd8b79c167939b2ab8..ea2a6de9fd9d9cd2621cf4b72a17196a8a5a817b 100644
--- a/src/player/managePersonalAffairs.js
+++ b/src/player/managePersonalAffairs.js
@@ -416,8 +416,8 @@ App.UI.managePersonalAffairs = function() {
 				text.push(App.UI.DOM.generateLinksStrip(links));
 			} else if (PC.preg === 0) {
 				// check if the player is already taking fertility drugs as refreshment
-				const fertRefresh = PC.refreshment.toLowerCase().indexOf("fertility") !== -1 ? 1 : 0;
-				if (fertRefresh) {
+				const fertilityRefreshment = PC.refreshment.toLowerCase().indexOf("fertility") !== -1 ? 1 : 0;
+				if (fertilityRefreshment) {
 					text.push(`You're currently fertile and enjoying ${PC.refreshment}; a risky combination.`);
 				} else {
 					text.push(`You're currently fertile.`);