diff --git a/src/js/modification.js b/src/js/modification.js
index aaedaf67f8498577e15f90fa6c04ed815924f6e8..2a9358b08cdf07248ec5b33b88270aa6a3782fee 100644
--- a/src/js/modification.js
+++ b/src/js/modification.js
@@ -556,224 +556,3 @@ App.Medicine.Modification.setTattoo = function(slave, location, design) {
 	slave[`${location}Tat`] = design;
 	return r;
 };
-
-/**
- * @param {App.Entity.PlayerState|App.Entity.SlaveState} entity
- * @param {boolean} player
- * @returns {HTMLDivElement}
- */
-App.Medicine.Modification.eyeSelector = function(entity, player = false) {
-	const {He, him, his} = getPronouns(entity);
-
-	let selectedSide = "none";
-	let selectedIris = "none";
-	let selectedPupil = "none";
-	let selectedSclera = "none";
-
-	let removeDiv = document.createElement("div");
-	removeDiv.classList.add("choices");
-	let applyDiv = document.createElement("div");
-
-	const container = document.createElement("div");
-	container.append(
-		`${player ? "You have" : `${He} has`} ${App.Desc.eyesColorLong(entity)}, ${hasBothEyes(
-			entity) ? "they are" : "it is"} ${App.Desc.eyesType(entity)}.`,
-		removeDiv, "You have a number of contact lenses in various colors available. ",
-		App.UI.DOM.makeElement("span", `You can change what ${player ? "your" : his} eyes look like.`, "note"),
-		assembleLinks(), applyDiv
-	);
-	updateRemoveDiv();
-	updateApplyDiv();
-	return container;
-
-	function assembleLinks() {
-		const sides = ["left", "right", "both"];
-		const irisColors = ["amber", "black", "blue", "brown", "green", "hazel", "orange", "pale-grey", "pink", "red",
-			"sky-blue", "turquoise", "white", "yellow"];
-		const pupilShapes = ["none", "circular", "almond-shaped", "bright", "catlike", "demonic", "devilish",
-			"goat-like", "heart-shaped", "hypnotic", "serpent-like", "star-shaped", "teary", "vacant", "wide-eyed"];
-		const scleraColors = ["none", "white", "amber", "black", "blue", "brown", "green", "hazel", "orange",
-			"pale-grey", "pink", "red", "sky-blue", "turquoise", "yellow"];
-		const div = document.createDocumentFragment();
-		div.append(
-			assembleList("Side: ", sides, value => selectedSide = value, selectedIris),
-			assembleList("Iris: ", irisColors, value => selectedIris = value, selectedSide),
-			assembleList("Pupil: ", pupilShapes, value => selectedPupil = value, selectedPupil),
-			assembleList("Sclera: ", scleraColors, value => selectedSclera = value, selectedSclera)
-		);
-		return div;
-	}
-
-	/**
-	 * @param {string} name
-	 * @param {Array<string>} list
-	 * @param {Function}callback
-	 * @param {string} selected
-	 * @returns {HTMLDivElement}
-	 */
-	function assembleList(name, list, callback, selected) {
-		const links = [];
-
-		for (let i = 0; i < list.length; i++) {
-			addToggle(list[i], callback, links, list[i] === selected);
-		}
-
-		const div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(name, App.UI.DOM.arrayToList(links, " | ", " | "));
-		return div;
-	}
-
-	/**
-	 * @param {string} value
-	 * @param {Function} callback
-	 * @param {Array<HTMLAnchorElement>} links
-	 * @param {boolean} [disabled]
-	 */
-	function addToggle(value, callback, links, disabled = false) {
-		const a = document.createElement("a");
-		a.append(capFirstChar(value));
-		if (disabled) {
-			a.classList.add("disabled");
-		}
-		a.onclick = () => {
-			for (let link of links) {
-				link.classList.remove("disabled");
-			}
-			a.classList.add("disabled");
-			callback(value);
-			updateRemoveDiv();
-			updateApplyDiv();
-		};
-		links.push(a);
-	}
-
-	function updateApplyDiv() {
-		$(applyDiv).empty();
-		if (selectedSide !== "none" && selectedIris !== "none") {
-			// make the following easier to read
-			let both = selectedSide === "both";
-			let leftGlass = !hasLeftEye(entity) || getLeftEyeType(entity) === 2;
-			let rightGlass = !hasRightEye(entity) || getRightEyeType(entity) === 2;
-
-			// base eye
-			let r = player ? "" : ` ${him}`;
-			if (both) {
-				if (leftGlass && rightGlass) {
-					r += ` ${selectedIris} glass eyes`;
-				} else if (leftGlass || rightGlass) {
-					r += ` a glass eye and a ${selectedIris} lens`;
-				} else {
-					r += ` ${selectedIris} lenses`;
-				}
-			} else {
-				r += " a";
-				if ((selectedSide === "left" && leftGlass) || (selectedSide === "right" && rightGlass)) {
-					r += ` ${selectedIris} glass eye`;
-				} else {
-					r += ` ${selectedIris} lens`;
-				}
-			}
-			// pupil & sclera
-			if (selectedPupil !== "none" || selectedSclera !== "none") {
-				r += " with";
-				if (selectedPupil !== "none") {
-					r += ` ${both ? selectedPupil : addA(selectedPupil)}`;
-					if (both) {
-						r += " pupils";
-					} else {
-						r += " pupil";
-					}
-					if (selectedSclera !== "none") {
-						r += " and";
-					}
-				}
-				if (selectedSclera !== "none") {
-					r += ` ${selectedSclera}`;
-					if (both) {
-						r += " sclerae";
-					} else {
-						r += " sclera";
-					}
-				}
-			}
-			if (!both) {
-				r += ` for ${player ? "your" : his} ${selectedSide} eye`;
-			}
-			r += "?";
-
-			const a = document.createElement("a");
-			a.append(player ? "Take" : "Give");
-			a.onclick = applyLink;
-			applyDiv.append(a, r);
-			if (!player) {
-				applyDiv.append(" ",
-					App.UI.DOM.makeElement("span", "This is independent from eyewear choices.", "note"));
-			}
-		}
-	}
-
-	function applyLink() {
-		// make sure the eye exists; give glass eye if there is none
-		if ((selectedSide === "left" || selectedSide === "both") && getLeftEyeType(entity) === 0) {
-			eyeSurgery(entity, "left", "glass");
-		}
-		if ((selectedSide === "right" || selectedSide === "both") && getRightEyeType(entity) === 0) {
-			eyeSurgery(entity, "right", "glass");
-		}
-
-		// apply modifications
-		setEyeColorFull(entity, selectedIris,
-			selectedPupil === "none" ? "" : selectedPupil,
-			selectedSclera === "none" ? "" : selectedSclera,
-			selectedSide);
-		cashX(forceNeg(V.modCost), "slaveMod", entity);
-
-		App.UI.reload();
-	}
-
-
-	function updateRemoveDiv() {
-		$(removeDiv).empty();
-		const links = [];
-		let _n = 0;
-		// remove lenses
-		if (hasLeftEye(entity) && getLeftEyeColor(entity) !== getGeneticEyeColor(entity, "left")) {
-			_n++;
-			links.push(removeLink("Remove left lens", () => resetEyeColor(entity, "left")));
-		}
-		if (hasRightEye(entity) && getRightEyeColor(entity) !== getGeneticEyeColor(entity, "right")) {
-			_n++;
-			links.push(removeLink("Remove right lens", () => resetEyeColor(entity, "right")));
-		}
-		if (_n === 2) {
-			links.push(removeLink("Remove both lenses", () => resetEyeColor(entity, "both")));
-		}
-		// remove glass eyes
-		_n = 0;
-		if (getLeftEyeType(entity) === 2) {
-			_n++;
-			links.push(removeLink("Remove left glass eye", () => eyeSurgery(entity, "left", "remove")));
-		}
-		if (getRightEyeType(entity) === 2) {
-			_n++;
-			links.push(removeLink("Remove right glass eye", () => eyeSurgery(entity, "right", "remove")));
-		}
-		if (_n === 2) {
-			links.push(removeLink("Remove both glass eyes", () => eyeSurgery(entity, "both", "remove")));
-		}
-		if (links.length > 0) {
-			removeDiv.append(App.UI.DOM.arrayToList(links, " | ", " | "));
-		}
-	}
-
-	function removeLink(text, callback) {
-		const a = document.createElement("a");
-		a.append(text);
-		a.onclick = () => {
-			callback();
-			App.UI.reload();
-		};
-		return a;
-	}
-};
diff --git a/src/js/salon.js b/src/js/salon.js
index 812dee1f258f663bbfcddef16011b2301b6ce023..0c8a2977891c3c2e38e4e7bf8e5ad8cc0f23c64d 100644
--- a/src/js/salon.js
+++ b/src/js/salon.js
@@ -1,3 +1,224 @@
+/**
+ * @param {App.Entity.PlayerState|App.Entity.SlaveState} entity
+ * @param {boolean} player
+ * @returns {HTMLDivElement}
+ */
+App.Medicine.Modification.eyeSelector = function(entity, player = false) {
+	const {He, him, his} = getPronouns(entity);
+
+	let selectedSide = "none";
+	let selectedIris = "none";
+	let selectedPupil = "none";
+	let selectedSclera = "none";
+
+	let removeDiv = document.createElement("div");
+	removeDiv.classList.add("choices");
+	let applyDiv = document.createElement("div");
+
+	const container = document.createElement("div");
+	container.append(
+		`${player ? "You have" : `${He} has`} ${App.Desc.eyesColorLong(entity)}, ${hasBothEyes(
+			entity) ? "they are" : "it is"} ${App.Desc.eyesType(entity)}.`,
+		removeDiv, "You have a number of contact lenses in various colors available. ",
+		App.UI.DOM.makeElement("span", `You can change what ${player ? "your" : his} eyes look like.`, "note"),
+		assembleLinks(), applyDiv
+	);
+	updateRemoveDiv();
+	updateApplyDiv();
+	return container;
+
+	function assembleLinks() {
+		const sides = ["left", "right", "both"];
+		const irisColors = ["amber", "black", "blue", "brown", "green", "hazel", "orange", "pale-grey", "pink", "red",
+			"sky-blue", "turquoise", "white", "yellow"];
+		const pupilShapes = ["none", "circular", "almond-shaped", "bright", "catlike", "demonic", "devilish",
+			"goat-like", "heart-shaped", "hypnotic", "serpent-like", "star-shaped", "teary", "vacant", "wide-eyed"];
+		const scleraColors = ["none", "white", "amber", "black", "blue", "brown", "green", "hazel", "orange",
+			"pale-grey", "pink", "red", "sky-blue", "turquoise", "yellow"];
+		const div = document.createDocumentFragment();
+		div.append(
+			assembleList("Side: ", sides, value => selectedSide = value, selectedIris),
+			assembleList("Iris: ", irisColors, value => selectedIris = value, selectedSide),
+			assembleList("Pupil: ", pupilShapes, value => selectedPupil = value, selectedPupil),
+			assembleList("Sclera: ", scleraColors, value => selectedSclera = value, selectedSclera)
+		);
+		return div;
+	}
+
+	/**
+	 * @param {string} name
+	 * @param {Array<string>} list
+	 * @param {Function}callback
+	 * @param {string} selected
+	 * @returns {HTMLDivElement}
+	 */
+	function assembleList(name, list, callback, selected) {
+		const links = [];
+
+		for (let i = 0; i < list.length; i++) {
+			addToggle(list[i], callback, links, list[i] === selected);
+		}
+
+		const div = document.createElement("div");
+		div.classList.add("choices");
+		div.append(name, App.UI.DOM.arrayToList(links, " | ", " | "));
+		return div;
+	}
+
+	/**
+	 * @param {string} value
+	 * @param {Function} callback
+	 * @param {Array<HTMLAnchorElement>} links
+	 * @param {boolean} [disabled]
+	 */
+	function addToggle(value, callback, links, disabled = false) {
+		const a = document.createElement("a");
+		a.append(capFirstChar(value));
+		if (disabled) {
+			a.classList.add("disabled");
+		}
+		a.onclick = () => {
+			for (let link of links) {
+				link.classList.remove("disabled");
+			}
+			a.classList.add("disabled");
+			callback(value);
+			updateRemoveDiv();
+			updateApplyDiv();
+		};
+		links.push(a);
+	}
+
+	function updateApplyDiv() {
+		$(applyDiv).empty();
+		if (selectedSide !== "none" && selectedIris !== "none") {
+			// make the following easier to read
+			let both = selectedSide === "both";
+			let leftGlass = !hasLeftEye(entity) || getLeftEyeType(entity) === 2;
+			let rightGlass = !hasRightEye(entity) || getRightEyeType(entity) === 2;
+
+			// base eye
+			let r = player ? "" : ` ${him}`;
+			if (both) {
+				if (leftGlass && rightGlass) {
+					r += ` ${selectedIris} glass eyes`;
+				} else if (leftGlass || rightGlass) {
+					r += ` a glass eye and a ${selectedIris} lens`;
+				} else {
+					r += ` ${selectedIris} lenses`;
+				}
+			} else {
+				r += " a";
+				if ((selectedSide === "left" && leftGlass) || (selectedSide === "right" && rightGlass)) {
+					r += ` ${selectedIris} glass eye`;
+				} else {
+					r += ` ${selectedIris} lens`;
+				}
+			}
+			// pupil & sclera
+			if (selectedPupil !== "none" || selectedSclera !== "none") {
+				r += " with";
+				if (selectedPupil !== "none") {
+					r += ` ${both ? selectedPupil : addA(selectedPupil)}`;
+					if (both) {
+						r += " pupils";
+					} else {
+						r += " pupil";
+					}
+					if (selectedSclera !== "none") {
+						r += " and";
+					}
+				}
+				if (selectedSclera !== "none") {
+					r += ` ${selectedSclera}`;
+					if (both) {
+						r += " sclerae";
+					} else {
+						r += " sclera";
+					}
+				}
+			}
+			if (!both) {
+				r += ` for ${player ? "your" : his} ${selectedSide} eye`;
+			}
+			r += "?";
+
+			const a = document.createElement("a");
+			a.append(player ? "Take" : "Give");
+			a.onclick = applyLink;
+			applyDiv.append(a, r);
+			if (!player) {
+				applyDiv.append(" ",
+					App.UI.DOM.makeElement("span", "This is independent from eyewear choices.", "note"));
+			}
+		}
+	}
+
+	function applyLink() {
+		// make sure the eye exists; give glass eye if there is none
+		if ((selectedSide === "left" || selectedSide === "both") && getLeftEyeType(entity) === 0) {
+			eyeSurgery(entity, "left", "glass");
+		}
+		if ((selectedSide === "right" || selectedSide === "both") && getRightEyeType(entity) === 0) {
+			eyeSurgery(entity, "right", "glass");
+		}
+
+		// apply modifications
+		setEyeColorFull(entity, selectedIris,
+			selectedPupil === "none" ? "" : selectedPupil,
+			selectedSclera === "none" ? "" : selectedSclera,
+			selectedSide);
+		cashX(forceNeg(V.modCost), "slaveMod", entity);
+
+		App.UI.reload();
+	}
+
+
+	function updateRemoveDiv() {
+		$(removeDiv).empty();
+		const links = [];
+		let _n = 0;
+		// remove lenses
+		if (hasLeftEye(entity) && getLeftEyeColor(entity) !== getGeneticEyeColor(entity, "left")) {
+			_n++;
+			links.push(removeLink("Remove left lens", () => resetEyeColor(entity, "left")));
+		}
+		if (hasRightEye(entity) && getRightEyeColor(entity) !== getGeneticEyeColor(entity, "right")) {
+			_n++;
+			links.push(removeLink("Remove right lens", () => resetEyeColor(entity, "right")));
+		}
+		if (_n === 2) {
+			links.push(removeLink("Remove both lenses", () => resetEyeColor(entity, "both")));
+		}
+		// remove glass eyes
+		_n = 0;
+		if (getLeftEyeType(entity) === 2) {
+			_n++;
+			links.push(removeLink("Remove left glass eye", () => eyeSurgery(entity, "left", "remove")));
+		}
+		if (getRightEyeType(entity) === 2) {
+			_n++;
+			links.push(removeLink("Remove right glass eye", () => eyeSurgery(entity, "right", "remove")));
+		}
+		if (_n === 2) {
+			links.push(removeLink("Remove both glass eyes", () => eyeSurgery(entity, "both", "remove")));
+		}
+		if (links.length > 0) {
+			removeDiv.append(App.UI.DOM.arrayToList(links, " | ", " | "));
+		}
+	}
+
+	function removeLink(text, callback) {
+		const a = document.createElement("a");
+		a.append(text);
+		a.onclick = () => {
+			callback();
+			App.UI.reload();
+		};
+		return a;
+	}
+};
+
 /**
  * Update ears in salon
  * @param {App.Entity.SlaveState} slave