diff --git a/devTools/types/FC/desc.d.ts b/devTools/types/FC/desc.d.ts
index c98a1e3ec8e7d62fd9faf64d2ba3350f6908fb3a..f6c660b3e9d1e8661ac847cdc492f2d2f60f48e5 100644
--- a/devTools/types/FC/desc.d.ts
+++ b/devTools/types/FC/desc.d.ts
@@ -7,7 +7,7 @@ declare namespace FC {
 			 */
 			market?: Zeroable<string>;
 			eventDescription?: boolean;
-			prisonCrime?: boolean;
+			prisonCrime?: string;
 			noArt?: boolean;
 		}
 	}
diff --git a/devTools/types/FC/human.d.ts b/devTools/types/FC/human.d.ts
index 775c8bc1b85bb0257881b95c2ecd378373c604f0..24233dde30054392ca694b0eb009a14b21655159 100644
--- a/devTools/types/FC/human.d.ts
+++ b/devTools/types/FC/human.d.ts
@@ -32,8 +32,6 @@ declare global {
 			}
 		}
 
-
-
 		type Assignment =
 			// Penthouse Assignments
 			'rest' | 'please you' | 'take classes' | 'be a servant' | 'whore' | 'serve the public' | 'be a subordinate slave' |
@@ -204,12 +202,12 @@ declare global {
 			"cum production" | "cleansing" | "fertility";
 		type Drug = "no drugs" |
 			"breast injections" | "butt injections" | "lip injections" | "nipple enhancers" | "penis enhancement" | "testicle enhancement" |
-			"intensive breast injections" | "intensive butt injections" | "intensive penis enhancement"| "intensive testicle enhancement"|
-			"fertility drugs" |  "super fertility drugs" |
-			 "psychosuppressants" | "psychostimulants" | "steroids" |
+			"intensive breast injections" | "intensive butt injections" | "intensive penis enhancement" | "intensive testicle enhancement" |
+			"fertility drugs" | "super fertility drugs" |
+			"psychosuppressants" | "psychostimulants" | "steroids" |
 			"hyper breast injections" | "hyper butt injections" | "hyper penis enhancement" | "hyper testicle enhancement" |
 			"female hormone injections" | "male hormone injections" | "priapism agents" |
-			"anti-aging cream" | "appetite suppressors" |  "hormone enhancers" | "hormone blockers" |
+			"anti-aging cream" | "appetite suppressors" | "hormone enhancers" | "hormone blockers" |
 			"penis atrophiers" | "testicle atrophiers" | "clitoris atrophiers" | "labia atrophiers" | "nipple atrophiers" | "lip atrophiers" |
 			"breast redistributors" | "butt redistributors" | "sag-B-gone" | "growth stimulants";
 
@@ -221,7 +219,19 @@ declare global {
 		type EyebrowThickness = "pencil-thin" | "thin" | "threaded" | "natural" | "tapered" | "thick" | "bushy";
 		type EyeWear = WithNone<"glasses" | "blurring glasses" | "corrective glasses" | "blurring contacts" | "corrective contacts">;
 		type FaceShape = "masculine" | "androgynous" | "normal" | "cute" | "sensual" | "exotic";
-		type GenderGenes = "XX" | "XY" | "YY";
+		type GenderGenes =
+			/** female */
+			"XX"
+			/** Triple X syndrome female */
+			| "XXX"
+			/** male */
+			| "XY"
+			/** Klinefelter syndrome male */
+			| "XXY"
+			/** XYY syndrome male */
+			| "XYY"
+			| "X0"
+			| "X";
 		type GestationDrug = "slow gestation" | "speed up" | "labor suppressors";
 		type HornType = WithNone<"curved succubus horns" | "backswept horns" | "cow horns" | "one long oni horn" |
 			"two long oni horns" | "small horns">;
@@ -236,6 +246,7 @@ declare global {
 		 * 0: no; 1: yes; 2: heavy
 		 */
 		type PiercingType = 0 | 1 | 2;
+		type ClitoralPiercingType = PiercingType | 3;
 		type Race = "amerindian" | "asian" | "black" | "indo-aryan" | "latina" | "malay" | "middle eastern" | "mixed race" |
 			"pacific islander" | "semitic" | "southern european" | "white";
 		type SizingImplantType = WithNone<"normal" | "string" | "fillable" | "advanced fillable" | "hyper fillable">;
@@ -245,6 +256,46 @@ declare global {
 			"fangs" | "fang" | "baby" | "mixed";
 		type MinorInjury = Zeroable<"black eye" | "bad bruise" | "split lip" | "sore ass">;
 
+		type RelationShipKind =
+			/** married to you */
+			-3
+			/** emotionally bound to you */
+			| -2
+			/** emotional slut */
+			| -1
+			| 0
+			/** friends with relationshipTarget */
+			| 1
+			/** best friends with relationshipTarget */
+			| 2
+			/** friends with benefits with relationshipTarget */
+			| 3
+			/** lover with relationshipTarget */
+			| 4
+			/** relationshipTarget 's slave wife */
+			| 5;
+
+		type RivalryType =
+			/** None */
+			0
+			/** dislikes rivalryTarget */
+			| 1
+			/** rival of rivalryTarget */
+			| 2
+			/** bitterly hates rivalryTarget */
+			| 3;
+
+		type IndentureType =
+			/** complete protection */
+			2
+			/** some protection */
+			| 1
+			/** no protection */
+			| 0;
+
+		type HeightImplant = -1 | 0 | 1;
+		type Hearing = -2 | -1 | 0;
+
 		type AnimalKind = "human" | "dog" | "pig" | "horse" | "cow";
 		type SpermType = AnimalKind | "sterile";
 
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index 6f43fef0bab3d0307e622d98fcfe9b0594be0e3b..92d5ab672603fd111d6a221872b99c38d7bcc9ef 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -263,6 +263,7 @@ App.Data.resetOnNGPlus = {
 			births: 0,
 			kills: 0,
 
+			/** @type {FC.Zeroable<string>} */
 			fate: 0,
 			menial2Citizen: 0,
 			customAgePolicy: 0,
@@ -991,6 +992,7 @@ App.Data.resetOnNGPlus = {
 	rivalOwnerEnslaved: 0,
 	rivalryPower: 0,
 	rivalryDuration: 0,
+	/** @type {FC.Zeroable<FC.Race>} */
 	rivalRace: 0,
 	rivalGender: 0,
 	nationHate: 0,
diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index 3bdb884d45e9a69b372b71611e92c1586dda49aa..b6f86d984e27449c43908c021d454dfdfdd275c9 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -1920,7 +1920,7 @@ App.Data.misc = {
 	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"],
 	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"],
 	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"],
-	ArcologyNamesNeoImperialist: ["Atteln", "Aermacht", "Aubevoie", "Bellechassange", "Black Rock", "Black Hollow", "Easthaven", "Eastwatch", "Etau", "Elsing", "Essenge", "Ettenmont", "Fernsworth", "Hersengeux", "Ironforge", "Ironhaven", "Irontown", "Karlsberg", "Klattenhof", "Lhanbryde", "Lindybeige", "Marrensville", "Maushof", "Morlaincourt", "Munschwitz", "Neo-Berlin", "Neo-London", "Neo-Paris", "Neo-Madrid", "Neo-York", "Northscot", "Oberlandscheid", "Obersberg", "Redwater", "Sand and Stone", "Sommelie", "Strathsmore", "Tottenham", "The Rock", "The Golden Spire", "Villeurmont", "Vivonne", "Volkersch", "Volkhof", "Volksgard", "Wallenberg", "Wallenhof", "Wycombe", "Zillendorf", "Zerf"],
+	ArcologyNamesNeoImperialist: ["Atteln", "Aermacht", "Aubevoie", "Bellechassange", "Black Rock", "Black Hollow", "Bourbon", "Colme", "Daybrook", "Drancy", "Easthaven", "Eastwatch", "Etau", "Elsing", "Essenge", "Ettenmont", "Erceti", "Fernsworth", "Hersengeux", "Ironforge", "Ironhaven", "Irontown", "Karlsberg", "Klattenhof", "Lhanbryde", "Lindham", "Marrensville", "Maushof", "Morlaincourt", "Munschwitz", "Neo-Berlin", "Neo-London", "Neo-Paris", "Neo-Madrid", "Neo-York", "Northscot", "Oberlandscheid", "Obersberg", "Poisseau", "Redwater", "Sali", "Sand and Stone", "Shominster", "Sommelie", "Strathsmore", "Sunstown", "Sonnehof", "Sonneshaven", "Tottenham", "The Rock", "The Golden Spire", "Villeurmont", "Vivonne", "Volkersch", "Volkhof", "Volksgard", "Wallenberg", "Wallenhof", "Wilderf", "Wycombe", "Zillendorf", "Zerf"],
 
 	/* pregmod FS */
 	ArcologyNamesEugenics: ["Ascension", "Elitism", "Eugenica", "Eugeniculate", "Galton City", "Germinal Choice", "Good Stock", "Improvement", "Lebensborn", "Natural Selection", "Oneida Community", "Perfection", "Powered Elite", "Private Gene Pool", "Quality", "Rebirth", "Reprogenetics", "Second Chance", "Selection Rule", "Stirpiculture"],
diff --git a/js/003-data/miscDataNames.js b/js/003-data/miscDataNames.js
index 17141f7cd0716c68ac55377e79ba629f2c799ca5..19be4af0f2e0b4ba5e9290d198b5f052c64a14c6 100644
--- a/js/003-data/miscDataNames.js
+++ b/js/003-data/miscDataNames.js
@@ -478,7 +478,7 @@ App.Data.misc.liechtensteinerSlaveSurnames = ["Ackermann", "Albers", "Allgäuer"
 App.Data.misc.lithuanianSlaveNames = ["Agne", "Agnė", "Agnija", "Agota", "Aida", "Aigusta", "Airinė", "Aiste", "Albina", "Aldona", "Aleksandra", "Alfreda", "Algė", "Algimantė", "Algirdė", "Algvilė", "Alina", "Alma", "Alvyra", "Amalija", "Ana", "Anastazija", "Anele", "Angela", "Antanina", "Arimantas", "Armantas", "Arminta", "Arune", "Aspazija", "Asta", "Audra", "Audrė", "Audrone", "Augustė", "Auksė", "Aurelija", "Ausra", "Aušra", "Aušrelé", "Ausrine", "Austeja", "Austėja", "Austra", "Beata", "Beegee", "Berta", "Birutė", "Brigita", "Bronislava", "Butė", "Daina", "Daiva", "Dalia", "Daliute", "Damilla", "Danguolė", "Danute", "Danutė", "Deimantė", "Diana", "Dovile", "Dovilė", "Edita", "Egita", "Eglė", "Elena", "Elge", "Elvyra", "Elzbieta", "Ema", "Emilija", "Erika", "Eufemia", "Eugenija", "Evelina", "Felicija", "Filimona", "Filomena", "Gabija", "Gabriele", "Gailė", "Galina", "Gene", "Genovaitė", "Giedre", "Giedrė", "Gintare", "Gintarė", "Gintautė", "Gražina", "Gražutė", "Greta", "Henrika", "Ieva", "Ilona", "Ina", "Indre", "Indrė", "Ineta", "Inga", "Ingrida", "Irena", "Irina", "Irma", "Irute", "Izabele", "Jadvyga", "Jandra", "Jane", "Janina", "Jekaterina", "Jelena", "Joana", "Jolanta", "Jolita", "Jone", "Jovita", "Julija", "Jurate", "Jūratė", "Jurga", "Jurgita", "Justina", "Kamilė", "Kazimiera", "Kazimira", "Konstancija", "Kotryna", "Kristina", "Laima", "Laimutė", "Larisa", "Laura", "Lėja", "Lida", "Lidija", "Liepa", "Lilija", "Lina", "Liucija", "Liuda", "Liudvika", "Lolita", "Loreta", "Magdalena", "Margarita", "Marija", "Marijona", "Maryte", "Medeina", "Milda", "Monika", "Natalija", "Neringa", "Nijole", "Nijolė", "Nina", "Nomeda", "Nora", "Ona", "Paulina", "Petronėlė", "Pranciska", "Prane", "Raimonda", "Raminta", "Ramune", "Ramutė", "Rasa", "Reda", "Regina", "Remigija", "Renata", "Rene", "Rima", "Rimantė", "Rita", "Rolanda", "Romualda", "Ruta", "Rūta", "Sada", "Salomeja", "Salomėja", "Salvinija", "Sandra", "Saule", "Sigita", "Silva", "Simona", "Skolastika", "Sniega", "Sofija", "Solveiga", "Sonata", "Stanislava", "Stase", "Stefania", "Stefanija", "Suzana", "Tatjana", "Teresa", "Terese", "Tina", "Toma", "Ugnė", "Urtė", "Vaida", "Vaidilutė", "Vaira", "Vaiva", "Valerija", "Vanda", "Veronika", "Vida", "Vika", "Viktorija", "Vilija", "Vilma", "Vilte", "Viltė", "Violeta", "Virginija", "Vita", "Vitalija", "Vladislava", "Vytautė", "Yemima", "Yulia", "Zemyna", "Zinaida", "Zita", "Zivile", "Živilė", "Zymante"];
 App.Data.misc.lithuanianMaleNames = ["Adolfas", "Adomas", "Agnius", "Aidas", "Aivaras", "Albertas", "Albinas", "Aldas", "Aleksandr", "Aleksandras", "Aleksas", "Alfonsas", "Alfredas", "Algimantas", "Algirdas", "Algis", "Aloyzas", "Alvydas", "Anatolijus", "Andrejus", "Andrius", "Antanas", "Arkadijus", "Arminas", "Arnas", "Arturas", "Artūras", "Arunas", "Arvydas", "Audrius", "Augustinas", "Aurelijus", "Aurimas", "Benas", "Benjaminas", "Bernardas", "Bronis", "Bronislovas", "Bronius", "Ceslovas", "Česlovas", "Dainius", "Dalius", "Danas", "Danielius", "Darius", "Daunius", "Deividas", "Domantas", "Domas", "Dominikas", "Dominykas", "Donaldas", "Donatas", "Dovidas", "Dovydas", "Edgaras", "Edis", "Edmundas", "Eduardas", "Edvinas", "Egidijus", "Eimantas", "Eligijus", "Emilis", "Erik", "Ernestas", "Eugenijus", "Evaldas", "Evinas", "Faustas", "Feliksas", "Gabrielius", "Gediminas", "Gerardas", "Giedrius", "Gintaras", "Gintas", "Gintautas", "Gytis", "Henrikas", "Ignas", "Igor", "Igoris", "Jokubas", "Jokūbas", "Jonas", "Julius", "Juozapas", "Juozas", "Jurgis", "Jurijus", "Justas", "Justinas", "Kajus", "Karolis", "Kastytis", "Kazimieras", "Kazys", "Kestutis", "Kęstutis", "Kipras", "Klaidas", "Klaudijus", "Konstantinas", "Kostas", "Laimis", "Laimutis", "Laurynas", "Leonardas", "Leonas", "Leopoldas", "Linas", "Lionginas", "Liudvikas", "Lukas", "Manfredas", "Mantas", "Marijus", "Marius", "Martynas", "Matas", "Medardas", "Michael", "Michailas", "Mikolajus", "Mindaugas", "Motiejus", "Mykolas", "Naglis", "Nauris", "Nerijus", "Nida", "Nikolajus", "Nojus", "Osvaldas", "Paulius", "Pavelas", "Petras", "Pijus", "Povilas", "Pranas", "Pranciskus", "Raimondas", "Raimundas", "Raivydas", "Ramunas", "Rapolas", "Regimantas", "Remigijus", "Remis", "Renatas", "Ricardas", "Ričardas", "Rimantas", "Rimas", "Rimgaudas", "Rimvydas", "Ringuadas", "Rišardas", "Robertas", "Rokas", "Rolandas", "Romanas", "Romas", "Romualdas", "Ruslanas", "Rytas", "Rytis", "Sarunas", "Saulius", "Šenderis", "Sergejus", "Sigitas", "Silvestras", "Simas", "Simonas", "Skirmantas", "Stanislovas", "Stasys", "Svajunas", "Svajūnas", "Tadas", "Titas", "Tomas", "Tylenis", "Ugnius", "Vaclovas", "Vadimas", "Vaidas", "Vaidotas", "Valdas", "Valdemar", "Valentas", "Valentinas", "Valerijonas", "Viaceslavas", "Vidas", "Vidmantas", "Viktoras", "Vilhelmas", "Vilius", "Vilmantas", "Vincas", "Vincentas", "Virgilijus", "Virginijus", "Vitalij", "Vitalijus", "Vladas", "Vladimiras", "Vladislovas", "Vygandas", "Vygantas", "Vytautas", "Vytenis", "Vytis", "Yehezkel", "Zenonas", "Zigmantas", "Zigmas", "Zilvinas", "Žilvinas"];
 App.Data.misc.lithuanianSlaveSurnames = ["Abeliūnaitė", "Abramavičiūtė", "Abromavičiūtė", "Adamkutė", "Adomaitytė", "Adomavičiūtė", "Aidietytė", "Aleknaitė", "Aleksaitė", "Aleksandravičiūtė", "Ambrozaitytė", "Andrijauskaitė", "Andriuškevičiūtė", "Andrulytė", "Aniulytė", "Arbačiauskaitė", "Astrauskaitė", "Avidar", "Avižonytė", "Bačiulytė", "Bagdonaitė", "Bagdonavičiūtė", "Baikauskaitė", "Balčiūnaitė", "Balsytė", "Baltrušaitytė", "Baranauskaitė", "Barauskaitė", "Barkauskaitė", "Bartkutė", "Basanavičiūtė", "Bernotaitė", "Bertašiūtė", "Bieliauskaitė", "Biliūnaitė", "Bimbaitė", "Bimbirytė", "Bislytė", "Blinkevičiūtė", "Brazauskaitė", "Brokoriūtė", "Bruzaitė", "Bružaitė", "Budrytė", "Bukauskaitė", "Bunkutė", "Butkevičiūtė", "Butkutė", "Cerniauskaitė", "Čistiakova", "Dagelytė", "Dagytė", "Dambrauskaitė", "Daugėla", "Demčenko", "Ditkovskytė", "Draudvilaitė", "Dukauskaitė", "Džiaugytė", "Dzindzaletaitė", "Eidikytė", "Fedorenkaitė", "Fischer", "Gecaitė", "Giedraitytė", "Gorbunova", "Gražulytė", "Gričiūtė", "Grigaitė", "Grigaliunaitė", "Grinčikaitė", "Grybauskaitė", "Guobytė", "Gylytė", "Ivanauskaitė", "Jakubaitytė", "Jakubauskaitė", "Jakubėnaitė", "Jankauskaitė", "Janusauskaitė", "Jasikevičiūtė", "Jezepčikaitė", "Jokubauskaitė", "Jonaitė", "Jonaitytė", "Juknevičiūtė", "Jurevičiūtė", "Juškaitė", "Juskevičiūtė", "Kačinskaitė", "Kairytė", "Kalinauskaitė", "Kaminskaitė", "Kanclerytė", "Karaliutė", "Katinaitė", "Kaunaitė", "Kavaliauskaitė", "Kay", "Kazakevičiūtė", "Kazlauskaitė", "Kelečiūtė", "Kiaulėnaitė", "Klimaitė", "Klimavičiūtė", "Končiūtė", "Korsakaitė", "Kozlova", "Krupeckaitė", "Kubiliūtė", "Kucinskaitė", "Kudirkaitė", "Kulėšiūtė", "Kuodytė", "Kuprevičiutė", "Kvietkauskaitė", "Kviklytė", "La Belle", "Labanauskaitė", "Lapinskaitė", "Laurinavičiūtė", "Leonavičiūtė", "Leščinskaitė", "Liepaitė", "Lingytė", "Lisauskaitė", "Lozoraitytė", "Lukoševičiūtė", "Lukošiūtė", "Mačiulytė", "Mackevičiūtė", "Malinauskaitė", "Marcinkevičiūtė", "Margenytė", "Markevičiūtė", "Matonytė", "Mažeikaitė", "Medvedeva", "Mendzarytė", "Meskauskaitė", "Mickevičiūtė", "Mickutė", "Mielkutė", "Mikalauskaitė", "Mikalauskytė", "Mikutavičiūtė", "Misiunaitė", "Miškinytė", "Mockutė", "Morkunaitė", "Motiejunaitė", "Murašova", "Narbutaitė", "Navickaitė", "Nėris", "Neverauskaitė", "Noreikaitė", "Norkutė", "Orlauskaitė", "Osmak", "Oženko", "Pacevičiūtė", "Pakalniškytė", "Palšytė", "Paražinskaitė", "Parshuta", "Paskevičiūtė", "Paulauskaitė", "Petkevičiūtė", "Petkutė", "Petraitytė", "Petrauskaitė", "Petravičiutė", "Petronytė", "Piliušina", "Plečkaitė", "Plečkaitytė", "Počiūtė", "Poškutė", "Povilaitytė", "Rackauskaitė", "Radzevičiūtė", "Rakauskaitė", "Ramanauskaitė", "Ramonaitė", "Remeikaitė", "Rimkutė", "Rinkevičiūtė", "Rupšytė", "Rutkauskaitė", "Sabaliauskaitė", "Sadauskaitė", "Sakalauskaitė", "Sakovič", "Sanders", "Sauliutė", "Šaulytė", "Savickaitė", "Šernaitė", "Sidlauskaitė", "Simkutė", "Simonavičiūtė", "Sinkevičiūtė", "Skrabulytė", "Škudaitė", "Songailaitė", "Sorokina", "Stankevičiūtė", "Stankutė", "Starkutė", "Steponavičiūtė", "Stonkutė", "Stonytė", "Streichman", "Šukytė", "Švedaitė", "Tamasauskaitė", "Tamošaitytė", "Tamosiunaitė", "Tchaban", "Tchernovitz", "Tomaitė", "Troup", "Tvarionaitė", "Urbanavičiūtė", "Urbonaitė", "Urbonavičiūtė", "Užkurėlytė", "Vaiciulytė", "Vaitiekunaitė", "Vaitkevičiūtė", "Vaitkutė", "Vanagaitė", "Varnaitė", "Vasiliauskaitė", "Venckutė", "Verbickaitė", "Vilkaitė", "Vilkevičiūtė", "Vilniutė", "Virbalytė", "Viršilaitė", "Visockaitė", "Vitkauskaitė", "Vitkutė", "Volkutė", "Vyšniauskaitė", "Zabielaitė", "Žadeikytė", "Žemaitytė", "Žičkutė", "Žilinskaitė", "Žiukaitė", "Žukaitė", "Žukauskaitė", "Žvinklytė"];
-App.Data.misc.lithuanianMaleSurnames = {"Abeliūnaitė": "Abeliūnas", "Abramavičiūtė": "Abramavičius", "Abromavičiūtė": "Abromavičius", "Adamkutė": "Adamkus", "Adomaitytė": "Adomaitys", "Adomavičiūtė": "Adomavičius", "Aidietytė": "Aidietis", "Aleknaitė": "Aleknas", "Aleksaitė": "Aleksa", "Aleksandravičiūtė": "Aleksandravičius", "Ambrozaitytė": "Ambrozaitys", "Andrijauskaitė": "Andrijauskas", "Andriuškevičiūtė": "Andriuškevičius", "Andrulytė": "Andrulis", "Aniulytė": "Aniulys", "Arbačiauskaitė": "Arbačiauskas", "Astrauskaitė": "Astrauskas", "Avižonytė": "Avižonis", "Bačiulytė": "Bačiulys", "Bagdonaitė": "Bagdonas", "Bagdonavičiūtė": "Bagdonavičius", "Baikauskaitė": "Baikauskas", "Balčiūnaitė": "Balčiūnas", "Balsytė": "Balsys", "Baltrušaitytė": "Baltrušaitys", "Baranauskaitė": "Baranauskas", "Barauskaitė": "Barauskas", "Barkauskaitė": "Barkauskas", "Bartkutė": "Bartkus", "Basanavičiūtė": "Basanavičius", "Bernotaitė": "Bernotas", "Bertašiūtė": "Bertašius", "Bieliauskaitė": "Bieliauskas", "Biliūnaitė": "Biliūnas", "Bimbaitė": "Bimbas", "Bimbirytė": "Bimbirys", "Bislytė": "Bislys", "Blinkevičiūtė": "Blinkevičius", "Brazauskaitė": "Brazauskas", "Brokoriūtė": "Brokorius", "Bruzaitė": "Bruzas", "Bružaitė": "Bružas", "Budrytė": "Budrys", "Bukauskaitė": "Bukauskas", "Bunkutė": "Bunkus", "Butkevičiūtė": "Butkevičius", "Butkutė": "Butkus", "Cerniauskaitė": "Cerniauskas", "Čistiakova": "Čistiakov", "Dagelytė": "Dagelis", "Dagelytė": "Dagelys", "Dagytė": "Dagys", "Dambrauskaitė": "Dambrauskas", "Ditkovskytė": "Ditkovskys", "Draudvilaitė": "Draudvila", "Dukauskaitė": "Dukauskas", "Džiaugytė": "Džiaugys", "Dzindzaletaitė": "Dzindzaletas", "Eidikytė": "Eidikis", "Fedorenkaitė": "Fedorenka", "Gecaitė": "Gecas", "Giedraitytė": "Giedraitys", "Gorbunova": "Gorbunov", "Gražulytė": "Gražulis", "Gričiūtė": "Gričius", "Grigaitė": "Grigas", "Grigaliunaitė": "Grigaliunas", "Grinčikaitė": "Grinčikas", "Grybauskaitė": "Grybauskas", "Guobytė": "Guobys", "Gylytė": "Gylys", "Ivanauskaitė": "Ivanauskas", "Jakubaitytė": "Jakubaitis", "Jakubauskaitė": "Jakubauskas", "Jakubėnaitė": "Jakubėnas", "Jankauskaitė": "Jankauskas", "Janusauskaitė": "Janusauskas", "Jasikevičiūtė": "Jasikevičius", "Jezepčikaitė": "Jezepčikas", "Jokubauskaitė": "Jokubauskas", "Jonaitė": "Jonas", "Jonaitytė": "Jonaitys", "Juknevičiūtė": "Juknevičius", "Jurevičiūtė": "Jurevičius", "Juškaitė": "Juškas", "Juskevičiūtė": "Juskevičius", "Kačinskaitė": "Kačinskas", "Kairytė": "Kairys", "Kalinauskaitė": "Kalinauskas", "Kaminskaitė": "Kaminskas", "Kanclerytė": "Kancleris", "Karaliutė": "Karalius", "Katinaitė": "Katinas", "Kaunaitė": "Kaunas", "Kavaliauskaitė": "Kavaliauskas", "Kazakevičiūtė": "Kazakevičius", "Kazlauskaitė": "Kazlauskas", "Kelečiūtė": "Kelečius", "Kiaulėnaitė": "Kiaulėnas", "Klimaitė": "Klimas", "Klimavičiūtė": "Klimavičius", "Končiūtė": "Končius", "Korsakaitė": "Korsakas", "Kozlova": "Kozlov", "Krupeckaitė": "Krupeckas", "Kubiliūtė": "Kubilius", "Kucinskaitė": "Kucinskas", "Kudirkaitė": "Kudirka", "Kulėšiūtė": "Kulėšius", "Kuodytė": "Kuodys", "Kuprevičiutė": "Kuprevičius", "Kvietkauskaitė": "Kvietkauskas", "Kviklytė": "Kviklys", "Labanauskaitė": "Labanauskas", "Lapinskaitė": "Lapinskas", "Laurinavičiūtė": "Laurinavičius", "Leonavičiūtė": "Leonavičius", "Leščinskaitė": "Leščinskas", "Liepaitė": "Liepa", "Liepaitė": "Liepas", "Lingytė": "Lingys", "Lisauskaitė": "Lisauskas", "Lozoraitytė": "Lozoraitytė", "Lukoševičiūtė": "Lukoševičius", "Lukošiūtė": "Lukošius", "Mačiulytė": "Mačiulys", "Mackevičiūtė": "Mackevičius", "Malinauskaitė": "Malinauskas", "Marcinkevičiūtė": "Marcinkevičius", "Margenytė": "Margenys", "Markevičiūtė": "Markevičius", "Matonytė": "Matonis", "Mažeikaitė": "Mažeikas", "Medvedeva": "Medvedev", "Mendzarytė": "Mendzaris", "Meskauskaitė": "Meskauskas", "Mickevičiūtė": "Mickevičius", "Mickutė": "Mickus", "Mielkutė": "Mielkus", "Mikalauskaitė": "Mikalauskas", "Mikalauskytė": "Mikalauskys", "Mikutavičiūtė": "Mikutavičius", "Misiunaitė": "Misiunas", "Miškinytė": "Miškinys", "Mockutė": "Mockus", "Morkunaitė": "Morkunas", "Motiejunaitė": "Motiejunas", "Murašova": "Murašov", "Narbutaitė": "Narbutas", "Navickaitė": "Navickas", "Neverauskaitė": "Neverauskas", "Noreikaitė": "Noreikas", "Norkutė": "Norkus", "Orlauskaitė": "Orlauskas", "Pacevičiūtė": "Pacevičius", "Pakalniškytė": "Pakalniškis", "Palšytė": "Palšis", "Paražinskaitė": "Paražinskas", "Paskevičiūtė": "Paskevičius", "Paulauskaitė": "Paulauskas", "Petkevičiūtė": "Petkevičius", "Petkutė": "Petkus", "Petraitytė": "Petraitys", "Petrauskaitė": "Petrauskas", "Petravičiutė": "Petravičius", "Petronytė": "Petronys", "Piliušina": "Piliušin", "Plečkaitė": "Plečkas", "Plečkaitytė": "Plečkaitys", "Počiūtė": "Počius", "Poškutė": "Poškus", "Povilaitytė": "Povilaitys", "Rackauskaitė": "Rackauskas", "Radzevičiūtė": "Radzevičius", "Rakauskaitė": "Rakauskas", "Ramanauskaitė": "Ramanauskas", "Ramonaitė": "Ramonas", "Remeikaitė": "Remeikas", "Rimkutė": "Rimkus", "Rinkevičiūtė": "Rinkevičius", "Rupšytė": "Rupšys", "Rutkauskaitė": "Rutkauskas", "Sabaliauskaitė": "Sabaliauskas", "Sadauskaitė": "Sadauskas", "Sakalauskaitė": "Sakalauskas", "Sauliutė": "Saulius", "Šaulytė": "Šaulys", "Savickaitė": "Savickas", "Šernaitė": "Šernas", "Sidlauskaitė": "Sidlauskas", "Simkutė": "Simkus", "Simonavičiūtė": "Simonavičius", "Sinkevičiūtė": "Sinkevičius", "Skrabulytė": "Skrabulis", "Škudaitė": "Škudas", "Songailaitė": "Songaila", "Sorokina": "Sorokin", "Stankevičiūtė": "Stankevičius", "Stankutė": "Stankus", "Starkutė": "Starkus", "Steponavičiūtė": "Steponavičius", "Stonkutė": "Stonkus", "Stonytė": "Stonys", "Šukytė": "Šukys", "Švedaitė": "Švedas", "Tamasauskaitė": "Tamasauskas", "Tamošaitytė": "Tamošaitis", "Tamosiunaitė": "Tamosiunas", "Tomaitė": "Tomas", "Tvarionaitė": "Tvarionas", "Urbanavičiūtė": "Urbanavičius", "Urbonaitė": "Urbonas", "Urbonavičiūtė": "Urbonavičius", "Užkurėlytė": "Užkurėlis", "Vaiciulytė": "Vaiciulys", "Vaitiekunaitė": "Vaitiekunas", "Vaitkevičiūtė": "Vaitkevičius", "Vaitkutė": "Vaitkus", "Vanagaitė": "Vanagas", "Varnaitė": "Varnas", "Vasiliauskaitė": "Vasiliauskas", "Venckutė": "Venckus", "Verbickaitė": "Verbickas", "Verzbickaitė": "Verzbickas", "Vilkaitė": "Vilkas", "Vilkevičiūtė": "Vilkevičius", "Vilniutė": "Vilnius", "Virbalytė": "Virbalys", "Viršilaitė": "Viršilas", "Visockaitė": "Visockas", "Vitkauskaitė": "Vitkauskas", "Vitkutė": "Vitkus", "Volkutė": "Volkus", "Vyšniauskaitė": "Vyšniauskas", "Zabielaitė": "Zabiela", "Žadeikytė": "Žadeikys", "Žemaitytė": "Žemaitys", "Žičkutė": "Žičkus", "Žilinskaitė": "Žilinskas", "Žiukaitė": "Žiukas", "Žukaitė": "Žukas", "Žukauskaitė": "Žukauskas", "Žvinklytė": "Žvinklys"};
+App.Data.misc.lithuanianMaleSurnames = {"Abeliūnaitė": "Abeliūnas", "Abramavičiūtė": "Abramavičius", "Abromavičiūtė": "Abromavičius", "Adamkutė": "Adamkus", "Adomaitytė": "Adomaitys", "Adomavičiūtė": "Adomavičius", "Aidietytė": "Aidietis", "Aleknaitė": "Aleknas", "Aleksaitė": "Aleksa", "Aleksandravičiūtė": "Aleksandravičius", "Ambrozaitytė": "Ambrozaitys", "Andrijauskaitė": "Andrijauskas", "Andriuškevičiūtė": "Andriuškevičius", "Andrulytė": "Andrulis", "Aniulytė": "Aniulys", "Arbačiauskaitė": "Arbačiauskas", "Astrauskaitė": "Astrauskas", "Avižonytė": "Avižonis", "Bačiulytė": "Bačiulys", "Bagdonaitė": "Bagdonas", "Bagdonavičiūtė": "Bagdonavičius", "Baikauskaitė": "Baikauskas", "Balčiūnaitė": "Balčiūnas", "Balsytė": "Balsys", "Baltrušaitytė": "Baltrušaitys", "Baranauskaitė": "Baranauskas", "Barauskaitė": "Barauskas", "Barkauskaitė": "Barkauskas", "Bartkutė": "Bartkus", "Basanavičiūtė": "Basanavičius", "Bernotaitė": "Bernotas", "Bertašiūtė": "Bertašius", "Bieliauskaitė": "Bieliauskas", "Biliūnaitė": "Biliūnas", "Bimbaitė": "Bimbas", "Bimbirytė": "Bimbirys", "Bislytė": "Bislys", "Blinkevičiūtė": "Blinkevičius", "Brazauskaitė": "Brazauskas", "Brokoriūtė": "Brokorius", "Bruzaitė": "Bruzas", "Bružaitė": "Bružas", "Budrytė": "Budrys", "Bukauskaitė": "Bukauskas", "Bunkutė": "Bunkus", "Butkevičiūtė": "Butkevičius", "Butkutė": "Butkus", "Cerniauskaitė": "Cerniauskas", "Čistiakova": "Čistiakov", "Dagelytė": "Dagelys", "Dagytė": "Dagys", "Dambrauskaitė": "Dambrauskas", "Ditkovskytė": "Ditkovskys", "Draudvilaitė": "Draudvila", "Dukauskaitė": "Dukauskas", "Džiaugytė": "Džiaugys", "Dzindzaletaitė": "Dzindzaletas", "Eidikytė": "Eidikis", "Fedorenkaitė": "Fedorenka", "Gecaitė": "Gecas", "Giedraitytė": "Giedraitys", "Gorbunova": "Gorbunov", "Gražulytė": "Gražulis", "Gričiūtė": "Gričius", "Grigaitė": "Grigas", "Grigaliunaitė": "Grigaliunas", "Grinčikaitė": "Grinčikas", "Grybauskaitė": "Grybauskas", "Guobytė": "Guobys", "Gylytė": "Gylys", "Ivanauskaitė": "Ivanauskas", "Jakubaitytė": "Jakubaitis", "Jakubauskaitė": "Jakubauskas", "Jakubėnaitė": "Jakubėnas", "Jankauskaitė": "Jankauskas", "Janusauskaitė": "Janusauskas", "Jasikevičiūtė": "Jasikevičius", "Jezepčikaitė": "Jezepčikas", "Jokubauskaitė": "Jokubauskas", "Jonaitė": "Jonas", "Jonaitytė": "Jonaitys", "Juknevičiūtė": "Juknevičius", "Jurevičiūtė": "Jurevičius", "Juškaitė": "Juškas", "Juskevičiūtė": "Juskevičius", "Kačinskaitė": "Kačinskas", "Kairytė": "Kairys", "Kalinauskaitė": "Kalinauskas", "Kaminskaitė": "Kaminskas", "Kanclerytė": "Kancleris", "Karaliutė": "Karalius", "Katinaitė": "Katinas", "Kaunaitė": "Kaunas", "Kavaliauskaitė": "Kavaliauskas", "Kazakevičiūtė": "Kazakevičius", "Kazlauskaitė": "Kazlauskas", "Kelečiūtė": "Kelečius", "Kiaulėnaitė": "Kiaulėnas", "Klimaitė": "Klimas", "Klimavičiūtė": "Klimavičius", "Končiūtė": "Končius", "Korsakaitė": "Korsakas", "Kozlova": "Kozlov", "Krupeckaitė": "Krupeckas", "Kubiliūtė": "Kubilius", "Kucinskaitė": "Kucinskas", "Kudirkaitė": "Kudirka", "Kulėšiūtė": "Kulėšius", "Kuodytė": "Kuodys", "Kuprevičiutė": "Kuprevičius", "Kvietkauskaitė": "Kvietkauskas", "Kviklytė": "Kviklys", "Labanauskaitė": "Labanauskas", "Lapinskaitė": "Lapinskas", "Laurinavičiūtė": "Laurinavičius", "Leonavičiūtė": "Leonavičius", "Leščinskaitė": "Leščinskas", "Liepaitė": "Liepas", "Lingytė": "Lingys", "Lisauskaitė": "Lisauskas", "Lozoraitytė": "Lozoraitytė", "Lukoševičiūtė": "Lukoševičius", "Lukošiūtė": "Lukošius", "Mačiulytė": "Mačiulys", "Mackevičiūtė": "Mackevičius", "Malinauskaitė": "Malinauskas", "Marcinkevičiūtė": "Marcinkevičius", "Margenytė": "Margenys", "Markevičiūtė": "Markevičius", "Matonytė": "Matonis", "Mažeikaitė": "Mažeikas", "Medvedeva": "Medvedev", "Mendzarytė": "Mendzaris", "Meskauskaitė": "Meskauskas", "Mickevičiūtė": "Mickevičius", "Mickutė": "Mickus", "Mielkutė": "Mielkus", "Mikalauskaitė": "Mikalauskas", "Mikalauskytė": "Mikalauskys", "Mikutavičiūtė": "Mikutavičius", "Misiunaitė": "Misiunas", "Miškinytė": "Miškinys", "Mockutė": "Mockus", "Morkunaitė": "Morkunas", "Motiejunaitė": "Motiejunas", "Murašova": "Murašov", "Narbutaitė": "Narbutas", "Navickaitė": "Navickas", "Neverauskaitė": "Neverauskas", "Noreikaitė": "Noreikas", "Norkutė": "Norkus", "Orlauskaitė": "Orlauskas", "Pacevičiūtė": "Pacevičius", "Pakalniškytė": "Pakalniškis", "Palšytė": "Palšis", "Paražinskaitė": "Paražinskas", "Paskevičiūtė": "Paskevičius", "Paulauskaitė": "Paulauskas", "Petkevičiūtė": "Petkevičius", "Petkutė": "Petkus", "Petraitytė": "Petraitys", "Petrauskaitė": "Petrauskas", "Petravičiutė": "Petravičius", "Petronytė": "Petronys", "Piliušina": "Piliušin", "Plečkaitė": "Plečkas", "Plečkaitytė": "Plečkaitys", "Počiūtė": "Počius", "Poškutė": "Poškus", "Povilaitytė": "Povilaitys", "Rackauskaitė": "Rackauskas", "Radzevičiūtė": "Radzevičius", "Rakauskaitė": "Rakauskas", "Ramanauskaitė": "Ramanauskas", "Ramonaitė": "Ramonas", "Remeikaitė": "Remeikas", "Rimkutė": "Rimkus", "Rinkevičiūtė": "Rinkevičius", "Rupšytė": "Rupšys", "Rutkauskaitė": "Rutkauskas", "Sabaliauskaitė": "Sabaliauskas", "Sadauskaitė": "Sadauskas", "Sakalauskaitė": "Sakalauskas", "Sauliutė": "Saulius", "Šaulytė": "Šaulys", "Savickaitė": "Savickas", "Šernaitė": "Šernas", "Sidlauskaitė": "Sidlauskas", "Simkutė": "Simkus", "Simonavičiūtė": "Simonavičius", "Sinkevičiūtė": "Sinkevičius", "Skrabulytė": "Skrabulis", "Škudaitė": "Škudas", "Songailaitė": "Songaila", "Sorokina": "Sorokin", "Stankevičiūtė": "Stankevičius", "Stankutė": "Stankus", "Starkutė": "Starkus", "Steponavičiūtė": "Steponavičius", "Stonkutė": "Stonkus", "Stonytė": "Stonys", "Šukytė": "Šukys", "Švedaitė": "Švedas", "Tamasauskaitė": "Tamasauskas", "Tamošaitytė": "Tamošaitis", "Tamosiunaitė": "Tamosiunas", "Tomaitė": "Tomas", "Tvarionaitė": "Tvarionas", "Urbanavičiūtė": "Urbanavičius", "Urbonaitė": "Urbonas", "Urbonavičiūtė": "Urbonavičius", "Užkurėlytė": "Užkurėlis", "Vaiciulytė": "Vaiciulys", "Vaitiekunaitė": "Vaitiekunas", "Vaitkevičiūtė": "Vaitkevičius", "Vaitkutė": "Vaitkus", "Vanagaitė": "Vanagas", "Varnaitė": "Varnas", "Vasiliauskaitė": "Vasiliauskas", "Venckutė": "Venckus", "Verbickaitė": "Verbickas", "Verzbickaitė": "Verzbickas", "Vilkaitė": "Vilkas", "Vilkevičiūtė": "Vilkevičius", "Vilniutė": "Vilnius", "Virbalytė": "Virbalys", "Viršilaitė": "Viršilas", "Visockaitė": "Visockas", "Vitkauskaitė": "Vitkauskas", "Vitkutė": "Vitkus", "Volkutė": "Volkus", "Vyšniauskaitė": "Vyšniauskas", "Zabielaitė": "Zabiela", "Žadeikytė": "Žadeikys", "Žemaitytė": "Žemaitys", "Žičkutė": "Žičkus", "Žilinskaitė": "Žilinskas", "Žiukaitė": "Žiukas", "Žukaitė": "Žukas", "Žukauskaitė": "Žukauskas", "Žvinklytė": "Žvinklys"};
 
 App.Data.misc.luxembourgianSlaveNames = ["Ada-Sylvia", "Ada", "Adélaïde", "Adele", "Adèle", "Adelgund", "Adelheid", "Adrienne", "Agathe", "Agna", "Agnès", "Aile", "Aimée", "Alaine", "Albane", "Alette", "Alexa", "Alexandra-Sophia", "Alexandra", "Alexanne", "Alexis", "Alice", "Aline", "Alix", "Alizée", "Aloisa", "Alwine", "Amalia", "Amalie", "Amandine", "Ambre", "Amée", "Amélie", "Ammelie", "Amy", "Anabelle", "Anaëlle", "Anaïs", "Andrea", "Andréa", "Andréanne", "Andrée", "Andrie", "Anett", "Anette", "Ange", "Angela", "Angele", "Angelika", "Angélique", "Anita", "Anja", "Anna-Bärbel", "Anna-Lise", "Anna-Lotte", "Anna", "Annabelle", "Anne-Birgit", "Anne-Catherine", "Anne-Marie", "Anne-Sophie", "Anne", "Annegret", "Annelies", "Anneliese", "Annemarie", "Annette", "Annick", "Annie", "Anselma", "Antje", "Antoinette", "Appoline", "Appolonia", "Ariane", "Arielle", "Arlette", "Armelle", "Armgard", "Ashley", "Astérie", "Astrid", "Aubine", "Aurélia", "Aurélie", "Auréliia", "Aurore", "Avril", "Axelle", "Babette", "Barbara", "Barbe", "Bärbel", "Baronika", "Beate", "Béatrice", "Belle", "Bernadette", "Bernice", "Berta", "Bertille", "Bertita", "Bettina", "Bianca", "Bianka", "Bien Aimée", "Birgit", "Birgitte", "Birthe", "Blaisotte", "Blanche", "Blanchette", "Bluette", "Bridget", "Brigitta", "Brigitte", "Britta", "Brunhilda", "Brunhilde", "Cäcilie", "Calanthe", "Camille", "Capucine", "Carina", "Carine", "Carola", "Carolane", "Carole", "Caroline", "Cassandre", "Catherine", "Cécilie", "Cekine", "Celeste", "Célia", "Céline", "Cerise", "Chanel", "Chantal", "Charline", "Charlotte", "Charmaine", "Cherie", "Chloë", "Chris", "Christa-Marina", "Christa", "Christel", "Christelle", "Christi", "Christiane", "Christina", "Christine", "Christl", "Claire-Marie", "Claire", "Clarisse", "Claude", "Claudette", "Claudia", "Claudie", "Claudine", "Clémence", "Clémentine", "Clervie", "Cloé", "Clothilde", "Clotilde", "Colette", "Coline", "Colombe", "Constance", "Constanza", "Constanze", "Coralie", "Cordélie", "Cordula", "Corentine", "Corinna", "Corinne", "Cornelia", "Cornélie", "Cosette", "Crescence", "Cristiana", "Cristina", "Dagmar-Anette", "Dagmar", "Daniela", "Danièle", "Danielle", "Daphné", "Daphnée", "Deelicious", "Delicious", "Delphine", "Denise", "Desirée", "Désirée", "Diana", "Dianne", "Dionne", "Diotima", "Dominique", "Dora", "Doralice", "Doré", "Dorette", "Doriane", "Doris", "Dorothea", "Dorothee", "Dorothée", "Eberharde", "Edda", "Edelgard", "Edeltraud", "Edeltraut", "Edeltrud", "Edith", "Effi", "Égérie", "Eike", "Elaine", "Eleana", "Éléanore", "Elena", "Eléna", "Eleonora", "Eleonore", "Elfreida", "Elfriede", "Éliane", "Elisabeth", "Élisabeth", "Elise", "Élizabeth", "Elka", "Elke", "Ella", "Ellen", "Elodie", "Élodie", "Eloise", "Elsa", "Elsbeth", "Else", "Elvira", "Emelie", "Emeline", "Emilie", "Émilie", "Émilienne", "Emily", "Emma", "Emmanuelle", "Emy", "Erdmute", "Erika", "Erna", "Ernestine", "Esmé", "Estée", "Estelle", "Eugénie", "Eulalie", "Eva-Maria", "Eva", "Evangeline", "Eve", "Evelyne", "Fabienne", "Fanny", "Fantine", "Fernande", "Fifi", "Fleur", "Florence", "Florie", "Francine", "Françoise", "Franziska", "Frauke", "Frédérique", "Freya", "Frida", "Frieda", "Friedegard", "Friedericke", "Gabriela", "Gabriele", "Gabrielle", "Garde", "Garnet-Andrea", "Gebharde", "Geneviève", "Georgette", "Georgine", "Géraldine", "Gerda", "Gerlinda", "Gerlinde", "Germaine", "Gerta", "Gertraud", "Gertraude", "Gertrud", "Gervaise", "Gesa", "Ghislaine", "Gigi", "Gina", "Ginette", "Gisa", "Gisela", "Gisèle", "Gitta", "Gitte", "Grâce", "Greta", "Gretchen", "Grethe", "Gudrun", "Gunda", "Gundula", "Hanna", "Hanne", "Hannelore", "Hauke", "Hedwig", "Heide-Karin", "Heide", "Heidemarie", "Heidi", "Heidrun", "Heike", "Helena", "Helene", "Hélène", "Helga", "Hella", "Helma", "Héloïse", "Henriette", "Hermine", "Herta", "Hertha", "Hilda", "Hilde", "Hildegard", "Hilma", "Hulda", "Hyacinthe", "Ida", "Ilka", "Ilona", "Ilse", "Imma", "Ina", "Inés", "Inge", "Ingeborg", "Ingeburg", "Ingrid", "Insa", "Irene", "Irène", "Iris", "Irma", "Irmengard", "Irmgard", "Isa", "Isabeau", "Isabella", "Isabelle", "Jacqueline", "Jana", "Janine", "Jasmin", "Jean", "Jeand'arc", "Jeanette", "Jeanine", "Jeanne-Aimée", "Jeanne-Yvette", "Jeanne", "Jeannine", "Jenevieve", "Jessica", "Jettchen", "Joëlle", "Johanna", "Jolante", "Jolène", "Josée", "Josefa", "Josepha", "Josephine", "Josette", "Josiane", "Juli", "Julia", "Juliane", "Julie", "Juliette", "Juni", "Justine", "Jutta", "Kaethe", "Karin-Astrid", "Karin", "Karina", "Karine", "Karla", "Karlin", "Karlotta", "Karlotte", "Karola", "Karolina", "Karoline", "Käte", "Katerina", "Katharina", "Käthe", "Kathrin", "Katja", "Katrin", "Kerstin", "Kim", "Kirsten", "Klara", "Klarissa", "Klaudia", "Konstanze", "Kornelia", "Kreszentia", "Krista", "Kristina", "Laetitia", "Lara", "Lätitia", "Laura", "Laure", "Laurence", "Lauriane", "Laurianne", "Laurie", "Laurine", "Léa", "Leah", "Lena", "Lene", "Leonie", "Léonie", "Leonore", "Léonore", "Lexi", "Liane", "Lianne", "Lies", "Liesbeth", "Liese", "Lieselotte", "Liesl", "Lili", "Liliane", "Lilianne", "Lilli", "Lina", "Linda", "Lisa", "Lisbeth", "Lise", "Liselotte", "Lisette", "Lisl", "Lissi", "Liz", "Loni", "Loraine", "Lore", "Lorelei", "Loréline", "Lorraine", "Lotte", "Louise", "Lucie", "Lucienne", "Lucile", "Lucille", "Lucrèce", "Ludivine", "Ludwiga", "Ludwige", "Luise", "Lukretia", "Lutgard", "Luzi", "Luzie", "Lydia", "Lydie", "Lynn", "Mabelle", "Madeleine", "Madlen", "Mady", "Maelle", "Magalie", "Magdalena", "Magdalene", "Maja", "Malwine", "Mana", "Mandy", "Manon", "Manuela", "Marcelle", "Maren", "Margareta", "Margarete", "Margaretha", "Margaux", "Margit", "Margitta", "Margot", "Margrete", "Margrit", "Marguerite", "Mari-Angela", "Maria", "Marianne", "Marie-Anne", "Marie-Claire", "Marie-Claude", "Marie-Ève", "Marie-France", "Marie-Hélène", "Marie-Josée", "Marie-Laure", "Marie-Louise", "Marie-Noelle", "Marie-Pier", "Marie-Pierre", "Marie-Sophie", "Marie-Sylvie", "Marie-Thérèse", "Marie", "Marielle", "Marike", "Marina", "Marine", "Marion", "Marit", "Marita", "Marjeta", "Marjolaine", "Marlene", "Marlies", "Marliese", "Marlis", "Marthe", "Martina", "Martine", "Mathilde", "Maude", "Maxime", "Maxine", "Mechthild", "Mégane", "Meike", "Mélaine", "Melanie", "Mélanie", "Melina-Marie", "Mélina", "Mèlina", "Mélissa", "Mélodie", "Merle", "Meta", "Mia", "Michaela", "Michèle", "Micheline", "Mieke", "Mignon", "Mimi", "Minna", "Mirabelle", "Mireille", "Mirjam", "Mitzi", "Mizzi", "Monette", "Monika", "Monique", "Morgane", "Musette", "Mylène", "Myriam", "Nadège", "Nadine", "Nadja", "Nanette", "Nanni", "Natalie", "Natascha", "Nathalie", "Nella", "Nena", "Nicole", "Nicolette", "Nida", "Nikola", "Nina", "Noelle", "Noemi", "Noémie", "Notburga", "Océane", "Octavie", "Odette", "Odile", "Olga", "Olympie", "Ombeline", "Ophélie", "Orégane", "Ortrud", "Ortun", "Ossi", "Ottilie", "Pascale", "Patrice", "Patrizia", "Paula", "Paulette", "Pauline", "Petra", "Philippine", "Phöbe", "Pia", "Porsche", "Quitterie", "Rachel", "Rachelle", "Rahel", "Ramona", "Raymonde", "Rebekka", "Regina", "Regine", "Regula", "Reintraud", "Renate", "Renée", "Resi", "Ria", "Rita", "Rochelle", "Romaine", "Romane", "Romi", "Romy", "Ronja", "Rosa", "Rosalie", "Rosalinde", "Rosamunde", "Rosangela", "Rose", "Rosemarie", "Rosemunde", "Rosine", "Roswitha", "Roxane", "Ruth", "Sabine", "Sabrina", "Sabrine", "Salome", "Salomé", "Sandra", "Sandrine", "Sara", "Sarah", "Selina", "Senta", "Séraphine", "Sibylle", "Sidonie", "Sieglinde", "Sigrid", "Silja", "Silke", "Simone", "Simonne", "Sina", "Sinikka", "Sixtine", "Sofia", "Solange", "Solène", "Solenne", "Sonia", "Sonja", "Sophia", "Sophie", "Stefania", "Stefanie", "Stella", "Stephanie", "Stéphanie", "Sunny", "Susanna", "Susanne", "Suzanne", "Swenja", "Sybille", "Sylvia", "Sylvie", "Tabea", "Tamara", "Tania", "Tanja", "Tatiana", "Tereza", "Tessy", "Thekla", "Theresa", "Therese", "Thérèse", "Thilde", "Tiffany", "Tiphaine", "Tonja", "Traute", "Trina", "Trine", "Trixi", "Ulla", "Ulrike", "Ursula", "Usel", "Uta", "Ute", "Valentine", "Valérie", "Vanessa", "Vera", "Verena", "Veronika", "Veronike", "Véronique", "Vicky", "Victoire", "Victoria", "Viktoria", "Vinzentia", "Viola", "Violette", "Virgie", "Virginie", "Viviane", "Vivienne", "Waltraud", "Waltraut", "Weike", "Wendelgard", "Wiebke", "Wilhelmina", "Wilhelmine", "Yannick", "Yolanda", "Yvette", "Yvonne", "Zoe", "Zoé", "Zoë", "Zölestine"];
 App.Data.misc.luxembourgianMaleNames = ["Achille", "Achim", "Adalbert", "Adalmund", "Adam", "Adelbert", "Adelmute", "Adrian", "Adrien", "Aïdan", "Alain-René", "Alain", "Alban", "Albert", "Albrecht", "Alexander", "Alexandre", "Alexis", "Alfons", "Alfred", "Alois", "Aloïs", "Alphonse", "Alwin", "Aly", "Amaury", "Ambroise", "Amédée", "Anatol", "Anatole", "Anders", "André", "Andreas", "Andrei", "Äneas", "Anicet", "Anselm", "Anselme", "Antoine", "Anton", "Aribert", "Aristide", "Arius", "Armand", "Armin", "Arnaud", "Arndt", "Arne", "Arnim", "Arno", "Arnold", "Arnulf", "Arsène", "Arthur", "Artur", "Aubert", "Aubin", "Audefroy", "August", "Auguste", "Augustin", "Aurélien", "Axel", "Aymeric", "Balthasar", "Baptiste", "Bardiou", "Barnabas", "Barthélémy", "Bartholomäus", "Basile", "Bastian", "Bastien", "Baudier", "Baudouin", "Beau", "Ben", "Benedikt", "Benjamin", "Benoît", "Bérenger", "Bernard", "Bernd", "Berndt", "Bernhard", "Bernward", "Berthold", "Bertold", "Bertram", "Bertrand", "Blaise", "Bob", "Bodo", "Boudreaux", "Brandt", "Brice", "Brieux", "Bruno", "Bruns", "Burkhard", "Cäcile", "Carl", "Carlos", "Carsten", "Cäsar", "Caspaar", "Cécil", "Cédric", "Cédrick", "Céléstin", "César", "Charel", "Charles Étienne", "Charles-Antoine", "Charles", "Chrétien", "Christian", "Christoph", "Christophe", "Clair", "Claude", "Claus", "Clemens", "Clément", "Clovis", "Côme", "Conrad", "Constantin", "Corentin", "Cyprien", "Cyriaque", "Cyrille", "Damien", "Danick", "Daniel", "Dany", "Dartagnan", "David", "Dédé", "Degenhard", "Denis", "Déreck", "Detlef", "Didier", "Diesel", "Dietbold", "Dieter", "Dietleib", "Dietmar", "Dietrich", "Ditmar", "Dominik", "Dominique", "Donatien", "Eber", "Eberhard", "Eckart", "Eckbrecht", "Eckert", "Eckhard", "Eddi", "Edgar", "Edmond", "Edmund", "Édouard", "Edsel", "Eduard", "Egbert", "Égide", "Egon", "Ehregott", "Ekkehard", "Elias", "Élias", "Élie", "Éliot", "Elmar", "Éloi", "Emanuel", "Émerick", "Emeril", "Emil", "Emile", "Émile", "Émilien", "Emmanuel", "Engelbert", "Enrich", "Enrick", "Erhard", "Éric", "Erich", "Erik", "Ernst", "Erny", "Erwin", "Esmé", "Esra", "Étienne", "Eugen", "Eugène", "Evarist", "Évrard", "Ewald", "Ezechiel", "Faber", "Fabian", "Fabien", "Fabrice", "Falk", "Faust", "Félix Antoine", "Felix", "Félix", "Ferdinand", "Fernand", "Festus", "Fidèle", "Filipp", "Firmin", "Flavien", "Florent", "Florian-Adrian", "Florian", "Francis", "Franciskus", "Franck", "François", "Frank", "Franko", "Franz-Dieter", "Franz-Josef", "Franz", "Franziskus", "Fred", "Frédéric", "Frédérick", "Fridolin", "Friedbert", "Friedhelm", "Friedolin", "Friedrich-Paul", "Friedrich", "Fritz", "Fürchtegott", "Gabin", "Gabriel", "Gaël", "Gaétan", "Gaëtan", "Gaspard", "Gaston", "Gatien", "Gauthier", "Gautier", "Gebhard", "Gédéon", "Geoffroy", "Georg", "George-Marie", "Georges", "Gerald", "Gérard", "Gerd", "Gerhard", "Gerhardt", "Germain", "Gerold", "Gerrit", "Ghislain", "Gilbert", "Giles", "Gilles", "Giraud", "Gottfried", "Gotthard", "Gotthold", "Gottlieb", "Gottschalk", "Grégoire", "Gregor", "Guillaume", "Gunnar", "Gunter", "Günther", "Gust", "Gustav", "Gustave", "Guy", "Hagen", "Hanno", "Hans-Georg", "Hans-Joachim", "Hans-Peter", "Hans", "Harald", "Harro", "Hartmut", "Hasso", "Heiko", "Heiner", "Heinrich", "Heinz-Dieter", "Heinz", "Hektor", "Helmar", "Helmut", "Helmuth", "Hendrik", "Henning", "Henri", "Henrik", "Henryk", "Herbert", "Hermann", "Hervé", "Hilaire", "Hilmar", "Holger", "Honoré", "Horaz", "Horst", "Hubert", "Hubertus", "Hugo", "Hugues", "Ignace", "Ignaz", "Imer", "Ingert", "Ingolf", "Ingomar", "Irène", "Isaak", "Isidor", "Isidore", "Ismaël", "Jacques-Yves", "Jacques", "Jacquot", "Jakob", "Jan", "Jansen", "Jean-Albert", "Jean-André", "Jean-Baptise", "Jean-Charles", "Jean-Christophe", "Jean-Claude", "Jean-Didier", "Jean-France", "Jean-François", "Jean-Guy", "Jean-Jacques", "Jean-Jérôme", "Jean-Lou", "Jean-Louis", "Jean-Luc", "Jean-Marc", "Jean-Marie", "Jean-Michel", "Jean-Paul", "Jean-Philippe", "Jean-Pierre", "Jean-René", "Jean-Sébastien", "Jean-Simon", "Jean-Xavier", "Jean-Yves", "Jean", "Jens", "Jérémi", "Jeremias", "Jérémie", "Jérémy", "Jermaine", "Jérôme", "Jessy", "Jimmy", "Joachim", "Jochen", "Jodokus", "Joé", "Joël", "Johann", "Johannes", "Johnny", "Jojo", "Jörgen", "Jörn", "Joscelin", "Josef", "Joseph-Benoît", "Joseph", "Josias", "Jost", "Jourdain", "Jules", "Julian", "Julien", "Jürgen", "Juste", "Justin", "Justus", "Kai", "Karl-Heinz", "Karl-Ludwig", "Karl", "Karlheinz", "Karlmann", "Karol", "Karsten", "Kaspar", "Klaudius", "Klaus-Dieter", "Klaus-Karl", "Klaus-Peter", "Klaus", "Klemens", "Knut", "Konrad-Wilhelm", "Konrad", "Konstantin", "Korbinian", "Kunz", "Kurt-Adolf", "Kurt-Christian", "Kurt", "Laurent", "Lazare", "Léandre", "Leo", "Léo", "Léon", "Léonard", "Leonhard", "Leonik", "Leopold", "Léopold", "Lilian", "Loïc", "Lorenz", "Lothar", "Lou", "Louis Philippe", "Louis-Charles", "Louis-Joseph", "Louis", "Louka", "Luc", "Luca", "Lucas", "Lucien", "Ludo", "Ludolf", "Ludovic", "Ludwig", "Lukas", "Lutz", "Macaire", "Maël", "Maik", "Manfred", "Manuel", "Marc André", "Marc Antoine", "Marc Olivier", "Marc-Alexandre", "Marc-André", "Marc-Antoine", "Marc-Henri", "Marc", "Marcel", "Marcellin", "Marco", "Marek", "Marian", "Marius", "Marko", "Markus", "Martin", "Mathias", "Mathieu", "Mathis", "Mattéo", "Matthäus", "Matthias", "Matthieu", "Maurice", "Max", "Maxence", "Maxime", "Maximilian", "Maximilien", "Meinhard", "Meinrad", "Melchior", "Michael", "Michel", "Mickaël", "Mike", "Mirko", "Moritz", "Narcisse", "Narziss", "Neidhard", "Nicéphore", "Nico", "Nicolas", "Niklas", "Nikodemus", "Nikolaus", "Noah", "Noé", "Noël", "Norbert", "Nordine", "Norman", "Octavien", "Odilon", "Oliver", "Olivier", "Ortwin", "Oskar", "Otmar", "Ottmar", "Otto", "Ottokar", "Pascal", "Patrice", "Patrick", "Paul-Dieter", "Paul", "Peter", "Philipp", "Philippe", "Pier-Olivier", "Pierre Alexandre", "Pierre Olivier", "Pierre-Luc", "Pierre", "Pierrick", "Pierrot", "Pit", "Prosper", "Quentin", "Rafaël", "Raimar", "Raimund", "Rainer", "Rainier", "Ralf", "Randolf", "Raoul", "Raphaël", "Rayan", "Raymond", "Réal", "Régis", "Reichold", "Reimar", "Reimund", "Reinhard", "Reinhold", "Reinmar", "Réjean", "Rémi", "Remo", "Rémy", "Renald", "Renaud", "Rene", "René", "Rheinhardt", "Richard", "Rickhard", "Riner", "Robert", "Roderich", "Rodolphe", "Rodrigue", "Roger", "Roland", "Rolf", "Romain", "Romaine", "Roman", "Ruben", "Ruddiger", "Rüdiger", "Rudolf", "Rudy", "Rupert", "Rupertus", "Ruprecht", "Rutger", "Samuel", "Samy", "Sander", "Sascha", "Schorsch", "Sebastian", "Sébastien", "Seigmund", "Serge", "Séverin", "Siegfried", "Sieghard", "Siegmund", "Sigmund", "Sigurd", "Simeon", "Simon Olivier", "Simon", "Sofiane", "Sonke", "Stadler", "Stanislas", "Stefan-André", "Stefan-Paul", "Stefan", "Steffen", "Steinmar", "Stephan", "Stéphane", "Sulpice", "Sven", "Sylvain", "Sylvestre", "Tancrede", "Terenz", "Thaddäus", "Théo", "Theobold", "Theodor", "Théodore", "Théophile", "Thibaud", "Thibault", "Thibaut", "Thierry", "Thile", "Thomas", "Thorsten", "Till-Alexander", "Tilmann", "Tim", "Timothé", "Timothee", "Timothée", "Tobias", "Tom", "Tornsten", "Toussaint", "Traugott", "Tun", "Udo", "Ulf", "Ullrich", "Ulrich", "Uter", "Utz", "Uwe", "Valentin", "Valère", "Veit", "Victor", "Viktor", "Vincent", "Vinzenz", "Virgile", "Volker", "Volkmar", "Waldemar", "Waldo", "Walter", "Walther", "Wenzel", "Werner", "Werther", "Wilfried", "Wilhelm", "Willibald", "Winfried", "Wolfgang", "Wolfram", "Xavier", "Yan", "Yanick", "Yanis", "Yoan", "Yoann", "Yohan", "Yves", "Yvon", "Zacharie", "Zephrin", "Zinnedine"];
@@ -647,7 +647,7 @@ App.Data.misc.polishSlaveNames = ["Ada", "Adela", "Adriana", "Adrianna", "Aga",
 App.Data.misc.polishMaleNames = ["Abda", "Adam", "Adolf", "Adrian", "Alan", "Albin", "Aleksander", "Alfons", "Alois", "Alojzy", "Ambrozy", "Andrzej", "Antoni", "Anzelm", "Arek", "Arkadiusz", "Artur", "August", "Augustyn", "Bartlomiej", "Bartłomiej", "Bartosz", "Bazyl", "Bazyli", "Benedykt", "Beniamin", "Biötuł", "Blazej", "Bogdan", "Bogumil", "Bogumił", "Boguslaw", "Bogusław", "Bogusz", "Bohdan", "Bohuměr", "Boleslaw", "Bolesław", "Borys", "Bożydar", "Bronislaw", "Bronisław", "Česćiměr", "Cezary", "Chwalibóg", "Chwalisław", "Cyprian", "Czcibor", "Czeslaw", "Czesław", "Damian", "Daniel", "Dariusz", "Dawid", "Dezydery", "Dionizy", "Dobiegniew", "Dobieslaw", "Dobiesław", "Dobrogost", "Dobromił", "Dobromir", "Dobrosław", "Dobysław", "Domard", "Domasław", "Dominik", "Donat", "Dragomir", "Dymitr", "Dzierżysław", "Edmund", "Edward", "Eliasz", "Eligiusz", "Emil", "Erazm", "Eugeniusz", "Euzebiusz", "Felicjan", "Feliks", "Ferda", "Ferdynand", "Filip", "Franciszek", "Friedrich", "Fryderyk", "Gniewko", "Gniewomir", "Godzimir", "Godzisław", "Gorzysław", "Grzegorz", "Gustaw", "Henryk", "Herman", "Hieronim", "Hipolit", "Horisław", "Hubert", "Ignacy", "Igor", "Ireneusz", "Iwan", "Iwo", "Jacek", "Jacenty", "Jakub", "Jan", "Janusz", "Jaontek", "Jarek", "Jaroměr", "Jaromir", "Jaroslaw", "Jarosław", "Jedrzej", "Jerzy", "John", "Jozef", "Józef", "Julian", "Juliusz", "Juza", "Jynrek", "Kacper", "Kaj", "Kajetan", "Kamil", "Kaospela", "Karol", "Kazimierz", "Klaudiusz", "Klemens", "Konrad", "Konstanty", "Kornel", "Krystian", "Krzesimir", "Krzysztof", "Ksawer", "Ksawery", "Küba", "Laojzek", "Lazarz", "Lech", "Lechosław", "Leon", "Leopold", "Leslaw", "Lesław", "Leszek", "Lew", "Lubomir", "Lucjan", "Ludomil", "Ludomił", "Ludomir", "Ludwik", "Lukasz", "Łukasz", "Maciej", "Maciek", "Maksymilian", "Marcel", "Marceli", "Marcin", "Marek", "Marian", "Mariusz", "Mateusz", "Maurycy", "Michal", "Michał", "Mieczyslaw", "Mieczysław", "Mieszko", "Mikolaj", "Mikołaj", "Milan", "Milorad", "Miłosław", "Milosz", "Miłosz", "Mira", "Mirko", "Miroslaw", "Mirosław", "Mječisław", "Mjēta", "Mōc", "Mscëwòj", "Mścisław", "Mściwój", "Narcyz", "Natan", "Nepomucen", "Niemir", "Nikodem", "Norbert", "Olgierd", "Olus", "Oskar", "Patryk", "Pawel", "Paweł", "Pazemek", "Pejter", "Piöel", "Piotr", "Przemyslaw", "Przemysław", "Przybysław", "Radek", "Radoměr", "Radoslaw", "Radosław", "Rafal", "Rafał", "Razmus", "Remigiusz", "Robert", "Roman", "Romuald", "Rościsław", "Ryszard", "Salomon", "Sambor", "Sebastian", "Sędziwoj", "Sergiusz", "Seweryn", "Slawek", "Sławoj", "Slawomir", "Sławomir", "Sobieslaw", "Sobiesław", "Stanij", "Stanislaw", "Stanisław", "Staocha", "Stefan", "Subisłôw", "Sulisław", "Swiãtopôłk", "Świętosław", "Sylwester", "Symplicyusz", "Szczepan", "Szymek", "Szymon", "Tadeusz", "Teodor", "Teofil", "Tobyś", "Tomasz", "Tüma", "Tymon", "Tymoteusz", "Urban", "Vinca", "Waclaw", "Wacław", "Waldemar", "Walenty", "Walerian", "Walery", "Waleryan", "Wasyl", "Wawrzyniec", "Wienczyslaw", "Wieslaw", "Wiesław", "Wiktor", "Wincenty", "Wińczysław", "Wit", "Witek", "Witold", "Wjeleměr", "Wladimir", "Wladyslaw", "Władysław", "Wlodzimierz", "Włodzimierz", "Wojciech", "Wójsław", "Wojtek", "Wszebor", "Xawery", "Zac", "Zawisza", "Zbigniew", "Zbyszko", "Zdzislaw", "Zdzisław", "Zenon", "Ziemowit", "Zygfryd", "Zygmund", "Zygmunt"];
 /* NOTE: Polish surnames have different forms depending on the gender of the person. This list uses the female form. */
 App.Data.misc.polishSlaveSurnames = ["Adamczyk", "Adamowska", "Adamska", "Babczyńska", "Bachleda", "Bak", "Baran", "Barana", "Baranowska", "Bartoszak", "Bebło", "Bednarczyk", "Bednarek", "Bereznowska", "Białobrzeska", "Bielczyk", "Bielecka", "Bielińska", "Bijoch", "Bik", "Biskupska", "Bochenek", "Borkowska", "Borowska", "Braunek", "Broniatowska", "Brożek", "Brus", "Brzozowska", "Bukowska", "Camberg", "Chawawko", "Chewińska", "Chmara", "Chmielewska", "Chmielowska", "Chojecka", "Chojnacka", "Cichocka", "Ciszewska", "Czapiewska", "Czarnecka", "Czubak", "Dąbrowska", "Dibrowska", "Długołecka", "Dombroska", "Dragańska", "Duda", "Dudek", "Dworakowska", "Dygacz", "Dziedzic", "Ellward", "Ennaoui", "Fajdek", "Farna", "Forkasiewicz", "Frackowiak", "Gajda", "Gajewska", "Gałecka", "Gapińska", "Gaworska", "Gierczak", "Ginczanka", "Giżyńska", "Głowacka", "Górska", "Grabowska", "Gradek", "Gruchala", "Grudzińska", "Grzelak", "Gulbierz", "Guzowska", "Haratyk", "Hoffmann", "Horowska", "Jabłońska", "Jagaciak", "Jagodzińska", "Jakubiak", "Jakubowska", "Jamrozy", "Janicka", "Janik", "Janin", "Jankowska", "Janowska", "Januchta", "Jaroska", "Jarosz", "Jarzyńska", "Jasek", "Jasińska", "Jaworska", "Jędrejek", "Jesień", "Jóźwik", "Jurkowianiec", "Kaczmarczyk", "Kaczmarek", "Kaczyńska", "Kalinowska", "Kamińska", "Kania", "Karczmarek", "Kasprzak", "Kasprzyk", "Katewicz", "Kern", "Kiełbasińska", "Klimczak", "Klimek", "Kłos", "Kniola", "Kolodziejska", "Konieczna", "Konopka", "Kopacz", "Korczyńska", "Korzeniowska", "Kot", "Kowal", "Kowalczyk", "Kowalewska", "Kowalik", "Kowalska", "Kozak", "Kozłowska", "Kożuchowska", "Krajewska", "Krawczuk", "Krawczyk", "Król", "Kruk", "Krukowska", "Krupa", "Krzesińska", "Krzewina", "Kszczot", "Kubiak", "Kubicka", "Kuć", "Kucharska", "Kulesza", "Kulon", "Kumar", "Kumara", "Kurek", "Kwaśniewska", "Kwaśniowska", "Kwiatkowska", "Łabędź", "Lajblich", "Laskowska", "Lech", "Leconte", "Leon", "Leszczak", "Lewandowska", "Lićwinko", "Lis", "Lisek", "Maciejewska", "Maćkowiak", "Madej", "Maj", "Majchrzak", "Majdan", "Majewska", "Majusiak", "Makowska", "Makuch", "Malinowska", "Maliszewska", "Marciniak", "Marczak", "Marek", "Markiewicz", "Markowska", "Marzec", "Masztak", "Matyjasik", "Mazur", "Mazura", "Mazurek", "Mazurkiewicz", "Michalak", "Michalik", "Michalska", "Mosio", "Mucha", "Nadolska", "Nakowicz", "Nawrocka", "Neuman", "Nicka", "Niwińska", "Noga", "Nowacka", "Nowak", "Nowakowska", "Nowicka", "Olejniczak", "Olejnik", "Olszeska", "Olszewska", "Omelko", "Osińska", "Osman", "Ossowska", "Ostrowska", "Owczarek", "Pałyszko", "Panfil", "Parszczyńska", "Partyka", "Pawlak", "Pawlik", "Pawłowska", "Pazda", "Piasecka", "Piecyk", "Piekarska", "Pietrasińska", "Pietrucha", "Pietrzak", "Piotrowska", "Plawgo", "Podolak", "Pokrop", "Polak", "Popowicz", "Pozorska", "Przeździecka", "Przybylska", "Psujek", "Pulaska", "Rabczewska", "Rabska", "Radecka", "Radtke", "Radwańska", "Radzikowska", "Rogowska", "Rokitowska", "Rómmel", "Rubik", "Rudzińska", "Rutkowska", "Rysiukiewicz", "Sadowska", "Samp", "Sarnicka", "Sawicka", "Schwarz", "Ścigaczewska", "Sienkiewicz", "Sikora", "Sikorska", "Simon", "Siwiec", "Skarga", "Skarzyńska", "Skiba", "Skowronek", "Skuherska", "Skupień", "Śmiałowska", "Śmiechowicz", "Smutniak", "Snochowska", "Sobczak", "Sobczyk", "Socha", "Sojka", "Sowa", "Środa", "Stankiewicz", "Starzak", "Stasiak", "Stępień", "Stępniak", "Stern", "Stolarczyk", "Struss", "Strzałkowska", "Strzelecka", "Suchoka", "Sudoł", "Sykut", "Szczepaniak", "Szczepkowska", "Szczęsna", "Szewczyk", "Szewińska", "Szordykowska", "Szost", "Szulc", "Szumiec", "Szwed", "Szydło", "Szydłowska", "Szymańska", "Szymczak", "Tarło", "Tarnowska", "Tokarska", "Toma", "Tomala", "Tomaszewska", "Tomczak", "Tomczyk", "Trybańska", "Trześniewska", "Tymieniecka", "Tyrmand", "Umiastowska", "Urban", "Urbaniak", "Urbaś", "Utrata", "Valkenier", "Vasa", "Walczak", "Wałęsa", "Wardak", "Wasilewska", "Wawrzyniak", "Wedler", "Węgrzecka", "Wesołowska", "Wiater", "Wieczorek", "Wielicka", "Wigura", "Wilk", "Wiśniewska", "Witek", "Witkowska", "Wladyka", "Włodarczyk", "Wójcicka", "Wojciechowska", "Wójcik", "Wojcika", "Wojtowicz", "Wolska", "Woniak", "Worek", "Woźniacka", "Woźniak", "Wróbel", "Wróbelska", "Wroblewska", "Wrona", "Wydrych", "Wyka", "Wyrwal", "Wysocka", "Zadrożna", "Zając", "Zajíc", "Zakrzewska", "Zalewska", "Zaremba", "Zawadzka", "Zdybicka", "Zielińska", "Ziober", "Ziubrak", "Żukowska", "Żuławska", "Zych", "Żyżyńska"];
-App.Data.misc.polishMaleSurnames = {"Adamowska": "Adamowski", "Adamska": "Adamski", "Babczyńska": "Babczyński", "Baranowska": "Baranowski", "Bereznowska": "Bereznowski", "Białobrzeska": "Białobrzeski", "Bielecka": "Bielecki", "Bielińska": "Bieliński", "Biskupska": "Biskupski", "Borkowska": "Borkowski", "Borowska": "Borowski", "Broniatowska": "Broniatowski", "Brzozowska": "Brzozowski", "Bukowska": "Bukowski", "Chewińska": "Chewiński", "Chmielewska": "Chmielewski", "Chmielowska": "Chmielowski", "Chojecka": "Chojecki", "Chojnacka": "Chojnacki", "Cichocka": "Cichocki", "Ciszewska": "Ciszewski", "Czapiewska": "Czapiewski", "Czarnecka": "Czarnecki", "Dąbrowska": "Dąbrowski", "Dibrowska": "Dibrowski", "Długołecka": "Długołecki", "Dombroska": "Dombroski", "Dragańska": "Dragański", "Dworakowska": "Dworakowski", "Gajewska": "Gajewski", "Gałecka": "Gałecki", "Gapińska": "Gapiński", "Gaworska": "Gaworski", "Giżyńska": "Giżyński", "Głowacka": "Głowacki", "Górska": "Górski", "Grabowska": "Grabowski", "Grudzińska": "Grudziński", "Guzowska": "Guzowski", "Horowska": "Horowski", "Jabłońska": "Jabłoński", "Jagodzińska": "Jagodziński", "Jakubowska": "Jakubowski", "Janicka": "Janicki", "Jankowska": "Jankowski", "Janowska": "Janowski", "Jaroska": "Jaroski", "Jarzyńska": "Jarzyński", "Jasińska": "Jasiński", "Jaworska": "Jaworski", "Kaczyńska": "Kaczyński", "Kalinowska": "Kalinowski", "Kamińska": "Kamiński", "Kiełbasińska": "Kiełbasiński", "Kolodziejska": "Kolodziejski", "Konieczna": "Konieczny", "Korczyńska": "Korczyński", "Korzeniowska": "Korzeniowski", "Kowalewska": "Kowalewski", "Kowalska": "Kowalski", "Kozłowska": "Kozłowski", "Kożuchowska": "Kożuchowski", "Krajewska": "Krajewski", "Krukowska": "Krukowski", "Krzesińska": "Krzesiński", "Kubicka": "Kubicki", "Kucharska": "Kucharski", "Kwaśniewska": "Kwaśniewski", "Kwaśniowska": "Kwaśniowski", "Kwiatkowska": "Kwiatkowski", "Laskowska": "Laskowski", "Lewandowska": "Lewandowski", "Maciejewska": "Maciejewski", "Majewska": "Majewski", "Makowska": "Makowski", "Malinowska": "Malinowski", "Maliszewska": "Maliszewski", "Markowska": "Markowski", "Michalska": "Michalski", "Nadolska": "Nadolski", "Nawrocka": "Nawrocki", "Nicka": "Nicki", "Niwińska": "Niwiński", "Nowacka": "Nowacki", "Nowakowska": "Nowakowski", "Nowicka": "Nowicki", "Olszeska": "Olszeski", "Olszewska": "Olszewski", "Osińska": "Osiński", "Ossowska": "Ossowski", "Ostrowska": "Ostrowski", "Parszczyńska": "Parszczyński", "Pawłowska": "Pawłowski", "Piasecka": "Piasecki", "Piekarska": "Piekarski", "Pietrasińska": "Pietrasiński", "Piotrowska": "Piotrowski", "Pozorska": "Pozorski", "Przeździecka": "Przeździecki", "Przybylska": "Przybylski", "Pulaska": "Pulaski", "Rabczewska": "Rabczewski", "Rabska": "Rabski", "Radecka": "Radecki", "Radwańska": "Radwański", "Radzikowska": "Radzikowski", "Rogowska": "Rogowski", "Rokitowska": "Rokitowski", "Rudzińska": "Rudziński", "Rutkowska": "Rutkowski", "Sadowska": "Sadowski", "Sarnicka": "Sarnicki", "Sawicka": "Sawicki", "Ścigaczewska": "Ścigaczewski", "Sikorska": "Sikorski", "Skarzyńska": "Skarzyński", "Skuherska": "Skuherski", "Śmiałowska": "Śmiałowski", "Snochowska": "Snochowski", "Strzałkowska": "Strzałkowski", "Strzelecka": "Strzelecki", "Szczepkowska": "Szczepkowski", "Szewińska": "Szewiński", "Szordykowska": "Szordykowski", "Szydłowska": "Szydłowski", "Szymańska": "Szymański", "Tarnowska": "Tarnowski", "Tokarska": "Tokarski", "Tomaszewska": "Tomaszewski", "Trybańska": "Trybański", "Trześniewska": "Trześniewski", "Tymieniecka": "Tymieniecki", "Umiastowska": "Umiastowski", "Wasilewska": "Wasilewski", "Węgrzecka": "Węgrzecki", "Wesołowska": "Wesołowski", "Wielicka": "Wielicki", "Winiewska": "Winiewski", "Wiśniewska": "Wiśniewski", "Witkowska": "Witkowski", "Wójcicka": "Wójcicki", "Wojciechowska": "Wojciechowski", "Wolska": "Wolski", "Woźniacka": "Woźniacki", "Wróbelska": "Wróbelski", "Wroblewska": "Wroblewski", "Wysocka": "Wysocki", "Zadrożna": "Zadrożny", "Zakrzewska": "Zakrzewski", "Zalewska": "Zalewski", "Zawadzka": "Zawadzki", "Zawadzka": "Zawadzky", "Zdybicka": "Zdybicki", "Zielińska": "Zieliński", "Żukowska": "Żukowski", "Żuławska": "Żuławski", "Żyżyńska": "Żyżyński"};
+App.Data.misc.polishMaleSurnames = {"Adamowska": "Adamowski", "Adamska": "Adamski", "Babczyńska": "Babczyński", "Baranowska": "Baranowski", "Bereznowska": "Bereznowski", "Białobrzeska": "Białobrzeski", "Bielecka": "Bielecki", "Bielińska": "Bieliński", "Biskupska": "Biskupski", "Borkowska": "Borkowski", "Borowska": "Borowski", "Broniatowska": "Broniatowski", "Brzozowska": "Brzozowski", "Bukowska": "Bukowski", "Chewińska": "Chewiński", "Chmielewska": "Chmielewski", "Chmielowska": "Chmielowski", "Chojecka": "Chojecki", "Chojnacka": "Chojnacki", "Cichocka": "Cichocki", "Ciszewska": "Ciszewski", "Czapiewska": "Czapiewski", "Czarnecka": "Czarnecki", "Dąbrowska": "Dąbrowski", "Dibrowska": "Dibrowski", "Długołecka": "Długołecki", "Dombroska": "Dombroski", "Dragańska": "Dragański", "Dworakowska": "Dworakowski", "Gajewska": "Gajewski", "Gałecka": "Gałecki", "Gapińska": "Gapiński", "Gaworska": "Gaworski", "Giżyńska": "Giżyński", "Głowacka": "Głowacki", "Górska": "Górski", "Grabowska": "Grabowski", "Grudzińska": "Grudziński", "Guzowska": "Guzowski", "Horowska": "Horowski", "Jabłońska": "Jabłoński", "Jagodzińska": "Jagodziński", "Jakubowska": "Jakubowski", "Janicka": "Janicki", "Jankowska": "Jankowski", "Janowska": "Janowski", "Jaroska": "Jaroski", "Jarzyńska": "Jarzyński", "Jasińska": "Jasiński", "Jaworska": "Jaworski", "Kaczyńska": "Kaczyński", "Kalinowska": "Kalinowski", "Kamińska": "Kamiński", "Kiełbasińska": "Kiełbasiński", "Kolodziejska": "Kolodziejski", "Konieczna": "Konieczny", "Korczyńska": "Korczyński", "Korzeniowska": "Korzeniowski", "Kowalewska": "Kowalewski", "Kowalska": "Kowalski", "Kozłowska": "Kozłowski", "Kożuchowska": "Kożuchowski", "Krajewska": "Krajewski", "Krukowska": "Krukowski", "Krzesińska": "Krzesiński", "Kubicka": "Kubicki", "Kucharska": "Kucharski", "Kwaśniewska": "Kwaśniewski", "Kwaśniowska": "Kwaśniowski", "Kwiatkowska": "Kwiatkowski", "Laskowska": "Laskowski", "Lewandowska": "Lewandowski", "Maciejewska": "Maciejewski", "Majewska": "Majewski", "Makowska": "Makowski", "Malinowska": "Malinowski", "Maliszewska": "Maliszewski", "Markowska": "Markowski", "Michalska": "Michalski", "Nadolska": "Nadolski", "Nawrocka": "Nawrocki", "Nicka": "Nicki", "Niwińska": "Niwiński", "Nowacka": "Nowacki", "Nowakowska": "Nowakowski", "Nowicka": "Nowicki", "Olszeska": "Olszeski", "Olszewska": "Olszewski", "Osińska": "Osiński", "Ossowska": "Ossowski", "Ostrowska": "Ostrowski", "Parszczyńska": "Parszczyński", "Pawłowska": "Pawłowski", "Piasecka": "Piasecki", "Piekarska": "Piekarski", "Pietrasińska": "Pietrasiński", "Piotrowska": "Piotrowski", "Pozorska": "Pozorski", "Przeździecka": "Przeździecki", "Przybylska": "Przybylski", "Pulaska": "Pulaski", "Rabczewska": "Rabczewski", "Rabska": "Rabski", "Radecka": "Radecki", "Radwańska": "Radwański", "Radzikowska": "Radzikowski", "Rogowska": "Rogowski", "Rokitowska": "Rokitowski", "Rudzińska": "Rudziński", "Rutkowska": "Rutkowski", "Sadowska": "Sadowski", "Sarnicka": "Sarnicki", "Sawicka": "Sawicki", "Ścigaczewska": "Ścigaczewski", "Sikorska": "Sikorski", "Skarzyńska": "Skarzyński", "Skuherska": "Skuherski", "Śmiałowska": "Śmiałowski", "Snochowska": "Snochowski", "Strzałkowska": "Strzałkowski", "Strzelecka": "Strzelecki", "Szczepkowska": "Szczepkowski", "Szewińska": "Szewiński", "Szordykowska": "Szordykowski", "Szydłowska": "Szydłowski", "Szymańska": "Szymański", "Tarnowska": "Tarnowski", "Tokarska": "Tokarski", "Tomaszewska": "Tomaszewski", "Trybańska": "Trybański", "Trześniewska": "Trześniewski", "Tymieniecka": "Tymieniecki", "Umiastowska": "Umiastowski", "Wasilewska": "Wasilewski", "Węgrzecka": "Węgrzecki", "Wesołowska": "Wesołowski", "Wielicka": "Wielicki", "Winiewska": "Winiewski", "Wiśniewska": "Wiśniewski", "Witkowska": "Witkowski", "Wójcicka": "Wójcicki", "Wojciechowska": "Wojciechowski", "Wolska": "Wolski", "Woźniacka": "Woźniacki", "Wróbelska": "Wróbelski", "Wroblewska": "Wroblewski", "Wysocka": "Wysocki", "Zadrożna": "Zadrożny", "Zakrzewska": "Zakrzewski", "Zalewska": "Zalewski", "Zawadzka": "Zawadzki", "Zdybicka": "Zdybicki", "Zielińska": "Zieliński", "Żukowska": "Żukowski", "Żuławska": "Żuławski", "Żyżyńska": "Żyżyński"};
 
 App.Data.misc.portugueseSlaveNames = ["Acácia", "Adalgisa", "Adela", "Adelaide", "Adelina", "Adriana", "Águeda", "Albertina", "Albina", "Alessandra", "Alexandra", "Alexandrina", "Aléxia", "Alfonsa", "Alfonsina", "Alice", "Aline", "Alódia", "Alvodia", "Amália", "Amanda", "Amândia", "Amarilis", "Amélia", "Amordeiza", "Amparo", "Ana Cláudia", "Ana Dulce", "Ana Flávia", "Ana Lúcia", "Ana Luiza", "Ana Maria", "Ana Paula", "Ana Rosa", "Ana", "Anabela", "Anastásia", "Andreia", "Andréia", "Andressa", "Andreza", "Ângela", "Angélica", "Anna", "Antígona", "Antônia", "Aparecida", "Arlete", "Armanda", "Arnalda", "Assunção", "Atena", "Augusta", "Aurélia", "Aurora", "Barbara Heliodora", "Barbara", "Bárbara", "Beatriz", "Bendita", "Benedita", "Bernarda", "Bernardete", "Betina", "Bianca", "Branca", "Brígida", "Bruna", "Calixta", "Camila", "Carina", "Carla", "Carlota", "Carmelinda", "Carmen", "Carmo", "Carolina", "Cassia", "Cassiana", "Cassilda", "Castália", "Catarina", "Caterina", "Catia", "Cátia", "Célia", "Celina", "Cesária", "Cibele", "Cilene", "Cinira", "Cíntia", "Clara", "Clarissa", "Cláudia", "Clementina", "Cloé", "Clotilde", "Conceição", "Constança", "Constantina", "Cornélia", "Creusa", "Cristiana", "Cristiane", "Cristina", "Dafine", "Dafne", "Dalila", "Dànae", "Dânia", "Daniela", "Débora", "Deise", "Délia", "Denise Aparecida", "Denise", "Desidéria", "Diana", "Digna", "Domingas", "Dores", "Doroteia", "Dorothé", "Dríope", "Dulce", "Edilene", "Edite", "Eduarda", "Elaine", "Elana", "Eleonor", "Eliana", "Elisa", "Elisabete", "Elisete", "Elma", "Elsa", "Elzira", "Ema", "Emanuela", "Emanuelita", "Emília", "Emiliana", "Enes", "Erica", "Erna", "Esmeralda", "Esperança", "Eva", "Evangelina", "Evelina", "Fábia", "Fabiana", "Fabricia", "Fátima", "Febe", "Felícia", "Felicidade", "Fernanda", "Filipa", "Filomena", "Flor", "Flora", "Francisca", "Gabriela", "Galateia", "Geisa", "Gema", "Genebra", "Genoveva", "Germana", "Gertrudes", "Gilda", "Giseli", "Gislaine", "Gláucia", "Gloria", "Graça", "Graciela", "Graciete", "Gracinda", "Graziela", "Griselda", "Guida", "Guilhermina", "Hadassa", "Helena", "Helenice", "Hélia", "Heliodora", "Heloísa", "Hermíone", "Hilária", "Idalina", "Ifigénia", "Ina", "Ines", "Inês", "Iria", "Isabel", "Isabela", "Isidora", "Iva", "Jacinta", "Jael", "Janaína", "Jessica", "Jéssica", "Joana", "Jordana", "Josefa", "Judite", "Júlia", "Juliana", "Julieta", "Júnia", "Justina", "Katia", "Laélia", "Laís", "Lara", "Larissa", "Laura", "Lavínia", "Leandra", "Lena", "Leonor", "Leonora", "Letícia", "Lia", "Liana", "Lídia", "Lígia", "Lília", "Lilian", "Liliana", "Lívia", "Lorena", "Lorène", "Luana", "Lucélia", "Lúcia", "Luciana", "Lucila", "Lucília", "Lucimara", "Lucrécia", "Ludovica", "Luísa", "Luiza", "Lurdes", "Luz", "Lúzia", "Madalena", "Mafalda", "Magda", "Manoela", "Manola", "Manuela", "Márcia", "Margarida", "Maria Antônia", "Maria da Graça", "Maria do Carmo", "Maria do Rosário", "Maria Helena", "Maria José", "Maria Madalena", "Maria", "Mariana", "Marie-Joseph", "Marie", "Mariluce", "Marina", "Marisa", "Marta", "Martina", "Martinha", "Matilde", "Maximiliana", "Melissa", "Melpômene", "Mercedes", "Milena", "Mina", "Míria", "Mônica", "Nádia", "Naide", "Narcisa", "Natália", "Nefele", "Neusa", "Neves", "Noemí", "Núria", "Ofélia", "Olávia", "Olga", "Olívia", "Ondina", "Ouroana", "Palmira", "Parténope", "Patricia", "Patrícia", "Paula", "Penélope", "Pilar", "Poliana", "Priscila", "Quintina", "Radegunda", "Raisa", "Ramona", "Raquel", "Rebeca", "Regina", "Renata", "Rita", "Rivinilda", "Ronalda", "Rosa", "Rosália", "Rosana", "Rosário", "Roseli", "Rosemeire", "Rosilene", "Rute", "Sabina", "Sabrina", "Salomé", "Sandra", "Sara", "Serafina", "Severina", "Shirlei", "Sibele", "Sibila", "Silmara", "Silvânia", "Sílvia", "Simona", "Simone", "Sofia", "Sol", "Solange", "Sónia", "Sônia", "Soraia", "Sueli", "Susana", "Suzana", "Tais", "Tália", "Tathiana", "Tatiana", "Telma", "Teodora", "Teresa", "Teresinha", "Tereza", "Thais", "Tina", "Trinidade", "Úrsula", "Valeria", "Vanessa", "Vânia", "Vera", "Verônica", "Vilma", "Viola", "Violeta", "Virginia", "Vitória", "Viviane", "Wanda", "Xântipe", "Ximena", "Zita", "Zoé"];
 App.Data.misc.portugueseMaleNames = ["Aarão", "Abel", "Adalberto", "Adão", "Adriano", "Adrião", "Afonso", "Agnaldo", "Agostinho", "Aílton", "Aírton", "Alan", "Alberto", "Alceu", "Alcindo", "Alcino", "Aldomiro", "Aleixo", "Alexandre", "Alfonso", "Alfredo", "Almiro", "Alonso", "Álvaro", "Amândio", "Amaro", "Ambrósio", "Américo", "André", "Andrónico", "Ângelo", "Antenor", "Antonio", "António", "Antônio", "Aparecido", "Aquiles", "Armando", "Armínio", "Arnaldo", "Arquimedes", "Arsenio", "Artur", "Augusto", "Baltasar", "Basílio", "Bastião", "Batista", "Belchior", "Belisário", "Benedito", "Benjamim", "Bento", "Bernardo", "Brandão", "Brás", "Braz", "Breno", "Bruno", "Caetano", "Caio", "Calebe", "Camilo", "Cândido", "Carlos", "Casimiro", "Cassiano", "Cássio", "Célio", "Celso", "César", "Ciro", "Cláudio", "Clóvis", "Conrado", "Constantim", "Constantino", "Cornélio", "Cosme", "Cristiano", "Cristóvão", "Damão", "Damião", "Daniel", "Davi", "David", "Décio", "Delfim", "Denis", "Deodato", "Desidério", "Diego", "Dinho", "Dinis", "Diocleciano", "Diogo", "Dionisio", "Dirceu", "Domingos", "Donato", "Duarte", "Durval", "Edgar", "Edi", "Edivaldo", "Edmundo", "Edson", "Eduardo", "Egídio", "Elias", "Eliseu", "Emanuel", "Emílio", "Enrique", "Enzo", "Érico", "Esdras", "Estêvão", "Evaristo", "Expedito", "Ezequias", "Ezequiel", "Fabiano", "Fabião", "Fábio", "Fabricio", "Faustino", "Fausto", "Feliciano", "Félix", "Fernando", "Fernão", "Filipe", "Firmino", "Flávio", "Floriano", "Francis", "Francisco", "Frederico", "Gabriel", "Galeno", "Garcia", "Gaspar", "Gaspard", "Gastão", "Gideão", "Gil", "Gilberto", "Gonçalo", "Gonçalves", "Gregório", "Guálter", "Gualtério", "Guilherme", "Gustavo", "Heitor", "Hélder", "Helio", "Henrique", "Hermano", "Hilário", "Hipólito", "Hugo", "Iago", "Igor", "Inácio", "Isaac", "Isaías", "Isaque", "Isidoro", "Ivan", "Ivo", "Jacó", "Jacob", "Jácomo", "Jaime", "Jair", "Jairo", "Jarede", "Jasão", "Jatori", "Jeremias", "Jerónimo", "João", "Joaquim", "Joel", "Jonas", "Jónatas", "Jonathan", "Jordão", "Jorge", "José Mario", "José", "Josué", "Judá", "Judas", "Juliano", "Julião", "Júlio", "Justino", "Kevin", "Lázaro", "Leandro", "Leão", "Lenine", "Leonardo", "Leónidas", "Leopoldo", "Lineu", "Lino", "Lisandro", "Lívio", "Lotário", "Lourenço", "Lucas", "Luciano", "Lúcio", "Ludovico", "Luís", "Luiz", "Manoel", "Manuel", "Marcelino", "Marcelo", "Márcio", "Marco", "Marcos", "Marcus", "Mariano", "Mario", "Mário", "Martim", "Martinho", "Mateus", "Matheus", "Matias", "Maurício", "Mauro", "Maximiliano", "Maximino", "Máximo", "Micael", "Miguel", "Miqueias", "Modesto", "Moisés", "Moreno", "Narciso", "Nataniel", "Nazário", "Neemias", "Nelson", "Néstor", "Nicolau", "Noé", "Nuno", "Odisseu", "Olavo", "Oliveiros", "Onésimo", "Órion", "Órionte", "Pablo", "Paolo", "Pascoal", "Patrício", "Patrique", "Paulino", "Paulo", "Pedro", "Pio", "Plácido", "Ponto", "Quim", "Quintino", "Quirino", "Radamés", "Rafael", "Raimundo", "Ramiro", "Rasul", "Raul", "Raúl", "Raymilson", "Reinaldo", "Remigio", "Renato", "Ricardo", "Roberto", "Rocque", "Rodolfo", "Rodrigo", "Rogério", "Romeu", "Ronaldinho", "Ronaldo", "Rúben", "Rui", "Salomão", "Salvador", "Samuel", "Sandro", "Sansão", "Santiago", "Saul", "Sebastião", "Sérgio", "Sete", "Severiano", "Severino", "Silvério", "Silvino", "Silvio", "Simão", "Simeão", "Tadeu", "Telmo", "Teodoro", "Teodósio", "Teófilo", "Tércio", "Thales", "Thiago", "Tiago", "Tiburcio", "Tito", "Tomás", "Tomaz", "Tomé", "Tristão", "Tsanko", "Ulisses", "Ulrico", "Urbano", "Urias", "Valdinei", "Valentim", "Vasco", "Vicente", "Victor", "Vinícius", "Vitor", "Vítor", "William", "Wilson", "Xavier", "Ximeno", "Yazaldes", "Zeferino", "Zéfiro"];
diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js
index ef5569ce3d36f0918f8bbaf253b305797b3b95fc..318ae6e3cd7cf2abffc2ec1fa3b64a39747c48a9 100644
--- a/js/003-data/policiesData.js
+++ b/js/003-data/policiesData.js
@@ -714,9 +714,9 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.customRetirementAge,
 								v => {
-									Math.clamp(v, 20, 120);
-									V.customRetirementAge = v;
-									V.retirementAge = v;
+									const age = Math.clamp(v, 20, 120);
+									V.customRetirementAge = age;
+									V.retirementAge = age;
 									policy("RetirementPolicies");
 								},
 								true
@@ -744,9 +744,9 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.customRetirementAge,
 								v => {
-									Math.clamp(v, 20, 120);
-									V.customRetirementAge = v;
-									V.retirementAge = v;
+									const age = Math.clamp(v, 20, 120);
+									V.customRetirementAge = age;
+									V.retirementAge = age;
 									policy("RetirementPolicies");
 								},
 								true
@@ -815,8 +815,7 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.policies.retirement.sex,
 								v => {
-									Math.clamp(v, 1, 10000000);
-									V.policies.retirement.sex = v;
+									V.policies.retirement.sex = Math.clamp(v, 1, 1e7);
 									policy("RetirementPolicies");
 								},
 								true
@@ -846,8 +845,7 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.policies.retirement.milk,
 								v => {
-									V.policies.retirement.milk = v;
-									Math.clamp(v, 1, 100000000);
+									V.policies.retirement.milk = Math.clamp(v, 1, 1e8);
 									policy("RetirementPolicies");
 								},
 								true
@@ -877,8 +875,7 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.policies.retirement.cum,
 								v => {
-									Math.clamp(v, 1, 1000000000);
-									V.policies.retirement.cum = v;
+									V.policies.retirement.cum = Math.clamp(v, 1, 1e9);
 									policy("RetirementPolicies");
 								},
 								true
@@ -908,8 +905,7 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.policies.retirement.births,
 								v => {
-									Math.clamp(v, 1, 1000000);
-									V.policies.retirement.births = v;
+									V.policies.retirement.births = Math.clamp(v, 1, 1e6);
 									policy("RetirementPolicies");
 								},
 								true
@@ -939,8 +935,7 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.policies.retirement.kills,
 								v => {
-									Math.clamp(v, 1, 1000000);
-									V.policies.retirement.kills = v;
+									V.policies.retirement.kills = Math.clamp(v, 1, 1e6);
 									policy("RetirementPolicies");
 								},
 								true
@@ -986,8 +981,8 @@ App.Data.Policies.Selection = {
 							App.UI.DOM.makeTextBox(
 								V.customMenialRetirementAge,
 								v => {
-									Math.clamp(v, 20, 120);
-									V.customMenialRetirementAge = v;
+									const age = Math.clamp(v, 20, 120);
+									V.customMenialRetirementAge = age;
 									V.customRetirementAge = Math.clamp(V.customRetirementAge, 20, V.customMenialRetirementAge);
 									if (V.customMenialRetirementAge < 45) {
 										V.retirementAge = V.customMenialRetirementAge;
@@ -1822,7 +1817,7 @@ App.Data.Policies.Selection = {
 				note: `Will improve your arcology's combat power during crises`
 			}
 		],
-	"arcologies[0].FSNeoImperialistLaw2": [
+		"arcologies[0].FSNeoImperialistLaw2": [
 			{
 				title: "Neo-Imperial Baronies",
 				titleClass: "lime",
diff --git a/sanityCheck.sh b/sanityCheck.sh
index aff3320c6c76a3aad61a208a83f0caa636ca9709..0b793fee70c6c9a98a6bd4623c6d31c4886900ed 100755
--- a/sanityCheck.sh
+++ b/sanityCheck.sh
@@ -40,7 +40,7 @@ $GREP -e "<<.*[(][^<>)]*[(][^<>)]*)\?[^<>)]*>>" -- "src/*" | myprint "MissingClo
 # Check for too many >>>.  e.g.: <</if>>>
 $GREP "<<[^<>]*[<>]\?[^<>]*>>>" -- "src/*.tw" | myprint "TooManyAngleBrackets"
 # Check for wrong capitalization on 'activeslave' and other common typos
-$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeStandard\|activeOrgan\|activeLimbs\|activeUnits\|activeCanine\|activeHooved\|activeFeline\|activeLurcher\)" -- "src/*" | myprint "WrongCapitilization"
+$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeOrgan\|activeLimbs\|activeUnits\|activeCanine\|activeHooved\|activeFeline\|activeLurcher\)" -- "src/*" | myprint "WrongCapitalization"
 # Check for strange spaces e.g.  $slaves[$i]. lips
 $GREP "\$slaves\[\$i\]\. " -- 'src/*' | myprint "MissingPropertyAfterSlaves"
 # Check using refreshmentType instead of refreshment
diff --git a/src/002-config/mousetrapConfig.js b/src/002-config/mousetrapConfig.js
index d1e1836a15d1bd3481c7bdf3ce2d981ea2cc4745..48b236a9b47a11481cba0ff54447ac3ff8ce5df5 100644
--- a/src/002-config/mousetrapConfig.js
+++ b/src/002-config/mousetrapConfig.js
@@ -12,19 +12,19 @@ App.UI.Hotkeys = (function() {
 
 	/**
 	 * The key is used in the hotkey settings to describe the action
-	 * @type {object.<string, action>}
+	 * @type {Object.<string, action>}
 	 */
 	const actions = {};
 
 	/**
 	 * Contains the default combinations for every action
-	 * @type {object.<string, Array<string>>}
+	 * @type {Object.<string, Array<string>>}
 	 */
 	const defaultCombinations = {};
 
 	/**
 	 * References a key combination to a set of actions
-	 * @type {object.<string, Array<string>>}
+	 * @type {Object.<string, Array<string>>}
 	 */
 	const bindings = {};
 
diff --git a/src/003-assets/CSS/links.css b/src/003-assets/CSS/links.css
index 654265f051a54e3cb206dd9788a6addd3fe4df5b..5ea75b9308265e8e8d462f309f020e44ac34d277 100644
--- a/src/003-assets/CSS/links.css
+++ b/src/003-assets/CSS/links.css
@@ -50,6 +50,7 @@ ul.choicesStrip {
 	display: inline;
 	list-style-type: none;
 	padding: 0mm;
+	margin-left: 0em;
 }
 
 ul.choicesStrip li {
diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 7147c506f9dc007781b18659031f2bd440021ffd..d2fe0cba2230875cb6619ece226227b7aabc91e2 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -411,7 +411,7 @@ App.Entity.Facilities.Facility = class {
 	 * @param {number} ID slave ID
 	 * @param {string} [job] generate link only for this job
 	 * @param {string} [passage]
-	 * @param {assignmentCallback} callback
+	 * @param {assignmentCallback} [callback]
 	 * @returns {HTMLElement[]}
 	 */
 	assignmentLinkElements(ID, job, passage, callback) {
diff --git a/src/004-base/organFarmBase.js b/src/004-base/organFarmBase.js
index b45827816d6271803bd6a41e96efc9172f88fcb0..52bd773f9369dc7e801332a70ef31a6aa945552c 100644
--- a/src/004-base/organFarmBase.js
+++ b/src/004-base/organFarmBase.js
@@ -1,19 +1,20 @@
 App.Medicine.OrganFarm.Organ = class {
 	/**
-	 * @param {string} type - unique type of organ, used as key
-	 * @param {string} name - display name
-	 * @param {string|function(App.Entity.SlaveState):string} tooltip - full sentence, uncapitalized and unpunctuated
-	 * @param {number} cost - how much it costs to grow the organ
-	 * @param {number} time - how long it takes to grow the organ (without upgrades)
-	 * @param {function(App.Entity.SlaveState):boolean} canGrow
-	 * @param {string[]} dependencies - organs that are implanted first if possible, use type of other organs as values
-	 * @param {App.Medicine.OrganFarm.OrganImplantAction[]} actions
-	 * @param {boolean} [displayMultipleActions=false] allow multiple implant links to be displayed
+	 * @param {Object} params
+	 * @param {string} params.type - unique type of organ, used as key
+	 * @param {string} params.name - display name
+	 * @param {string|function(App.Entity.SlaveState):string} params.tooltip - full sentence, uncapitalized and unpunctuated
+	 * @param {number} params.cost - how much it costs to grow the organ
+	 * @param {number} params.time - how long it takes to grow the organ (without upgrades)
+	 * @param {function(App.Entity.SlaveState):boolean} params.canGrow
+	 * @param {string[]} params.dependencies - organs that are implanted first if possible, use type of other organs as values
+	 * @param {App.Medicine.OrganFarm.OrganImplantAction[]} params.actions
+	 * @param {boolean} [params.displayMultipleActions=false] allow multiple implant links to be displayed
 	 */
 	constructor({
 		type, name, tooltip = "", cost, time, canGrow = () => true, dependencies = [],
 		displayMultipleActions = false, actions = []
-	} = {}) {
+	}) {
 		this.type = type;
 		this.name = name;
 		this.tooltip = tooltip;
@@ -33,18 +34,19 @@ App.Medicine.OrganFarm.Organ = class {
 
 App.Medicine.OrganFarm.OrganImplantAction = class {
 	/**
-	 * @param {string} name - display name
-	 * @param {string} tooltip - full sentence, uncapitalized and unpunctuated
-	 * @param {number} healthImpact
-	 * @param {string} surgeryType - for use with surgery degradation
-	 * @param {boolean} autoImplant
-	 * @param {function(App.Entity.SlaveState):boolean} canImplant
-	 * @param {function(App.Entity.SlaveState):string} implantError - message to show if this action cannot be used
-	 * @param {function(App.Entity.SlaveState)} implant
+	 * @param {object} params
+	 * @param {string} params.name - display name
+	 * @param {string} params.tooltip - full sentence, uncapitalized and unpunctuated
+	 * @param {number} params.healthImpact
+	 * @param {string} params.surgeryType - for use with surgery degradation
+	 * @param {boolean} params.autoImplant
+	 * @param {function(App.Entity.SlaveState):boolean} params.canImplant
+	 * @param {function(App.Entity.SlaveState):string} params.implantError - message to show if this action cannot be used
+	 * @param {function(App.Entity.SlaveState):void} params.implant
 	 */
 	constructor({
 		name, tooltip = "", healthImpact, surgeryType, autoImplant = true, canImplant, implantError, implant
-	} = {}) {
+	}) {
 		this.name = name;
 		this.tooltip = tooltip;
 		this.healthImpact = healthImpact;
@@ -62,7 +64,7 @@ App.Medicine.OrganFarm.OrganImplantAction = class {
 		this.implantError = implantError;
 		/**
 		 * Implant the organ
-		 * @type {function(App.Entity.SlaveState)}
+		 * @type {function(App.Entity.SlaveState):void}
 		 */
 		this.implant = implant;
 	}
diff --git a/src/Corporation/corporate-divisionBase.js b/src/Corporation/corporate-divisionBase.js
index de161794bec99286320e9b4d6431206666b068de..007c142b6dcdff7e78ede6fd75bfb2e7b78e3a9c 100644
--- a/src/Corporation/corporate-divisionBase.js
+++ b/src/Corporation/corporate-divisionBase.js
@@ -70,14 +70,18 @@ App.Corporate.Init_DivisionBase = function(shared) {
 		}
 
 		// abstract virtual
-		get fromMarket()					 { throw "Must be defined"; }
-		get toMarket()					   { throw "Must be defined"; }
-		get heldSlaves()					 { throw "Must be defined"; }
+		get fromMarket()					{ throw "Must be defined"; }
+		get toMarket()						{ throw "Must be defined"; }
+		/** @returns {number} */ // eslint-disable-line
+		get heldSlaves()					{ throw "Must be defined"; }
 		set heldSlaves(value)				{ throw "Must be defined"; }
-		get activeSlaves()				   { throw "Must be defined"; }
-		set activeSlaves(value)			  { throw "Must be defined"; }
+		/** @returns {number} */ // eslint-disable-line
+		get activeSlaves()					{ throw "Must be defined"; }
+		set activeSlaves(value)				{ throw "Must be defined"; }
+		/** @returns {number} */ // eslint-disable-line
 		get processRate()					{ throw "Must be defined"; }
-		get initialSlaveValue()			  { throw "Must be defined"; }
+		get initialSlaveValue()				{ throw "Must be defined"; }
+		/** @returns {number} */ // eslint-disable-line
 		get soldSlaveValue()				 { throw "Must be defined"; }
 		get slaveAction()					{ throw "Must be defined"; }
 		get nounFinishedSlave()			  { throw "Must be defined"; }
diff --git a/src/Corporation/corporateLedger.js b/src/Corporation/corporateLedger.js
index a01a12557afbb72e42f5568641040a4bd814c6c4..8865d2744e0bf2060123f5f16e4cad71155bc399 100644
--- a/src/Corporation/corporateLedger.js
+++ b/src/Corporation/corporateLedger.js
@@ -6,7 +6,7 @@
 App.Corporate.writeLedger = function(ledger, week) {
 	/** Add a row to the ledger
 	 * @param {HTMLElement} table
-	 * @param {string} cellType
+	 * @param {"th" | "td"} cellType
 	 * @param {string} caption
 	 * @param {number} [value]
 	 * @param {string|Node} [note]
diff --git a/src/Mods/SecExp/js/Unit.js b/src/Mods/SecExp/js/Unit.js
index 35fac5031ab627d3de6aa952931b21781ba3407a..b4df24b3aa03fd3db0fc08b394fe1a52bf674298 100644
--- a/src/Mods/SecExp/js/Unit.js
+++ b/src/Mods/SecExp/js/Unit.js
@@ -36,7 +36,7 @@ App.SecExp.bulkUpgradeUnit = function(unit) {
 		return Math.ceil(cost *= 1.1);
 	}
 
-	const price = unit.map(getCost).reduce((acc, cur) => acc + cur);
+	const price = unit.map(getCost).reduce((acc, cur) => acc + cur, 0);
 	if (price > 0) {
 		el.append(App.UI.DOM.link(`Bulk upgrade for ${cashFormat(price)}`, () => {
 			unit.map(upgradeUnit).reduce((acc, cur) => acc + cur);
diff --git a/src/Mods/SecExp/rebellionOptions.tw b/src/Mods/SecExp/rebellionOptions.tw
index 2beb68f41cfa56f302b4269418567016c0b672ff..8616b3b5c29f3b51ef81349ab1afff450c42be72 100644
--- a/src/Mods/SecExp/rebellionOptions.tw
+++ b/src/Mods/SecExp/rebellionOptions.tw
@@ -216,7 +216,7 @@ In order to preserve the structural integrity of the building and the lives of o
 		<br>Your troops will not limit their arsenal. This will put the structure and your citizens at risk, but our troops will be at full capacity.
 	<</replace>>
 <</link>>
-<<if $SecExp.buildings.riotCenter.advancedRiotEquip == 1>>
+<<if $SecExp.buildings.riotCenter && $SecExp.buildings.riotCenter.advancedRiotEquip == 1>>
 	<br><<link "Advanced riot protocol">>
 		<<set $engageRule = 3>>
 		<<replace "#engage">>
diff --git a/src/Mods/SecExp/rebellionReport.tw b/src/Mods/SecExp/rebellionReport.tw
index c627294c58f2b2ab368c5afafeb2fd84773e1901..382d12c303bc8d06a1b9abbe64aeb1d1fc0b78dc 100644
--- a/src/Mods/SecExp/rebellionReport.tw
+++ b/src/Mods/SecExp/rebellionReport.tw
@@ -482,10 +482,10 @@
 
 /* garrisons */
 <<if $garrison.reactor == 0>>
-	<<if random(1,100) <= (75 - ($SecExp.buildings.riotCenter.fort.reactor * 25))>>
+	<<if random(1,100) <= (75 - (($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.reactor : 0) * 25))>>
 		Unfortunately during the fighting a group of slaves infiltrated the reactor complex and sabotaged it, causing massive power fluctuations and blackouts.
 		It will take @@.red;time and money to repair the damage.@@
-		<<set $garrison.reactorTime = $repairTime + random(1) - $SecExp.buildings.riotCenter.fort.reactor, IncreasePCSkills('engineering', 0.1)>>
+		<<set $garrison.reactorTime = $repairTime + random(1) - ($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.reactor : 0), IncreasePCSkills('engineering', 0.1)>>
 		<<run cashX(-2000, "war")>>
 	<<else>>
 		While the reactor was left defenseless without a garrison, there was no attempt at sabotage. Let's hope we'll always be this lucky.
@@ -494,10 +494,10 @@
 	The garrison assigned to the reactor protected it from the multiple sabotage attempts carried out by the rebels.
 <</if>>
 <<if $garrison.waterway == 0>>
-	<<if random(1,100) <= (75 - ($SecExp.buildings.riotCenter.fort.waterway * 25))>>
+	<<if random(1,100) <= (75 - (($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.waterway : 0) * 25))>>
 		Unfortunately during the fighting a group of slaves infiltrated the water management complex and sabotaged it, causing huge water leaks throughout the arcology and severely limiting the water supply.
 		It will take @@.red;time and money to repair the damage.@@
-		<<set $garrison.waterwayTime = $repairTime + random(1) - $SecExp.buildings.riotCenter.fort.waterway, IncreasePCSkills('engineering', 0.1)>>
+		<<set $garrison.waterwayTime = $repairTime + random(1) - ($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.waterway : 0), IncreasePCSkills('engineering', 0.1)>>
 		<<run cashX(-2000, "war")>>
 	<<else>>
 		While the water management complex was left defenseless without a garrison, there was no attempt at sabotage. Let's hope we'll always be this lucky.
@@ -506,10 +506,10 @@
 	The garrison assigned to the water management complex protected it from the sabotage attempt of the rebels.
 <</if>>
 <<if $garrison.assistant == 0>>
-	<<if random(1,100) <= (75 - ($SecExp.buildings.riotCenter.fort.assistant * 25))>>
+	<<if random(1,100) <= (75 - (($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.assistant : 0) * 25))>>
 		Unfortunately during the fighting a group of slaves infiltrated the facility housing $assistant.name's mainframe and sabotaged it. Without its AI, the arcology will be next to impossible to manage.
 		It will take @@.red;time and money to repair the damage.@@
-		<<set $garrison.assistantTime = $repairTime + random(1) - $SecExp.buildings.riotCenter.fort.assistant, IncreasePCSkills('engineering', 0.1)>>
+		<<set $garrison.assistantTime = $repairTime + random(1) - ($SecExp.buildings.riotCenter ? $SecExp.buildings.riotCenter.fort.assistant : 0), IncreasePCSkills('engineering', 0.1)>>
 		<<run cashX(-2000, "war")>>
 	<<else>>
 		While the $assistant.name's mainframe was left defenseless without a garrison, there was no attempt at sabotage. Let's hope we'll always be this lucky.
@@ -900,4 +900,4 @@
 <</if>>
 <<set $slaveRebellion = 0>>
 <<set $citizenRebellion = 0>>
-<<set $SecExp.rebellions.tension = Math.clamp($SecExp.rebellions.tension - random(50,100), 0, 100)>>
+<<set $SecExp.rebellions.tension = Math.clamp($SecExp.rebellions.tension - random(50,100), 0, 100)>>
\ No newline at end of file
diff --git a/src/Mods/SecExp/secExpSmilingMan.tw b/src/Mods/SecExp/secExpSmilingMan.tw
index 308d1ed55ebd896cc66d6a9bd36df6440fa4f0df..be49839c51dfe122f665e0652fa06f3a3e6a064d 100644
--- a/src/Mods/SecExp/secExpSmilingMan.tw
+++ b/src/Mods/SecExp/secExpSmilingMan.tw
@@ -160,7 +160,7 @@
 		</p>
 	<</if>>
 	<p>
-		<<if $SecExp.buildings.secHub.upgrades.security.cyberBots == 1>>
+		<<if $SecExp.buildings.secHub && $SecExp.buildings.secHub.upgrades.security.cyberBots == 1>>
 			<<set _lostCash -= Math.min(30000, _lostCash)>>
 			The additional cyber defenses acquired and running in the security HQ <<if _lostCash < 200000>>further<</if>> limit the damage.
 		<</if>>
@@ -262,12 +262,14 @@
 				Vast amount of data relative to the ownership of the arcology is lost. You would've run the risk of losing ownership of one of the sectors, but fortunately your authority is so high your citizens do not dare question your claims even in the absence of a valid legal case.
 			<</if>>
 		<</if>>
-		<<if $SecExp.buildings.secHub.coldstorage > 3>>
-			Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology.
-		<<elseif $SecExp.buildings.secHub.coldstorage == 0>>
-			Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The <span class="red">security of the arcology is greatly reduced.</span> Criminals, on the other hand, with their past erased, cannot wait to join this new world, so <span class="red">crime will inevitably increase.</span>
-			<<set $SecExp.core.security = Math.clamp($SecExp.core.security * 0.2,0,100)>>
-			<<set $SecExp.core.crimeLow = Math.clamp($SecExp.core.crimeLow * 1.5, 20,100)>>
+		<<if $SecExp.buildings.secHub>>
+			<<if $SecExp.buildings.secHub.coldstorage > 3>>
+				Your cold storage facility has ensured that the Smiling Man's destruction of the primary archives was unable to damage the security of your arcology.
+			<<elseif $SecExp.buildings.secHub.coldstorage == 0>>
+				Your security department sees its archives butchered by the Smiling Man. Almost all data on criminals, citizens, and operations are lost. The <span class="red">security of the arcology is greatly reduced.</span> Criminals, on the other hand, with their past erased, cannot wait to join this new world, so <span class="red">crime will inevitably increase.</span>
+				<<set $SecExp.core.security = Math.clamp($SecExp.core.security * 0.2,0,100)>>
+				<<set $SecExp.core.crimeLow = Math.clamp($SecExp.core.crimeLow * 1.5, 20,100)>>
+			<</if>>
 		<</if>>
 	</p>
 	<p>
diff --git a/src/arcologyBuilding/apartments.js b/src/arcologyBuilding/apartments.js
index a49011743047ec78c4343550dc06dfd1c81d247d..40c8541b01ec3b93cb82b646cc9a54e18f76bfd7 100644
--- a/src/arcologyBuilding/apartments.js
+++ b/src/arcologyBuilding/apartments.js
@@ -120,7 +120,7 @@ App.Arcology.Cell.Apartment = class extends App.Arcology.Cell.BaseCell {
 	}
 
 	clone() {
-		return (new App.Arcology.Cell.Apartment())._init(this);
+		return (new App.Arcology.Cell.Apartment(this.owner))._init(this);
 	}
 
 	get className() { return "App.Arcology.Cell.Apartment"; }
diff --git a/src/arcologyBuilding/base.js b/src/arcologyBuilding/base.js
index 72f5005883418f8523a65fe9ada5e0636f4e679d..ad4ff6b74877c64f07a0922dbf59bf2bc68c0d01 100644
--- a/src/arcologyBuilding/base.js
+++ b/src/arcologyBuilding/base.js
@@ -12,7 +12,7 @@ App.Arcology.getCellLink = function(path, message) {
  * Intended for use on guaranteed single hits.
  *
  * @param {App.Arcology.Building} building
- * @param {class} cellClass
+ * @param {ObjectConstructor} cellClass
  * @param {*} cellType
  * @param {*} newType
  * @param {string} [key="type"]
diff --git a/src/arcologyBuilding/manufacturing.js b/src/arcologyBuilding/manufacturing.js
index 5833c14e3b14504f64e2467e62adaa0d04f07406..3e285e2392be96fb36e0c610c3a635ad645db876 100644
--- a/src/arcologyBuilding/manufacturing.js
+++ b/src/arcologyBuilding/manufacturing.js
@@ -274,7 +274,7 @@ App.Arcology.Cell.Manufacturing = class extends App.Arcology.Cell.BaseCell {
 	}
 
 	clone() {
-		return (new App.Arcology.Cell.Manufacturing())._init(this);
+		return (new App.Arcology.Cell.Manufacturing(this.owner))._init(this);
 	}
 
 	get className() {
diff --git a/src/arcologyBuilding/markets.js b/src/arcologyBuilding/markets.js
index cba926556c32453861bfd415ae747c5fb21c6a6e..83e1cadcc7755b773adf2c0b1d190591d0839ac0 100644
--- a/src/arcologyBuilding/markets.js
+++ b/src/arcologyBuilding/markets.js
@@ -149,7 +149,7 @@ App.Arcology.Cell.Market = class extends App.Arcology.Cell.BaseCell {
 	}
 
 	clone() {
-		return (new App.Arcology.Cell.Market())._init(this);
+		return (new App.Arcology.Cell.Market(this.owner))._init(this);
 	}
 
 	get className() { return "App.Arcology.Cell.Market"; }
diff --git a/src/arcologyBuilding/shops.js b/src/arcologyBuilding/shops.js
index 51a9fb0b36646b9d623211ce6de567a7312205a2..8428cfc67a6b6296539e7d89334b7873b2dc1776 100644
--- a/src/arcologyBuilding/shops.js
+++ b/src/arcologyBuilding/shops.js
@@ -716,7 +716,7 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 	}
 
 	clone() {
-		return (new App.Arcology.Cell.Shop())._init(this);
+		return (new App.Arcology.Cell.Shop(this.owner))._init(this);
 	}
 
 	get className() { return "App.Arcology.Cell.Shop"; }
diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js
index e5335eab38eab0e684dee427a2a83df32956a339..845fa668a406b936c1f525a6b855aca4913d2825 100644
--- a/src/art/vector/VectorArtJS.js
+++ b/src/art/vector/VectorArtJS.js
@@ -101,6 +101,8 @@ App.Art.makeVectorArtStyle = function(slave, artSize) {
 				outfitBaseColor = slave.clothingBaseColor || "#515351"; /* use custom color, or use default latex color */
 			} else if (slave.clothes === "a comfortable bodysuit") {
 				outfitBaseColor = slave.clothingBaseColor || "#464646"; /* use custom color, or use default bodysuit color */
+			} else if (slave.clothes === "a tight Imperial bodysuit") {
+				outfitBaseColor = slave.clothingBaseColor || "#464646"; /* use custom color, or use default bodysuit color */
 			}
 
 			/* head addons */
@@ -161,6 +163,13 @@ App.Art.makeVectorArtStyle = function(slave, artSize) {
 				skinColor = outfitBaseColor;
 				bellySkinStyle = `fill:${outfitBaseColor};`;
 				bellybuttonStyle = `fill:${outfitBaseColor};`;
+			} else if (slave.clothes === "a tight Imperial bodysuit") {
+				/* imperial bodysuit does not cover head. */
+				headSkinStyle = `fill:${skinColor};`;
+				/* rest of body is covered in bodysuit */
+				skinColor = outfitBaseColor;
+				bellySkinStyle = `fill:${outfitBaseColor};`;
+				bellybuttonStyle = `fill:${outfitBaseColor};`;
 			}
 			/* END SKIN COLOR OVERRIDES FOR LATEX CLOTHING EMULATION */
 
@@ -335,6 +344,7 @@ App.Art.makeVectorArtStyle = function(slave, artSize) {
 					bellySkinStyle = "fill:rgba(128,0,0,1);";
 					break;
 				case "battlearmor":
+				case "Imperial Plate":
 					scrotumSkinStyle = "fill:rgba(200,200,200,1);";
 					break;
 				case "striped underwear":
@@ -740,6 +750,7 @@ App.Art.vectorArtElement = (function() {
 				case "a ball gown":
 				case "a biyelgee costume":
 				case "a comfortable bodysuit":
+				case "a tight Imperial bodysuit":
 				case "a burkini":
 				case "a burqa":
 				case "a halter top dress":
@@ -776,6 +787,7 @@ App.Art.vectorArtElement = (function() {
 				// eslint-disable-next-line no-fallthrough
 				case "a cheerleader outfit":
 				case "battlearmor":
+				case "Imperial Plate":
 				case "battledress":
 				case "cutoffs and a t-shirt":
 				case "cutoffs":
@@ -894,6 +906,7 @@ App.Art.vectorArtElement = (function() {
 				case "a toga":
 				case "an apron":
 				case "battlearmor":
+				case "Imperial Plate":
 				case "battledress":
 				case "conservative clothing":
 				case "jeans":
@@ -1233,6 +1246,13 @@ App.Art.vectorArtElement = (function() {
 				if (hasLeftArm(slave)) {
 					svgQueue.add(`Art_Vector_Arm_Outfit_SchutzstaffelUniform_Left_${leftArmType}`);
 				}
+			case "Imperial Plate":
+				if (hasRightArm(slave)) {
+					svgQueue.add(`Art_Vector_Arm_Outfit_Battlearmor_Right_${rightArmType}`);
+				}
+				if (hasLeftArm(slave)) {
+					svgQueue.add(`Art_Vector_Arm_Outfit_Battlearmor_Left_${leftArmType}`);
+				}
 				break;
 			case "a hijab and abaya":
 			case "a niqab and abaya":
@@ -1290,7 +1310,6 @@ App.Art.vectorArtElement = (function() {
 			case "uncomfortable straps":
 			case "Western clothing":
 			case "a tight Imperial bodysuit":
-			case "Imperial Plate":
 				svgQueue.add("Art_Vector_Balls");
 		}
 	}
@@ -1353,8 +1372,6 @@ App.Art.vectorArtElement = (function() {
 				case "striped panties":
 				case "striped underwear":
 				case "uncomfortable straps":
-				case "a tight Imperial bodysuit":
-				case "Imperial Plate":
 					break; /* do nothing for these choices */
 				/* manually handle special cases */
 				case "a slutty schutzstaffel uniform":
@@ -1364,6 +1381,12 @@ App.Art.vectorArtElement = (function() {
 				case "a burqa":
 					svgQueue.add("Art_Vector_Belly_Outfit_HijabAndAbaya");
 					break;
+				case "Imperial Plate":
+					svgQueue.add("Art_Vector_Belly_Outfit_Battlearmor");
+					break;
+				case "a tight Imperial bodysuit":
+					svgQueue.add("Art_Vector_Belly_Outfit_ComfortableBodysuit");
+					break;
 				default:
 					svgQueue.add(`Art_Vector_Belly_Outfit_${clothing2artSuffix(slave.clothes)}`);
 			}
@@ -1430,8 +1453,6 @@ App.Art.vectorArtElement = (function() {
 			case "a succubus outfit":
 			case "a thong":
 			case "a toga":
-			case "a tight Imperial bodysuit":
-			case "Imperial Plate":
 			case "attractive lingerie for a pregnant woman":
 			case "body oil":
 			case "boyshorts":
@@ -1504,7 +1525,6 @@ App.Art.vectorArtElement = (function() {
 				case "a succubus outfit":
 				case "a thong":
 				case "a tight Imperial bodysuit":
-				case "Imperial Plate":
 				case "body oil":
 				case "boyshorts":
 				case "choosing her own clothes":
@@ -1530,6 +1550,9 @@ App.Art.vectorArtElement = (function() {
 				case "pasties":
 					svgQueue.add("Art_Vector_Boob_Outfit_PantiesAndPasties");
 					break;
+				case "Imperial Plate":
+					svgQueue.add("Art_Vector_Boob_Outfit_Battlearmor");
+					break;
 				default:
 					svgQueue.add(`Art_Vector_Boob_Outfit_${clothing2artSuffix(slave.clothes)}`);
 			}
@@ -1553,7 +1576,6 @@ App.Art.vectorArtElement = (function() {
 				case "a succubus outfit":
 				case "a thong":
 				case "a tight Imperial bodysuit":
-				case "Imperial Plate":
 				case "attractive lingerie":
 				case "attractive lingerie for a pregnant woman":
 				case "body oil":
@@ -1697,7 +1719,6 @@ App.Art.vectorArtElement = (function() {
 				case "a tube top":
 				case "a tube top and thong":
 				case "a tight Imperial bodysuit":
-				case "Imperial Plate":
 				case "an apron":
 				case "an oversized t-shirt":
 				case "attractive lingerie":
@@ -1723,7 +1744,7 @@ App.Art.vectorArtElement = (function() {
 						svgQueue.add("Art_Vector_Dildo_Short");
 					} else if (slave.vaginalAccessory === "long dildo") {
 						svgQueue.add("Art_Vector_Dildo_Long");
-					} else if (slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a string bikini" && slave.clothes !== "attractive lingerie for a pregnant woman" && slave.clothes !== "restrictive latex") {
+					} else if (slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a string bikini" && slave.clothes !== "attractive lingerie for a pregnant woman" && slave.clothes !== "restrictive latex" && slave.clothes !== "a tight Imperial bodysuit") {
 						if (slave.vaginalAccessory === "large dildo") { /* additional outfits disabled due to the art breaking with the larger accessories */
 							svgQueue.add("Art_Vector_Dildo_Large");
 						} else if (slave.vaginalAccessory === "long, large dildo") {
@@ -1873,7 +1894,6 @@ App.Art.vectorArtElement = (function() {
 			case "a tube top":
 			case "a tube top and thong":
 			case "a tight Imperial bodysuit":
-			case "Imperial Plate":
 			case "an oversized t-shirt":
 			case "attractive lingerie for a pregnant woman":
 			case "chains":
@@ -1903,10 +1923,14 @@ App.Art.vectorArtElement = (function() {
 		}
 		if (outfit !== undefined) {
 			if (hasAnyLegs(slave)) {
-				if (slave.clothes !== "a slutty qipao" && slave.clothes !== "harem gauze" && slave.clothes !== "slutty jewelry" && slave.clothes !== "Western clothing") { /* these clothes have a stump/leg outfit, but no butt outfit */
+				if (slave.clothes === "Imperial Plate"){
+					svgQueue.add(`Art_Vector_Butt_Outfit_Battlearmor_${buttSize}`);
+				} else if (slave.clothes !== "a slutty qipao" && slave.clothes !== "harem gauze" && slave.clothes !== "slutty jewelry" && slave.clothes !== "Western clothing") { /* these clothes have a stump/leg outfit, but no butt outfit */
 					svgQueue.add(`Art_Vector_Butt_Outfit_${outfit}_${buttSize}`);
 				}
-				if (slave.clothes !== "a schoolgirl outfit") { /* file is there, but contains no artwork */
+				if (slave.clothes === "Imperial Plate"){
+					svgQueue.add(`Art_Vector_Leg_Outfit_Battlearmor_${legSize}`);
+				} else if (slave.clothes !== "a schoolgirl outfit") { /* file is there, but contains no artwork */
 					svgQueue.add(`Art_Vector_Leg_Outfit_${outfit}_${legSize}`);
 				}
 			} else {
@@ -1943,6 +1967,7 @@ App.Art.vectorArtElement = (function() {
 					case "a slutty nurse outfit":
 					case "a slutty schutzstaffel uniform":
 					case "battlearmor":
+					case "Imperial Plate":
 					case "restrictive latex":
 					case "Western clothing":
 						break; /* do nothing */
@@ -2019,6 +2044,7 @@ App.Art.vectorArtElement = (function() {
 					case "a slutty nurse outfit":
 					case "a slutty schutzstaffel uniform":
 					case "battlearmor":
+					case "Imperial Plate":
 					case "restrictive latex":
 					case "Western clothing":
 						break; /* do nothing */
@@ -2578,6 +2604,9 @@ App.Art.vectorArtElement = (function() {
 				case "Western clothing":
 					svgQueue.add(`Art_Vector_Head_Outfit_${clothing2artSuffix(slave.clothes)}`);
 					break;
+				case "Imperial Plate":
+					svgQueue.add("Art_Vector_Head_Outfit_Battlearmor");
+					break;
 				case "a schutzstaffel uniform":
 				case "a slutty schutzstaffel uniform":
 					svgQueue.add("Art_Vector_Head_Outfit_SchutzstaffelUniform");
@@ -2703,12 +2732,74 @@ App.Art.vectorArtElement = (function() {
 					case "bushy":
 						svgQueue.add("Art_Vector_Pubic_Hair_Underarm_Bushy");
 				}
+			} else if (slave.clothes !== "a tight Imperial bodysuit") {
+				switch (slave.pubicHStyle) {
+					case "bald":
+					case "hairless":
+					case "waxed":
+						/* commented out to save on rendering time
+						svgQueue.add("Art_Vector_Pubic_Hair_None");
+						*/
+						break;
+					case "strip":
+					case "in a strip":
+						if (torsoSize === "Obese" || torsoSize === "Fat") {
+							svgQueue.add("Art_Vector_Pubic_Hair_StripFat");
+						} else {
+							svgQueue.add("Art_Vector_Pubic_Hair_Strip");
+						}
+						break;
+					case "neat":
+						if (torsoSize === "Obese" || torsoSize === "Fat") {
+							svgQueue.add("Art_Vector_Pubic_Hair_NeatFat");
+						} else {
+							svgQueue.add("Art_Vector_Pubic_Hair_Neat");
+						}
+						break;
+					case "bushy in the front and neat in the rear":
+						if (torsoSize === "Obese" || torsoSize === "Fat") {
+							svgQueue.add("Art_Vector_Pubic_Hair_BushFat");
+						} else {
+							svgQueue.add("Art_Vector_Pubic_Hair_Bush");
+						}
+						break;
+					case "bushy":
+						if (torsoSize === "Obese" || torsoSize === "Fat") {
+							svgQueue.add("Art_Vector_Pubic_Hair_BushyFat");
+						} else {
+							svgQueue.add("Art_Vector_Pubic_Hair_Bushy");
+						}
+						break;
+					case "very bushy":
+						if (torsoSize === "Obese" || torsoSize === "Fat") {
+							svgQueue.add("Art_Vector_Pubic_Hair_Very_BushyFat");
+						} else {
+							svgQueue.add("Art_Vector_Pubic_Hair_Very_Bushy");
+						}
+				}
+				switch (slave.underArmHStyle) {
+					case "hairless":
+					case "waxed":
+					case "bald":
+						/* commented out to save on rendering time
+						svgQueue.add("Art_Vector_Pubic_Hair_Underarm_None");
+						*/
+						break;
+					case "shaved":
+						svgQueue.add("Art_Vector_Pubic_Hair_Underarm_Shaved");
+						break;
+					case "neat":
+						svgQueue.add("Art_Vector_Pubic_Hair_Underarm_Neat");
+						break;
+					case "bushy":
+						svgQueue.add("Art_Vector_Pubic_Hair_Underarm_Bushy");
+				}
 			}
 		}
 	}
 
 	function ArtVectorPussy() {
-		if (slave.vagina >= 0 && slave.clothes !== "a latex catsuit" && slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a cybersuit") {
+		if (slave.vagina >= 0 && slave.clothes !== "a latex catsuit" && slave.clothes !== "a comfortable bodysuit" && slave.clothes !== "a cybersuit" && slave.clothes !== "a tight Imperial bodysuit") {
 			svgQueue.add("Art_Vector_Pussy");
 		}
 	}
@@ -2731,8 +2822,6 @@ App.Art.vectorArtElement = (function() {
 			case "a t-shirt":
 			case "a tank-top":
 			case "a tube top":
-			case "a tight Imperial bodysuit":
-			case "Imperial Plate":
 			case "an oversized t-shirt":
 			case "attractive lingerie":
 			case "body oil":
@@ -2791,8 +2880,6 @@ App.Art.vectorArtElement = (function() {
 			case "overalls":
 			case "pasties":
 			case "petite admi outfit":
-			case "a tight Imperial bodysuit":
-			case "Imperial Plate":
 				break; /* no torso outfit */
 			/* manually handle special cases */
 			case "a cybersuit":
@@ -2805,6 +2892,12 @@ App.Art.vectorArtElement = (function() {
 			case "a burqa":
 				svgQueue.add(`Art_Vector_Torso_Outfit_HijabAndAbaya_${torsoSize}`);
 				break;
+			case "Imperial Plate":
+				svgQueue.add(`Art_Vector_Torso_Outfit_Battlearmor_${torsoSize}`);
+				break;
+			case "a tight Imperial bodysuit":
+				svgQueue.add(`Art_Vector_Torso_Outfit_ComfortableBodysuit_${torsoSize}`);
+				break;
 			default:
 				svgQueue.add(`Art_Vector_Torso_Outfit_${clothing2artSuffix(slave.clothes)}_${torsoSize}`);
 		}
diff --git a/src/endWeek/reports/personalAttention.js b/src/endWeek/reports/personalAttention.js
index 6b19c8e728e50b4fb319da522d6c0ae6cf978608..bbe8dcb0aae1eb2d99400a44db52ddc7c2e7af2c 100644
--- a/src/endWeek/reports/personalAttention.js
+++ b/src/endWeek/reports/personalAttention.js
@@ -1041,7 +1041,7 @@ globalThis.personalAttention = (function() {
 							r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates women.`, "red"));
 							slave.behavioralFlaw = "hates women";
 						}
-					} else if ((seed > 70) && (slave.sexualFlaw !== "odd")) {
+					} else if ((seed > 70) && (slave.behavioralFlaw !== "odd")) {
 						r.push(`This abuse has changed ${him} a bit;`);
 						r.push(App.UI.DOM.makeElement("span", `${he} has begun to act strangely.`, "red"));
 						slave.behavioralFlaw = "odd";
diff --git a/src/endWeek/saBeYourHeadGirl.js b/src/endWeek/saBeYourHeadGirl.js
index 4c53355fca5c236e1ee3f4a0f0783ec276c51d26..46c674721f230d797a8e412737c42615ff17686f 100644
--- a/src/endWeek/saBeYourHeadGirl.js
+++ b/src/endWeek/saBeYourHeadGirl.js
@@ -269,7 +269,7 @@ App.SlaveAssignment.beYourHeadGirl = (function() {
 		if (V.HGTimeInGrade + ((slave.intelligence + slave.intelligenceImplant) / 10) + (slave.devotion / 10) + (slave.trust / 10) > 50) {
 			r.push(`${slave.slaveName} has rendered such long and competent service as your Head Girl that many of your citizens have come to rely on ${his} word as an extension of yours, trusting that if ${he} does something, it's because you trust ${him} to. <span class="green">${He} has become prestigious on ${his} own merits, a remarkable achievement for a slave!</span>`);
 			slave.prestige += 1;
-			slave.prestigeDesc = `Many citizens respect ${his} long and able service as your Head Girl.`;
+			slave.prestigeDesc = `Many citizens respect $his long and able service as your Head Girl.`;
 		}
 	}
 
diff --git a/src/endWeek/saGetMilked.js b/src/endWeek/saGetMilked.js
index 32dc00a66e6b154f70dcf4e7b33abb715914341e..950fd99856c62eec6e192d83cc272c60270b071d 100644
--- a/src/endWeek/saGetMilked.js
+++ b/src/endWeek/saGetMilked.js
@@ -646,7 +646,7 @@ App.SlaveAssignment.getMilked = (function() {
 		}
 
 		r.fluidSale = (r.fluid * jsRandom(40, 50));
-		r.text += ` ${capFirstChar(numberWithPluralOne(r.cum, "deciliter"))} of uncommon ejaculate is gathered during ${his} milkings.`;
+		r.text += ` ${capFirstChar(numberWithPluralOne(r.fluid, "deciliter"))} of uncommon ejaculate is gathered during ${his} milkings.`;
 		if (arcology.FSPastoralist !== "unset" && arcology.FSPastoralist > 30) {
 			r.fluidSale = (Math.trunc(r.fluidSale*(1 + (arcology.FSPastoralist - 30) / 140))); /* fully accepted pastoralism gives +50% on the price*/
 			r.text += ` Because of your arcology's cultural preferences, it comes with extra value.`;
diff --git a/src/endWeek/saPorn.js b/src/endWeek/saPorn.js
index 0a584229d3cde97b1a575b7f6fd00cf7aeb419ba..94711f4940b5d0aa6970bb20f851fa102c515279 100644
--- a/src/endWeek/saPorn.js
+++ b/src/endWeek/saPorn.js
@@ -325,7 +325,7 @@ App.SlaveAssignment.porn = (function() {
 				slave.porn.fameType = genre.fameName;
 				slave.porn.prestige = 1;
 
-				r += `<span class="green">${He} has gained a following in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc1}, but ${he} isn't famous enough to be called prestigious yet. `;
+				r += `<span class="green">${He} has gained a following in ${slave.porn.fameType} pornography!</span> ${pronounsForSlaveProp(slave, genre.prestigeDesc1)}, but ${he} isn't famous enough to be called prestigious yet. `;
 				slave.porn.prestigeDesc = `$He has a following in slave pornography. ${genre.prestigeDesc1}.`;
 				if (genre.type === App.Porn.GenreType.fetish && slave.fetishKnown !== 1) {
 					slave.fetishKnown = 1;
@@ -337,7 +337,7 @@ App.SlaveAssignment.porn = (function() {
 			if (slave.porn.fame[genre.fameVar] >= 50000) {
 				slave.porn.prestige = 2;
 				slave.porn.prestigeDesc = `$He is well known from $his career in slave pornography. ${genre.prestigeDesc2}.`;
-				r += `<span class="green">${He} has gained a hold in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc2}, so it is now prestigious to own ${him}. `;
+				r += `<span class="green">${He} has gained a hold in ${slave.porn.fameType} pornography!</span> ${pronounsForSlaveProp(slave, genre.prestigeDesc2)}, so it is now prestigious to own ${him}. `;
 			} else if (slave.porn.fame[highestPorn.fameVar] >= slave.porn.fame[genre.fameVar] * swapPoint) {
 				r += `${His} fame in ${slave.porn.fameType} pornography has been overwhelmed by ${his} surging popularity in other aspects. <span class="yellow">${He} is now better known for ${his} ${highestPorn.fameName} porn.</span> `;
 				slave.porn.fameType = highestPorn.fameName;
@@ -356,7 +356,7 @@ App.SlaveAssignment.porn = (function() {
 				slave.porn.viewerCount = 250000;
 				V.pornStars[genre.fameVar].p3ID = slave.ID;
 				slave.porn.prestigeDesc = `$He is world famous for $his career in slave pornography. ${genre.prestigeDesc3}.`;
-				r += `<span class="green">${He} has become world famous for ${his} career in ${slave.porn.fameType} pornography!</span> ${genre.prestigeDesc3}, so it is now extremely prestigious to own ${him}. `;
+				r += `<span class="green">${He} has become world famous for ${his} career in ${slave.porn.fameType} pornography!</span> ${pronounsForSlaveProp(slave, genre.prestigeDesc3)}, so it is now extremely prestigious to own ${him}. `;
 				V.trinkets.push(`a framed shot from porn starring ${slave.slaveName} ${genre.trinketShotDesc(slave)}`);
 
 				r += `Further paid publicity cannot increase ${his} fame, so subsidy of porn featuring ${him} has stopped. `;
diff --git a/src/gui/storyCaption.js b/src/gui/storyCaption.js
index 9d64c30ba8dc8d7a1c8c895e5bdd882f5e20b60e..a06d7cad81f40bc6dfb88cb17c42f799b7a6d28b 100644
--- a/src/gui/storyCaption.js
+++ b/src/gui/storyCaption.js
@@ -179,12 +179,8 @@ App.UI.storyCaption = function() {
 			const foodDiv2 = document.createElement("div");
 			foodDiv2.append("(");
 			const foodDiff = (V.food - V.foodLastWeek);
-			if (foodDiff < 0) {
-				App.UI.DOM.appendNewElement("span", foodDiv2, `-${massFormat(foodDiff)}`, "red");
-			} else {
-				App.UI.DOM.appendNewElement("span", foodDiv2, `-${massFormat(foodDiff)}`, "chocolate");
-			}
-			foodDiv2.append("since last week)");
+			App.UI.DOM.appendNewElement("span", foodDiv2, massFormat(foodDiff), foodDiff < 0 ? "red" : "chocolate");
+			foodDiv2.append(" since last week)");
 			fragment.append(foodDiv2);
 		}
 
diff --git a/src/interaction/budgets/recordTemplates.js b/src/interaction/budgets/recordTemplates.js
index 9876f622f5a7fef72e533005e9f678771fd98209..c1d5764885f19bad727f8d8a8f026389598f03cc 100644
--- a/src/interaction/budgets/recordTemplates.js
+++ b/src/interaction/budgets/recordTemplates.js
@@ -173,6 +173,7 @@ App.Data.Records.LastWeeksRep = function() {
 	this.servantsQuarters = 0;
 	this.spa = 0;
 
+	this.shows = 0;	// e.g. Farmyard shows, etc
 	this.architecture = 0;
 
 	// Policies
diff --git a/src/interaction/main/useGuard.js b/src/interaction/main/useGuard.js
index 427c4a1697f1ed99955d5a2100bd092543ed441a..edcb84865e20ef164ccc8a20ce6cea168f067a50 100644
--- a/src/interaction/main/useGuard.js
+++ b/src/interaction/main/useGuard.js
@@ -182,7 +182,7 @@ App.Interact.guardPose = function(slave) {
 		case "a comfortable bodysuit":
 			r += `${His} bodysuit and weapons make ${him} look like an action movie heroine.`;
 			break;
-		case "a tight Impeiral bodysuit":
+		case "a tight Imperial bodysuit":
 			r += `${His} form-fitting bodysuit and weapons make ${him} look like an action movie heroine, an elegant mesh of pulsating cybernetics and tight nanomesh that rides up tightly against ${his} every curve.`;
 			break;
 		case "a burkini":
diff --git a/src/interaction/siDescription.js b/src/interaction/siDescription.js
index 50e62da56199304467ca45e263a5966d28c7cd75..7122453cbf018beb712563bb5896c8a3b910642c 100644
--- a/src/interaction/siDescription.js
+++ b/src/interaction/siDescription.js
@@ -55,7 +55,4 @@ App.UI.SlaveInteract.description = function(slave) {
 			);
 		}
 	}
-	function refresh() {
-		jQuery("#si-description").empty().append(description());
-	}
 };
diff --git a/src/interaction/siFinancial.js b/src/interaction/siFinancial.js
index 8a278a7ea6fdc2cd83381d3b5ddb9e9d757c714c..66410744c330f944daf76057e73630898fc08c76 100644
--- a/src/interaction/siFinancial.js
+++ b/src/interaction/siFinancial.js
@@ -229,7 +229,7 @@ App.UI.SlaveInteract.financial = function(slave) {
 		linkArray.push(
 			App.UI.DOM.passageLink(
 				`Export this slave`,
-				"Export this slave",
+				"Export Slave",
 			)
 		);
 		if (V.cheatMode) {
diff --git a/src/interaction/siModify.js b/src/interaction/siModify.js
index 11f52477e4c8a234ff52ad57aa030ba2f5984a52..21effcd53d69fc9ff12bf7c551332e9173387727 100644
--- a/src/interaction/siModify.js
+++ b/src/interaction/siModify.js
@@ -56,4 +56,4 @@ App.UI.SlaveInteract.modify = function(slave) {
 	}
 
 	return el;
-};
\ No newline at end of file
+};
diff --git a/src/interaction/siRules.js b/src/interaction/siRules.js
index 3e8af1a0547b59e298f9afb2b1bee3682cc9f1d5..49300c6a81fdc6e5135cba0ebd1ee02c260dcbda 100644
--- a/src/interaction/siRules.js
+++ b/src/interaction/siRules.js
@@ -306,7 +306,7 @@ App.UI.SlaveInteract.rules = function(slave) {
 				let links = document.createElement('div');
 				links.append(`${text}: `);
 				links.append(status(_.get(slave, setting), master));
-				links.appendChild(App.UI.SlaveInteract.generateRows(options, slave));
+				links.appendChild(App.UI.SlaveInteract.generateRows(options, slave, "", false, refresh));
 				links.className = "choices";
 				el.append(links);
 			}
@@ -375,10 +375,10 @@ App.UI.SlaveInteract.rules = function(slave) {
 				selected.style.fontWeight = "bold";
 			}
 
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Level", level, slave);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Body part", bodyPart, slave);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "BDSM", BDSM, slave);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Gender", gender, slave);
+			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Level", level, slave, refresh);
+			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Body part", bodyPart, slave, refresh);
+			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "BDSM", BDSM, slave, refresh);
+			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Gender", gender, slave, refresh);
 
 			return el;
 		}
diff --git a/src/interaction/siUtilities.js b/src/interaction/siUtilities.js
index 88504c48ee5fce2f52bb385c1402a7148dbae3b2..017d7ff0e79708e6334bacca3782bc7913f240cd 100644
--- a/src/interaction/siUtilities.js
+++ b/src/interaction/siUtilities.js
@@ -39,7 +39,7 @@ App.UI.SlaveInteract.placeInLine = function(slave) {
  * @param {string} label
  * @param {RowItem[]} array
  * @param {App.Entity.SlaveState} slave
- * @param {Function} [refresh]
+ * @param {Function} refresh
  */
 App.UI.SlaveInteract.appendLabeledChoiceRow = function(parent, label, array, slave, refresh) {
 	if (array.length > 0) {
@@ -56,25 +56,13 @@ App.UI.SlaveInteract.appendLabeledChoiceRow = function(parent, label, array, sla
  * @param {App.Entity.SlaveState} slave
  * @param {string} [category] - should be in the form of slave.category, the thing we want to update.
  * @param {boolean} [accessCheck=false]
- * @param {Function} [refresh]
+ * @param {Function} refresh
  * @returns {HTMLSpanElement}
  */
 App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck = false, refresh) {
 	const linkArray = [];
 	for (let i = 0; i < array.length; i++) {
 		let link;
-		const keys = Object.keys(array[i]);
-
-		// Test to see if there was a problem with the key
-		for (let j = 0; j < keys.length; j++) {
-			if (["FS", "text", "updateSlave", "update", "note", "disabled"].includes(keys[j])) {
-				continue;
-			} else {
-				array[i].text += " ERROR, THIS SCENE WAS NOT ENTERED CORRECTLY";
-				console.log("Trash found while generateRows() was running: " + keys[j] + ": " + array[i][keys[j]]);
-				break;
-			}
-		}
 		// Some items will never be in App.Data.slaveWear, especially "none" if it falls in between harsh and nice data sets. Trying to look it up would cause an error, which is what access check works around.
 		let unlocked = false;
 		if (accessCheck === true) {
@@ -129,14 +117,6 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck
 		if (arrayOption.update) {
 			Object.assign(V, arrayOption.update);
 		}
-		if (typeof refresh === "function") {
-			refresh();
-		} else {
-			App.UI.SlaveInteract.refreshAll(slave);
-		}
+		refresh();
 	}
 };
-
-App.UI.SlaveInteract.refreshAll = function(slave) {
-	App.UI.SlaveInteract.custom(slave);
-};
diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js
index d1de52c34a104653706ec5db657ee69174033d23..7beac876dd4183bcb234acd3cf5b18c120e03e77 100644
--- a/src/interaction/siWork.js
+++ b/src/interaction/siWork.js
@@ -670,13 +670,13 @@ App.UI.SlaveInteract.work = function(slave) {
 						let frag = App.UI.DOM.renderPassage(sexOption.scene);
 
 						// Refresh (clears scene display)
-						App.UI.SlaveInteract.refreshAll(slave);
+						refresh();
 
 						// Display scene render results
 						$("#mini-scene").append(frag);
 					} else {
 						// just refresh
-						App.UI.SlaveInteract.refreshAll(slave);
+						refresh();
 					}
 				}
 			}
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index a7d3dd2f015e31757ee2fe7f2498b6f595c232a0..b8f8a24514e40c47c61380f010b636d5055fab9a 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -10,15 +10,20 @@
  */
 App.Entity.ReleaseRulesState = class ReleaseRulesState {
 	constructor() {
-		/** Can the slave masturbate? */
+		/** Can the slave masturbate?
+		 * @type {FC.Bool} */
 		this.masturbation = 0;
-		/** Can the slave fuck her romantic partner (relationship = FWB or higher)? */
+		/** Can the slave fuck her romantic partner (relationship = FWB or higher)?
+		 * @type {FC.Bool} */
 		this.partner = 0;
-		/** Can the slave fuck her close family members (siblings/parents/children)? */
+		/** Can the slave fuck her close family members (siblings/parents/children)?
+		 * @type {FC.Bool} */
 		this.family = 0;
-		/** Can the slave fuck the general slave population? */
+		/** Can the slave fuck the general slave population?
+		 * @type {FC.Bool} */
 		this.slaves = 0;
-		/** Will the master allow her to solicit sex from him? */
+		/** Will the master allow her to solicit sex from him?
+		 * @type {FC.Bool} */
 		this.master = 1;
 	}
 };
@@ -34,6 +39,7 @@ App.Entity.RuleState = class RuleState {
 		 * * "spare"
 		 * * "normal"
 		 * * "luxurious"
+		 * @type {FC.Rules.Living}
 		 */
 		this.living = "spare";
 		/**
@@ -42,12 +48,14 @@ App.Entity.RuleState = class RuleState {
 		 * * "restrictive"
 		 * * "permissive"
 		 * * "mandatory"
+		 * @type {FC.Rules.Rest}
 		 */
 		this.rest = "restrictive";
 		/**
 		 * Is the slave allowed to use mobility aids
 		 * * "restrictive"
 		 * * "permissive"
+		 * @type {FC.Rules.Mobility}
 		 */
 		this.mobility = "restrictive";
 		/**
@@ -55,6 +63,7 @@ App.Entity.RuleState = class RuleState {
 		 * * "permissive"
 		 * * "accent elimination"
 		 * * "language lessons"
+		 * @type {FC.Rules.Speech}
 		 */
 		this.speech = "restrictive";
 		/** release rules */
@@ -63,12 +72,14 @@ App.Entity.RuleState = class RuleState {
 		 * * "restrictive"
 		 * * "just friends"
 		 * * "permissive"
+		 * @type {FC.Rules.Relationship}
 		 */
 		this.relationship = "restrictive";
 		/**
 		 * * "none"
 		 * * "induce"
 		 * * "maintain"
+		 * @type {FC.Rules.Lactation}
 		 */
 		this.lactation = "none";
 		/**
@@ -76,6 +87,7 @@ App.Entity.RuleState = class RuleState {
 		 * * "whipping"
 		 * * "chastity"
 		 * * "situational"
+		 * @type {FC.Rules.Punishment}
 		 */
 		this.punishment = "situational";
 		/**
@@ -83,6 +95,7 @@ App.Entity.RuleState = class RuleState {
 		 * * "drugs"
 		 * * "orgasm"
 		 * * "situational"
+		 * @type {FC.Rules.Reward}
 		 */
 		this.reward = "situational";
 	}
@@ -96,7 +109,8 @@ App.Entity.RuleState = class RuleState {
 App.Entity.SlavePornPerformanceState = class {
 	constructor() {
 		/** is the studio outputting porn of her?
-		 * 0: no; 1: yes */
+		 * 0: no; 1: yes
+		 * @type {FC.Bool} */
 		this.feed = 0;
 		/** how famous her porn is? */
 		this.viewerCount = 0;
@@ -111,7 +125,7 @@ App.Entity.SlavePornPerformanceState = class {
 		 */
 		this.prestige = 0;
 		/** description to go with @see pornPrestige
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.prestigeDesc = 0;
 
 		/** what porn she is known for */
@@ -332,7 +346,7 @@ App.Entity.SlaveCustomAddonsState = class SlaveCustomAddonsState {
 		 * holds the custom hair vector base file name
 		 *
 		 * used if vector images are enabled
-		 * @type {number|string}
+		 * @type {FC.Zeroable<string>}
 		 */
 		this.hairVector = 0;
 	}
@@ -460,14 +474,15 @@ App.Entity.SlaveState = class SlaveState {
 		/** Slave's current name */
 		this.slaveName = "blank";
 		/** Slave's current surname
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.slaveSurname = 0;
 		/** slave's original name */
 		this.birthName = "blank";
 		/** slave's original surname
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.birthSurname = 0;
-		/** slave sex ("XX", "XY") */
+		/** slave sex ("XX", "XY")
+		 * @type {FC.GenderGenes} */
 		this.genes = "XX";
 		/** @type {number} */
 		this.pronoun = App.Data.Pronouns.Kind.female;
@@ -476,10 +491,10 @@ App.Entity.SlaveState = class SlaveState {
 		 * _0: Obtained prior to game start / at game start_ */
 		this.weekAcquired = 0;
 		/** slave's origin
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.origin = 0;
 		/** career prior to enslavement
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.career = 0;
 		/** slave's ID */
 		this.ID = 0;
@@ -490,7 +505,7 @@ App.Entity.SlaveState = class SlaveState {
 		/** rules */
 		this.rules = new App.Entity.RuleState();
 		/** reason for prestige
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.prestigeDesc = 0;
 		/**
 		 * slave's relationship
@@ -503,6 +518,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * 3: friends with benefits with relationshipTarget
 		 * * 4: lover with relationshipTarget
 		 * * 5: relationshipTarget 's slave wife
+		 * @type {FC.RelationShipKind}
 		 */
 		this.relationship = 0;
 		/** target of relationship (ID) */
@@ -513,6 +529,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * 1: dislikes rivalryTarget
 		 * * 2: rival of rivalryTarget
 		 * * 3: bitterly hates rivalryTarget
+		 * @type {FC.RivalryType}
 		 */
 		this.rivalry = 0;
 		/** target of rival (ID) */
@@ -531,7 +548,7 @@ App.Entity.SlaveState = class SlaveState {
 		this.canRecruit = 0;
 		/**
 		 * can slave choose own assignment
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.choosesOwnAssignment = 0;
 		/** slave's assignment */
@@ -540,14 +557,16 @@ App.Entity.SlaveState = class SlaveState {
 		this.sentence = 0;
 		/** how far along slave is with being trained (skills, flaws, quirks) */
 		this.training = 0;
-		/** which hole to focus on when serving you */
+		/** which hole to focus on when serving you
+		 * @type {FC.ToyHole} */
 		this.toyHole = "all her holes";
 		/**
 		 * How long her servitude will be.
 		 *
 		 * -1: not; 0+: number of weeks remaining */
 		this.indenture = -1;
-		/** 2: complete protection; 1: some protection; 0: no protection */
+		/** 2: complete protection; 1: some protection; 0: no protection
+		 * @type {FC.IndentureType} */
 		this.indentureRestrictions = 0;
 		/** week she was born (int between 0-51) */
 		this.birthWeek = jsRandom(0, 51);
@@ -559,7 +578,8 @@ App.Entity.SlaveState = class SlaveState {
 		this.physicalAge = 18;
 		/** How old her ovaries are. (used to trick menopause) */
 		this.ovaryAge = 18;
-		/** has had facial surgery to reduce age. 0: no, 1: yes */
+		/** has had facial surgery to reduce age. 0: no, 1: yes
+		 * @type {FC.Bool} */
 		this.ageImplant = 0;
 		this.health = {
 			/**
@@ -663,13 +683,16 @@ App.Entity.SlaveState = class SlaveState {
 		 */
 		this.height = 170;
 		/** slave has height implant
-		 * -1: -10 cm, 0: none, 1: +10 cm */
+		 * -1: -10 cm, 0: none, 1: +10 cm
+		 * @type {FC.HeightImplant} */
 		this.heightImplant = 0;
 		/** slave's nationality */
 		this.nationality = "slave";
-		/** slave's race */
+		/** slave's race
+		 * @type {FC.Race} */
 		this.race = "white";
-		/** slave's original race */
+		/** slave's original race
+		 * @type {FC.Race} */
 		this.origRace = "white";
 		/**
 		 * slave markings
@@ -677,6 +700,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "birthmark"
 		 * * "freckles"
 		 * * "heavily freckled"
+		 * @type {FC.Markings}
 		 */
 		this.markings = "none";
 		/**
@@ -684,22 +708,27 @@ App.Entity.SlaveState = class SlaveState {
 		 * @type {App.Entity.EyeState}
 		 */
 		this.eye = new App.Entity.EyeState();
-		/** "none", "glasses", "blurring glasses", "corrective glasses", "blurring contacts", "corrective contacts" */
+		/** "none", "glasses", "blurring glasses", "corrective glasses", "blurring contacts", "corrective contacts"
+		 * @type {FC.EyeWear} */
 		this.eyewear = "none";
 		/** slave hearing
-		 *
+		 * @type {FC.Hearing}
 		 * -2: deaf; -1: hard of hearing; 0: normal */
 		this.hears = 0;
-		/** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs" */
+		/** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs"
+		 * @type {FC.EarWear} */
 		this.earwear = "none";
 		/** is there an inner ear implant device
-		 * 0: no; 1: yes */
+		 * 0: no; 1: yes
+		 * @type {FC.Bool} */
 		this.earImplant = 0;
 		/** the shape of their outer ears
-		 * "none", "damaged", "normal", "pointy", "elven", "ushi" */
+		 * "none", "damaged", "normal", "pointy", "elven", "ushi"
+		 * @type {FC.EarShape} */
 		this.earShape = "normal";
 		/** type of kemonomimi ears if any
-		 * "neko", "inu", "kit", "tanuki", "usagi" */
+		 * "neko", "inu", "kit", "tanuki", "usagi"
+		 * @type {FC.EarTypeKemonomimi}*/
 		this.earT = "none";
 		/** kemonomimi ear color
 		 * "hairless" */
@@ -711,21 +740,25 @@ App.Entity.SlaveState = class SlaveState {
 		0 - yes, -1 - no */
 		this.tastes = 0;
 		/** horn type if any
-		 * "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */
+		 * "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns"
+		 * @type {FC.HornType} */
 		this.horn = "none";
 		/** horn color */
 		this.hornColor = "none";
 		/** type of tail installed
-		 * "none", "mod", "combat", "sex"*/
+		 * "none", "mod", "combat", "sex"
+		 * @type {FC.TailType}*/
 		this.tail = "none";
 		/**
 		 * Does she have a tail interface installed
 		 * * 0: no
 		 * * 1: yes
+		 * @type {FC.Bool}
 		 */
 		this.PTail = 0;
 		/** the current shape of their modular tail
-		 * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma" */
+		 * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma"
+		 * @type {FC.TailShape} */
 		this.tailShape = "none";
 		/** tail color */
 		this.tailColor = "none";
@@ -761,6 +794,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "tapered"
 		 * * "thick"
 		 * * "bushy"
+		 * @type {FC.EyebrowThickness}
 		 */
 		this.eyebrowFullness = "natural";
 		/** hair style */
@@ -782,7 +816,8 @@ App.Entity.SlaveState = class SlaveState {
 		 * * -96-: absurd
 		 */
 		this.waist = 0;
-		/** series of rings up the back that can be tied together. 0: no, 1: yes */
+		/** series of rings up the back that can be tied together. 0: no, 1: yes
+		 * @type {FC.Bool} */
 		this.corsetPiercing = 0;
 		/**
 		 * What level of prosthetic interface she has installed
@@ -806,7 +841,7 @@ App.Entity.SlaveState = class SlaveState {
 			right: new App.Entity.LimbState()
 		};
 		/** are heels clipped
-		 *
+		 * @type {FC.Bool}
 		 * 0: no, 1: yes */
 		this.heels = 0;
 		/** slave voice
@@ -818,7 +853,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * 0: no; 1: yes, high; -1: yes, low */
 		this.voiceImplant = 0;
 		/** has cybernetic voicebox
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.electrolarynx = 0;
 		/**
@@ -902,6 +937,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "fillable"
 		 * * "advanced fillable"
 		 * * "hyper fillable"
+		 * @type {FC.SizingImplantType}
 		 */
 		this.boobsImplantType = "none";
 		/**
@@ -912,6 +948,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "torpedo-shaped"
 		 * * "downward-facing"
 		 * * "wide-set"
+		 * @type {FC.BreastShape}
 		 */
 		this.boobShape = "normal";
 		/**
@@ -923,10 +960,12 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "cute"
 		 * * "partially inverted"
 		 * * "fuckable"
+		 * @type {FC.NippleShape}
 		 */
 		this.nipples = "cute";
 		/**
 		 * nipple are pierced
+		 * @type {FC.PiercingType}
 		 * @default 0
 		 * 0: none; 1: yes; 2: heavily */
 		this.nipplesPiercing = 0;
@@ -937,6 +976,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * 0: normal; 1: large; 2: unusually wide; 3: huge, 4: massive */
 		this.areolae = 0;
 		/** edge of areolae are pierced
+		 * @type {FC.PiercingType}
 		 * @default 0
 		 * 0: none; 1: yes; 2: heavy */
 		this.areolaePiercing = 0;
@@ -1026,6 +1066,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "fillable"
 		 * * "advanced fillable"
 		 * * "hyper fillable"
+		 * @type {FC.SizingImplantType}
 		 */
 		this.buttImplantType = "none";
 		/**
@@ -1045,7 +1086,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.buttTat = 0;
 		/**
 		 * face attractiveness
@@ -1096,7 +1137,7 @@ App.Entity.SlaveState = class SlaveState {
 		this.lipsImplant = 0;
 		/**
 		 * lips pierced
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.lipsPiercing = 0;
 		/**
@@ -1130,11 +1171,12 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "fang"
 		 * * "baby"
 		 * * "mixed"
+		 * @type {FC.TeethType}
 		 */
 		this.teeth = "normal";
 		/**
 		 * has tongue piercing
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.tonguePiercing = 0;
 		/**
@@ -1153,7 +1195,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * 0: dry; 1: wet; 2: soaking wet */
 		this.vaginaLube = 0;
 		/** has vagina piercing
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.vaginaPiercing = 0;
 		/**
@@ -1235,7 +1277,7 @@ App.Entity.SlaveState = class SlaveState {
 		this.wombImplant = "none";
 		/**
 		 * Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period
-		 *
+		 * @type {FC.Bool}
 		 * * 0: no
 		 * * 1: yes
 		 */
@@ -1320,6 +1362,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * 1: yes
 		 * * 2: heavy
 		 * * 3: smart
+		 * @type {FC.ClitoralPiercingType}
 		 */
 		this.clitPiercing = 0;
 		/**
@@ -1340,6 +1383,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "dom"
 		 * * "masochist"
 		 * * "sadist"
+		 * @type {FC.SmartPiercingSetting}
 		 */
 		this.clitSetting = "vanilla";
 		/** 0: circumcised; 1+:uncut, also affects foreskin size */
@@ -1376,6 +1420,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * 0: no
 		 * * 1: yes
 		 * * 2: heavy
+		 * @type {FC.PiercingType}
 		 */
 		this.dickPiercing = 0;
 		/**
@@ -1395,7 +1440,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.dickTat = 0;
 		/**
 		 * does the slave have a prostate?
@@ -1430,11 +1475,11 @@ App.Entity.SlaveState = class SlaveState {
 		 */
 		this.scrotum = 0;
 		/** has ovaries
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.ovaries = 0;
 		/** has anus piercing
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.anusPiercing = 0;
 		/**
@@ -1453,7 +1498,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.anusTat = 0;
 		/**
 		 * has makeup
@@ -1488,19 +1533,19 @@ App.Entity.SlaveState = class SlaveState {
 		 * @type {Object.<string, string>} */
 		this.brand = {};
 		/** has pierced ears
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.earPiercing = 0;
 		/** has pierced nose
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.nosePiercing = 0;
 		/** has eyebrow piercing
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.eyebrowPiercing = 0;
 		/** has navel piercing
-		 *
+		 * @type {FC.PiercingType}
 		 * 0: no; 1: yes; 2: heavy */
 		this.navelPiercing = 0;
 		/**
@@ -1520,7 +1565,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.shouldersTat = 0;
 		/**
 		 * arm tattoo
@@ -1539,7 +1584,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.armsTat = 0;
 		/**
 		 * leg tattoo
@@ -1558,7 +1603,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.legsTat = 0;
 		/**
 		 * back tattoo
@@ -1577,7 +1622,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.backTat = 0;
 		/**
 		 * tramp stamp
@@ -1596,7 +1641,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "Sacrilege"
 		 * * "Possessive"
 		 * * "Paternalist"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.stampTat = 0;
 		/** follows rules or is exempt from them
 		 *
@@ -1615,6 +1660,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "cum production"
 		 * * "cleansing"
 		 * * "fertility"
+		 * @type {FC.Diet}
 		 */
 		this.diet = "healthy";
 		/** how much of her diet is cum
@@ -1665,6 +1711,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "butt redistributors"
 		 * * "sag-B-gone"
 		 * * "growth stimulants"
+		 * @type {FC.Drug}
 		 */
 		this.drugs = "no drugs";
 		/** 0: none; 1: preventatives; 2: curatives */
@@ -1685,7 +1732,8 @@ App.Entity.SlaveState = class SlaveState {
 		 *
 		 * 0: not; 1+: Fuckdoll */
 		this.fuckdoll = 0;
-		/** 0: no; 1: yes */
+		/** 0: no; 1: yes
+		 * @type {FC.Bool} */
 		this.choosesOwnClothes = 0;
 		/**
 		 * may accept strings, use at own risk
@@ -1881,18 +1929,21 @@ App.Entity.SlaveState = class SlaveState {
 		 * whether the slave has a chastity device on their anus
 		 * 0 - no
 		 * 1 - yes
+		 * @type {FC.Bool}
 		 */
 		this.chastityAnus = 0;
 		/**
 		 * whether the slave has a chastity device on their penis
 		 * 0 - no
 		 * 1 - yes
+		 * @type {FC.Bool}
 		 */
 		this.chastityPenis = 0;
 		/**
 		 * whether the slave has a chastity device on their vagina
 		 * 0 - no
 		 * 1 - yes
+		 * @type {FC.Bool}
 		 */
 		this.chastityVagina = 0;
 		/**
@@ -2018,6 +2069,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "masochist"
 		 * * "dom"
 		 * * "pregnancy"
+		 * @type {FC.Fetish}
 		 */
 		this.fetish = "none";
 		/** how strong her fetish is (10-100)
@@ -2025,7 +2077,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */
 		this.fetishStrength = 70;
 		/** is fetish known to player
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.fetishKnown = 0;
 		/**
@@ -2039,6 +2091,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "anorexic": dislikes eating and being forced to eat, loses weight
 		 * * "devout": resistance through religious faith
 		 * * "liberated": believes slavery is wrong
+		 * @type {FC.BehavioralFlaw}
 		 */
 		this.behavioralFlaw = "none";
 		/**
@@ -2052,6 +2105,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "insecure": defines herself on the thoughts of others
 		 * * "sinful": breaks cultural norms
 		 * * "advocate": advocates slavery
+		 * @type {FC.BehavioralQuirk}
 		 */
 		this.behavioralQuirk = "none";
 		/**
@@ -2074,6 +2128,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "malicious": loves causing pain and suffering
 		 * * "self hating": hates herself
 		 * * "breeder": addicted to being pregnant
+		 * @type {FC.SexualFlaw}
 		 */
 		this.sexualFlaw = "none";
 		/**
@@ -2087,10 +2142,12 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "caring": enjoys bring her partners to orgasm
 		 * * "unflinching": willing to do anything
 		 * * "size queen": prefers big cocks
+		 * @type {FC.SexualQuirk}
 		 */
 		this.sexualQuirk = "none";
 		/** 0: does not have; 1: carrier; 2: active
 		 * * heterochromia is an exception. String = active
+		 * @type {FC.GeneticQuirks}
 		 */
 		this.geneticQuirks = {
 			/** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */
@@ -2145,7 +2202,7 @@ App.Entity.SlaveState = class SlaveState {
 		/** Values provided by players */
 		this.custom = new App.Entity.SlaveCustomAddonsState();
 		/** Does this slave refer to you rudely?
-		 *
+		 * @type {FC.Bool}
 		 * 0: not being rude; 1: insists on calling you a rude title */
 		this.rudeTitle = 0;
 		/** @type {string[]} */
@@ -2155,7 +2212,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "a heart"
 		 * * "a star"
 		 * * "a butterfly"
-		 * @type {string|number} */
+		 * @type {FC.Zeroable<string>} */
 		this.bellyTat = 0;
 		/**
 		 * Slave has a series of tattoos to denote how many abortions she has had.
@@ -2172,11 +2229,11 @@ App.Entity.SlaveState = class SlaveState {
 		 */
 		this.birthsTat = -1;
 		/** Slave will give birth this week.
-		 *
+		 * @type {FC.Bool}
 		 * 1: true; 0: false */
 		this.induce = 0;
 		/** Male slave has an anal womb and can get pregnant.
-		 *
+		 * @type {FC.Bool}
 		 * 1: true; 0: false */
 		this.mpreg = 0;
 		/** How much fluid is distending the slave.
@@ -2194,6 +2251,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "curative"
 		 * * "tightener"
 		 * * "urine"
+		 * @type {FC.InflationLiquid}
 		 */
 		this.inflationType = "none";
 		/**
@@ -2209,11 +2267,11 @@ App.Entity.SlaveState = class SlaveState {
 		/** If inflationMethod 3, ID of the slave filling her with cum. */
 		this.cumSource = 0;
 		/** Slave's internals have ruptured. Used with poor health and overinflation.
-		 *
+		 * @type {FC.Bool}
 		 * 1: true; 0: false */
 		this.burst = 0;
 		/** Do you and the slave know she is pregnant.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.pregKnown = 0;
 		/** How long she has been pregnant
@@ -2312,13 +2370,13 @@ App.Entity.SlaveState = class SlaveState {
 		/** Target .physicalAge for female puberty to occur. */
 		this.pubertyAgeXX = 13;
 		/** Has the slave gone through female puberty.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.pubertyXX = 0;
 		/** Target .physicalAge for male puberty to occur. */
 		this.pubertyAgeXY = 13;
 		/** Has the slave gone through male puberty.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.pubertyXY = 0;
 		/**
@@ -2330,24 +2388,24 @@ App.Entity.SlaveState = class SlaveState {
 		this.scar = {};
 		/**
 		 * In a eugenics society, this slave is a designated breeder.
-		 *
+		 * @type {FC.Bool}
 		 * * 1: yes
 		 * * 0: no */
 		this.breedingMark = 0;
 		/** Is the PC permitted to fuck this slave pregnant.
 		 *  MB Cattle Ranch bulls will ignore this.
-		 *
+		 * @type {FC.Bool}
 		 * * 0: no
 		 * * 1: yes */
 		this.PCExclude = 0;
 		/** Is the Head Girl permitted to fuck this slave pregnant.
-		 *
+		 * @type {FC.Bool}
 		 * * 0: no
 		 * * 1: yes */
 		this.HGExclude = 0;
 		/** Is the Stud permitted to fuck this slave pregnant.
 		 *  MB Cattle Ranch bulls will ignore this.
-		 *
+		 * @type {FC.Bool}
 		 * * 0: no
 		 * * 1: yes */
 		this.StudExclude = 0;
@@ -2359,6 +2417,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "pig"
 		 * * "horse"
 		 * * "cow"
+		 * @type {FC.AnimalKind}
 		 */
 		this.ballType = "human";
 		/**
@@ -2368,10 +2427,11 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "pig"
 		 * * "horse"
 		 * * "cow"
+		 * @type {FC.AnimalKind}
 		 */
 		this.eggType = "human";
 		/** Eugenics variable. Is the slave allowed to choose to wear chastity.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.choosesOwnChastity = 0;
 		/**
@@ -2380,6 +2440,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "slow gestation"
 		 * * "speed up"
 		 * * "labor suppressors"
+		 * @type {FC.WithNone<FC.GestationDrug>}
 		 */
 		this.pregControl = "none";
 		/**
@@ -2392,7 +2453,7 @@ App.Entity.SlaveState = class SlaveState {
 		/** */
 		this.ageAdjust = 0;
 		/** Slave has undergone hair removal surgery
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.bald = 0;
 		/** Slave is in original body.
@@ -2424,31 +2485,31 @@ App.Entity.SlaveState = class SlaveState {
 		 */
 		this.hormoneBalance = 0;
 		/** Whether a slave is permitted to eat Hedonistic Decadence's specialized slave food.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.onDiet = 0;
 		/** Does the slave have the breast shape maintaining mesh implant.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.breastMesh = 0;
 		/** Used to denote a slave giving birth prematurely.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.prematureBirth = 0;
 		/** Was the slave born prematurely?
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.premature = 0;
 		/** Has the slave had a vasectomy?
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.vasectomy = 0;
 		/** Is the slave's hair under constant maintenance?
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.haircuts = 0;
 		/** Used to tell if the slave is from this game or a previous.
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.newGamePlus = 0;
 		/** Her skills */
@@ -2458,7 +2519,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * 0: no; 1: yes, comforting; 2: yes, terrifying */
 		this.tankBaby = 0;
 		/** Is the slave a clone?
-		 *
+		 * @type {FC.Bool}
 		 * 0: no; 1: yes */
 		this.clone = 0;
 		/** ID she was cloned from */
@@ -2466,15 +2527,15 @@ App.Entity.SlaveState = class SlaveState {
 		/** */
 		this.geneMods = {
 			/** Does slave have induced NCS?
-			 *
+			 * @type {FC.Bool}
 			 * 0: no; 1: yes */
 			NCS: 0,
 			/** Has the slave undergone the elasticity (plasticity) treatment?
-			 *
+			 * @type {FC.Bool}
 			 * 0: no; 1: yes */
 			rapidCellGrowth: 0,
 			/** Is the slave immortal?
-			 *
+			 * @type {FC.Bool}
 			 * 0: no; 1: yes */
 			immortality: 0
 		};
diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js
index f0b4f8f07a5473c6e929dc5f9930b5ecf38851da..5352d71408195bfce3e0eef68bbe63567dae93b4 100644
--- a/src/js/birth/birth.js
+++ b/src/js/birth/birth.js
@@ -243,7 +243,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 						if (slave.fetish === "mindbroken") {
 							r.push(`While getting milked, ${slave.slaveName}'s water breaks.`);
 						} else if (slave.geneticQuirks.uterineHypersensitivity === 2) {
-							r.push(`While getting milked, ${slave.slaveName}'s water breaks, a moment she anxiously waited for${(slave.counter.birthsTotal > 0) ? `no matter how many times it happened before` : ``}.`);
+							r.push(`While getting milked, ${slave.slaveName}'s water breaks, a moment she anxiously awaited${(slave.counter.birthsTotal > 0) ? `, no matter how many times it's happened before` : ``}.`);
 						} else {
 							r.push(`While getting milked, ${slave.slaveName}'s water breaks,`);
 							if (V.dairyPregSetting > 0) {
@@ -1005,7 +1005,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 						if (slave.fetish === "mindbroken") {
 							r.push(`${He} shows little interest and continues kneading ${his} breasts. Instinctively ${he} begins to push out ${his} ${babies}. ${He} pays no heed to ${his} ${children} being removed from the milking stall, instead focusing entirely on draining ${his} breasts.`);
 						} else if (slave.geneticQuirks.uterineHypersensitivity === 2) {
-							r.push(`${He} begins to push out ${his} ${babies} orgasming during the whole process. By the time ${he} regains ${his} senses ${his} ${children} have already been removed from the milking stall.`);
+							r.push(`${He} begins to push out ${his} ${babies}, orgasming throughout the whole process. By the time ${he} regains ${his} senses ${his} ${children} have already been removed from the milking stall.`);
 						} else {
 							r.push(`${He} begins to push out ${his} ${babies}. ${He} catches`);
 							if (canSee(slave)) {
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index d806f4083fb6f1a5768f838af26fae48867b1ac8..57e039ba0bd7807dd429bb617a5b98eab179c614 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -2084,7 +2084,7 @@ globalThis.FResultArray = (function() {
 		// missing limbs
 		adjustFResult(`Limbs: Missing`, -getLimbCount(slave, 0) * 0.5);
 		// non-sex prosthetics
-		adjustFResult(`Prosthetics: Non Sexual`, -getLimbCount(slave, 102) - getLimbCount(slave, 103) * 0.25);
+		adjustFResult(`Prosthetics: Non Sexual`, -(getLimbCount(slave, 102) - getLimbCount(slave, 103)) * 0.25);
 	}
 
 	/**
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 21a0834732bb822b227b2965885d841ff0fb8a56..94dc58a4023e72c2bafcdc5c8fc1187e1841facc 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -778,10 +778,11 @@ App.UI.SlaveSummaryRenderers = function() {
 		 * @returns {void}
 		 */
 		origins: function(slave, c) {
-			const para = helpers.makeParagraph(c);
-			para.classList.add("gray");
-			const pronouns = getPronouns(slave);
-			para.textContent = `${slave.origin.replace(/\$([A-Z]?[a-z]+)/g, (match, cap1) => pronouns[cap1] || match)}`;
+			if (typeof slave.origin === "string") {
+				const para = helpers.makeParagraph(c);
+				para.classList.add("gray");
+				para.textContent = pronounsForSlaveProp(slave, slave.origin);
+			}
 		},
 
 		/**
@@ -942,9 +943,7 @@ App.UI.SlaveSummary = function() {
 		}
 		const RABlock = helpers.makeBlock(para);
 		delegates.rulesets(slave, RABlock);
-		if (slave.origin !== 0) {
-			delegates.origins(slave, res);
-		}
+		delegates.origins(slave, res);
 		return res;
 	}
 
diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js
index e8fc2a1033753282a251d1c6d230141192ed43ea..8b31e45882e49b15d335e723b054861adf0728e9 100644
--- a/src/js/utilsDOM.js
+++ b/src/js/utilsDOM.js
@@ -216,7 +216,7 @@ App.Utils.passageElement = function(passage) {
 };
 
 /**
- * @param {(Node|string)} content
+ * @param {(Node[]|string[])} content
  * @returns {DocumentFragment}
  */
 App.UI.DOM.combineNodes = function(...content) {
diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js
index 0577968a447377bdf277d6fe8b99faf9129d4950..d92391f574d01166e60e7374ac91f7d58353f540 100644
--- a/src/js/utilsFC.js
+++ b/src/js/utilsFC.js
@@ -1307,7 +1307,7 @@ globalThis.massFormat = function(s) {
 	if (!s) {
 		s = 0;
 	}
-	if (s >= 1000) {
+	if (Math.abs(s) >= 1000) {
 		s = Math.trunc(s / 1000);
 		if (s !== 1) {
 			return `${num(s)} tons`;
diff --git a/src/js/utilsSC.js b/src/js/utilsSC.js
index 6f8753fba5dd6d8c8a1a962ff854e2c1ca462bb9..4f6dbc49351cf5a649edb4f3eae7fadd7ffecfe7 100644
--- a/src/js/utilsSC.js
+++ b/src/js/utilsSC.js
@@ -127,7 +127,7 @@ App.UI.tabBar = function() {
 
 	function openTab(evt, tabName) {
 		/* var passage = passage().trim().replace(/ /g,"+");*/
-		const tabcontent = document.getElementsByClassName("tab-content");
+		const tabcontent = /** @type {HTMLCollectionOf<HTMLElement>}*/(document.getElementsByClassName("tab-content"));
 		for (let i = 0; i < tabcontent.length; i++) {
 			tabcontent[i].style.display = "none";
 		}
@@ -211,7 +211,7 @@ App.UI.tabBar = function() {
 		function selectTab() {
 			let tabBtn = document.getElementById(`tab ${selectedTab}`);
 			if (!tabBtn) {
-				tabBtn = document.getElementsByClassName('tab-links').item(0);
+				tabBtn = /** @type {HTMLElement}*/(document.getElementsByClassName('tab-links').item(0));
 			}
 			if (tabBtn) {
 				tabBtn.click();
diff --git a/src/js/vignettes.js b/src/js/vignettes.js
index 2df61b24ecbbaaf5e70b25fc73250ed6597e4366..b706a14be5bb563d826b4aad30d189d5b0d539c4 100644
--- a/src/js/vignettes.js
+++ b/src/js/vignettes.js
@@ -1868,9 +1868,9 @@ globalThis.GetVignette = function(slave) {
 			}
 		}
 		if (V.arcologies[0].FSNeoImperialist !== "unset") {
-			if (slave.face > 60 && slave.height >= 175) {
+			if (slave.face > 60) {
 				vignettes.push({
-					text: `${he} received extra attention from one of your Barons who claimed ${him} to be 'Fair enough for a Noble's eyes',`,
+					text: `${he} received extra attention from one of your Barons who claimed ${him} to be 'fair enough for a Noble's eyes' and paid extra,`,
 					type: "cash",
 					effect: 1,
 				});
@@ -3761,6 +3761,13 @@ globalThis.GetVignette = function(slave) {
 					effect: 1,
 				});
 			}
+			if (V.arcologies[0].FSNeoImperialist !== "unset") {
+				vignettes.push({
+					text: `a street preacher arguing that your new Imperium is the natural evolution of Western society after the collapse of the old world attracted a large crowd near ${him},`,
+					type: "rep",
+					effect: 1,
+				});
+			}
 			if (V.arcologies[0].FSAztecRevivalist !== "unset") {
 				vignettes.push({
 					text: `a street preacher arguing that your new religion was the natural theological evolution of Aztec mythology attracted a large crowd near ${him},`,
@@ -3845,6 +3852,15 @@ globalThis.GetVignette = function(slave) {
 				});
 			}
 		}
+		if (V.arcologies[0].FSNeoImperialist !== "unset") {
+			if (slave.face > 60) {
+				vignettes.push({
+					text: `${he} received extra attention from one of your Barons who claimed ${him} to be 'fair enough for a Noble's eyes' and praised you for raising such fine slaves,`,
+					type: "rep",
+					effect: 1,
+				});
+			}
+		}
 		if (V.arcologies[0].FSAztecRevivalist !== "unset") {
 			if (slave.devotion > 75 && slave.intelligence + slave.intelligenceImplant > 50) {
 				vignettes.push({
diff --git a/src/markets/marketUI.js b/src/markets/marketUI.js
index 616a927c9076ccaca9d93ddad56c1b1b7f5236b9..cd1f12d163420ec598359add4b51781c0cecc332 100644
--- a/src/markets/marketUI.js
+++ b/src/markets/marketUI.js
@@ -141,7 +141,7 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave",
 		return el;
 
 		function student() {
-			if ([App.Data.misc.schools].includes(slaveMarket)) {
+			if (App.Data.misc.schools.includes(slaveMarket)) {
 				V[slaveMarket].schoolSale = 0;
 				V[slaveMarket].studentsBought += 1;
 			}
diff --git a/src/markets/specificMarkets/customSlave.tw b/src/markets/specificMarkets/customSlave.tw
deleted file mode 100644
index 178b7e16d8e6dceea8bf8d9c952c3367198dd201..0000000000000000000000000000000000000000
--- a/src/markets/specificMarkets/customSlave.tw
+++ /dev/null
@@ -1,1360 +0,0 @@
-:: Custom Slave [nobr]
-
-<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Kidnapped Slaves">>
-
-<<setAssistantPronouns>>
-
-<<if $customSlaveOrdered == 0>>You work up a new slave order for posting where slave merchants can work to fulfill it.<<else>>You review your posted slave order.<</if>> <<if $assistant.personality == 1>>As you work, $assistant.name makes lewd comments about what _heA looks forward to doing to this new slave. <</if>>Your order requests a slave with the following characteristics:
-
-<br><br>
-
-<span id = "age">
-<<if $customSlave.age < 3>>2-3 years old.
-<<elseif $customSlave.age < 5>>3-4 years old.
-<<elseif $customSlave.age < 7>>5-6 years old.
-<<elseif $customSlave.age < 10>>7-9 years old.
-<<elseif $customSlave.age < 13>>10-12 years old.
-<<elseif $customSlave.age < 15>>13-14 years old.
-<<elseif $customSlave.age < 18>>15-17 years old.
-<<elseif $customSlave.age < 20>>18-19 years old.
-<<elseif $customSlave.age < 25 && $retirementAge >= 25>>20-24 years old.
-<<elseif $customSlave.age < 25 && $retirementAge >= 20>>20+ years old.
-<<elseif $customSlave.age < 30 && $retirementAge >= 30>>25-29 years old.
-<<elseif $customSlave.age < 30 && $retirementAge >= 25>>25+ years old.
-<<elseif $customSlave.age < 40 && $retirementAge >= 40>>30-39 years old.
-<<elseif $customSlave.age < 40 && $retirementAge >= 30>>30+ years old.
-<<elseif $customSlave.age < 50 && $retirementAge >= 50>>40-49 years old.
-<<elseif $customSlave.age < 50 && $retirementAge >= 40>>40+ years old.
-<<elseif $customSlave.age < 60 && $retirementAge >= 60>>50-59 years old.
-<<elseif $customSlave.age < 60 && $retirementAge >= 50>>50+ years old.
-<<elseif $customSlave.age < 70 && $retirementAge >= 70>>60-69 years old.
-<<elseif $customSlave.age < 70 && $retirementAge >= 60>>60+ years old.
-<<elseif $customSlave.age < 80 && $retirementAge >= 80>>70-79 years old.
-<<elseif $customSlave.age < 80 && $retirementAge >= 70>>70+ years old.
-<<elseif $customSlave.age < 90 && $retirementAge >= 90>>80-89 years old.
-<<elseif $customSlave.age < 90 && $retirementAge >= 80>>80+ years old.
-<<elseif $customSlave.age < 100 && $retirementAge >= 100>>90-99 years old.
-<<elseif $customSlave.age < 100 && $retirementAge >= 90>>90+ years old.
-<<elseif $customSlave.age < 110 && $retirementAge >= 110>>100-109 years old.
-<<elseif $customSlave.age < 110 && $retirementAge >= 100>>100+ years old.
-<<elseif $customSlave.age < 120 && $retirementAge >= 120>>110-119 years old.
-<<elseif $customSlave.age < 120 && $retirementAge >= 110>>110+ years old.
-<<elseif $customSlave.age < 130 && $retirementAge >= 130>>120-129 years old.
-<<elseif $customSlave.age < 130 && $retirementAge >= 120>>120+ years old.
-<<else>>130+ years old.
-<</if>>
-</span>
-<<if $minimumSlaveAge >= 0 && $minimumSlaveAge <= 2>>
-<<link "2-">>
-	<<set $customSlave.age = 2>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 3>>
-<<link "3-4">>
-	<<set $customSlave.age = 4>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 5>>
-<<link "5-6">>
-	<<set $customSlave.age = 6>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 7>>
-<<link "7-9">>
-	<<set $customSlave.age = 9>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 10>>
-<<link "10-12">>
-	<<set $customSlave.age = 12>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 13>>
-<<link "13-14">>
-	<<set $customSlave.age = 14>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 15>>
-<<link "15-17">>
-	<<set $customSlave.age = 17>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $minimumSlaveAge <= 18>>
-<<link "18-19">>
-	<<set $customSlave.age = 19>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<</if>>
-<<if $retirementAge >= 25>>
-<<link "20-24">>
-	<<set $customSlave.age = 24>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 20>>
-<<link "20+">>
-	<<set $customSlave.age = 20>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 30>>
-<<link "25-29">>
-	<<set $customSlave.age = 29>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 25>>
-<<link "25+">>
-	<<set $customSlave.age = 25>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 40>>
-<<link "30-39">>
-	<<set $customSlave.age = 39>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 30>>
-<<link "30+">>
-	<<set $customSlave.age = 30>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 50>>
-<<link "40-49">>
-	<<set $customSlave.age = 49>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 40>>
-<<link "40+">>
-	<<set $customSlave.age = 40>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 60>>
-<<link "50-59">>
-	<<set $customSlave.age = 59>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 50>>
-<<link "50+">>
-	<<set $customSlave.age = 50>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 70>>
-<<link "60-69">>
-	<<set $customSlave.age = 69>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 60>>
-<<link "60+">>
-	<<set $customSlave.age = 60>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 80>>
-<<link "70-79">>
-	<<set $customSlave.age = 79>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 70>>
-<<link "70+">>
-	<<set $customSlave.age = 70>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 90>>
-<<link "80-89">>
-	<<set $customSlave.age = 89>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 80>>
-<<link "80+">>
-	<<set $customSlave.age = 80>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 100>>
-<<link "90-99">>
-	<<set $customSlave.age = 99>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 90>>
-<<link "90+">>
-	<<set $customSlave.age = 90>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 110>>
-<<link "100-109">>
-	<<set $customSlave.age = 109>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 100>>
-<<link "100+">>
-	<<set $customSlave.age = 100>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 120>>
-<<link "110-119">>
-	<<set $customSlave.age = 119>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 110>>
-<<link "110+">>
-	<<set $customSlave.age = 110>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 130>>
-<<link "120-129">>
-	<<set $customSlave.age = 129>>
-	<<CustomSlaveAge>>
-<</link>>
-|
-<<elseif $retirementAge >= 120>>
-<<link "120+">>
-	<<set $customSlave.age = 120>>
-	<<CustomSlaveAge>>
-<</link>>
-<<else>>
-<</if>>
-<<if $retirementAge >= 130>>
-<<link "130+">>
-	<<set $customSlave.age = 130>>
-	<<CustomSlaveAge>>
-<</link>>
-<</if>>
-
-<br>
-
-<span id = "health">
-<<if $customSlave.health == 0>>Healthy.
-<<else>>Extremely healthy.
-<</if>>
-</span>
-<<link "Healthy">>
-	<<set $customSlave.health = 0>>
-	<<CustomSlaveHealth>>
-<</link>>
-|
-<<link "Extremely healthy">>
-	<<set $customSlave.health = 1>>
-	<<CustomSlaveHealth>>
-<</link>>
-
-<br>
-
-<span id = "muscles">
-<<if $customSlave.muscles > 95>>
-	Ripped.
-<<elseif $customSlave.muscles > 50>>
-	Muscular.
-<<elseif $customSlave.muscles > 30>>
-	Well built.
-<<elseif $customSlave.muscles > 5>>
-	Toned.
-<<elseif $customSlave.muscles > -6>>
-	Soft.
-<<elseif $customSlave.muscles > -31>>
-	Weak.
-<<elseif $customSlave.muscles > -96>>
-	Very weak.
-<<else>>
-	Frail.
-<</if>>
-</span>
-<<link "Frail">>
-	<<set $customSlave.muscles = -97>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Very weak">>
-	<<set $customSlave.muscles = -51>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Weak">>
-	<<set $customSlave.muscles = -21>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Normal">>
-	<<set $customSlave.muscles = 0>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Toned">>
-	<<set $customSlave.muscles = 20>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Well built">>
-	<<set $customSlave.muscles = 45>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Muscular">>
-	<<set $customSlave.muscles = 65>>
-	<<CustomSlaveMuscles>>
-<</link>>
-|
-<<link "Ripped">>
-	<<set $customSlave.muscles = 96>>
-	<<CustomSlaveMuscles>>
-<</link>>
-
-<br>
-
-<span id = "lips">
-<<if $customSlave.lips <= 10>>Thin lips.
-<<elseif $customSlave.lips <= 20>>Normal lips.
-<<elseif $customSlave.lips <= 40>>Plush lips.
-<<elseif $customSlave.lips <= 70>>Big lips.
-<<elseif $customSlave.lips <= 95>>Huge lips.
-<<else>>Facepussy.
-<</if>>
-</span>
-<<link "Thin">>
-	<<set $customSlave.lips = 5>>
-	<<CustomSlaveLips>>
-<</link>>
-|
-<<link "Normal">>
-	<<set $customSlave.lips = 15>>
-	<<CustomSlaveLips>>
-<</link>>
-|
-<<link "Plush">>
-	<<set $customSlave.lips = 35>>
-	<<CustomSlaveLips>>
-<</link>>
-|
-<<link "Big">>
-	<<set $customSlave.lips = 65>>
-	<<CustomSlaveLips>>
-<</link>>
-|
-<<link "Enormous">>
-	<<set $customSlave.lips = 85>>
-	<<CustomSlaveLips>>
-<</link>>
-|
-<<link "Facepussy">>
-	<<set $customSlave.lips = 100>>
-	<<CustomSlaveLips>>
-<</link>>
-
-<br>
-
-<span id = "voice">
-<<if $customSlave.voice == 3>>High, girly voice.
-<<elseif $customSlave.voice == 2>>Feminine voice.
-<<elseif $customSlave.voice == 1>>Deep voice.
-<<elseif $customSlave.voice == 0>>Mute.
-<<else>>Voice is unimportant.
-<</if>>
-</span>
-<<link "High, girly voice">>
-	<<set $customSlave.voice = 3>>
-	<<CustomSlaveVoice>>
-<</link>>
-|
-<<link "Feminine voice">>
-	<<set $customSlave.voice = 2>>
-	<<CustomSlaveVoice>>
-<</link>>
-|
-<<link "Deep voice">>
-	<<set $customSlave.voice = 1>>
-	<<CustomSlaveVoice>>
-<</link>>
-|
-<<link "Mute">>
-	<<set $customSlave.voice = 0>>
-	<<CustomSlaveVoice>>
-<</link>>
-|
-<<link "Voice is unimportant">>
-	<<set $customSlave.voice = -1>>
-	<<CustomSlaveVoice>>
-<</link>>
-
-<br>
-
-<span id = "height">
-<<if $customSlave.heightMod == "greatly below average">>Petite.
-<<elseif $customSlave.heightMod == "below average">>Short.
-<<elseif $customSlave.heightMod == "normal">>Average height.
-<<elseif $customSlave.heightMod == "above average">>Tall.
-<<else>>Very tall.
-<</if>>
-</span>
-<<link "Petite">>
-	<<set $customSlave.heightMod = "greatly below average">>
-	<<CustomSlaveHeight>>
-<</link>>
-|
-<<link "Short">>
-	<<set $customSlave.heightMod = "below average">>
-	<<CustomSlaveHeight>>
-<</link>>
-|
-<<link "Average height">>
-	<<set $customSlave.heightMod = "normal">>
-	<<CustomSlaveHeight>>
-<</link>>
-|
-<<link "Tall">>
-	<<set $customSlave.heightMod = "above average">>
-	<<CustomSlaveHeight>>
-<</link>>
-|
-<<link "Very tall">>
-	<<set $customSlave.heightMod = "greatly above average">>
-	<<CustomSlaveHeight>>
-<</link>>
-
-<br>
-
-<span id = "weight">
-<<if $customSlave.weight == -50>>Very thin.
-<<elseif $customSlave.weight == -15>>Thin.
-<<elseif $customSlave.weight == 0>>Average weight.
-<<elseif $customSlave.weight == 15>>Plush.
-<<elseif $customSlave.weight == 50>>Chubby.
-<<elseif $customSlave.weight == 100>>Fat.
-<<elseif $customSlave.weight == 150>>Very Fat.
-<<else>>Immobile.
-<</if>>
-</span>
-<<link "Very thin">>
-	<<set $customSlave.weight = -50>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Thin">>
-	<<set $customSlave.weight = -15>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Average">>
-	<<set $customSlave.weight = 0>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Plush">>
-	<<set $customSlave.weight = 15>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Chubby">>
-	<<set $customSlave.weight = 50>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Fat">>
-	<<set $customSlave.weight = 100>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Very Fat">>
-	<<set $customSlave.weight = 150>>
-	<<CustomSlaveWeight>>
-<</link>>
-|
-<<link "Immobile">>
-	<<set $customSlave.weight = 200>>
-	<<CustomSlaveWeight>>
-<</link>>
-
-<br>
-
-<span id = "face">
-<<if $customSlave.face < -40>>Very unattractive face.
-<<elseif $customSlave.face < -10>>Unattractive face.
-<<elseif $customSlave.face <= 10>>Average face.
-<<elseif $customSlave.face <= 40>>Attractive face.
-<<else>>Very attractive face.
-<</if>>
-</span>
-<<link "Very unattractive">>
-	<<set $customSlave.face = -55>>
-	<<CustomSlaveFace>>
-<</link>>
-|
-<<link "Unattractive">>
-	<<set $customSlave.face = -15>>
-	<<CustomSlaveFace>>
-<</link>>
-|
-<<link "Average">>
-	<<set $customSlave.face = 0>>
-	<<CustomSlaveFace>>
-<</link>>
-|
-<<link "Attractive">>
-	<<set $customSlave.face = 15>>
-	<<CustomSlaveFace>>
-<</link>>
-|
-<<link "Very attractive">>
-	<<set $customSlave.face = 55>>
-	<<CustomSlaveFace>>
-<</link>>
-
-<br>
-
-Ethnicity: <span id = "ethnicity">
-<<textbox "$customSlave.race" $customSlave.race "Custom Slave">>
-</span>
-<<link "White">>
-	<<set $customSlave.race = "white">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Asian">>
-	<<set $customSlave.race = "asian">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Latina">>
-	<<set $customSlave.race = "latina">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Middle Eastern">>
-	<<set $customSlave.race = "middle eastern">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Black">>
-	<<set $customSlave.race = "black">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Semitic">>
-	<<set $customSlave.race = "semitic">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Southern European">>
-	<<set $customSlave.race = "southern european">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Indo-Aryan">>
-	<<set $customSlave.race = "indo-aryan">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Amerindian">>
-	<<set $customSlave.race = "amerindian">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Pacific Islander">>
-	<<set $customSlave.race = "pacific islander">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Malay">>
-	<<set $customSlave.race = "malay">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Mixed Race">>
-	<<set $customSlave.race = "mixed race">>
-	<<CustomSlaveRace>>
-<</link>>
-|
-<<link "Ethnicity is unimportant">>
-	<<set $customSlave.race = "ethnicity is unimportant">>
-	<<CustomSlaveRace>>
-<</link>>
-
-<br>
-
-Skin tone: <span id = "skin">
-<<textbox "$customSlave.skin" $customSlave.skin "Custom Slave">>
-</span>
-<<link "Pure White">>
-	<<set $customSlave.skin = "pure white">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Ivory">>
-	<<set $customSlave.skin = "ivory">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "White">>
-	<<set $customSlave.skin = "white">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Extremely Pale">>
-	<<set $customSlave.skin = "extremely pale">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Very Pale">>
-	<<set $customSlave.skin = "very pale">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Pale">>
-	<<set $customSlave.skin = "pale">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Extremely Fair">>
-	<<set $customSlave.skin = "extremely fair">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Very Fair">>
-	<<set $customSlave.skin = "very fair">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Fair">>
-	<<set $customSlave.skin = "fair">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Light">>
-	<<set $customSlave.skin = "light">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Light Olive">>
-	<<set $customSlave.skin = "light olive">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Tan">>
-	<<set $customSlave.skin = "tan">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Olive">>
-	<<set $customSlave.skin = "olive">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Bronze">>
-	<<set $customSlave.skin = "bronze">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Dark Olive">>
-	<<set $customSlave.skin = "dark olive">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Dark">>
-	<<set $customSlave.skin = "dark">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Light Beige">>
-	<<set $customSlave.skin = "light beige">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Beige">>
-	<<set $customSlave.skin = "beige">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Dark Beige">>
-	<<set $customSlave.skin = "dark beige">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Light Brown">>
-	<<set $customSlave.skin = "light brown">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Brown">>
-	<<set $customSlave.skin = "brown">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Dark Brown">>
-	<<set $customSlave.skin = "dark brown">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Black">>
-	<<set $customSlave.skin = "black">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Ebony">>
-	<<set $customSlave.skin = "ebony">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Pure Black">>
-	<<set $customSlave.skin = "pure black">>
-	<<CustomSlaveSkin>>
-<</link>>
-|
-<<link "Left natural">>
-	<<set $customSlave.skin = "left natural">>
-	<<CustomSlaveSkin>>
-<</link>>
-
-<br>
-
-<span id = "boobs">
-<<if $customSlave.boobs == 200>>Flat chest.
-<<elseif $customSlave.boobs <= 500>>Healthy breasts.
-<<elseif $customSlave.boobs <= 800>>Big breasts.
-<<elseif $customSlave.boobs <= 1400>>Huge breasts.
-<<elseif $customSlave.boobs <= 2100>>Giant breasts.
-<<else>>Massive breasts.
-<</if>>
-</span>
-<<link "Flat">>
-	<<set $customSlave.boobs = 200>>
-	<<CustomSlaveBoobs>>
-<</link>>
-|
-<<link "Healthy">>
-	<<set $customSlave.boobs = 500>>
-	<<CustomSlaveBoobs>>
-<</link>>
-|
-<<link "Big">>
-	<<set $customSlave.boobs = 800>>
-	<<CustomSlaveBoobs>>
-<</link>>
-|
-<<link "Huge">>
-	<<set $customSlave.boobs = 1400>>
-	<<CustomSlaveBoobs>>
-<</link>>
-|
-<<link "Giant">>
-	<<set $customSlave.boobs = 2100>>
-	<<CustomSlaveBoobs>>
-<</link>>
-|
-<<link "Massive">>
-	<<set $customSlave.boobs = 6000>>
-	<<CustomSlaveBoobs>>
-<</link>>
-
-<br>
-
-<span id = "butt">
-<<if $customSlave.butt == 1>>Flat buttocks.
-<<elseif $customSlave.butt < 4>>Healthy buttocks.
-<<elseif $customSlave.butt < 6>>Huge buttocks.
-<<else>>Massive buttocks.
-<</if>>
-</span>
-<<link "Flat">>
-	<<set $customSlave.butt = 1>>
-	<<CustomSlaveButt>>
-<</link>>
-|
-<<link "Healthy">>
-	<<set $customSlave.butt = 3>>
-	<<CustomSlaveButt>>
-<</link>>
-|
-<<link "Huge">>
-	<<set $customSlave.butt = 5>>
-	<<CustomSlaveButt>>
-<</link>>
-|
-<<link "Massive">>
-	<<set $customSlave.butt = 8>>
-	<<CustomSlaveButt>>
-<</link>>
-
-<br>
-
-<span id = "sex">
-<<if $customSlave.sex == 1>>Female (cock & balls options not applied).
-<<elseif $customSlave.sex == 2>>Male (pussy options not applied).
-<<else>>Futanari (clit options not applied).
-<</if>>
-</span>
-<<link "Female">>
-	<<set $customSlave.sex = 1>>
-	<<CustomSlaveSex>>
-<</link>>
-|
-<<link "Male">>
-	<<set $customSlave.sex = 2>>
-	<<CustomSlaveSex>>
-<</link>>
-|
-<<link "Both">>
-	<<set $customSlave.sex = 3>>
-	<<CustomSlaveSex>>
-<</link>>
-
-<br>
-
-<span id = "virgin">
-<<if $customSlave.virgin == 0>>Vaginal virgin.
-<<else>>Virginity not important.
-<</if>>
-</span>
-<<link "Vaginal virgin">>
-	<<set $customSlave.virgin = 0>>
-	<<CustomSlaveVirgin>>
-<</link>>
-|
-<<link "Not Important">>
-	<<set $customSlave.virgin = 1>>
-	<<CustomSlaveVirgin>>
-<</link>>
-
-<br>
-<<if $seeDicks > 0>>
-<span id = "dick">
-<<if $customSlave.dick == 0>>No penis.
-<<elseif $customSlave.dick == 2>>Small penis.
-<<else>>Large penis.
-<</if>>
-</span>
-<<link "No penis">>
-	<<set $customSlave.dick = 0>>
-	<<CustomSlaveDick>>
-<</link>>
-|
-<<link "Small penis">>
-	<<set $customSlave.dick = 2>>
-	<<CustomSlaveDick>>
-<</link>>
-|
-<<link "Large penis">>
-	<<set $customSlave.dick = 4>>
-	<<CustomSlaveDick>>
-<</link>>
-<</if>>
-<br>
-
-<span id = "balls">
-<<if $customSlave.balls == 0>>No testicles.
-<<elseif $customSlave.balls == 2>>Small testicles.
-<<elseif $customSlave.balls == 4>>Large testicles.
-<<else>>Huge Balls.
-<</if>>
-</span>
-<<link "No testicles">>
-	<<set $customSlave.balls = 0>>
-	<<CustomSlaveBalls>>
-<</link>>
-|
-<<link "Small testicles">>
-	<<set $customSlave.balls = 2>>
-	<<CustomSlaveBalls>>
-<</link>>
-|
-<<link "Large testicles">>
-	<<set $customSlave.balls = 4>>
-	<<CustomSlaveBalls>>
-<</link>>
-|
-<<link "huge testicles">>
-	<<set $customSlave.balls = 6>>
-	<<CustomSlaveBalls>>
-<</link>>
-
-<br>
-
-<span id = "clit">
-<<if $customSlave.clit == 0>>Normal clitoris.
-<<elseif $customSlave.clit == 1>>Big clitoris.
-<<elseif $customSlave.clit == 3>>Enormous clitoris.
-<<else>>Pseudophallus.
-<</if>>
-</span>
-<<link "Normal clitoris">>
-	<<set $customSlave.clit = 0>>
-	<<CustomSlaveClit>>
-<</link>>
-|
-<<link "Big clitoris">>
-	<<set $customSlave.clit = 1>>
-	<<CustomSlaveClit>>
-<</link>>
-|
-<<link "Enormous clitoris">>
-	<<set $customSlave.clit = 3>>
-	<<CustomSlaveClit>>
-<</link>>
-|
-<<link "Clit dick">>
-	<<set $customSlave.clit = 5>>
-	<<CustomSlaveClit>>
-<</link>>
-
-<br>
-
-<span id = "labia">
-<<if $customSlave.labia == 0>>Normal labia.
-<<elseif $customSlave.labia == 1>>big labia.
-<<elseif $customSlave.labia == 2>>Huge labia.
-<<else>>Enormous labia.
-<</if>>
-</span>
-<<link "Normal labia">>
-	<<set $customSlave.labia = 0>>
-	<<CustomSlaveLabia>>
-<</link>>
-|
-<<link "Big labia">>
-	<<set $customSlave.labia = 1>>
-	<<CustomSlaveLabia>>
-<</link>>
-|
-<<link "Huge labia">>
-	<<set $customSlave.labia = 2>>
-	<<CustomSlaveLabia>>
-<</link>>
-|
-<<link "Enormous labia">>
-	<<set $customSlave.labia = 3>>
-	<<CustomSlaveLabia>>
-<</link>>
-
-<br>
-
-<span id = "lube">
-<<if $customSlave.vaginaLube == 0>>Dry vagina.
-<<elseif $customSlave.vaginaLube == 1>>Wet vagina.
-<<else>>Sopping wet vagina.
-<</if>>
-</span>
-<<link "Dry vagina">>
-	<<set $customSlave.vaginaLube = 0>>
-	<<CustomSlaveLube>>
-<</link>>
-|
-<<link "Wet vagina">>
-	<<set $customSlave.vaginaLube = 1>>
-	<<CustomSlaveLube>>
-<</link>>
-|
-<<link "Sopping wet vagina">>
-	<<set $customSlave.vaginaLube = 2>>
-	<<CustomSlaveLube>>
-<</link>>
-
-<br>
-
-<span id = "anus">
-<<if $customSlave.analVirgin == 0>>Anal virgin.
-<<else>>Anal virginity is not important.
-<</if>>
-</span>
-<<link "Anal virgin">>
-	<<set $customSlave.analVirgin = 0>>
-	<<CustomSlaveAnalVirginity>>
-<</link>>
-|
-<<link "Anal virginity is not important">>
-	<<set $customSlave.analVirgin = 1>>
-	<<CustomSlaveAnalVirginity>>
-<</link>>
-
-<br>
-
-<span id = "skills">
-<<if $customSlave.skills <= 10>>Sexually unskilled.
-<<elseif $customSlave.skills <= 15>>Basic sex skills.
-<<else>>Sexually skilled.
-<</if>>
-</span>
-<<link "Unskilled">>
-	<<set $customSlave.skills = 0>>
-	<<CustomSlaveSkills>>
-<</link>>
-|
-<<link "Skilled">>
-	<<set $customSlave.skills = 35>>
-	<<CustomSlaveSkills>>
-<</link>>
-|
-<<link "Expert">>
-	<<set $customSlave.skills = 65>>
-	<<CustomSlaveSkills>>
-<</link>>
-
-<br>
-
-<span id = "whore-skills">
-<<if $customSlave.skill.whore <= 10>>Unskilled at prostitution and entertainment.
-<<elseif $customSlave.skill.whore <= 15>>Basic skills at prostitution and entertainment.
-<<else>>Skilled at prostitution and entertainment.
-<</if>>
-</span>
-<<link "Unskilled">>
-	<<set $customSlave.skill.whore = 0>>
-	<<CustomSlaveWhoreSkills>>
-<</link>>
-|
-<<link "Skilled">>
-	<<set $customSlave.skill.whore = 15>>
-	<<CustomSlaveWhoreSkills>>
-<</link>>
-|
-<<link "Expert">>
-	<<set $customSlave.skill.whore = 35>>
-	<<CustomSlaveWhoreSkills>>
-<</link>>
-
-<br>
-
-<span id = "combat-skills">
-<<if $customSlave.skill.combat == 0>>Unskilled at combat.
-<<else>>Skilled at combat.
-<</if>>
-</span>
-<<link "Unskilled">>
-	<<set $customSlave.skill.combat = 0>>
-	<<CustomSlaveCombatSkills>>
-<</link>>
-|
-<<link "Skilled">>
-	<<set $customSlave.skill.combat = 1>>
-	<<CustomSlaveCombatSkills>>
-<</link>>
-
-<br>
-
-<span id = "intelligence">
-<<if $customSlave.intelligence >= 3>>Brilliant.
-<<elseif $customSlave.intelligence == 2>>Very smart..
-<<elseif $customSlave.intelligence == 1>>Smart.
-<<elseif $customSlave.intelligence == 0>>Average intelligence.
-<<elseif $customSlave.intelligence == -1>>Stupid.
-<<elseif $customSlave.intelligence == -2>>Very stupid.
-<<else>>Moronic.
-<</if>>
-</span>
-<<link "Brilliant">>
-	<<set $customSlave.intelligence = 3>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Very smart">>
-	<<set $customSlave.intelligence = 2>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Smart">>
-	<<set $customSlave.intelligence = 1>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Average intelligence">>
-	<<set $customSlave.intelligence = 0>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Stupid">>
-	<<set $customSlave.intelligence = -1>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Very stupid">>
-	<<set $customSlave.intelligence = -2>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-|
-<<link "Moronic">>
-	<<set $customSlave.intelligence = -3>>
-	<<CustomSlaveIntelligence>>
-<</link>>
-
-<br>
-
-<span id = "education">
-<<if $customSlave.intelligenceImplant >= 30>>Well educated.
-<<elseif $customSlave.intelligenceImplant >= 15>>Educated.
-<<else>>Uneducated.
-<</if>>
-</span>
-<<link "Well educated">>
-	<<set $customSlave.intelligenceImplant = 30>>
-	<<CustomSlaveEducation>>
-<</link>>
-|
-<<link "Educated">>
-	<<set $customSlave.intelligenceImplant = 15>>
-	<<CustomSlaveEducation>>
-<</link>>
-|
-<<link "Uneducated">>
-	<<set $customSlave.intelligenceImplant = 0>>
-	<<CustomSlaveEducation>>
-<</link>>
-
-<br>
-
-<span id = "eyes">
-<<if getBestVision($customSlave) === 2>>Normal vision.
-<<elseif getBestVision($customSlave) === 1>>Nearsighted.
-<<else>>Blind.
-<</if>>
-</span>
-<<link "Normal Vision">>
-	<<run eyeSurgery($customSlave, "both", "fix")>>
-	<<CustomSlaveEyes>>
-<</link>>
-|
-<<link "Nearsighted">>
-	<<run eyeSurgery($customSlave, "both", "blur")>>
-	<<CustomSlaveEyes>>
-<</link>>
-<<if $seeExtreme == 1>>
-	|
-	<<link "Blind">>
-		<<run eyeSurgery($customSlave, "both", "blind")>>
-		<<CustomSlaveEyes>>
-	<</link>>
-<</if>>
-
-<br>
-
-<span id = "hears">
-<<if $seeExtreme == 1>>
-	<<if $customSlave.hears == 0>>Normal hearing.
-	<<elseif $customSlave.hears == -1>>Hard of hearing.
-	<<else>>Deaf.
-	<</if>>
-<<else>>
-	<<if $customSlave.hears == 0>>Normal hearing.
-	<<else>>Hard of hearing.
-	<</if>>
-<</if>>
-</span>
-<<link "Normal Hearing">>
-	<<set $customSlave.hears = 0>>
-	<<CustomSlaveEars>>
-<</link>>
-|
-<<link "Hard of Hearing">>
-	<<set $customSlave.hears = -1>>
-	<<CustomSlaveEars>>
-<</link>>
-<<if $seeExtreme == 1>>
-	|
-	<<link "Deaf">>
-		<<set $customSlave.hears = -2>>
-		<<CustomSlaveEars>>
-	<</link>>
-<</if>>
-
-<br>
-
-<<if $seeExtreme == 1>>
-<span id = "smelling">
-<<if $customSlave.smells == -1>>No sense of smell.
-<<else>>Normal sense of smell.
-<</if>>
-</span>
-<<link "No Sense of Smell">>
-	<<set $customSlave.smells = -1>>
-	<<CustomSlaveSmell>>
-<</link>>
-|
-<<link "Normal Sense of Smell">>
-	<<set $customSlave.smells = 0>>
-	<<CustomSlaveSmell>>
-<</link>>
-
-<br>
-<span id = "tasting">
-<<if $customSlave.tastes == -1>>No sense of taste.
-<<else>>Normal sense of taste.
-<</if>>
-</span>
-<<link "No Sense of Taste">>
-	<<set $customSlave.tastes = -1>>
-	<<CustomSlaveTaste>>
-<</link>>
-|
-<<link "Normal Sense of Taste">>
-	<<set $customSlave.tastes = 0>>
-	<<CustomSlaveTaste>>
-<</link>>
-
-<br>
-
-Left arm:
-<span id = "ampLA">
-	<<if hasLeftArm($customSlave)>>Yes
-	<<else>>No
-	<</if>>
-</span>
-<<link "Remove">>
-	<<set $customSlave.arm.left = null>>
-	<<replace #ampLA>>
-		No
-	<</replace>>
-<</link>>
-<<link "Add">>
-	<<set $customSlave.arm.left = new App.Entity.LimbState()>>
-	<<replace #ampLA>>
-		Yes
-	<</replace>>
-<</link>>
-<br>
-Right arm:
-<span id = "ampRA">
-	<<if hasRightArm($customSlave)>>Yes
-	<<else>>No
-	<</if>>
-</span>
-<<link "Remove">>
-	<<set $customSlave.arm.right = null>>
-	<<replace #ampRA>>
-		No
-	<</replace>>
-<</link>>
-<<link "Add">>
-	<<set $customSlave.arm.right = new App.Entity.LimbState()>>
-	<<replace #ampRA>>
-		Yes
-	<</replace>>
-<</link>>
-<br>
-Left leg:
-<span id = "ampLL">
-	<<if hasLeftLeg($customSlave)>>Yes
-	<<else>>No
-	<</if>>
-</span>
-<<link "Remove">>
-	<<set $customSlave.leg.left = null>>
-	<<replace #ampLL>>
-		No
-	<</replace>>
-<</link>>
-<<link "Add">>
-	<<set $customSlave.leg.left = new App.Entity.LimbState()>>
-	<<replace #ampLL>>
-		Yes
-	<</replace>>
-<</link>>
-<br>
-Right leg:
-<span id = "ampRL">
-	<<if hasRightLeg($customSlave)>>Yes
-	<<else>>No
-	<</if>>
-</span>
-<<link "Remove">>
-	<<set $customSlave.leg.right = null>>
-	<<replace #ampRL>>
-		No
-	<</replace>>
-<</link>>
-<<link "Add">>
-	<<set $customSlave.leg.right = new App.Entity.LimbState()>>
-	<<replace #ampRL>>
-		Yes
-	<</replace>>
-<</link>>
-
-
-<br>
-<</if>>
-
-<span id = "nationality">
-Nationality: $customSlave.nationality.
-</span>
-<<link "Slave">>
-	<<set $customSlave.nationality = "slave">>
-	<<CustomSlaveNationality>>
-<</link>>
-|
-<<link "Stateless">>
-	<<set $customSlave.nationality = "Stateless">>
-	<<CustomSlaveNationality>>
-<</link>>
-|
-<<link "Nationality is unimportant">>
-	<<set $customSlave.nationality = "Nationality is unimportant">>
-	<<CustomSlaveNationality>>
-<</link>>
-<br>
-<<for _i = 0; _i < setup.baseNationalities.length; _i++>>
-<<set _nation = setup.baseNationalities[_i]>>
-
-<<print "
-<<link _nation>>
-	<<set $customSlave.nationality = setup.baseNationalities[" + _i + "]>>
-	<<CustomSlaveNationality>>
-<</link>>
-">>
-<<if _i < setup.baseNationalities.length-1>>
-|
-<</if>>
-<</for>>
-
-<br><br>
-
-<<link "Reset custom order form">>
-	<<set $customSlave = new App.Entity.CustomSlaveOrder()>>
-	<<goto "Custom Slave">>
-<</link>>
-
-<br><br>
-
-<<if $customSlaveOrdered == 1>>
-[[Update custom slave order|Buy Slaves]]
-<br>
-[[Withdraw custom slave order|Buy Slaves][$customSlaveOrdered = 0]]
-<<else>>
-[[Post custom slave order|Buy Slaves][$customSlaveOrdered = 1]]
-<</if>>
diff --git a/src/markets/specificMarkets/customSlaveMarket.js b/src/markets/specificMarkets/customSlaveMarket.js
new file mode 100644
index 0000000000000000000000000000000000000000..a3d8539bce51da6a5077f84e6577efab39277d82
--- /dev/null
+++ b/src/markets/specificMarkets/customSlaveMarket.js
@@ -0,0 +1,1070 @@
+App.Markets["Custom Slave"] = function() {
+	V.encyclopedia = "Kidnapped Slaves";
+	const el = document.createElement("p");
+	const slave = V.customSlave;
+	el.append(intro());
+	el.append(age());
+	el.append(health());
+	el.append(muscles());
+	el.append(lips());
+	el.append(voice());
+	el.append(height());
+	el.append(weight());
+	el.append(face());
+	el.append(race());
+	el.append(skin());
+	el.append(boobs());
+	el.append(butt());
+	el.append(sex());
+	el.append(virgin());
+	el.append(dick());
+	el.append(balls());
+	el.append(clit());
+	el.append(labia());
+	el.append(vaginaLube());
+	el.append(analVirgin());
+	el.append(skills());
+	el.append(skillWhore());
+	el.append(skillCombat());
+	el.append(intelligence());
+	el.append(intelligenceImplant());
+	el.append(eyes());
+	el.append(hears());
+	el.append(smells());
+	el.append(tastes());
+	el.append(limbs());
+	el.append(nationality());
+
+	// Links to reset things
+	el.append(reset());
+	el.append(orderControls());
+
+	return el;
+
+	function intro() {
+		const {heA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		let r = [];
+		if (V.customSlaveOrdered === 0) {
+			r.push(`You work up a new slave order for posting where slave merchants can work to fulfill it.`);
+		} else {
+			r.push(`You review your posted slave order.`);
+		}
+		if (V.assistant.personality === 1) {
+			r.push(`As you work, ${V.assistant.name} makes lewd comments about what ${heA} looks forward to doing to this new slave.`);
+		}
+		r.push(`Your order requests a slave with the following characteristics:`);
+		return App.UI.DOM.makeElement("p", r.join(" "));
+	}
+
+	function age() {
+		const el = document.createElement("div");
+		const ages = [2, 4, 6, 9, 12, 14, 17, 19, 24, 29, 39, 49, 59, 69, 79, 89, 99, 109, 119, 129, 130];
+
+		createDescription(el, description, "age");
+
+		// Choices
+		const select = document.createElement("select");
+		for (let i = 0; i < ages.length; i++) {
+			const high = ages[i];
+			const low = (ages[i - 1] + 1 ) || (ages[i] - 1); // First element of array has nothing before it, obviously, so display low as one less than high.
+			if (low < V.minimumSlaveAge) {
+				continue;
+			} else if (high > V.retirementAge) {
+				const option = document.createElement("option");
+				option.text = `${low}+`;
+				option.value = low;
+				select.append(option);
+				break;
+			}
+
+			const option = document.createElement("option");
+			option.text = `${low}-${high}`;
+			option.value = high;
+			if (slave.age === option.value) {
+				option.selected = true;
+			}
+			select.append(option);
+		}
+		select.onchange = () => {
+			slave.age = Number(select.options[select.selectedIndex].value);
+			jQuery("#age-text").empty().append(description());
+		};
+		el.append(select);
+		return el;
+
+		function description() {
+			// Age is displayed as a range, but recorded as the higher of the two numbers in the range
+			const highIndex = ages.indexOf(slave.age);
+
+			if (highIndex === 0) {
+				return `${(ages[highIndex] - 1)}-${ages[highIndex]} years old. `;
+			} else if (highIndex === ages.length) {
+				// Highest possible number
+				return `${ages[highIndex]}+ years old. `;
+			} else {
+				// Lower age should be the previous number in the array, +1
+				return `${(ages[highIndex - 1]) + 1}-${ages[highIndex]} years old. `;
+			}
+		}
+	}
+
+	function health() {
+		const el = document.createElement("div");
+		const slaveProperty = "health";
+		const choices = new Map([
+			[1, "Extremely healthy"],
+			[0, "Healthy"],
+		]);
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.health === Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function muscles() {
+		const el = document.createElement("div");
+		const slaveProperty = "muscles";
+		const choices = new Map([
+			["96", "Ripped"],
+			["65", "Muscular"],
+			["45", "Well built"],
+			["20", "Toned"],
+			["0", "Normal"],
+			["-21", "Weak"],
+			["-51", "Very weak"],
+			["-97", "Frail"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.muscles >= Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function lips() {
+		const el = document.createElement("div");
+		const slaveProperty = "lips";
+		const choices = new Map([
+			["100", "Facepussy"],
+			["85", "Enormous"],
+			["65", "Big"],
+			["35", "Plush"],
+			["15", "Normal"],
+			["5", "Thin"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.lips >= Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function voice() {
+		const el = document.createElement("div");
+		const slaveProperty = "voice";
+		const choices = new Map([
+			["3", "High, girly"],
+			["2", "Feminine"],
+			["1", "Deep"],
+			["0", "Mute"],
+			["-1", "Voice is unimportant"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.voice === Number(value)) {
+					if (slave.voice === -1) {
+						return `${text}. `;
+					} else {
+						return `${text} voice. `;
+					}
+				} else {
+					return `Voice is unimportant. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function height() {
+		const el = document.createElement("div");
+		const slaveProperty = "heightMod";
+		const choices = new Map([
+			["greatly below average", "Petite"],
+			["below average", "Short"],
+			["normal", "Average height"],
+			["above average", "Tall"],
+			["greatly above average", "Very tall"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.heightMod === value) {
+					return `${text} height. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function weight() {
+		const el = document.createElement("div");
+		const slaveProperty = "weight";
+		const choices = new Map([
+			["200", "Immobile"],
+			["150", "Very Fat"],
+			["100", "Fat"],
+			["50", "Chubby"],
+			["15", "Plush"],
+			["0", "Average"],
+			["-15", "Thin"],
+			["-50", "Very thin"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.weight >= Number(value)) {
+					return `${text} weight. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function face() {
+		const el = document.createElement("div");
+		const slaveProperty = "face";
+		const choices = new Map([
+			["55", "Very attractive"],
+			["15", "Attractive"],
+			["0", "Average"],
+			["-15", "Unattractive"],
+			["-55", "Very unattractive"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.face >= Number(value)) {
+					return `${text} face. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function race() {
+		const el = document.createElement("div");
+		const slaveProperty = "race";
+		const choices = new Map([
+			["ethnicity is unimportant", "Ethnicity is unimportant"],
+		]);
+		for (const race of App.Data.misc.filterRaces) {
+			choices.set(race.toLowerCase(), race);
+		}
+
+		createDescription(el, description, slaveProperty);
+
+		// Choices
+
+		const select = document.createElement("select");
+		for (const [value, text] of choices) {
+			const option = document.createElement("option");
+			option.text = text;
+			option.value = value;
+			if (slave.race == option.value) {
+				option.selected = true;
+			}
+			select.append(option);
+		}
+		select.onchange = () => {
+			slave.race = select.options[select.selectedIndex].value;
+			jQuery("#race-text").empty().append(description());
+		};
+		el.append(select);
+
+		function description() {
+			const el = new DocumentFragment();
+			el.append("Ethnicity: ");
+			el.append(
+				App.UI.DOM.makeTextBox(
+					slave.race,
+					(v) => {
+						slave.race = v;
+						jQuery("#race-text").empty().append(description());
+					}
+				)
+			);
+			return el;
+		}
+
+		return el;
+	}
+
+	function skin() {
+		const el = document.createElement("div");
+		const slaveProperty = "skin";
+		const choices = new Map([
+			["left natural", "Left natural"]
+		]);
+		for (const skin of App.Data.misc.naturalSkins) {
+			choices.set(skin, capFirstChar(skin));
+		}
+
+		createDescription(el, description, slaveProperty);
+
+		// Choices
+		const select = document.createElement("select");
+		for (const [value, text] of choices) {
+			const option = document.createElement("option");
+			option.text = text;
+			option.value = value;
+			if (slave.skin == option.value) {
+				option.selected = true;
+			}
+			select.append(option);
+		}
+		select.onchange = () => {
+			slave.skin = select.options[select.selectedIndex].value;
+			jQuery("#skin-text").empty().append(description());
+		};
+		el.append(select);
+
+		function description() {
+			const el = new DocumentFragment();
+			el.append("Skin tone: ");
+			el.append(
+				App.UI.DOM.makeTextBox(
+					slave.skin,
+					(v) => {
+						slave.skin = v;
+						jQuery("#skin-text").empty().append(description());
+					}
+				)
+			);
+			return el;
+		}
+
+		return el;
+	}
+
+
+	function boobs() {
+		const el = document.createElement("div");
+		const slaveProperty = "boobs";
+		const choices = new Map([
+			["6000", "Massive"],
+			["2100", "Giant"],
+			["1400", "Huge"],
+			["800", "Big"],
+			["500", "Healthy"],
+			["200", "Flat"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.boobs >= Number(value)) {
+					if (slave.boobs <= 200) {
+						return `${text} chest. `;
+					} else {
+						return `${text} breasts. `;
+					}
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function butt() {
+		const el = document.createElement("div");
+		const slaveProperty = "butt";
+		const choices = new Map([
+			["8", "Massive"],
+			["5", "Huge"],
+			["3", "Healthy"],
+			["1", "Flat"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.butt >= Number(value)) {
+					return `${text} buttocks. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function sex() {
+		const el = document.createElement("div");
+		const slaveProperty = "sex";
+		const choices = new Map([
+			["3", "Both"],
+			["2", "Male"],
+			["1", "Female"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			switch (slave.sex) {
+				case 3:
+					return `Female (cock & balls options not applied). `;
+				case 2:
+					return `Male (pussy options not applied). `;
+				case 1:
+					return `Futanari (clit options not applied). `;
+			}
+		}
+
+		return el;
+	}
+
+	function virgin() {
+		const el = document.createElement("div");
+		const slaveProperty = "virgin";
+		const choices = new Map([
+			["1", "Not Important"],
+			["0", "Vaginal virgin"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.virgin === Number(value)) {
+					return `${text}. `;
+				}
+			}
+			return `Virginity not important. `;
+		}
+
+		return el;
+	}
+
+	function dick() {
+		const el = document.createElement("div");
+		const slaveProperty = "dick";
+		const choices = new Map([
+			["4", "Large penis"],
+			["2", "Small penis"],
+			["0", "No penis"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.dick >= Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function balls() {
+		const el = document.createElement("div");
+		const slaveProperty = "balls";
+		const choices = new Map([
+			["6", "Huge testicles"],
+			["4", "Large testicles"],
+			["2", "Small testicles"],
+			["0", "No testicles"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.balls >= Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function clit() {
+		const el = document.createElement("div");
+		const slaveProperty = "clit";
+		const choices = new Map([
+			["5", "Clit dick"],
+			["3", "Enormous clitoris"],
+			["1", "Big clitoris"],
+			["0", "Normal clitoris"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.clit === 5) {
+					return `Pseudophallus. `;
+				} else {
+					if (slave.clit >= Number(value)) {
+						return `${text}. `;
+					}
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function labia() {
+		const el = document.createElement("div");
+		const slaveProperty = "labia";
+		const choices = new Map([
+			["3", "Enormous labia"],
+			["2", "Huge labia"],
+			["1", "Big labia"],
+			["0", "Normal labia"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.labia === Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function vaginaLube() {
+		const el = document.createElement("div");
+		const slaveProperty = "vaginaLube";
+		const choices = new Map([
+			["2", "Sopping wet vagina"],
+			["1", "Wet vagina"],
+			["0", "Dry vagina"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.vaginaLube === Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function analVirgin() {
+		const el = document.createElement("div");
+		const slaveProperty = "analVirgin";
+		const choices = new Map([
+			["1", "Anal virginity is not important"],
+			["0", "Anal virgin"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.analVirgin === Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function skills() {
+		const el = document.createElement("div");
+		const slaveProperty = "skills";
+		const choices = new Map([
+			["65", "Expert"],
+			["35", "Skilled"],
+			["0", "Unskilled"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			if (slave.skills <= 10) {
+				return `Sexually unskilled. `;
+			} else if (slave.skills <= 15) {
+				return `Basic sex skills. `;
+			} else {
+				return `Sexually skilled. `;
+			}
+		}
+
+		return el;
+	}
+
+	function skillWhore() {
+		const el = document.createElement("div");
+		const slaveProperty = "skill.whore";
+		const choices = new Map([
+			["35", "Expert"],
+			["15", "Skilled"],
+			["0", "Unskilled"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			if (slave.skill.whore <= 10) {
+				return `Unskilled at prostitution and entertainment. `;
+			} else if (slave.skills <= 15) {
+				return `Basic skills at prostitution and entertainment. `;
+			} else {
+				return `Skilled at prostitution and entertainment. `;
+			}
+		}
+
+		return el;
+	}
+
+	function skillCombat() {
+		const el = document.createElement("div");
+		const slaveProperty = "skill.combat";
+		const choices = new Map([
+			["1", "Skilled"],
+			["0", "Unskilled"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.skill.combat >= Number(value)) {
+					return `${text} at combat. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function intelligence() {
+		const el = document.createElement("div");
+		const slaveProperty = "intelligence";
+		const choices = new Map([
+			["-3", "Moronic"],
+			["-2", "Very stupid"],
+			["-1", "Stupid"],
+			["0", "Average intelligence"],
+			["1", "Smart"],
+			["2", "Very smart"],
+			["3", "Brilliant"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.intelligence === Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function intelligenceImplant() {
+		const el = document.createElement("div");
+		const slaveProperty = "intelligenceImplant";
+		const choices = new Map([
+			["30", "Well educated"],
+			["15", "Educated"],
+			["0", "Uneducated"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.intelligenceImplant >= Number(value)) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function eyes() {
+		const el = document.createElement("div");
+		const slaveProperty = "eyes";
+		const choices = new Map([
+			["0", "Normal Vision"],
+			["-1", "Nearsighted"],
+		]);
+		if (V.seeExtreme) {
+			choices.set("-2", "Blind");
+		}
+
+		// Desc setup
+		const descText = document.createElement("span");
+		descText.id = (`${slaveProperty}-text`);
+		descText.append(description());
+		el.append(descText);
+
+		const linkArray = [];
+		if (V.seeExtreme) {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Blind",
+					() => {
+						eyeSurgery(slave, "both", "blind");
+						jQuery(`#${descText.id}-text`).empty().append(description());
+					}
+				)
+			);
+		}
+		linkArray.push(
+			App.UI.DOM.link(
+				"Nearsighted",
+				() => {
+					eyeSurgery(slave, "both", "blur");
+					jQuery(`#${descText.id}-text`).empty().append(description());
+				}
+			)
+		);
+		linkArray.push(
+			App.UI.DOM.link(
+				"Normal Vision",
+				() => {
+					eyeSurgery(slave, "both", "fix");
+					jQuery(`#${descText.id}-text`).empty().append(description());
+				}
+			)
+		);
+		el.append(App.UI.DOM.generateLinksStrip(linkArray));
+
+		function description() {
+			const vision = getBestVision(slave);
+			for (const [value, text] of choices) {
+				if (vision === Number(value)) {
+					return `${text}. `;
+				}
+			}
+			return `Blind. `;
+		}
+
+		return el;
+	}
+
+	function hears() {
+		const el = document.createElement("div");
+		const slaveProperty = "hears";
+		const choices = new Map([
+			["0", "Normal Hearing"],
+			["-1", "Hard of Hearing"],
+		]);
+		if (V.seeExtreme) {
+			choices.set("-2", "Deaf");
+		}
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.hears === Number(value)) {
+					return `${text}. `;
+				}
+			}
+			return `Hard of hearing. `;
+		}
+
+		return el;
+	}
+
+	function smells() {
+		const el = document.createElement("div");
+		const slaveProperty = "smells";
+		const choices = new Map([
+			["0", "Normal Sense of smell"],
+			["-1", "No Sense of smell"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.smells === Number(value)) {
+					return `${text}.`;
+				} else {
+					return `Normal Sense of smell. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function tastes() {
+		const el = document.createElement("div");
+		const slaveProperty = "tastes";
+		const choices = new Map([
+			["0", "Normal Sense of taste"],
+			["-1", "No Sense of taste"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.tastes === Number(value)) {
+					return `${text}.`;
+				} else {
+					return `Normal Sense of taste. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function limbs() {
+		const el = new DocumentFragment();
+		const limbs = new Map([
+			["arm.left", "Left arm"],
+			["arm.right", "Right arm"],
+			["leg.left", "Left leg"],
+			["leg.right", "Right leg"],
+		]);
+
+		for (const [value, text]  of limbs) {
+			const div = document.createElement("div");
+
+			// Desc setup
+			const descText = document.createElement("span");
+			descText.id = (`${value}-text`).replace(/\./g, "-");
+			const hasLimb = (_.get(slave, value) !== null);
+			descText.append(description(hasLimb, text));
+			div.append(descText);
+
+			const linkArray = [];
+			linkArray.push(
+				App.UI.DOM.link(
+					"Add",
+					() => {
+						_.set(slave, value, new App.Entity.LimbState());
+						jQuery(`#${descText.id}`).empty().append(description(true, text));
+					}
+				)
+			);
+			linkArray.push(
+				App.UI.DOM.link(
+					"Remove",
+					() => {
+						_.set(slave, value, null);
+						jQuery(`#${descText.id}`).empty().append(description(false, text));
+					}
+				)
+			);
+			div.append(App.UI.DOM.generateLinksStrip(linkArray));
+
+			el.append(div);
+		}
+
+		function description(hasLimb, text) {
+			return `${text}: ${(hasLimb) ? `Yes` : `No`}. `;
+		}
+
+		return el;
+	}
+
+	function nationality() {
+		const el = document.createElement("div");
+		const slaveProperty = "nationality";
+		const choices = new Map([
+			["slave", "Slave"],
+			["Stateless", "Stateless"],
+			["Nationality is unimportant", "Nationality is unimportant"],
+		]);
+		for (const nationality of setup.baseNationalities) {
+			choices.set(nationality, nationality);
+		}
+
+		createDescription(el, description, slaveProperty);
+
+		// Choices
+		const select = document.createElement("select");
+		for (const [value, text] of choices) {
+			const option = document.createElement("option");
+			option.text = text;
+			option.value = value;
+			if (slave.nationality === option.value) {
+				option.selected = true;
+			}
+			select.append(option);
+		}
+		select.onchange = () => {
+			slave.nationality = select.options[select.selectedIndex].value;
+			jQuery("#nationality-text").empty().append(description());
+		};
+		el.append(select);
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.nationality === value) {
+					return `${text}. `;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function reset() {
+		return App.UI.DOM.makeElement(
+			"p",
+			App.UI.DOM.link(
+				"Reset custom order form",
+				() => {
+					V.customSlave = new App.Entity.CustomSlaveOrder();
+					V.market = new App.Markets.GlobalVariable();
+					V.market.slaveMarket = "Custom Slave";
+					V.market.newSlaves = [];
+				},
+				[],
+				"Market"
+			)
+		);
+	}
+
+	function orderControls() {
+		const linkArray = [];
+		if (V.customSlaveOrdered === 1) {
+			linkArray.push(
+				App.UI.DOM.passageLink(
+					"Update custom slave order",
+					"Buy Slaves"
+				)
+			);
+			linkArray.push(
+				App.UI.DOM.link(
+					"Withdraw custom slave order",
+					() => { V.customSlaveOrdered = 0; },
+					[],
+					"Buy Slaves"
+				)
+			);
+		} else {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Post custom slave order",
+					() => { V.customSlaveOrdered = 1; },
+					[],
+					"Buy Slaves"
+				)
+			);
+		}
+
+		return App.UI.DOM.makeElement("p", App.UI.DOM.generateLinksStrip(linkArray));
+	}
+
+	/**
+	 *
+	 * @param {HTMLElement} element
+	 * @param {Function} text
+	 * @param {string} id
+	 */
+	function createDescription(element, text, id) {
+		const span = document.createElement('span');
+		span.id = `${id}-text`;
+		span.append(text());
+		element.append(span);
+	}
+
+	/**
+	 *
+	 * @param {string} slaveParam
+	 * @param {Map} choices
+	 * @param {Function} description
+	 */
+	function choicesMaker(slaveParam, choices, description) {
+		const linkArray = [];
+		for (const [value, text] of choices) {
+			linkArray.push(
+				App.UI.DOM.link(
+					text,
+					() => {
+						_.set(slave, slaveParam, (Number(value) || value));
+						jQuery(`#${slaveParam}-text`).empty().append(description());
+					}
+				)
+			);
+		}
+		return App.UI.DOM.generateLinksStrip(linkArray);
+	}
+};
diff --git a/src/markets/theMarket/buySlaves.js b/src/markets/theMarket/buySlaves.js
index 728d250f69a4c333015b1252515dc82de8b6a8b7..b224e3918d7d1728380d0ce4fa3c986fed95e52d 100644
--- a/src/markets/theMarket/buySlaves.js
+++ b/src/markets/theMarket/buySlaves.js
@@ -137,29 +137,20 @@ App.UI.buySlaves = function() {
 		}
 
 		const linkArray = [];
-		if (store.marketType === "Custom Slave") { // hardcoding this exception because converting this is going to be a bitch.
-			linkArray.push(
-				App.UI.DOM.passageLink(
-					store.title,
-					store.marketType
-				)
-			);
-		} else {
-			linkArray.push(
-				App.UI.DOM.link(
-					store.title,
-					() => {
-						V.market = new App.Markets.GlobalVariable();
-						V.market.slaveMarket = store.marketType;
-						V.market.newSlaves = [];
-						V.market.numArcology = 1;
-						updateNav();
-					},
-					[],
-					"Market"
-				)
-			);
-		}
+		linkArray.push(
+			App.UI.DOM.link(
+				store.title,
+				() => {
+					V.market = new App.Markets.GlobalVariable();
+					V.market.slaveMarket = store.marketType;
+					V.market.newSlaves = [];
+					V.market.numArcology = 1;
+					updateNav();
+				},
+				[],
+				"Market"
+			)
+		);
 		if (store.bulkAvailable !== false) {
 			if (V.cash > (minCost * 5)) {
 				linkArray.push(
@@ -201,7 +192,7 @@ App.UI.buySlaves = function() {
 		if (store.note) {
 			App.UI.DOM.appendNewElement("span", el, ` ${store.note}`, "note");
 		}
-		if ([App.Data.misc.schools].includes(store.marketType)) {
+		if (App.Data.misc.schools.includes(store.marketType)) {
 			if (V[store.marketType].schoolSale === 1) {
 				App.UI.DOM.appendNewElement("span", el, `Offering your first purchase at half price this week. `, "yellow");
 			}
diff --git a/src/npc/children/childSummary.js b/src/npc/children/childSummary.js
index af022e0d9c285fb97b535ffc59d123be7534ee5e..51fe14dafa01fee35fbbc8d96e5ac75759289429 100644
--- a/src/npc/children/childSummary.js
+++ b/src/npc/children/childSummary.js
@@ -3801,13 +3801,15 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 	 * @param {App.Entity.SlaveState} child
 	 */
 	function shortExtendedFamily(child) {
+		const
+			{daughter, sister, wife} = getPronouns(child);
 		let handled = 0;
 		if (child.mother > 0) {
 			const _ssj = V.slaves.findIndex(function(s) {
 				return s.ID === child.mother;
 			});
 			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				r += `${SlaveFullName(V.slaves[_ssj])}'s ${daughter}`;
 				if (child.relationshipTarget === V.slaves[_ssj].ID) {
 					const friendShipShort = relationshipTermShort(child);
 					r += ` & ${friendShipShort}`;
@@ -3816,21 +3818,21 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 			}
 			r += " ";
 		} else if (child.mother === -1) {
-			r += `Your daughter`;
+			r += `Your ${daughter}`;
 			if (child.relationship < -1) {
 				r += ` & ${PCrelationshipTerm(child)}`;
 				handled = 1;
 			}
 			r += " ";
 		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.mother].fullName}'s daughter `;
+			r += `${V.missingTable[child.mother].fullName}'s ${daughter} `;
 		}
 		if (child.father > 0 && child.father !== child.mother) {
 			const _ssj = V.slaves.findIndex(function(s) {
 				return s.ID === child.father;
 			});
 			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				r += `${SlaveFullName(V.slaves[_ssj])}'s ${daughter}`;
 				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
 					const friendShipShort = relationshipTermShort(child);
 					r += ` & ${friendShipShort}`;
@@ -3839,14 +3841,14 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 			}
 			r += " ";
 		} else if (child.father === -1 && child.mother !== -1) {
-			r += `Your daughter`;
+			r += `Your ${daughter}`;
 			if (child.relationship < -1) {
 				r += ` & ${PCrelationshipTerm(child)}`;
 				handled = 1;
 			}
 			r += " ";
 		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.father].fullName}'s daughter`;
+			r += `${V.missingTable[child.father].fullName}'s ${daughter}`;
 		}
 		if (child.daughters === 1) {
 			let _ssj = V.slaves.findIndex(function(s) {
@@ -3881,7 +3883,7 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 				return areSisters(s, child) > 0;
 			});
 			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s sister`;
+				r += `${SlaveFullName(V.slaves[_ssj])}'s ${sister}`;
 				if (child.relationshipTarget === V.slaves[_ssj].ID) {
 					const friendShipShort = relationshipTermShort(child);
 					r += `& ${friendShipShort}`;
@@ -3902,7 +3904,7 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 				r += ` ${friendShipShort}`;
 			}
 		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `Your wife`;
+			r += `Your ${wife}`;
 		} else if (child.relationship === -2) {
 			r += `E Bonded`;
 		} else if (child.relationship === -1) {
diff --git a/src/npc/infants/infantSummary.js b/src/npc/infants/infantSummary.js
index 9e1cb4dd19244367f1691c2d09038bcefe541d38..7c7da98707e1bb484fb660ff015e47cbf751ec50 100644
--- a/src/npc/infants/infantSummary.js
+++ b/src/npc/infants/infantSummary.js
@@ -1599,7 +1599,7 @@ App.Facilities.Nursery.InfantSummary = function(child) {
 
 	function shortExtendedFamily() {
 		const
-			{daughter, sister} = getPronouns(child);
+			{daughter, sister, wife} = getPronouns(child);
 
 		let
 			handled = 0,
@@ -1709,7 +1709,7 @@ App.Facilities.Nursery.InfantSummary = function(child) {
 				r += ` ${friendShipShort}`;
 			}
 		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `Your wife`;
+			r += `Your ${wife}`;
 		} else if (child.relationship === -2) {
 			r += `E Bonded`;
 		} else if (child.relationship === -1) {
@@ -1721,7 +1721,7 @@ App.Facilities.Nursery.InfantSummary = function(child) {
 
 	function longExtendedFamily() {
 		const
-			{daughter, sister} = getPronouns(child);
+			{daughter, sister, wife} = getPronouns(child);
 
 		let
 			handled = 0,
@@ -1846,7 +1846,7 @@ App.Facilities.Nursery.InfantSummary = function(child) {
 				r += `<span class="lightgreen">${friendship}.</span> `;
 			}
 		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `<span class="lightgreen">Your wife.</span> `;
+			r += `<span class="lightgreen">Your ${wife}.</span> `;
 		} else if (child.relationship === -2) {
 			r += `<span class="lightgreen">Emotionally bonded to you.</span> `;
 		} else if (child.relationship === -1) {
diff --git a/src/npc/interaction/fKiss.tw b/src/npc/interaction/fKiss.tw
index d58c6643497a7060ffe4e5af7186c401bdf54959..1019969fc2f190078084e6c7309f362bd8ea417a 100644
--- a/src/npc/interaction/fKiss.tw
+++ b/src/npc/interaction/fKiss.tw
@@ -50,7 +50,7 @@ You tell <<= getSlave($AS).slaveName>> to
 	<<if getSlave($AS).fetish == "mindbroken">>
 		$He complies mechanically. $He remembers that when <<= getWrittenTitle(getSlave($AS))>>'s commands are not obeyed, there is punishment. You kiss $him deeply and intensely; $he doesn't understand why.
 	<<elseif getSlave($AS).devotion+getSlave($AS).trust >= 175>>
-		$He complies in a wifely fashion, moving $his body as $he approaches to best catch your desire. Once $he's close, you take a moment to gaze deeply
+		$He complies in a <<= $wife>>ly fashion, moving $his body as $he approaches to best catch your desire. Once $he's close, you take a moment to gaze deeply
 		<<if canSee(getSlave($AS))>>
 			into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's married to affirming, and looks down with a smile, running $his eyes over your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>.
 		<<else>>
diff --git a/src/npc/interaction/fPat.tw b/src/npc/interaction/fPat.tw
index 20baa39edec881d42f8c27ff90db2d5d192a4a03..57c3865213a3a04d1d1413858cb9331468cb82cb 100644
--- a/src/npc/interaction/fPat.tw
+++ b/src/npc/interaction/fPat.tw
@@ -39,7 +39,7 @@ You tell <<= getSlave($AS).slaveName>> to
 	<<if getSlave($AS).fetish == "mindbroken">>
 		$He complies mechanically. $He remembers that when <<= getWrittenTitle(getSlave($AS))>>'s commands are not obeyed, there is punishment. Once $he's close, you hold $his face in your palms and look into $his empty <<= App.Desc.eyesColor(getSlave($AS))>>. $He shows no reaction
 	<<elseif getSlave($AS).devotion+getSlave($AS).trust >= 175>>
-		$He complies in a wifely fashion, moving $his body as $he approaches to best enflame your desire, eager to be close to the _womanP who married $him. Once $he's close, you hold $his face in your palms and gaze
+		$He complies in a <<= $wife>>ly fashion, moving $his body as $he approaches to best enflame your desire, eager to be close to the _womanP who married $him. Once $he's close, you hold $his face in your palms and gaze
 		<<if canSee(getSlave($AS))>>
 			deeply into $his <<= App.Desc.eyesColor(getSlave($AS))>>. $He finds the intense look from the _womanP $he's married to affirming, and looks down with a smile, running $his eyes over your <<if $PC.boobs >= 300>>bosom<<else>>chest<</if>>.
 		<<else>>
diff --git a/src/npc/slaveStats.tw b/src/npc/slaveStats.tw
index dffd1e2393e911ca37710a21de21e72b79f3957e..64ea16a3807fb46fa92499171fde03a0debdc1d7 100644
--- a/src/npc/slaveStats.tw
+++ b/src/npc/slaveStats.tw
@@ -254,7 +254,7 @@ Income: <<= num(_slave.lastWeeksRepIncome)>>
 		<br>UnderArm:
 		HColor: _slave.underArmHColor,
 		Style: _slave.underArmHStyle,
-		Override H Colour: _slave.override_Arm_H_Color
+		Override H Color: _slave.override_Arm_H_Color
 
 		<br>Nails: _slave.nails
 
diff --git a/src/pregmod/breederProposal.tw b/src/pregmod/breederProposal.tw
index 99e59b87b982a06988d13c4ba2e92a974cc99449..587504983564d15c9aebf7a2119f28c8b8429413 100644
--- a/src/pregmod/breederProposal.tw
+++ b/src/pregmod/breederProposal.tw
@@ -10,17 +10,14 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 <<if $eugenicsFullControl == 1>>
 	"That sounds like an acceptable proposal. We'll draft the standards for breeding stock and notify you shortly."
 	<<set $propOutcome = 1>>
-	<<InitStandards>>
 	<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 <<elseif $PC.pregSource == -1 || $PC.pregSource == -6>>
 	"Since you are doing your part and carrying an Elite child, we will gladly reward you by granting your proposal. We shall decide upon the standards for breeding stock and notify you shortly."
 	<<set $propOutcome = 1>>
-	<<InitStandards>>
 	<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 <<elseif $PC.counter.birthElite > 0>>
 	"Since you have carried children for our cause, we will gladly reward you by granting your proposal. We shall decide upon the standards for breeding stock and notify you shortly."
 	<<set $propOutcome = 1>>
-	<<InitStandards>>
 	<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 <<elseif $PC.dick == 0>>
 	<<if $failedElite > 50>>
@@ -30,7 +27,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 		<<replace "#result">>
 			"Good choice, _girlP. A selection of eligible donors will be provided to you; take your pick and bear our children. Or use a test tube, if that's more to your tastes."
 			<<set $playerBred = 1, $propOutcome = 1>>
-			<<InitStandards>>
 			<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 		<</replace>>
 		<</link>>
@@ -49,7 +45,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 			<<replace "#result">>
 				"Good choice, _girlP; your proposal is more important than your dignity after all, isn't it? A selection of eligible donors will be provided to you; take your pick and bear our children. Or use a test tube, if that's more to your tastes."
 				<<set $failedElite -= 50, $playerBred = 1, $propOutcome = 1>>
-				<<InitStandards>>
 				<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 			<</replace>>
 		<</link>>
@@ -58,7 +53,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 				<<replace "#result">>
 					"Yes, you have done much to further our cause. We respect the 'balls' on you, despite your lack of them. Very well, we shall set the standards for what shall qualify as breeding stock and our standards will be delivered to you shortly."
 					<<set $propOutcome = 1>>
-					<<InitStandards>>
 					<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 				<</replace>>
 			<</link>>
@@ -81,7 +75,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 			<<replace "#result">>
 				"Your contributions will be appreciated. We shall convene to decide the qualifications for a slave to become a breeder. We will inform you of them when we send the list of eligible donors to breed you. Or send you a test tube, if that's more to your tastes."
 				<<set $failedElite -= 50, $playerBred = 1, $propOutcome = 1>>
-				<<InitStandards>>
 				<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 			<</replace>>
 		<</link>>
@@ -102,7 +95,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 			<<replace "#result">>
 				"Your contributions will be appreciated. We shall convene to decide the qualifications for a slave to become a breeder. We will inform you of them when we send the list of eligible donors to breed you. Or send you a test tube, if that's more to your tastes."
 				<<set $playerBred = 1, $propOutcome = 1>>
-				<<InitStandards>>
 				<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 			<</replace>>
 		<</link>>
@@ -110,7 +102,6 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 			<<replace "#result">>
 				"Very well, if you wish to waste your gift, it is your prerogative. We shall convene to decide the qualifications for a slave to become a breeder and inform you upon completion."
 				<<set $propOutcome = 1>>
-				<<InitStandards>>
 				<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 			<</replace>>
 		<</link>>
@@ -118,8 +109,7 @@ Within the hour, you are called before <<if $eugenicsFullControl == 1>>what's le
 	<<else>>
 		"We have read your proposal and agree. However, we shall set the standards for what shall qualify as breeding stock, not you. Our standards will be delivered to you shortly."
 		<<set $propOutcome = 1>>
-		<<InitStandards>>
 		<<set $nextButton = "Continue">><<UpdateNextButton>> /* unlock Continue button */
 	<</if>>
 <</if>>
-<br><br>
+<br><br>
\ No newline at end of file
diff --git a/src/pregmod/breedingTest.tw b/src/pregmod/breedingTest.tw
index 8eb2a76d8af3716b7e104b7c40b8ab9ece538a33..972b2fecd0357e3d949cf4e59ebae1ee4cfc7ae7 100644
--- a/src/pregmod/breedingTest.tw
+++ b/src/pregmod/breedingTest.tw
@@ -1,8 +1,4 @@
 :: BreedingTest [nobr]
 
-<<set $nextButton = "Confirm changes", $nextLink = "AS Dump", $returnTo = "Slave Interact">>
-
-<<UpdateStandards>>
-<<BreedingStandards>>
-<br><br>
-<<BreedingEligibility>>
+<<set $nextButton = "Confirm changes", $nextLink = "Slave Interact">>
+<<print eliteBreedingExam(getSlave($AS))>>
\ No newline at end of file
diff --git a/src/pregmod/eliteBreedingExam.js b/src/pregmod/eliteBreedingExam.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd91cfc011409ee4e8d917180c6c45d4bae262b3
--- /dev/null
+++ b/src/pregmod/eliteBreedingExam.js
@@ -0,0 +1,237 @@
+globalThis.eliteBreedingExam = function(slave = null) {	
+	const eliteAngered = V.failedElite > 100;
+	const SlaveProfessionalismEstablished = V.arcologies[0].FSSlaveProfessionalism > 20;
+	const preferYounger= V.arcologies[0].FSYouthPreferentialist > 20;
+	const partyAnimal = V.arcologies[0].FSHedonisticDecadence > 20;
+	const cost = 5000;
+	let r = [], test, passing = 0, fixable;
+	
+	const result = function() {
+		if (slave) {
+			if (test === true) {
+				return `<span class="lime">PASSED</span>`;
+			} else if (fixable) {
+				return `<span class="yellow">Within fixable range.</span>`
+			} else {
+				passing--;
+				return `<span class="red">FAILED</span>`;
+			}
+		}
+		return ``;
+	};
+
+	r.push(`For each slave be to examined, a fee of <span class='yellowgreen'>${cashFormat(cost)}</span> will be deducted from your account.`);
+	r.push(`Updates will be posted periodically. It is your responsibility to keep up to date.`);
+	r.push(`Failures will be sterilized. Please make sure your slave fits the following criteria before submitting them for testing. We shall not be held responsible for time wasted.`);
+	if (!slave) {
+		r.push(`Must be not; already be marked as a breeding slave, inside a fuckdoll suit, infertile and already with child.`);
+	} else {
+		r.push(`${slave.slaveName} is up for review:`);
+	}
+
+	if (slave) {
+		test = slave.intelligence + slave.intelligenceImplant >= (eliteAngered ? 95 : 50);
+	}
+	r.push(`Must be ${eliteAngered ? 'highly intelligent' : 'very smart'}. ${result()}`);
+	
+	if (slave) {
+		test = Beauty(slave) >= (eliteAngered ? 120 : 100);
+	}
+	r.push(`Must be ${eliteAngered ? 'unbelievably' : ''} beautiful. ${result()}`);
+	
+	if (slave) {
+		test = slave.face >= (eliteAngered ? 95 : 40);
+	}
+	r.push(`Their face must be ${eliteAngered ? 'breathtaking' : 'gorgeous'}. ${result()}`);
+
+	if (slave) {
+		test = slave.chem <= 20;
+	}	
+	r.push(`Their health must not be overly impacted by drug use. ${result()}`);
+	
+	if (slave) {
+		test = slave.addict === 0;
+	}
+	r.push(`They must not be addicted to drugs. ${result()}`);
+
+	if (V.arcologies[0].FSMaturityPreferentialist > 20 || V.arcologies[0].FSYouthPreferentialist > 20) {
+		const targetAge = 24;
+		if (slave) {
+			if (V.arcologies[0].FSMaturityPreferentialist > 20) {
+				test = slave.physicalAge > targetAge;
+			} else {
+				test = slave.physicalAge < targetAge;
+			}
+		}
+		r.push(`Must be ${preferYounger? 'younger' : 'older'} than ${targetAge}. ${result()}`);
+	}
+
+	if (V.arcologies[0].FSIntellectualDependency > 20) {
+		if (slave) {
+			test = slave.energy >= 100;
+		}
+		r.push(`Must be sexually receptive at all times. ${result()}`);
+	} else if (V.arcologies[0].FSSlaveProfessionalism > 20) {
+		if (slave) {
+			test = slave.skill.vaginal + slave.skill.anal + slave.skill.oral + slave.skill.entertainment + slave.skill.whoring >= (eliteAngered ? 500 : 400);
+		}
+		r.push(`Must be capable of mastering skills. ${result()}`);
+		if (slave) {
+			test = slave.accent <= 1;
+		}
+		r.push(`Must be capable of eloquent and accurate speech. ${result()}`);
+	}
+	if (V.arcologies[0].FSPetiteAdmiration > 20 || V.arcologies[0].FSStatuesqueGlorification > 20) {
+		const targetHeight = V.arcologies[0].FSPetiteAdmiration > 20 ? 150 : 186;
+		if (V.arcologies[0].FSPetiteAdmiration > 20) {
+			if (slave) {
+				test = (slave.height - (slave.heightImplant * 10)) < targetHeight;
+			}
+			r.push(`Must naturally be very short. (${targetHeight} cm) ${result()}`);
+			if (slave) {
+				test = (slave.height - (slave.heightImplant * 10)) < Height.mean(slave) - 15;
+			}
+			r.push(`Must naturally be very short for their age. ${result()}`);
+		} else if (V.arcologies[0].FSStatuesqueGlorification > 20) {
+			if (slave) {
+				test = (slave.height - (slave.heightImplant * 10)) > targetHeight;
+			}
+			r.push(`Must naturally be very tall. (${targetHeight} cm) ${result()}`);
+		}
+	}
+
+	if (V.arcologies[0].FSSupremacist > 20 || V.arcologies[0].FSSubjugationist > 20) {
+		const targetRace = V.arcologies[0].FSSupremacist > 20 ? V.arcologies[0].FSSupremacistRace : V.arcologies[0].FSSubjugationistRace;
+		if (slave) {
+			test = slave.race === targetRace;
+		}
+		r.push(`Must be ${targetRace}. ${result()}`);
+	}
+
+	if (V.arcologies[0].FSGenderRadicalist > 20) {
+		if (slave) {
+			test = slave.dick >= 1 && slave.balls >= 1;
+		}
+		r.push(`Must have a functional penis. ${result()}`);
+	} else if (V.arcologies[0].FSGenderFundamentalist > 20) {
+		if (slave) {
+			test = slave.dick === 0 && slave.balls === 0;
+		}
+		r.push(`Must be physically female. ${result()}`);
+	}
+	if (V.arcologies[0].FSPaternalist > 20) {
+		if (slave) {
+			test = slave.intelligenceImplant >= (SlaveProfessionalismEstablished ? 30 : 15);
+		}
+		r.push(`Must be ${SlaveProfessionalismEstablished ? 'well' : ''} educated. ${result()}`);
+		if (slave) {
+			test = slave.health.condition >= 60;
+		}
+		r.push(`Must be in good health. ${result()}`);
+	// } else if (V.arcologies[0].FSDegradationist > 20) {
+	}
+
+	if (SlaveProfessionalismEstablished) {
+		if (slave) {
+			test = slave.intelligenceImplant >= 15;
+		}
+		r.push(`Must be well educated. ${result()}`);
+	}
+
+	if (V.arcologies[0].FSBodyPurist > 20) {
+		if (slave) {
+			test = slave.chem <= (eliteAngered ? 0 : 15);
+		}
+		r.push(`Must have low carcinogen levels. ${result()}`);
+		if (slave) {
+			test = slave.boobsImplant + slave.buttImplant + slave.lipsImplant + slave.hipsImplant + slave.shouldersImplant === 0 && slave.faceImplant <= 5 && slave.bellyImplant === -1;
+		}
+		r.push(`Must be implant free. ${result()}`);
+	// } else if (V.arcologies[0].FSTransformationFetishist > 20) {
+	//	idealSlave.chem = 20;
+	}
+	if (V.arcologies[0].FSSlimnessEnthusiast > 20) {
+		if (slave) {
+			test = slave.weight <= (partyAnimal ? 30 : 0);
+		}
+		if (partyAnimal) {
+			r.push(`May be no larger than "plush". ${result()}`);
+		} else {
+			r.push(`Must be thin. ${result()}`);
+		}
+		if (slave) {
+			test = slave.butt <= 2;
+		}
+		r.push(`Must have a trim rear. ${result()}`);
+		if (slave) {
+			test = slave.boobs <= 400;
+		}
+		r.push(`Must have a sleek chest. ${result()}`);
+	} else if (V.arcologies[0].FSAssetExpansionist > 20) {
+		if (slave) {
+			test = (slave.butt - slave.buttImplant) >= 6;
+		}
+		r.push(`Must have a naturally gigantic rear. ${result()}`);
+		if (slave) {
+			test = (slave.boobs - slave.boobsImplant) >= 1000;
+		}
+		r.push(`Must be naturally busty. ${result()}`);
+	}
+	if (V.arcologies[0].FSPastoralist > 20) {
+		if (slave) {
+			test = slave.lactation === 1;
+		}
+		r.push(`Must be lactating naturally. ${result()}`);
+	}
+	if (V.arcologies[0].FSPhysicalIdealist > 20) {
+		if (V.arcologies[0].FSPhysicalIdealistLaw === 1) {
+			const musclesMin = 20;
+			const musclesMax = 50;
+			if (slave) {
+				test = slave.weight <= 30;
+			}
+			r.push(`Must not be overweight. ${result()}`);
+			if (slave) {
+				test = between(slave.muscles, musclesMin, musclesMax);
+				fixable = (slave.muscles <= musclesMin && slave.muscles > musclesMax - musclesMin) || (slave.muscles >= musclesMax && slave.muscles < musclesMin + 30);
+				if (fixable && passing === 0) {
+					passing = 2;
+				}
+			}
+			r.push(`Must be fit, but not too muscular. ${result()}`);
+		} else {
+			if (slave) {
+				test = slave.muscles > 95;
+			}
+			r.push(`Must be extremely muscular. ${result()}`);
+		}
+	} else if (V.arcologies[0].FSHedonisticDecadence > 20) {
+		const targetWeight = V.arcologies[0].FSSlimnessEnthusiast > 20 ? 10 : 95;
+		if (slave) {
+			test = slave.weight > targetWeight;
+		}
+		if (V.arcologies[0].FSSlimnessEnthusiast > 20) {
+			r.push(`Must be more than "trim". ${result()}`);
+		} else {
+			r.push(`Must be big, soft and fat. ${result()}`);
+		}
+	}
+	
+	if (slave) {
+		if (passing === 2) {
+			r.push(`The aforementioned slave has been deemed <span class="yellow">currently unsuitable</span> for breeding, but may be resubmitted after corrections are applied. We understand the subjective nature of "fit" and do not wish to preclude the use a viable breeder over such a trivial fix. A contraceptive routine has been applied to protect against "accidents" in the interim.`);
+			slave.preg = -1;
+		} else if (passing !== 0) {
+			r.push(`The aforementioned slave has been deemed <span class="red">unsuitable</span> for breeding.`);
+			slave.preg = -3;
+		} else {
+			r.push(`The aforementioned slave has been deemed <span class="green">worthy</span> of being used for breeding and has been marked as such. Please note the increased restrictions on breeding slaves.`);
+			r.push(`They are not permitted for public use or anything that may harm their growing child. The child within them is considered a member of the Elite class and as such, any harm that comes to them will result in severe penalties to the breeder's owner. Development of the child will be closely monitored; should the fetus be identified as not of the owner's blood (or any other member of the Elite class), said owner shall face severe fines.`);
+			slave.breedingMark = 1; slave.pregControl = "none";
+			removeJob(slave, slave.assignment);	
+		}
+		cashX(-cost, "capEx");
+	}
+	
+	return r.map(t => `<div>${t}</div>`).join("");
+};
diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw
index 52b6c07af1dbee894aac3c5419aabf5cbd570da9..922e5d9ee74cdc460793f39be539c8a3021503f9 100644
--- a/src/pregmod/managePersonalAffairs.tw
+++ b/src/pregmod/managePersonalAffairs.tw
@@ -687,13 +687,5 @@
 
 <<if $propOutcome == 1 && $arcologies[0].FSRestart != "unset">>
 	<h2>Elite Breeder Qualifications</h2>
-
-	<p>
-		<<if ndef $activeStandard>>
-			<<InitStandards>>
-		<<else>>
-			<<UpdateStandards>>
-			<<BreedingStandards>>
-		<</if>>
-	</p>
-<</if>>
+	<p> <<print eliteBreedingExam()>> </p>
+<</if>>
\ No newline at end of file
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index ae146851adc33459094d2142b7be5b9caaf17de9..28693e4366fe7096a109a0a75f727789430c0983 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -146,457 +146,6 @@
 	<<set _WivesALisp = lispReplace(_WivesA)>>
 <</widget>>
 
-<<widget "InitStandards">>
-
-<<set $activeStandard = {age: 24, weightMax: 0, weightMin: 0, musclesMin: 0, musclesMax: 0, raceSup: "white", raceSub: "white", boobs: 0, boobsImplant: 0, lactation: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, face: 0, faceImplant: 0, lips: 15, lipsImplant: 0, chem: 0, addict: 0, intelligence: 0, intelligenceImplant: 0, bellyImplant: -1, beauty: 0, dick: 0, balls: 0, health: 0, skill: 0, accent: 0, height: 150, energy: 100}>>
-
-<<UpdateStandards>>
-<<BreedingStandards>>
-<</widget>>
-
-<<widget "UpdateStandards">>
-<<if $failedElite > 100>>
-	<<set $activeStandard.intelligence = 95>>
-	<<set $activeStandard.beauty = 120>>
-	<<set $activeStandard.face = 95>>
-<<else>>
-	<<set $activeStandard.intelligence = 50>>
-	<<set $activeStandard.beauty = 100>>
-	<<set $activeStandard.face = 40>>
-<</if>>
-<<if $arcologies[0].FSIntellectualDependency > 20>>
-	<<set $activeStandard.energy = 100>>
-<<elseif $arcologies[0].FSSlaveProfessionalism > 20>>
-	<<if $failedElite > 100>>
-		<<set $activeStandard.skill = 500>>
-	<<else>>
-		<<set $activeStandard.skill = 400>>
-	<</if>>
-	<<set $activeStandard.accent = 1>>
-<</if>>
-<<if $arcologies[0].FSPetiteAdmiration > 20>>
-	<<set $activeStandard.height = 150>>
-<<elseif $arcologies[0].FSStatuesqueGlorification > 20>>
-	<<set $activeStandard.height = 185>>
-<</if>>
-<<set $activeStandard.chem = 20>>
-<<set $activeStandard.addict = 0>>
-<<if $arcologies[0].FSSupremacist > 20>>
-	<<set $activeStandard.raceSup = $arcologies[0].FSSupremacistRace>>
-<</if>>
-<<if $arcologies[0].FSSubjugationist > 20>>
-	<<set $activeStandard.raceSub = $arcologies[0].FSSubjugationistRace>>
-<</if>>
-<<if $arcologies[0].FSGenderRadicalist > 20>>
-	<<set $activeStandard.dick = 1>>
-	<<set $activeStandard.balls = 1>>
-<<elseif $arcologies[0].FSGenderFundamentalist > 20>>
-	<<set $activeStandard.dick = 0>>
-	<<set $activeStandard.balls = 0>>
-<</if>>
-<<if $arcologies[0].FSPaternalist > 20>>
-	<<set $activeStandard.intelligenceImplant = 15>>
-	<<set $activeStandard.health = 60>>
-<<elseif $arcologies[0].FSDegradationist > 20>>
-	<<set $activeStandard.intelligenceImplant = 15>>
-	<<set $activeStandard.health = 0>>
-<</if>>
-<<if $arcologies[0].FSSlaveProfessionalism > 20>>
-	<<set $activeStandard.intelligenceImplant = 30>>
-<</if>>
-<<if $arcologies[0].FSBodyPurist > 20>>
-	<<if $failedElite > 100>>
-		<<set $activeStandard.chem = 0>>
-	<<else>>
-		<<set $activeStandard.chem = 15>>
-	<</if>>
-	<<set $activeStandard.boobsImplant = 0>>
-	<<set $activeStandard.buttImplant = 0>>
-	<<set $activeStandard.lipsImplant = 0>>
-	<<set $activeStandard.hipsImplant = 0>>
-	<<set $activeStandard.shouldersImplant = 0>>
-	<<set $activeStandard.faceImplant = 5>>
-	<<set $activeStandard.bellyImplant = -1>>
-<<elseif $arcologies[0].FSTransformationFetishist > 20>>
-	<<set $activeStandard.chem = 20>>
-<</if>>
-<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-	<<if $arcologies[0].FSHedonisticDecadence > 20>>
-		<<set $activeStandard.weightMax = 30>>
-	<<else>>
-		<<set $activeStandard.weightMax = 0>>
-	<</if>>
-	<<set $activeStandard.butt = 2>>
-	<<set $activeStandard.boobs = 400>>
-<<elseif $arcologies[0].FSAssetExpansionist > 20>>
-	<<set $activeStandard.butt = 6>>
-	<<set $activeStandard.boobs = 1000>>
-<</if>>
-<<if $arcologies[0].FSPastoralist > 20>>
-	<<set $activeStandard.lactation = 1>>
-<</if>>
-<<if $arcologies[0].FSPhysicalIdealist > 20>>
-	<<if $arcologies[0].FSPhysicalIdealistLaw == 1>>
-		<<set $activeStandard.weightMax = 30>>
-		<<set $activeStandard.musclesMin = 20>>
-		<<set $activeStandard.musclesMax = 50>>
-	<<else>>
-		<<set $activeStandard.musclesMin = 95>>
-	<</if>>
-<<elseif $arcologies[0].FSHedonisticDecadence > 20>>
-	<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-		<<set $activeStandard.weightMin = 10>>
-	<<else>>
-		<<set $activeStandard.weightMin = 95>>
-	<</if>>
-<</if>>
-<</widget>>
-
-<<widget "BreedingStandards">>
-<br><br>
-In order to be eligible to be bred, the potential breeding bitch must first satisfy the following conditions:
-<<if $failedElite > 100>>
-	<br>She must be of finest intelligence.
-	<br>She must be unbelievably beautiful.
-	<br>Her face must be breathtaking.
-<<else>>
-	<br>She must be very smart.
-	<br>She must be beautiful.
-	<br>Her face must be gorgeous.
-<</if>>
-<br>Her health must not be overly impacted by drug use.
-<br>She must not be addicted to drugs.
-<<if $arcologies[0].FSPetiteAdmiration > 20>>
-	<br>She must be very short. (150cm)
-	<br>She must be very short for her age.
-	<br>She must not have had height altering surgery to reach it.
-<<elseif $arcologies[0].FSStatuesqueGlorification > 20>>
-	<br>She must be very tall. (186cm)
-	<br>She must not have had height altering surgery to reach it.
-<</if>>
-<<if $arcologies[0].FSSupremacist > 20>>
-	<br>She must be $arcologies[0].FSSupremacistRace.
-<</if>>
-<<if $arcologies[0].FSSubjugationist > 20>>
-	<br>She must not be $arcologies[0].FSSubjugationistRace.
-<</if>>
-<<if $arcologies[0].FSGenderRadicalist > 20>>
-	<br>She must have a functional penis.
-<<elseif $arcologies[0].FSGenderFundamentalist > 20>>
-	<br>She must be physically female.
-<</if>>
-<<if $arcologies[0].FSPaternalist > 20>>
-	<<if $arcologies[0].FSSlaveProfessionalism > 20>>
-		<br>She must be well educated.
-	<<else>>
-		<br>She must be educated.
-	<</if>>
-	<br>She must be in good health.
-<<elseif $arcologies[0].FSSlaveProfessionalism > 20>>
-	<br>She must be well educated.
-<</if>>
-<<if $arcologies[0].FSIntellectualDependency > 20>>
-	<br>She must be sexually receptive at all times.
-<<elseif $arcologies[0].FSSlaveProfessionalism > 20>>
-	<br>She must be capable of mastering her skills.
-	<br>She must be capable of eloquent and accurate speech.
-<</if>>
-<<if $arcologies[0].FSBodyPurist > 20>>
-	<br>She must have low carcinogen levels.
-	<br>She must be implant free.
-<</if>>
-<<if $arcologies[0].FSMaturityPreferentialist > 20>>
-	<br>She must be older than 24.
-<<elseif $arcologies[0].FSYouthPreferentialist > 20>>
-	<br>She must be younger than 24.
-<</if>>
-<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-	<<if $arcologies[0].FSHedonisticDecadence > 20>>
-		<br>She may be no larger than "plush".
-	<<else>>
-		<br>She must be thin.
-	<</if>>
-	<br>She must have a trim rear.
-	<br>She must have a sleek chest.
-<<elseif $arcologies[0].FSAssetExpansionist > 20>>
-	<br>She must have a naturally gigantic rear.
-	<br>She must be naturally busty.
-<</if>>
-<<if $arcologies[0].FSPastoralist > 20>>
-	<br>She must be lactating naturally.
-<</if>>
-<<if $arcologies[0].FSPhysicalIdealist > 20>>
-	<<if $arcologies[0].FSPhysicalIdealistLaw == 1>>
-		<br>She must not be overweight.
-		<br>She must be fit, but not too muscular.
-	<<else>>
-		<br>She must be extremely muscular.
-	<</if>>
-
-<<elseif $arcologies[0].FSHedonisticDecadence > 20>>
-	<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-		<br>She must be more than "trim".
-	<<else>>
-		<br>She must be big, soft and fat.
-	<</if>>
-<</if>>
-<br>For each slave examined, a fee of @@.yellowgreen;<<print cashFormat(5000)>>@@ will be deducted from your account.
-<br>Failures will be sterilized. Please make sure your slave fits the criteria before submitting them for testing. We shall not be held responsible for time wasted.
-<br>Updates will be posted periodically. It is your responsibility to keep up to date with current standards.
-<</widget>>
-
-<<widget "BreedingEligibility">>
-	<<set _passing = 0>>
-	<br><br>
-	<<= getSlave($AS)>>.slaveName is up for review:
-	<<if getSlave($AS).intelligence+getSlave($AS).intelligenceImplant >= $activeStandard.intelligence>>
-		<br>$He @@.lime;PASSED@@ the intelligence test.
-	<<else>>
-		<br>$He @@.red;FAILED@@ the intelligence test.
-		<<set _passing-->>
-	<</if>>
-	<<if Beauty(getSlave($AS)) >= $activeStandard.beauty>>
-		<br>$He @@.lime;PASSED@@ the beauty test.
-	<<else>>
-		<br>$He @@.red;FAILED@@ the beauty test.
-		<<set _passing-->>
-	<</if>>
-	<<if getSlave($AS).face >= $activeStandard.face>>
-		<br>$He @@.lime;PASSED@@ the facial attractiveness test.
-	<<else>>
-		<br>$He @@.red;FAILED@@ the facial attractiveness test.
-		<<set _passing-->>
-	<</if>>
-	<<if getSlave($AS).chem <= $activeStandard.chem>>
-		<br>$He @@.lime;PASSED@@ the carcinogen test.
-	<<else>>
-		<br>$He @@.red;FAILED@@ the carcinogen test.
-		<<set _passing-->>
-	<</if>>
-	<<if getSlave($AS).addict <= $activeStandard.addict>>
-		<br>$He @@.lime;PASSED@@ the drug test.
-	<<else>>
-		<br>$He @@.red;FAILED@@ the drug test.
-		<<set _passing-->>
-	<</if>>
-	<<if $arcologies[0].FSSupremacist > 20>>
-		<<if getSlave($AS).race == $activeStandard.raceSup>>
-			<br>$He @@.lime;PASSED@@ racial testing.
-		<<else>>
-			<br>$He @@.red;FAILED@@ racial testing.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSSubjugationist > 20>>
-		<<if getSlave($AS).race != $activeStandard.raceSub>>
-			<br>$He @@.lime;PASSED@@ racial testing.
-		<<else>>
-			<br>$He @@.red;FAILED@@ racial testing.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSPetiteAdmiration > 20>>
-		<<if (getSlave($AS).height-(getSlave($AS).heightImplant*10)) < $activeStandard.height>>
-			<<if (getSlave($AS).height-(getSlave($AS).heightImplant*10)) < Height.mean(getSlave($AS))-15>>
-				<br>$He @@.lime;MET@@ height requirements.
-			<<else>>
-				<br>$He @@.red;FAILED@@ to meet height requirements.
-				<<set _passing-->>
-			<</if>>
-		<<else>>
-			<br>$He @@.red;FAILED@@ to meet height requirements.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSStatuesqueGlorification > 20>>
-		<<if (getSlave($AS).height-(getSlave($AS).heightImplant*10)) > $activeStandard.height>>
-			<br>$He @@.lime;MET@@ height requirements.
-		<<else>>
-			<br>$He @@.red;FAILED@@ to meet height requirements.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSGenderRadicalist > 20>>
-		<<if getSlave($AS).dick >= $activeStandard.dick && getSlave($AS).balls >= $activeStandard.balls>>
-			<br>$He @@.lime;PASSED@@ penis inspection.
-		<<else>>
-			<br>$He @@.red;FAILED@@ penis inspection.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSGenderFundamentalist > 20>>
-		<<if getSlave($AS).dick == $activeStandard.dick && getSlave($AS).balls == $activeStandard.balls>>
-			<br>$He @@.lime;PASSED@@ genital inspection.
-		<<else>>
-			<br>$He @@.red;FAILED@@ genital inspection.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSPaternalist > 20>>
-		<<if getSlave($AS).intelligenceImplant >= $activeStandard.intelligenceImplant>>
-			<br>$He @@.lime;PASSED@@ educational trials.
-		<<else>>
-			<br>$He @@.red;FAILED@@ educational trials.
-			<<set _passing-->>
-		<</if>>
-		<<if getSlave($AS).health.condition >= $activeStandard.health>>
-			<br>$He @@.lime;PASSED@@ health examinations.
-		<<else>>
-			<br>$He @@.red;FAILED@@ health examinations.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSSlaveProfessionalism > 20>>
-		<<if getSlave($AS).intelligenceImplant >= $activeStandard.intelligenceImplant>>
-			<br>$He @@.lime;PASSED@@ educational trials.
-		<<else>>
-			<br>$He @@.red;FAILED@@ educational trials.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSIntellectualDependency > 20>>
-		<<if getSlave($AS).energy >= $activeStandard.energy>>
-			<br>$He @@.lime;PASSED@@ libido testing.
-		<<else>>
-			<br>$He @@.red;FAILED@@ libido testing.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSSlaveProfessionalism > 20>>
-		<<if getSlave($AS).skill.vaginal + getSlave($AS).skill.anal + getSlave($AS).skill.oral + getSlave($AS).skill.entertainment + getSlave($AS).skill.whoring >= $activeStandard.skill>>
-			<br>$He @@.lime;PASSED@@ skill retention trials.
-		<<else>>
-			<br>$He @@.red;FAILED@@ skill retention trials.
-			<<set _passing-->>
-		<</if>>
-		<<if getSlave($AS).accent <= $activeStandard.accent>>
-			<br>$He @@.lime;PASSED@@ $his speech test.
-		<<else>>
-			<br>$He @@.red;FAILED@@ $his speech test.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSBodyPurist > 20>>
-		<<if getSlave($AS).chem <= $activeStandard.chem>>
-			<br>$He @@.lime;PASSED@@ health examinations.
-		<<else>>
-			<br>$He @@.red;FAILED@@ health examinations.
-			<<set _passing-->>
-		<</if>>
-		<<if getSlave($AS).boobsImplant == 0 && getSlave($AS).buttImplant == 0 && getSlave($AS).lipsImplant == 0 && getSlave($AS).hipsImplant == 0 && getSlave($AS).shouldersImplant == 0 && getSlave($AS).faceImplant <= 5 && getSlave($AS).bellyImplant == -1>>
-			<br>$He @@.lime;PASSED@@ implant examinations.
-		<<else>>
-			<br>$He @@.red;FAILED@@ implant examinations.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSMaturityPreferentialist > 20>>
-		<<if getSlave($AS).physicalAge > $activeStandard.age>>
-			<br>$He @@.lime;PASSED@@ age examinations.
-		<<else>>
-			<br>$He @@.red;FAILED@@ age examinations.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSYouthPreferentialist > 20>>
-		<<if getSlave($AS).physicalAge < $activeStandard.age>>
-			<br>$He @@.lime;PASSED@@ age examinations.
-		<<else>>
-			<br>$He @@.red;FAILED@@ age examinations.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-		<<if getSlave($AS).weight <= $activeStandard.weightMax>>
-			<br>$He @@.lime;MET@@ weight limits.
-		<<else>>
-			<br>$He @@.red;EXCEEDED@@ weight limits.
-			<<set _passing-->>
-		<</if>>
-		<<if getSlave($AS).butt <= $activeStandard.butt>>
-			<br>$He @@.lime;MET@@ ass measurements.
-		<<else>>
-			<br>$He @@.red;EXCEEDED@@ ass measurements.
-			<<set _passing-->>
-		<</if>>
-		<<if getSlave($AS).boobs <= $activeStandard.boobs>>
-			<br>$He @@.lime;MET@@ chest measurements.
-		<<else>>
-			<br>$He @@.red;EXCEEDED@@ chest measurements.
-			<<set _passing-->>
-		<</if>>
-	<<elseif $arcologies[0].FSAssetExpansionist > 20>>
-		<<if (getSlave($AS).butt - getSlave($AS).buttImplant) >= $activeStandard.butt>>
-			<br>$He @@.lime;MET@@ ass measurements.
-		<<else>>
-			<br>$He @@.red;FAILED@@ to meet ass measurements.
-			<<set _passing-->>
-		<</if>>
-		<<if (getSlave($AS).boobs - getSlave($AS).boobsImplant) >= $activeStandard.boobs>>
-			<br>$He @@.lime;MET@@ chest measurements.
-		<<else>>
-			<br>$He @@.red;FAILED@@ to meet chest measurements.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSPastoralist > 20>>
-		<<if getSlave($AS).lactation == $activeStandard.lactation>>
-			<br>$He @@.lime;MET@@ milk production standards.
-		<<elseif getSlave($AS).lactation > $activeStandard.lactation>>
-			<br>$He @@.red;EXCEEDED@@ milk production standards.
-			<<set _passing-->>
-		<<else>>
-			<br>$He @@.red;FAILED@@ to meet milk production standards.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<<if $arcologies[0].FSPhysicalIdealist > 20>>
-		<<if $arcologies[0].FSPhysicalIdealistLaw == 1>>
-			<<if $arcologies[0].FSSlimnessEnthusiast > 20>>
-				<<if getSlave($AS).weight <= $activeStandard.weightMax>>
-					<br>$He @@.lime;MET@@ weight limits.
-				<<else>>
-					<br>$He @@.red;EXCEEDED@@ weight limits.
-					<<set _passing-->>
-				<</if>>
-			<</if>>
-			<<if getSlave($AS).muscles > $activeStandard.musclesMin && getSlave($AS).muscles < $activeStandard.musclesMax>>
-				<br>$He @@.lime;MET@@ the required muscle standard.
-			<<elseif (getSlave($AS).muscles <= $activeStandard.musclesMin && getSlave($AS).muscles > $activeStandard.musclesMin-20) || (getSlave($AS).muscles >= $activeStandard.musclesMax && getSlave($AS).muscles < $activeStandard.musclesMax+30)>>
-				<br>$He @@.yellow;failed@@ to match the required muscle standard, but was deemed within fixable range.
-				<<if _passing == 0>>
-					<<set _passing = 2>>
-				<</if>>
-			<<else>>
-				<br>$He @@.red;FAILED@@ to match the required muscle standard.
-				<<set _passing-->>
-			<</if>>
-		<<else>>
-			<<if getSlave($AS).muscles > $activeStandard.musclesMin>>
-				<br>$He @@.lime;MET@@ the required muscle mass.
-			<<else>>
-				<br>$He @@.red;FAILED@@ to meet the required muscle mass.
-				<<set _passing-->>
-			<</if>>
-		<</if>>
-	<<elseif $arcologies[0].FSHedonisticDecadence > 20>>
-		<<if getSlave($AS).weight > $activeStandard.weightMin>>
-			<br>$He @@.lime;MET@@ the minimum weight limit.
-		<<else>>
-			<br>$He @@.red;failed@@ to meet minimum weight limits.
-			<<set _passing-->>
-		<</if>>
-	<</if>>
-	<br><br>
-	<<if _passing == 2>>
-		The slave known as "<<= SlaveFullName(getSlave($AS))>>" has been deemed @@.yellow;currently unsuitable@@ for breeding, but may be resubmitted after corrections are applied. We understand the subjective nature of "fit" and do not wish to preclude the use a viable breeder over such a trivial fix. $He has been placed on a contraceptive routine to protect against "accidents" in the interim.
-	<<elseif _passing != 0>>
-		The slave known as "<<= SlaveFullName(getSlave($AS))>>" has been deemed @@.red;unsuitable@@ for breeding and has been @@.green;sterilized@@ as per agreement.
-		<<set getSlave($AS).preg = -3>>
-	<<else>>
-		The slave known as "<<= SlaveFullName(getSlave($AS))>>" has been deemed @@.green;worthy@@ of being used for breeding and has been marked as such. Please note the increased restrictions on breeding slaves.
-		<br>They are not permitted for public use or anything that may harm their growing child. The child within them is considered a member of the Elite class and as such, any harm that comes to them will result in severe penalties to the breeder's owner. Development of the child will be closely monitored; should the fetus be identified as not of the owner's blood (or any other member of the Elite class), said owner shall face severe fines.
-		<<set getSlave($AS).breedingMark = 1, getSlave($AS).pregControl = "none">>
-	<</if>>
-	<br>@@.yellowgreen;<<print cashFormat(5000)>>@@ has been deducted from your account as agreed.
-	<<= removeJob(getSlave($AS), getSlave($AS).assignment)>>
-<</widget>>
-
 <<widget "PlayerRace">>
 	<<replace #ethnicity>>
 		You're $PC.race.
diff --git a/src/uncategorized/PESS.tw b/src/uncategorized/PESS.tw
index d4c61a5b43368113f1ae198400d4d5398c060b60..70a4da847f3a58574da59cb997c2c9f259681bba 100644
--- a/src/uncategorized/PESS.tw
+++ b/src/uncategorized/PESS.tw
@@ -569,7 +569,7 @@ $He sees you examining at $him, and looks back at you submissively, too tired to
 
 <<link "Compliment your Head Girl's efforts, and encourage $him">>
 	<<replace "#result">>
-	As you walk into the room to offer $activeSlave.slaveName some positive reinforcement, $he groans, arches $his back, and shoots $his load down $slaves[$j].slaveName's retching <<if $seeRace == 1>>$slaves[$j].race <</if>>throat. $activeSlave.slaveName immediately greets you with perfect decorum, despite $his recent orgasm, and delivers $slaves[$j].slaveName an agonizing flick to the ear when _he2 does not, in $activeSlave.slaveName's opinion, follow suit with sufficient speed. You inform $activeSlave.slaveName that $he is a fine Head Girl, and that if $he continues to apply $himself $he will bring credit to you as a slaveowner. $He looks a little surprised, but thanks you correctly. It is only due to the arcology's monitoring system that you know that, as you turn your back and go, a single tear escapes from $his eye and rolls down $his pretty <<if $seeRace == 1>>$activeSlave.race <</if>>cheek. In the coming week, no shirker is safe from $his wrath. @@.hotpink;Every single slave in your penthouse has become better broken to your will.@@
+	As you walk into the room to offer $activeSlave.slaveName some positive reinforcement, $he groans, arches $his back, and shoots $his load down $slaves[$j].slaveName's retching <<if $seeRace == 1>>$slaves[$j].race <</if>>throat. $activeSlave.slaveName immediately greets you with perfect decorum, despite $his recent orgasm, and delivers $slaves[$j].slaveName <<if $slaves[$j].earShape == "none">>a quick slap to the back of the head<<else>>an agonizing flick to the ear<</if>> when _he2 does not, in $activeSlave.slaveName's opinion, follow suit with sufficient speed. You inform $activeSlave.slaveName that $he is a fine Head Girl, and that if $he continues to apply $himself $he will bring credit to you as a slaveowner. $He looks a little surprised, but thanks you correctly. It is only due to the arcology's monitoring system that you know that, as you turn your back and go, a single tear escapes from $his eye and rolls down $his pretty <<if $seeRace == 1>>$activeSlave.race <</if>>cheek. In the coming week, no shirker is safe from $his wrath. @@.hotpink;Every single slave in your penthouse has become better broken to your will.@@
 	<<run seX($activeSlave, "oral", $PC, "penetrative")>>
 	<<for $i = 0; $i < _SL; $i++>>
 		<<if assignmentVisible($slaves[$i])>>
diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw
index 14a66c7a6a5a0bc526bfaae77235c878f0ffb517..9f03d22f9fe077245b2440409d747d1bb1abcde5 100644
--- a/src/uncategorized/neighborsDevelopment.tw
+++ b/src/uncategorized/neighborsDevelopment.tw
@@ -1775,22 +1775,22 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<<if $arcologies[$i].FSNeoImperialist > $FSLockinLevel>><<set _alignment += 1>><</if>>
 		<<set $desc.push("helping to advance its Neo-Imperialism")>>
 	<<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">>
-		<<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSEgyptianRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<<elseif $arcologies[$i].FSChineseRevivalist != "unset">>
-		<<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSChineseRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<<elseif $arcologies[$i].FSEdoRevivalist != "unset">>
-		<<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSEdoRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<<elseif $arcologies[$i].FSArabianRevivalist != "unset">>
-		<<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSArabianRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<<elseif $arcologies[$i].FSRomanRevivalist != "unset">>
-		<<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSRomanRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<<elseif $arcologies[$i].FSAztecRevivalist != "unset">>
-		<<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSChineseRevivalist-60)/4)+_appliedInfluenceBonus>>
+		<<set $arcologies[$i].FSAztecRevivalist -= Math.trunc(($arcologies[$j].FSNeoImperialist-60)/4)+_appliedInfluenceBonus>>
 		<<set $desc.push("attacking its incompatible Revivalism")>>
 	<</if>>
 <</if>>
diff --git a/src/uncategorized/repBudget.tw b/src/uncategorized/repBudget.tw
index cf5ede3ede73340a0804111e98284d78f22b9d63..ef2534a8043ff33a9117619cbfd16a12dd9815c7 100644
--- a/src/uncategorized/repBudget.tw
+++ b/src/uncategorized/repBudget.tw
@@ -65,7 +65,7 @@
 		<h2>Structures</h2>		/* TODO: using h2s doesn't fit in with the rest of the game */
 	</tr>
 
-	<<set _L = App.Utils.countFacilityWorkers(["arcade", "brothel", "club", "servantsQuarters", "spa"])>>
+	<<set _L = App.Utils.countFacilityWorkers(["arcade", "brothel", "club", "servantsQuarters", "spa", "farmyard"])>>
 	<<print budgetLine("arcade", "<<if $arcade>>[[capFirstChar($arcadeName)|Arcade][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]]<<else>><<= capFirstChar($arcadeName)>><</if>> (_L.arcade slaves)")>>
 
 	<<print budgetLine("gloryholeArcade", "Free arcade")>>
@@ -88,6 +88,8 @@
 
 	<<print budgetLine("spa", "<<if $spa>>[[capFirstChar($spaName)|Spa][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]]<<else>><<= capFirstChar($spaName)>><</if>> (_L.spa slaves)")>>
 
+	<<print budgetLine("shows", "<<if $farmyard>>[[capFirstChar($farmyardName)|Farmyard][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]]<<else>>The Farmyard<</if>> (_L.farmyard slaves)")>>
+
 	<<print budgetLine("architecture", "[[Architecture|Manage Arcology][$nextButton = \"Back to Budget\", $nextLink = \"Rep Budget\"]]")>>
 
 
diff --git a/src/utility/slaveCreationWidgets.tw b/src/utility/slaveCreationWidgets.tw
index 404cd4b5bad78519331bb96385554d6fedc494f3..cf5894f5e1d032c4b65a8fac7c48fa469e6214fd 100644
--- a/src/utility/slaveCreationWidgets.tw
+++ b/src/utility/slaveCreationWidgets.tw
@@ -1,518 +1,3 @@
-:: slave creation widgets [widget nobr]
-
-/%
- Call as <<CustomSlaveAge>>
-%/
-<<widget "CustomSlaveAge">>
-	<<replace #age>>
-		<<if $customSlave.age < 3>>2- years old.
-		<<elseif $customSlave.age < 5>>3-4 years old.
-		<<elseif $customSlave.age < 7>>5-6 years old.
-		<<elseif $customSlave.age < 10>>7-9 years old.
-		<<elseif $customSlave.age < 13>>10-12 years old.
-		<<elseif $customSlave.age < 15>>13-14 years old.
-		<<elseif $customSlave.age < 18>>15-17 years old.
-		<<elseif $customSlave.age < 20>>18-19 years old.
-		<<elseif $customSlave.age < 25 && $retirementAge >= 25>>20-24 years old.
-		<<elseif $customSlave.age < 25 && $retirementAge >= 20>>20+ years old.
-		<<elseif $customSlave.age < 30 && $retirementAge >= 30>>25-29 years old.
-		<<elseif $customSlave.age < 30 && $retirementAge >= 25>>25+ years old.
-		<<elseif $customSlave.age < 40 && $retirementAge >= 40>>30-39 years old.
-		<<elseif $customSlave.age < 40 && $retirementAge >= 30>>30+ years old.
-		<<elseif $customSlave.age < 50 && $retirementAge >= 50>>40-49 years old.
-		<<elseif $customSlave.age < 50 && $retirementAge >= 40>>40+ years old.
-		<<elseif $customSlave.age < 60 && $retirementAge >= 60>>50-59 years old.
-		<<elseif $customSlave.age < 60 && $retirementAge >= 50>>50+ years old.
-		<<elseif $customSlave.age < 70 && $retirementAge >= 70>>60-69 years old.
-		<<elseif $customSlave.age < 70 && $retirementAge >= 60>>60+ years old.
-		<<elseif $customSlave.age < 80 && $retirementAge >= 80>>70-79 years old.
-		<<elseif $customSlave.age < 80 && $retirementAge >= 70>>70+ years old.
-		<<elseif $customSlave.age < 90 && $retirementAge >= 90>>80-89 years old.
-		<<elseif $customSlave.age < 90 && $retirementAge >= 80>>80+ years old.
-		<<elseif $customSlave.age < 100 && $retirementAge >= 100>>90-99 years old.
-		<<elseif $customSlave.age < 100 && $retirementAge >= 90>>90+ years old.
-		<<elseif $customSlave.age < 110 && $retirementAge >= 110>>100-109 years old.
-		<<elseif $customSlave.age < 110 && $retirementAge >= 100>>100+ years old.
-		<<elseif $customSlave.age < 120 && $retirementAge >= 120>>110-119 years old.
-		<<elseif $customSlave.age < 120 && $retirementAge >= 110>>110+ years old.
-		<<elseif $customSlave.age < 130 && $retirementAge >= 130>>120-129 years old.
-		<<elseif $customSlave.age < 130 && $retirementAge >= 120>>120+ years old.
-		<<else>>130+ years old.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveHealth>>
-%/
-<<widget "CustomSlaveHealth">>
-	<<replace #health>>
-		<<if $customSlave.health == 0>>Healthy.
-		<<else>>Extremely healthy.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveMuscles>>
-%/
-<<widget "CustomSlaveMuscles">>
-	<<replace #muscles>>
-		<<if $customSlave.muscles > 95>>
-			Ripped.
-		<<elseif $customSlave.muscles > 50>>
-			Muscular.
-		<<elseif $customSlave.muscles > 30>>
-			Well built.
-		<<elseif $customSlave.muscles > 5>>
-			Toned.
-		<<elseif $customSlave.muscles > -6>>
-			Soft.
-		<<elseif $customSlave.muscles > -31>>
-			Quite weak.
-		<<elseif $customSlave.muscles > -51>>
-			Rather weak.
-		<<elseif $customSlave.muscles > -96>>
-			Very weak.
-		<<else>>
-			Frail.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveLips>>
-%/
-<<widget "CustomSlaveLips">>
-	<<replace #lips>>
-		<<if $customSlave.lips <= 10>>Thin lips.
-		<<elseif $customSlave.lips <= 20>>Normal lips.
-		<<elseif $customSlave.lips <= 40>>Plush lips.
-		<<elseif $customSlave.lips <= 70>>Big lips.
-		<<elseif $customSlave.lips <= 95>>Huge lips.
-		<<else>>Facepussy.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveVoice>>
-%/
-<<widget "CustomSlaveVoice">>
-	<<replace #voice>>
-		<<if $customSlave.voice == 3>>High, girly voice.
-		<<elseif $customSlave.voice == 2>>Feminine voice.
-		<<elseif $customSlave.voice == 1>>Deep voice.
-		<<elseif $customSlave.voice == 0>>Mute.
-		<<else>>Voice is unimportant.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveHeight>>
-%/
-<<widget "CustomSlaveHeight">>
-	<<replace #height>>
-		<<if $customSlave.heightMod == "greatly below average">>Petite.
-		<<elseif $customSlave.heightMod == "below average">>Short.
-		<<elseif $customSlave.heightMod == "normal">>Average height.
-		<<elseif $customSlave.heightMod == "above average">>Tall.
-		<<else>>Very tall.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveWeight>>
-%/
-<<widget "CustomSlaveWeight">>
-	<<replace #weight>>
-		<<if $customSlave.weight == -50>>Very thin.
-		<<elseif $customSlave.weight == -15>>Thin.
-		<<elseif $customSlave.weight == 0>>Average weight.
-		<<elseif $customSlave.weight == 15>>Chubby.
-		<<elseif $customSlave.weight == 50>>Plump.
-		<<elseif $customSlave.weight == 100>>Fat.
-		<<elseif $customSlave.weight == 150>>Very Fat.
-		<<else>>Immobile.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveFace>>
-%/
-<<widget "CustomSlaveFace">>
-	<<replace #face>>
-		<<if $customSlave.face < -40>>Very unattractive face.
-		<<elseif $customSlave.face < -10>>Unattractive face.
-		<<elseif $customSlave.face <= 10>>Average face.
-		<<elseif $customSlave.face <= 40>>Attractive face.
-		<<elseif $customSlave.face > 40>>Very attractive face.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveRace>>
-%/
-<<widget "CustomSlaveRace">>
-	<<replace #ethnicity>>
-		<<textbox "$customSlave.race" $customSlave.race "Custom Slave">>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveSkin>>
-%/
-<<widget "CustomSlaveSkin">>
-	<<replace #skin>>
-		<<textbox "$customSlave.skin" $customSlave.skin "Custom Slave">>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveBoobs>>
-%/
-<<widget "CustomSlaveBoobs">>
-	<<replace #boobs>>
-		<<if $customSlave.boobs == 200>>Flat chest.
-		<<elseif $customSlave.boobs <= 500>>Healthy breasts.
-		<<elseif $customSlave.boobs <= 800>>Big breasts.
-		<<elseif $customSlave.boobs <= 1400>>Huge breasts.
-		<<elseif $customSlave.boobs <= 2100>>Giant breasts.
-		<<else>>Massive breasts.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveButt>>
-%/
-<<widget "CustomSlaveButt">>
-	<<replace #butt>>
-		<<if $customSlave.butt == 1>>Flat buttocks.
-		<<elseif $customSlave.butt < 4>>Healthy buttocks.
-		<<elseif $customSlave.butt < 6>>Huge buttocks.
-		<<else>>Massive buttocks.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveSex>>
-%/
-<<widget "CustomSlaveSex">>
-	<<replace #sex>>
-		<<if $customSlave.sex == 1>>Female (cock & balls options not applied).
-		<<elseif $customSlave.sex == 2>>Male (pussy options not applied).
-		<<else>>Futanari (clit options not applied).
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveVirgin>>
-%/
-<<widget "CustomSlaveVirgin">>
-	<<replace #virgin>>
-		<<if $customSlave.virgin == 0>>Vaginal virgin.
-		<<else>>Virginity not important.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveVagina>>
-%/
-<<widget "CustomSlaveVagina">>
-	<<replace #vagina>>
-		<<if $customSlave.vagina == -1>>No vagina.
-		<<elseif $customSlave.vagina == 0>>Vaginal virgin.
-		<<else>>Normal vagina.
-		<</if>>
-		<<link "No vagina">>
-			<<set $customSlave.vagina = -1, $customSlave.preg = 0, $customSlave.ovaries = 0>>
-			<<CustomSlaveVagina>>
-		<</link>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveDick>>
-%/
-<<widget "CustomSlaveDick">>
-	<<replace #dick>>
-		<<if $customSlave.dick == 0>>No penis.
-		<<elseif $customSlave.dick == 2>>Small penis.
-		<<else>>Large penis.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveBalls>>
-%/
-<<widget "CustomSlaveBalls">>
-	<<replace #balls>>
-		<<if $customSlave.balls == 0>>No testicles.
-		<<elseif $customSlave.balls == 2>>Small testicles.
-		<<elseif $customSlave.balls == 4>>Large testicles.
-		<<else>>Huge Balls.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveClit>>
-%/
-<<widget "CustomSlaveClit">>
-	<<replace #clit>>
-		<<if $customSlave.clit == 0>>Normal clitoris.
-		<<elseif $customSlave.clit == 1>>Big clitoris.
-		<<elseif $customSlave.clit == 3>>Enormous clitoris.
-		<<else>>Pseudophallus.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveLabia>>
-%/
-<<widget "CustomSlaveLabia">>
-	<<replace #labia>>
-		<<if $customSlave.labia == 0>>Normal labia.
-		<<elseif $customSlave.labia == 1>>big labia.
-		<<elseif $customSlave.labia == 2>>Huge labia.
-		<<else>>Enormous labia.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveClitBalls>>
-%/
-<<widget "CustomSlaveClitBalls">>
-	<<replace #clitballs>>
-	<<if $customSlave.dick > 0>>
-	<<if $customSlave.balls == 0>>No testicles.<<elseif $customSlave.balls == 2>>Small testicles.<<else>>Large testicles.<</if>>
-	<<link "No testicles">>
-		<<set $customSlave.balls = 0,$customSlave.clit = 0>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Small testicles">>
-		<<set $customSlave.balls = 2,$customSlave.clit = 0>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Large testicles">>
-		<<set $customSlave.balls = 4,$customSlave.clit = 0>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	<<else>>
-	<<if $customSlave.clit == 0>>Normal clitoris.<<elseif $customSlave.clit == 0>>Big clitoris.<<else>>Enormous clitoris.<</if>>
-	<<link "Normal clitoris">>
-		<<set $customSlave.clit = 0>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Big clitoris">>
-		<<set $customSlave.clit = 1>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Enormous clitoris">>
-		<<set $customSlave.clit = 2>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	<br>
-	<<if $customSlave.labia == 0>>Minimal labia.<<elseif $customSlave.labia == 1>>Normal labia.<<elseif $customSlave.labia == 2>>Huge labia.<<else>>Enormous labia.<</if>>
-	<<link "Minimal labia">>
-		<<set $customSlave.labia = 0>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Normal labia">>
-		<<set $customSlave.labia = 1>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Huge labia">>
-		<<set $customSlave.labia = 2>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	|
-	<<link "Enormous labia">>
-		<<set $customSlave.labia = 3>>
-		<<CustomSlaveClitBalls>>
-	<</link>>
-	<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveLube>>
-%/
-<<widget "CustomSlaveLube">>
-	<<replace #lube>>
-		<<if $customSlave.vaginaLube == 0>>Dry vagina.
-		<<elseif $customSlave.vaginaLube == 1>>Wet vagina.
-		<<else>>Sopping wet vagina.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveAnalVirginity>>
-%/
-<<widget "CustomSlaveAnalVirginity">>
-	<<replace #anus>>
-		<<if $customSlave.analVirgin == 0>>Anal virgin.
-		<<else>>Anal virginity is not important.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveAnus>>
-%/
-<<widget "CustomSlaveAnus">>
-	<<replace #anus>>
-		<<if $customSlave.anus == 0>>Anal virgin.
-		<<else>>Normal anus.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveSkills>>
-%/
-<<widget "CustomSlaveSkills">>
-	<<replace #skills>>
-		<<if $customSlave.skills <= 10>>Sexually unskilled.
-		<<elseif $customSlave.skills <= 35>>Basic sex skills.
-		<<else>>Sexually skilled.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveWhoreSkills>>
-%/
-<<widget "CustomSlaveWhoreSkills">>
-	<<replace #whore-skills>>
-		<<if $customSlave.skill.whore <= 10>>Unskilled at prostitution and entertainment.
-		<<elseif $customSlave.skill.whore <= 35>>Basic prostitution and entertainment skills.
-		<<else>>Skilled at prostitution and entertainment.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveCombatSkills>>
-%/
-<<widget "CustomSlaveCombatSkills">>
-	<<replace #combat-skills>>
-		<<if $customSlave.skill.combat == 0>>Unskilled at combat.
-		<<else>>Skilled at combat.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveIntelligence>>
-%/
-<<widget "CustomSlaveIntelligence">>
-	<<replace #intelligence>>
-		<<if $customSlave.intelligence >= 3>>Brilliant.
-		<<elseif $customSlave.intelligence == 2>>Very smart.
-		<<elseif $customSlave.intelligence == 1>>Smart.
-		<<elseif $customSlave.intelligence == 0>>Average intelligence.
-		<<elseif $customSlave.intelligence == -1>>Stupid.
-		<<elseif $customSlave.intelligence == -2>>Very stupid.
-		<<else>>Moronic.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveEducation>>
-%/
-<<widget "CustomSlaveEducation">>
-	<<replace #education>>
-		<<if $customSlave.intelligenceImplant >= 30>>Well educated.
-		<<elseif $customSlave.intelligenceImplant >= 15>>Educated.
-		<<else>>Uneducated.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveNationality>>
-%/
-<<widget "CustomSlaveNationality">>
-	<<replace #nationality>>
-		Nationality: $customSlave.nationality.
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveEyes>>
-%/
-<<widget "CustomSlaveEyes">>
-	<<replace #eyes>>
-		<<if getBestVision($customSlave) === 2>>Normal vision.
-		<<elseif getBestVision($customSlave) === 1>>Nearsighted.
-		<<else>>Blind.
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveEars>>
-%/
-<<widget "CustomSlaveEars">>
-	<<replace #hears>>
-		<<if $seeExtreme == 1>>
-			<<if $customSlave.hears == -2>>Deaf.
-			<<elseif $customSlave.hears == -1>>Hard of hearing.
-			<<else>>Normal.
-			<</if>>
-		<<else>>
-			<<if $customSlave.hears == -1>>Hard of hearing.
-			<<else>>Normal.
-			<</if>>
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveSmell>>
-%/
-<<widget "CustomSlaveSmell">>
-	<<replace #smelling>>
-		<<if $seeExtreme == 1>>
-			<<if $customSlave.smells == -1>>None.
-			<<else>>Normal.
-			<</if>>
-		<</if>>
-	<</replace>>
-<</widget>>
-
-/%
- Call as <<CustomSlaveTaste>>
-%/
-<<widget "CustomSlaveTaste">>
-	<<replace #tasting>>
-		<<if $seeExtreme == 1>>
-			<<if $customSlave.tastes == -1>>None.
-			<<else>>Normal.
-			<</if>>
-		<</if>>
-	<</replace>>
-<</widget>>
 
 /%
 	Call as <<MarketName 'market' ['arcology']>>