diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 02aa37b799b3b34b9bd841ba8f6b7764c252624d..c0e39f92b925ab6597471c2941ec4d7a45c171ec 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
 
 First off, thanks for taking the time to contribute!
 
-If there is anything you don't understand feel free to ask. Many of the more advanced tools are also not required for
+If there is anything you don't understand feel free to ask. The advanced tooling is not required for
 fixing small typos or simple bugs.
 
 ## Environment
@@ -13,38 +13,51 @@ To effectively work on the project the following tools are required:
 
 * [Git](https://git-scm.com)
 * [Node.js](https://nodejs.org/en/) or another npm client
-* a code editor
+* a code editor/IDE
   * [VSCode](https://code.visualstudio.com/) is a popular option
-* [Java Runtime Environment](https://jdk.java.net/18/), minimum JRE8
+
+While these tools make working on FC easier, they are not actually required.
 
 ### Setting everything up
 
 1. Clone the project from GitGud.io ([Detailed Git setup and work cycle](devNotes/gitSetup.md))
 2. Navigate to the `fc-pregmod` root directory.
-   * Windows: Open a terminal and execute `cd C:\path\to\project\fc-pregmod`
-   * GNU/Linux: Open a terminal and execute `cd /path/to/project/fc-pregmod/`
-3. Run `npm install` in your terminal
-4. Open the directory in your preferred editor
+   * Windows: Run `Windows Powershell` or `Command Prompt` and execute `cd C:\path\to\project\fc-pregmod`
+   * Mac/Linux: Open a terminal and execute `cd /path/to/project/fc-pregmod/`
+3. Run `setup.bat` (Windows) or `setup.sh` (Mac/Linux) in your terminal
+4. Follow the install steps until you get to the `Welcome to FC development!...` menu and then select `Exit`
+5. Open the directory in your preferred editor/IDE
 
-* Make sure you have an extension for ESLint installed to catch formatting errors
+**Make sure you have an extension for ESLint installed in your preferred editor/IDE to catch formatting errors**
 
-Recommended extensions for VSCode:
+<details><summary>Recommended editor/IDE plugins/extensions</summary>
+The list below is for VSCode. If you are not using VSCode but want some of these extensions functionality, then do some research. Many of these extensions exist or have alternatives in most common editors/IDEs.
 
+* [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
+  * Catches formatting problems and lets you know when your code doesn't conform to our standards
 * [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
-* [GitLens — Git supercharged](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens).
+  * Catches most spelling issues
+* [Error Lens](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens)
+  * Highlights lines that ESLint and Code Spell Checker have marked as having problems
+* [Git Extension Pack](https://marketplace.visualstudio.com/items?itemName=donjayamanne.git-extension-pack)
+  * Adds a few of tools that make working with git easier
+* [IntelliCode](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode)
+  * Will make your day easier by suggesting functions and properties for autocompletion
+  * Will also show you documentation for those suggested functions and properties
+* [TODO Highlight](https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight)
+  * Makes TODO comments stand out better
+* [Todo Tree](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree)
+  * Adds a tab to the left sidebar that lists all TODO comments in the current project
+</details>
 
 ### Compiling
 
-While you can compile it like usual (`compile.bat`/`compile.sh`/`make`), there is also a `Gulp script` that creates
-source maps for easier debugging. Other than that there are no differences between compiling for development or
-compiling for playing the game.
-
-If you are using an ARM-based device, you may need to use `arch -x86_64 bash compile.sh` to properly compile.
+Use either the simple or advanced compiler. See the `Compile the game yourself` section in the [readme](README.md) for more information.
 
 ## Code style
 
-Generally the code style is based on our `.eslintrc.json`. If your IDE has an auto format feature it can often read the
-rules from `.eslintrc.json`. **Be sure to run `npm run lint` in the console before committing and pushing your changes.**
+The coding style is based on our `.eslintrc.json`. If your editor/IDE has ESLint support it will let you know when your code doesn't conform to our standards.
+  * Most editors/IDEs don't have native ESLint support and will need you to install an ESLint plugin/extension.
 
 ### Documentation
 
@@ -137,21 +150,13 @@ New code should generally get organized into the `App` namespace. See [fc-js-ini
 
 ### JavaScript Features
 
-Use modern JavaScript features when possible. We are currently targeting ECMAScript 2021, and aren't trying to support Internet Explorer or anything stupid like that (it isn't 2010 anymore). For example, use `let`/`const` rather than `var`, prefer fat arrow functions to inline long-form functions, use nullish coalescing and optional chaining, etc.
+Use modern JavaScript features when possible. We are currently targeting ECMAScript 2021, and aren't trying to support Internet Explorer or anything stupid like that (it isn't 2010 anymore). For example, use `let`/`const` rather than `var`, prefer [`Arrow function expressions`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) to inline long-form functions, use [`nullish coalescing`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing) and [`optional chaining`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining), etc.
 
 ### Code quality
 
-There are three main tools used to ensure good code quality: `ESLint`, `TypeScript Compiler (tsc)` and a custom sanity
-check.
-
-`ESLint` and `tsc` can be setup in most IDEs aimed at web development to show errors while editing the file.
-
-Contributions should generally not add any new sanity check errors, and it's especially important to check this if
-you're making changes to `.tw` files.
-Use `./compile.sh --dry --sanity` or the shorthand `./compile.sh -d -s` on Linux or macOS.
-On Windows run `compile_debug+sanityCheck.bat`.
-It searches for common spelling errors and syntax errors in the Twine files. Don't worry about preexisting
-errors; it's not totally clean as is and there are a few false positives.
+Contributions should generally not add any new sanity check errors. You can check for errors by running `sanityCheck.bat` (Windows) or `sanityCheck.sh` (Mac/Linux).
+  * With the default settings this will (mostly) show you just the errors that were caused by your changes.
+  * If you are not using the advanced tooling then use `legacySanityCheck.bat` or `legacySanityCheck.sh` instead.
 
 ## Project Structure
 
@@ -165,7 +170,8 @@ errors; it's not totally clean as is and there are a few false positives.
 ### Developer Files
 
 * `devNotes/` contains various wiki files and other potentially interesting files.
-* `devTools/` contains various scripts and executables needed for working with the project or compiling. TypeScript typing files are stored here as well.
+* `devTools/` contains various scripts and executables needed for working with the project or compiling.
+  * TypeScript typing files are stored here as well in the `types/` subdirectory.
 * `submodules/` contains Git submodules
   * currently only a custom version of SugarCube 2
 
@@ -188,7 +194,7 @@ errors; it's not totally clean as is and there are a few false positives.
   * [Twine<sup>1</sup>](devNotes/sceneGuide.md)
   * [JavaScript](devNotes/jsEventCreationGuide.md)
 * [Exception handling](devNotes/exceptions.md)
-* [Sanity check](devNotes/sanityCheck.md)
+* [Sanity check<sup>2</sup>](devNotes/sanityCheck.md)
 * [Slave List](devNotes/slaveListing.md)
 * [Pronouns](devNotes/Pronouns.md)
 * External function documentation
@@ -199,6 +205,8 @@ errors; it's not totally clean as is and there are a few false positives.
 
 <sup>1. Twine is being phased out of the project and should not be used in new code, but the basic concepts found here still apply.</sup>
 
+<sup>2. Only applies to the legacy sanity checks.</sup>
+
 ### Useful issues
 
 * [Setting up VS Code](https://gitgud.io/pregmodfan/fc-pregmod/-/issues/2448)
diff --git a/FCHost/documentation_FCHost.md b/FCHost/documentation_FCHost.md
index 8fe64864f0d638f08e004acde7396053837298ae..dc04e359fad34524e667429eb9bc4b16b76cb3b3 100644
--- a/FCHost/documentation_FCHost.md
+++ b/FCHost/documentation_FCHost.md
@@ -9,14 +9,15 @@ FCHost is an alternative HTML renderer for playing Pregmod based on Chromium. It
 * No lost saves due to accidentally cleared cookies.
 * Can be noticeable faster.
 
-A Windows build built on 3.14.2024 is available [here](https://mega.nz/file/AFhTxLxR#fQgZFswJHVLpLlY5BzhTPmUKtmISeHdJ065b_MW0700)
-A precompiled version for Windows is available [here](https://mega.nz/folder/vzxgwKwL#L4V4JEk1YfWcvC7EG76TMg) 
+A Windows build is available for [download](https://mega.nz/file/AFhTxLxR#fQgZFswJHVLpLlY5BzhTPmUKtmISeHdJ065b_MW0700).
+
+If you are developing FC using the advanced tooling then you can run `FCHost.bat` (Windows) or `FCHost.sh` (Mac/Linux) to download and setup FCHost automatically.
 
 ## Initial setup
 
 ### HTML files
 
-Place FC_pregmod.html next to the FCHost executable. On Windows, this is `fchost.exe`
+Place `FC_pregmod.html` next to the FCHost executable. This is usually `fchost.exe`, but it may be a file named `fchost` on Mac/Linux.
 
 ### Art resources
 
diff --git a/README.md b/README.md
index 46cb8e4b2ab796d63687920b7c5f6c9eeec459c9..e5f8ea1a2c465f436e5c07eddf829592d8db73cc 100644
--- a/README.md
+++ b/README.md
@@ -27,36 +27,47 @@ If you want to tweak the game a bit, you can easily download the files and compi
        * Via terminal: `git pull`
 
 2. Compile the game:
-   * Windows
-     * Run compile.bat
-     * Second run of compile.bat will overwrite without prompt
-
-   * Linux/Mac
-     1. Ensure executable permission on file `devTools/tweeGo/tweego` (not tweego.exe!)
-     2. Ensure executable permission on file `compile.sh`
-     3. In the root dir of sources (where you see src, devTools, bin...) run command `./compile.sh` from console.
-        Alternatively, if you have make installed, run `make all` in the root directory.
-
-3. To play open FC_pregmod.html in bin/
+   * Using one of two methods
+     1. The simple compiler by running `simple-compiler.bat` (Windows) or `simple-compiler.sh` (Mac/Linux)
+         * Benefits:
+           * Requires no external dependencies
+           * Slightly faster compiling
+     2. The advanced compiler by running `compile.bat` (Windows) or `compile.sh` (Mac/Linux)
+         * Requires:
+           * [Git](https://git-scm.com/)
+           * [Node.js](https://nodejs.org)
+           * ~500 MB of Node packages
+           * `compile.[bat, sh]` will attempt to help you with the installation of its dependencies
+         * Benefits:
+           * Easier debugging
+           * Early problem detection
+           * Spell checking
+           * Tweaking of compiler settings by running `setup.bat` (Windows) or `setup.sh` (Mac/Linux)
+           * Copies `FC_pregmod.html` to `FCHost` if it is installed
+           * Live reloading of FC after file changes by running `watcher.bat` (Windows) or `watcher.sh` (Mac/Linux)
+   * **The second run of the compiler will overwrite the existing `FC_pregmod.html` file!**
+   * **All our tooling expects that you are running them in FC's root directory** (Where you see devTools, src, js, etc). Failure to do so will result in errors.
+   * If you are using an ARM-based device, you may need to use `arch -x86_64 bash [compile or simple-compiler].sh` to properly compile.
+
+3. To play open `FC_pregmod.html` in the `bin/` folder
+  * Repeat steps 2 and 3 after you make any changes or use `watcher.[bat, sh]` to do them automatically.
 
 ## Common problems
 
-* If compiling takes a while or causes a noticeable increase in system resource utilisation.
-  - It might be worth checking your main Antivirus (AV) settings.
-  - If it is Windows Defender (currently tested with Windows 10):
-    * `Start menu` -> `Windows Security` -> `Virus & threat protection` -> `Virus & threat protection settings` ->
+* If compiling takes a long time (more than 2 minutes) or causes a noticeable increase in system resource utilisation.
+  - FC's compiler makes a lot of file changes over a short period of time. Some Antivirus programs will make FC's compiler wait while it scans the contents of each changed file. So it might be worth making sure FC's directory is excluded in your Antivirus settings.
+    * If your Antivirus is Windows Defender (currently tested with Windows 10 on 04/14/2024):
+      * `Start menu` -> `Windows Security` -> `Virus & threat protection` -> `Virus & threat protection settings` ->
       `Manage settings` -> `Exclusions (near the bottom)` -> `Add or remove exclusions` -> `Add an exclusion` ->
-      `path to bin/.`
+      `path to FC's root directory (Where you see devTools, src, js, etc).`
 
 * `sessionStorage quota exceeded` / `localStorage quota exceeded` or something similar
   - Your saves stored inside the browser are getting too large. There are multiple ways to solve this:
     1. Delete saves stored in the browser. If you want to keep them, save them to disk first.
-    2. Disable autosave and delete the current one. Due to technical reasons autosaves are larger than normal saves,
-       so this may help more than expected.
+    2. Disable autosave and delete the current one. Due to technical reasons autosaves are larger than normal saves, so this may help more than expected.
     3. If on Firefox, raise the storage limit: Type `about:config` in the address bar and search for
        `dom.storage.default_quota`. Increase this value as needed. Default value is 5120 kilobytes / 5 MB.
-    4. Switch to a different browser. Recommended is either Firefox or [FCHost](FCHost/documentation_FCHost.md), a
-       custom HTML renderer specifically for Pregmod.
+    4. Switch to a different browser. Recommended is either Firefox or [FCHost](FCHost/documentation_FCHost.md), a custom HTML renderer specifically for Pregmod.
     5. If you absolutely need to use Google Chrome:
        1. download and unzip [NW.js SDK](https://nwjs.io/downloads/) for your operative system.
        2. copy the game file (FC_pregmod.html) into the `nwjs-sdk-v0.XX.Y-YOUR_OS` folder
@@ -80,9 +91,9 @@ If you want to tweak the game a bit, you can easily download the files and compi
     first problem as well.
   - It is possible to increase the memory utilized by your browser to delay this
 
-* I wish to report a sanityCheck issue.
-  - Open an issue or, if you are interested, it could be a great first contribution. Be warned though, a large number
-    are false positives.
+* I wish to report an issue.
+  1. Search [issues](https://gitgud.io/pregmodfan/fc-pregmod/-/issues) to see if someone has already reported the issue.
+  2. [Open a new issue](https://gitgud.io/pregmodfan/fc-pregmod/-/issues/new) or, if you are interested in trying to fix it yourself, please see our guide on [contributing](CONTRIBUTING.md).
 
 ## Contribute
 
diff --git a/cspell.json b/cspell.json
index 2634d48e0ad7fbfa2a6e2f8b5c63ed5cb5bc6775..5127e379389a2fd723a933018a73a37ed4c6971b 100644
--- a/cspell.json
+++ b/cspell.json
@@ -260,6 +260,7 @@
         "incentivizes",
         "incubatee",
         "indo-aryan",
+        "intellicode",
         "jetpack",
         "jism",
         "jizya",
@@ -406,4 +407,4 @@
         "xochiquetzal",
         "école"
     ]
-}
+}
\ No newline at end of file
diff --git a/devTools/scripts/setup.js b/devTools/scripts/setup.js
index c6b9c006d3b8e4b612c84d1a40b440362a9b5f6e..0bc9febf24f12b4840469f2e8892a0b00e7d3dfb 100644
--- a/devTools/scripts/setup.js
+++ b/devTools/scripts/setup.js
@@ -54,7 +54,6 @@ const separatorString = "-".repeat(78);
 
 // TODO:@franklygeorge Do we want an extensions.json file for VSCode?
 // TODO:@franklygeorge Figure out why setup.[bat,sh] is slow to start (~5 seconds). Probably affects compile.[bat,sh] and sanityCheck.[bat,sh] as well
-// TODO:@franklygeorge Search for todo's with @franklygeorge in them and complete them
 
 /** @type {Settings} */
 const settings = {
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index 9aa94404204f43c3e1671dd8ed76812bf5ba9d9b..11e64c7075ff030040909c5905c7e9cead11e30d 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -285,8 +285,8 @@ App.Data.defaultGameStateVariables = {
 	findData: "",
 	underperformersCount: 7,
 
-	// eslint-disable-next-line camelcase
-	pedo_mode: 0,
+	/** @type {FC.Bool} */
+	pedoMode: 0,
 	minimumSlaveAge: 16,
 	fertilityAge: 13,
 	potencyAge: 13,
@@ -1681,7 +1681,8 @@ App.Data.defaultGameOptions = {
 	realRoyalties: 0,
 	inbreeding: 1,
 	seeAge: 1,
-	pedo_mode: 0,
+	/** @type {FC.Bool} */
+	pedoMode: 0,
 	minimumSlaveAge: 16,
 	extremeUnderage: 0,
 	retirementAge: 45,
diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js
index c374c7a969878cd7ee9c6caa02ff07ef6a1a9051..93b999aaade08414fbe7906438195740d1ef2796 100644
--- a/src/002-config/fc-version.js
+++ b/src/002-config/fc-version.js
@@ -2,5 +2,5 @@ App.Version = {
 	base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed.
 	pmod: "4.0.0-alpha.31",
 	commitHash: null,
-	release: 1239, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js.
+	release: 1240, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js.
 };
diff --git a/src/Mods/Catmod/events/nonRandom/projectNComplete.js b/src/Mods/Catmod/events/nonRandom/projectNComplete.js
index 220db4602bc3040c7f897668d31a84fbe74630af..341d66f2f403cd5b92418ac84a133f89fcde2355 100644
--- a/src/Mods/Catmod/events/nonRandom/projectNComplete.js
+++ b/src/Mods/Catmod/events/nonRandom/projectNComplete.js
@@ -16,11 +16,11 @@ App.Events.SEProjectNComplete = class SEProjectNComplete extends App.Events.Base
 		slave.slaveName = V.subjectDeltaName;
 		slave.birthName = V.subjectDeltaName;
 		slave.hColor = "white";
-		slave.override_H_Color = 1; // TODO: Identifier 'override_H_Color' is not in camel case
+		slave.overrideHColor = 1;
 		slave.origHColor = "white";
 		slave.skin = "pure white";
 		slave.origSkin = "pure white";
-		slave.override_Skin = 1; // TODO: Identifier 'override_Skin' is not in camel case
+		slave.overrideSkin = 1;
 		slave.boobs = 300;
 		slave.natural.boobs = 300;
 		slave.earTColor = slave.hColor;
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 25d33c3dcaa10f69e89314e8480fa4e4dede798c..72c8fd7228973c73acd804612032b98d4094b5e3 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -1581,6 +1581,12 @@ App.Update.globalVariables = function(node) {
 
 	V.showPotentialSizes = V.showPotentialSizes ?? 1;
 
+	// remapping variables
+	if (V.releaseID < 1240 && "pedo_mode" in V) {
+		V.pedoMode = V.pedo_mode;
+		delete V.pedo_mode;
+	}
+
 	node.append(`Done!`);
 };
 
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index dada15b8573936e6c47997f6d250498db8bbf841..143a1f105097f793c4e5c29811731d2dbbf61472 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -510,6 +510,11 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (typeof slave.origRace !== "string") {
 			slave.origRace = slave.race;
 		}
+		if (V.releaseID < 1240 && "override_Race" in slave) {
+			// @ts-expect-error
+			slave.overrideRace = slave.override_Race;
+			delete slave.override_Race;
+		}
 		if (typeof slave.skin !== "string") {
 			slave.skin = "light";
 		}
@@ -519,6 +524,11 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (typeof slave.minorInjury !== "string") {
 			slave.minorInjury = 0;
 		}
+		if (V.releaseID < 1240 && "override_Skin" in slave) {
+			// @ts-expect-error
+			slave.overrideSkin = slave.override_Skin;
+			delete slave.override_Skin;
+		}
 
 		slave.health.condition = Math.clamp(slave.health.condition, -100, 200) || 0;
 		slave.health.shortDamage = Math.max(+slave.health.shortDamage, 0) || 0;
@@ -546,6 +556,11 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (slave.lips !== 0) {
 			slave.lips = Math.clamp(+slave.lips, 0, 100) || 15;
 		}
+		if (V.releaseID < 1240 && "override_Eye_Color" in slave) {
+			// @ts-expect-error
+			slave.overrideEyeColor = slave.override_Eye_Color;
+			delete slave.override_Eye_Color;
+		}
 	}
 
 	/**
@@ -587,6 +602,28 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (typeof slave.eyebrowFullness !== "string") {
 			slave.eyebrowFullness = "natural";
 		}
+		if (V.releaseID < 1240) {
+			if ("override_H_Color" in slave) {
+				// @ts-expect-error
+				slave.overrideHColor = slave.override_H_Color;
+				delete slave.override_H_Color;
+			}
+			if ("override_Pubic_H_Color" in slave) {
+				// @ts-expect-error
+				slave.overridePubicHColor = slave.override_Pubic_H_Color;
+				delete slave.override_Pubic_H_Color;
+			}
+			if ("override_Arm_H_Color" in slave) {
+				// @ts-expect-error
+				slave.overrideArmHColor = slave.override_Arm_H_Color;
+				delete slave.override_Arm_H_Color;
+			}
+			if ("override_Brow_H_Color" in slave) {
+				// @ts-expect-error
+				slave.overrideBrowHColor = slave.override_Brow_H_Color;
+				delete slave.override_Brow_H_Color;
+			}
+		}
 	}
 
 	/**
@@ -2187,17 +2224,17 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() {
 				}
 			} else if (cond.specialSlaves === 1) { // only: replace regular assignments
 				let newAssignments = [];
-				for (const a of cond.assignment) {
+				for (const assignment of cond.assignment) {
 					let found = false;
 					for (const f of fwh) {
-						if (a === f.jobs[f.defaultJob].assignment) {
+						if (assignment === f.jobs[f.defaultJob].assignment) {
 							newAssignments.push(f.manager.assignment);
 							found = true;
 							break;
 						}
 					}
 					if (!found) {
-						newAssignments.push(a);
+						newAssignments.push(assignment);
 					}
 				}
 				// now if newAssignments is empty, we add all facility heads and special slaves
@@ -2440,12 +2477,12 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() {
 	}
 
 	/**
-	 * @param {FC.RA.RuleReleaseSetters} rr
+	 * @param {FC.RA.RuleReleaseSetters} releaseRule
 	 * @returns {FC.RA.RuleReleaseSetters}
 	 */
-	function convertReleaseRules(rr) {
-		if (typeof rr === 'string') {
-			switch (rr) {
+	function convertReleaseRules(releaseRule) {
+		if (typeof releaseRule === 'string') {
+			switch (releaseRule) {
 				case "chastity":
 					return {
 						facilityLeader: 0,
@@ -2493,7 +2530,7 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() {
 					};
 			}
 		}
-		return rr;
+		return releaseRule;
 	}
 
 	/** @param {FC.RA.RuleSetters} set */
diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js
index 725d04a720e7851cc5404f0a19d76b77b0bffc90..ef2346848cc6cb0fd6ee166a15d36960704c66b3 100644
--- a/src/data/backwardsCompatibility/updateSlaveObject.js
+++ b/src/data/backwardsCompatibility/updateSlaveObject.js
@@ -40,14 +40,12 @@ App.Update.Slave = function(slave, genepool = false) {
 		abortionTat: -1,
 		birthsTat: -1,
 		readyProsthetics: [],
-		/* eslint-disable camelcase */
-		override_Race: 0,
-		override_Skin: 0,
-		override_Eye_Color: 0,
-		override_H_Color: 0,
-		override_Pubic_H_Color: 0,
-		override_Arm_H_Color: 0,
-		/* eslint-enable camelcase */
+		overrideRace: 0,
+		overrideSkin: 0,
+		overrideEyeColor: 0,
+		overrideHColor: 0,
+		overridePubicHColor: 0,
+		overrideArmHColor: 0,
 		pregControl: "none",
 		pregNoticeDefault: "none",
 		pregNoticeBypass: false,
diff --git a/src/endWeek/economics/neighborsDevelopment.js b/src/endWeek/economics/neighborsDevelopment.js
index 1ebdfcbaa757fb30f580f96b3cf5d5ed84beed75..ff0dad1e383a17db7423828922fd88aaa60b8d61 100644
--- a/src/endWeek/economics/neighborsDevelopment.js
+++ b/src/endWeek/economics/neighborsDevelopment.js
@@ -853,7 +853,7 @@ App.EndWeek.neighborsDevelopment = function() {
 				if (arc.FSYouthPreferentialist >= V.FSLockinLevel) {
 					if ((arc.name.indexOf("Arcology") !== -1) && (random(0, 2) === 0)) {
 						r.push(`Youth Preferentialism has reached stability and acceptance there. The arcology has been renamed`);
-						if (V.pedo_mode === 1 || V.minimumSlaveAge < 6) {
+						if (V.pedoMode === 1 || V.minimumSlaveAge < 6) {
 							arc.name = App.Neighbor.getUnusedName(App.Data.ArcologyNames.YouthPreferentialistLow);
 						} else if (V.minimumSlaveAge < 14) {
 							arc.name = App.Neighbor.getUnusedName(App.Data.ArcologyNames.YouthPreferentialist.concat(App.Data.ArcologyNames.YouthPreferentialistLow));
diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js
index e74104c98dd78ba286751084744e5dfab6c307d8..8803e85fa2420b72418a79fcee82ab7a01a9ea12 100644
--- a/src/endWeek/nextWeek/nextWeek.js
+++ b/src/endWeek/nextWeek/nextWeek.js
@@ -411,7 +411,7 @@ App.EndWeek.nextWeek = function() {
 	V.thisWeeksFSWares = V.merchantFSWares.randomMany(2);
 	V.thisWeeksIllegalWares = V.merchantIllegalWares.randomMany(1);
 	V.prisonCircuitIndex++;
-	if (V.prisonCircuit[V.prisonCircuitIndex] === "juvenile detention" && (V.minimumSlaveAge >= 16 || V.pedo_mode === 1)) {
+	if (V.prisonCircuit[V.prisonCircuitIndex] === "juvenile detention" && (V.minimumSlaveAge >= 16 || V.pedoMode === 1)) {
 		V.prisonCircuitIndex++; // skip juvenile detention if juvenile slaves are not allowed, or we're in pedo mode (where all prisoners are juvenile)
 	}
 	if (V.prisonCircuitIndex >= V.prisonCircuit.length) {
diff --git a/src/events/RE/reAWOL.js b/src/events/RE/reAWOL.js
index c1956d8cfb32d3d6d826303deadd1a588f0ae843..8a9fb1f831a95aba7a208c4e3bff1a86430ad06f 100644
--- a/src/events/RE/reAWOL.js
+++ b/src/events/RE/reAWOL.js
@@ -13,7 +13,7 @@ App.Events.REAWOL = class REAWOL extends App.Events.BaseEvent {
 
 	execute(node) {
 		const bountyFee = 5000;
-		const minAge = (V.pedo_mode === 1) ? 21 : 38;
+		const minAge = (V.pedoMode === 1) ? 21 : 38;
 		const genParam = {
 			minAge: minAge, maxAge: 43, ageOverridesPedoMode: 1, race: "nonslave", disableDisability: 1
 		};
diff --git a/src/events/RE/reMalefactor.js b/src/events/RE/reMalefactor.js
index 053b910023c9bb14e4d039c498bfd6f270973f78..459b43f32e7b568ded3022a1b1329d72ab6b9fed 100644
--- a/src/events/RE/reMalefactor.js
+++ b/src/events/RE/reMalefactor.js
@@ -828,7 +828,7 @@ App.Events.REMalefactor = class REMalefactor extends App.Events.BaseEvent {
 				case "mule":
 					pram = new GenerateNewSlavePram();
 					Object.assign(pram, {disableDisability: 1, minAge: 13, race: "nonslave"});
-					if (V.pedo_mode === 0) {
+					if (V.pedoMode === 0) {
 						pram.maxAge = 26;
 					}
 					slave = GenerateNewSlave("XX", pram);
@@ -909,10 +909,10 @@ App.Events.REMalefactor = class REMalefactor extends App.Events.BaseEvent {
 					slave.skin = randomRaceSkin(fakeRace);
 					setEyeColor(slave, randomRaceEye(fakeRace));
 					slave.hColor = randomRaceHair(fakeRace);
-					slave.override_Race = 1;
-					slave.override_Skin = 1;
-					slave.override_H_Color = 1;
-					slave.override_Eye_Color = 1;
+					slave.overrideRace = 1;
+					slave.overrideSkin = 1;
+					slave.overrideHColor = 1;
+					slave.overrideEyeColor = 1;
 					break;
 			}
 			return slave;
diff --git a/src/events/RE/reRoyalBlood.js b/src/events/RE/reRoyalBlood.js
index f7826ade1acd8cab16f9a7220c897ba5eababd2f..d415905af25d9bb7a31ec4ff1834353bd7ef43fb 100644
--- a/src/events/RE/reRoyalBlood.js
+++ b/src/events/RE/reRoyalBlood.js
@@ -632,7 +632,7 @@ App.Events.RERoyalBlood = class RERoyalBlood extends App.Events.BaseEvent {
 						break;
 				}
 				slave = GenerateNewSlave("XX", {
-					minAge: V.fertilityAge + V.minimumSlaveAge + 1, maxAge: (V.pedo_mode === 1 ? 24 : 43), disableDisability: 1, nationality: nationality, race: race
+					minAge: V.fertilityAge + V.minimumSlaveAge + 1, maxAge: (V.pedoMode === 1 ? 24 : 43), disableDisability: 1, nationality: nationality, race: race
 				});
 				if (slave.nationality === "Japanese") {
 					slave.birthSurname = "Yamato";
@@ -689,7 +689,7 @@ App.Events.RERoyalBlood = class RERoyalBlood extends App.Events.BaseEvent {
 				}
 				slave.slaveSurname = slave.birthSurname;
 			} else {
-				slave = GenerateNewSlave("XX", {minAge: V.fertilityAge + V.minimumSlaveAge + 1, maxAge: (V.pedo_mode === 1 ? 24 : 43), disableDisability: 1});
+				slave = GenerateNewSlave("XX", {minAge: V.fertilityAge + V.minimumSlaveAge + 1, maxAge: (V.pedoMode === 1 ? 24 : 43), disableDisability: 1});
 			}
 			slave.anus = 0;
 			slave.weight = 0;
diff --git a/src/events/RE/reShelterInspection.js b/src/events/RE/reShelterInspection.js
index e9626c86871ce76de84b61f4db686655cb66c520..f37d1f11b37e0ed6fedbfe43a6c293a7be418b6e 100644
--- a/src/events/RE/reShelterInspection.js
+++ b/src/events/RE/reShelterInspection.js
@@ -762,7 +762,7 @@ App.Events.REShelterInspection = class REShelterInspection extends App.Events.Ba
 			inspector.face = -20;
 			inspector.voice = 1;
 			inspector.hColor = "graying";
-			inspector.override_H_Color = 1;
+			inspector.overrideHColor = 1;
 			inspector.hLength = 40;
 			inspector.hStyle = "bun";
 			inspector.energy = random(5, 50);
diff --git a/src/events/RESS/review/niceGuys.js b/src/events/RESS/review/niceGuys.js
index 4b09c9430232108c9d6bc18786e003739f377db6..6403a9f991acb7a28d17e1d3384a53c8c435f191 100644
--- a/src/events/RESS/review/niceGuys.js
+++ b/src/events/RESS/review/niceGuys.js
@@ -71,7 +71,7 @@ App.Events.RESSNiceGuys = class RESSNiceGuys extends App.Events.BaseEvent {
 		r.push(`"Can we just walk up to ${him} and ask ${him} out?" says one.`);
 		r.toParagraph();
 		r.push(`"Don't be <b>stupid,</b>" says another. "Like, look at ${him}, why would ${he} even touch any of us?`);
-		if (V.pedo_mode === 0) {
+		if (V.pedoMode === 0) {
 			if (eventSlave.visualAge < 12) {
 				r.push(`${He}'s just a little ${girl} – is that even legal?`);
 			} else if (eventSlave.visualAge < 16) {
diff --git a/src/events/RESS/review/subjugationBlues.js b/src/events/RESS/review/subjugationBlues.js
index f231443ec40234adeafa596afa994bd30da42296..6a4e366ec3f577c08f3626cb16012531df70d03e 100644
--- a/src/events/RESS/review/subjugationBlues.js
+++ b/src/events/RESS/review/subjugationBlues.js
@@ -139,9 +139,9 @@ App.Events.RESSSubjugationBlues = class RESSSubjugationBlues extends App.Events.
 			eventSlave.skin = randomRaceSkin(FSSubjugationistRace);
 			setEyeColor(eventSlave, randomRaceEye(FSSubjugationistRace));
 			eventSlave.hColor = randomRaceHair(FSSubjugationistRace);
-			eventSlave.override_Skin = 1;
-			eventSlave.override_Eye_Color = 1;
-			eventSlave.override_H_Color = 1;
+			eventSlave.overrideSkin = 1;
+			eventSlave.overrideEyeColor = 1;
+			eventSlave.overrideHColor = 1;
 			r.toParagraph();
 			return r.container();
 		}
diff --git a/src/events/intro/arcologySelection.js b/src/events/intro/arcologySelection.js
index 51e395c86afdb65eb7980d057b4031ffe85f1893..1c05ac0d353cb976ee9cd38de6242dfb8005307e 100644
--- a/src/events/intro/arcologySelection.js
+++ b/src/events/intro/arcologySelection.js
@@ -271,7 +271,7 @@ App.Intro.getNameForArcology = function(arcology) {
 		case "FSMaturityPreferentialist":
 			return App.Data.ArcologyNames.MaturityPreferentialist.random();
 		case "FSYouthPreferentialist":
-			if (V.pedo_mode === 1 || V.minimumSlaveAge < 6) {
+			if (V.pedoMode === 1 || V.minimumSlaveAge < 6) {
 				return App.Data.ArcologyNames.YouthPreferentialistLow.random();
 			} else if (V.minimumSlaveAge < 14) {
 				return App.Data.ArcologyNames.YouthPreferentialist.concat(App.Data.ArcologyNames.YouthPreferentialistLow).random();
diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js
index 62b954fe5ad8a59abff2a6da32dba80785cf5ec9..de9b46f9bb673387394234671e040545776df9d1 100644
--- a/src/events/intro/introSummary.js
+++ b/src/events/intro/introSummary.js
@@ -360,7 +360,7 @@ App.Intro.summary = function() {
 		options.addOption("Slave aging", "seeAge")
 			.addValue("Enabled", 1).on().addValue("Celebrate birthdays, but don't age.", 2).addValue("Disabled", 0).off();
 
-		options.addOption("Slave age distribution", "pedo_mode").addComment("In loli mode most new slaves are under the age of 18. May not apply to custom slaves and slaves from specific events.")
+		options.addOption("Slave age distribution", "pedoMode").addComment("In loli mode most new slaves are under the age of 18. May not apply to custom slaves and slaves from specific events.")
 			.addValue("Loli mode", 1, () => V.minimumSlaveAge = 5).addValue("Normal mode", 0);
 
 		V.minimumSlaveAge = Math.clamp(V.minimumSlaveAge, 3, 18);
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 24d7c31976a6e72c50e572355e589290a174bdb0..874873a53c3dcd0622e309e4b65262f40104a591 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -508,12 +508,16 @@ App.UI.Player.assignCareerByAge = function(selection) {
 	return career;
 };
 
-App.UI.Player.refreshmentChoice = function(options) {
+/**
+ * @param {InstanceType<App.UI.OptionsGroup>} options
+ * @param {boolean} blackMarket if true then black market exclusive refreshments will be listed for selection
+ */
+App.UI.Player.refreshmentChoice = function(options, blackMarket = false) {
 	let option = options.addOption("Your preferred refreshment is", "refreshmentType", V.PC);
 	for (const [key, value] of App.Data.player.refreshmentType) {
 		option.addValue(value.name, key, () => { V.PC.refreshment = value.suggestions.values().next().value; } );
 	}
-	let comment = `Flavor only; no mechanical effect. If entering a custom refreshment, please assign proper usage.`;
+	let comment = `${blackMarket && (V.PC.ovaries === 1 || V.PC.mpreg === 1) ? "" : "Flavor only; no mechanical effect. "}If entering a custom refreshment, please assign proper usage.`;
 	if (V.PC.refreshmentType === 0) {
 		comment += ` "Smoked" must fit into the following sentence: "I smoked a ${V.PC.refreshment}" to fit events properly.`;
 	} else if (V.PC.refreshmentType === 5) {
@@ -527,8 +531,16 @@ App.UI.Player.refreshmentChoice = function(options) {
 	for (const refreshment of App.Data.player.refreshmentType.get(V.PC.refreshmentType).suggestions) {
 		option.addValue(capFirstChar(refreshment), refreshment);
 	}
+	if (V.PC.refreshmentType === 1 && blackMarket && (V.PC.ovaries === 1 || V.PC.mpreg === 1)) {
+		option.addValue("Fertility Syrup", "fertility syrup");
+	} else if (V.PC.refreshmentType === 4 && blackMarket && (V.PC.ovaries === 1 || V.PC.mpreg === 1)) {
+		option.addValue("Fertility Booster", "fertility booster");
+	}
 };
 
+/**
+ * @param {InstanceType<App.UI.OptionsGroup>} options
+ */
 App.UI.Player.names = function(options) {
 	options.addCustomOption(`Everyone calls you <b>${PlayerName()}.</b>`);
 	options.addOption("Your given name is", "slaveName", V.PC).showTextBox();
@@ -581,7 +593,7 @@ App.UI.Player.design = function() {
 				.addRange(55, 65, "<", "Well into middle age").addRange(70, 65, ">=", "Old");
 
 			options.addOption(`Your birthday was <strong>${V.PC.birthWeek}</strong> weeks ago.`, "birthWeek", V.PC).showTextBox();
-			option = options.addCustomOption()
+			option = options.addCustomOption("")
 				.addButton(
 					"Adjust body to match age",
 					() => App.UI.Player.syncAgeBasedParameters(),
@@ -1278,6 +1290,7 @@ App.UI.Player.design = function() {
 			["Engineering beginner", 30],
 			["Basic engineer", 0],
 			["Gingerbread house", -10],
+			// cSpell:disable-next-line
 			["Knot tyer", -30],
 			["You can use glue", -50],
 			["You aren't handy", -70],
diff --git a/src/events/intro/slaveAgeIntro.js b/src/events/intro/slaveAgeIntro.js
index 974393450cd8fa2e517763fa6dc2dd5f0ac13e15..cb7e606dfb291a2a3a5dd911a39a2fbe7885e7ce 100644
--- a/src/events/intro/slaveAgeIntro.js
+++ b/src/events/intro/slaveAgeIntro.js
@@ -6,7 +6,7 @@ App.Intro.slaveAgeIntro = function() {
 	makeOption([
 		App.UI.DOM.passageLink("No.", "PC Body Intro", () => {
 			V.minimumSlaveAge = 18;
-			V.pedo_mode = 0;
+			V.pedoMode = 0;
 		}),
 		App.UI.DOM.makeElement("span", `All slaves will be at least 18 years old, and slavery of children will be illegal in the Free Cities.`, "note")
 	]);
@@ -15,7 +15,7 @@ App.Intro.slaveAgeIntro = function() {
 		`Yes, I wish to see girls as young as`,
 		App.UI.DOM.makeTextBox(V.minimumSlaveAge, (v) => V.minimumSlaveAge = v, true),
 		App.UI.DOM.passageLink("Continue.", "PC Body Intro", () => {
-			V.pedo_mode = 0;
+			V.pedoMode = 0;
 		}),
 	]);
 
@@ -23,7 +23,7 @@ App.Intro.slaveAgeIntro = function() {
 		`Yes, and`,
 		App.UI.DOM.passageLink("I just want lots of lolis.", "PC Body Intro", () => {
 			V.minimumSlaveAge = 3;
-			V.pedo_mode = 1;
+			V.pedoMode = 1;
 		}),
 		App.UI.DOM.makeElement("span", `Nearly all randomly generated slaves will be under the age of 18, although custom slaves and slaves related to specific events may be older.`, "note")
 	]);
@@ -32,7 +32,7 @@ App.Intro.slaveAgeIntro = function() {
 		`Yes,`,
 		App.UI.DOM.passageLink("I wish to see them grow up and become fertile.", "PC Body Intro", () => {
 			V.minimumSlaveAge = 3;
-			V.pedo_mode = 0;
+			V.pedoMode = 0;
 			V.precociousPuberty = 1;
 			V.loliGrow = 1;
 			V.fertilityAge = 10;
diff --git a/src/events/nonRandom/mercs/pSlaveMedic.js b/src/events/nonRandom/mercs/pSlaveMedic.js
index 4e3cad7ca87fe638dbb15c15cda7afc107665030..a094647c0aa4ae78ab73293c43fbfe51d82b0ed2 100644
--- a/src/events/nonRandom/mercs/pSlaveMedic.js
+++ b/src/events/nonRandom/mercs/pSlaveMedic.js
@@ -4,8 +4,8 @@ App.Events.PSlaveMedic = class PSlaveMedic extends App.Events.BaseEvent {
 
 		V.nextButton = "Continue";
 
-		const minAge = (V.pedo_mode === 1) ? V.minimumSlaveAge : 18;
-		const maxAge = (V.pedo_mode === 1) ? 25 : 42;
+		const minAge = (V.pedoMode === 1) ? V.minimumSlaveAge : 18;
+		const maxAge = (V.pedoMode === 1) ? 25 : 42;
 
 		const genParam = {minAge: minAge, maxAge: maxAge, disableDisability: 1};
 		let slave;
@@ -25,7 +25,7 @@ App.Events.PSlaveMedic = class PSlaveMedic extends App.Events.BaseEvent {
 			slave.ovaries = 1;
 			slave.skill.vaginal = 35;
 		}
-		if (V.pedo_mode === 1) {
+		if (V.pedoMode === 1) {
 			slave.sexualQuirk = "caring";
 			slave.intelligenceImplant = 15;
 			if (slave.physicalAge >= 12) {
@@ -83,7 +83,7 @@ App.Events.PSlaveMedic = class PSlaveMedic extends App.Events.BaseEvent {
 			he, his, him, himself, girl,
 		} = getPronouns(slave);
 
-		if (V.pedo_mode === 1 && V.seeDicks < 100) {
+		if (V.pedoMode === 1 && V.seeDicks < 100) {
 			r.push(`You make a habit of dropping in on your mercenaries whenever you get the chance. You have regular meetings with their grizzled captain, of course, but turning up unannounced to get to know them is simply a matter of self-preservation. The better they like you, the more likely they are to think of more than their pay when deciding how to hazard themselves on your behalf. When you enter the lounge of their`);
 			if (V.barracks) {
 				r.push(`barracks,`);
@@ -101,7 +101,7 @@ App.Events.PSlaveMedic = class PSlaveMedic extends App.Events.BaseEvent {
 				r.push(`main living area,`);
 			}
 			r.push(`you see ${slave.slaveName} bending over a mercenary with most of his armor stripped off. ${He}'s the ${aNational(slave.nationality)} nurse they captured and enslaved, and ${he} seems to be doing pretty well in ${his} new life. ${He} seems to be checking the sutures on a minor wound to the man's flank. "Don't squirm," ${he} says quietly. "I'll get you off when I've checked this." He chuckles and holds still; ${he} redresses the wound, stands up, and strips off ${his} fatigue pants.`);
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				r.push(`${He}'s quite youthful, nimble and knows just how to manage ${his} impressive asset without it touching ${his} charge.`);
 			} else {
 				r.push(`${He}'s no longer young, but ${his} ${slave.skin} legs are pretty enough.`);
diff --git a/src/events/nonRandom/mercs/pSnatchAndGrabResult.js b/src/events/nonRandom/mercs/pSnatchAndGrabResult.js
index 6ea82caeec07167fb70743c75a1506c3240ed500..f85361734e80d765ec5cff08c35e5b5efeaad4b9 100644
--- a/src/events/nonRandom/mercs/pSnatchAndGrabResult.js
+++ b/src/events/nonRandom/mercs/pSnatchAndGrabResult.js
@@ -11,8 +11,8 @@ App.Events.PSnatchAndGrabResult = class PSnatchAndGrabResult extends App.Events.
 		V.nextButton = "Continue";
 		V.eventResults.snatch = 2;
 
-		const snatched = GenerateNewSlave("XX", {maxAge: (V.pedo_mode === 1 ? V.minimumSlaveAge : 18), disableDisability: 1});
-		if (V.pedo_mode === 1) {
+		const snatched = GenerateNewSlave("XX", {maxAge: (V.pedoMode === 1 ? V.minimumSlaveAge : 18), disableDisability: 1});
+		if (V.pedoMode === 1) {
 			snatched.boobShape = "saggy";
 			snatched.nipples = "partially inverted";
 			snatched.areolae = 3;
@@ -33,7 +33,7 @@ App.Events.PSnatchAndGrabResult = class PSnatchAndGrabResult extends App.Events.
 			snatched.waist = -75;
 		}
 
-		snatched.faceShape = (V.pedo_mode === 1 ? "exotic" : "androgynous");
+		snatched.faceShape = (V.pedoMode === 1 ? "exotic" : "androgynous");
 		snatched.anus = 0;
 		if (V.seeDicks !== 100) {
 			snatched.vagina = 0;
@@ -44,7 +44,7 @@ App.Events.PSnatchAndGrabResult = class PSnatchAndGrabResult extends App.Events.
 			snatched.balls = 0;
 			snatched.scrotum = 0;
 		} else if (V.seeDicks > 75) {
-			snatched.dick = (V.pedo_mode === 1 ? 2 : 6);
+			snatched.dick = (V.pedoMode === 1 ? 2 : 6);
 			if (snatched.foreskin > 0) {
 				snatched.foreskin = snatched.dick;
 			}
@@ -57,8 +57,8 @@ App.Events.PSnatchAndGrabResult = class PSnatchAndGrabResult extends App.Events.
 			snatched.scrotum = snatched.balls;
 		}
 
-		snatched.boobs += (V.pedo_mode === 1 ? 6000 : 200);
-		snatched.butt += (V.pedo_mode === 1 ? 1 : 2);
+		snatched.boobs += (V.pedoMode === 1 ? 6000 : 200);
+		snatched.butt += (V.pedoMode === 1 ? 1 : 2);
 		snatched.origin = "$He is your share of a raid on an illegal laboratory by your mercenaries.";
 		snatched.career = "a slave";
 		snatched.devotion = 100;
diff --git a/src/events/nonRandom/pAidResult.js b/src/events/nonRandom/pAidResult.js
index 5be299dbe3ac013f1cb3d14709aedebab9af98a4..883e1e3dd2e709f2cf55b3b5186393bd9e4e696d 100644
--- a/src/events/nonRandom/pAidResult.js
+++ b/src/events/nonRandom/pAidResult.js
@@ -152,7 +152,7 @@ App.Events.pAidResult = class pAidResult extends App.Events.BaseEvent {
 		} else if (V.eventResults.aidTarget === "maternity") {
 			for (let i = 0; i < 4; i++) {
 				const pram = {mature: 0, disableDisability: 1, ageOverridesPedoMode: 1};
-				if (V.pedo_mode === 1) {
+				if (V.pedoMode === 1) {
 					pram.minAge = V.fertilityAge;
 				} else {
 					pram.minAge = 20;
@@ -278,7 +278,7 @@ App.Events.pAidResult = class pAidResult extends App.Events.BaseEvent {
 			pram.disableDisability = 1;
 			pram.ageOverridesPedoMode = 1;
 			pram.race = "white";
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = 18;
 				pram.maxAge = 24;
 			} else {
@@ -322,7 +322,7 @@ App.Events.pAidResult = class pAidResult extends App.Events.BaseEvent {
 			newSlaves.push(missLeader);
 
 			/* preggo */
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = 16;
 				pram.maxAge = 18;
 			} else {
@@ -365,7 +365,7 @@ App.Events.pAidResult = class pAidResult extends App.Events.BaseEvent {
 			newSlaves.push(slave);
 
 			/* post preggo */
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = 16;
 				pram.maxAge = 18;
 			} else {
diff --git a/src/events/nonRandom/pregnancyNotice.js b/src/events/nonRandom/pregnancyNotice.js
index 870d9611d84de359175f2acdfeccf7cfe3bc5dc5..65a51e637fdaa6819d7b02ede690a2502a76387c 100644
--- a/src/events/nonRandom/pregnancyNotice.js
+++ b/src/events/nonRandom/pregnancyNotice.js
@@ -310,7 +310,6 @@ App.Events.PregnancyNotice.Event = (node, mother) => {
 			`${num(transplantedBabyCount)} of them ${(transplantedBabyCount === 1) ? "was": "are"} transplanted.`),
 		);
 	}
-	// TODO:@franklygeorge mother's (If not PC) info (Same as main screen).
 	// TODO:@franklygeorge list out each group of babies and how old they are (See how the slave description does it for superfetation)
 
 	let unprocessedDiv = App.UI.DOM.makeElement("div");
diff --git a/src/events/nonRandom/rival/pRivalryCapture.js b/src/events/nonRandom/rival/pRivalryCapture.js
index ef7f3317931b68282d4983d907e0b3bc1e3391d9..8992ebf0f66d2e52cacf398c48ed99bd0312c9d3 100644
--- a/src/events/nonRandom/rival/pRivalryCapture.js
+++ b/src/events/nonRandom/rival/pRivalryCapture.js
@@ -82,7 +82,7 @@ globalThis.pRivalryCapture = function(condition) {
 			rivalTypeArray.push("masculine");
 			rivalTypeArray.push("micropenis");
 			rivalTypeArray.push("cum addict");
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				rivalTypeArray.push("hung shota");
 			}
 		} else {
@@ -93,7 +93,7 @@ globalThis.pRivalryCapture = function(condition) {
 			if (V.seePreg === 1) {
 				rivalTypeArray.push("breeder");
 			}
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				rivalTypeArray.push("oppai loli");
 			}
 		}
@@ -314,7 +314,7 @@ globalThis.pRivalryCapture = function(condition) {
 				slave.hLength = 5;
 				break;
 			case "breeder":
-				if (V.pedo_mode === 1) {
+				if (V.pedoMode === 1) {
 					minAge = (V.fertilityAge + 6);
 					pedo = 1;
 					/* Old enough to have been pregnant many times. */
diff --git a/src/events/nonRandom/rival/pRivalryHostage.js b/src/events/nonRandom/rival/pRivalryHostage.js
index 952e20a203cee0615929b9ab14be1113a1b19b77..9255b0b8767a893c54259e32d27d135e1b23d77c 100644
--- a/src/events/nonRandom/rival/pRivalryHostage.js
+++ b/src/events/nonRandom/rival/pRivalryHostage.js
@@ -540,7 +540,7 @@ App.Events.pRivalryHostage = function() {
 				},
 				servant() {
 					setHostageAge(18, 20);
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						params.minAge = Math.min(params.minAge, 12);
 						params.maxAge = Math.min(params.maxAge, 18);
 					}
@@ -592,7 +592,7 @@ App.Events.pRivalryHostage = function() {
 				},
 				BlackHat() {
 					setHostageAge(18, 21);
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						params.minAge = Math.min(params.minAge, 12);
 						params.maxAge = Math.min(params.maxAge, 18);
 					}
@@ -714,8 +714,8 @@ App.Events.pRivalryHostage = function() {
 				},
 				"arcology owner"() {
 					// fixed age range for this one
-					params.minAge = V.pedo_mode ? 16 : 36;
-					params.maxAge = V.pedo_mode ? 18 : 39;
+					params.minAge = V.pedoMode ? 16 : 36;
+					params.maxAge = V.pedoMode ? 18 : 39;
 					const slave = GenerateNewSlave("XX", params);
 					setCommonProperties(slave);
 					slave.career = "a leading arcology citizen";
diff --git a/src/events/reRecruit/blessedVessel.js b/src/events/reRecruit/blessedVessel.js
index ad9269762cbd0113c1fd6d29dc230241e9c7df2a..80e84d394d74925a067bb77f06e94748e4c9e88f 100644
--- a/src/events/reRecruit/blessedVessel.js
+++ b/src/events/reRecruit/blessedVessel.js
@@ -87,7 +87,7 @@ App.Events.recBlessedVessel = class recBlessedVessel extends App.Events.BaseEven
 		function makeSlave() {
 			const slave = GenerateNewSlave("XX", {
 				minAge: V.fertilityAge,
-				maxAge: (V.pedo_mode === 1 ? 18 : 22),
+				maxAge: (V.pedoMode === 1 ? 18 : 22),
 				ageOverridesPedoMode: 1, disableDisability: 1
 			});
 			slave.origin = "$He was the holy vessel of a new religion and 'blessed' by their Lord to bring forth His servants.";
diff --git a/src/events/reRecruit/blessedVirgin.js b/src/events/reRecruit/blessedVirgin.js
index a6cb1427c08520c76fefe9a96d88603949b83fcd..4978a62f00e0e5e2e168d8ea4c88f04e7932831b 100644
--- a/src/events/reRecruit/blessedVirgin.js
+++ b/src/events/reRecruit/blessedVirgin.js
@@ -86,7 +86,7 @@ App.Events.recBlessedVirgin = class recBlessedVirgin extends App.Events.BaseEven
 		function makeSlave() {
 			const slave = GenerateNewSlave("XX", {
 				minAge: V.fertilityAge,
-				maxAge: (V.pedo_mode === 1 ? 18 : 22),
+				maxAge: (V.pedoMode === 1 ? 18 : 22),
 				ageOverridesPedoMode: 1, disableDisability: 1
 			});
 			slave.origin = "$He was the virgin figurehead of a new religion and 'blessed' by their Lord.";
diff --git a/src/events/reRecruit/blindHomeless.js b/src/events/reRecruit/blindHomeless.js
index 49c2ff45777d9390ad3717a84ec53ae0c1cb0fa6..397fe0ba1e2fa61bb73995d8e82ce1e8abf5d385 100644
--- a/src/events/reRecruit/blindHomeless.js
+++ b/src/events/reRecruit/blindHomeless.js
@@ -85,7 +85,7 @@ App.Events.recBlindHomeless = class recBlindHomeless extends App.Events.BaseEven
 			pram.ageOverridesPedoMode = 1;
 			pram.disableDisability = 1;
 			pram.race = "nonslave";
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = V.fertilityAge;
 			} else {
 				pram.minAge = 18;
diff --git a/src/events/reRecruit/desperatePreg.js b/src/events/reRecruit/desperatePreg.js
index 18f850f6643efe23b3326496911ad09b03adda5c..d5275fda0d4c33cc83c5bf347341397ef4455463 100644
--- a/src/events/reRecruit/desperatePreg.js
+++ b/src/events/reRecruit/desperatePreg.js
@@ -67,7 +67,7 @@ App.Events.recDesperatePreg = class recDesperatePreg extends App.Events.BaseEven
 			pram.ageOverridesPedoMode = 1;
 			pram.disableDisability = 1;
 			pram.race = "nonslave";
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = V.fertilityAge;
 			} else if (V.minimumSlaveAge < 18) {
 				pram.minAge = Math.min(25, V.fertilityAge);
diff --git a/src/events/reRecruit/embryoAppropriation.js b/src/events/reRecruit/embryoAppropriation.js
index 51c3eeda6bd88e819bb0e92a14db20e7a4d124ab..f86611ee1428cf42e3a795cfc8f8f4dbdd461d9d 100644
--- a/src/events/reRecruit/embryoAppropriation.js
+++ b/src/events/reRecruit/embryoAppropriation.js
@@ -80,7 +80,7 @@ App.Events.recEmbryoAppropriation = class recEmbryoAppropriation extends App.Eve
 		function makeSlave() {
 			const pram = new GenerateNewSlavePram();
 			pram.minAge = Math.max(V.fertilityAge, 8);
-			pram.maxAge = (V.pedo_mode === 1 ? 16 : 22);
+			pram.maxAge = (V.pedoMode === 1 ? 16 : 22);
 			pram.ageOverridesPedoMode = 1;
 			pram.race = "nonslave";
 			const slave = GenerateNewSlave("XX", pram);
diff --git a/src/events/reRecruit/farmBull.js b/src/events/reRecruit/farmBull.js
index 1833da7799dcc2a613bd3a9696dbda33aef5cfbc..c2650900aebb78798ac50854b5a01bc988dcd670 100644
--- a/src/events/reRecruit/farmBull.js
+++ b/src/events/reRecruit/farmBull.js
@@ -56,7 +56,7 @@ App.Events.recFarmBull = class recFarmBull extends App.Events.BaseEvent {
 			const pram = new GenerateNewSlavePram();
 			pram.maxAge = 15;
 			pram.disableDisability = 1;
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = V.potencyAge;
 				pram.ageOverridesPedoMode = 1;
 			} else {
diff --git a/src/events/reRecruit/farmCow.js b/src/events/reRecruit/farmCow.js
index 085e0fa98eae96adfedb0deff4cb40ef87c0834f..7ad20ffc8e8928070879308efcb2fca34ea12562 100644
--- a/src/events/reRecruit/farmCow.js
+++ b/src/events/reRecruit/farmCow.js
@@ -57,7 +57,7 @@ App.Events.recFarmCow = class recFarmCow extends App.Events.BaseEvent {
 			const pram = new GenerateNewSlavePram();
 			pram.maxAge = 30;
 			pram.disableDisability = 1;
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = V.fertilityAge + 4;
 				pram.ageOverridesPedoMode = 1;
 			} else {
diff --git a/src/events/reRecruit/femaleRecruit.js b/src/events/reRecruit/femaleRecruit.js
index 6deaad1e45bc748d87ac4eb73722425d3549d62c..dc316d307b8185512e73e854f3df798f09ba423d 100644
--- a/src/events/reRecruit/femaleRecruit.js
+++ b/src/events/reRecruit/femaleRecruit.js
@@ -81,7 +81,7 @@ App.Events.recFemaleRecruit = class recFemaleRecruit extends App.Events.BaseEven
 
 		function makeSlave() {
 			const pram = new GenerateNewSlavePram();
-			pram.minAge = (V.pedo_mode === 1 ? 11 : 16);
+			pram.minAge = (V.pedoMode === 1 ? 11 : 16);
 			pram.maxAge = 19;
 			pram.ageOverridesPedoMode = 1;
 			pram.disableDisability = 1;
diff --git a/src/events/reRecruit/femaleSD2.js b/src/events/reRecruit/femaleSD2.js
index 71564dec0836a6e9db14dbaa7931054180a27816..48dd74a73d78b2820898af6e17a541588fdc98f9 100644
--- a/src/events/reRecruit/femaleSD2.js
+++ b/src/events/reRecruit/femaleSD2.js
@@ -122,7 +122,7 @@ App.Events.recFemaleSD2 = class recFemaleSD2 extends App.Events.BaseEvent {
 			slave.piercing.vagina.weight = 1;
 			slave.piercing.eyebrow.weight = 1;
 			slave.piercing.navel.weight = 1;
-			slave.override_H_Color = 1;
+			slave.overrideHColor = 1;
 			slave.hColor = either("blue", "green", "purple");
 			return slave;
 		}
diff --git a/src/events/reRecruit/maleRecruit.js b/src/events/reRecruit/maleRecruit.js
index dc43f6bdad26b06c51db592a84397e73420245d9..d8c20d59bb173d59bcd5fcba333b0f00a3bf9e2e 100644
--- a/src/events/reRecruit/maleRecruit.js
+++ b/src/events/reRecruit/maleRecruit.js
@@ -78,7 +78,7 @@ App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
 
 		function makeSlave() {
 			const pram = new GenerateNewSlavePram();
-			pram.minAge = (V.pedo_mode === 1 ? 11 : 16);
+			pram.minAge = (V.pedoMode === 1 ? 11 : 16);
 			pram.maxAge = 19;
 			pram.ageOverridesPedoMode = 1;
 			pram.disableDisability = 1;
diff --git a/src/events/reRecruit/princelyBetrayal.js b/src/events/reRecruit/princelyBetrayal.js
index 067448a3852253c70339e10e60b4195f6468894c..1a6c4c82c8019be2289a72be3925bdc65bcbc1cd 100644
--- a/src/events/reRecruit/princelyBetrayal.js
+++ b/src/events/reRecruit/princelyBetrayal.js
@@ -60,8 +60,8 @@ App.Events.recPrincelyBetrayal = class recPrincelyBetrayal extends App.Events.Ba
 
 		function makeSlave() {
 			const slave = GenerateNewSlave("XY", {
-				minAge: (V.pedo_mode === 1 ? 16 : 20),
-				maxAge: (V.pedo_mode === 1 ? 20 : 35),
+				minAge: (V.pedoMode === 1 ? 16 : 20),
+				maxAge: (V.pedoMode === 1 ? 20 : 35),
 				ageOverridesPedoMode: 1, disableDisability: 1
 			});
 			slave.face = random(80, 100);
diff --git a/src/events/reRecruit/racerLoser.js b/src/events/reRecruit/racerLoser.js
index 61677dcbc57f1225a6958ba483120c8f00521ebb..50e6a5b8fc4028997f76e37ad78d33983f425d3e 100644
--- a/src/events/reRecruit/racerLoser.js
+++ b/src/events/reRecruit/racerLoser.js
@@ -55,7 +55,7 @@ App.Events.recRacerLoser = class recRacerLoser extends App.Events.BaseEvent {
 		function makeSlave() {
 			const pram = new GenerateNewSlavePram();
 			pram.disableDisability = 1;
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				pram.minAge = V.fertilityAge;
 				pram.ageOverridesPedoMode = 1;
 			} else {
diff --git a/src/events/reRecruit/whoreRecruit.js b/src/events/reRecruit/whoreRecruit.js
index 9f57776c34b0fb31b13bb4cb59e41298520f8868..4e4ff7afc36eadf6aaf1a68f7bdb86edaa9c2a9b 100644
--- a/src/events/reRecruit/whoreRecruit.js
+++ b/src/events/reRecruit/whoreRecruit.js
@@ -72,7 +72,7 @@ App.Events.recWhoreRecruit = class recWhoreRecruit extends App.Events.BaseEvent
 			const pram = new GenerateNewSlavePram();
 			pram.disableDisability = 1;
 			pram.race = "nonslave";
-			if (V.minimumSlaveAge < 14 && V.pedo_mode === 0) {
+			if (V.minimumSlaveAge < 14 && V.pedoMode === 0) {
 				pram.minAge = random(V.minimumSlaveAge, 14);
 			}
 			const slave = GenerateNewSlave("XX", pram);
diff --git a/src/events/recETS/recetsDesperateBroodmother.js b/src/events/recETS/recetsDesperateBroodmother.js
index b8480be58854944bbfc644a1bb1e2b8fe5f88ba8..1043ab0f921eebe5516912341a0344d9a7b05bf9 100644
--- a/src/events/recETS/recetsDesperateBroodmother.js
+++ b/src/events/recETS/recetsDesperateBroodmother.js
@@ -17,7 +17,7 @@ App.Events.recetsDesperateBroodmother = class recetsDesperateBroodmother extends
 		App.UI.StoryCaption.encyclopedia = "Enslaving People";
 		const contractCost = 1000;
 		const pram = {
-			minAge: V.fertilityAge + 3, maxAge: (V.pedo_mode === 1 ? 18 : 24), disableDisability: 1, ageOverridesPedoMode: 1
+			minAge: V.fertilityAge + 3, maxAge: (V.pedoMode === 1 ? 18 : 24), disableDisability: 1, ageOverridesPedoMode: 1
 		};
 		const mother = GenerateNewSlave("XX", pram);
 		mother.origin = "$He begged to be enslaved in a desperate attempt to provide for $his many children.";
diff --git a/src/events/recFS/recfsPastoralist.js b/src/events/recFS/recfsPastoralist.js
index 3b85dbfe4b03cc2e82ccdf62c66357a90abe57dc..4e060a4abebed42ba090f1b77c1d4b2d73fc7e4f 100644
--- a/src/events/recFS/recfsPastoralist.js
+++ b/src/events/recFS/recfsPastoralist.js
@@ -10,7 +10,7 @@ App.Events.recFSPastoralist = class recFSPastoralist extends App.Events.BaseEven
 		let r = [];
 		const contractCost = sexSlaveContractCost();
 		const pram = {disableDisability: 1};
-		if (V.pedo_mode === 1) {
+		if (V.pedoMode === 1) {
 			pram.minAge = V.fertilityAge;
 			pram.maxAge = 21;
 			pram.ageOverridesPedoMode = 1; /* Can lactate. */
diff --git a/src/events/recFS/recfsRepopulationEfforts.js b/src/events/recFS/recfsRepopulationEfforts.js
index 1fc1d9ce2101ef1abe2af7c513b07bf891fb7e3f..9385466685d4261aae0d062ec001b47516cae866 100644
--- a/src/events/recFS/recfsRepopulationEfforts.js
+++ b/src/events/recFS/recfsRepopulationEfforts.js
@@ -9,7 +9,7 @@ App.Events.recFSRepopulationEfforts = class recFSRepopulationEfforts extends App
 	execute(node) {
 		let r = [];
 		const pram = {disableDisability: 1};
-		if (V.pedo_mode === 1) {
+		if (V.pedoMode === 1) {
 			pram.minAge = V.fertilityAge;
 			pram.maxAge = 18;
 			pram.ageOverridesPedoMode = 1;
diff --git a/src/events/recFS/recfsRepopulationEffortsTwo.js b/src/events/recFS/recfsRepopulationEffortsTwo.js
index 409d6980d58c1fa98049739e39f9df0c01c5ed9c..7d9f71c2dec51324062320dc6fafff65c78ed460 100644
--- a/src/events/recFS/recfsRepopulationEffortsTwo.js
+++ b/src/events/recFS/recfsRepopulationEffortsTwo.js
@@ -16,7 +16,7 @@ App.Events.recFSRepopulationEffortsTwo = class recFSRepopulationEffortsTwo exten
 	execute(node) {
 		let r = [];
 		const pram = {disableDisability: 1};
-		if (V.pedo_mode === 1) {
+		if (V.pedoMode === 1) {
 			pram.minAge = V.fertilityAge;
 			pram.maxAge = 18;
 			pram.ageOverridesPedoMode = 1;
diff --git a/src/events/scheduled/seRaiding.js b/src/events/scheduled/seRaiding.js
index 44f3e0e106a4c7e2c1dc47024c5988200bca4253..f256a133aa07c10a7c9d26e0fb8aae6937054705 100644
--- a/src/events/scheduled/seRaiding.js
+++ b/src/events/scheduled/seRaiding.js
@@ -158,7 +158,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					r.push(`is the recording studio of a sleepy old world town's local news channel. The news channel itself is unremarkable, a quaint reminder of the tedious life of a small town, save for its news anchor. The anchor stands in stark contrast to ${his} fellow residents by the abundance of ${his} plastic surgery, likely an attempt to cling to youth lest ${his} coveted anchor position be snatched away by a younger ${woman}.`);
 					break;
 				case "classical dancer":
-					r.push(`is the performing arts theater at the heart of an aristocratic old world city. The theater itself would usually not be considered a choice target, except that tonight its stage is graced by a renowned dance troupe. The jewel of the troupe's cast is a young ${girl}${(V.pedo_mode === 0) ? `, barely past ${his} majority,` : ``} whose performance has been said to bring tears to the eyes of audiences the world over.`);
+					r.push(`is the performing arts theater at the heart of an aristocratic old world city. The theater itself would usually not be considered a choice target, except that tonight its stage is graced by a renowned dance troupe. The jewel of the troupe's cast is a young ${girl}${(V.pedoMode === 0) ? `, barely past ${his} majority,` : ``} whose performance has been said to bring tears to the eyes of audiences the world over.`);
 					break;
 				case "law enforcement officer":
 					r.push(`is the precinct of a small old world town's police department. The department is notoriously underfunded and unlikely to be particularly well staffed. Nonetheless, one of the officers is well known in the area for ${his} adherence to the letter of the law despite ${his} small town cop status.`);
@@ -493,7 +493,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					break;
 				case "military soldier":
 					pram = {disableDisability: 1, minAge: 18};
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						pram.ageOverridesPedoMode = 1;
 					} else {
 						pram.maxAge = 25;
@@ -651,7 +651,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent {
 					break;
 				case "law enforcement officer":
 					pram = {minAge: 18, disableDisability: 1};
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						pram.ageOverridesPedoMode = 1;
 					} else {
 						pram.maxAge = 25;
diff --git a/src/events/scheduled/seTheSirenStrikesBack.js b/src/events/scheduled/seTheSirenStrikesBack.js
index 51f6991c31efcdb260f77c9d435e2984f55ef46f..8bb5b96d3586695e060006db6b4ad7a9a7a871fc 100644
--- a/src/events/scheduled/seTheSirenStrikesBack.js
+++ b/src/events/scheduled/seTheSirenStrikesBack.js
@@ -18,7 +18,7 @@ App.Events.SETheSirenStrikesBack = class SETheSirenStrikesBack extends App.Event
 
 		const swan = getSlave(this.actors[0]); // may be undefined, if the swan was sold/killed since recPaternalistSwanSong
 
-		const minAge = (V.pedo_mode === 1) ? 16 : 30;
+		const minAge = (V.pedoMode === 1) ? 16 : 30;
 		const producer = GenerateNewSlave(null, {
 			minAge: minAge, maxAge: 40, ageOverridesPedoMode: 1, disableDisability: 1
 		});
diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js
index abbb52e96bba25f4c6ad710d9815882d7093aa96..3a556f8ec51c0d703b66c64708cf7a2c66c40267 100644
--- a/src/facilities/nursery/utils/nurseryUtils.js
+++ b/src/facilities/nursery/utils/nurseryUtils.js
@@ -245,15 +245,13 @@ App.Facilities.Nursery.infantToChild = function infantToChild(child) {
 	child.origSkin = child.skin;
 	child.ovaries = child.genes === "XX" ? 1 : 0;
 	child.ovaryAge = child.actualAge;
-	/* eslint-disable camelcase */
-	child.override_Arm_H_Color = 0;
-	child.override_Brow_H_Color = 0;
-	child.override_Eye_Color = 0;
-	child.override_H_Color = 0;
-	child.override_Pubic_H_Color = 0;
-	child.override_Race = 0;
-	child.override_Skin = 0;
-	/* eslint-enable camelcase */
+	child.overrideArmHColor = 0;
+	child.overrideBrowHColor = 0;
+	child.overrideEyeColor = 0;
+	child.overrideHColor = 0;
+	child.overridePubicHColor = 0;
+	child.overrideRace = 0;
+	child.overrideSkin = 0;
 	child.physicalAge = child.actualAge;
 	child.porn = new App.Entity.SlavePornPerformanceState();
 	child.pregAdaptation = 50;
@@ -602,34 +600,32 @@ App.Facilities.Nursery.newChild = function newChild(child) {
 	child.actualAge = 0;
 	child.birthWeek = 0;
 
-	if (child.override_Race !== 1) {
+	if (child.overrideRace !== 1) {
 		child.origRace = child.race;
 	}
 
-	if (child.override_H_Color !== 1) {
+	if (child.overrideHColor !== 1) {
 		child.hColor = getGeneticHairColor(child);
 	}
-	if (child.override_Arm_H_Color !== 1) {
+	if (child.overrideArmHColor !== 1) {
 		child.underArmHColor = getGeneticHairColor(child);
 	}
-	if (child.override_Pubic_H_Color !== 1) {
+	if (child.overridePubicHColor !== 1) {
 		child.pubicHColor = getGeneticHairColor(child);
 	}
-	if (child.override_Brow_H_Color !== 1) {
+	if (child.overrideBrowHColor !== 1) {
 		child.eyebrowHColor = getGeneticHairColor(child);
 	}
-	if (child.override_Skin !== 1) {
+	if (child.overrideSkin !== 1) {
 		child.origSkin = getGeneticSkinColor(child);
 	}
-	/* eslint-disable camelcase*/
-	child.override_Race = 0;
-	child.override_H_Color = 0;
-	child.override_Arm_H_Color = 0;
-	child.override_Pubic_H_Color = 0;
-	child.override_Brow_H_Color = 0;
-	child.override_Skin = 0;
-	child.override_Eye_Color = 0;
-	/* eslint-enable */
+	child.overrideRace = 0;
+	child.overrideHColor = 0;
+	child.overrideArmHColor = 0;
+	child.overridePubicHColor = 0;
+	child.overrideBrowHColor = 0;
+	child.overrideSkin = 0;
+	child.overrideEyeColor = 0;
 
 	child.arm = {
 		left: new App.Entity.ArmState(),
diff --git a/src/facilities/studio/studio.js b/src/facilities/studio/studio.js
index 021795f0e95376f318df0ea67d5adda1b152956a..acd5714c7cc0ced5749acd0260763f1ab3b3c774 100644
--- a/src/facilities/studio/studio.js
+++ b/src/facilities/studio/studio.js
@@ -173,7 +173,9 @@ App.UI.mediaStudio = function() {
 			r.push(App.UI.DOM.makeElement("span", "not making porn.", ["red"]));
 		}
 		const f2 = new DocumentFragment();
-		App.UI.SlaveSummaryImpl.bits.long.porn_prestige(slave, f2); // why do these bits not just return the element?
+		App.UI.SlaveSummaryImpl.bits.long.pornPrestige(slave, f2); // why do these bits not just return the element?
+		// because returning function handles instead of running all of them makes what the line above is doing much faster
+		// don't do extra processing that you will just throw away in some cases (when it is possible to do so)
 		App.UI.SlaveSummaryImpl.bits.long.face(slave, f2);
 		r.push(f2);
 		if (V.studioFeed && slave.porn.feed) {
diff --git a/src/gui/Encyclopedia/encyclopediaMods.js b/src/gui/Encyclopedia/encyclopediaMods.js
index 413d12e81ce4a210239a3fc75074e8c99ff4182c..9394e8ffc1e9f6abcebb5dbb2e1592983bb0e36b 100644
--- a/src/gui/Encyclopedia/encyclopediaMods.js
+++ b/src/gui/Encyclopedia/encyclopediaMods.js
@@ -569,7 +569,7 @@ App.Encyclopedia.addCategory("Mods", function(currentArticle) {
 	App.Events.addNode(f, ["Special Force Mod:", App.UI.DOM.generateLinksStrip([App.Encyclopedia.link("Details", "Special Force")])], "div");
 	App.Events.addNode(f, ["Security Expansion Mod:", App.UI.DOM.generateLinksStrip([App.Encyclopedia.link("Details", "Security Expansion"), App.Encyclopedia.link("Battles")])], "div");
 
-	if ((V.pedo_mode === 0 && V.ui === "start") || V.pedo_mode) {
+	if ((V.pedoMode === 0 && V.ui === "start") || V.pedoMode) {
 		r.push(App.Encyclopedia.link("Loli Mode"));
 		r.push(App.Encyclopedia.link("Lolis and the Free Cities"));
 	}
diff --git a/src/init/storyInit.js b/src/init/storyInit.js
index 16281efd191cd2d5cda128e9cdbb39997fb49eab..5a8fd83283b239dde628c0fa8ad5a054fecbf9c9 100644
--- a/src/init/storyInit.js
+++ b/src/init/storyInit.js
@@ -54,7 +54,7 @@ App.Intro.init = function() {
 	V.weatherType = 1;
 	V.weatherRemaining = 6;
 	V.prisonCircuitIndex = random(0, V.prisonCircuit.length-1);
-	if (V.prisonCircuit[V.prisonCircuitIndex] === "juvenile detention" && (V.minimumSlaveAge >= 16 || V.pedo_mode === 1)) {
+	if (V.prisonCircuit[V.prisonCircuitIndex] === "juvenile detention" && (V.minimumSlaveAge >= 16 || V.pedoMode === 1)) {
 		V.prisonCircuitIndex = 0; // skip juvenile detention if juvenile slaves are not allowed, or we're in pedo mode (where all prisoners are juvenile)
 	}
 
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index 9016b5e72d6c559621b45ccc23d769d88c8fab11..6836cc83617a725b85d2dd140707ee309c631280 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -6,7 +6,7 @@
 /**
  * this code applies RA rules onto slaves
  * @param {App.Entity.SlaveState} slave
- * @param {DefaultRulesOptions} options
+ * @param {DefaultRulesOptions} [options]
  * @returns {string}
  */
 globalThis.DefaultRules = function(slave, options) {
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index e4380e3979e91d9286363614a4a81aba89b9ab5f..55c0ef2bca173459c3c97bc705db443e3144abbc 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -2835,16 +2835,21 @@ App.Entity.SlaveState = class SlaveState {
 		};
 		/** flavor of their milk*/
 		this.milkFlavor = "none";
-		/* eslint-disable camelcase*/
 		this.NCSyouthening = 0;
-		this.override_Race = 0;
-		this.override_Skin = 0;
-		this.override_Eye_Color = 0;
-		this.override_H_Color = 0;
-		this.override_Pubic_H_Color = 0;
-		this.override_Arm_H_Color = 0;
-		this.override_Brow_H_Color = 0;
-		/* eslint-enable */
+		/** @type {FC.Bool} */
+		this.overrideRace = 0;
+		/** @type {FC.Bool} */
+		this.overrideSkin = 0;
+		/** @type {FC.Bool} */
+		this.overrideEyeColor = 0;
+		/** @type {FC.Bool} */
+		this.overrideHColor = 0;
+		/** @type {FC.Bool} */
+		this.overridePubicHColor = 0;
+		/** @type {FC.Bool} */
+		this.overrideArmHColor = 0;
+		/** @type {FC.Bool} */
+		this.overrideBrowHColor = 0;
 		/** erratic weight gain
 		 *
 		 * 0: stable; 1: gaining; -1: losing */
diff --git a/src/js/familyTreeJS.js b/src/js/familyTreeJS.js
index fbacccc5e9dded3bd5ce1655a6b8ab48f0129c7f..f958b4fe23051737b5ec2db1a87be67a565624a6 100644
--- a/src/js/familyTreeJS.js
+++ b/src/js/familyTreeJS.js
@@ -1,4 +1,3 @@
-/* eslint-disable camelcase */
 // cSpell:ignore ltype, dkeys, mkeys, ssym, ftree
 
 /**
@@ -106,11 +105,11 @@ globalThis.renderFamilyTree = function(slaves, filterID) {
 			})
 			.attr('class', 'node-text')
 			.style('fill', function(d) {
-				if (d.is_mother && d.is_father) {
+				if (d.isMother && d.isFather) {
 					return '#b84dff';
-				} else if (d.is_father) {
+				} else if (d.isFather) {
 					return '#00ffff';
-				} else if (d.is_mother) {
+				} else if (d.isMother) {
 					return '#ff3399';
 				} else if (d.unborn) {
 					return '#a3a3c2';
@@ -159,9 +158,9 @@ globalThis.renderFamilyTree = function(slaves, filterID) {
  * @param {number} filterID
  */
 globalThis.buildFamilyTree = function(slaves, filterID) {
-	let family_graph = {nodes: [], links: []};
-	let node_lookup = {};
-	let preset_lookup = {
+	let familyGraph = {nodes: [], links: []};
+	let nodeLookup = {};
+	let presetLookup = {
 		'-2': 'A citizen',
 		'-3': 'Former Master',
 		'-4': 'An arcology owner',
@@ -176,7 +175,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 	let kids = {};
 
 	const realPC = slaves.deleteWith(s => s.ID === -1).first() || V.PC;
-	let fake_pc = {
+	let fakePC = {
 		slaveName: `${realPC.slaveName}(You)`,
 		mother: realPC.mother,
 		father: realPC.father,
@@ -184,7 +183,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 		vagina: realPC.vagina,
 		ID: realPC.ID
 	};
-	let charList = [fake_pc].concat(slaves).concat(V.incubator.tanks);
+	let charList = [fakePC].concat(slaves).concat(V.incubator.tanks);
 
 	let unborn = {};
 	for (const child of V.incubator.tanks) {
@@ -225,7 +224,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 					ID: mom,
 					mother: missing.mother,
 					father: missing.father,
-					is_mother: true,
+					isMother: true,
 					dick: missing.dick,
 					vagina: missing.vagina,
 					slaveName: missing.slaveName
@@ -236,15 +235,15 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 				}
 				outmoms[mom].push(character.slaveName);
 			}
-		} else if (mom < 0 && typeof preset_lookup[mom] !== 'undefined' && !haveChar(mom)) {
+		} else if (mom < 0 && typeof presetLookup[mom] !== 'undefined' && !haveChar(mom)) {
 			charList.push({
 				ID: mom,
 				mother: 0,
 				father: 0,
-				is_father: true,
+				isFather: true,
 				dick: 0,
 				vagina: 1,
-				slaveName: preset_lookup[mom]
+				slaveName: presetLookup[mom]
 			});
 		}
 
@@ -256,7 +255,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 					ID: dad,
 					mother: missing.mother,
 					father: missing.father,
-					is_father: true,
+					isFather: true,
 					dick: missing.dick,
 					vagina: missing.vagina,
 					slaveName: missing.slaveName
@@ -267,15 +266,15 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 				}
 				outdads[dad].push(character.slaveName);
 			}
-		} else if (dad < 0 && typeof preset_lookup[dad] !== 'undefined' && !haveChar(dad)) {
+		} else if (dad < 0 && typeof presetLookup[dad] !== 'undefined' && !haveChar(dad)) {
 			charList.push({
 				ID: dad,
 				mother: 0,
 				father: 0,
-				is_father: true,
+				isFather: true,
 				dick: 1,
 				vagina: -1,
-				slaveName: preset_lookup[dad]
+				slaveName: presetLookup[dad]
 			});
 		}
 	}
@@ -296,7 +295,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 			ID: key,
 			mother: 0,
 			father: 0,
-			is_mother: true,
+			isMother: true,
 			dick: 0,
 			vagina: 1,
 			slaveName: `${name}'s mother`
@@ -320,7 +319,7 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 			ID: key,
 			mother: 0,
 			father: 0,
-			is_father: true,
+			isFather: true,
 			dick: 1,
 			vagina: -1,
 			slaveName: `${name}'s father`
@@ -385,55 +384,55 @@ globalThis.buildFamilyTree = function(slaves, filterID) {
 	}
 
 	for (const character of charList) {
-		let char_id = character.ID;
-		if (char_id !== filterID) {
-			if (character.mother === 0 && character.father === 0 && !kids[char_id]) {
+		let charID = character.ID;
+		if (charID !== filterID) {
+			if (character.mother === 0 && character.father === 0 && !kids[charID]) {
 				continue;
 			}
-			if (filterID && !related[char_id]) {
+			if (filterID && !related[charID]) {
 				continue;
 			}
 		}
-		node_lookup[char_id] = family_graph.nodes.length;
-		let char_obj = {
-			ID: char_id,
+		nodeLookup[charID] = familyGraph.nodes.length;
+		let charObj = {
+			ID: charID,
 			name: character.slaveName,
 			dick: character.dick,
-			unborn: !!unborn[char_id],
+			unborn: !!unborn[charID],
 			vagina: character.vagina
 		};
-		if (kids[char_id]) {
-			char_obj.is_mother = !!kids[char_id].mother;
-			char_obj.is_father = !!kids[char_id].father;
+		if (kids[charID]) {
+			charObj.isMother = !!kids[charID].mother;
+			charObj.isFather = !!kids[charID].father;
 		} else {
-			char_obj.is_mother = false;
-			char_obj.is_father = false;
+			charObj.isMother = false;
+			charObj.isFather = false;
 		}
-		family_graph.nodes.push(char_obj);
+		familyGraph.nodes.push(charObj);
 	}
 
 	for (const character of charList) {
-		let char_id = character.ID;
-		if (character.mother === 0 && character.father === 0 && !kids[char_id]) {
+		let charID = character.ID;
+		if (character.mother === 0 && character.father === 0 && !kids[charID]) {
 			continue;
 		}
-		if (filterID && !related[char_id]) {
+		if (filterID && !related[charID]) {
 			continue;
 		}
-		if (typeof node_lookup[character.mother] !== 'undefined') {
+		if (typeof nodeLookup[character.mother] !== 'undefined') {
 			const ltype = (character.mother === character.father) ? 'homologous' : 'maternal';
-			family_graph.links.push({
+			familyGraph.links.push({
 				type: ltype,
-				target: node_lookup[char_id] * 1,
-				source: node_lookup[character.mother] * 1
+				target: nodeLookup[charID] * 1,
+				source: nodeLookup[character.mother] * 1
 			});
 		}
 		if (character.mother === character.father) {
 			continue;
 		}
-		if (typeof node_lookup[character.father] !== 'undefined') {
-			family_graph.links.push({type: 'paternal', target: node_lookup[char_id] * 1, source: node_lookup[character.father] * 1});
+		if (typeof nodeLookup[character.father] !== 'undefined') {
+			familyGraph.links.push({type: 'paternal', target: nodeLookup[charID] * 1, source: nodeLookup[character.father] * 1});
 		}
 	}
-	return family_graph;
+	return familyGraph;
 };
diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js
index 0ec1e69693bf8c54141cb5dccb9a6dd03783cec6..8184cceb5f90fe2ef17f1e2c60fbdde0417869d5 100644
--- a/src/js/slaveSummaryHelpers.js
+++ b/src/js/slaveSummaryHelpers.js
@@ -2,7 +2,6 @@
 // Either keep this file above the slaveSummaryWidgets.js in the name ordered list
 // (tweego process them in this order), or rework the references.
 
-/* eslint-disable camelcase */
 // cSpell:ignore Natr
 
 App.UI.SlaveSummaryImpl = function() {
@@ -506,7 +505,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_health(slave, c) {
+		function shortHealth(slave, c) {
 			if (slave.health.health < -20) {
 				makeSpan(c, "H", ["red", "strong"], true, slave.health.health);
 			} else if (slave.health.health <= 20) {
@@ -528,7 +527,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_illness(slave, c) {
+		function shortIllness(slave, c) {
 			if (slave.health.illness > 2) {
 				makeSpan(c, `Ill${slave.health.illness}`, ["red", "strong"], true, slave.health.illness);
 			} else if (slave.health.illness > 0) {
@@ -541,7 +540,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_tired(slave, c) {
+		function shortTired(slave, c) {
 			helpers.makeRatedStyledSpan(c, data.short.health.tiredness, slave.health.tired, 0, true);
 		}
 
@@ -550,7 +549,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_health(slave, c) {
+		function longHealth(slave, c) {
 			helpers.makeRatedStyledSpan(c, data.long.health.health, slave.health.health, 100, true);
 			if (passage() === "Clinic" && V.clinicUpgradeScanner) {
 				if (slave.chem > 15) {
@@ -566,7 +565,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_illness(slave, c) {
+		function longIllness(slave, c) {
 			makeRatedStyledSpan(c, data.long.health.illness, slave.health.illness, 0, true);
 		}
 
@@ -575,7 +574,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_tired(slave, c) {
+		function longTired(slave, c) {
 			makeRatedStyledSpan(c, data.long.health.tiredness, slave.health.tired, 0, true);
 		}
 
@@ -584,7 +583,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_age(slave, c) {
+		function longAge(slave, c) {
 			const style = "pink";
 			makeSpan(c, V.showAgeDetail ? `Age ${slave.actualAge}` : App.Ratings.numeric(data.long.body.age, slave.actualAge), style, true);
 			/*
@@ -623,7 +622,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_face(slave, c) {
+		function longFace(slave, c) {
 			const r = App.Ratings.numeric(data.long.body.face, slave.face + 100);
 			makeSpan(c, `${r.desc} ${slave.faceShape} face`, r.style, true, slave.face);
 		}
@@ -633,7 +632,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_eyes(slave, c) {
+		function longEyes(slave, c) {
 			if (!canSee(slave)) {
 				makeSpan(c, "Blind.", "red");
 			} else if (!canSeePerfectly(slave)) {
@@ -646,7 +645,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_ears(slave, c) {
+		function longEars(slave, c) {
 			if (slave.hears <= -2) {
 				makeSpan(c, "Deaf.", "red");
 			} else if ((slave.hears === -1) && (slave.earwear !== "hearing aids")) {
@@ -659,7 +658,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_lips(slave, c) {
+		function longLips(slave, c) {
 			makeRatedStyledSpan(c, data.long.body.lips, slave.lips, 0, true);
 		}
 
@@ -668,7 +667,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_teeth(slave, c) {
+		function longTeeth(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.long.body.teeth, slave.teeth);
 		}
 
@@ -677,7 +676,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_muscles(slave, c) {
+		function longMuscles(slave, c) {
 			const h = helpers;
 			h.makeStyledSpan(c, App.Ratings.multiNumeric(data.long.body.muscles, [slave.muscles + 100, h.FSData.policy.PhysicalIdealist.active]), slave.muscles, true);
 		}
@@ -687,7 +686,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_voice(slave, c) {
+		function longVoice(slave, c) {
 			if (slave.voice === 0) {
 				makeSpan(c, "Mute.", "red");
 			} else {
@@ -700,7 +699,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_tits_ass(slave, c) {
+		function longTitsAndAss(slave, c) {
 			const h = helpers;
 			h.makeStyledSpan(c,
 				App.Ratings.multiNumeric(data.long.body.titsAss,
@@ -712,7 +711,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_hips(slave, c) {
+		function longHips(slave, c) {
 			const di = hipsAssRating(slave);
 			if (di >= 0) {
 				helpers.makeMappedStyledSpan(c, data.long.body.hipsAss, di);
@@ -724,7 +723,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_waist(slave, c) {
+		function longWaist(slave, c) {
 			makeRatedStyledSpan(c, data.long.body.waist, slave.waist, 100, true);
 		}
 
@@ -733,7 +732,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_implants(slave, c) {
+		function longImplants(slave, c) {
 			const styles = "pink";
 			if ((slave.boobsImplant !== 0) || (slave.buttImplant !== 0) || (slave.lipsImplant !== 0) || (slave.bellyImplant !== -1)) {
 				makeSpan(c, "Implants.", styles);
@@ -749,7 +748,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_lactation(slave, c) {
+		function longLactation(slave, c) {
 			if (slave.lactation === 1) {
 				makeSpan(c, "Lactating naturally.", "pink");
 			} else if (slave.lactation === 2) {
@@ -762,7 +761,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function milk_flavor(slave, c) {
+		function milkFlavor(slave, c) {
 			if (slave.milkFlavor !== "none" && slave.lactation >= 1) {
 				makeSpan(c, `${capFirstChar(slave.milkFlavor)} flavored milk.`, "pink");
 			}
@@ -773,7 +772,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_mods(slave, c) {
+		function longMods(slave, c) {
 			const modScore = SlaveStatsChecker.modScore(slave);
 			if (slave.piercing.corset.weight === 0 && modScore.piercing < 3 && modScore.tat < 2) {
 				return;
@@ -792,7 +791,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_age(slave, c) {
+		function shortAge(slave, c) {
 			let r = makeSpan(c, "", "pink");
 			if (V.showAgeDetail === 1) {
 				r.textContent += slave.actualAge.toString();
@@ -814,7 +813,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_face(slave, c) {
+		function shortFace(slave, c) {
 			makeRatedStyledSpan(c, data.short.body.face, slave.face, 100, true);
 		}
 
@@ -823,7 +822,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_eyes(slave, c) {
+		function shortEyes(slave, c) {
 			if (!canSee(slave)) {
 				makeSpan(c, "Blind", "red");
 			} else if (!canSeePerfectly(slave)) {
@@ -836,7 +835,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_ears(slave, c) {
+		function shortEars(slave, c) {
 			if (slave.hears === -2) {
 				makeSpan(c, "Deaf", "red");
 			} else if ((slave.hears === -1) && (slave.earwear !== "hearing aids")) {
@@ -849,7 +848,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_lips(slave, c) {
+		function shortLips(slave, c) {
 			makeRatedStyledSpan(c, data.short.body.lips, slave.lips, 0, true);
 		}
 
@@ -858,7 +857,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_teeth(slave, c) {
+		function shortTeeth(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.short.body.teeth, slave.teeth);
 		}
 
@@ -867,7 +866,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_muscles(slave, c) {
+		function shortMuscles(slave, c) {
 			const h = helpers;
 			h.makeStyledSpan(c, App.Ratings.multiNumeric(data.short.body.muscles, [slave.muscles + 100, h.FSData.policy.PhysicalIdealist.active]), slave.muscles, true);
 		}
@@ -877,7 +876,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_voice(slave, c) {
+		function shortVoice(slave, c) {
 			if (slave.voice === 0) {
 				makeSpan(c, "Mute", "red");
 			} else {
@@ -890,7 +889,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_tits_ass(slave, c) {
+		function shortTitsAndAss(slave, c) {
 			const h = helpers;
 			h.makeStyledSpan(c,
 				App.Ratings.multiNumeric(data.short.body.titsAss,
@@ -902,7 +901,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_hips(slave, c) {
+		function shortHips(slave, c) {
 			const di = hipsAssRating(slave);
 			if (di >= 0) {
 				helpers.makeMappedStyledSpan(c, data.short.body.hipsAss, di);
@@ -914,7 +913,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_waist(slave, c) {
+		function shortWaist(slave, c) {
 			makeRatedStyledSpan(c, data.short.body.waist, slave.waist, 100, false);
 		}
 
@@ -923,7 +922,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_implants(slave, c) {
+		function shortImplants(slave, c) {
 			if ((slave.boobsImplant === 0) && (slave.buttImplant === 0) && (slave.waist >= -95) && (slave.lipsImplant === 0) && (slave.faceImplant <= 5) && (slave.bellyImplant === -1)) {
 				makeSpan(c, "Natr", "pink");
 			} else {
@@ -936,7 +935,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_lactation(slave, c) {
+		function shortLactation(slave, c) {
 			if (slave.lactation === 1) {
 				makeSpan(c, "Lact", "pink");
 			} else if (slave.lactation === 2) {
@@ -949,7 +948,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_mods(slave, c) {
+		function shortMods(slave, c) {
 			const modScore = SlaveStatsChecker.modScore(slave);
 			if (slave.piercing.corset.weight === 0 && modScore.piercing < 3 && modScore.tat < 2) {
 				return;
@@ -971,7 +970,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_intelligence(slave, c) {
+		function shortIntelligence(slave, c) {
 			if (slave.fetish === Fetish.MINDBROKEN) {
 				return;
 			}
@@ -986,7 +985,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_skills(slave, c) {
+		function shortSkills(slave, c) {
 			const sd = data.short.skills;
 			let SSkills = (slave.skill.anal + slave.skill.oral);
 			let PSU = penetrativeSocialUse();
@@ -1010,7 +1009,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_prestige(slave, c) {
+		function shortPrestige(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.short.prestige, slave.prestige);
 		}
 
@@ -1019,7 +1018,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_porn_prestige(slave, c) {
+		function shortPornPrestige(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.short.pornPrestige, slave.porn.prestige);
 		}
 
@@ -1028,7 +1027,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_intelligence(slave, c) {
+		function longIntelligence(slave, c) {
 			if (slave.fetish === Fetish.MINDBROKEN) {
 				return;
 			}
@@ -1043,7 +1042,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_skills(slave, c) {
+		function longSkills(slave, c) {
 			const sd = data.long.skills;
 			let SSkills = (slave.skill.anal + slave.skill.oral);
 			let PSU = penetrativeSocialUse();
@@ -1067,7 +1066,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_prestige(slave, c) {
+		function longPrestige(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.long.prestige, slave.prestige);
 		}
 
@@ -1076,7 +1075,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_porn_prestige(slave, c) {
+		function longPornPrestige(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.long.pornPrestige, slave.porn.prestige);
 		}
 
@@ -1085,7 +1084,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_clothes(slave, c) {
+		function longClothes(slave, c) {
 			makeSpan(c, App.Ratings.exact(data.long.clothes, slave.clothes, 'Naked.'));
 		}
 
@@ -1094,7 +1093,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_collar(slave, c) {
+		function longCollar(slave, c) {
 			helpers.makeMappedSpan(c, data.long.accessory.collar, slave.collar);
 		}
 
@@ -1103,7 +1102,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_mask(slave, c) {
+		function longMask(slave, c) {
 			helpers.makeMappedSpan(c, data.long.accessory.faceAccessory, slave.faceAccessory);
 		}
 
@@ -1112,7 +1111,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_mouth(slave, c) {
+		function longMouth(slave, c) {
 			helpers.makeMappedSpan(c, data.long.accessory.mouthAccessory, slave.mouthAccessory);
 		}
 
@@ -1121,7 +1120,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_belly(slave, c) {
+		function longBelly(slave, c) {
 			helpers.makeMappedSpan(c, data.long.accessory.belly, slave.bellyAccessory);
 		}
 
@@ -1130,7 +1129,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_arms(slave, c) {
+		function longArms(slave, c) {
 			if (["hand gloves", "elbow gloves"].includes(slave.armAccessory)) {
 				makeSpan(c, slave.armAccessory, undefined, true);
 			}
@@ -1141,7 +1140,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_legs(slave, c) {
+		function longLegs(slave, c) {
 			if (slave.legAccessory === "short stockings") {
 				makeSpan(c, "Short stockings.");
 			} else if (slave.legAccessory === "long stockings") {
@@ -1154,7 +1153,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_shoes(slave, c) {
+		function longShoes(slave, c) {
 			if (shoeHeelCategory(slave) > 0) {
 				makeSpan(c, slave.shoes, undefined, true);
 			} else if (slave.heels === 1) {
@@ -1167,7 +1166,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_chastity(slave, c) {
+		function longChastity(slave, c) {
 			if (slave.chastityAnus === 1 && slave.chastityPenis === 1 && slave.chastityVagina === 1) {
 				makeSpan(c, "Full chastity.");
 			} else if (slave.chastityPenis === 1 && slave.chastityVagina === 1) {
@@ -1188,7 +1187,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_vaginal_acc(slave, c) {
+		function longVaginalAcc(slave, c) {
 			if (slave.vaginalAttachment === "none") {
 				helpers.makeMappedSpan(c, data.long.accessory.vaginal, slave.vaginalAccessory);
 			} else {
@@ -1208,7 +1207,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_dick_acc(slave, c) {
+		function longDickAcc(slave, c) {
 			switch (slave.dickAccessory) {
 				case "sock":
 					makeSpan(c, "Cock sock.");
@@ -1227,7 +1226,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_buttplug(slave, c) {
+		function longButtplug(slave, c) {
 			helpers.makeMappedSpan(c, data.long.accessory.buttplug, slave.buttplug);
 			helpers.makeMappedSpan(c, data.long.accessory.buttplugAttachment, slave.buttplugAttachment);
 		}
@@ -1237,7 +1236,10 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_fetish(slave, c) {
+		function shortFetish(slave, c) {
+			/**
+			 * @param {App.Entity.SlaveState} slave
+			 */
 			function fetishStr(slave) {
 				const tbl = data.short.fetish[slave.fetish];
 				if (!tbl || typeof tbl === 'string') {
@@ -1257,7 +1259,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_attraction(slave, c) {
+		function shortAttraction(slave, c) {
 			const sd = data.short.sexDrive;
 			// check for special cases first
 			if (slave.energy > 95 && slave.attrXX > 95 && slave.attrXY > 95) {
@@ -1277,7 +1279,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_smart_piercing(slave, c) {
+		function shortSmartPiercing(slave, c) {
 			const s = smartFetishStr(slave, data.short.smartVibrator) || smartAttractionStr(slave, data.short.smartVibrator);
 			if (s) {
 				makeSpan(c, s);
@@ -1289,7 +1291,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_behavior_flaw(slave, c) {
+		function shortBehaviorFlaw(slave, c) {
 			helpers.makeMappedSpan(c, data.short.mental.behavioralFlaw, slave.behavioralFlaw, "red");
 		}
 
@@ -1298,7 +1300,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_sex_flaw(slave, c) {
+		function shortSexFlaw(slave, c) {
 			helpers.makeMappedStyledSpan(c, data.short.mental.sexualFlaw, slave.sexualFlaw);
 		}
 
@@ -1307,7 +1309,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_behavior_quirk(slave, c) {
+		function shortBehaviorQuirk(slave, c) {
 			helpers.makeMappedSpan(c, data.short.mental.behavioralQuirk, slave.behavioralQuirk, "green");
 		}
 
@@ -1316,7 +1318,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_sex_quirk(slave, c) {
+		function shortSexQuirk(slave, c) {
 			helpers.makeMappedSpan(c, data.short.mental.sexualQuirk, slave.sexualQuirk, "green");
 		}
 
@@ -1325,7 +1327,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_fetish(slave, c) {
+		function longFetish(slave, c) {
 			function fetishStr() {
 				const tbl = data.long.fetish[slave.fetish];
 				if (!tbl || typeof tbl === 'string') {
@@ -1345,7 +1347,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_attraction(slave, c) {
+		function longAttraction(slave, c) {
 			const sd = data.long.sexDrive;
 
 			// check for special cases first
@@ -1366,7 +1368,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_smart_piercing(slave, c) {
+		function longSmartPiercing(slave, c) {
 			const s = smartFetishStr(slave, data.long.smartVibrator) || smartAttractionStr(slave, data.long.smartVibrator);
 			if (s) {
 				makeSpan(c, s);
@@ -1378,7 +1380,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_behavior_flaw(slave, c) {
+		function longBehaviorFlaw(slave, c) {
 			helpers.makeMappedSpan(c, data.long.mental.behavioralFlaw, slave.behavioralFlaw, "red");
 		}
 
@@ -1387,7 +1389,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_sex_flaw(slave, c) {
+		function longSexFlaw(slave, c) {
 			switch (slave.sexualFlaw) {
 				case "hates oral":
 				case "hates anal":
@@ -1434,7 +1436,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_behavior_quirk(slave, c) {
+		function longBehaviorQuirk(slave, c) {
 			switch (slave.behavioralQuirk) {
 				case "confident":
 				case "cutting":
@@ -1458,7 +1460,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_sex_quirk(slave, c) {
+		function longSexQuirk(slave, c) {
 			switch (slave.sexualQuirk) {
 				case "gagfuck queen":
 				case "painal queen":
@@ -1482,7 +1484,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_family(slave, c) {
+		function shortFamily(slave, c) {
 			helpers.renderFamily(c, slave, true);
 		}
 
@@ -1491,7 +1493,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_clone(slave, c) {
+		function shortClone(slave, c) {
 			if (typeof slave.clone === "string") {
 				makeSpan(c, "Clone");
 			}
@@ -1502,7 +1504,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function short_rival(slave, c) {
+		function shortRival(slave, c) {
 			if (slave.rivalry !== 0) {
 				const block = makeBlock(c, "lightsalmon");
 				const ssj = V.slaves.find(s => s.ID === slave.rivalryTarget);
@@ -1526,7 +1528,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_family(slave, c) {
+		function longFamily(slave, c) {
 			helpers.renderFamily(c, slave, false);
 		}
 
@@ -1535,7 +1537,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_clone(slave, c) {
+		function longClone(slave, c) {
 			if (typeof slave.clone === "string") {
 				makeSpan(c, slave.clone === PlayerName() ? `Your clone.` : `Clone of ${slave.clone}.`, "deepskyblue");
 			}
@@ -1546,7 +1548,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @param {Node} c
 		 * @returns {void}
 		 */
-		function long_rival(slave, c) {
+		function longRival(slave, c) {
 			if (slave.rivalry !== 0) {
 				const block = makeBlock(c);
 				const ssj = V.slaves.find(s => s.ID === slave.rivalryTarget);
@@ -1572,95 +1574,95 @@ App.UI.SlaveSummaryImpl = function() {
 
 		return {
 			long: {
-				health: long_health,
-				illness: long_illness,
-				tired: long_tired,
-				age: long_age,
-				face: long_face,
-				eyes: long_eyes,
-				ears: long_ears,
-				lips: long_lips,
-				teeth: long_teeth,
-				muscles: long_muscles,
-				voice: long_voice,
-				tits_ass: long_tits_ass,
-				hips: long_hips,
-				waist: long_waist,
-				implants: long_implants,
-				lactation: long_lactation,
-				milkflavor: milk_flavor,
-				mods: long_mods,
-				intelligence: long_intelligence,
-				skills: long_skills,
-				prestige: long_prestige,
-				porn_prestige: long_porn_prestige,
-				clothes: long_clothes,
-				collar: long_collar,
-				mask: long_mask,
-				mouth: long_mouth,
-				belly: long_belly,
-				arms: long_arms,
-				legs: long_legs,
-				shoes: long_shoes,
-				chastity: long_chastity,
-				vaginal_acc: long_vaginal_acc,
-				dick_acc: long_dick_acc,
-				buttplug: long_buttplug,
-				fetish: long_fetish,
-				attraction: long_attraction,
-				smart_piercing: long_smart_piercing,
-				behavior_flaw: long_behavior_flaw,
-				sex_flaw: long_sex_flaw,
-				behavior_quirk: long_behavior_quirk,
-				sex_quirk: long_sex_quirk,
-				family: long_family,
-				clone: long_clone,
-				rival: long_rival
+				health: longHealth,
+				illness: longIllness,
+				tired: longTired,
+				age: longAge,
+				face: longFace,
+				eyes: longEyes,
+				ears: longEars,
+				lips: longLips,
+				teeth: longTeeth,
+				muscles: longMuscles,
+				voice: longVoice,
+				titsAndAss: longTitsAndAss,
+				hips: longHips,
+				waist: longWaist,
+				implants: longImplants,
+				lactation: longLactation,
+				milkflavor: milkFlavor,
+				mods: longMods,
+				intelligence: longIntelligence,
+				skills: longSkills,
+				prestige: longPrestige,
+				pornPrestige: longPornPrestige,
+				clothes: longClothes,
+				collar: longCollar,
+				mask: longMask,
+				mouth: longMouth,
+				belly: longBelly,
+				arms: longArms,
+				legs: longLegs,
+				shoes: longShoes,
+				chastity: longChastity,
+				vaginalAcc: longVaginalAcc,
+				dickAcc: longDickAcc,
+				buttplug: longButtplug,
+				fetish: longFetish,
+				attraction: longAttraction,
+				smartPiercing: longSmartPiercing,
+				behaviorFlaw: longBehaviorFlaw,
+				sexFlaw: longSexFlaw,
+				behaviorQuirk: longBehaviorQuirk,
+				sexQuirk: longSexQuirk,
+				family: longFamily,
+				clone: longClone,
+				rival: longRival
 			},
 			short: {
-				health: short_health,
-				illness: short_illness,
-				tired: short_tired,
-				age: short_age,
-				face: short_face,
-				eyes: short_eyes,
-				ears: short_ears,
-				lips: short_lips,
-				teeth: short_teeth,
-				muscles: short_muscles,
-				voice: short_voice,
-				tits_ass: short_tits_ass,
-				hips: short_hips,
-				waist: short_waist,
-				implants: short_implants,
-				lactation: short_lactation,
-				mods: short_mods,
-				intelligence: short_intelligence,
-				skills: short_skills,
-				prestige: short_prestige,
-				porn_prestige: short_porn_prestige,
+				health: shortHealth,
+				illness: shortIllness,
+				tired: shortTired,
+				age: shortAge,
+				face: shortFace,
+				eyes: shortEyes,
+				ears: shortEars,
+				lips: shortLips,
+				teeth: shortTeeth,
+				muscles: shortMuscles,
+				voice: shortVoice,
+				titsAndAss: shortTitsAndAss,
+				hips: shortHips,
+				waist: shortWaist,
+				implants: shortImplants,
+				lactation: shortLactation,
+				mods: shortMods,
+				intelligence: shortIntelligence,
+				skills: shortSkills,
+				prestige: shortPrestige,
+				pornPrestige: shortPornPrestige,
 				/*
-				clothes: short_clothes,
-				collar: short_collar,
-				belly: short_belly,
-				arms: short_arms,
-				legs: short_legs,
-				shoes: short_shoes,
-				chastity: short_chastity,
-				vaginal_acc: short_vaginal_acc,
-				dick_acc: short_dick_acc,
-				buttplug: short_buttplug,
+				clothes: shortClothes,
+				collar: shortCollar,
+				belly: shortBelly,
+				arms: shortArms,
+				legs: shortLegs,
+				shoes: shortShoes,
+				chastity: shortChastity,
+				vaginalAcc: shortVaginalAcc,
+				dickAcc: shortDickAcc,
+				buttplug: shortButtplug,
 				*/
-				fetish: short_fetish,
-				attraction: short_attraction,
-				smart_piercing: short_smart_piercing,
-				behavior_flaw: short_behavior_flaw,
-				sex_flaw: short_sex_flaw,
-				behavior_quirk: short_behavior_quirk,
-				sex_quirk: short_sex_quirk,
-				family: short_family,
-				clone: short_clone,
-				rival: short_rival
+				fetish: shortFetish,
+				attraction: shortAttraction,
+				smartPiercing: shortSmartPiercing,
+				behaviorFlaw: shortBehaviorFlaw,
+				sexFlaw: shortSexFlaw,
+				behaviorQuirk: shortBehaviorQuirk,
+				sexQuirk: shortSexQuirk,
+				family: shortFamily,
+				clone: shortClone,
+				rival: shortRival
 			}
 		};
 	}();
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 54cd1e32384694b7be8d967ff50cdfc33759728e..ea36a71de2feb36be613f231adf118c854100a78 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -276,7 +276,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			b.muscles(slave, c);
 			helpers.addText(c, App.Desc.shortLimbs(slave));
 			b.voice(slave, c);
-			b.tits_ass(slave, c);
+			b.titsAndAss(slave, c);
 			b.hips(slave, c);
 			b.waist(slave, c);
 			b.implants(slave, c);
@@ -315,12 +315,12 @@ App.UI.SlaveSummaryRenderers = function() {
 				}
 			}
 			if (slave.piercing.genitals.smart || dildoVibeLevel(slave) > 1 || slave.dickAccessory === "smart bullet vibrator") {
-				b.smart_piercing(slave, c);
+				b.smartPiercing(slave, c);
 			}
-			b.behavior_flaw(slave, c);
-			b.sex_flaw(slave, c);
-			b.behavior_quirk(slave, c);
-			b.sex_quirk(slave, c);
+			b.behaviorFlaw(slave, c);
+			b.sexFlaw(slave, c);
+			b.behaviorQuirk(slave, c);
+			b.sexQuirk(slave, c);
 		},
 
 		/**
@@ -333,7 +333,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			b.intelligence(slave, c);
 			b.skills(slave, c);
 			b.prestige(slave, c);
-			b.porn_prestige(slave, c);
+			b.pornPrestige(slave, c);
 		},
 
 		/**
@@ -647,7 +647,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			b.muscles(slave, c);
 			helpers.makeSpan(c, App.Desc.longLimbs(slave));
 			b.voice(slave, c);
-			b.tits_ass(slave, c);
+			b.titsAndAss(slave, c);
 			b.hips(slave, c);
 			b.waist(slave, c);
 			b.implants(slave, c);
@@ -681,7 +681,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			b.intelligence(slave, c);
 			b.skills(slave, c);
 			b.prestige(slave, c);
-			b.porn_prestige(slave, c);
+			b.pornPrestige(slave, c);
 		},
 
 		/**
@@ -708,8 +708,8 @@ App.UI.SlaveSummaryRenderers = function() {
 				b.shoes(slave, dressingBlock);
 			}
 			b.chastity(slave, dressingBlock);
-			b.vaginal_acc(slave, dressingBlock);
-			b.dick_acc(slave, dressingBlock);
+			b.vaginalAcc(slave, dressingBlock);
+			b.dickAcc(slave, dressingBlock);
 			b.buttplug(slave, dressingBlock);
 		},
 
@@ -729,12 +729,12 @@ App.UI.SlaveSummaryRenderers = function() {
 				}
 			}
 			if (slave.piercing.genitals.smart || dildoVibeLevel(slave) > 1 || slave.dickAccessory === "smart bullet vibrator") {
-				b.smart_piercing(slave, c);
+				b.smartPiercing(slave, c);
 			}
-			b.behavior_flaw(slave, c);
-			b.sex_flaw(slave, c);
-			b.behavior_quirk(slave, c);
-			b.sex_quirk(slave, c);
+			b.behaviorFlaw(slave, c);
+			b.sexFlaw(slave, c);
+			b.behaviorQuirk(slave, c);
+			b.sexQuirk(slave, c);
 		},
 
 		/**
@@ -753,6 +753,10 @@ App.UI.SlaveSummaryRenderers = function() {
 		 * @returns {void}
 		 */
 		nationality: function(slave, c) {
+			/**
+			 * @param {App.Entity.SlaveState} slave
+			 * @returns {string}
+			 */
 			function descStr(slave) {
 				switch (slave.nationality) {
 					case "a Cook Islander":
diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index f8b3a39e8d7f3471616e5d6c640808dca315e870..6e9b9a808c34ca1c0d51c7be54fa6b479860e43d 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -1399,22 +1399,22 @@ globalThis.deflate = function(slave) {
  * @param {App.Entity.SlaveState} slave
  */
 globalThis.applyGeneticColor = function(slave) {
-	if (slave.override_Eye_Color !== 1) {
+	if (slave.overrideEyeColor !== 1) {
 		resetEyeColor(slave, "both");
 	}
-	if (slave.override_H_Color !== 1) {
+	if (slave.overrideHColor !== 1) {
 		slave.hColor = getGeneticHairColor(slave);
 	}
-	if (slave.override_Arm_H_Color !== 1) {
+	if (slave.overrideArmHColor !== 1) {
 		slave.underArmHColor = getGeneticHairColor(slave);
 	}
-	if (slave.override_Pubic_H_Color !== 1) {
+	if (slave.overridePubicHColor !== 1) {
 		slave.pubicHColor = getGeneticHairColor(slave);
 	}
-	if (slave.override_Brow_H_Color !== 1) {
+	if (slave.overrideBrowHColor !== 1) {
 		slave.eyebrowHColor = getGeneticHairColor(slave);
 	}
-	if (slave.override_Skin !== 1) {
+	if (slave.overrideSkin !== 1) {
 		if (!(slave.skin === "sun tanned" || slave.skin === "spray tanned")) {
 			slave.skin = getGeneticSkinColor(slave);
 		}
@@ -1434,21 +1434,19 @@ globalThis.newSlave = function(slave) {
 		slave = slave.beforeGingering;
 	}
 
-	if (slave.override_Race !== 1) {
+	if (slave.overrideRace !== 1) {
 		slave.origRace = slave.race;
 	}
 
 	applyGeneticColor(slave);
 
-	/* eslint-disable camelcase */
-	slave.override_Race = 0;
-	slave.override_H_Color = 0;
-	slave.override_Arm_H_Color = 0;
-	slave.override_Pubic_H_Color = 0;
-	slave.override_Brow_H_Color = 0;
-	slave.override_Skin = 0;
-	slave.override_Eye_Color = 0;
-	/* eslint-enable camelcase */
+	slave.overrideRace = 0;
+	slave.overrideHColor = 0;
+	slave.overrideArmHColor = 0;
+	slave.overridePubicHColor = 0;
+	slave.overrideBrowHColor = 0;
+	slave.overrideSkin = 0;
+	slave.overrideEyeColor = 0;
 
 	// too tall to be a dwarf catch for event slaves
 	if (slave.geneticQuirks.dwarfism === 2 && slave.geneticQuirks.gigantism !== 2 && slave.height > 165) {
@@ -3249,6 +3247,8 @@ globalThis.slaveSkillIncrease = function(targetSkill, slave, skillIncrease = 1)
 
 /**
  * Considers societal standards and returns slave penetration skill if expected
+ * @param {App.Entity.SlaveState} [slave]
+ * @param {boolean} [specific=false]
  * @returns {number} adjusted penetration skill
  */
 globalThis.adjustedPenSkill = function(slave, specific = false) {
diff --git a/src/markets/specificMarkets/slaveShelter.js b/src/markets/specificMarkets/slaveShelter.js
index b96800c6be4cf60364aa619204bb3d9d12321724..cefddd349f6fa445c264d9d795bc9f7a36c7e865 100644
--- a/src/markets/specificMarkets/slaveShelter.js
+++ b/src/markets/specificMarkets/slaveShelter.js
@@ -76,7 +76,7 @@ App.Markets["Slave Shelter"] = function() {
 					V.shelterSlave.behavioralFlaw = "hates men";
 					V.shelterSlave.sexualFlaw = "hates oral";
 					V.shelterSlave.canRecruit = 0;
-					V.shelterSlave.override_Eye_Color = 1; // TODO: Identifier 'override_Eye_Color' is not in camel case
+					V.shelterSlave.overrideEyeColor = 1;
 					break;
 				case "deaf":
 					V.shelterSlave = GenerateNewSlave(null, {minAge: V.minimumSlaveAge, maxAge: 22, disableDisability: 1});
@@ -101,7 +101,7 @@ App.Markets["Slave Shelter"] = function() {
 					applyMindbroken(V.shelterSlave, V.shelterSlave.intelligence);
 					break;
 				case "cannibal victim male":
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						pedo = 1;
 					} else {
 						maxAge = 42;
@@ -125,7 +125,7 @@ App.Markets["Slave Shelter"] = function() {
 					App.Medicine.Modification.addScar(V.shelterSlave, "pubic mound", "scars from $his crudely performed self-castration");
 					break;
 				case "cannibal victim female":
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						pedo = 1;
 					} else {
 						maxAge = 42;
@@ -253,7 +253,7 @@ App.Markets["Slave Shelter"] = function() {
 					V.shelterSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration");
 					break;
 				case "breeder":
-					if (V.pedo_mode === 1) {
+					if (V.pedoMode === 1) {
 						minAge = (V.fertilityAge + 6);
 						pedo = 1; // Old enough to have been pregnant many times.
 					} else {
diff --git a/src/markets/theMarket/marketData.js b/src/markets/theMarket/marketData.js
index 11f2d6fc8c9284acb4a641f4100b2a1803495047..9867cd8fda07db8c59daf7ac1f92c1102cf4d984 100644
--- a/src/markets/theMarket/marketData.js
+++ b/src/markets/theMarket/marketData.js
@@ -72,11 +72,11 @@ App.Data.Markets = {
 			note: "Very young slaves.",
 			encyclopedia: "Kidnapped Slaves",
 			get requirements() {
-				if (V.pedo_mode === 0 && V.minimumSlaveAge > 13) {
+				if (V.pedoMode === 0 && V.minimumSlaveAge > 13) {
 					return false;
 				} else if (V.rep <= 3000) {
 					return `You are not reputable enough to buy underaged slaves.`;
-				} else { // if (V.pedo_mode === 1 || V.minimumSlaveAge <= 13)
+				} else { // if (V.pedoMode === 1 || V.minimumSlaveAge <= 13)
 					return true;
 				}
 			}
diff --git a/src/npc/children/ChildState.js b/src/npc/children/ChildState.js
index 18e81db1dc27813f4006cc8ae104579ffab72be0..b2a41285c78b7c325a5a0f63865bafb2763c2d87 100644
--- a/src/npc/children/ChildState.js
+++ b/src/npc/children/ChildState.js
@@ -1913,16 +1913,14 @@ App.Facilities.Nursery.ChildState = class ChildState {
 		 };
 		 /** flavor of their milk*/
 		 this.milkFlavor = "none";
-		/* eslint-disable camelcase*/
 		this.NCSyouthening = 0;
-		this.override_Race = 0;
-		this.override_Skin = 0;
-		this.override_Eye_Color = 0;
-		this.override_H_Color = 0;
-		this.override_Pubic_H_Color = 0;
-		this.override_Arm_H_Color = 0;
-		this.override_Brow_H_Color = 0;
-		/* eslint-enable */
+		this.overrideRace = 0;
+		this.overrideSkin = 0;
+		this.overrideEyeColor = 0;
+		this.overrideHColor = 0;
+		this.overridePubicHColor = 0;
+		this.overrideArmHColor = 0;
+		this.overrideBrowHColor = 0;
 		/** Erratic weight gain
 		 *
 		 * 0: stable; 1: gaining; -1: losing */
diff --git a/src/npc/databases/dSlavesDatabase.js b/src/npc/databases/dSlavesDatabase.js
index e4f95bb8d5bb5da34dc9cce2a27b2191ddfc1036..05262cb98a6ba9b242ebb71a6e8f81d31e68613d 100644
--- a/src/npc/databases/dSlavesDatabase.js
+++ b/src/npc/databases/dSlavesDatabase.js
@@ -1,4 +1,4 @@
-/* eslint-disable camelcase */
+
 /**
  * @type {FC.SlaveTemplate[]}
  */
@@ -117,6 +117,7 @@ App.Data.HeroSlaves.D = [
 		race: "white",
 		origHColor: "red",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "wild",
 		boobs: 500,
 		butt: 2,
@@ -151,6 +152,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "black",
 		origSkin: "pale",
 		hLength: 20,
+		// @ts-expect-error custom hair style
 		hStyle: "styled with $his bangs covering one eye",
 		boobs: 650,
 		natural: {boobs: 200},
@@ -295,6 +297,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "black",
 		origSkin: "black",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "curly",
 		boobs: 1400,
 		natural: {boobs: 600},
@@ -473,7 +476,7 @@ App.Data.HeroSlaves.D = [
 		origHColor: "black",
 		hLength: 10,
 		pubicHColor: "black",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		boobs: 500,
 		butt: 2,
@@ -507,7 +510,7 @@ App.Data.HeroSlaves.D = [
 		eye: {origColor: "blue"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 60,
 		hStyle: "neat",
@@ -573,7 +576,7 @@ App.Data.HeroSlaves.D = [
 		weight: -20,
 		height: 175,
 		hLength: 15,
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		boobs: 500,
 		butt: 2,
@@ -608,8 +611,8 @@ App.Data.HeroSlaves.D = [
 		nationality: "Japanese",
 		race: "asian",
 		origHColor: "black",
-		override_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overridePubicHColor: 1,
 		hColor: "light purple",
 		pubicHColor: "light purple",
 		hLength: 10,
@@ -681,8 +684,8 @@ App.Data.HeroSlaves.D = [
 		race: "white",
 		eye: {origColor: "amber"},
 		origHColor: "brown",
-		override_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overridePubicHColor: 1,
 		hColor: "purple",
 		pubicHColor: "purple",
 		origSkin: "pale",
@@ -752,7 +755,7 @@ App.Data.HeroSlaves.D = [
 		height: 175,
 		race: "white",
 		eye: {origColor: "green"},
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 30,
 		hStyle: "neat",
@@ -800,6 +803,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "black",
 		origSkin: "brown",
 		hLength: 25,
+		// @ts-expect-error custom hair style
 		hStyle: "in a bob",
 		boobs: 650,
 		natural: {boobs: 400},
@@ -1102,6 +1106,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "blonde",
 		origSkin: "white",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "curly and tied back in a ponytail",
 		boobs: 400,
 		butt: 1,
@@ -1361,7 +1366,7 @@ App.Data.HeroSlaves.D = [
 		weight: -20,
 		race: "white",
 		eye: {origColor: "green"},
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "black",
 		hColor: "black with blue highlights",
 		origSkin: "white",
@@ -1396,12 +1401,13 @@ App.Data.HeroSlaves.D = [
 		devotion: -75,
 		height: 155,
 		race: "white",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "blue",
 		pubicHColor: "blue",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 10,
+		// @ts-expect-error custom hair style
 		hStyle: "short, spiky, and with a long shoulder-length lock leading from $his temples down, one on each side",
 		boobs: 650,
 		vagina: 1,
@@ -1816,9 +1822,10 @@ App.Data.HeroSlaves.D = [
 		health: {condition: 20},
 		devotion: -75,
 		race: "amerindian",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 25,
+		// @ts-expect-error custom hair style
 		hStyle: "in a bob",
 		boobs: 400,
 		butt: 3,
@@ -1968,6 +1975,7 @@ App.Data.HeroSlaves.D = [
 		origHColor: "black",
 		pubicHColor: "black",
 		hLength: 15,
+		// @ts-expect-error custom hair style
 		hStyle: "shaved on the left",
 		boobs: 500,
 		butt: 4,
@@ -2080,7 +2088,7 @@ App.Data.HeroSlaves.D = [
 		race: "white",
 		origSkin: "white",
 		eye: {origColor: "blue"},
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "brown",
 		hColor: "pale blonde",
 		hLength: 95,
@@ -2182,7 +2190,7 @@ App.Data.HeroSlaves.D = [
 		health: {condition: 20},
 		devotion: -25,
 		race: "white",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "red",
 		hColor: "bright red",
 		origSkin: "white",
@@ -2272,8 +2280,8 @@ App.Data.HeroSlaves.D = [
 				iris: "purple"
 			}
 		},
-		override_Eye_Color: 1,
-		override_H_Color: 1,
+		overrideEyeColor: 1,
+		overrideHColor: 1,
 		origHColor: "white",
 		origSkin: "dark",
 		hLength: 60,
@@ -2514,7 +2522,7 @@ App.Data.HeroSlaves.D = [
 		health: {condition: 40},
 		devotion: 100,
 		height: 178,
-		override_H_Color: 1,
+		overrideHColor: 1,
 		race: "middle eastern",
 		origHColor: "white",
 		pubicHColor: "white",
@@ -2545,7 +2553,7 @@ App.Data.HeroSlaves.D = [
 		health: {condition: 60},
 		devotion: -25,
 		height: 175,
-		override_H_Color: 1,
+		overrideHColor: 1,
 		race: "asian",
 		origHColor: "blonde",
 		pubicHColor: "blonde",
@@ -2584,11 +2592,11 @@ App.Data.HeroSlaves.D = [
 		origRace: "white",
 		race: "black",
 		eye: {origColor: "blue-green"},
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
-		override_Skin: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
+		overrideSkin: 1,
 		origHColor: "fair blonde",
 		eyebrowHColor: "blonde",
 		pubicHColor: "blonde",
@@ -2615,7 +2623,7 @@ App.Data.HeroSlaves.D = [
 		ovaryAge: 23,
 		health: {condition: 20},
 		devotion: -90,
-		override_H_Color: 1,
+		overrideHColor: 1,
 		race: "white",
 		origHColor: "pink",
 		pubicHColor: "pink",
@@ -2650,15 +2658,16 @@ App.Data.HeroSlaves.D = [
 		weight: 20,
 		height: 257,
 		race: "middle eastern",
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		origHColor: "black and oily",
 		eyebrowHColor: "black",
 		pubicHColor: "black",
 		underArmHColor: "black",
 		origSkin: "brown",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "shaved on the left side",
 		boobs: 1200,
 		butt: 4,
@@ -2739,10 +2748,10 @@ App.Data.HeroSlaves.D = [
 		height: 155,
 		nationality: "Mexican",
 		race: "latina",
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		origHColor: "dark red",
 		eyebrowHColor: "red",
 		pubicHColor: "red",
@@ -2825,11 +2834,12 @@ App.Data.HeroSlaves.D = [
 		height: 155,
 		race: "white",
 		eye: {origColor: "blue-green"},
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "red",
 		hColor: "bright red",
 		origSkin: "pure white",
 		hLength: 1200,
+		// @ts-expect-error custom hair style
 		hStyle: "wavy",
 		waist: -55,
 		boobs: 800,
@@ -2871,13 +2881,14 @@ App.Data.HeroSlaves.D = [
 		height: 145,
 		race: "asian",
 		nationality: "Japanese",
-		override_Eye_Color: 1,
-		override_H_Color: 1,
+		overrideEyeColor: 1,
+		overrideHColor: 1,
 		eye: {origColor: "blue"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
 		origSkin: "fair",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "curly",
 		waist: -55,
 		boobs: 1000,
@@ -2979,6 +2990,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "brown",
 		origSkin: "black",
 		hLength: 5,
+		// @ts-expect-error custom hair style
 		hStyle: "a poor emulation of a military cut",
 		boobs: 250,
 		butt: 5,
@@ -3053,15 +3065,15 @@ App.Data.HeroSlaves.D = [
 		height: 190,
 		nationality: "Slovak",
 		race: "white",
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		origHColor: "white with red stripes",
 		eyebrowHColor: "white",
 		pubicHColor: "white",
 		underArmHColor: "white",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 100,
 		hStyle: "braided",
@@ -3160,6 +3172,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "blonde",
 		origSkin: "pale",
 		hLength: 40,
+		// @ts-expect-error custom hair style
 		hStyle: "fashionable for a Free Cities 3rd Grade Teacher, up in a tight bun",
 		pubicHStyle: "bushy",
 		waist: -55,
@@ -3213,10 +3226,10 @@ App.Data.HeroSlaves.D = [
 		height: 190,
 		nationality: "Central African",
 		race: "black",
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		eye: {origColor: "green"},
 		origHColor: "golden blonde with copper streaks",
 		eyebrowHColor: "blonde",
@@ -3224,6 +3237,7 @@ App.Data.HeroSlaves.D = [
 		underArmHColor: "blonde",
 		origSkin: "brown",
 		hLength: 35,
+		// @ts-expect-error custom hair style
 		hStyle: "shoulder-length, plaited in cornrow braids; a single thin braid adorned with several colorful feathers and fearsome fang of unknown origin is hanging aside $his left eye",
 		pubicHStyle: "in a strip",
 		waist: -55,
@@ -3271,10 +3285,11 @@ App.Data.HeroSlaves.D = [
 		race: "white",
 		eye: {origColor: "green"},
 		origHColor: "red",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		hColor: "deep red",
 		origSkin: "fair",
 		hLength: 10,
+		// @ts-expect-error custom hair style
 		hStyle: "pleasantly frames $his face",
 		waist: -55,
 		boobs: 900,
@@ -3340,6 +3355,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "blonde",
 		origSkin: "pale",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "tied back into two braids",
 		boobs: 800,
 		butt: 2.5,
@@ -3385,16 +3401,17 @@ App.Data.HeroSlaves.D = [
 		devotion: 90,
 		height: 155,
 		race: "white",
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		origHColor: "black with deep red highlights",
 		eyebrowHColor: "red",
 		pubicHColor: "red",
 		underArmHColor: "red",
 		origSkin: "pale",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "disheveled",
 		waist: -55,
 		boobs: 500,
@@ -3480,6 +3497,7 @@ App.Data.HeroSlaves.D = [
 		race: "asian",
 		origSkin: "dark",
 		hLength: 10,
+		// @ts-expect-error custom hair style
 		hStyle: "held back by a white bandana",
 		boobs: 600,
 		butt: 4,
@@ -3672,6 +3690,7 @@ App.Data.HeroSlaves.D = [
 		race: "asian",
 		origHColor: "black",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "tied into a neat ponytail",
 		boobs: 300,
 		butt: 1,
@@ -3715,6 +3734,7 @@ App.Data.HeroSlaves.D = [
 		pubicHColor: "black",
 		origSkin: "pale",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "tied into Chinese buns.",
 		pubicHStyle: "in a strip",
 		boobs: 755,
@@ -3761,6 +3781,7 @@ App.Data.HeroSlaves.D = [
 		nationality: "Ugandan",
 		race: "black",
 		hLength: 150,
+		// @ts-expect-error custom hair style
 		hStyle: "bushy",
 		pubicHStyle: "bushy",
 		waist: -55,
@@ -3822,9 +3843,10 @@ App.Data.HeroSlaves.D = [
 		eye: {origColor: "blue"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 20,
+		// @ts-expect-error custom hair style
 		hStyle: "braided into pigtails",
 		pubicHStyle: "bushy",
 		waist: -55,
@@ -3861,7 +3883,7 @@ App.Data.HeroSlaves.D = [
 		eye: {origColor: "blue"},
 		origHColor: "red",
 		pubicHColor: "red",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 140,
 		hStyle: "neat",
@@ -4080,7 +4102,7 @@ App.Data.HeroSlaves.Dextreme = [
 		weight: 20,
 		height: 152,
 		race: "white",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		pubicHColor: "purple",
 		origSkin: "pale",
 		eye: {origColor: "blue"},
@@ -4114,9 +4136,9 @@ App.Data.HeroSlaves.Dextreme = [
 		devotion: -75,
 		weight: 20,
 		race: "white",
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		eyebrowHColor: "blonde",
 		pubicHColor: "blonde",
 		underArmHColor: "blonde",
@@ -4197,7 +4219,7 @@ App.Data.HeroSlaves.Dextreme = [
 		devotion: 100,
 		weight: 40,
 		origRace: "white",
-		override_Race: 1,
+		overrideRace: 1,
 		race: "latina",
 		eye: {origColor: "blue"},
 		origHColor: "red",
@@ -4276,7 +4298,7 @@ App.Data.HeroSlaves.Dextreme = [
 		height: 155,
 		nationality: "Mexican",
 		race: "latina",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "raven black with red highlights",
 		origSkin: "brown",
 		hLength: 10,
@@ -4379,6 +4401,7 @@ App.Data.HeroSlaves.Dextreme = [
 		pubicHColor: "brown",
 		origSkin: "white",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "disheveled",
 		boobs: 400,
 		butt: 2,
@@ -4487,7 +4510,7 @@ App.Data.HeroSlaves.Dextreme = [
 		eye: {origColor: "blue"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 60,
 		hStyle: "neat",
diff --git a/src/npc/databases/ddSlavesDatabase.js b/src/npc/databases/ddSlavesDatabase.js
index 0fd5f109db25dcc1731b79951f4e78adcc8b6b1d..0f87272951177e61a695a9a28d5f87eb569909ae 100644
--- a/src/npc/databases/ddSlavesDatabase.js
+++ b/src/npc/databases/ddSlavesDatabase.js
@@ -1,4 +1,3 @@
-/* eslint-disable camelcase */
 
 /**
  * @type {FC.SlaveTemplate[]}
@@ -190,7 +189,7 @@ App.Data.HeroSlaves.DD = [
 		race: "white",
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 10,
 		boobs: 1000,
@@ -665,6 +664,7 @@ App.Data.HeroSlaves.DD = [
 		pubicHColor: "blonde",
 		origSkin: "white",
 		hLength: 15,
+		// @ts-expect-error custom hair style
 		hStyle: "in a boyish cut",
 		boobs: 300,
 		butt: 1,
@@ -702,6 +702,7 @@ App.Data.HeroSlaves.DD = [
 		pubicHColor: "white",
 		origSkin: "extremely pale",
 		hLength: 15,
+		// @ts-expect-error custom hair style
 		hStyle: "in a boyish cut",
 		waist: -55,
 		boobs: 100,
@@ -820,12 +821,13 @@ App.Data.HeroSlaves.DD = [
 		devotion: 31,
 		nationality: "Chinese",
 		race: "asian",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "black",
 		hColor: "dark brown with bleached highlights",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "in a braided ponytail",
 		waist: -55,
 		boobs: 200,
@@ -868,9 +870,10 @@ App.Data.HeroSlaves.DD = [
 		eye: {origColor: "black"},
 		origHColor: "sparkling and shiny golden red",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "in thick, heavy braids",
 		waist: -100,
 		boobs: 9200,
@@ -995,12 +998,12 @@ App.Data.HeroSlaves.DD = [
 		height: 155,
 		heightImplant: -1,
 		race: "middle eastern",
-		override_Eye_Color: 1,
+		overrideEyeColor: 1,
 		eye: {origColor: "blue"},
-		override_H_Color: 1,
-		override_Brow_H_Color: 1,
-		override_Arm_H_Color: 1,
-		override_Pubic_H_Color: 1,
+		overrideHColor: 1,
+		overrideBrowHColor: 1,
+		overrideArmHColor: 1,
+		overridePubicHColor: 1,
 		origHColor: "peachy fading into a red ombre at the bottom",
 		eyebrowHColor: "red",
 		pubicHColor: "red",
@@ -1052,13 +1055,14 @@ App.Data.HeroSlaves.DD = [
 		devotion: 5,
 		height: 155,
 		race: "middle eastern",
-		override_H_Color: 1,
-		override_Eye_Color: 1,
+		overrideHColor: 1,
+		overrideEyeColor: 1,
 		eye: {origColor: "blue"},
 		origHColor: "white",
 		pubicHColor: "white",
 		origSkin: "dark",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "tied in a bun using a pearl chain",
 		heels: 1,
 		boobs: 200,
@@ -1101,12 +1105,13 @@ App.Data.HeroSlaves.DD = [
 		height: 155,
 		nationality: "Korean",
 		race: "asian",
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "black",
 		hColor: "onyx black and rainbow-streaked",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "styled in high chignon resembling a traditional Japanese geisha's Shimada hairstyle, with plenty of decorated hairpins",
 		waist: -55,
 		boobs: 6000,
@@ -1169,6 +1174,7 @@ App.Data.HeroSlaves.DD = [
 		pubicHColor: "black",
 		origSkin: "fair",
 		hLength: 50,
+		// @ts-expect-error custom hair style
 		hStyle: "styled up in schoolgirl pigtails with bangs",
 		boobs: 700,
 		natural: {boobs: 400},
@@ -1211,11 +1217,12 @@ App.Data.HeroSlaves.DD = [
 		race: "white",
 		nationality: "Norwegian",
 		eye: {origColor: "blue"},
-		override_H_Color: 1,
+		overrideHColor: 1,
 		origHColor: "black",
 		hColor: "onyx black",
 		origSkin: "pale",
 		hLength: 110,
+		// @ts-expect-error custom hair style
 		hStyle: "neat with Nordic braids throughout",
 		waist: -55,
 		boobs: 800,
@@ -1401,7 +1408,7 @@ App.Data.HeroSlaves.DD = [
 		eye: {origColor: "blue"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 90,
 		hStyle: "neat",
@@ -1479,6 +1486,7 @@ App.Data.HeroSlaves.DDextreme = [
 		pubicHColor: "black",
 		origSkin: "pale",
 		hLength: 30,
+		// @ts-expect-error custom hair style
 		hStyle: "curly",
 		boobs: 1000,
 		natural: {boobs: 800},
@@ -1567,6 +1575,7 @@ App.Data.HeroSlaves.DDextreme = [
 		pubicHColor: "blonde",
 		origSkin: "pale",
 		hLength: 10,
+		// @ts-expect-error custom hair style
 		hStyle: "beautifully framing $his face",
 		waist: -55,
 		boobs: 500,
@@ -1607,7 +1616,7 @@ App.Data.HeroSlaves.DDextreme = [
 		eye: {origColor: "blue"},
 		origHColor: "black",
 		pubicHColor: "black",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 0,
 		prostate: 1,
@@ -1709,7 +1718,7 @@ App.Data.HeroSlaves.DDextreme = [
 		eye: {origColor: "blue"},
 		origHColor: "black",
 		pubicHColor: "black",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "spray tanned",
 		hLength: 10,
 		hStyle: "neat",
diff --git a/src/npc/databases/dfSlavesDatabase.js b/src/npc/databases/dfSlavesDatabase.js
index cd0fcb1aa03b3c1f5399858958b55db6ba56cc94..f63be3d536ea871563a7ea1b188b374f650fdc2d 100644
--- a/src/npc/databases/dfSlavesDatabase.js
+++ b/src/npc/databases/dfSlavesDatabase.js
@@ -1,4 +1,3 @@
-/* eslint-disable camelcase */
 
 /**
  * @type {FC.SlaveTemplate[]}
@@ -54,7 +53,7 @@ App.Data.HeroSlaves.DF = [
 		eye: {origColor: "dark brown"},
 		origHColor: "blonde",
 		pubicHColor: "blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hStyle: "neat",
 		hLength: 60,
@@ -99,7 +98,7 @@ App.Data.HeroSlaves.DF = [
 		eye: {origColor: "blue"},
 		origHColor: "red",
 		pubicHColor: "red",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 10,
 		hStyle: "neat",
@@ -144,9 +143,10 @@ App.Data.HeroSlaves.DF = [
 		eye: {origColor: "light green"},
 		origHColor: "dark blonde",
 		pubicHColor: "dark blonde",
-		override_Skin: 1,
+		overrideSkin: 1,
 		origSkin: "sun tanned",
 		hLength: 60,
+		// @ts-expect-error custom hair style
 		hStyle: "in curly pigtails",
 		pubicHStyle: "waxed",
 		boobs: 650,
@@ -351,6 +351,7 @@ App.Data.HeroSlaves.DFextreme = [
 		origHColor: "brown",
 		origSkin: "pale",
 		hLength: 10,
+		// @ts-expect-error custom hair style
 		hStyle: "wavy",
 		pubicHStyle: "waxed",
 		boobs: 400,
diff --git a/src/npc/generate/generateMarketSlave.js b/src/npc/generate/generateMarketSlave.js
index 23268f5664542b75ce8f5f1ead572f8f80fc3191..9814d515b3acfb49c6fb7f84fff2a01e04baf4c2 100644
--- a/src/npc/generate/generateMarketSlave.js
+++ b/src/npc/generate/generateMarketSlave.js
@@ -1,4 +1,3 @@
-/* eslint-disable camelcase */
 // cSpell:ignore WCPU
 
 /**
@@ -19,7 +18,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 				SGProp.maxAge = 19;
 			} else if (V.corp.SpecAge === 3) {
 				r += `Newly enslaved MILFs are strongly favored for training. `;
-				if (V.pedo_mode === 1) {
+				if (V.pedoMode === 1) {
 					SGProp.minAge = 24;
 					SGProp.maxAge = V.retirementAge - 1;
 				} else {
@@ -1741,9 +1740,9 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			slave.eyebrowHColor = "blonde";
 			slave.race = "white";
 			slave.skin = "sun tanned";
-			slave.override_H_Color = 1;
-			slave.override_Race = 1;
-			slave.override_Skin = 1;
+			slave.overrideHColor = 1;
+			slave.overrideRace = 1;
+			slave.overrideSkin = 1;
 			slave.custom.tattoo = "$He has the coat of arms of St. Claver Preparatory tattooed on $his left cheek.";
 			break;
 		}
@@ -2376,7 +2375,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			break;
 		}
 		case "gangs and smugglers": {
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				SGProp.minAge = 6;
 				SGProp.maxAge = 18;
 				SGProp.ageOverridesPedoMode = 1;
@@ -2628,7 +2627,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			break;
 		}
 		case "military prison": {
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				SGProp.minAge = 12;
 				SGProp.maxAge = 18;
 				SGProp.ageOverridesPedoMode = 1;
@@ -2820,7 +2819,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			break;
 		}
 		case "white collar": {
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				SGProp.minAge = 16;
 				SGProp.maxAge = 45;
 				SGProp.ageOverridesPedoMode = 1;
@@ -2957,7 +2956,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			break;
 		}
 		case "low tier criminals": {
-			if (V.pedo_mode === 1) {
+			if (V.pedoMode === 1) {
 				SGProp.minAge = 6;
 				SGProp.maxAge = 18;
 				SGProp.ageOverridesPedoMode = 1;
diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js
index 6c850282881ee71e27bd0a79bfb87a6eda822fab..eee266325b32630a49e847658c977faf4c5c5b25 100644
--- a/src/npc/generate/generateNewSlaveJS.js
+++ b/src/npc/generate/generateNewSlaveJS.js
@@ -35,7 +35,6 @@ globalThis.GenerateNewSlavePram = function() {
 	this.disableDisability = 0;
 };
 
-/* eslint-disable camelcase */
 globalThis.GenerateNewSlave = (function() {
 	"use strict";
 
@@ -1125,7 +1124,7 @@ globalThis.GenerateNewSlave = (function() {
 		}
 		if (slave.origHColor === "blonde" && Math.random() > 0.85) {
 			slave.eyebrowHColor = jsEither(["black", "brown", "brown", "brown", "brown"]);
-			slave.override_Brow_H_Color = 1;
+			slave.overrideBrowHColor = 1;
 		} else {
 			slave.eyebrowHColor = slave.origHColor;
 		}
@@ -1144,7 +1143,7 @@ globalThis.GenerateNewSlave = (function() {
 		}
 		if (slave.origHColor === "blonde" && Math.random() > 0.85) {
 			slave.eyebrowHColor = jsEither(["black", "brown", "brown", "brown", "brown"]);
-			slave.override_Brow_H_Color = 1;
+			slave.overrideBrowHColor = 1;
 		} else {
 			slave.eyebrowHColor = slave.origHColor;
 		}
@@ -1387,15 +1386,15 @@ globalThis.GenerateNewSlave = (function() {
 
 	function generateAge() {
 		if (x.maxAge > 998) {
-			x.maxAge = (V.pedo_mode === 1) ? 18 : 42;
-		} else if (V.pedo_mode === 1 && x.ageOverridesPedoMode === 0 && x.maxAge > 18) {
+			x.maxAge = (V.pedoMode === 1) ? 18 : 42;
+		} else if (V.pedoMode === 1 && x.ageOverridesPedoMode === 0 && x.maxAge > 18) {
 			x.maxAge = 18;
 		}
 		x.maxAge = Math.min(V.retirementAge - 1, x.maxAge);
 		x.minAge = Math.min(V.retirementAge - 1, x.minAge);
 		if (x.minAge < V.minimumSlaveAge) {
 			x.minAge = V.minimumSlaveAge;
-		} else if (V.pedo_mode === 1 && x.ageOverridesPedoMode === 0) {
+		} else if (V.pedoMode === 1 && x.ageOverridesPedoMode === 0) {
 			x.minAge = V.minimumSlaveAge;
 		}
 		if (x.maxAge >= 30 && FutureSocieties.isActive('FSMaturityPreferentialist') && x.mature === 1) {
@@ -1876,13 +1875,13 @@ globalThis.generateSalonModifications = function(slave) {
 		if (jsRandom(1, 10) === 1 || (["black", "brown", "chestnut", "chocolate brown", "dark brown", "jet black"].includes(slave.hColor) && jsRandom(1, 10) !== 1)) {
 			slave.eyebrowHColor = slave.hColor;
 		}
-		slave.override_H_Color = 1;
+		slave.overrideHColor = 1;
 	} else if ((jsRandom(1, 100) === 1) || ((jsRandom(1, 20) === 1) && ["a barber", "a barista", "a bimbo", "a blogger", "a camgirl", "a camwhore", "a cheerleader", "a child actress", "a clown", "a club recruiter", "a cocktail waitress", "a comedian", "a cosmetologist", "a dominatrix", "a gang member", "a house DJ", "a juvenile delinquent", "a magician's assistant", "a medium", "a mime", "a musician", "a party girl", "a poet", "a political activist", "a porn star", "a radio show host", "a stage magician", "a street performer", "a stripper", "a student", "a video game streamer", "an actress", "an artist", "an aspiring pop star", "an idol"].includes(slave.career))) {
 		slave.hColor = jsEither(["blazing red", "blue-violet", "blue", "burgundy", "dark blue", "deep red", "green-yellow", "green", "grey", "ivory", "neon blue", "neon green", "neon pink", "pink", "platinum blonde", "platinum blonde", "purple", "red", "sea green", "silver"]);
 		if (jsRandom(1, 3) === 1) {
 			slave.eyebrowHColor = slave.hColor;
 		}
-		slave.override_H_Color = 1;
+		slave.overrideHColor = 1;
 	}
 	if (jsRandom(1, 6) === 1) {
 		slave.pubicHColor = slave.hColor;
@@ -1916,20 +1915,20 @@ globalThis.generateSalonModifications = function(slave) {
 		if ((jsRandom(1, 40) === 1) || (["a bimbo", "an exotic dancer", "a trophy wife", "a party girl"].includes(slave.career) && (jsRandom(1, 10) === 1))) {
 			slave.skin = "spray tanned";
 		} else if (skinToneLevel(slave.origSkin) > 3) {
-			let tan_chance = jsRandom(1, 50);
+			let tanChance = jsRandom(1, 50);
 			if (["Swedish"].includes(slave.nationality) || ["southern european", "latina", "indo-aryan", "middle eastern", "semitic"].includes(slave.race)) {
-				tan_chance += 5;
+				tanChance += 5;
 			}
 			/* certain jobs being more likely to expose you to harmful solar radiation*/
 			if (["a beggar", "a bimbo", "a construction worker", "a courier", "a delivery woman", "a farm laborer", "a farmer's daughter", "a farmer", "a farmhand", "a gardener", "a lifeguard", "a personal trainer", "a rancher", "a shepherd", "a street performer", "a street vendor", "a student athlete", "a tour guide", "a trophy wife", "an athlete", "an exotic dancer", "homeless"].includes(slave.career)) {
-				tan_chance += 10;
+				tanChance += 10;
 			}
 			/* certain areas expose people to more harmful solar radiation*/
 			if (["Africa", "Australia", "South America", "the Middle East"].includes(V.continent)) {
-				tan_chance += 5;
+				tanChance += 5;
 			}
-			tan_chance += (skinToneLevel(slave.origSkin) - 8);
-			if (tan_chance >= 45) {
+			tanChance += (skinToneLevel(slave.origSkin) - 8);
+			if (tanChance >= 45) {
 				slave.skin = "sun tanned";
 			}
 		}
diff --git a/src/npc/generate/generateRelatedSlave.js b/src/npc/generate/generateRelatedSlave.js
index e725971a589c21b7eb6114f862621cf796738ff3..f76a0e1fbd4074e6d05d30d44bb5327b1544614b 100644
--- a/src/npc/generate/generateRelatedSlave.js
+++ b/src/npc/generate/generateRelatedSlave.js
@@ -179,7 +179,7 @@ globalThis.generateRelatedSlave = (function() {
 		const parentAge = slave.actualAge;
 		let maxAge = Math.min(22, Math.max(V.minimumSlaveAge, parentAge - 11));
 		let minAge = Math.min(Math.max(8, V.minimumSlaveAge), maxAge);
-		if (V.pedo_mode === 1) {
+		if (V.pedoMode === 1) {
 			minAge = V.minimumSlaveAge;
 		}
 		slave.actualAge = random(minAge, maxAge);
diff --git a/src/npc/generate/heroCreator.js b/src/npc/generate/heroCreator.js
index a321ac4f512b84c454a5e5a76dda32f5711165d3..70fd96af73cec8f57e79a3134f770215ebcc2381 100644
--- a/src/npc/generate/heroCreator.js
+++ b/src/npc/generate/heroCreator.js
@@ -106,25 +106,25 @@ App.Utils.getHeroSlave = function(heroSlave) {
 	if (!heroSlave.underArmHColor) {
 		newSlave.underArmHColor = newSlave.hColor;
 	}
-	if (newSlave.override_Race !== 1) {
+	if (newSlave.overrideRace !== 1) {
 		newSlave.origRace = newSlave.race;
 	}
-	if (newSlave.override_Eye_Color !== 1) {
+	if (newSlave.overrideEyeColor !== 1) {
 		resetEyeColor(newSlave, "both");
 	}
-	if (newSlave.override_H_Color !== 1) {
+	if (newSlave.overrideHColor !== 1) {
 		newSlave.hColor = getGeneticHairColor(newSlave);
 	}
-	if (newSlave.override_Arm_H_Color !== 1) {
+	if (newSlave.overrideArmHColor !== 1) {
 		newSlave.underArmHColor = getGeneticHairColor(newSlave);
 	}
-	if (newSlave.override_Pubic_H_Color !== 1) {
+	if (newSlave.overridePubicHColor !== 1) {
 		newSlave.pubicHColor = getGeneticHairColor(newSlave);
 	}
-	if (newSlave.override_Brow_H_Color !== 1) {
+	if (newSlave.overrideBrowHColor !== 1) {
 		newSlave.eyebrowHColor = getGeneticHairColor(newSlave);
 	}
-	if (newSlave.override_Skin !== 1) {
+	if (newSlave.overrideSkin !== 1) {
 		newSlave.skin = getGeneticSkinColor(newSlave);
 	}
 	if (!heroSlave.natural?.height) {
diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js
index 688644b4086c6152248cd8e8984420c80c687b31..0f33ff5574c5ea4b81b51df512b6ab433decd3d1 100644
--- a/src/npc/generate/newSlaveIntro.js
+++ b/src/npc/generate/newSlaveIntro.js
@@ -237,7 +237,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 		}
 
 		if (V.seeRace === 1) {
-			if (slave.override_Race !== 1) {
+			if (slave.overrideRace !== 1) {
 				slave.origRace = slave.race;
 			}
 			if (slave.race !== slave.origRace) {
diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js
index 51f8f540ae02b18376cd41f5bef3f80f4224ea0c..2b8782e11282aee0e7f38823fa2cdba366abeaca 100644
--- a/src/npc/startingGirls/startingGirls.js
+++ b/src/npc/startingGirls/startingGirls.js
@@ -2196,10 +2196,10 @@ App.StartingGirls.finalize = function(slave) {
 				V.PC.counter.slavesKnockedUp++;
 			}
 			// Make newSlave keep certain changes
-			slave.override_H_Color = 1;
-			slave.override_Arm_H_Color = 1;
-			slave.override_Brow_H_Color = 1;
-			slave.override_Skin = 1;
+			slave.overrideHColor = 1;
+			slave.overrideArmHColor = 1;
+			slave.overrideBrowHColor = 1;
+			slave.overrideSkin = 1;
 
 			newSlave(clone(slave));
 		};
diff --git a/src/npc/startingGirls/startingGirlsPassage.js b/src/npc/startingGirls/startingGirlsPassage.js
index f8c1c56a2901359fa82968c74c3bf2b565b0bf73..51e3a1bc58c151c749304ae3f820d444fa806c22 100644
--- a/src/npc/startingGirls/startingGirlsPassage.js
+++ b/src/npc/startingGirls/startingGirlsPassage.js
@@ -111,7 +111,7 @@ App.StartingGirls.passage = function() {
 						V.activeSlave = App.StartingGirls.generate({nationality: "American", race: "white"});
 						V.activeSlave.eye.origColor = "blue";
 						V.activeSlave.skin = "sun tanned";
-						V.activeSlave.override_Skin = 1;
+						V.activeSlave.overrideSkin = 1;
 						V.activeSlave.origHColor = "blonde";
 						V.activeSlave.markings = "none";
 						V.activeSlave.face = 55;
diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js
index db69f86e3ffc3b225bf4aa6bc0736f8e0218d5e0..47d5b855a19579f9bce58f066d2390a746032e55 100644
--- a/src/npc/surgery/surgery.js
+++ b/src/npc/surgery/surgery.js
@@ -182,7 +182,7 @@ App.Medicine.Surgery.sizingProcedures = function() {
 	 * @template {FC.SizingImplantTarget} T
 	 * @param {FC.SizingImplantTarget} bodyPart
 	 * @param {App.Entity.SlaveState} slave
-	 * @param {FC.Medicine.Surgery.SizingOptions<T>} [options]
+	 * @param {FC.Medicine.Surgery.SizingOptions<any>} [options]
 	 * @returns {App.Medicine.Surgery.Procedure[]}
 	 */
 	function bodyPart(bodyPart, slave, options) {
diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js
index f5dbdd5bb282431d0ae0077d217b7aade17cd768..1f61ed0a914a987142f440160cb6c47c6e4c8886 100644
--- a/src/player/js/PlayerState.js
+++ b/src/player/js/PlayerState.js
@@ -2076,7 +2076,6 @@ App.Entity.PlayerState = class PlayerState {
 		};
 		/** flavor of their milk*/
 		this.milkFlavor = "none";
-		/* eslint-disable camelcase*/
 		this.NCSyouthening = 0;
 		/** erratic weight gain
 		 *
diff --git a/src/player/js/enslavePlayer.js b/src/player/js/enslavePlayer.js
index 19ab61ab9ea983321f1b6f97a30f4400c13ed33d..fa5e9358080fd8c686ca3fa6eccf0e1c992683b6 100644
--- a/src/player/js/enslavePlayer.js
+++ b/src/player/js/enslavePlayer.js
@@ -92,13 +92,13 @@ globalThis.convertPlayerToSlave = function(player, badEnd = "boring") {
 	slave.onDiet = 0;
 	slave.haircuts = 0;
 	slave.newGamePlus = 0;
-	slave.override_Race = 0;
-	slave.override_Skin = 0;
-	slave.override_Eye_Color = 0;
-	slave.override_H_Color = 0;
-	slave.override_Pubic_H_Color = 0;
-	slave.override_Arm_H_Color = 0;
-	slave.override_Brow_H_Color = 0;
+	slave.overrideRace = 0;
+	slave.overrideSkin = 0;
+	slave.overrideEyeColor = 0;
+	slave.overrideHColor = 0;
+	slave.overridePubicHColor = 0;
+	slave.overrideArmHColor = 0;
+	slave.overrideBrowHColor = 0;
 	/* eslint-enable */
 	slave.slaveCost = 0;
 
diff --git a/src/pregmod/FCTV/FCTVshows.js b/src/pregmod/FCTV/FCTVshows.js
index f043e3e18e70ddce41db88f25b77965beece11b1..48a3afa24a28f48db179c9d9f73f3e4315ba9763 100644
--- a/src/pregmod/FCTV/FCTVshows.js
+++ b/src/pregmod/FCTV/FCTVshows.js
@@ -1028,13 +1028,13 @@ App.Data.FCTV.channels = new Map([
 					r.push(`Millie continues. "We've covered all this, but you're probably dying to know: 'what comes after?'"</p>`);
 					r.push(`<p>Millie walks once more, moving away from the moaning slaves until a beautiful slave nursing two babies and an odd looking machine come into view. "If you live somewhere that supports it, you could always sell the litter... you won't make much though. All the care that went into creating a high-quality litter will likely be wasted. Of course, you could always keep the litter; let the slaves raise 'em until they're old enough to be trained." Millie rubs the thin hair of one of the suckling infants. "That's the traditional way. There's good money in it if you're successful, but it's a sizable investment of time and money to get to the first sale. If you've kept up the breeding and have room, you'll finally be able to sell a new batch of slaves each year, and of course keep some for breeding." Millie gives the slave's hip and ass a quick caress. "This one here's a second generation breeding slut; she's already given me several healthy litters."</p>`);
 					r.push(`<p>Millie faces the camera. "But what if you want to do some serious breeding? Maybe you want a litter that'll grow to have gigantic natural tits with rich milk that just pours out of the nipple, or maybe you want a litter with hips so wide that they can fit a head between their legs without opening them? The trouble is time..." Millie looks sad for a moment. "Slaves take too long to reach maturity; even if you start breeding 'em young, how many decades will it be before you reach that perfect third or fourth generation?" She walks over to the machine and pats it lovingly. "Thanks to this beauty of modern science, we can accelerate the growth of your most promising calf. Instead of waiting`);
-					if (V.pedo_mode === 0) {
+					if (V.pedoMode === 0) {
 						r.push(`18 years`);
 					} else {
 						r.push(`${V.minimumSlaveAge} years`);
 					}
 					r.push(`to breed 'em, you can have them ready to go in`);
-					if (V.pedo_mode === 0) {
+					if (V.pedoMode === 0) {
 						r.push(`only 3.`);
 					} else {
 						r.push(`as little as a year.`);
diff --git a/src/pregmod/blackMarket.js b/src/pregmod/blackMarket.js
index e3f49ceee7f54887b9b0256db6e48e56bf31d5fd..5c04e20c8eee7d86a33fdb6e2b5b4f538585b9be 100644
--- a/src/pregmod/blackMarket.js
+++ b/src/pregmod/blackMarket.js
@@ -40,11 +40,48 @@ App.UI.blackMarket = function() {
 	App.Events.addParagraph(node, [`Once inside, you are able to fully absorb in the sights and sounds of the market proper. All sorts of items are available for purchase, from exotic beasts that may very well be the last of their kind, to the most lethal of weaponry both old and new, and even luxuries long gone. Despite the overbearing security, one's wallet can easily be emptied in this place.`]);
 
 	const options = new App.UI.OptionsGroup();
-	App.UI.Player.refreshmentChoice(options);
-	App.Events.addParagraph(node, [
-		`There is quite the selection of refreshments available, you could always shift your orders from ${V.PC.refreshment} to something new.`,
-		options.render()
-	]);
+	App.UI.Player.refreshmentChoice(options, true);
+	r.push(`There is quite the selection of refreshments available, you could always shift your orders from ${V.PC.refreshment} to something new.`);
+	/*
+	if (!V.PC.refreshment.includes("fertility") && (V.PC.ovaries === 1 || V.PC.mpreg === 1)) {
+		if (V.PC.refreshmentType === 4) {
+			r.push(
+				`Particularly, certain injectables catch your eye, claiming to be a refined extract of opiates, genetically altered to evade the adverse effects of heroin use without sacrificing its recreational value. They are referred to as`,
+				App.UI.DOM.link(
+					"Fertility Booster",
+					() => {
+						V.PC.refreshmentType = 4;
+						V.PC.refreshment = "fertility booster";
+						App.UI.reload();
+					},
+					[],
+					"",
+					""
+				),
+				`on the black market because of rummors that they may have a side effect of increased fertility.`
+			);
+		} else {
+			r.push(
+				`You notice a high-proof beverage that is manufactured, so the label says, from a combination of psychoactive botanicals macerated in alcohol under specific circumstances.`,
+				App.UI.DOM.link(
+					"Fertility Syrup",
+					() => {
+						V.PC.refreshmentType = 1;
+						V.PC.refreshment = "fertility syrup";
+						App.UI.reload();
+					},
+					[],
+					"",
+					""
+				),
+				`is a suggestive term, which is undoubtedly a marketing ploy.`
+			);
+		}
+	};
+	*/
+	r.push(options.render());
+	App.Events.addParagraph(node, r);
+	r = [];
 
 	if (V.consumerDrugs === 0 && V.dispensary === 1 && V.PC.skill.medicine < 100) {
 		r = [];
@@ -349,7 +386,7 @@ App.UI.blackMarket = function() {
 							} else {
 								if (V.arcologies[0].childhoodFertilityInducedNCSResearch === 0) {
 									const match = (V.arcologies[0].FSYouthPreferentialist > 0) ? "Knowing your arcology, I think you could be happy with the results!" : "I'm not sure this is a good match for your arcology's current society at this moment, but I'm sure you could have fun with it.";
-									if (V.pedo_mode) {
+									if (V.pedoMode) {
 										r.push(
 											`"If you like sexy little toy dolls, I mean biological`,
 											App.UI.DOM.makeElement("span", "lolis", ["coral", "bold"]),