diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js
index 335d0121f5c14072d94efc207dc66f1c5d44fff4..c5d861ade74f906a204f56411de28b2e48bd8564 100644
--- a/src/endWeek/saSocialEffects.js
+++ b/src/endWeek/saSocialEffects.js
@@ -647,6 +647,13 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 						`Society <span class="green">approves</span> of ${his} intact anus, advancing ideals of pure, fresh slaves.`));
 				}
 			}
+			if (slave.makeup === 0 && slave.face > 10) {
+				t.push(new SocialEffect("Body Purist", 1, `Makeup-free beauty`,
+					`Society <span class="green">approves</span> of keeping ${his} naturally beautiful face makeup-free.`));
+			} else if (slave.makeup > 1) {
+				t.push(new SocialEffect("Body Purist", 1, `Heavy makeup`,
+					`Society <span class="red">disapproves</span> of ${his} heavy makeup, which covers up ${his} natural features.`));
+			}
 		} else if (V.arcologies[0].FSTransformationFetishist !== "unset") {
 			let transformed = 0;
 			if (slave.boobsImplant > 0 && slave.buttImplant > 0 && slave.lipsImplant > 0) {
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 4838f4b54f04a19d33471bc6b3fe8f089645f445..89dcfc46b140c9a36702316a35f4f5899c10a1d3 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -275,7 +275,7 @@ globalThis.BeautyArray = function(slave) {
 				break;
 			case "straightening braces":
 			case "cosmetic braces":
-				if (slave.visualAge.isBetween(14, 18)) {
+				if (slave.visualAge.isBetween(14, 18) && arcology.FSMaturityPreferentialist === "unset") {
 					adjustBeauty("Teeth", (1));
 				}
 				break;
@@ -354,8 +354,26 @@ globalThis.BeautyArray = function(slave) {
 		if (slave.nails > 0) {
 			adjustBeauty("Nails", (1));
 		}
-		if (slave.makeup > 0) {
-			adjustBeauty("Makeup", (1));
+		if (slave.makeup === 0) {
+			if (arcology.FSBodyPurist !== "unset") {
+				if (slave.face > 10) {
+					adjustBeauty("Body Purist: Makeup-free beauty", 2);
+				} else {
+					adjustBeauty("Body Purist: Makeup-free honesty", 1);
+				}
+			}
+		} else {
+			if (arcology.FSDegradationist !== "unset" && slave.makeup > 1) {
+				adjustBeauty("Degradationist: Heavy makeup", 2);
+			} else if (arcology.FSBodyPurist !== "unset") {
+				if (slave.makeup > 1) {
+					adjustBeauty("Body Purist: Unsightly makeup", -1);
+				} else {
+					// no bonus or penalty for light makeup in Body Purist arcologies
+				}
+			} else {
+				adjustBeauty("Makeup", 1);
+			}
 		}
 		switch (slave.markings) {
 			case "beauty mark":
diff --git a/src/npc/generate/generateMarketSlave.js b/src/npc/generate/generateMarketSlave.js
index 33e26d986a921ba58cbafa9e891f09da730b4c43..57b59c28f6785a0704c21f4dd93c64d39f555f60 100644
--- a/src/npc/generate/generateMarketSlave.js
+++ b/src/npc/generate/generateMarketSlave.js
@@ -716,21 +716,21 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 				}
 				if (jsRandom(1, 100) > 10) {
 					// pierce em up
-					let piercings = ["corsetPiercing", "nipplesPiercing", "areolaePiercing", "lipsPiercing", "tonguePiercing", "anusPiercing"];
+					let piercings = ["corset", "nipple", "areola", "lips", "tongue", "anus"];
 					if (slave.dick > 0) {
-						piercings.push("dickPiercing");
+						piercings.push("dick");
 					}
 					if (slave.vagina !== -1) {
-						piercings.push("vaginaPiercing");
+						piercings.push("vagina");
 					}
-					if ((slave.vagina !== -1) || (slave.dick !== 0)) {
-						piercings.push("clitPiercing");
+					if (slave.dick > 0 || slave.vagina !== -1) {
+						piercings.push("genitals");
 					}
 					const modPool = jsRandom(5, 15);
 					for (i = 0; i < modPool; i++) {
 						const pierce = piercings.random();
-						if (slave[pierce] < 2) {
-							slave[pierce]++;
+						if (slave.piercing[pierce].weight < 2) {
+							slave.piercing[pierce].weight++;
 						}
 					}
 				}
@@ -825,6 +825,8 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 				slave.piercing.genitals.smart = false;
 				slave.piercing.dick.weight = 0;
 				slave.piercing.anus.weight = 0;
+				slave.piercing.eyebrow.weight = 0;
+				slave.piercing.nose.weight = 0;
 			} else if (neighbor.FSTransformationFetishist > 80) {
 				r += `They vary in terms of what size their implants are, not whether they have them. `;
 				slave.chem += jsRandom(10, 100);