diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 0e0e865f9cc642be91c9f204895dc5a033595f8a..54d5bdc5cb646567a29e9fc87a294631bd842a48 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -17,6 +17,7 @@ window.Beauty = (function() {
 		calcInitBeauty(slave);
 		if (slave.fuckdoll === 0) {
 			beauty += 30;
+			calcIntelligenceBeauty(slave);
 			calcFaceBeauty(slave);
 			calcTeethBeauty(slave);
 			calcModBeauty();
@@ -24,6 +25,7 @@ window.Beauty = (function() {
 			calcFSNotFuckdollBeauty(slave);
 			calcMiscNotFuckdollBeauty(slave);
 		}
+		calcHeightBeauty(slave);
 		if (slave.dick > 0) {
 			calcDickBeauty(slave);
 		}
@@ -79,7 +81,6 @@ window.Beauty = (function() {
 		beauty -= slave.muscles / 30;
 		beauty += slave.lips / 10;
 		beauty += slave.clit;
-		beauty += (slave.height - 160) / 10;
 		beauty += 2 * slave.hips;
 		if (slave.anus > 3) {
 			beauty -= 10 + (slave.anus * 2); /* -20 */
@@ -89,6 +90,28 @@ window.Beauty = (function() {
 		}
 	}
 
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 */
+	function calcIntelligenceBeauty(slave) {
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			beauty += (arcology.FSSlaveProfessionalism / 10) * (slave.intelligence / 10); /* 100 */
+		} else if (arcology.FSIntellectualDependency !== "unset") {
+			beauty -= (arcology.FSIntellectualDependency / 10) * ((slave.intelligence + slave.intelligenceImplant) / 20); /* 65 */
+		} else if (arcology.FSDegradationist !== "unset") {
+			beauty -= (arcology.FSDegradationist / 10) * ((slave.intelligence + slave.intelligenceImplant) / 50); /* 20 */
+		} else {
+			beauty += (slave.intelligence + slave.intelligenceImplant) / 10; /* -10 to 13 */
+		}
+	}
+	
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 */
+	function calcHeightBeauty(slave) {
+		beauty += (slave.height - 160) / 10;
+	}
+
 	/**
 	 * @param {App.Entity.SlaveState} slave
 	 */
@@ -253,9 +276,6 @@ window.Beauty = (function() {
 				beauty -= (arcology.FSSubjugationist / 2) - (arcology.FSSubjugationistLawME * 10);
 			}
 		}
-		if (arcology.FSDegradationist !== "unset") {
-			beauty -= (arcology.FSDegradationist / 10) * ((slave.intelligence + slave.intelligenceImplant) / 20);
-		}
 		if (arcology.FSGenderFundamentalistLawBimbo === 1) {
 			if (slave.intelligenceImplant === 0) {
 				beauty += 30;
@@ -264,6 +284,21 @@ window.Beauty = (function() {
 			} else {
 				beauty -= (slave.intelligenceImplant * 1.5);
 			}
+		} else if (arcology.FSSlaveProfessionalism !== "unset") {
+			if (slave.intelligenceImplant == 30) {
+				beauty += 5 + (arcology.FSSlaveProfessionalism / 10); /* 15 */
+			} else if (slave.intelligenceImplant >= 15) {
+				beauty += (arcology.FSSlaveProfessionalism / 20); /* 5 */
+			} else {
+				beauty -= ((arcology.FSSlaveProfessionalism / 10) * 3) - (slave.intelligenceImplant); /* -30 */
+			}
+		} else if (arcology.FSIntellectualDependency !== "unset") {
+			if (slave.intelligenceImplant > 15) {
+				beauty -= (arcology.FSIntellectualDependency / 10) * (slave.intelligenceImplant / 10); /* -30 */
+			}
+		}
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			beauty += (arcology.FSSlaveProfessionalism / 50) * ((slave.skill.entertainment + slave.skill.whoring + slave.skill.oral + slave.skill.anal + slave.skill.vaginal) / 100); /* 10 */
 		}
 		if (arcology.FSYouthPreferentialist !== "unset") {
 			beauty += (30 - slave.visualAge) / (30 - V.minimumSlaveAge) * ((arcology.FSYouthPreferentialist / 2) + (arcology.FSYouthPreferentialistLaw * 10)); /* max 60 */
@@ -324,7 +359,6 @@ window.Beauty = (function() {
 	function calcMiscNotFuckdollBeauty(slave) {
 		beauty += Math.min(slave.health, 100) / 5;
 		beauty += slave.voice;
-		beauty += (slave.intelligence + slave.intelligenceImplant) / 10; /* -10 to 13 */
 		beauty += slave.skill.entertainment / 10;
 		beauty += slave.skill.whoring / 10;
 		beauty -= 3 * slave.visualAge;
@@ -1086,14 +1120,24 @@ window.Beauty = (function() {
 	 * @param {App.Entity.SlaveState} slave
 	 */
 	function calcVoiceBeauty(slave) {
-		if (canTalk(slave)) {
-			if (slave.accent >= 3) {
-				beauty -= 1;
-			} else if (slave.accent === 1) {
-				beauty += 1;
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			if (canTalk(slave)) {
+				if (slave.accent > 1) {
+					beauty -= 20;
+				} else if (slave.accent === 0) {
+					beauty += 4;
+				}
 			}
 		} else {
-			beauty -= 2;
+			if (canTalk(slave)) {
+				if (slave.accent >= 3) {
+					beauty -= 1;
+				} else if (slave.accent === 1) {
+					beauty += 1;
+				}
+			} else {
+				beauty -= 2;
+			}
 		}
 	}
 
@@ -1156,6 +1200,27 @@ window.Beauty = (function() {
 				beauty -= 15 + (arcology.FSHedonisticDecadence / 20); /* -20 */
 			}
 		}
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			if (slave.energy > 80) {
+				beauty -= slave.energy;
+			} else if (slave.energy <= 40 && slave.devotion > 50) {
+				beauty += slave.energy / 4;
+			}
+		} else if (arcology.FSIntellectualDependency !== "unset") {
+			if (arcology.FSIntellectualDependencyLawBeauty === 1) {
+				let bimboDegree = bimboScore(slave);
+				if (bimboDegree > 0) {
+					beauty += Math.pow(2, bimboDegree); /* 64 */
+				} else {
+					beauty -= arcology.FSIntellectualDependency; /* -100 */
+				}
+			}
+			if (slave.energy > 80) {
+				beauty += (arcology.FSIntellectualDependency / 50) * (8 + (slave.energy / 10)); /* 20 */
+			} else if (slave.energy <= 60) {
+				beauty -= (arcology.FSIntellectualDependency / 50) * (60 - slave.energy); /* -120 */
+			}
+		}
 		if (arcology.FSChattelReligionistCreed === 1) {
 			if (V.nicaeaAssignment === slave.assignment) {
 				beauty += 2 * V.nicaeaPower;
@@ -1765,6 +1830,19 @@ window.FResult = (function() {
 		} // looks and acts mature, but has a body that just won't quit
 	}
 
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 */
+	function calcSlaveProfessionalismBonus(slave) {
+		if (slave.devotion > 50) {
+			if (slave.energy <= 40) {
+				result += 4;
+			} else {
+				result += 2;
+			}
+		} // Professional slaves try harder
+	}
+
 	/**
 	 * @param {App.Entity.SlaveState} slave
 	 */
@@ -1802,6 +1880,9 @@ window.FResult = (function() {
 		} else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") {
 			calcMatureBonus(slave);
 		}
+		if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
+			calcSlaveProfessionalismBonus(slave);
+		}
 	}
 
 	/**
@@ -2096,6 +2177,16 @@ window.slaveCost = (function() {
 				multiplier -= 0.1;
 			}
 		}
+		if (arcology.FSPetiteAdmirationSMR !== 0 || arcology.FSStatuesqueGlorificationSMR !== 0) {
+			if (heightPass(slave)) {
+				multiplier += 0.1;
+			} else {
+				multiplier -= 0.1;
+			}
+		}
+		if (arcology.FSSlaveProfessionalism !== "unset") {
+			multiplier += 0.1 * (slave.intelligence / 20);
+		}
 		if (arcology.FSHedonisticDecadenceSMR !== 0) {
 			if (slave.weight > 60 && slave.muscles < 5) {
 				multiplier += 0.1;