diff --git a/src/interaction/sellSlave.js b/src/interaction/sellSlave.js
index 5bca28ec90f93c9c5755aaad656fbcc59a86f6b1..cadfaacd5043554819a8d5d7dae338540b80a388 100644
--- a/src/interaction/sellSlave.js
+++ b/src/interaction/sellSlave.js
@@ -52,8 +52,8 @@ App.Interact.sellSlave = function(slave) {
 			t.push(`${He} tries to conceal ${his} terror at going from a trustworthy slave master to the cruel and uncertain world outside your penthouse, but ${he} fails.`);
 		}
 	}
-
-	cost = slaveCost(slave);
+	const costObj = slaveCost(slave, false, false, false, true);
+	cost = costObj.cost;
 	cost = (random(70, 80) * Math.trunc(cost / 100));
 
 	if (slave.breedingMark === 1 && V.propOutcome === 1 && V.arcologies[0].FSRestart !== "unset") {
@@ -903,7 +903,7 @@ App.Interact.sellSlave = function(slave) {
 		App.UI.DOM.appendNewElement("span", relist, ` This will cost ${cashFormat(500)}`);
 	}
 	if (V.debugMode) {
-		App.UI.DOM.appendNewElement("div", scene, `Base slave cost: `).append(App.UI.DOM.cashFormat(cost));
+		App.UI.DOM.appendNewElement("div", scene, `Estimated value: `).append(costObj.report);
 	}
 	const buyerKeys = [];
 	for (const [key, obj] of buyers) {
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 68d08bae4099c357f9d14a5d806d6f2f1e5dd0c0..37943e5eae6c2cbc2b1eb1e18fce3501c557ba31 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -1341,7 +1341,7 @@ globalThis.BeautyArray = (function() {
 		if (arcology.FSTransformationFetishist > 20) {
 			if (slave.lips > 70) {
 				if (slave.lipsImplant / slave.lips < 0.5) {
-					adjustBeauty("Lips: Transformation Fetishist", -(((slave.lips / 10) + (arcology.FSTransformationFetishist / 20))));
+					adjustBeauty("Lips: Transformation Fetishist", -((slave.lips / 10) + (arcology.FSTransformationFetishist / 20)));
 				}
 			}
 			if (slave.hips === 3) {
@@ -2271,15 +2271,120 @@ globalThis.FResultTooltip = function(slave, forSale = 0) {
  * @param {boolean} [isStartingSlave=false] is the slave a "starting slave"
  * @param {boolean} [followLaws=false] Apply cost variations from enacted Slave Market Regulations
  * @param {boolean} [isSpecial=false] is this slave a special/hero slave
- * @returns {number}
+ * @param {boolean} [returnDOM]
+ * @returns {number|Object}
  */
-globalThis.slaveCost = function(slave, isStartingSlave = false, followLaws = false, isSpecial = false) {
+globalThis.slaveCost = function(slave, isStartingSlave = false, followLaws = false, isSpecial = false, returnDOM = false) {
 	const milked = App.SlaveAssignment.getMilked(slave, 1.0, true);
-	const beauty = slaveCostBeauty(slave, isStartingSlave, followLaws, isSpecial);
-	if ((milked.cash * 52) > beauty && !isStartingSlave) { // Arbitrarily, let's say their milk worth is what they would make in a year. Blocking starting slave for now because milk makes so much money, the estimation makes game start impossible.
-		return milked.cash * 52;
+	const beautyObj = slaveCostBeauty(slave, isStartingSlave, followLaws, isSpecial);
+	const cost = beautyObj.cost;
+	/** Arbitrarily, let's say their milk worth is what they would make in a year. Blocking starting slave for now because milk makes so much money, the estimation makes game start impossible. */
+	const milkYear = milked.cash * 52;
+	if ((milkYear) > cost && !isStartingSlave) {
+		const milkSpan = App.UI.DOM.makeElement("span", cashFormat(milkYear));
+		if (V.cheatMode || V.debugMode) {
+			milkSpan.tabIndex = 0;
+			milkSpan.classList.add("has-tooltip");
+			tippy(milkSpan, {
+				content: `Value as a cow is greater than their value as a sex object.  Value is based on a year's fluids with current body.`,
+				placement: "right", interactive: true, trigger: "click"
+			});
+		}
+		return returnDOM ? {cost: milkYear, report: milkSpan} : milkYear;
 	} else {
-		return beauty;
+		return returnDOM ? {cost: cost, report: costTooltip()} : cost;
+	}
+
+	function costTooltip() {
+		// Make a link. Clicking the link will display detailed info about that over the top of the page (tooltip-style)
+		const span = App.UI.DOM.makeElement("span", cashFormat(cost));
+		if (V.cheatMode || V.debugMode) {
+			span.tabIndex = 0;
+			span.classList.add("has-tooltip");
+			tippy(span, {
+				content: costDisplay(),
+				placement: "right", interactive: true, trigger: "click"
+			});
+		}
+		return span;
+
+		/** Upon the link being clicked, set up some links to sort the info and a span to show it in
+		 * @returns {HTMLElement}
+		 */
+		function costDisplay() {
+			let criteria = "value";
+			let direction = "descending";
+
+			// Heading line that handles sorting
+			const el = document.createElement('div');
+			el.classList.add("tip-details");
+
+			el.appendChild(document.createTextNode(`Sort by: `));
+			el.appendChild(App.UI.DOM.generateLinksStrip([
+				App.UI.DOM.link("Text", () => {
+					criteria = "text";
+					jQuery(cheatFResultContents).empty().append(costFrame);
+				}, []),
+				App.UI.DOM.link("Value", () => {
+					criteria = "value";
+					jQuery(cheatFResultContents).empty().append(costFrame);
+				}, []),
+				App.UI.DOM.link("Ascending", () => {
+					direction = "ascending";
+					jQuery(cheatFResultContents).empty().append(costFrame);
+				}, []),
+				App.UI.DOM.link("Descending", () => {
+					direction = "descending";
+					jQuery(cheatFResultContents).empty().append(costFrame);
+				}, [])
+			]));
+
+			let cheatFResultContents = App.UI.DOM.appendNewElement("div", el, costFrame());
+
+			App.UI.DOM.appendNewElement("div", el, "A slave's base value is modified by an additive multiplier.", "note");
+
+			return el;
+
+			/** Set up the frame that contains the info
+			 * @returns {HTMLDivElement}
+			 */
+			function costFrame() {
+				let el = document.createElement("div");
+				el.classList.add("grid-2columns-auto");
+
+				let sortedBeautyMapKeys;
+				if (criteria === "text") {
+					if (direction === "descending") {
+						sortedBeautyMapKeys = Array.from(beautyObj.map.keys()).sort((a, b) => (a > b) ? 1 : -1);
+					} else {
+						sortedBeautyMapKeys = Array.from(beautyObj.map.keys()).sort((a, b) => (a < b) ? 1 : -1);
+					}
+				} else if (criteria === "value") {
+					if (direction === "descending") {
+						sortedBeautyMapKeys = Array.from(beautyObj.map.keys()).sort((a, b) => (beautyObj.map.get(a) < beautyObj.map.get(b)) ? 1 : -1);
+					} else {
+						sortedBeautyMapKeys = Array.from(beautyObj.map.keys()).sort((a, b) => (beautyObj.map.get(a) > beautyObj.map.get(b)) ? 1 : -1);
+					}
+				}
+
+				for (const key of sortedBeautyMapKeys) {
+					let value = beautyObj.map.get(key);
+					value = (Math.floor(value * 10) / 10);
+
+					let className;
+					if (value > 0) {
+						className = "green";
+					} else if (value < 0) {
+						className = "red";
+					}
+					App.UI.DOM.appendNewElement("div", el, value.toString(), className);
+
+					App.UI.DOM.appendNewElement("div", el, capFirstChar(key));
+				}
+
+				return el;
+			}
+		}
 	}
 };
 
@@ -2289,13 +2394,14 @@ globalThis.slaveCostBeauty = (function() {
 	let arcology;
 	let multiplier;
 	let cost;
+	const map = new Map([]);
 
 	/**
 	 * @param {App.Entity.SlaveState} slave
 	 * @param {boolean} isStartingSlave is the slave a "starting slave"
 	 * @param {boolean} followLaws Apply cost variations from enacted Slave Market Regulations
 	 * @param {boolean} isSpecial is this slave a special/hero slave
-	 * @returns {number}
+	 * @returns {Object}
 	 */
 	function slaveCost(slave, isStartingSlave, followLaws, isSpecial) {
 		arcology = V.arcologies[0];
@@ -2321,7 +2427,7 @@ globalThis.slaveCostBeauty = (function() {
 		if (isStartingSlave) {
 			calcStartingSlaveCost(slave);
 		}
-		return cost;
+		return {cost: cost, map: map};
 	}
 
 	/**
@@ -2329,32 +2435,32 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcGenitalsCost(slave) {
 		if (slave.vagina === 0 && slave.counter.vaginal === 0) {
-			multiplier += 0.2;
+			updateMultiplyer(`virgin`, 0.2);
 		}
 		if (slave.anus === 0 && slave.counter.anal === 0) {
-			multiplier += 0.2;
+			updateMultiplyer(`anal virgin`, 0.2);
 		}
 		// Boosted these to 20% to account for the fact that it limits the skill that can be attained
 		if (slave.vagina > -1 && arcology.FSRestartSMR === 1) {
 			if (slave.dick > 0) {
 				if (slave.ovaries === 0 && slave.balls === 0) {
-					multiplier += 0.8;
+					updateMultiplyer(`castrated`, 0.8);
 				}
 			}
 		} else if (slave.vagina > -1) {
 			if (slave.dick > 0) {
 				if (V.ui !== "start" || V.PC.dick === 0 || V.PC.vagina === -1) {
-					multiplier += 0.2;
+					updateMultiplyer(`dick`, 0.2);
 					if (slave.ovaries > 0) {
 						if (slave.balls > 0) {
-							multiplier += 0.8;
+							updateMultiplyer(`futa`, 0.8);
 						}
 					}
 				} else {
-					multiplier += 0.1;
+					updateMultiplyer(`dick`, 0.1);
 					if (slave.ovaries > 0) {
 						if (slave.balls > 0) {
-							multiplier += 0.2;
+							updateMultiplyer(`futa`, 0.2);
 						}
 					}
 				}
@@ -2369,20 +2475,20 @@ globalThis.slaveCostBeauty = (function() {
 	function calcDevotionTrustCost(slave, isSpecial) {
 		if (isSpecial === true) {
 			if (slave.devotion > 50) {
-				multiplier += slave.devotion / 200;
+				updateMultiplyer(`special devotion`, slave.devotion / 200);
 			}
 			if (slave.trust > 50) {
-				multiplier += slave.trust / 200;
+				updateMultiplyer(`special trust`, slave.trust / 200);
 			}
 		} else {
-			multiplier += slave.devotion / 200;
+			updateMultiplyer(`devotion`, slave.devotion / 200);
 			if (slave.devotion < -20) {
 				if (slave.trust > 0) {
-					multiplier -= slave.trust / 200;
+					updateMultiplyer(`trust with low devotion`, -slave.trust / 200);
 				}
 			} else {
 				if (slave.trust > 0) {
-					multiplier += slave.trust / 200;
+					updateMultiplyer(`trust with devotion`, slave.trust / 200);
 				}
 			}
 		}
@@ -2393,31 +2499,31 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPreferencesCost(slave) {
 		if (slave.behavioralFlaw !== "none") {
-			multiplier -= 0.1;
+			updateMultiplyer(`behavioral flaw`, -0.1);
 		}
 		if (slave.behavioralQuirk !== "none") {
-			multiplier += 0.1;
+			updateMultiplyer(`behavioral quirk`, 0.1);
 		}
 		if (slave.sexualFlaw === "breeder" && arcology.FSRepopulationFocus !== "unset") {
-			multiplier += 0.3;
+			updateMultiplyer(`sexual flaw, but a breeder`, 0.3);
 		} else if (slave.sexualFlaw !== "none") {
-			multiplier -= 0.1;
+			updateMultiplyer(`sexual flaw`, -0.1);
 		}
 		if (slave.sexualQuirk !== "none") {
-			multiplier += 0.1;
+			updateMultiplyer(`sexual quirk`, 0.1);
 		}
 		if (slave.fetishKnown === 1) {
 			if (slave.fetish === "mindbroken") {
-				multiplier -= 0.3;
+				updateMultiplyer(`mindbroken`, -0.3);
 			} else if (slave.fetish !== "none") {
-				multiplier += slave.fetishStrength / 1000;
+				updateMultiplyer(`fetish`, slave.fetishStrength / 1000);
 			}
 		} else {
-			multiplier -= 0.1;
+			updateMultiplyer(`unknown fetish`, -0.1);
 		}
 		if (slave.attrKnown === 1) {
 			if (slave.energy > 95) {
-				multiplier += 0.2;
+				updateMultiplyer(`high attraction`, 0.2);
 			}
 		}
 	}
@@ -2427,37 +2533,37 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPregCost(slave) {
 		if (slave.mpreg === 1) {
-			multiplier += 0.2;
+			updateMultiplyer(`mpreg`, 0.2);
 		}
 		if (arcology.FSRepopulationFocusSMR === 1) {
 			if (slave.preg < -1) {
-				multiplier -= 0.5;
+				updateMultiplyer(`repopulationist sterile`, -0.5);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier += 1;
+				updateMultiplyer(`repopulationist mega preg`, 1);
 			} else if (slave.bellyPreg >= 120000) {
-				multiplier += 0.5;
+				updateMultiplyer(`repopulationist very preg`, 0.5);
 			} else if (slave.preg > slave.pregData.normalBirth / 4) {
-				multiplier += 0.1;
+				updateMultiplyer(`repopulationist showing`, 0.1);
 			}
 		} else if (arcology.FSRestartSMR === 1) {
 			if (slave.preg < -1) {
-				multiplier += 0.5;
+				updateMultiplyer(`restart sterile`, 0.5);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier -= 2.5;
+				updateMultiplyer(`restart mega preg`, -2.5);
 			} else if (slave.bellyPreg >= 30000) {
-				multiplier -= 1.5;
+				updateMultiplyer(`restart very preg`, -1.5);
 			} else if (slave.preg > slave.pregData.normalBirth / 4) {
-				multiplier -= 1.0;
+				updateMultiplyer(`restart showing`, -1.0);
 			}
 		} else {
 			if (slave.preg < -1) {
-				multiplier -= 0.1;
+				updateMultiplyer(`sterile`, -0.1);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier -= 1.5;
+				updateMultiplyer(`mega preg`, -1.5);
 			} else if (slave.bellyPreg >= 120000) {
-				multiplier -= 0.5;
+				updateMultiplyer(`very preg`, -0.5);
 			} else if (slave.bellyPreg >= 500 || slave.pregKnown === 1) {
-				multiplier -= 0.1;
+				updateMultiplyer(`restart showing`, -0.1);
 			}
 		}
 	}
@@ -2467,14 +2573,14 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPrestigeCost(slave) {
 		if (slave.prestige > 0) {
-			multiplier += 0.7 * slave.prestige;
+			updateMultiplyer(`prestige`, 0.7 * slave.prestige);
 		}
 		if (slave.porn.prestige === 3) {
-			multiplier += 1.5;
+			updateMultiplyer(`porn prestige`, 1.5);
 		} else if (slave.porn.prestige === 2) {
-			multiplier += 0.7;
+			updateMultiplyer(`porn prestige`, 0.7);
 		} else if (slave.porn.prestige === 1) {
-			multiplier += 0.2;
+			updateMultiplyer(`porn prestige`, 0.2);
 		}
 	}
 
@@ -2484,86 +2590,86 @@ globalThis.slaveCostBeauty = (function() {
 	function calcFSCost(slave) {
 		if (arcology.FSSupremacistLawME !== 0) {
 			if (slave.race !== arcology.FSSupremacistRace) {
-				multiplier -= 0.1;
+				updateMultiplyer(`supremacist race`, -0.1);
 			}
 		}
 		if (arcology.FSSubjugationistLawME !== 0) {
 			if (slave.race === arcology.FSSubjugationistRace) {
-				multiplier -= 0.2;
+				updateMultiplyer(`subjugationist race`, -0.2);
 			}
 		}
 		if (V.seeCats === 1 && slave.race === "catgirl") {
 			if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 1) {
-				multiplier += 0.5;
+				updateMultiplyer(`catgirl`, 0.5);
 			} else if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 0) {
-				multiplier += 0.9;
+				updateMultiplyer(`catgirl`, 0.9);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 0) {
-				multiplier -= 0.5;
+				updateMultiplyer(`catgirl`, -0.5);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 1) {
-				multiplier += 0.5;
+				updateMultiplyer(`catgirl`, 0.5);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 0) {
-				multiplier += 0.9;
+				updateMultiplyer(`catgirl`, 0.9);
 			}
 			if (arcology.FSEgyptianRevivalist !== "unset") {
-				multiplier += 0.2;
+				updateMultiplyer(`egyptian catgirl`, 0.2);
 			}
 			if (arcology.FSTransformationFetishist !== "unset") {
-				multiplier += 0.2;
+				updateMultiplyer(`transformation catgirl`, 0.2);
 			}
 		}
 		if (arcology.FSRepopulationFocusSMR !== 0) {
 			if (slave.preg > 0) {
-				multiplier += 0.1;
+				updateMultiplyer(`repopulationist preg`, 0.1);
 			}
 		} else if (arcology.FSRestartSMR !== 0) {
 			if (slave.dick > 0) {
-				multiplier -= 0.1;
+				updateMultiplyer(`restart smr dick`, -0.1);
 			}
 			if (slave.balls > 0) {
-				multiplier -= 0.2;
+				updateMultiplyer(`restart smr balls`, -0.2);
 			}
 			if (slave.vagina > 0) {
-				multiplier -= 0.1;
+				updateMultiplyer(`restart smr vagina`, -0.1);
 			}
 			if (slave.ovaries > 0) {
-				multiplier -= 0.5;
+				updateMultiplyer(`restart smr ovaries`, -0.5);
 			}
 		}
 		if (arcology.FSGenderFundamentalistSMR !== 0) {
 			if (slave.dick > 0) {
-				multiplier -= 0.1;
+				updateMultiplyer(`gender fundamentalist smr dick`, -0.1);
 			}
 			if (slave.balls > 0) {
-				multiplier -= 0.1;
+				updateMultiplyer(`gender fundamentalist smr balls`, -0.1);
 			}
 		} else if (arcology.FSGenderRadicalist !== "unset") {
 			if (slave.dick > 0) {
-				multiplier += 0.1;
+				updateMultiplyer(`gender radicalist dick`, 0.1);
 			}
 			if (slave.balls > 0 && arcology.FSGenderRadicalistLawFuta !== 2 && arcology.FSGenderRadicalistLawFuta !== 4) {
-				multiplier -= 0.1;
+				updateMultiplyer(`gender radicalist balls`, -0.1);
 			}
 		}
 		if (arcology.FSPetiteAdmirationSMR !== 0 || arcology.FSStatuesqueGlorificationSMR !== 0) {
 			if (heightPass(slave)) {
-				multiplier += 0.1;
+				updateMultiplyer(`petite admiration smr`, 0.1);
 			} else {
-				multiplier -= 0.1;
+				updateMultiplyer(`petite admiration smr`, -0.1);
 			}
 		}
 		if (arcology.FSSlaveProfessionalism !== "unset") {
-			multiplier += 0.1 * (slave.intelligence / 20);
+			updateMultiplyer(`slave professionalism`, 0.1 * (slave.intelligence / 20));
 		}
 		if (arcology.FSHedonisticDecadenceSMR !== 0) {
 			if (slave.weight > 60 && slave.muscles < 5) {
-				multiplier += 0.1;
+				updateMultiplyer(`hedonistic decadence smr`, 0.1);
 			}
 		}
 		if (arcology.FSArabianRevivalist > 50) {
-			multiplier += 0.1;
+			updateMultiplyer(`arabian revivalist`, 0.1);
 		}
 		if (arcology.FSNeoImperialist > 40) {
-			multiplier += 0.1;
+			updateMultiplyer(`neo imperialist`, 0.1);
 		}
 	}
 
@@ -2573,21 +2679,18 @@ globalThis.slaveCostBeauty = (function() {
 	function calcAgeCost(slave) {
 		if (slave.physicalAge === V.minimumSlaveAge && slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) {
 			if (slave.birthWeek === 0) {
-				multiplier += 0.4;
+				updateMultiplyer(`birthWeek`, 0.4);
 			} else if (slave.birthWeek < 4) {
-				multiplier += 0.1;
+				updateMultiplyer(`birthWeek`, 0.1);
 			}
-		} else if (slave.physicalAge === V.minimumSlaveAge) {
-			if (slave.birthWeek === 0) {
-				multiplier += 0.2;
-			} else if (slave.birthWeek < 4) {
-				multiplier += 0.05;
-			}
-		} else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) {
+		} else if (
+			slave.physicalAge === V.minimumSlaveAge ||
+			(slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset"))
+		) {
 			if (slave.birthWeek === 0) {
-				multiplier += 0.2;
+				updateMultiplyer(`birthWeek`, 0.2);
 			} else if (slave.birthWeek < 4) {
-				multiplier += 0.05;
+				updateMultiplyer(`birthWeek`, 0.05);
 			}
 		}
 	}
@@ -2598,102 +2701,102 @@ globalThis.slaveCostBeauty = (function() {
 	function calcCareersCost(slave) {
 		if (slave.career !== 0) {
 			if (slave.career === "a slave") {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.bodyguard.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.wardeness.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.attendant.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.nurse.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.matron.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.schoolteacher.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.stewardess.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.milkmaid.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.farmer.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.madam.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.DJ.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.HG.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.recruiter.includes(slave.career)) {
-				multiplier += 0.1;
+				updateMultiplyer(`career`, 0.1);
 			} else if (App.Data.Careers.General.entertainment.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`career`, 0.05);
 			} else if (App.Data.Careers.General.whore.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`career`, 0.05);
 			} else if (App.Data.Careers.General.grateful.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`career`, 0.05);
 			} else if (App.Data.Careers.General.menial.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`career`, 0.05);
 			} else if (App.Data.Careers.General.servant.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`career`, 0.05);
 			}
 		}
 		if (V.week - slave.weekAcquired >= 20 && slave.skill.entertainment >= 100) {
 			if (!App.Data.Careers.General.entertainment.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`entertainment career`, 0.05);
 			}
 		}
 		if (slave.counter.oral + slave.counter.anal + slave.counter.vaginal + slave.counter.mammary + slave.counter.penetrative > 1000) {
 			if (!App.Data.Careers.General.whore.includes(slave.career)) {
-				multiplier += 0.05;
+				updateMultiplyer(`whore career`, 0.05);
 			}
 		}
 		if (!App.Data.Careers.Leader.bodyguard.includes(slave.career) && slave.skill.bodyguard >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good bodyguard`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.wardeness.includes(slave.career) && slave.skill.wardeness >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good wardeness`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.attendant.includes(slave.career) && slave.skill.attendant >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good attendant`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.nurse.includes(slave.career) && slave.skill.nurse >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good nurse`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.matron.includes(slave.career) && slave.skill.matron >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good matron`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.schoolteacher.includes(slave.career) && slave.skill.teacher >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good teacher`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.stewardess.includes(slave.career) && slave.skill.stewardess >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good stewardess`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.milkmaid.includes(slave.career) && slave.skill.milkmaid >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good milkmaid`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.farmer.includes(slave.career) && slave.skill.farmer >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good farmer`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.madam.includes(slave.career) && slave.skill.madam >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good madam`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.DJ.includes(slave.career) && slave.skill.DJ >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good DJ`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.HG.includes(slave.career) && slave.skill.headGirl >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good headGirl`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.recruiter.includes(slave.career) && slave.skill.recruiter >= V.masteredXP) {
-			multiplier += 0.1;
+			updateMultiplyer(`good recruiter`, 0.1);
 		}
 		if (!App.Data.Careers.General.servant.includes(slave.career) && slave.skill.servant >= V.masteredXP) {
-			multiplier += 0.05;
+			updateMultiplyer(`good servant`, 0.05);
 		}
 		if (!App.Data.Careers.General.entertainment.includes(slave.career) && slave.skill.entertainer >= V.masteredXP) {
-			multiplier += 0.05;
+			updateMultiplyer(`good entertainer`, 0.05);
 		}
 		if (!App.Data.Careers.General.whore.includes(slave.career) && slave.skill.whore >= V.masteredXP) {
-			multiplier += 0.05;
+			updateMultiplyer(`good whore`, 0.05);
 		}
 	}
 
@@ -2704,24 +2807,24 @@ globalThis.slaveCostBeauty = (function() {
 		const totalInt = Math.clamp(slave.intelligence + slave.intelligenceImplant, -130, 130);
 		/* make absolutely certain we do not use +-131 in the next line
 		 */
-		multiplier += Math.floor((Math.asin(totalInt / 131)) * 50) / 50;
+		updateMultiplyer(`intelligence`, Math.floor((Math.asin(totalInt / 131)) * 50) / 50);
 		if (slave.pubertyXY === 0 && slave.physicalAge >= V.potencyAge && slave.genes === "XY" && arcology.FSGenderRadicalist === "unset") {
-			multiplier += 0.5;
+			updateMultiplyer(`child`, 0.5);
 		}
 		if (slave.geneticQuirks.albinism === 2) {
-			multiplier += 0.2;
+			updateMultiplyer(`albinism`, 0.2);
 		}
 		if (V.rep > 10000) {
-			multiplier += 0.1 * (Object.getOwnPropertyNames(slave.brand).length);
+			updateMultiplyer(`high rep brand`, 0.1 * (Object.getOwnPropertyNames(slave.brand).length));
 		} else if (V.rep < 5000) {
-			multiplier -= 0.1 * (Object.getOwnPropertyNames(slave.brand).length);
+			updateMultiplyer(`low rep brand`, -0.1 * (Object.getOwnPropertyNames(slave.brand).length));
 		}
-		multiplier -= getLimbCount(slave, 0) * 0.05;
+		updateMultiplyer(`limbs`, -getLimbCount(slave, 0) * 0.05);
 		if (!canSee(slave)) {
-			multiplier -= 0.2;
+			updateMultiplyer(`vision`, -0.2);
 		}
 		if (slave.hears === -2) {
-			multiplier -= 0.1;
+			updateMultiplyer(`hearing`, -0.1);
 		}
 	}
 
@@ -2730,13 +2833,13 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcIndentureCost(slave) {
 		if (slave.indenture > -1) {
-			multiplier -= 0.1 * slave.indentureRestrictions;
-			multiplier -= (260 - slave.indenture) / 260;
+			updateMultiplyer(`indenture level`, -0.1 * slave.indentureRestrictions);
+			updateMultiplyer(`indenture time`, -(260 - slave.indenture) / 260);
 		} else if (V.seeAge === 1 && slave.actualAge >= (V.retirementAge - 5)) {
 			if (V.policies.retirement.physicalAgePolicy === 0) {
-				multiplier *= (V.retirementAge - slave.actualAge) / 5;
+				updateMultiplyer(`near retirement`, (multiplier - (V.retirementAge - slave.actualAge) / 5));
 			} else {
-				multiplier *= (V.retirementAge - slave.physicalAge) / 5;
+				updateMultiplyer(`near retirement`, (multiplier - (V.retirementAge - slave.physicalAge) / 5));
 			}
 		}
 	}
@@ -2807,11 +2910,18 @@ globalThis.slaveCostBeauty = (function() {
 		startingSlaveMultiplier = Math.clamp(startingSlaveMultiplier, 0, 10);
 		cost += cost * startingSlaveMultiplier;
 		cost = 500 * Math.trunc(cost / 500);
-		if (V.PC.career === "slaver" || V.PC.career === "slave overseer" || V.PC.career === "slave tender") {
+		if (isPCCareerInCategory("slaver")) {
 			cost /= 2;
 		}
 	}
 
+	function updateMultiplyer(string, value) {
+		if (value) {
+			map.set(string, value);
+			multiplier += value;
+		}
+	}
+
 	return slaveCost;
 })();
 
diff --git a/src/markets/marketUI.js b/src/markets/marketUI.js
index 62a8a55c97112dfde15aa925e6f3256337e37522..981baec4b2e0a85ca42e932cb084708eb4eff5ad 100644
--- a/src/markets/marketUI.js
+++ b/src/markets/marketUI.js
@@ -9,7 +9,8 @@
 App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave", sTitlePlural = "slaves", costMod = 1} = {}) {
 	const el = new DocumentFragment();
 	const {slave, text} = generateMarketSlave(slaveMarket, (V.market.numArcology || 1));
-	const cost = getCost();
+	const costObj = getCost();
+	const cost = costObj.cost;
 	let prisonCrime = "";
 	if (slaveMarket === V.prisonCircuit[V.prisonCircuitIndex]) {
 		prisonCrime = pronounsForSlaveProp(slave, text);
@@ -17,16 +18,18 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave",
 		$(el).append(` ${text}`);
 	}
 
-	App.UI.DOM.appendNewElement("p",
-		el,
-		`The offered price is ${cashFormat(cost)}. ${(V.slavesSeen > V.slaveMarketLimit) ? `You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.` : ``}`
-	);
+	App.Events.addParagraph(el, [
+		`The offered price is`,
+		App.UI.DOM.combineNodes(costObj.report, "."),
+		V.slavesSeen > V.slaveMarketLimit ? `You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.` : ``
+	]);
 
 	el.append(choices());
 	return el;
 
 	function getCost() {
-		let cost = slaveCost(slave, false, !App.Data.misc.lawlessMarkets.includes(slaveMarket));
+		const costObj = slaveCost(slave, false, !App.Data.misc.lawlessMarkets.includes(slaveMarket), false, true);
+		let cost = costObj.cost;
 		if (V.slavesSeen > V.slaveMarketLimit) {
 			cost += cost * ((V.slavesSeen - V.slaveMarketLimit) * 0.1);
 		}
@@ -37,7 +40,7 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave",
 		}
 		console.log("CostMod: ", costMod);
 		cost = 500 * Math.trunc(cost / 500);
-		return cost;
+		return {cost, report: costObj.report};
 	}
 
 	function choices() {
diff --git a/src/npc/startingGirls/startingGirlsPassage.js b/src/npc/startingGirls/startingGirlsPassage.js
index 6e0fb5b4d5b8eaac3f9c3a64692d264c3a5f2ec8..0872b6e50f28f81a2ef4a7147d980e67c48f5221 100644
--- a/src/npc/startingGirls/startingGirlsPassage.js
+++ b/src/npc/startingGirls/startingGirlsPassage.js
@@ -11,7 +11,7 @@ App.StartingGirls.passage = function() {
 		if (V.PC.dick !== 0 && V.PC.vagina !== -1 && (V.seeDicks !== 0 || V.makeDicks === 1)) {
 			r.push(`Since you have both a penis and a vagina yourself, you've obviously had access to a source of advanced surgery and organ farming. <span class="skill player">Slaves get a smaller cost increase here for having both penises and vaginas, and for having both testicles and ovaries.</span>`);
 		}
-		if (V.PC.career === "slaver" || V.PC.career === "slave overseer" || V.PC.career === "slave tender") {
+		if (isPCCareerInCategory("slaver")) {
 			r.push(`Since you`);
 			if (V.PC.career === "slaver") {
 				r.push(`personally saw to the capture, breaking and or training of`);