diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index d3fb52c80700b61708d95625e74b5dee680e6494..5b6b24408d5a4c99dae2ec48563b6b11371d7ba9 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -13,6 +13,7 @@ Pregmod
 	-RA can now manage basic abortions
 	-added abortion tracking tattoos
 	-added bulk incubator retrieval
+	-added "pFace" and "uFace" genetic traits
 	-fixes
 
 0.10.7.1-2.1.x
diff --git a/devNotes/twine CSS b/devNotes/twine CSS
index c4d4e15ab984871a01727c3ec449e86ac31b4eb0..2e3bf0334933c7400fff449a562245cff474fe57 100644
--- a/devNotes/twine CSS	
+++ b/devNotes/twine CSS	
@@ -371,6 +371,17 @@ button.accordion.active:before {
 	overflow: hidden;
 }
 
+div.accordion:before {
+	content: '\002B';
+	color: #777;
+	font-weight: bold;
+	float: left;
+	margin-right: 5px;
+}
+div.accordion.active:before {
+	content: "\2212";
+}
+
 /* begin efmCSS */
 
 #graph .linage {
diff --git a/src/cheats/mod_EditFSCheat.tw b/src/cheats/mod_EditFSCheat.tw
index e9d95ac122e579d19ae1d70f9217cb0920eceb60..434a64cf002347a1cacf655a8d7c414c462e2fee 100644
--- a/src/cheats/mod_EditFSCheat.tw
+++ b/src/cheats/mod_EditFSCheat.tw
@@ -264,9 +264,9 @@
 	<br><<radiobutton "$arcologies[0].FSTransformationFetishistDecoration" 80>> 80 (Slaves stationed in public spaces.)
 	<br><<radiobutton "$arcologies[0].FSTransformationFetishistDecoration" 100>> 100 (Remodeled exterior; Fully customized.)
 
-	<br>Law: $arcologies[0].FSTransformationFetishistLaw |
-	<<radiobutton "$arcologies[0].FSTransformationFetishistLaw" 0>> 0 (Not passed.)
-	| <<radiobutton "$arcologies[0].FSTransformationFetishistLaw" 1>> 1 (Passed.)
+	<br>Law: $arcologies[0].FSTransformationFetishistSMR |
+	<<radiobutton "$arcologies[0].FSTransformationFetishistSMR" 0>> 0 (Not passed.)
+	| <<radiobutton "$arcologies[0].FSTransformationFetishistSMR" 1>> 1 (Passed.)
 
 	<br>[[Apply and reset Body Purism|MOD_Edit FS Cheat][removeFS("FSBodyPurist")]]
 
diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
index e01e8a82ddcb63281fadc52e906fbe0f845aebe9..15f56987d291a60d99dfc1f0dbb8dbe34b1899c3 100644
--- a/src/events/intro/initNationalities.tw
+++ b/src/events/intro/initNationalities.tw
@@ -182,7 +182,6 @@
 <<set $arcologies[0].FSDegradationistSMR = 0>>
 <<set $arcologies[0].FSBodyPuristLaw = 0>>
 <<set $arcologies[0].FSBodyPuristSMR = 0>>
-<<set $arcologies[0].FSTransformationFetishistLaw = 0>>
 <<set $arcologies[0].FSTransformationFetishistSMR = 0>>
 <<set $arcologies[0].FSYouthPreferentialistLaw = 0>>
 <<set $arcologies[0].FSYouthPreferentialistSMR = 0>>
