diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 68d08bae4099c357f9d14a5d806d6f2f1e5dd0c0..00e1f1fce8da29efe099e1465d3aea9ec7c9b0ba 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -2289,6 +2289,7 @@ globalThis.slaveCostBeauty = (function() {
 	let arcology;
 	let multiplier;
 	let cost;
+	const map = new Map([]);
 
 	/**
 	 * @param {App.Entity.SlaveState} slave
@@ -2329,32 +2330,32 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcGenitalsCost(slave) {
 		if (slave.vagina === 0 && slave.counter.vaginal === 0) {
-			multiplier += 0.2;
+			map.set(`virgin`, 0.2);
 		}
 		if (slave.anus === 0 && slave.counter.anal === 0) {
-			multiplier += 0.2;
+			map.set(`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;
+					map.set(`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;
+					map.set(`dick`, 0.2);
 					if (slave.ovaries > 0) {
 						if (slave.balls > 0) {
-							multiplier += 0.8;
+							map.set(`futa`, 0.8);
 						}
 					}
 				} else {
-					multiplier += 0.1;
+					map.set(`dick`, 0.1);
 					if (slave.ovaries > 0) {
 						if (slave.balls > 0) {
-							multiplier += 0.2;
+							map.set(`futa`, 0.2);
 						}
 					}
 				}
@@ -2369,20 +2370,20 @@ globalThis.slaveCostBeauty = (function() {
 	function calcDevotionTrustCost(slave, isSpecial) {
 		if (isSpecial === true) {
 			if (slave.devotion > 50) {
-				multiplier += slave.devotion / 200;
+				map.set(`special devotion`, slave.devotion / 200);
 			}
 			if (slave.trust > 50) {
-				multiplier += slave.trust / 200;
+				map.set(`special trust`, slave.trust / 200);
 			}
 		} else {
-			multiplier += slave.devotion / 200;
+			map.set(`devotion`, slave.devotion / 200);
 			if (slave.devotion < -20) {
 				if (slave.trust > 0) {
-					multiplier -= slave.trust / 200;
+					map.set(`low devotion`, -slave.trust / 200);
 				}
 			} else {
 				if (slave.trust > 0) {
-					multiplier += slave.trust / 200;
+					map.set(`trusting devotion`, slave.trust / 200);
 				}
 			}
 		}
@@ -2393,31 +2394,31 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPreferencesCost(slave) {
 		if (slave.behavioralFlaw !== "none") {
-			multiplier -= 0.1;
+			map.set(`behavioral flaw`, -0.1);
 		}
 		if (slave.behavioralQuirk !== "none") {
-			multiplier += 0.1;
+			map.set(`behavioral quirk`, 0.1);
 		}
 		if (slave.sexualFlaw === "breeder" && arcology.FSRepopulationFocus !== "unset") {
-			multiplier += 0.3;
+			map.set(`sexual flaw, but a breeder`, 0.3);
 		} else if (slave.sexualFlaw !== "none") {
-			multiplier -= 0.1;
+			map.set(`sexual flaw`, -0.1);
 		}
 		if (slave.sexualQuirk !== "none") {
-			multiplier += 0.1;
+			map.set(`sexual quirk`, 0.1);
 		}
 		if (slave.fetishKnown === 1) {
 			if (slave.fetish === "mindbroken") {
-				multiplier -= 0.3;
+				map.set(`mindbroken`, -0.3);
 			} else if (slave.fetish !== "none") {
-				multiplier += slave.fetishStrength / 1000;
+				map.set(`fetish`, slave.fetishStrength / 1000);
 			}
 		} else {
-			multiplier -= 0.1;
+			map.set(`unknown fetish`, -0.1);
 		}
 		if (slave.attrKnown === 1) {
 			if (slave.energy > 95) {
-				multiplier += 0.2;
+				map.set(`high attraction`, 0.2);
 			}
 		}
 	}
@@ -2427,37 +2428,37 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPregCost(slave) {
 		if (slave.mpreg === 1) {
-			multiplier += 0.2;
+			map.set(`mpreg`, 0.2);
 		}
 		if (arcology.FSRepopulationFocusSMR === 1) {
 			if (slave.preg < -1) {
-				multiplier -= 0.5;
+				map.set(`repop sterile`, -0.5);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier += 1;
+				map.set(`repop mega preg`, 1);
 			} else if (slave.bellyPreg >= 120000) {
-				multiplier += 0.5;
+				map.set(`repop very preg`, 0.5);
 			} else if (slave.preg > slave.pregData.normalBirth / 4) {
-				multiplier += 0.1;
+				map.set(`repop showing`, 0.1);
 			}
 		} else if (arcology.FSRestartSMR === 1) {
 			if (slave.preg < -1) {
-				multiplier += 0.5;
+				map.set(`restart  sterile`, 0.5);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier -= 2.5;
+				map.set(`restart mega preg`, -2.5);
 			} else if (slave.bellyPreg >= 30000) {
-				multiplier -= 1.5;
+				map.set(`restart very preg`, -1.5);
 			} else if (slave.preg > slave.pregData.normalBirth / 4) {
-				multiplier -= 1.0;
+				map.set(`restart showing`, -1.0);
 			}
 		} else {
 			if (slave.preg < -1) {
-				multiplier -= 0.1;
+				map.set(`sterile`, -0.1);
 			} else if (slave.bellyPreg >= 300000) {
-				multiplier -= 1.5;
+				map.set(`mega preg`, -1.5);
 			} else if (slave.bellyPreg >= 120000) {
-				multiplier -= 0.5;
+				map.set(`very preg`, -0.5);
 			} else if (slave.bellyPreg >= 500 || slave.pregKnown === 1) {
-				multiplier -= 0.1;
+				map.set(`restart showing`, -0.1);
 			}
 		}
 	}
@@ -2467,14 +2468,14 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcPrestigeCost(slave) {
 		if (slave.prestige > 0) {
-			multiplier += 0.7 * slave.prestige;
+			map.set(`prestige`, 0.7 * slave.prestige);
 		}
 		if (slave.porn.prestige === 3) {
-			multiplier += 1.5;
+			map.set(`porn prestige`, 1.5);
 		} else if (slave.porn.prestige === 2) {
-			multiplier += 0.7;
+			map.set(`porn prestige`, 0.7);
 		} else if (slave.porn.prestige === 1) {
-			multiplier += 0.2;
+			map.set(`porn prestige`, 0.2);
 		}
 	}
 
@@ -2484,86 +2485,86 @@ globalThis.slaveCostBeauty = (function() {
 	function calcFSCost(slave) {
 		if (arcology.FSSupremacistLawME !== 0) {
 			if (slave.race !== arcology.FSSupremacistRace) {
-				multiplier -= 0.1;
+				map.set(`supremacist race`, -0.1);
 			}
 		}
 		if (arcology.FSSubjugationistLawME !== 0) {
 			if (slave.race === arcology.FSSubjugationistRace) {
-				multiplier -= 0.2;
+				map.set(`subjugationist race`, -0.2);
 			}
 		}
 		if (V.seeCats === 1 && slave.race === "catgirl") {
 			if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 1) {
-				multiplier += 0.5;
+				map.set(`catgirl`, 0.5);
 			} else if (arcology.FSBodyPurist === "unset" && V.projectN.techReleased === 0) {
-				multiplier += 0.9;
+				map.set(`catgirl`, 0.9);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 0) {
-				multiplier -= 0.5;
+				map.set(`catgirl`, -0.5);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 1) {
-				multiplier += 0.5;
+				map.set(`catgirl`, 0.5);
 			} else if (arcology.FSBodyPurist !== "unset" && arcology.FSBodyPuristCatLaw === 1 && V.projectN.techreleased === 0) {
-				multiplier += 0.9;
+				map.set(`catgirl`, 0.9);
 			}
 			if (arcology.FSEgyptianRevivalist !== "unset") {
-				multiplier += 0.2;
+				map.set(`egyptian catgirl`, 0.2);
 			}
 			if (arcology.FSTransformationFetishist !== "unset") {
-				multiplier += 0.2;
+				map.set(`transformation catgirl`, 0.2);
 			}
 		}
 		if (arcology.FSRepopulationFocusSMR !== 0) {
 			if (slave.preg > 0) {
-				multiplier += 0.1;
+				map.set(`repopulation preg`, 0.1);
 			}
 		} else if (arcology.FSRestartSMR !== 0) {
 			if (slave.dick > 0) {
-				multiplier -= 0.1;
+				map.set(`restart smr dick`, -0.1);
 			}
 			if (slave.balls > 0) {
-				multiplier -= 0.2;
+				map.set(`restart smr balls`, -0.2);
 			}
 			if (slave.vagina > 0) {
-				multiplier -= 0.1;
+				map.set(`restart smr vagina`, -0.1);
 			}
 			if (slave.ovaries > 0) {
-				multiplier -= 0.5;
+				map.set(`restart smr ovaries`, -0.5);
 			}
 		}
 		if (arcology.FSGenderFundamentalistSMR !== 0) {
 			if (slave.dick > 0) {
-				multiplier -= 0.1;
+				map.set(`gender fundamentalist smr dick`, -0.1);
 			}
 			if (slave.balls > 0) {
-				multiplier -= 0.1;
+				map.set(`gender fundamentalist smr balls`, -0.1);
 			}
 		} else if (arcology.FSGenderRadicalist !== "unset") {
 			if (slave.dick > 0) {
-				multiplier += 0.1;
+				map.set(`gender radicalist dick`, 0.1);
 			}
 			if (slave.balls > 0 && arcology.FSGenderRadicalistLawFuta !== 2 && arcology.FSGenderRadicalistLawFuta !== 4) {
-				multiplier -= 0.1;
+				map.set(`gender radicalist balls`, -0.1);
 			}
 		}
 		if (arcology.FSPetiteAdmirationSMR !== 0 || arcology.FSStatuesqueGlorificationSMR !== 0) {
 			if (heightPass(slave)) {
-				multiplier += 0.1;
+				map.set(`petite admiration smr`, 0.1);
 			} else {
-				multiplier -= 0.1;
+				map.set(`petite admiration smr`, -0.1);
 			}
 		}
 		if (arcology.FSSlaveProfessionalism !== "unset") {
-			multiplier += 0.1 * (slave.intelligence / 20);
+			map.set(`slave professionalism`, 0.1 * (slave.intelligence / 20));
 		}
 		if (arcology.FSHedonisticDecadenceSMR !== 0) {
 			if (slave.weight > 60 && slave.muscles < 5) {
-				multiplier += 0.1;
+				map.set(`hedonistic decadence smr`, 0.1);
 			}
 		}
 		if (arcology.FSArabianRevivalist > 50) {
-			multiplier += 0.1;
+			map.set(`arabian revivalist`, 0.1);
 		}
 		if (arcology.FSNeoImperialist > 40) {
-			multiplier += 0.1;
+			map.set(`neo imperialist`, 0.1);
 		}
 	}
 
@@ -2573,21 +2574,21 @@ 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;
+				map.set(`birthWeek`, 0.4);
 			} else if (slave.birthWeek < 4) {
-				multiplier += 0.1;
+				map.set(`birthWeek`, 0.1);
 			}
 		} else if (slave.physicalAge === V.minimumSlaveAge) {
 			if (slave.birthWeek === 0) {
-				multiplier += 0.2;
+				map.set(`birthWeek`, 0.2);
 			} else if (slave.birthWeek < 4) {
-				multiplier += 0.05;
+				map.set(`birthWeek`, 0.05);
 			}
 		} else if (slave.physicalAge === V.fertilityAge && canGetPregnant(slave) && (arcology.FSRepopulationFocus !== "unset" || arcology.FSGenderFundamentalist !== "unset")) {
 			if (slave.birthWeek === 0) {
-				multiplier += 0.2;
+				map.set(`birthWeek`, 0.2);
 			} else if (slave.birthWeek < 4) {
-				multiplier += 0.05;
+				map.set(`birthWeek`, 0.05);
 			}
 		}
 	}
@@ -2598,102 +2599,102 @@ globalThis.slaveCostBeauty = (function() {
 	function calcCareersCost(slave) {
 		if (slave.career !== 0) {
 			if (slave.career === "a slave") {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.bodyguard.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.wardeness.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.attendant.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.nurse.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.matron.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.schoolteacher.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.stewardess.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.milkmaid.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.farmer.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.madam.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.DJ.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.HG.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.Leader.recruiter.includes(slave.career)) {
-				multiplier += 0.1;
+				map.set(`career`, 0.1);
 			} else if (App.Data.Careers.General.entertainment.includes(slave.career)) {
-				multiplier += 0.05;
+				map.set(`career`, 0.05);
 			} else if (App.Data.Careers.General.whore.includes(slave.career)) {
-				multiplier += 0.05;
+				map.set(`career`, 0.05);
 			} else if (App.Data.Careers.General.grateful.includes(slave.career)) {
-				multiplier += 0.05;
+				map.set(`career`, 0.05);
 			} else if (App.Data.Careers.General.menial.includes(slave.career)) {
-				multiplier += 0.05;
+				map.set(`career`, 0.05);
 			} else if (App.Data.Careers.General.servant.includes(slave.career)) {
-				multiplier += 0.05;
+				map.set(`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;
+				map.set(`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;
+				map.set(`whore career`, 0.05);
 			}
 		}
 		if (!App.Data.Careers.Leader.bodyguard.includes(slave.career) && slave.skill.bodyguard >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good bodyguard`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.wardeness.includes(slave.career) && slave.skill.wardeness >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good wardeness`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.attendant.includes(slave.career) && slave.skill.attendant >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good attendant`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.nurse.includes(slave.career) && slave.skill.nurse >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good nurse`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.matron.includes(slave.career) && slave.skill.matron >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good matron`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.schoolteacher.includes(slave.career) && slave.skill.teacher >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good teacher`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.stewardess.includes(slave.career) && slave.skill.stewardess >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good stewardess`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.milkmaid.includes(slave.career) && slave.skill.milkmaid >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good milkmaid`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.farmer.includes(slave.career) && slave.skill.farmer >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good farmer`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.madam.includes(slave.career) && slave.skill.madam >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good madam`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.DJ.includes(slave.career) && slave.skill.DJ >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good DJ`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.HG.includes(slave.career) && slave.skill.headGirl >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good headGirl`, 0.1);
 		}
 		if (!App.Data.Careers.Leader.recruiter.includes(slave.career) && slave.skill.recruiter >= V.masteredXP) {
-			multiplier += 0.1;
+			map.set(`good recruiter`, 0.1);
 		}
 		if (!App.Data.Careers.General.servant.includes(slave.career) && slave.skill.servant >= V.masteredXP) {
-			multiplier += 0.05;
+			map.set(`good servant`, 0.05);
 		}
 		if (!App.Data.Careers.General.entertainment.includes(slave.career) && slave.skill.entertainer >= V.masteredXP) {
-			multiplier += 0.05;
+			map.set(`good entertainer`, 0.05);
 		}
 		if (!App.Data.Careers.General.whore.includes(slave.career) && slave.skill.whore >= V.masteredXP) {
-			multiplier += 0.05;
+			map.set(`good whore`, 0.05);
 		}
 	}
 
@@ -2706,22 +2707,22 @@ globalThis.slaveCostBeauty = (function() {
 		 */
 		multiplier += 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;
+			map.set(`child`, 0.5);
 		}
 		if (slave.geneticQuirks.albinism === 2) {
-			multiplier += 0.2;
+			map.set(`albanism`, 0.2);
 		}
 		if (V.rep > 10000) {
-			multiplier += 0.1 * (Object.getOwnPropertyNames(slave.brand).length);
+			map.set(`high rep brand`, 0.1 * (Object.getOwnPropertyNames(slave.brand).length));
 		} else if (V.rep < 5000) {
-			multiplier -= 0.1 * (Object.getOwnPropertyNames(slave.brand).length);
+			map.set(`low rep brand`, -0.1 * (Object.getOwnPropertyNames(slave.brand).length));
 		}
-		multiplier -= getLimbCount(slave, 0) * 0.05;
+		map.set(`limbs`, -getLimbCount(slave, 0) * 0.05);
 		if (!canSee(slave)) {
-			multiplier -= 0.2;
+			map.set(`vision`, -0.2);
 		}
 		if (slave.hears === -2) {
-			multiplier -= 0.1;
+			map.set(`hearing`, -0.1);
 		}
 	}
 
@@ -2730,8 +2731,8 @@ globalThis.slaveCostBeauty = (function() {
 	 */
 	function calcIndentureCost(slave) {
 		if (slave.indenture > -1) {
-			multiplier -= 0.1 * slave.indentureRestrictions;
-			multiplier -= (260 - slave.indenture) / 260;
+			map.set(`indenture level`, -0.1 * slave.indentureRestrictions);
+			map.set(`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;