diff --git a/cspell.json b/cspell.json
index 15ef4e6aa640ab69b3a6d8aba9fe75992d554588..ab229aeab27a96e66707c11f779bc37752ef3d94 100644
--- a/cspell.json
+++ b/cspell.json
@@ -202,6 +202,7 @@
         "huipils",
         "hyperleptinemia",
         "hypoleptinemia",
+        "iife",
         "impregnatrix",
         "indo-aryan",
         "jetpack",
@@ -216,6 +217,7 @@
         "mammaries",
         "mastersuite",
         "meatshield",
+        "merc",
         "mercs",
         "micropenis",
         "milkings",
@@ -232,6 +234,7 @@
         "niqab",
         "nonuplets",
         "nueva",
+        "nymphomni",
         "old-timey",
         "old-worlder",
         "omnisexual",
@@ -273,12 +276,15 @@
         "sooo",
         "soooo",
         "spread-eagled",
+        "ssao",
+        "stims",
         "stimulators",
         "storyformat",
         "stylelint",
         "subjugationist",
         "sugarcube",
         "supremacism",
+        "swin",
         "swole",
         "sybian",
         "tabi",
@@ -288,12 +294,18 @@
         "tweego",
         "twincest",
         "uglies",
+        "unblind",
+        "undeafen",
         "unexpandable",
         "unholstered",
         "universidad",
         "unmocked",
+        "unmodded",
+        "unpunctuated",
         "unsatisfyingly",
         "upscaler",
+        "verticalize",
+        "vitruvian",
         "wallscreen",
         "wardeness",
         "webgl",
@@ -302,4 +314,4 @@
         "wesekh",
         "école"
     ]