diff --git a/src/js/generateGenetics.js b/src/js/generateGenetics.js
index 169ad39198ec109da1b5433dff97b887906212e0..70947a096ed063adc1c91fd775369bc44fc9e507 100644
--- a/src/js/generateGenetics.js
+++ b/src/js/generateGenetics.js
@@ -62,10 +62,11 @@ window.generateGenetics = (function() {
 		genes.father = setFatherID(actor2);
 		genes.fatherName = setFatherName(father, activeFather, actor2);
 		genes.nationality = setNationality(father, mother);
+		genes.geneticQuirks = setGeneticQuirks(father, mother, genes.gender);
 		genes.skin = setSkin(father, mother);
 		genes.race = setRace(father, mother, actor2);
 		genes.intelligence = setIntelligence(father, mother, activeMother, actor2);
-		genes.face = setFace(father, mother, activeMother, actor2);
+		genes.face = setFace(father, mother, activeMother, actor2, genes.geneticQuirks);
 		genes.faceShape = setFaceShape(father, mother);
 		genes.eyeColor = setEyeColor(father, mother, actor2);
 		genes.hColor = setHColor(father, mother, actor2);
@@ -75,7 +76,6 @@ window.generateGenetics = (function() {
 		genes.sexualFlaw = setSexualFlaw(father, mother);
 		genes.behavioralFlaw = setBehavioralFlaw(father, mother);
 		genes.fetish = setFetish(father, mother);
-		genes.geneticQuirks = setGeneticQuirks(father, mother, genes.gender);
 
 		return genes;
 	}
@@ -449,9 +449,15 @@ window.generateGenetics = (function() {
 	}
 
 	//face
-	function setFace(father, mother, activeMother, actor2) {
+	function setFace(father, mother, activeMother, actor2, genes) {
 		let face;
-		if (mother.ID === -1) {
+		if (genes.pFace > 0 && genes.uFace > 0) {
+			face = 0;
+		} else if (genes.pFace > 0) {
+			face = 100;
+		} else if (genes.uFace > 0) {
+			face = -100;
+		} else if (mother.ID === -1) {
 			if (actor2 === -6) {
 				face = jsRandom(90,100);
 			} else if (father !== 0) {
@@ -478,7 +484,7 @@ window.generateGenetics = (function() {
 		} else {
 			face = mother.face;
 		}
-		if (V.inbreeding === 1) {
+		if (V.inbreeding === 1 && genes.pFace === 0 && genes.uFace === 0) {
 			if (mother.ID !== -1) {
 				if (father !== 0 && father.ID === -1 && activeMother.breedingMark !== 1) {
 					if (face > -100 && jsRandom(1,100) > 60) {
@@ -621,6 +627,28 @@ window.generateGenetics = (function() {
 				}
 			}
 		}
+		
+		//perfect face
+		if (father !== 0) {
+			if (mother.geneticQuirks.pFace + father.geneticQuirks.pFace >= 4) {
+				quirks.pFace = 2;
+			} else if (mother.geneticQuirks.pFace === 2 || father.geneticQuirks.pFace === 2) {
+				quirks.pFace = 1;
+			}
+		} else if (mother.geneticQuirks.pFace === 2) {
+			quirks.pFace = 1;
+		}
+		
+		//ugly face
+		if (father !== 0) {
+			if (mother.geneticQuirks.uFace + father.geneticQuirks.uFace >= 4) {
+				quirks.uFace = 2;
+			} else if (mother.geneticQuirks.uFace === 2 || father.geneticQuirks.uFace === 2) {
+				quirks.uFace = 1;
+			}
+		} else if (mother.geneticQuirks.uFace === 2) {
+			quirks.uFace = 1;
+		}
 
 		return clone(quirks);
 	}
diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js
index 16bd8542138491eb3444c99b78ce69ff81b8eea6..95d513e927d03d5cbf78b61a0381eed56ebf5b21 100644
--- a/src/js/generateNewSlaveJS.js
+++ b/src/js/generateNewSlaveJS.js
@@ -853,6 +853,11 @@ window.GenerateNewSlave = (function(){
 			case "masculine":
 				slave.face += jsRandom(-10,0);
 		}
+		if (slave.face >= 100 && slave.face >= jsRandom(-100000,100)) {
+			slave.geneticQuirks.pFace = 2;
+		} else if (slave.face <= -100 && slave.face <= jsRandom(-100,100000)) {
+			slave.geneticQuirks.uFace = 2;
+		}
 	}
 
 	function generateXYFace() {
@@ -892,6 +897,11 @@ window.GenerateNewSlave = (function(){
 			case "masculine":
 				slave.face += jsRandom(-10,0);
 		}
+		if (slave.face >= 100 && slave.face >= jsRandom(-100000,100)) {
+			slave.geneticQuirks.pFace = 2;
+		} else if (slave.face <= -100 && slave.face <= jsRandom(-100,100000)) {
+			slave.geneticQuirks.uFace = 2;
+		}
 	}
 
 	function generateXXPregAdaptation() {
diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw
index 85debf228ead78b84226b41521efa118d99e844e..05113cef22bb2f74580c0fa5058347382d56a99b 100644
--- a/src/uncategorized/arcmgmt.tw
+++ b/src/uncategorized/arcmgmt.tw
@@ -1011,7 +1011,7 @@ _percTopClass = Math.trunc(($topClass / ($ACitizens + $ASlaves)) * 1000) / 10>>
 <<if $arcologies[0].FSPaternalistLaw == 1>>The slaves are well cared for, and it can sometimes be difficult to tell slaves from citizens.
 <<elseif $arcologies[0].FSDegradationistLaw == 1>>Most of the slaves are recent captures, since the vicious society that's taken root here uses people up quickly.<</if>>
 <<if $arcologies[0].FSBodyPuristLaw == 1>>The average slave is quite healthy.
-<<elseif $arcologies[0].FSTransformationFetishistLaw == 1>>
+<<elseif $arcologies[0].FSTransformationFetishistSMR == 1>>
 	<<if $arcologies[0].FSTransformationFetishistResearch == 1>>
 		Breast implants are almost universal; <<if $arcologies[0].FSSlimnessEnthusiast == "unset">>an M-cup bust is below average among the slave population<<else>>even the most lithe slave sports a pair of overly round chest balloons<</if>>.
 	<<else>>
diff --git a/src/uncategorized/arcologyDescription.tw b/src/uncategorized/arcologyDescription.tw
index 1330f5211e721142973f58f9dcbc0035066631bf..3f4101438a97ea5acd3f262242079bc6be2ebba3 100644
--- a/src/uncategorized/arcologyDescription.tw
+++ b/src/uncategorized/arcologyDescription.tw
@@ -628,7 +628,7 @@ Its<<if $weatherCladding == 2>> glorious<<elseif $weatherCladding > 0>> dull<<el
 <<if $arcologies[0].FSPaternalistLaw == 1>>The slaves are well cared for, and it can sometimes be difficult to tell slaves from citizens.
 <<elseif $arcologies[0].FSDegradationistLaw == 1>>Most of the slaves are recent captures, since the vicious society that's taken root here uses people up quickly.<</if>>
 <<if $arcologies[0].FSBodyPuristLaw == 1>>The average slave is quite healthy.
-<<elseif $arcologies[0].FSTransformationFetishistLaw == 1>>
+<<elseif $arcologies[0].FSTransformationFetishistSMR == 1>>
 	<<if $arcologies[0].FSTransformationFetishistResearch == 1>>
 		Breast implants are almost universal; <<if $arcologies[0].FSSlimnessEnthusiast == "unset">>an M-cup bust is below average among the slave population<<else>>even the most lithe slave sports a pair of overly round chest balloons<</if>>.
 	<<else>>
diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw
index 70d25de441a9f79f48acf4118258caec089d6fe5..0ae78fc2bab676764af5a15437d4f223ab1f6772 100644
--- a/src/uncategorized/remoteSurgery.tw
+++ b/src/uncategorized/remoteSurgery.tw
@@ -1325,6 +1325,14 @@ $He has
 				//$He already has received the plasticity increasing elasticity treatment//
 			<</if>>
 		<</if>>
+		<<if $activeSlave.geneticQuirks.pFace == 2>>
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;
+			[[Prevent passing of perfect faces|Surgery Degradation][$activeSlave.geneticQuirks.pFace = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]]
+		<</if>>
+		<<if $activeSlave.geneticQuirks.uFace == 2>>
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;
+			[[Prevent passing of hideous faces|Surgery Degradation][$activeSlave.geneticQuirks.uFace = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]]
+		<</if>>
 		<<if $activeSlave.geneticQuirks.hyperFertility == 2>>
 			<br>&nbsp;&nbsp;&nbsp;&nbsp;
 			[[Correct genetic hyper fertility|Surgery Degradation][$activeSlave.geneticQuirks.hyperFertility = 0,cashX(forceNeg($surgeryCost*4), "slaveSurgery", $activeSlave), $activeSlave.health -= 40, $activeSlave.chem += 100,$surgeryType = "gene treatment"]]
diff --git a/src/utility/descriptionWidgets.tw b/src/utility/descriptionWidgets.tw
index 5d22b2e77889e57947222cf2b264c8a0e288bdb5..35c9159533d7b256fb54a5ee5297e494d9df897f 100644
--- a/src/utility/descriptionWidgets.tw
+++ b/src/utility/descriptionWidgets.tw
@@ -258,6 +258,14 @@
 <<widget "geneticQuirkAssessment">>
 
 <<if $geneticMappingUpgrade == 1>>
+	<<if $activeSlave.geneticQuirks.pFace == 2>>
+		$He has an exceedingly rare trait associated with perfect facial beauty.
+		<<if $activeSlave.geneticQuirks.uFace == 2>>
+			Oddly enough, $he also possesses a conflicting trait for raw uglyness; the two average each other out.
+		<</if>>
+	<<elseif $activeSlave.geneticQuirks.uFace == 2>>
+		$He has an exceedingly rare trait associated with some of the ugliest mugs in history.
+	<</if>>
 	<<if $activeSlave.geneticQuirks.fertility == 2 && $activeSlave.geneticQuirks.hyperFertility == 2>>
 		$He has a unique genetic condition resulting in inhumanly high
 		<<if $activeSlave.ovaries == 1 || $activeSlave.mpreg == 1>>