diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw
index 8b327839f79af68e8f9a5e687faef0ca290c80a1..6f437d960e46d5937951aacf190f83397a3bfdc0 100644
--- a/src/init/setupVars.tw
+++ b/src/init/setupVars.tw
@@ -325,6 +325,10 @@ equine: {type: "equine", normalOvaMin:1, normalOvaMax: 1, normalBirth: 48, minLi
 
 <<set setup.modestClothes = ["a ball gown", "a biyelgee costume", "a bunny outfit", "a burkini", "a burqa", "a comfortable bodysuit", "a cybersuit", "a dirndl", "a gothic lolita dress", "a halter top dress", "a hanbok", "a hijab and abaya", "a hijab and blouse", "a huipil", "a kimono", "a klan robe", "a latex catsuit", "a leotard", "a long qipao", "a maternity dress", "a military uniform", "a mini dress", "a mounty outfit", "a nice maid outfit", "a nice nurse outfit", "a niqab and abaya", "a one-piece swimsuit", "a penitent nuns habit", "a police uniform", "a red army uniform", "a schoolgirl outfit", "a schutzstaffel uniform", "a slave gown", "a slutty maid outfit", "a slutty nurse outfit", "a slutty qipao", "a sweater and cutoffs", "a t-shirt and jeans", "a toga", "an oversized t-shirt and boyshorts", "battlearmor", "battledress", "conservative clothing", "cutoffs and a t-shirt", "leather pants and a tube top", "lederhosen", "nice business attire", "restrictive latex", "slutty business attire", "spats and a tank top", "sport shorts and a sports bra", "sport shorts and a t-shirt", "stretch pants and a crop-top"]>>
 
+<<set setup.sluttyClothes = ["a chattel habit", "a cheerleader outfit", "a fallen nuns habit", "a schoolgirl outfit", "a skimpy loincloth", "a slutty klan robe", "a slutty maid outfit", "a slutty nurse outfit", "a slutty outfit", "a slutty pony outfit", "a slutty qipao", "a slutty schutzstaffel uniform", "a string bikini", "a succubus outfit", "a t-shirt and panties", "a t-shirt and thong", "a tank-top and panties", "a tube top and thong", "attractive lingerie", "attractive lingerie for a pregnant woman", "clubslut netting", "kitty lingerie", "leather pants and a tube top", "leather pants and pasties", "panties and pasties", "pasties", "slutty business attire", "slutty jewelry", "sport shorts and a sports bra", "striped underwear"]>>
+
+<<set setup.highHeels = ["boots", "extreme heels", "heels"]>>
+
 
 <<set setup.veryYoungCareers = ["a babysitter", "a beggar", "a beggar", "a bully hunter", "a bully", "a camp counselor", "a cheerleader", "a child actress", "a child prodigy", "a child prostitute", "a child prostitute", "a child soldier", "a child soldier", "a club manager", "a club recruiter", "a club treasurer", "a cum dump", "a dropout", "a dropout", "a drug mule", "a farmer's daughter", "a girl scout", "a girl scout", "a hall monitor", "a handmaiden", "a hospital volunteer", "a housesitter", "a juvenile delinquent", "a juvenile delinquent", "a latchkey kid", "a lemonade stand operator", "a marching band leader", "a meat toilet", "a military brat", "a model-UN star", "a model", "a noblewoman", "a pageant star", "a paper girl", "a part-time farm laborer", "a pick-pocket", "a refugee", "a refugee", "a refugee", "a school nurse's assistant", "a shrine maiden", "a street thug", "a street urchin", "a street urchin", "a street urchin", "a student council president", "a student from a boarding school", "a student from a private school", "a student from a public school", "a student from a public school", "a student from a public school", "a student from a public school", "a student from a public school", "a sweatshop worker", "a sweatshop worker", "a sweatshop worker", "a sweatshop worker", "a teacher's pet", "an apprentice", "an aspiring pop star", "an idol", "an orphan", "an orphan", "an orphan", "an orphan", "an orphan", "being homeschooled by her parents", "captain of the kendo club", "from a lower class family", "from a lower class family", "from a lower class family", "from a middle class family", "from a middle class family", "from an upper class family", "homeless", "homeless", "homeless"]>> /* pregmod */
 
@@ -2055,7 +2059,7 @@ Then pick _namePool.random(), or display those names as possible choices, or do
 <<set setup.ArcologyNamesRomanRevivalist = ["Abila", "Aeminium", "Aequum", "Agrigentum", "Ala", "Albanianis", "Ambianum", "Antaeopolis", "Antiochia", "Apulum", "Aquileia", "Argentoratum", "Ariminum", "Arsinoë", "Ascrivium", "Asculum", "Attalia", "Augusta Vindelicorum", "Barium", "Belum", "Berytus", "Biriciana", "Blestium", "Bonna", "Bononia", "Bovium", "Brixia", "Burgodunum", "Byzantium", "Caesaraugusta", "Caesarea", "Caesaromagus", "Calleva Atrebatum", "Camulodunum", "Capua", "Carthago Nova", "Catana", "Celeia", "Cibalae", "Clausentum", "Comum", "Condate", "Conimbriga", "Constantinopolis", "Corduba", "Coria", "Coriovallum", "Danum", "Deva Victrix", "Divodurum", "Dubris", "Durnovaria", "Durocornovium", "Duroliponte", "Dyrrachium", "Eboracum", "Eburobrittium", "Elysian Fields", "Emona", "Epidaurum", "Florentia", "Gerulata", "Gerunda", "Isca Augusta", "Italica", "Iuvavum", "Lacobrica", "Lagentium", "Lauri", "Lentia", "Leptis Magna", "Letocetum", "Lindinis", "Londinium", "Longaricum", "Lopodunum", "Lousonna", "Lugdunum", "Luguvalium", "Lutetia", "Mancunium", "Marsonia", "Massa", "Massalia", "Matilo", "Mediolanum", "Messana", "Mod", "Mogontiacum", "Moridunum", "Mursa", "Naissus", "Nauportus", "Neapolis", "Neviodunum", "Nicaea", "Nicomedia", "Nida", "Nova Roma", "Novaesium", "Noviomagus", "Olicana", "Olisippo", "Ostia", "Partiscum", "Patavium", "Pistoria", "Placentia", "Poetovio", "Polemonion", "Pomaria", "Pompeii", "Ragusium", "Ravenna", "Regulbium", "Rhegium", "Rutupiae", "Salernum", "Scalabis", "Segovia", "Sirmium", "Siscia", "Spalatum", "Sumelocenna", "Syracusae", "Tarraco", "Tarsus", "The City of the Seven Hills", "Theranda", "Thuburbo Majus", "Thubursicum", "Tilurium", "Tingi", "Traiectum", "Trapezus", "Turicum", "Venta Icenorum", "Verulamium", "Vesontio", "Vindobona", "Vinovia", "Volubilis"]>>
 <<set setup.ArcologyNamesAztecRevivalist = ["Acolmiztli", "Acozac", "Amaquemecan", "Anenecuilco", "Azcapotzalco", "Aztlan", "Calixtlahuaca", "Chalco", "Chapultepec", "Chicomoztoc", "Cholula", "Coixtlahuaca", "Coyoacan", "Coyoacán", "Cuautla", "Culhuacan", "Cuzcatlan", "Ecatepec", "Huitzilopochco", "Itzcahuacan", "Itztapalapan", "Iztapalapa", "Kaminaljuyu", "Malinalco", "Mexicatzinco", "Nojpetén", "Ocotelolco", "Ocuituco", "Omeyocan", "Otompan", "Oxwitik", "Quiahuiztlan", "Tacuba", "Tamoanchan", "Tenayuca", "Tenochtitlan", "Teopanzolco", "Teotihuacan", "Tepeticpac", "Tepetlaoztoc", "Tepozteco", "Texcoco", "Texcotzingo", "The Halls of Montezuma", "Tizatlan", "Tlacopan", "Tlalmanalco", "Tlatelolco", "Tollan", "Utatlán", "Xalapa", "Xaltocan", "Xochimilco", "Zacpeten"]>>
 <<set setup.ArcologyNamesEgyptianRevivalist = ["Aaru", "Abdju", "Abu", "Aka", "Akhetaten", "Amenemhat-itj-tawy", "Aneb-Hetch", "Ankh-Tawy", "Anpet", "Apu", "Aushamem", "Baki", "Behdet", "Behedet-jabtet", "Buhen", "Chenem-Waset", "Dehenet", "Dep", "Dja", "Djanet", "Djed-Sut", "Djedu", "Djerty", "Djew-Qa", "Gebtu", "Gesa", "Gesy", "Hapi", "Hebenu", "Henen-nesut", "Herwer", "Hut-hery-ib", "Hut-ka-ptah", "Hut-Repyt", "Hut-Sekhem", "Hut-waret", "Iken", "Imet", "Imu", "Imura", "Inbu-Hedj", "Ipet-Resyt", "Ipu", "Itjtawy", "Iu-miteru", "Iunet", "Iunu", "Iuny", "Iunyt", "Iushenshen", "Khasut", "Khem", "Khemenu", "Khent-min", "Kheny", "Khenyt", "Khito", "Khmun", "Kis", "Madu", "Men-nefer", "Menfe", "Mer-nefer", "Mesen", "Moph", "Napata", "Nay-Ta-Hut", "Nekheb", "Nekhen", "Nubt", "Pe", "Peguat", "Pekher-wer", "Per-Amun", "Per-Atum", "Per-Banebdjedet", "Per-Bast", "Per-Bastet", "Per-Hathor", "Per-Imen-mat-khent", "Per-Medjed", "Per-Nemty", "Per-Ra-mes-su", "Per-Ramesses", "Per-Sopdu", "Per-Usiri", "Per-Wadjet", "Piemro", "Pikaut", "Pikuat", "Pselqet", "Ptah", "Ptkheka", "Qedesh", "Qedshu", "Qis", "Râ-Kedet", "Raqote", "Rebu", "Saka", "Sangar", "Semabehdet", "Senet", "Sepermeru", "Seshesh", "Šetennu", "Shashotep", "Shasu", "Shedet", "Sheten", "Sumenu", "Swenett", "Ta-senet", "Tamiat", "Taremu", "Tayu-djayet", "Tepihu", "Timinhor", "Tjaru", "Tjebnutjer", "Tjebu", "Tjeku", "Tjenu", "Tpyhwt", "Waset", "Weprehwy", "Yamu", "Ypu", "Zau", "Zauti", "Zawty", "Zay"]>>
-<<set setup.ArcologyNamesEdoRevivalist = ["Amano-Iwato", "Ando", "Asakura", "Asuka", "Dejima", "Edo", "Hakodate", "Heian-kyō", "Heijō-kyō", "Hiraizumi", "Hirakata", "Idano", "Ise", "Isonokami", "Itsukushima", "Iware", "Izakaha", "Karu", "Karushima", "Kasagiyama", "Kashihara", "Katashiha", "Kawagoe", "Kawanakajima", "Kazuraki", "Kobe", "Kokyo", "Koryo", "Kuni-kyō", "Kuruda", "Kyotanabe", "Mahoroba", "Makimuko", "Mikatagahara", "Miki", "Miyajima", "Miyako", "Muro", "Nagaoka-kyō", "Nagashima", "Nagashino", "Nakatsukuni", "Naniwa", "Nara", "Negoro", "New Kyoto", "New Tokyo", "Odawara", "Okazaki", "Okehazama", "Onogoro", "Osaka", "Otsu", "Ryūgū-jō", "Sakurai", "Sekigahara", "Shiga", "Shika", "Shiki", "Shikoku", "Shimonoseki", "Shuri", "Sunpu", "Tajihi", "Takama-ga-hara", "Tanegashima", "Tengoku", "Tenmokuzan", "Tenri", "The Imperial Palace", "Ujiyamada", "Urasoe", "Waki-no-kami", "Yamazaki", "Yawata", "Yoshino"]>>
+<<set setup.ArcologyNamesEdoRevivalist = ["Amano-Iwato", "Ando", "Asakura", "Asuka", "Dejima", "Edo", "Hakodate", "Heian-kyō", "Heijō-kyō", "Hiraizumi", "Hirakata", "Idano", "Ise", "Isonokami", "Itsukushima", "Iware", "Izakaha", "Karu", "Karushima", "Kasagiyama", "Kashihara", "Katashiha", "Kawagoe", "Kawanakajima", "Kazuraki", "Kobe", "Kokyo", "Koryo", "Kuni-kyō", "Kuruda", "Kyotanabe", "Mahoroba", "Makimuko", "Mikatagahara", "Miki", "Miyajima", "Miyako", "Muro", "Nagaoka-kyō", "Nagashima", "Nagashino", "Nakatsukuni", "Naniwa", "Nara", "Negoro", "Neo Tokyo", "New Kyoto", "New Tokyo", "Odawara", "Okazaki", "Okehazama", "Onogoro", "Osaka", "Otsu", "Ryūgū-jō", "Sakurai", "Sekigahara", "Shiga", "Shika", "Shiki", "Shikoku", "Shimonoseki", "Shuri", "Sunpu", "Tajihi", "Takama-ga-hara", "Tanegashima", "Tengoku", "Tenmokuzan", "Tenri", "The Imperial Palace", "Ujiyamada", "Urasoe", "Waki-no-kami", "Yamazaki", "Yawata", "Yoshino"]>>
 <<set setup.ArcologyNamesArabianRevivalist = ["Abha", "Achir", "Al Bahah", "Al-Hasa", "Al-Mansuriya", "Al-Qata'i", "Aleppo", "Alhambra", "Amadiya", "Amid", "Arar", "Arbil", "Ardabil", "Arjish", "Arzan", "Badr", "Baghdad", "Basra", "Bayt al-Hikma", "Béjaïa", "Beni Hammad", "Buraidah", "Cairo", "Córdoba", "Damascus", "Dammam", "Dhala", "Diyarbakır", "El-Mansuriya", "Faiyum", "Fes-al-Bali", "Fes", "Fez", "Fustat", "Ha'il", "Hajar an-Nasar", "Hama", "Harput", "Harran", "Hasankeyf", "Hejaz", "Ifriqiya", "Isfahan", "Jannah", "Jenin", "Jerusalem", "Jizan", "Jubayl", "Kairouan", "Karbala", "Khilat", "Kirkuk", "Kufa", "Madinah", "Madinat al-Hareer", "Madinat al-Salam", "Madinat al-Yasmin", "Madinat al-Zahra", "Mahdia", "Makkah", "Manzikart", "Maragha", "Mardin", "Marrakech", "Marrakesh", "Marsala", "Mayyafariqin", "Mecca", "Medina", "Mosul", "Murakuc", "Najran", "Nekor", "Qatif", "Qazvin", "Raqqa", "Raqqada", "Resafa", "Riyadh", "Sakakah", "Samarra", "Saqifah", "Say'un", "Sidon", "Sulaimaniyah", "Suq Abdulla", "Tabriz", "Tabuk", "Tahert", "Tarim", "Temsaman", "Tlemcen", "Tunis", "Walilli", "Zabid"]>>
 <<set setup.ArcologyNamesChineseRevivalist = ["Acheng", "Anyang", "Anyi", "Balasagun", "Beijing", "Bian", "Bianjing", "Bianzhou", "Binzhou", "Bogu", "Boping", "Chang'an", "Changle", "Changping", "Changsha", "Chengdu", "Chengzhou", "Chuqiu", "Dadu", "Daliang", "Daming", "Danyang", "Datong", "Daxing", "Dinglian", "Diqiu", "Dongdu", "Dongjing", "Dujianshan", "Dunhuang", "Ezhou", "Fanyang", "Feng Huang", "Fenghao", "Fengxiang", "Fuhan", "Fusang", "Guanggu", "Guangling", "Guangzhou", "Gusu", "Guzang", "Handan", "Hangzhou", "Haojing", "Hefei", "Henglong", "Hezhou", "Huanbei", "Huangquan", "Huangzhong", "Huatai", "Huokang", "Ji", "Jian", "Jiang", "Jiangling", "Jiangning", "Jiankang", "Jianye", "Jicheng", "Jin Shan", "Jinan", "Jincheng", "Jingsha", "Jingzhao", "Jingzhou", "Jinling", "Jinyang", "Jiuquan", "Kaifeng", "Khanbaliq", "Kuaiji", "Laosicheng", "Ledu", "Lianchuan", "Liaodong", "Liaoyang", "Lin'an", "Linhuang", "Linxiang", "Linzi", "Lishi", "Liting", "Longcheng", "Lujiang", "Luoyang", "Luoyi", "Luyi", "Mingfu", "Moling", "Mount Tai", "Nan'an", "Nanchang", "Nanjing", "Nanjun", "Nanyang", "Panyu", "Peking", "Pengcheng", "Pingcheng", "Pingjiang", "Pingliang", "Pingyang", "Pingzhou", "Puzi", "Qi Lin", "Qian", "Qiantang", "Qiling", "Qin", "Quanqiu", "Qufu", "Quwo", "Ruyin", "Shangcai", "Shanggui", "Shangjing", "Shangqiu", "Shengjing", "Shengle", "Shouchun", "Suzhou", "Taiyuan", "Tang", "Tanheli", "Tanjiao", "Tanzhou", "Taoqiu", "The Forbidden Palace", "The Middle Kingdom", "Tianlin", "Tongwan", "Wanchuan", "Wangcheng", "Wanqiu", "Wu", "Wuchang", "Wudu", "Xi'an", "Xiacai", "Xiangguo", "Xiangning", "Xiangping", "Xianyang", "Xibo", "Xicheng", "Xin Hua", "Xincai", "Xingqing", "Xingwang", "Xintian", "Xinzheng", "Xiping", "Xuchang", "Yangcheng", "Yangzhai", "Yanjing", "Yanshi", "Yecheng", "Yewang", "Yin", "Yinfu", "Ying", "Yingdu", "Yingqiu", "Yingtian", "Yong", "Yongshicheng", "You", "Youdu", "Youming", "Youzhou", "Yueyang", "Yuezhou", "Yuhang", "Yushan", "Zhangye", "Zhangzi", "Zhaoge", "Zhending", "Zheng", "Zhenxun", "Zhongdu", "Zhongguo", "Zhongshan", "Zibo", "Zichuan"]>>
 
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index 5371e9ca59ec9fa27f7e523a58472403face10d9..d5a060907ded06bb089cc9bf0430dc0b77c4ac06 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -1693,7 +1693,7 @@ window.DefaultRules = (function() {
 	 */
 	function ProcessDiet(slave, rule) {
 		// Diet Setting
-		if (rule.diet !== undefined && rule.diet !== null) {
+		if ((rule.diet !== undefined && rule.diet !== null) || rule.weight !== null) {
 			/*
 			if ((slave.boobs >= 1600) && (slave.muscles <= 5) && (slave.amp !== 1) && ((rule.muscles == null) || (rule.muscles === 0))) {
 				if ((slave.diet !== "muscle building")) {
@@ -1715,12 +1715,16 @@ window.DefaultRules = (function() {
 				}
 			} else {
 				if (rule.weight !== null) {
-					if (slave.weight - 5 > rule.weight.max && slave.diet !== "restricted") {
-						slave.diet = "restricted";
-						r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`;
-					} else if (slave.weight + 5 < rule.weight.min && slave.diet !== "fattening") {
-						slave.diet = "fattening";
-						r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`;
+					if (slave.weight > rule.weight.max) {
+						if (slave.diet !== "restricted" ) {
+							slave.diet = "restricted";
+							r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`;
+						}
+					} else if (slave.weight < rule.weight.min) {
+						if (slave.diet !== "fattening") {
+							slave.diet = "fattening";
+							r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`;
+						}
 					} else if ((rule.muscles !== undefined) && (rule.muscles !== null) && (slave.amp !== 1)) {
 						if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) {
 							if ((slave.diet !== "slimming")) {
@@ -2100,7 +2104,7 @@ window.DefaultRules = (function() {
 					slave.releaseRules = "restrictive";
 					r += `<br>Since ${slave.slaveName} is unable to masturbate, ${his} masturbation rules have been set to restrictive.`;
 				}
-			} else if ((release !== 0) && (slave.releaseRules !== rule.releaseRules)) {
+			} else if ((release !== 1) && (slave.releaseRules !== rule.releaseRules)) {
 				slave.releaseRules = rule.releaseRules;
 				r += `<br>${slave.slaveName}'s masturbation rules have been set to ${rule.releaseRules}.`;
 			}
diff --git a/src/js/assayJS.js b/src/js/assayJS.js
index 2e75f8405dd65183a77d220021fe5d941d693a58..94b60f2bcfb2d74afec7af0de7ea3c238fcd573a 100644
--- a/src/js/assayJS.js
+++ b/src/js/assayJS.js
@@ -69,36 +69,6 @@ window.isLeaderP = function isLeaderP(slave) {
 	return leaders.some(leader => leader.ID && leader.ID === slave.ID);
 };
 
-/**
- * Helper function returning PC's title
- * @returns {string}
- */
-window.properTitle = function properTitle() {
-	const PC = State.variables.PC;
-	if (PC.customTitle) {
-		return PC.customTitle;
-	} else if (PC.title !== 0) {
-		return "Sir";
-	} else {
-		return "Ma'am";
-	}
-};
-
-/**
- * Helper function returning slave's title for PC in situations where WrittenMaster() is inappropriate
- * @returns {string}
- */
-window.properMaster = function properMaster() {
-	const PC = State.variables.PC;
-	if (PC.customTitle) {
-		return PC.customTitle;
-	} else if (PC.title !== 0) {
-		return "Master";
-	} else {
-		return "Mistress";
-	}
-};
-
 /**
  * @param {App.Entity.SlaveState} slave
  */
@@ -657,565 +627,6 @@ window.SlaveFullBirthName = function SlaveFullBirthName(slave) {
 	return pair.join(" ");
 };
 
-window.PlayerName = function PlayerName() {
-	const V = State.variables;
-	const names = V.PC.surname ? [V.PC.name, V.PC.surname] : [V.PC.name];
-	if ((V.surnameOrder !== 1 && ["Cambodian", "Chinese", "Hungarian", "Japanese", "Korean", "Mongolian", "Taiwanese", "Vietnamese"].includes(V.PC.nationality)) || (V.surnameOrder === 2)) {
-		names.reverse();
-	}
-	return names.join(" ");
-};
-
-window.PCTitle = function PCTitle() {
-	const V = State.variables;
-	const titles = [];
-
-	V.PCTitle = PlayerName();
-
-	if (V.cheater === 1) {
-		V.PCTitle = (`${V.PCTitle} the Cheater`);
-	} else if (V.arcologies[0].FSRestart > 10) {
-		V.PCTitle = (`${V.PCTitle} of the Societal Elite`);
-	} else if (V.rep > 18000) {
-		V.PCTitle = (`${V.PCTitle} the Great`);
-	} else if (V.rep > 17000) {
-		V.PCTitle = (`the exalted ${V.PCTitle}`);
-	} else if (V.rep > 16000) {
-		V.PCTitle = (`the illustrious ${V.PCTitle}`);
-	} else if (V.rep > 15000) {
-		V.PCTitle = (`the prestigious ${V.PCTitle}`);
-	} else if (V.rep > 14000) {
-		V.PCTitle = (`the renowned ${V.PCTitle}`);
-	} else if (V.rep > 13000) {
-		V.PCTitle = (`the famed ${V.PCTitle}`);
-	} else if (V.rep > 12000) {
-		V.PCTitle = (`the celebrated ${V.PCTitle}`);
-	} else if (V.rep > 11000) {
-		V.PCTitle = (`the honored ${V.PCTitle}`);
-	} else if (V.rep > 10000) {
-		V.PCTitle = (`the acclaimed ${V.PCTitle}`);
-	} else if (V.rep > 9000) {
-		V.PCTitle = (`the eminent ${V.PCTitle}`);
-	} else if (V.rep > 8250) {
-		V.PCTitle = (`the prominent ${V.PCTitle}`);
-	} else if (V.rep > 7500) {
-		V.PCTitle = (`the distinguished ${V.PCTitle}`);
-	} else if (V.rep > 6750) {
-		V.PCTitle = (`the admired ${V.PCTitle}`);
-	} else if (V.rep > 6000) {
-		V.PCTitle = (`the esteemed ${V.PCTitle}`);
-	} else if (V.rep > 5250) {
-		V.PCTitle = (`the respected ${V.PCTitle}`);
-	} else if (V.rep > 4500) {
-		V.PCTitle = (`the known ${V.PCTitle}`);
-	} else if (V.rep > 3750) {
-		V.PCTitle = (`the recognized ${V.PCTitle}`);
-	} else if (V.rep > 3000) {
-		V.PCTitle = (`the rumored ${V.PCTitle}`);
-	}
-
-	V.PCTitle = (`${V.PCTitle}, `);
-
-	if (V.PC.name === "FC Dev") {
-		titles.push("the Creator");
-	}
-
-	if (V.plot === 1) {
-		if (V.invasionVictory === 3) {
-			if (V.PC.title === 1) {
-				titles.push("Hero of the City");
-			} else {
-				titles.push("Heroine of the City");
-			}
-		} else if (V.invasionVictory === 2) {
-			titles.push("Defender of the City");
-		}
-		if (V.daughtersVictory === 3) {
-			titles.push("Destroyer of the Daughters");
-		} else if (V.daughtersVictory === 2) {
-			if (V.PC.title === 1) {
-				titles.push("Victor over the Daughters");
-			} else {
-				titles.push("Victrix over the Daughters");
-			}
-		}
-	}
-
-	if (V.SF.Toggle && V.SF.FS.Tension > 100) {
-		switch (V.SF.FS.BadOutcome) {
-			case 'MIGRATION':
-				titles.push("The Abandoned");
-				break;
-			case 'Revolt':
-				titles.push("The Betrayed");
-				break;
-			case 'ANNIHILATION':
-				titles.push("The Runner");
-				break;
-			case 'OCCUPATION':
-				titles.push("The Occupied");
-				break;
-			case 'ASSIMILATION':
-				titles.push("The Deceived");
-				break;
-			case 'ISOLATION':
-				titles.push("The Ignored");
-				break;
-		}
-	}
-
-	if (V.mercenaries >= 5) {
-		if (V.mercenariesTitle === "Evocati") {
-			titles.push(`Princeps of the ${V.mercenariesTitle}`);
-		} else if (V.mercenariesTitle === "Knights") {
-			if (V.PC.title === 1) {
-				titles.push(`Lord Commander of the ${V.mercenariesTitle}`);
-			} else {
-				titles.push(`Lady Commander of the ${V.mercenariesTitle}`);
-			}
-		} else if (V.mercenariesTitle === "Immortals") {
-			titles.push(`Tyrant of the ${V.mercenariesTitle}`);
-		} else {
-			titles.push(`Commander of the ${V.mercenariesTitle}`);
-		}
-	} else if (V.mercenaries >= 1) {
-		titles.push("Commander of the Mercenaries");
-	}
-
-	if (V.dispensary === 1) {
-		if (V.PC.title === 1) {
-			titles.push("Pharmacologos");
-		} else {
-			titles.push("Pharmacologes");
-		}
-	}
-
-	if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.9) {
-		titles.push("Grand Champion of the Blood");
-	} else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.6) {
-		titles.push("Champion of the Blood");
-	} else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.3) {
-		titles.push("Defender of the Blood");
-	}
-
-	if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.9) {
-		titles.push("Grand Overseer of the Inferior Race");
-	} else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.6) {
-		titles.push("Overseer of the Inferior Race");
-	} else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.3) {
-		titles.push("Subduer of the Inferior Race");
-	}
-
-	if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.9) {
-		titles.push("Buttfucker of All Slaves");
-	} else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Sodomizer of the Traps");
-	} else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.3) {
-		if (V.PC.title === 1) {
-			titles.push("Penetrator of the Sissies");
-		} else {
-			titles.push("Penetratrix of the Sissies");
-		}
-	}
-
-	if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Father to the City");
-		} else {
-			titles.push("Mother to the City");
-		}
-	} else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Defender of Women");
-	} else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Restorer of Morals");
-	}
-
-	if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Protector to All Slaves");
-		} else {
-			titles.push("Protectrix to All Slaves");
-		}
-	} else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.6) {
-		if (V.PC.title === 1) {
-			titles.push("Benefactor of Slaves");
-		} else {
-			titles.push("Benefactrix of Slaves");
-		}
-	} else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Pursuer of Justice");
-	}
-
-	if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.9) {
-		titles.push("the Savior of the Future");
-	} else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.6) {
-		titles.push("the Holder of the Future");
-	} else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.3) {
-		titles.push("the Repopulist");
-	}
-
-	if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.9) {
-		titles.push("Holder of the Rod and the Lash");
-	} else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.6) {
-		titles.push("Subduer of Slaves");
-	} else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.3) {
-		titles.push("Pursuer of Justice");
-	}
-
-	if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.9) {
-		titles.push("the Purifier of the Breasts");
-	} else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.6) {
-		titles.push("the Discerning");
-	} else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.3) {
-		titles.push("the Tasteful");
-	}
-
-	if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.9) {
-		titles.push("the Expander of the Breasts");
-	} else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.6) {
-		titles.push("the Expander");
-	} else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.3) {
-		if (V.PC.title === 1) {
-			titles.push("the Implantor");
-		} else {
-			titles.push("the Implantrix");
-		}
-	}
-
-	if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("the Master of Stock");
-		} else {
-			titles.push("the Mistress of Stock");
-		}
-	} else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.6) {
-		titles.push("the Rancher");
-	} else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.3) {
-		titles.push("the Farmer");
-	}
-
-	if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.9) {
-		titles.push("beloved of Brodin");
-	} else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.6) {
-		if (V.PC.title === 1) {
-			titles.push("he of the godlike Body");
-		} else {
-			titles.push("she of the godlike Body");
-		}
-	} else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.3) {
-		titles.push("advancer of Gains");
-	}
-
-	if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Master of Softness");
-		} else {
-			titles.push("Lady of Softness");
-		}
-	} else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.6) {
-		titles.push("Thickness Enthusiast");
-	} else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.3) {
-		titles.push("the Feeder");
-	}
-
-	if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.9) {
-		titles.push("Grand Preserver of MILFS");
-	} else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.6) {
-		titles.push("Fucker of MILFS");
-	} else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.3) {
-		if (V.PC.title === 1) {
-			titles.push("he of the notorious MILF preference");
-		} else {
-			titles.push("she of the notorious MILF preference");
-		}
-	}
-
-	if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.9) {
-		titles.push("Keeper of the Magnificent Young Harem");
-	} else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.6) {
-		titles.push("Keeper of Virgins");
-	} else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.3) {
-		titles.push("the Virginbreaker");
-	}
-
-	if (V.arcologies[0].FSChattelReligionistLaw === 1) {
-		titles.push("the Prophet");
-	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.9) {
-		titles.push("Keeper of the Blade and Chalice");
-	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.6) {
-		titles.push("Champion of the Faith");
-	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.3) {
-		titles.push("the Holy");
-	}
-
-	if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.9) {
-		titles.push("First Consul");
-	} else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Aedile");
-	} else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Quaestor");
-	}
-
-	if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.9) {
-		titles.push("Tlatcani");
-	} else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Cihuacoatl");
-	} else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Tlatoani");
-	}
-
-	if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("the Living God");
-		} else {
-			titles.push("the Living Goddess");
-		}
-	} else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Pharaoh");
-	} else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.3) {
-		if (V.PC.title === 1) {
-			titles.push("Prince of the Nile");
-		} else {
-			titles.push("Princess of the Nile");
-		}
-	}
-
-	if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Emperor and Descendant of Amaterasu");
-		} else {
-			titles.push("Amaterasu Reborn");
-		}
-	} else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.6) {
-		titles.push("Shogun");
-	} else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Daimyo");
-	}
-
-	if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Caliph");
-		} else {
-			titles.push("Handmaiden of Allah");
-		}
-	} else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.6) {
-		if (V.PC.title === 1) {
-			titles.push("Sultan");
-		} else {
-			titles.push("Sultana");
-		}
-	} else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.3) {
-		titles.push("Beloved of Allah");
-	}
-
-	if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.9) {
-		if (V.PC.title === 1) {
-			titles.push("Emperor and Holder of the Mandate of Heaven");
-		} else {
-			titles.push("Empress and Holder of the Mandate of Heaven");
-		}
-	} else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.6) {
-		if (V.PC.title === 1) {
-			titles.push("Emperor");
-		} else {
-			titles.push("Empress");
-		}
-	} else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.3) {
-		if (V.PC.title === 1) {
-			titles.push("Governor of the Province");
-		} else {
-			titles.push("Governess of the Province");
-		}
-	}
-
-	if (V.brothelSlaves >= 15) {
-		if (V.PC.title === 1) {
-			titles.push("Procurator of the Brothel");
-		} else {
-			titles.push("Procuratrix of the Brothel");
-		}
-	}
-
-	if (V.clubSlaves >= 15) {
-		titles.push("First on the Club");
-	}
-	if (V.dairySlaves >= 15) {
-		titles.push("Keeper of the Cattle");
-	}
-	if (V.cumSlaves >= 15) {
-		if (V.PC.title === 1) {
-			titles.push("Extractor of the Ejaculate");
-		} else {
-			titles.push("Extractrix of the Ejaculate");
-		}
-	}
-	if (V.servantsQuartersSlaves >= 15) {
-		if (V.PC.title === 1) {
-			titles.push("Director of the Servants");
-		} else {
-			titles.push("Directrix of the Servants");
-		}
-	}
-	if (V.schoolroomSlaves >= 10) {
-		if (V.PC.title === 1) {
-			titles.push("Educator of the Slaves");
-		} else {
-			titles.push("Educatrix of the Slaves");
-		}
-	}
-	if (V.spaSlaves >= 10) {
-		titles.push("Order of the Bath");
-	}
-	if (V.arcadeSlaves >= 15) {
-		titles.push("Comptroller of the Arcade");
-	}
-	if (V.nurseryBabies >= 10) {
-		titles.push("Caretaker of the Youth");
-	}
-
-	const schoolsPresent = [];
-	const schoolsPerfected = [];
-	let schoolTitle = "";
-	if (V.TSS.schoolProsperity >= 10) {
-		schoolsPerfected.push("The Slave School");
-	} else if (V.TSS.schoolPresent === 1) {
-		schoolsPresent.push("The Slave School");
-	}
-	if (V.GRI.schoolProsperity >= 10) {
-		schoolsPerfected.push("The Growth Research Institute");
-	} else if (V.GRI.schoolPresent === 1) {
-		schoolsPresent.push("The Growth Research Institute");
-	}
-	if (V.SCP.schoolProsperity >= 10) {
-		schoolsPerfected.push("St. Claver Preparatory");
-	} else if (V.SCP.schoolPresent === 1) {
-		schoolsPresent.push("St. Claver Preparatory");
-	}
-	if (V.LDE.schoolProsperity >= 10) {
-		schoolsPerfected.push("L'École des Enculées");
-	} else if (V.LDE.schoolPresent === 1) {
-		schoolsPresent.push("L'École des Enculées");
-	}
-	if (V.TGA.schoolProsperity >= 10) {
-		schoolsPerfected.push("The Gymnasium-Academy");
-	} else if (V.TGA.schoolPresent === 1) {
-		schoolsPresent.push("The Gymnasium-Academy");
-	}
-	if (V.HA.schoolProsperity >= 10) {
-		schoolsPerfected.push("The Hippolyta Academy");
-	} else if (V.HA.schoolPresent === 1) {
-		schoolsPresent.push("The Hippolyta Academy");
-	}
-	if (V.TCR.schoolProsperity >= 10) {
-		schoolsPerfected.push("The Cattle Ranch");
-	} else if (V.TCR.schoolPresent === 1) {
-		schoolsPresent.push("The Cattle Ranch");
-	}
-	if (V.NUL.schoolProsperity >= 10) {
-		schoolsPerfected.push("Nueva Universidad de Libertad");
-	} else if (V.NUL.schoolPresent === 1) {
-		schoolsPresent.push("Nueva Universidad de Libertad");
-	}
-	if (schoolsPerfected.length > 0) {
-		if (V.PC.title === 1) {
-			schoolTitle = "Benefactor of ";
-		} else {
-			schoolTitle = "Benefactrix of ";
-		}
-		if (schoolsPerfected.length === 1) {
-			schoolTitle += schoolsPerfected[0];
-		} else if (schoolsPerfected.length === 2) {
-			schoolTitle += `${schoolsPerfected[0]} and ${schoolsPerfected[1]}`;
-		} else {
-			schoolsPerfected[schoolsPerfected.length - 1] = `and ${schoolsPerfected[schoolsPerfected.length - 1]}`;
-			schoolTitle += schoolsPerfected.join(", ");
-		}
-		titles.push(schoolTitle);
-	}
-
-	if (schoolsPresent.length > 0) {
-		schoolTitle = "Supporter of ";
-		if (schoolsPresent.length === 1) {
-			schoolTitle += schoolsPresent[0];
-		} else if (schoolsPresent.length === 2) {
-			schoolTitle += `${schoolsPresent[0]} and ${schoolsPresent[1]}`;
-		} else {
-			schoolsPresent[schoolsPresent.length - 1] = `and ${schoolsPresent[schoolsPresent.length - 1]}`;
-			schoolTitle += schoolsPresent.join(", ");
-		}
-		titles.push(schoolTitle);
-	}
-
-	if (V.TFS.schoolProsperity >= 10) {
-		titles.push("Honorary Sibling of the Futanari Sisters");
-	} else if (V.TFS.schoolPresent === 1) {
-		if (V.PC.title === 1) {
-			titles.push("Protector of the Futanari Sisters");
-		} else {
-			titles.push("Protectrix of the Futanari Sisters");
-		}
-	}
-
-	if (V.slaves.length > 50) {
-		if (V.PC.title === 1) {
-			titles.push("Master of Slaves");
-		} else {
-			titles.push("Mistress of Slaves");
-		}
-	} else if (V.slaves.length > 40) {
-		titles.push("Holder of Slaves");
-	} else if (V.slaves.length > 30) {
-		titles.push("Keeper of Slaves");
-	} else if (V.slaves.length > 20) {
-		titles.push("Manager of Slaves");
-	} else if (V.slaves.length > 10) {
-		titles.push("owner of slaves");
-	}
-
-	if (V.corpValue > 500000) {
-		titles.push("Corporate Titan");
-	} else if (V.corpValue > 250000) {
-		titles.push("corporate innovator");
-	} else if (V.corpValue > 100000) {
-		titles.push("corporate founder");
-	} else if (V.corpValue > 0) {
-		if (V.PC.title === 1) {
-			titles.push("noted corporate businessman");
-		} else {
-			titles.push("noted corporate businesswoman");
-		}
-	}
-
-	if (V.rep > 18000) {
-		if (V.PC.title === 1) {
-			titles.push("unquestioned Master of the Arcology");
-		} else {
-			titles.push("unquestioned Mistress of the Arcology");
-		}
-	} else if (V.rep > 15000) {
-		if (V.PC.title === 1) {
-			titles.push("Lord of the Arcology");
-		} else {
-			titles.push("Lady of the Arcology");
-		}
-	} else if (V.rep > 12000) {
-		titles.push("Ruler of the Arcology");
-	} else if (V.rep > 9000) {
-		titles.push("chief officer of the arcology");
-	} else {
-		titles.push("owner of the arcology");
-	}
-
-	if (titles.length === 1) {
-		V.PCTitle += titles[0];
-	} else if (titles.length === 2) {
-		V.PCTitle += `${titles[0]} and ${titles[1]}`;
-	} else {
-		titles[titles.length - 1] = `and ${titles[titles.length - 1]}`;
-		V.PCTitle += titles.join(", ");
-	}
-};
-
 /**
  * @param {App.Entity.SlaveState} slave
  * @returns {string}
diff --git a/src/js/playerJS.js b/src/js/playerJS.js
new file mode 100644
index 0000000000000000000000000000000000000000..14b91f04847b0d562c955c7a1431b40673195bf3
--- /dev/null
+++ b/src/js/playerJS.js
@@ -0,0 +1,588 @@
+/**
+ * Helper function returning PC's title
+ * @returns {string}
+ */
+window.properTitle = function properTitle() {
+	const PC = State.variables.PC;
+	if (PC.customTitle) {
+		return PC.customTitle;
+	} else if (PC.title !== 0) {
+		return "Sir";
+	} else {
+		return "Ma'am";
+	}
+};
+
+/**
+ * Helper function returning slave's title for PC in situations where WrittenMaster() is inappropriate
+ * @returns {string}
+ */
+window.properMaster = function properMaster() {
+	const PC = State.variables.PC;
+	if (PC.customTitle) {
+		return PC.customTitle;
+	} else if (PC.title !== 0) {
+		return "Master";
+	} else {
+		return "Mistress";
+	}
+};
+
+window.PlayerName = function PlayerName() {
+	const V = State.variables;
+	const names = V.PC.surname ? [V.PC.name, V.PC.surname] : [V.PC.name];
+	if ((V.surnameOrder !== 1 && ["Cambodian", "Chinese", "Hungarian", "Japanese", "Korean", "Mongolian", "Taiwanese", "Vietnamese"].includes(V.PC.nationality)) || (V.surnameOrder === 2)) {
+		names.reverse();
+	}
+	return names.join(" ");
+};
+
+window.PCTitle = function PCTitle() {
+	const V = State.variables;
+	const titles = [];
+
+	V.PCTitle = PlayerName();
+
+	if (V.cheater === 1) {
+		V.PCTitle = (`${V.PCTitle} the Cheater`);
+	} else if (V.arcologies[0].FSRestart > 10) {
+		V.PCTitle = (`${V.PCTitle} of the Societal Elite`);
+	} else if (V.rep > 18000) {
+		V.PCTitle = (`${V.PCTitle} the Great`);
+	} else if (V.rep > 17000) {
+		V.PCTitle = (`the exalted ${V.PCTitle}`);
+	} else if (V.rep > 16000) {
+		V.PCTitle = (`the illustrious ${V.PCTitle}`);
+	} else if (V.rep > 15000) {
+		V.PCTitle = (`the prestigious ${V.PCTitle}`);
+	} else if (V.rep > 14000) {
+		V.PCTitle = (`the renowned ${V.PCTitle}`);
+	} else if (V.rep > 13000) {
+		V.PCTitle = (`the famed ${V.PCTitle}`);
+	} else if (V.rep > 12000) {
+		V.PCTitle = (`the celebrated ${V.PCTitle}`);
+	} else if (V.rep > 11000) {
+		V.PCTitle = (`the honored ${V.PCTitle}`);
+	} else if (V.rep > 10000) {
+		V.PCTitle = (`the acclaimed ${V.PCTitle}`);
+	} else if (V.rep > 9000) {
+		V.PCTitle = (`the eminent ${V.PCTitle}`);
+	} else if (V.rep > 8250) {
+		V.PCTitle = (`the prominent ${V.PCTitle}`);
+	} else if (V.rep > 7500) {
+		V.PCTitle = (`the distinguished ${V.PCTitle}`);
+	} else if (V.rep > 6750) {
+		V.PCTitle = (`the admired ${V.PCTitle}`);
+	} else if (V.rep > 6000) {
+		V.PCTitle = (`the esteemed ${V.PCTitle}`);
+	} else if (V.rep > 5250) {
+		V.PCTitle = (`the respected ${V.PCTitle}`);
+	} else if (V.rep > 4500) {
+		V.PCTitle = (`the known ${V.PCTitle}`);
+	} else if (V.rep > 3750) {
+		V.PCTitle = (`the recognized ${V.PCTitle}`);
+	} else if (V.rep > 3000) {
+		V.PCTitle = (`the rumored ${V.PCTitle}`);
+	}
+
+	V.PCTitle = (`${V.PCTitle}, `);
+
+	if (V.PC.name === "FC Dev") {
+		titles.push("the Creator");
+	}
+
+	if (V.plot === 1) {
+		if (V.invasionVictory === 3) {
+			if (V.PC.title === 1) {
+				titles.push("Hero of the City");
+			} else {
+				titles.push("Heroine of the City");
+			}
+		} else if (V.invasionVictory === 2) {
+			titles.push("Defender of the City");
+		}
+		if (V.daughtersVictory === 3) {
+			titles.push("Destroyer of the Daughters");
+		} else if (V.daughtersVictory === 2) {
+			if (V.PC.title === 1) {
+				titles.push("Victor over the Daughters");
+			} else {
+				titles.push("Victrix over the Daughters");
+			}
+		}
+	}
+
+	if (V.SF.Toggle && V.SF.FS.Tension > 100) {
+		switch (V.SF.FS.BadOutcome) {
+			case 'MIGRATION':
+				titles.push("The Abandoned");
+				break;
+			case 'Revolt':
+				titles.push("The Betrayed");
+				break;
+			case 'ANNIHILATION':
+				titles.push("The Runner");
+				break;
+			case 'OCCUPATION':
+				titles.push("The Occupied");
+				break;
+			case 'ASSIMILATION':
+				titles.push("The Deceived");
+				break;
+			case 'ISOLATION':
+				titles.push("The Ignored");
+				break;
+		}
+	}
+
+	if (V.mercenaries >= 5) {
+		if (V.mercenariesTitle === "Evocati") {
+			titles.push(`Princeps of the ${V.mercenariesTitle}`);
+		} else if (V.mercenariesTitle === "Knights") {
+			if (V.PC.title === 1) {
+				titles.push(`Lord Commander of the ${V.mercenariesTitle}`);
+			} else {
+				titles.push(`Lady Commander of the ${V.mercenariesTitle}`);
+			}
+		} else if (V.mercenariesTitle === "Immortals") {
+			titles.push(`Tyrant of the ${V.mercenariesTitle}`);
+		} else {
+			titles.push(`Commander of the ${V.mercenariesTitle}`);
+		}
+	} else if (V.mercenaries >= 1) {
+		titles.push("Commander of the Mercenaries");
+	}
+
+	if (V.dispensary === 1) {
+		if (V.PC.title === 1) {
+			titles.push("Pharmacologos");
+		} else {
+			titles.push("Pharmacologes");
+		}
+	}
+
+	if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.9) {
+		titles.push("Grand Champion of the Blood");
+	} else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.6) {
+		titles.push("Champion of the Blood");
+	} else if (V.arcologies[0].FSSupremacist >= V.FSLockinLevel * 0.3) {
+		titles.push("Defender of the Blood");
+	}
+
+	if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.9) {
+		titles.push("Grand Overseer of the Inferior Race");
+	} else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.6) {
+		titles.push("Overseer of the Inferior Race");
+	} else if (V.arcologies[0].FSSubjugationist >= V.FSLockinLevel * 0.3) {
+		titles.push("Subduer of the Inferior Race");
+	}
+
+	if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.9) {
+		titles.push("Buttfucker of All Slaves");
+	} else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Sodomizer of the Traps");
+	} else if (V.arcologies[0].FSGenderRadicalist >= V.FSLockinLevel * 0.3) {
+		if (V.PC.title === 1) {
+			titles.push("Penetrator of the Sissies");
+		} else {
+			titles.push("Penetratrix of the Sissies");
+		}
+	}
+
+	if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Father to the City");
+		} else {
+			titles.push("Mother to the City");
+		}
+	} else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Defender of Women");
+	} else if (V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Restorer of Morals");
+	}
+
+	if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Protector to All Slaves");
+		} else {
+			titles.push("Protectrix to All Slaves");
+		}
+	} else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.6) {
+		if (V.PC.title === 1) {
+			titles.push("Benefactor of Slaves");
+		} else {
+			titles.push("Benefactrix of Slaves");
+		}
+	} else if (V.arcologies[0].FSPaternalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Pursuer of Justice");
+	}
+
+	if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.9) {
+		titles.push("the Savior of the Future");
+	} else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.6) {
+		titles.push("the Holder of the Future");
+	} else if (V.arcologies[0].FSRepopulationFocus >= V.FSLockinLevel * 0.3) {
+		titles.push("the Repopulist");
+	}
+
+	if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.9) {
+		titles.push("Holder of the Rod and the Lash");
+	} else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.6) {
+		titles.push("Subduer of Slaves");
+	} else if (V.arcologies[0].FSDegradationist >= V.FSLockinLevel * 0.3) {
+		titles.push("Pursuer of Justice");
+	}
+
+	if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.9) {
+		titles.push("the Purifier of the Breasts");
+	} else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.6) {
+		titles.push("the Discerning");
+	} else if (V.arcologies[0].FSBodyPurist >= V.FSLockinLevel * 0.3) {
+		titles.push("the Tasteful");
+	}
+
+	if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.9) {
+		titles.push("the Expander of the Breasts");
+	} else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.6) {
+		titles.push("the Expander");
+	} else if (V.arcologies[0].FSAssetExpansionist >= V.FSLockinLevel * 0.3) {
+		if (V.PC.title === 1) {
+			titles.push("the Implantor");
+		} else {
+			titles.push("the Implantrix");
+		}
+	}
+
+	if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("the Master of Stock");
+		} else {
+			titles.push("the Mistress of Stock");
+		}
+	} else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.6) {
+		titles.push("the Rancher");
+	} else if (V.arcologies[0].FSPastoralist >= V.FSLockinLevel * 0.3) {
+		titles.push("the Farmer");
+	}
+
+	if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.9) {
+		titles.push("beloved of Brodin");
+	} else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.6) {
+		if (V.PC.title === 1) {
+			titles.push("he of the godlike Body");
+		} else {
+			titles.push("she of the godlike Body");
+		}
+	} else if (V.arcologies[0].FSPhysicalIdealist >= V.FSLockinLevel * 0.3) {
+		titles.push("advancer of Gains");
+	}
+
+	if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Master of Softness");
+		} else {
+			titles.push("Lady of Softness");
+		}
+	} else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.6) {
+		titles.push("Thickness Enthusiast");
+	} else if (V.arcologies[0].FSHedonisticDecadence >= V.FSLockinLevel * 0.3) {
+		titles.push("the Feeder");
+	}
+
+	if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.9) {
+		titles.push("Grand Preserver of MILFS");
+	} else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.6) {
+		titles.push("Fucker of MILFS");
+	} else if (V.arcologies[0].FSMaturityPreferentialist >= V.FSLockinLevel * 0.3) {
+		if (V.PC.title === 1) {
+			titles.push("he of the notorious MILF preference");
+		} else {
+			titles.push("she of the notorious MILF preference");
+		}
+	}
+
+	if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.9) {
+		titles.push("Keeper of the Magnificent Young Harem");
+	} else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.6) {
+		titles.push("Keeper of Virgins");
+	} else if (V.arcologies[0].FSYouthPreferentialist >= V.FSLockinLevel * 0.3) {
+		titles.push("the Virginbreaker");
+	}
+
+	if (V.arcologies[0].FSChattelReligionistLaw === 1) {
+		titles.push("the Prophet");
+	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.9) {
+		titles.push("Keeper of the Blade and Chalice");
+	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.6) {
+		titles.push("Champion of the Faith");
+	} else if (V.arcologies[0].FSChattelReligionist >= V.FSLockinLevel * 0.3) {
+		titles.push("the Holy");
+	}
+
+	if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.9) {
+		titles.push("First Consul");
+	} else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Aedile");
+	} else if (V.arcologies[0].FSRomanRevivalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Quaestor");
+	}
+
+	if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.9) {
+		titles.push("Tlatcani");
+	} else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Cihuacoatl");
+	} else if (V.arcologies[0].FSAztecRevivalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Tlatoani");
+	}
+
+	if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("the Living God");
+		} else {
+			titles.push("the Living Goddess");
+		}
+	} else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Pharaoh");
+	} else if (V.arcologies[0].FSEgyptianRevivalist >= V.FSLockinLevel * 0.3) {
+		if (V.PC.title === 1) {
+			titles.push("Prince of the Nile");
+		} else {
+			titles.push("Princess of the Nile");
+		}
+	}
+
+	if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Emperor and Descendant of Amaterasu");
+		} else {
+			titles.push("Amaterasu Reborn");
+		}
+	} else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.6) {
+		titles.push("Shogun");
+	} else if (V.arcologies[0].FSEdoRevivalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Daimyo");
+	}
+
+	if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Caliph");
+		} else {
+			titles.push("Handmaiden of Allah");
+		}
+	} else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.6) {
+		if (V.PC.title === 1) {
+			titles.push("Sultan");
+		} else {
+			titles.push("Sultana");
+		}
+	} else if (V.arcologies[0].FSArabianRevivalist >= V.FSLockinLevel * 0.3) {
+		titles.push("Beloved of Allah");
+	}
+
+	if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.9) {
+		if (V.PC.title === 1) {
+			titles.push("Emperor and Holder of the Mandate of Heaven");
+		} else {
+			titles.push("Empress and Holder of the Mandate of Heaven");
+		}
+	} else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.6) {
+		if (V.PC.title === 1) {
+			titles.push("Emperor");
+		} else {
+			titles.push("Empress");
+		}
+	} else if (V.arcologies[0].FSChineseRevivalist >= V.FSLockinLevel * 0.3) {
+		if (V.PC.title === 1) {
+			titles.push("Governor of the Province");
+		} else {
+			titles.push("Governess of the Province");
+		}
+	}
+
+	if (V.brothelSlaves >= 15) {
+		if (V.PC.title === 1) {
+			titles.push("Procurator of the Brothel");
+		} else {
+			titles.push("Procuratrix of the Brothel");
+		}
+	}
+
+	if (V.clubSlaves >= 15) {
+		titles.push("First on the Club");
+	}
+	if (V.dairySlaves >= 15) {
+		titles.push("Keeper of the Cattle");
+	}
+	if (V.cumSlaves >= 15) {
+		if (V.PC.title === 1) {
+			titles.push("Extractor of the Ejaculate");
+		} else {
+			titles.push("Extractrix of the Ejaculate");
+		}
+	}
+	if (V.servantsQuartersSlaves >= 15) {
+		if (V.PC.title === 1) {
+			titles.push("Director of the Servants");
+		} else {
+			titles.push("Directrix of the Servants");
+		}
+	}
+	if (V.schoolroomSlaves >= 10) {
+		if (V.PC.title === 1) {
+			titles.push("Educator of the Slaves");
+		} else {
+			titles.push("Educatrix of the Slaves");
+		}
+	}
+	if (V.spaSlaves >= 10) {
+		titles.push("Order of the Bath");
+	}
+	if (V.arcadeSlaves >= 15) {
+		titles.push("Comptroller of the Arcade");
+	}
+	if (V.nurseryBabies >= 10) {
+		titles.push("Caretaker of the Youth");
+	}
+
+	const schoolsPresent = [];
+	const schoolsPerfected = [];
+	let schoolTitle = "";
+	if (V.TSS.schoolProsperity >= 10) {
+		schoolsPerfected.push("The Slave School");
+	} else if (V.TSS.schoolPresent === 1) {
+		schoolsPresent.push("The Slave School");
+	}
+	if (V.GRI.schoolProsperity >= 10) {
+		schoolsPerfected.push("The Growth Research Institute");
+	} else if (V.GRI.schoolPresent === 1) {
+		schoolsPresent.push("The Growth Research Institute");
+	}
+	if (V.SCP.schoolProsperity >= 10) {
+		schoolsPerfected.push("St. Claver Preparatory");
+	} else if (V.SCP.schoolPresent === 1) {
+		schoolsPresent.push("St. Claver Preparatory");
+	}
+	if (V.LDE.schoolProsperity >= 10) {
+		schoolsPerfected.push("L'École des Enculées");
+	} else if (V.LDE.schoolPresent === 1) {
+		schoolsPresent.push("L'École des Enculées");
+	}
+	if (V.TGA.schoolProsperity >= 10) {
+		schoolsPerfected.push("The Gymnasium-Academy");
+	} else if (V.TGA.schoolPresent === 1) {
+		schoolsPresent.push("The Gymnasium-Academy");
+	}
+	if (V.HA.schoolProsperity >= 10) {
+		schoolsPerfected.push("The Hippolyta Academy");
+	} else if (V.HA.schoolPresent === 1) {
+		schoolsPresent.push("The Hippolyta Academy");
+	}
+	if (V.TCR.schoolProsperity >= 10) {
+		schoolsPerfected.push("The Cattle Ranch");
+	} else if (V.TCR.schoolPresent === 1) {
+		schoolsPresent.push("The Cattle Ranch");
+	}
+	if (V.NUL.schoolProsperity >= 10) {
+		schoolsPerfected.push("Nueva Universidad de Libertad");
+	} else if (V.NUL.schoolPresent === 1) {
+		schoolsPresent.push("Nueva Universidad de Libertad");
+	}
+	if (schoolsPerfected.length > 0) {
+		if (V.PC.title === 1) {
+			schoolTitle = "Benefactor of ";
+		} else {
+			schoolTitle = "Benefactrix of ";
+		}
+		if (schoolsPerfected.length === 1) {
+			schoolTitle += schoolsPerfected[0];
+		} else if (schoolsPerfected.length === 2) {
+			schoolTitle += `${schoolsPerfected[0]} and ${schoolsPerfected[1]}`;
+		} else {
+			schoolsPerfected[schoolsPerfected.length - 1] = `and ${schoolsPerfected[schoolsPerfected.length - 1]}`;
+			schoolTitle += schoolsPerfected.join(", ");
+		}
+		titles.push(schoolTitle);
+	}
+
+	if (schoolsPresent.length > 0) {
+		schoolTitle = "Supporter of ";
+		if (schoolsPresent.length === 1) {
+			schoolTitle += schoolsPresent[0];
+		} else if (schoolsPresent.length === 2) {
+			schoolTitle += `${schoolsPresent[0]} and ${schoolsPresent[1]}`;
+		} else {
+			schoolsPresent[schoolsPresent.length - 1] = `and ${schoolsPresent[schoolsPresent.length - 1]}`;
+			schoolTitle += schoolsPresent.join(", ");
+		}
+		titles.push(schoolTitle);
+	}
+
+	if (V.TFS.schoolProsperity >= 10) {
+		titles.push("Honorary Sibling of the Futanari Sisters");
+	} else if (V.TFS.schoolPresent === 1) {
+		if (V.PC.title === 1) {
+			titles.push("Protector of the Futanari Sisters");
+		} else {
+			titles.push("Protectrix of the Futanari Sisters");
+		}
+	}
+
+	if (V.slaves.length > 50) {
+		if (V.PC.title === 1) {
+			titles.push("Master of Slaves");
+		} else {
+			titles.push("Mistress of Slaves");
+		}
+	} else if (V.slaves.length > 40) {
+		titles.push("Holder of Slaves");
+	} else if (V.slaves.length > 30) {
+		titles.push("Keeper of Slaves");
+	} else if (V.slaves.length > 20) {
+		titles.push("Manager of Slaves");
+	} else if (V.slaves.length > 10) {
+		titles.push("owner of slaves");
+	}
+
+	if (V.corpValue > 500000) {
+		titles.push("Corporate Titan");
+	} else if (V.corpValue > 250000) {
+		titles.push("corporate innovator");
+	} else if (V.corpValue > 100000) {
+		titles.push("corporate founder");
+	} else if (V.corpValue > 0) {
+		if (V.PC.title === 1) {
+			titles.push("noted corporate businessman");
+		} else {
+			titles.push("noted corporate businesswoman");
+		}
+	}
+
+	if (V.rep > 18000) {
+		if (V.PC.title === 1) {
+			titles.push("unquestioned Master of the Arcology");
+		} else {
+			titles.push("unquestioned Mistress of the Arcology");
+		}
+	} else if (V.rep > 15000) {
+		if (V.PC.title === 1) {
+			titles.push("Lord of the Arcology");
+		} else {
+			titles.push("Lady of the Arcology");
+		}
+	} else if (V.rep > 12000) {
+		titles.push("Ruler of the Arcology");
+	} else if (V.rep > 9000) {
+		titles.push("chief officer of the arcology");
+	} else {
+		titles.push("owner of the arcology");
+	}
+
+	if (titles.length === 1) {
+		V.PCTitle += titles[0];
+	} else if (titles.length === 2) {
+		V.PCTitle += `${titles[0]} and ${titles[1]}`;
+	} else {
+		titles[titles.length - 1] = `and ${titles[titles.length - 1]}`;
+		V.PCTitle += titles.join(", ");
+	}
+};
\ No newline at end of file
diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js
index c19f52da1ba8c255230e732f14b50523e8975cef..4eb6899110336f81dc5c3c2aad1f5bae183ef1ff 100644
--- a/src/js/rulesAutosurgery.js
+++ b/src/js/rulesAutosurgery.js
@@ -393,19 +393,19 @@ window.rulesAutosurgery = (function() {
 		if (slave.health > 20 && surgeries.length < 3) {
 			if (slave.waist >= -10 && thisSurgery.cosmetic > 0) {
 				commitProcedure("a narrower waist", s => { s.waist -= 20; });
-			} else if (slave.hips < 1 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
+			} else if (thisSurgery.hips !== null && slave.hips < 1 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
 				commitProcedure("wider hips", slave => {
 					slave.hips++;
 					slave.hipsImplant++;
 				});
 			} else if (slave.waist >= -95 && V.seeExtreme === 1 && thisSurgery.cosmetic === 2) {
 				commitProcedure("a narrower waist", s => { s.waist = Math.clamp(s.waist - 20, -100, 100); });
-			} else if (slave.hips < 2 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
+			} else if (thisSurgery.hips !== null && slave.hips < 2 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
 				commitProcedure("wider hips", slave => {
 					slave.hips++; // FIXME: repeats branch above
 					slave.hipsImplant++;
 				});
-			} else if (slave.hips < 3 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
+			} else if (thisSurgery.hips !== null && slave.hips < 3 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
 				commitProcedure("wider hips", slave => {
 					slave.hips++; // FIXME: repeats branch above
 					slave.hipsImplant++;
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 56e765743f9c09382adfd28888604f40d1ee633b..83264c48898839178a26bc4fbb1c04b5388bb628 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -1460,7 +1460,7 @@ window.FResult = (function() {
 		}
 
 		if (slave.pregWeek < 0) {
-			result -= Math.trunc(result * slave.pregWeek / 10);
+			result += Math.trunc(result * slave.pregWeek / 10);
 		} // reduced the most just after birth
 
 		calcAmputation(slave);
diff --git a/src/js/slaveStatsChecker.js b/src/js/slaveStatsChecker.js
index 01f66271f1c9211839785591596e2f30ac8edc9e..41571d9efd7b9f261273d5863bed0848fdd81e60 100644
--- a/src/js/slaveStatsChecker.js
+++ b/src/js/slaveStatsChecker.js
@@ -260,6 +260,89 @@ window.heightPass = function(slave) {
 	return measuresUp;
 }
 
+/**
+ * Returns slave bimbo body degree (FSIntellectualDependencyLawBeauty).
+ * @param {App.Entity.SlaveState} slave
+ * @returns {boolean}
+ */
+window.bimboScore = function(slave) {
+	let degree = 0;
+	let mods = SlaveStatsChecker.modScore(slave);
+
+	if (slave.lips > 70) {
+		degree++;
+	}
+	if ((slave.lipsImplant / slave.lips) >= .60) {
+		degree++;
+	}
+	if (slave.boobs >= 2000) {
+		degree++;
+		if (slave.boobs >= 10000) {
+			degree++;
+		}
+	}
+	if ((slave.boobsImplant / slave.boobs) >= .60) {
+		degree++;
+	}
+	if (slave.butt > 4) {
+		degree++;
+		if (slave.butt > 10) {
+			degree++;
+		}
+	}
+	if ((slave.buttImplant / slave.butt) >= .60) {
+		degree++;
+	}
+	if (slave.belly >= 1500) {
+		degree++;
+		if (slave.belly >= 20000) {
+			degree++;
+		}
+	}
+	if (slave.waist <= -60) {
+		degree++;
+	}
+	if (slave.hips > 1) {
+		degree++;
+		if (slave.hips > 2) {
+			degree++;
+		}
+	}
+	if (slave.dick > 3 && canPenetrate(slave)) {
+		degree++;
+		if (slave.balls > 5) {
+			degree++;
+		}
+	}
+	if (slave.hLength >= 100) {
+		degree++;
+	}
+	if (slave.makeup > 1 && slave.nails > 1) {
+		degree++;
+	}
+	if (mods >= 10) {
+		degree++;
+	}
+	if (V.piercingScore > 5) {
+		degree++;
+	}
+	if (V.tatScore > 3) {
+		degree++;
+	}
+	if (setup.highHeels.includes(slave.shoes)) {
+		degree++;
+	}
+	if (slave.skin === "sun tanned" || slave.skin === "spray tanned") {
+		degree++;
+	}
+	if (setup.sluttyClothes.includes(slave.clothes)) {
+		degree++;
+	}
+
+	// degree can go far higher than the max to allow various FS combinations to take advantage.
+	return Math.clamp(degree, 0, 6);
+}
+
 /**
  * Returns if slave is considered stacked (big T&A) or not.
  * @param {App.Entity.SlaveState} slave
diff --git a/src/uncategorized/barracks.tw b/src/uncategorized/barracks.tw
index 10218658182109c015926690e186f0bbbd4b8ba2..bab37e15ab452be7ca3ecf9f70669e18095c2607 100644
--- a/src/uncategorized/barracks.tw
+++ b/src/uncategorized/barracks.tw
@@ -67,6 +67,14 @@ As you enter the main bay of the armory, lined with modern arms and armor and a
 		Their sleek prototype armor is equipped with advanced restraining weapons.
 	<<case "Rangers">>
 		Their gear has a heavy Western influence; everyone carries heavy revolvers everywhere, and the armor sports rope lariats for lassoing 'cattle.'
+	<<case "Shepards">>
+		Their gear has a rather gaudy appearance; it makes it easier to attract wayward bimbos that way when they wander off and get lost.
+	<<case "Geniuses">>
+		Their prototype armor is extremely complex to control, but those who can reap the benefits.
+	<<case "Caretakers">>
+		Their towering prototype armor lets them stand out in a crowd and guide the way for those lost underfoot.
+	<<case "Titans">>
+		Their prototype armor towers over the average civilian and compacts for easy storage despite its size.
 	<</switch>>
 <</if>>
 There are doors to magazines, armories, and training areas to all sides, and muffled gunfire can be heard from the latter.
diff --git a/src/uncategorized/brothel.tw b/src/uncategorized/brothel.tw
index 5dd2b021612a63395837a60ab941b651785ad08c..83c2ed294f1460c45ea1fa11d8d394429cd71958 100644
--- a/src/uncategorized/brothel.tw
+++ b/src/uncategorized/brothel.tw
@@ -55,6 +55,14 @@ $brothelNameCaps
 	is decorated to look like an old world bordello. The rich décor includes erotic photography and pornographic statuary, depicting slim, girlish figures playing, dancing, and loving.
 <<case "Hedonistic">>
 	is comfortable and full of soft couches and chairs for its' overweight whores to lounge upon between clients <<if $arcologies[0].FSHedonisticDecadenceResearch == 1>>and enjoy a plate of snacks<<else>>and enjoy a big cup of slave food<</if>>. The smells of fresh baked goods are pumped into the facility to mask the smell of sweat. It's not unusual for a client to fuck a whore right on her chosen couch, since the effort of moving is often too much.
+<<case "Intellectual Dependency">>
+	is decorated to look like a club. The sexually charged atmosphere has the whores horny and making out with each other. Customers are expeted to come in, grab a bimbo to their tastes, and pull them off to have a good time. 
+<<case "Slave Professionalism">>
+	is decorated to look like a high-class bordello. Courtesans are expected to greet and entice customers to join them for a night they'll never forget.
+<<case "Petite Admiration">>
+	is decorated to look like an old world whorehouse. The whores have personal platforms to stand on for inspection from their taller customers.
+<<case "Statuesque Glorification">>
+	is decorated to look like an old world bordello. The rich décor specializes in pornographic statuary, depicting towering human forms in the act of love.
 <<default>>
 	is utilitarian. There's a businesslike foyer with an area for the merchandise to stand. Customers make their selection (or selections) and then lead the whores back into little rooms.
 <</switch>>
diff --git a/src/uncategorized/brothelAdvertisement.tw b/src/uncategorized/brothelAdvertisement.tw
index 60847bbaa291fc518e2e14ec8d5a2a11857b57c4..c19d3fd411f9a6fc3b8642d971fecc7e34d764b2 100644
--- a/src/uncategorized/brothelAdvertisement.tw
+++ b/src/uncategorized/brothelAdvertisement.tw
@@ -49,6 +49,14 @@
 	$brothelNameCaps is decorated to look like a dairy. Though it isn't one, there is an intense sexual focus on boobs and lactation, and all the whores have their sizes proudly posted.
 <<case "Hedonistic">>
 	$brothelNameCaps is comfortable and full of soft couches and chairs for its overweight whores to lounge upon between clients <<if $arcologies[0].FSHedonisticDecadenceResearch == 1>>and enjoy a plate of snacks<<else>>and enjoy a big cup of slave food<</if>>. The smells of fresh baked goods are pumped into the facility to mask the smell of sweat. It's not unusual for a client to fuck a whore right on her chosen couch, since the effort of moving is often too much.
+<<case "Intellectual Dependency">>
+	$brothelNameCaps is decorated to look like a club. The sexually charged atmosphere has the whores horny and making out with each other. Customers are expeted to come in, grab a bimbo to their tastes, and pull them off to have a good time. 
+<<case "Slave Professionalism">>
+	$brothelNameCaps is decorated to look like a high-class bordello. Courtesans are expected to greet and entice customers to join them for a night they'll never forget.
+<<case "Petite Admiration">>
+	$brothelNameCaps is decorated to look like an old world whorehouse. The whores have personal platforms to stand on for inspection from their taller customers.
+<<case "Statuesque Glorification">>
+	$brothelNameCaps is decorated to look like an old world bordello. The rich décor specializes in pornographic statuary, depicting towering human forms in the act of love.
 <</switch>>
 
 <<if $brothelAdsSpending > 0>>
diff --git a/src/uncategorized/club.tw b/src/uncategorized/club.tw
index 7bb411071d3ce875a43af8eae426da14ca056350..a9b8a5ef944b400721b246ae92a640cc6d1da55e 100644
--- a/src/uncategorized/club.tw
+++ b/src/uncategorized/club.tw
@@ -55,6 +55,14 @@ $clubNameCaps
 	is distinctly gaudy, with lots of sugary drinks on offer. The music and décor are of a decidedly bubblegum quality.
 <<case "Hedonistic">>
 	has a gaudy appearance. The dance floor is extra large to accommodate its extra wide dancers, though bodies grinding against each other is an inevitability. Plenty of roomy, comfortable booths encircle the room for an exhausted citizen to relax with his plush dance partner, and a wide selection of greasy food accompanies the drinks. <<if $arcologies[0].FSHedonisticDecadenceResearch == 1>>Platters of food are complementary for feeding slaves<<else>>Feeders are available in the booths to feed tired slaves<</if>> while they get fondled.
+<<case "Intellectual Dependency">>
+	is distinctly gaudy and easy for slaves to move around in. The dancing is as energetic and sexual, and the drinks sugary and sweet.
+<<case "Slave Professionalism">>
+	is decorated like an upper-class gentleman's club. It is where a true courtesan works their craft.
+<<case "Petite Admiration">>
+	has a gaudy appearance. The dance floor is surrounded by raised platforms so even the shortest slave can be seen by the crowd.
+<<case "Statuesque Glorification">>
+	has a tiered appearance. The booths and bar are positioned overlooking the dance floor so patrons may loom over the dancing slaves even when seated.
 <<default>>
 	is set up in an uncomplicated way. There's a bar for drinks, a dance floor for slave girls, and private rooms for slave sex.
 <</switch>>
@@ -211,6 +219,14 @@ $clubNameCaps
 		The faint but unmistakable sound of a shrill climax can be heard from one of the private rooms.
 	<<case "Hedonistic">>
 		The sound of fat bodies fucking while feeding each other can be heard from one of the private rooms.
+	<<case "Intellectual Dependency">>
+		The sounds of an overstimulated bimbo can be heard from one of the private rooms.
+	<<case "Slave Professionalism">>
+		The sounds of an overstimulated patron can be heard from one of the private rooms.
+	<<case "Petite Admiration">>
+		The faint sound of a slave giving head can be heard from one of the private rooms.
+	<<case "Statuesque Glorification">>
+		The faint banging of a patron banging a slave against the wall can be heard echoing from one of the private rooms.
 	<<default>>
 		The faint but unmistakable sound of a shrill climax can be heard from one of the private rooms.
 	<</switch>>
diff --git a/src/uncategorized/clubAdvertisement.tw b/src/uncategorized/clubAdvertisement.tw
index b8bd81a0ee0d88d79f5cf64426737505f63857c8..bbc9e2905e934d70120c7a7aa59d6c25cc598988 100644
--- a/src/uncategorized/clubAdvertisement.tw
+++ b/src/uncategorized/clubAdvertisement.tw
@@ -49,6 +49,14 @@
 	$clubNameCaps is deafeningly loud. There's a bright light show running, offering staccato glimpses of the scene out on the dance floor.
 <<case "Hedonistic">>
 	$clubNameCaps has a gaudy appearance. The dance floor is extra large to accommodate its extra wide dancers, though bodies grinding against each other is an inevitability. Plenty of roomy, comfortable booths encircle the room for an exhausted citizen to relax with his plush dance partner, and a wide selection of greasy food accompanies the drinks. <<if $arcologies[0].FSHedonisticDecadenceResearch == 1>>Platters of food are complementary for feeding slaves<<else>>Feeders are available in the booths to feed tired slaves<</if>> while they get fondled.
+<<case "Intellectual Dependency">>
+	$clubNameCaps is distinctly gaudy and easy for slaves to move around in. The dancing is as energetic and sexual, and the drinks sugary and sweet.
+<<case "Slave Professionalism">>
+	$clubNameCaps is decorated like an upper-class gentleman's club. It is where a true courtesan works their craft.
+<<case "Petite Admiration">>
+	$clubNameCaps has a gaudy appearance. The dance floor is surrounded by raised platforms so even the shortest slave can be seen by the crowd.
+<<case "Statuesque Glorification">>
+	$clubNameCaps has a tiered appearance. The booths and bar are positioned overlooking the dance floor so patrons may loom over the dancing slaves even when seated.
 <</switch>>
 
 <<if $clubAdsSpending > 0>>
diff --git a/src/uncategorized/dairy.tw b/src/uncategorized/dairy.tw
index fbaefa33f067a928d36fc38c01fdc5dda91fd696..243dbbd5ff57fe490496cd55068c5fb88c3683d7 100644
--- a/src/uncategorized/dairy.tw
+++ b/src/uncategorized/dairy.tw
@@ -251,8 +251,11 @@
 	<<case "Intellectual Dependency">>
 		is simple and fun. Getting situated for milking is easy enough for even the dumbest cow to figure out and there are all sorts of activities to keep the cows amused between milkings.
 	<<case "Slave Professionalism">>
+		is functional and clean. A wide selection of informative documentaries and books are available for cows to keep their minds sharp while the milker does its business. 
 	<<case "Petite Admiration">>
+		is comfortable and well-kept. While designed for miniature cows, accommodations for large udders allow even the lankiest of cattle to make use of the machinery.
 	<<case "Statuesque Glorification">>
+		is comfortable and well-kept. While designed for towering cows, accommodations for large udders allow even the shortest of cattle to make use of the machinery; even if they need help to reach it.
 	<<default>>
 		is comfortable and well-kept. It features nice rest areas for cows to lounge in after a milking, and exercise equipment to keep them healthy.
 	<</switch>>
diff --git a/src/uncategorized/pCitizensAndCivilians.tw b/src/uncategorized/pCitizensAndCivilians.tw
index 629dec1189b08cc94bc482fc7c66544d2bd6a934..2db8ae499a1015f59d641cd49485a7a2f68e35dc 100644
--- a/src/uncategorized/pCitizensAndCivilians.tw
+++ b/src/uncategorized/pCitizensAndCivilians.tw
@@ -282,6 +282,28 @@
 	<</replace>>
 <</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
 <</if>>
+<<if $arcologies[0].FSIntellectualDependency >= 10>>
+<br><<link "They shall be the Shepards">>
+	<<replace "#result">>
+	You ask for a meeting with your mercenaries' captain and lay out a proposal for a new contract between you over $PC.refreshment. As he reviews the terms, he looks skeptical, then surprised, then interested, and finally, he breaks out into laughter. "<<= properTitle()>>," he says, "you have no idea how needed this was. Just the other day I saw a half dozen bimbos waiting for a broken elevator. When I walked past an hour later, they were still waiting." He rises and gives you a short bow. "Shepard of the slow reporting for duty, <<= properTitle()>>." The mercenaries — no, the Shepards — are well looked after. They are each assigned a nice apartment, a very horny servant to stake their lust, and a suit of prototype armor equipped with the latest of weapons and a bevy of toys to lure wayward slaves with. Word of the innovation runs through the Free Cities @@.green;like wildfire.@@
+	<<run repX(5000, "event")>>
+	<<run cashX(forceNeg(_cost), "mercenaries")>>
+	<<set $mercenaries = 5>>
+	<<set $mercenariesTitle = "Shepards">>
+	<</replace>>
+<</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
+<</if>>
+<<if $arcologies[0].FSSlaveProfessionalism >= 10>>
+<br><<link "They shall be the Geniuses">>
+	<<replace "#result">>
+	You ask for a meeting with your mercenaries' captain and lay out a proposal for a new contract between you over $PC.refreshment. As he reviews the terms, he looks skeptical, then surprised, then interested, and finally, he breaks out into laughter. "<<= properTitle()>>," he says, "you have no idea how fun this is going to be." He rises and gives you a short bow. "Chief brain reporting for duty, <<= properTitle()>>." The mercenaries — no, the Geniuses — are well looked after. They are each assigned a nice apartment, a skilled courtesan, and a suit of prototype armor equipped with cutting edge weaponry and combat systems. Word of the innovation runs through the Free Cities @@.green;like wildfire.@@
+	<<run repX(5000, "event")>>
+	<<run cashX(forceNeg(_cost), "mercenaries")>>
+	<<set $mercenaries = 5>>
+	<<set $mercenariesTitle = "Geniuses">>
+	<</replace>>
+<</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
+<</if>>
 <<if $arcologies[0].FSBodyPurist >= 10>>
 <br><<link "They shall be the Purifiers">>
 	<<replace "#result">>
@@ -304,6 +326,28 @@
 	<</replace>>
 <</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
 <</if>>
+<<if $arcologies[0].FSPetiteAdmiration >= 10>>
+<br><<link "They shall be the Caretakers">>
+	<<replace "#result">>
+	You ask for a meeting with your mercenaries' captain and lay out a proposal for a new contract between you over $PC.refreshment. As he reviews the terms, he looks skeptical, then surprised, then interested, and finally, he breaks out into laughter. "<<= properTitle()>>," he says, "you have no idea how fun this is going to be." He rises and gives you a short bow. "I'm ready to make a path for our little toys, <<= properTitle()>>." The mercenaries — no, the Caretakers — are well looked after. They are each assigned a nice apartment, a trio of tiny servants, and a suit of prototype armor capable of carrying multiple petite slaves in time of need. Word of the innovation runs through the Free Cities @@.green;like wildfire.@@
+	<<run repX(5000, "event")>>
+	<<run cashX(forceNeg(_cost), "mercenaries")>>
+	<<set $mercenaries = 5>>
+	<<set $mercenariesTitle = "Caretakers">>
+	<</replace>>
+<</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
+<</if>>
+<<if $arcologies[0].FSStatuesqueGlorification >= 10>>
+<br><<link "They shall be the Titans">>
+	<<replace "#result">>
+	You ask for a meeting with your mercenaries' captain and lay out a proposal for a new contract between you over $PC.refreshment. As he reviews the terms, he looks skeptical, then surprised, then interested, and finally, he breaks out into laughter. "<<= properTitle()>>," he says, "you have no idea how fun this is going to be." He rises and gives you a short bow. "Tallest Titan reporting for duty, <<= properTitle()>>." The mercenaries — no, the Titans — are well looked after. They are each assigned a nice apartment, a freshly enslaved servant, and a towering suit of prototype armor to make their presence known. Word of the innovation runs through the Free Cities @@.green;like wildfire.@@
+	<<run repX(5000, "event")>>
+	<<run cashX(forceNeg(_cost), "mercenaries")>>
+	<<set $mercenaries = 5>>
+	<<set $mercenariesTitle = "Titans">>
+	<</replace>>
+<</link>> <<if ($PC.warfare >= 100) || ($PC.career == "arcology owner")>>//This will cost <<print cashFormat(10000)>> and some upkeep, @@.springgreen;reduced by your mercenary contacts@@//<<else>>//This will cost <<print cashFormat(20000)>> and incur significant upkeep costs//<</if>>
+<</if>>
 <<if $arcologies[0].FSPastoralist >= 10>>
 <br><<link "They shall be the Rangers">>
 	<<replace "#result">>
diff --git a/src/uncategorized/pPeacekeepersInfluence.tw b/src/uncategorized/pPeacekeepersInfluence.tw
index 6828f92f5339bee3766227d5d9d3aa53b01cb809..7fdd2fa10d8ae159ca467da44e417be0f5d4b8dc 100644
--- a/src/uncategorized/pPeacekeepersInfluence.tw
+++ b/src/uncategorized/pPeacekeepersInfluence.tw
@@ -59,6 +59,9 @@ As you review intelligence from the area at your desk,
 		<<case "transformation fetishist">>"<<print $PC.name>>, how do you think these implants would look in me?"
 		<<case "pastoralist">>"Oh <<print $PC.name>>, I'm so backed up. Would you give me a hand?"
 		<<case "slimness enthusiast">>"<<print $PC.name>>, do <<if $arcologies[0].FSSlimnessEnthusiastLaw == 1>>these look bigger to you?"<<else>>you think they're getting bigger?"<</if>>
+		<<case "slave professionalism">>"Hey <<print $PC.name>>, what's most useful when it's long and hard? An education, of course!"
+		<<case "petite admiration">>"<<print $PC.name>>, I think I grew a little."
+		<<case "statuesque glorification">>"<<print $PC.name>>, are these heels long enough?"
 		<<default>>_HeA spasms with a powerful orgasm and moans lewdly and loudly.
 		<</switch>>
 		_HeA knows just how to get your attention.
diff --git a/src/uncategorized/peConcubineInterview.tw b/src/uncategorized/peConcubineInterview.tw
index 7c5ccfb33bc12aa6c01087b10a608dce95b476f7..41119c48993d352eb348b2bed54c813e2b82f513 100644
--- a/src/uncategorized/peConcubineInterview.tw
+++ b/src/uncategorized/peConcubineInterview.tw
@@ -355,6 +355,16 @@ You receive an official communication from a popular talk show e-hosted in one o
 		<<elseif $arcologies[0].FSGenderFundamentalist > 0>>
 			so much pu<<ss>>y it'<<s>> unbelievable,
 		<</if>>
+		<<if $arcologies[0].FSIntellectualDependency > 0>>
+			<<s>>lave<<s>> eager to get in your pant<<s>>,
+		<<elseif $arcologies[0].FSSlaveProfessionalism > 0>>
+			<<s>>lave<<s>> you can have a conver<<s>>ation with,
+		<</if>>
+		<<if $arcologies[0].FSPetiteAdmiration > 0>>
+			where even the <<sh>>orte<<s>>t can <<s>>tand tall,
+		<<elseif $arcologies[0].FSStatuesqueGlorification > 0>>
+			plenty of mouth<<s>> at crotch height,
+		<</if>>
 		<<if $arcologies[0].FSChattelReligionist > 0>>
 			a fulfilling <<s>>e<<x>>ual and <<s>>piritual life,
 		<</if>>