-}
+}
\ No newline at end of file
diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index acba87a2541df318aa8a890758fa81fa48540bcf..a40da974a6709bba58a598171bdc9662b6017bcd 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -1,3 +1,5 @@
+// cSpell:ignore Fucktard, Fucko
+
 App.Data.misc = {
 	/** * pregmod exclusive start ***/
 
diff --git a/js/003-data/slaveGeneData.js b/js/003-data/slaveGeneData.js
index 93218cbc58a3415cb76e8289c8cb54a3ad1453a4..d549f1865e351403b7a9a58a11ce509684a13659 100644
--- a/js/003-data/slaveGeneData.js
+++ b/js/003-data/slaveGeneData.js
@@ -1,3 +1,6 @@
+// cSpell:ignore prgntr, lvstck, fmilk, imrtl, grls, twns, myot, lipe, bigd, rlact, gmast, mmast, uthyp, polyhyd, supfet
+// cSpell:ignore hfert, ptnt, ufce, pfce, hetchrom, ntny, dwrf
+
 /**
  * @typedef {object} geneData
  * @property {string} title
diff --git a/js/003-data/slaveSummaryData.js b/js/003-data/slaveSummaryData.js
index b579cb045c4ef6c8b544afecd12032bfb2117c5a..3a73c9d451086879e184a2f7b7506347accee6c8 100644
--- a/js/003-data/slaveSummaryData.js
+++ b/js/003-data/slaveSummaryData.js
@@ -1,9 +1,12 @@
+// cSpell:ignore humil, Bron, Horm, Unflinch, Advoc, Sinf, Insec, Hatr, Apath, Repre, Arrog, Caref, Ambiv, Musc, Toddl
+// cSpell:ignore SSBBW
+
 // these ratings tables are consumed by App.Ratings.xxx()
 // those function takes a value for rating and iterates a table (in the declaration order)
 // until it finds a key greater or equal to the value; the found record is returned from the function
 // Briefly, each dictionary entry key -> value is read as "the highest rating that still suits -> value" or
 // "up to, including"
-// The idea behind this is too decrease number of comparisons and retain compatibility with simple dictionaries
+// The idea behind this is to decrease number of comparisons and retain compatibility with simple dictionaries
 // without sparse keys
 App.Data.SlaveSummary = {
 	long: {
diff --git a/js/artInfrastructure.js b/js/artInfrastructure.js
index e75eeb004d426093cf25e03dced240cf3551d89d..d2db83df5f8babeaabd1c599f479c19dbe448112 100644
--- a/js/artInfrastructure.js
+++ b/js/artInfrastructure.js
@@ -1,3 +1,5 @@
+// cSpell:ignore URLID
+
 /**
  * @type {string}
  - Status codes map
diff --git a/js/medicine/surgery/chemosensory/taste.js b/js/medicine/surgery/chemosensory/taste.js
index 2c502ccd0d1f00a00573a1ca1f4e5de0377c35c5..d12d43eec8589a6aaa6413e315e5bd40c705a1d8 100644
--- a/js/medicine/surgery/chemosensory/taste.js
+++ b/js/medicine/surgery/chemosensory/taste.js
@@ -1,3 +1,5 @@
+// cSpell:ignore Detaste
+
 App.Medicine.Surgery.Reactions.Detaste = class extends App.Medicine.Surgery.SimpleReaction {
 	reaction(slave, diff) {
 		const reaction = super.reaction(slave, diff);
diff --git a/js/medicine/surgery/genitals/maleToFemale.js b/js/medicine/surgery/genitals/maleToFemale.js
index 84dbf6366fb469896b6eb13a390a96ff72ec6f93..f8a172cd5dd5dec1aecdc9455e956625115bd917 100644
--- a/js/medicine/surgery/genitals/maleToFemale.js
+++ b/js/medicine/surgery/genitals/maleToFemale.js
@@ -1,4 +1,4 @@
-App.Medicine.Surgery.Reactions.MaletoFemale = class extends App.Medicine.Surgery.SimpleReaction {
+App.Medicine.Surgery.Reactions.MaleToFemale = class extends App.Medicine.Surgery.SimpleReaction {
 	reaction(slave, diff) {
 		const reaction = super.reaction(slave, diff);
 		const {He, he, His, his, him, himself} = getPronouns(slave);
@@ -41,7 +41,7 @@ App.Medicine.Surgery.Reactions.MaletoFemale = class extends App.Medicine.Surgery
 	}
 };
 
-App.Medicine.Surgery.Procedures.MaletoFemale = class extends App.Medicine.Surgery.Procedure {
+App.Medicine.Surgery.Procedures.MaleToFemale = class extends App.Medicine.Surgery.Procedure {
 	get name() {
 		return "Convert genitalia to female";
 	}
@@ -63,6 +63,6 @@ App.Medicine.Surgery.Procedures.MaletoFemale = class extends App.Medicine.Surger
 			this._slave.drugs === Drug.ATROPHYTESTICLE) {
 			this._slave.drugs = Drug.NONE;
 		}
-		return this._assemble(new App.Medicine.Surgery.Reactions.MaletoFemale());
+		return this._assemble(new App.Medicine.Surgery.Reactions.MaleToFemale());
 	}
 };
diff --git a/js/random.js b/js/random.js
index 10569f08e4029693bfd48c510c68be8d573cabc7..3e1ccf64edef3fd5055f56c6d016f253eb393839 100644
--- a/js/random.js
+++ b/js/random.js
@@ -1,3 +1,5 @@
+// cSpell:ignore unskewed
+
 /**
  * generate two independent Gaussian numbers using Box-Muller transform.
  * mean and deviation specify the desired mean and standard deviation.
diff --git a/js/rulesAssistant/conditionEditorTree.js b/js/rulesAssistant/conditionEditorTree.js
index 73013e1d588e348639f5b73eace43668653159b9..8b3a0b35b80c6503fc56bfe8caf793c160c531cf 100644
--- a/js/rulesAssistant/conditionEditorTree.js
+++ b/js/rulesAssistant/conditionEditorTree.js
@@ -1,3 +1,5 @@
+// cSpell:ignore bcontext
+
 /**
  * All functions should only be called from z1-conditionEditorController.js
  */
diff --git a/js/rulesAssistant/conditionEvaluation.js b/js/rulesAssistant/conditionEvaluation.js
index 4041965755d6d5d40af09b52818a9b1b6deb74eb..c1d13c22baaed12f832eed2a5e98bbcca094ca20 100644
--- a/js/rulesAssistant/conditionEvaluation.js
+++ b/js/rulesAssistant/conditionEvaluation.js
@@ -1,4 +1,5 @@
 /* eslint-disable sonarjs/no-identical-expressions */
+// cSpell:ignore unaccelerated
 
 App.RA.Activation.Context = class {
 	/**
diff --git a/js/utils.js b/js/utils.js
index 9e32c05693944a55190b7a9a0036cad7d708639a..788d111004108bd133409f1d2f8ee2b71f47c37c 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -1,4 +1,5 @@
 /* eslint no-unused-vars: [2, { "vars": "local" }] */
+// cSpell:ignore yxxx
 
 /* This file contains only JS functions without dependencies on FC specific variables/conventions and do not rely on
  * custom functions outside this file
@@ -310,19 +311,19 @@ App.Utils.topologicalSort = function(keys, edges) {
 	});
 
 	/** 2. topological sort with visitor
-	 * @param {string} idstr
+	 * @param {string} idStr
 	 * @param {number[]} [ancestors]
 	 */
-	function visit(idstr, ancestors = []) {
-		let node = nodes[idstr];
+	function visit(idStr, ancestors = []) {
+		let node = nodes[idStr];
 		let id = node.id;
 
 		// if already exists, do nothing
-		if (visited[idstr]) { return; }
+		if (visited[idStr]) { return; }
 
 		ancestors.push(id);
 
-		visited[idstr] = true;
+		visited[idStr] = true;
 
 		node.afters.forEach((afterID) => {
 			if (ancestors.indexOf(afterID) >= 0) { // if already in ancestors, a closed chain exists.
@@ -378,9 +379,9 @@ function deepAssign(target, source) {
  */
 function median(arr = []) {
 	const mid = Math.floor(arr.length / 2);
-	const nums = [...arr].sort((a, b) => a - b);
+	const numbers = [...arr].sort((a, b) => a - b);
 
-	return arr.length % 2 === 0 ? (nums[mid] + nums[mid - 1]) / 2 : nums[mid];
+	return arr.length % 2 === 0 ? (numbers[mid] + numbers[mid - 1]) / 2 : numbers[mid];
 }
 
 /**
diff --git a/src/facilities/surgery/surgeryPassageLower.js b/src/facilities/surgery/surgeryPassageLower.js
index 32d770418c9aa377bf11a8984a67730f03586b13..9de191a0f8330b936bc3adeeab401180b93b08bf 100644
--- a/src/facilities/surgery/surgeryPassageLower.js
+++ b/src/facilities/surgery/surgeryPassageLower.js
@@ -466,7 +466,7 @@ App.UI.surgeryPassageLower = function(slave, refresh, cheat = false) {
 			if (slave.indentureRestrictions < 1 && (slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || !FutureSocieties.isActive('FSRestart'))) {
 				if (slave.vagina === -1 && slave.dick !== 0) {
 					linkArray.push(App.Medicine.Surgery.makeLink(
-						new App.Medicine.Surgery.Procedures.MaletoFemale(slave),
+						new App.Medicine.Surgery.Procedures.MaleToFemale(slave),
 						refresh, cheat));
 				}
 				if (slave.vagina === -1 && slave.dick === 0 && V.surgeryUpgrade === 1) {