diff --git a/devNotes/Useful JS Function Documentation.txt b/devNotes/Useful JS Function Documentation.txt
index 0ad822b466ee8a9fd4d00701d20da634123d8f50..2953c34658c964b684d3a83d80108c3d585ea4d8 100644
--- a/devNotes/Useful JS Function Documentation.txt	
+++ b/devNotes/Useful JS Function Documentation.txt	
@@ -359,14 +359,8 @@ Other Functions:
 isItemAccessible(itemName) - Returns if the string is available for use. Defaults to true.
 
 UtilJS [script]
-	arraySwap() - swaps inputted array.
-
 	html5passage(passage_function) - circumvents sugarcube, allowing a plain HTML5 UI within it
 
-	capFirstChar() - Capitalizes the first character of a given string.
-
-	addA() - Adds an `a ` or, if the first character is a vocal, an `an ` in front of a given string.
-
 	cmToInchString() - takes an integer e.g. $activeSlave.hLength, returns a string in the format 10 inches
 
 	cmToFootInchString() - takes an integer e.g. $activeSlave.height, returns a string in the format 6'5"
@@ -378,11 +372,6 @@ UtilJS [script]
 
 	FSChangePorn() - //Currently unused, widget version routes directly through FSChange()
 
-	ordinalSuffix(i) - takes a value as an input and then appends the appropriate suffix. e.g.$Day === 1 "today is the <<print ordinalSuffix($Day)>> of the month"
-		would print "today is the 1st of the month"
-
-	removeDuplicates() - Takes an array and returns a new array without duplicate entries
-
 	HackingSkillMultiplier() - outputs a value based off of the PC's hacking skill.
 
 	upgradeMultiplierArcology() - outputs a value based off of the PC's engineering skill.
@@ -395,6 +384,3 @@ UtilJS [script]
 
 	SkillIncrease() - Depreciates the sugarcube functions.
 
-	jsNdef - A .js port of sugarcube's ndef.
-
-	jsDef - A .js port of sugarcube's def.
diff --git a/devNotes/standaloneFunctions.md b/devNotes/standaloneFunctions.md
new file mode 100644
index 0000000000000000000000000000000000000000..838817b4e50801ccda2b96b6e1331c041be84e21
--- /dev/null
+++ b/devNotes/standaloneFunctions.md
@@ -0,0 +1,34 @@
+# Standalone JS Functions
+
+Collection of custom functions without dependencies on FC specific variables/data structures.
+
+## utilJS.js
+
+* `arraySwap(array, a , b)`:  
+    Swaps two values in an array.
+
+* `capFirstChar(string)`:  
+    Capitalizes the first character of `string`.
+
+* `addA(word)`:
+    Adds an `an ` if the first character is a vocal, otherwise `a `.
+
+* `ordinalSuffix(i)`:  
+    Takes a number and appends the appropriate suffix.
+    Example: `ordinalSuffix(1)` gives `1st`.
+
+* `ordinalSuffixWords(i)`:  
+    Takes a number and returns the appropriate ordinal.
+    Example: `ordinalSuffix(1)` gives `first`.  
+    For number greater than 19 identical to `ordinalSuffix(i)`  
+    
+* `removeDuplicates(array)`:  
+    Takes an array and returns a new array without duplicate entries.
+
+* `jsDef(x)`:  
+    Returns whether x is undefined. A JS port of sugarcube's def.
+
+* `between(a, low, high)`:  
+    Returns `true` if `a` is between `low` and `high`, otherwise `false`.
+
+
diff --git a/player variables documentation - Pregmod.txt b/player variables documentation - Pregmod.txt
index 48b54feced0a464cd28a3d48cedda491582e5398..3f5e48965366778a2d85785396349e50d2405258 100644
--- a/player variables documentation - Pregmod.txt	
+++ b/player variables documentation - Pregmod.txt	
@@ -1,13 +1,15 @@
 Player variables documentation - Pregmod
 
+Shares the vast majority of slave variables. Only ones in use are listed here. For more, see /player/js/playerState.js.
+
 **anything labeled accepts string will return any string entered into it**
 
-name:
+slaveName:
 
 your first name
 accepts string
 
-surname:
+slaveSurname:
 
 your last name
 accepts string
@@ -30,20 +32,174 @@ Player's gender
 "XY"
 "XX"
 
-dick:
+degeneracy:
+
+How strong/are there rumors about you doing unsavory things with your slaves
+0	- 10	- occasional whispers
+11	- 25	- minor rumors
+26	- 50	- rumors
+51	- 75	- bad rumors
+70	- 100	- severe rumors
+101+		- life ruining rumors
+
+refreshment:
+
+your favorite refreshment
+accepts string
+
+refreshmentType:
+
+(uncommon in events)
+The method of consumption of .refreshment
+0 - smoked
+1 - drank
+2 - eaten
+3 - snorted
+4 - injected
+5 - popped
+6 - orally dissolved
+
+career:
+
+Your career before becoming owner
+"wealth"
+"capitalist"
+"mercenary"
+"slaver"
+"engineer"
+"medicine"
+"celebrity"
+"escort"
+"servant"
+"gang"
+"BlackHat"
+"arcology owner"
+
+rumor:
+
+"wealth"
+"diligence"
+"force"
+"social engineering"
+"luck"
+
+actualAge:
+
+(uncommon in events)
+your actualAge
+14+
+
+physicalAge:
+
+your body's age
+14+
+
+visualAge:
+
+(uncommon in events)
+how old you look
+14+
+
+ovaryAge:
+
+How old your ovaries are
+Used to delay menopause temporarily
+
+birthWeek:
+
+your week of birth in a year
+accepts int between 0-51
+
+ageImplant:
+
+have you had age altering surgery, not yet in use
+0 - no
+1 - yes
+
+boobs:
 
 (common in events)
-Player has a cock
+0 - 299   - masculine chest (if title = 1) or flat chested (if title = 0)
+300-399   - A-cup;
+400-499   - B-cup
+500-649   - C-cup
+650-799   - D-cup
+800-999   - DD-cup
+1000-1199 - F-cup
+1200-1399 - G-cup
+1400-1599 - H-cup
+
+boobsImplant:
+
+Size, if any, of breast implants
+0 - none
+1+ - yes
+
+lactation:
+
+is player lactating
 0 - no
 1 - yes
 
+lactationDuration:
+
+how many more weeks the player will lactate for
+0+
+
+butt:
+
+how big your butt is
+2 - normal
+3 - big
+4 - huge
+5 - enormous
+
+buttImplant:
+
+do you have butt implants
+0 - no
+1+ - size
+
 vagina:
 
 (common in events)
 Player has a pussy
+-1 - no
+0  - virgin
+1  - tight
+2  - reasonably tight
+3  - loose
+4  - cavernous
+
+newVag:
+
+have you had a loose vagina restored
 0 - no
 1 - yes
 
+dick:
+
+(common in events)
+Player has a cock
+0 - no
+4 - big
+
+balls:
+
+how big your balls are (sizes above 0 requires dick == 1)
+0  - none
+3  - normal
+5  - massive
+9  - monstrous
+14 - hypertrophied
+30 - melons
+
+ballsImplant:
+
+how big your balls implants are (requires dick == 1)
+0 - none
+1+ size added
+
 preg:
 
 (uncommon in events)
@@ -85,7 +241,7 @@ Menstrual cycle control variable.
 belly:
 
 (uncommon in events)
-how big your belly is in CCs (preg only)
+how big your belly is in CCs
 thresholds
 100	- bloated
 1500	- early pregnancy
@@ -100,10 +256,6 @@ thresholds
 105000	- full term septuplets
 120000	- full term octuplets
 
-mpreg:
-
-used for <<KnockMeUp>> compatibility
-
 pregSource:
 
 who knocked you up
@@ -132,158 +284,41 @@ are you giving birth this week
 0 - no
 1 - yes
 
-births:
+skill:
 
-how many children you've had
-accepts int
+	trading:
 
-boobsBonus:
+	your trading skill
+	accepts int between -100 and 100
 
-(rare in events)
-breast size
--3	- B-cup
--2	- C-cup
--1	- D-cup
- 0	- DD-cup
- 1	- F-cup
- 2	- G-cup
- 3	- H-cup
+	warfare:
 
-degeneracy:
+	your warfare skill
+	accepts int between -100 and 100
 
-How strong/are there rumors about you doing unsavory things with your slaves
-0	- 10	- occasional whispers
-11	- 25	- minor rumors
-26	- 50	- rumors
-51	- 75	- bad rumors
-70	- 100	- severe rumors
-101+		- life ruining rumors
+	hacking:
 
-voiceImplant:
+	your hacking skill
+	accepts int between -100 and 100
 
-no effect
+	slaving:
 
-accent:
+	your slaving skill
+	accepts int between -100 and 100
 
-no effect
+	engineering:
 
-shoulders:
+	your engineering skill
+	accepts int between -100 and 100
 
-no effect
+	medicine:
 
-shouldersImplant:
+	your medicine skill
+	accepts int between -100 and 100
 
-no effect
+	cumTap:
 
-boobs:
-
-(common in events)
-0 - masculine chest (if title = 1) or flat chested (if title = 0)(WIP)
-1 - feminine bust
-
-lactation:
-
-is player lactating
-0 - no
-1 - yes
-
-lactationDuration:
-
-how many more weeks the player will lactate for
-0+
-
-career:
-
-Your career before becoming owner
-"wealth"
-"capitalist"
-"mercenary"
-"slaver"
-"engineer"
-"medicine"
-"celebrity"
-"escort"
-"servant"
-"gang"
-"BlackHat"
-"arcology owner"
-
-rumor:
-
-"wealth"
-"diligence"
-"force"
-"social engineering"
-"luck"
-
-birthWeek:
-
-your week of birth in a year
-accepts int between 0-51
-
-age:
-
-(uncommon in events)
-your age (obsolete, not in use)
-0 - young
-1 - typical
-2 - middle age
-
-sexualEnergy:
-
-how much fucking you can do in a week
-accepts int
-
-refreshment:
-
-your favorite refreshment
-accepts string
-
-refreshmentType:
-
-(uncommon in events)
-The method of consumption of .refreshment
-0 - smoked
-1 - drank
-2 - eaten
-3 - snorted
-4 - injected
-5 - popped
-6 - orally dissolved
-
-trading:
-
-your trading skill
-accepts int between -100 and 100
-
-warfare:
-
-your warfare skill
-accepts int between -100 and 100
-
-hacking:
-
-your hacking skill
-accepts int between -100 and 100
-
-slaving:
-
-your slaving skill
-accepts int between -100 and 100
-
-engineering:
-
-your engineering skill
-accepts int between -100 and 100
-
-medicine:
-
-your medicine skill
-accepts int between -100 and 100
-
-cumTap:
-
-how acclimated you are to taking huge loads
+	how acclimated you are to taking huge loads
 
 race:
 
@@ -312,25 +347,27 @@ do you have markings?
 "freckles"
 "heavily freckled"
 
-eyeColor:
+eye:
+	right:/left:
+		iris:
 
-your eye color
-accepts string
+		your eye color
+		accepts string
 
-origEye:
+		pupil:
 
-your original eye color
-accepts string
+		your pupil shape
+		accepts string
 
-pupil:
+		sclerae:
 
-your pupil shape
-accepts string
+		your sclerae color
+		accepts string	
 
-sclerae:
+	origColor:
 
-your sclerae color
-accepts string
+	your genetic eye color
+	accepts string
 
 hColor:
 
@@ -369,123 +406,76 @@ daughters:
 
 how many daughters you have
 
-birthElite:
-
-how many children you've carried for the SE
-
-birthMaster:
-
-how many children you've carried for your former master (servant start only)
-
-birthDegenerate:
-
-how many slave babies you've had
-
-birthClient:
-
-how many whoring babies you've had
-
-birthOther:
-
-untracked births
-
-birthArcOwner:
-
-how many children you've carried for other arc owners
-
-birthCitizen:
+counter:
 
-how many children you've had by sex with citizens (not whoring)
+	birthsTotal:
 
-birthSelf:
+	how many children you've had
+	accepts int
 
-how many times you've giving birth to your own selfcest babies
+	birthElite:
 
-birthLab:
+	how many children you've carried for the SE
 
-how many designer babies you've produced
+	birthMaster:
 
-slavesFathered:
+	how many children you've carried for your former master (servant start only)
 
-how many slave babies you are the father of
+	birthDegenerate:
 
-slavesKnockedUp:
+	how many slave babies you've had
 
-how many slaves you've gotten pregnant
+	birthClient:
 
-intelligence:
+	how many whoring babies you've had
 
-100
+	birthOther:
 
-face:
+	untracked births
 
-100
+	birthArcOwner:
 
-actualAge:
+	how many children you've carried for other arc owners
 
-(uncommon in events)
-your actualAge
-14+
+	birthCitizen:
 
-physicalAge:
+	how many children you've had by sex with citizens (not whoring)
 
-your body's age
-14+
+	birthSelf:
 
-visualAge:
+	how many times you've giving birth to your own selfcest babies
 
-(uncommon in events)
-how old you look
-14+
+	birthLab:
 
-boobsImplant:
+	how many designer babies you've produced
+	
+	birthFuta:
 
-do you have breast implants
-0 - no
-1 - yes
+	how many babies you've had with the Futanari Sisters
 
-butt:
+	storedCum:
 
-how big your butt is
-0 - normal
-1 - big
-2 - huge
-3 - enormous
+	How many units of your cum are stored away for artificially inseminating slaves
 
-buttImplant:
+	laborCount:
 
-do you have butt implants
-0 - no
-1 - yes
+	Have you experienced labor.
 
-balls:
+	slavesFathered:
 
-how big your balls are (requires dick == 1)
-0 - normal
-1 - big
-2 - huge
-3 - massive
+	how many slave babies you are the father of
 
-ballsImplant:
+	slavesKnockedUp:
 
-how big your balls implants are (requires dick == 1)
-0 - normal
-1 - large
-2 - huge
-3 - enormous
-4 - monstrous
+	how many slaves you've gotten pregnant
 
-ageImplant:
+intelligence:
 
-have you had age altering surgery, not yet in use
-0 - no
-1 - yes
+100
 
-newVag:
+face:
 
-have you had a loose vagina restored
-0 - no
-1 - yes
+100
 
 reservedChildren:
 
@@ -507,56 +497,17 @@ have you been drugged with fertility drugs
 0	- no
 1+	- how many weeks they will remain in your system
 
+sexualEnergy:
+
+how much fucking you can do in a week
+accepts int
+
 staminaPills:
 
 Are you taking pills to fuck more slaves each week?
 0 - no
 1 - yes
 
-ovaryAge:
-
-How old your ovaries are
-Used to delay menopause temporarily
-
-eggType:
-
-Used for compatibility.
-"human"
-
-ballType:
-
-Used for compatibility.
-"human"
-
-storedCum:
-
-How many units of your cum are stored away for artificially inseminating slaves
-
-behavioralFlaw:
-
-Used for compatibility.
-"none"
-
-behavioralQuirk:
-
-Used for compatibility.
-"none"
-
-sexualFlaw:
-
-Used for compatibility.
-"none"
-
-sexualQuirk:
-
-Used for compatibility.
-"none"
-
-fetish:
-
-Used for compatibility.
-"none"
-
 pubicHStyle:
 
 Used for compatibility.
@@ -566,3 +517,19 @@ underArmHStyle:
 
 Used for compatibility.
 "hairless"
+
+rules:
+	living:
+	
+	Your starting expenses. Increases each NG+ until max. Keep in mind that this is in terms of an arcology owner.
+	"spare"
+	"normal"
+	"luxurious"
+	
+	lactation:
+	
+	How you are handling your lactation?
+	"none"
+	"induce"
+	"maintain"
+	"sell"
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index e407e129de1fd909b422390c983ece2c566d4f42..7c9c1734ce6f1af4f77133dfc8a76aa6093bc12e 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -358,6 +358,7 @@ You should have received a copy of the GNU General Public License along with thi
 	<<set $neighboringArcologies = 3>>
 	<<set $newDescriptions = 0>>
 	<<set $familyTesting = 0>>
+	<<set $showDistantRelatives = 0>>
 	<<set $inbreeding = 1>>
 	<<set $allowFamilyTitles = 0>>
 	<<set $surnameOrder = 0>>
diff --git a/src/js/heroCreator.js b/src/js/heroCreator.js
index cfc178de66e528fb16493b0138b9ff32d34fc977..2f78670c4df783498796bac7561bf6d7b93bd5ae 100644
--- a/src/js/heroCreator.js
+++ b/src/js/heroCreator.js
@@ -43,7 +43,13 @@ App.Utils.getHeroSlave = function(heroSlave, baseHeroSlave) {
 	}
 
 	const newSlave = clone(baseHeroSlave);
+	let albinismOverride = null
+	if (heroSlave.albinismOverride !== null) {
+		albinismOverride = heroSlave.albinismOverride;
+		delete heroSlave.albinismOverride;
+	}
 	deepAssign(newSlave, heroSlave);
+	newSlave.albinismOverride = albinismOverride;
 	repairLimbs(newSlave);
 	generatePuberty(newSlave);
 	return newSlave;
diff --git a/src/js/statsChecker/eyeChecker.js b/src/js/statsChecker/eyeChecker.js
index 058e3c1016904d72a7900d94480c5603734035b7..a98ddd2201a6e7205d31b4d5f56c0b86ac5a947d 100644
--- a/src/js/statsChecker/eyeChecker.js
+++ b/src/js/statsChecker/eyeChecker.js
@@ -242,7 +242,7 @@ window.getGeneticEyeColor = function(slave, side) {
 	if (side !== "left" && side !== "right") { return "ERROR:" + side; }
 
 	if (slave.geneticQuirks.albinism === 2) {
-		return "red";
+		return slave.albinismOverride.eyeColor;
 	} else {
 		if (side === "left" && typeof slave.geneticQuirks.heterochromia === "string") {
 			return slave.geneticQuirks.heterochromia;
diff --git a/src/js/utilJS.js b/src/js/utilJS.js
index 251986164ae21ba68da0d37fafaeadb8e055d97d..b15f8aacceca1f5aea2c30e320a6e04cbdab916c 100644
--- a/src/js/utilJS.js
+++ b/src/js/utilJS.js
@@ -1688,6 +1688,10 @@ window.lengthToEitherUnit = function(s) {
 	return `${s}cm`;
 };
 
+/**
+ * @param {number} i
+ * @returns {string}
+ */
 window.ordinalSuffix = function ordinalSuffix(i) {
 	let j = i % 10;
 	let k = i % 100;
@@ -1702,6 +1706,11 @@ window.ordinalSuffix = function ordinalSuffix(i) {
 	}
 	return `${i}th`;
 };
+
+/**
+ * @param {number} i
+ * @returns {string}
+ */
 window.ordinalSuffixWords = function(i) {
 	const text = ["zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth"];
 	if (i < text.length) {
@@ -1712,7 +1721,7 @@ window.ordinalSuffixWords = function(i) {
 
 /**
  * @param {Iterable<any>} array
- * @returns {Set<any>}
+ * @returns {any[]}
  */
 window.removeDuplicates = function removeDuplicates(array) {
 	return [...new Set(array)];
diff --git a/src/npc/databases/dSlavesDatabase.tw b/src/npc/databases/dSlavesDatabase.tw
index fdb85c1845360a7334001faf6f05a16fb433d740..4ba697c08010344609504bdfb6076b0ce09dee9d 100644
--- a/src/npc/databases/dSlavesDatabase.tw
+++ b/src/npc/databases/dSlavesDatabase.tw
@@ -497,7 +497,7 @@
 <<set $heroSlaves.push(_HS)>>
 
 <<set _HS = App.Entity.SlaveState.makeSkeleton()>>
-<<set _HS.slaveName = "'Virago' Kissa", _HS.birthName = "", _HS.birthSurname = "", _HS.origin = "In spite of the great demand for $his kind, $he has apparently eluded enslavement until recently.", _HS.career = "a wanderer", _HS.ID = _i++, _HS.prestige = 1, _HS.prestigeDesc = "$He is a natural albino.", _HS.birthWeek = random(0,51), setHealth(_HS, 100, 0, 0, 0, 0), _HS.devotion = 100, _HS.muscles = 50, _HS.height = 190, _HS.nationality = "Ugandan", _HS.race = "black", _HS.eye.origColor = "pale grey", _HS.origHColor = "white", _HS.pubicHColor = "white", _HS.origSkin = "extremely pale", _HS.hLength = 100, _HS.hStyle = "extremely long and bushy", _HS.pubicHStyle = "bushy", _HS.waist = -55, _HS.boobs = 600, _HS.face = 55, _HS.lips = 35, _HS.vaginaLube = 1, _HS.clitPiercing = 3, _HS.clitSetting = "oral", _HS.ovaries = 1, _HS.anusTat = "bleached", _HS.skill.oral = 100, _HS.skill.whoring =100, _HS.skill.entertainment = 100, _HS.skill.combat = 3, _HS.rules.living = "luxurious", _HS.rules.speech = "permissive", _HS.rules.release = "permissive", _HS.collar = "pretty jewelry", _HS.shoes = "flats", _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXY = 40, _HS.fetish = "cumslut", _HS.fetishKnown = 1, _HS.behavioralFlaw = "odd", _HS.geneticQuirks = {albinism: 2}, _HS.custom.tattoo = "$His entire body is tattooed with a detailed map of $his arteries which, combined with $his albinism, gives $him a quasi-translucent quality.", _HS.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast.">>
+<<set _HS.slaveName = "'Virago' Kissa", _HS.birthName = "", _HS.birthSurname = "", _HS.origin = "In spite of the great demand for $his kind, $he has apparently eluded enslavement until recently.", _HS.career = "a wanderer", _HS.ID = _i++, _HS.prestige = 1, _HS.prestigeDesc = "$He is a natural albino.", _HS.birthWeek = random(0,51), setHealth(_HS, 100, 0, 0, 0, 0), _HS.devotion = 100, _HS.muscles = 50, _HS.height = 190, _HS.nationality = "Ugandan", _HS.race = "black", _HS.hLength = 100, _HS.hStyle = "extremely long and bushy", _HS.pubicHStyle = "bushy", _HS.waist = -55, _HS.boobs = 600, _HS.face = 55, _HS.lips = 35, _HS.vaginaLube = 1, _HS.clitPiercing = 3, _HS.clitSetting = "oral", _HS.ovaries = 1, _HS.anusTat = "bleached", _HS.skill.oral = 100, _HS.skill.whoring =100, _HS.skill.entertainment = 100, _HS.skill.combat = 3, _HS.rules.living = "luxurious", _HS.rules.speech = "permissive", _HS.rules.release = "permissive", _HS.collar = "pretty jewelry", _HS.shoes = "flats", _HS.intelligence = 100, _HS.intelligenceImplant = 30, _HS.attrXY = 40, _HS.fetish = "cumslut", _HS.fetishKnown = 1, _HS.behavioralFlaw = "odd", _HS.geneticQuirks = {albinism: 2}, _HS.albinismOverride = {eyeColor: "pale grey", hColor: "white", skin: "extremely pale"}, _HS.custom.tattoo = "$His entire body is tattooed with a detailed map of $his arteries which, combined with $his albinism, gives $him a quasi-translucent quality.", _HS.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast.">>
 <<set $heroSlaves.push(_HS)>>
 
 <<set _HS = App.Entity.SlaveState.makeSkeleton()>>
diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js
index c8e06a6faf1479e8ce669a00825732b84766d925..09f3446a0071ef3ae385e8e3dab938e6ba6df45c 100644
--- a/src/player/js/PlayerState.js
+++ b/src/player/js/PlayerState.js
@@ -35,6 +35,12 @@ App.Entity.PlayerSkillsState = class {
  */
 App.Entity.PlayerRulesState = class {
 	constructor() {
+		/**
+		 * Your starting expenses.
+		 * * "spare"
+		 * * "normal"
+		 * * "luxurious"
+		 */
 		this.living = "luxurious";
 		this.speech = "permissive";
 		this.release = "permissive";
@@ -1117,6 +1123,8 @@ App.Entity.PlayerState = class PlayerState {
 		 * * 4: gaping
 		 */
 		this.anus = 0;
+		/** used to calculate size of area around anus. */
+		this.analArea = 1;
 		/**
 		 * dick size
 		 * * 0: none
@@ -1133,8 +1141,6 @@ App.Entity.PlayerState = class PlayerState {
 		 * * 11+: hypertrophied
 		 */
 		this.dick = 4;
-		/** used to calculate size of area around anus. */
-		this.analArea = 1;
 		/**
 		 * is dick pierced
 		 * * 0: no
@@ -2015,6 +2021,7 @@ App.Entity.PlayerState = class PlayerState {
 			brand: {},
 			scar: {},
 			skill: {},
+			rules: {},
 			custom: {},
 		};
 	}
diff --git a/src/pregmod/editGenetics.tw b/src/pregmod/editGenetics.tw
index 20d3c162903144a333911f2a11ba3b6006d88767..ffdff2c224314e36be059b912c2d31464ea0b95b 100644
--- a/src/pregmod/editGenetics.tw
+++ b/src/pregmod/editGenetics.tw
@@ -43,9 +43,6 @@
 			<th>Mother</th><td colspan="2"><%= tmpl.parentFullName(s.mother) %></td>
 			<th>Age</th><td><%- tmpl.ageDesc(s) %></td>
 		</tr>
-		<% if(s.origin) { %><tr><td colspan="8"><i><%- s.origin %></td></i></tr><% } %>
-		<% if(s.prestigeDesc) { %><tr><td colspan="8"><i><%- s.prestigeDesc %></td></i></tr><% } %>
-		<% if(s.custom.desc) { %><tr><td colspan="8"><i><%- s.custom.desc %></td></i></tr><% } %>
 		<% if(s.birthName !== s.slaveName || s.birthSurname !== s.slaveSurname) { %><tr><td colspan="8"><i>Currently called <%= tmpl.currentFullName(s) %>.</td></i></tr><% } %>
 		<tr><td></td><td colspan="6"><hr></td><td></td></tr>
 		<tr>
diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw
index 6769847984529e211a1f641d1d7cc9bb58076333..1d67e9a6b2a15affd9f3ab147c0fc5a326314ddd 100644
--- a/src/pregmod/managePersonalAffairs.tw
+++ b/src/pregmod/managePersonalAffairs.tw
@@ -54,60 +54,60 @@ You current eye color is <<print App.Desc.eyeColor($PC)>>.
 
 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Side:
-[[Left|Salon][$artificialEyeSide = "left"]]
-| [[Right|Salon][$artificialEyeSide = "right"]]
-| [[Both|Salon][$artificialEyeSide = "both"]]
+[[Left|Manage Personal Affairs][$artificialEyeSide = "left"]]
+| [[Right|Manage Personal Affairs][$artificialEyeSide = "right"]]
+| [[Both|Manage Personal Affairs][$artificialEyeSide = "both"]]
 
 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Iris:
-[[Amber|Salon][$artificialEyeColor = "amber"]]
-| [[Black|Salon][$artificialEyeColor = "black"]]
-| [[Blue|Salon][$artificialEyeColor = "blue"]]
-| [[Brown|Salon][$artificialEyeColor = "brown"]]
-| [[Green|Salon][$artificialEyeColor = "green"]]
-| [[Hazel|Salon][$artificialEyeColor = "hazel"]]
-| [[Orange|Salon][$artificialEyeColor = "orange"]]
-| [[Pale-Grey|Salon][$artificialEyeColor = "pale-grey"]]
-| [[Pink|Salon][$artificialEyeColor = "pink"]]
-| [[Red|Salon][$artificialEyeColor = "red"]]
-| [[Sky-Blue|Salon][$artificialEyeColor = "sky-blue"]]
-| [[Turquoise|Salon][$artificialEyeColor = "turquoise"]]
-| [[White|Salon][$artificialEyeColor = "white"]]
-| [[Yellow|Salon][$artificialEyeColor = "yellow"]]
+[[Amber|Manage Personal Affairs][$artificialEyeColor = "amber"]]
+| [[Black|Manage Personal Affairs][$artificialEyeColor = "black"]]
+| [[Blue|Manage Personal Affairs][$artificialEyeColor = "blue"]]
+| [[Brown|Manage Personal Affairs][$artificialEyeColor = "brown"]]
+| [[Green|Manage Personal Affairs][$artificialEyeColor = "green"]]
+| [[Hazel|Manage Personal Affairs][$artificialEyeColor = "hazel"]]
+| [[Orange|Manage Personal Affairs][$artificialEyeColor = "orange"]]
+| [[Pale-Grey|Manage Personal Affairs][$artificialEyeColor = "pale-grey"]]
+| [[Pink|Manage Personal Affairs][$artificialEyeColor = "pink"]]
+| [[Red|Manage Personal Affairs][$artificialEyeColor = "red"]]
+| [[Sky-Blue|Manage Personal Affairs][$artificialEyeColor = "sky-blue"]]
+| [[Turquoise|Manage Personal Affairs][$artificialEyeColor = "turquoise"]]
+| [[White|Manage Personal Affairs][$artificialEyeColor = "white"]]
+| [[Yellow|Manage Personal Affairs][$artificialEyeColor = "yellow"]]
 
 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Pupil:
-[[Circular|Salon][$artificialEyeShape = "circular"]]
-| [[Almond-Shaped|Salon][$artificialEyeShape = "almond-shaped"]]
-| [[Bright|Salon][$artificialEyeShape = "bright"]]
-| [[Catlike|Salon][$artificialEyeShape = "catlike"]]
-| [[Demonic|Salon][$artificialEyeShape = "demonic"]]
-| [[Devilish|Salon][$artificialEyeShape = "devilish"]]
-| [[Goat-Like|Salon][$artificialEyeShape = "goat-like"]]
-| [[Heart-Shaped|Salon][$artificialEyeShape = "heart-shaped"]]
-| [[Hypnotic|Salon][$artificialEyeShape = "hypnotic"]]
-| [[Serpent-Like|Salon][$artificialEyeShape = "serpent-like"]]
-| [[Star-Shaped|Salon][$artificialEyeShape = "star-shaped"]]
-| [[Teary|Salon][$artificialEyeShape = "teary"]]
-| [[Vacant|Salon][$artificialEyeShape = "vacant"]]
-| [[Wide-Eyed|Salon][$artificialEyeShape = "wide-eyed"]]
+[[Circular|Manage Personal Affairs][$artificialEyeShape = "circular"]]
+| [[Almond-Shaped|Manage Personal Affairs][$artificialEyeShape = "almond-shaped"]]
+| [[Bright|Manage Personal Affairs][$artificialEyeShape = "bright"]]
+| [[Catlike|Manage Personal Affairs][$artificialEyeShape = "catlike"]]
+| [[Demonic|Manage Personal Affairs][$artificialEyeShape = "demonic"]]
+| [[Devilish|Manage Personal Affairs][$artificialEyeShape = "devilish"]]
+| [[Goat-Like|Manage Personal Affairs][$artificialEyeShape = "goat-like"]]
+| [[Heart-Shaped|Manage Personal Affairs][$artificialEyeShape = "heart-shaped"]]
+| [[Hypnotic|Manage Personal Affairs][$artificialEyeShape = "hypnotic"]]
+| [[Serpent-Like|Manage Personal Affairs][$artificialEyeShape = "serpent-like"]]
+| [[Star-Shaped|Manage Personal Affairs][$artificialEyeShape = "star-shaped"]]
+| [[Teary|Manage Personal Affairs][$artificialEyeShape = "teary"]]
+| [[Vacant|Manage Personal Affairs][$artificialEyeShape = "vacant"]]
+| [[Wide-Eyed|Manage Personal Affairs][$artificialEyeShape = "wide-eyed"]]
 
 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Sclera:
-[[White|Salon][$artificialEyeFill = "white"]]
-| [[Amber|Salon][$artificialEyeFill = "amber"]]
-| [[Black|Salon][$artificialEyeFill = "black"]]
-| [[Blue|Salon][$artificialEyeFill = "blue"]]
-| [[Brown|Salon][$artificialEyeFill = "brown"]]
-| [[Green|Salon][$artificialEyeFill = "green"]]
-| [[Hazel|Salon][$artificialEyeFill = "hazel"]]
-| [[Orange|Salon][$artificialEyeFill = "orange"]]
-| [[Pale-Grey|Salon][$artificialEyeFill = "pale-grey"]]
-| [[Pink|Salon][$artificialEyeFill = "pink"]]
-| [[Red|Salon][$artificialEyeFill = "red"]]
-| [[Sky-Blue|Salon][$artificialEyeFill = "sky-blue"]]
-| [[Turquoise|Salon][$artificialEyeFill = "turquoise"]]
-| [[Yellow|Salon][$artificialEyeFill = "yellow"]]
+[[White|Manage Personal Affairs][$artificialEyeFill = "white"]]
+| [[Amber|Manage Personal Affairs][$artificialEyeFill = "amber"]]
+| [[Black|Manage Personal Affairs][$artificialEyeFill = "black"]]
+| [[Blue|Manage Personal Affairs][$artificialEyeFill = "blue"]]
+| [[Brown|Manage Personal Affairs][$artificialEyeFill = "brown"]]
+| [[Green|Manage Personal Affairs][$artificialEyeFill = "green"]]
+| [[Hazel|Manage Personal Affairs][$artificialEyeFill = "hazel"]]
+| [[Orange|Manage Personal Affairs][$artificialEyeFill = "orange"]]
+| [[Pale-Grey|Manage Personal Affairs][$artificialEyeFill = "pale-grey"]]
+| [[Pink|Manage Personal Affairs][$artificialEyeFill = "pink"]]
+| [[Red|Manage Personal Affairs][$artificialEyeFill = "red"]]
+| [[Sky-Blue|Manage Personal Affairs][$artificialEyeFill = "sky-blue"]]
+| [[Turquoise|Manage Personal Affairs][$artificialEyeFill = "turquoise"]]
+| [[Yellow|Manage Personal Affairs][$artificialEyeFill = "yellow"]]
 
 <<if ndef $artificialEyeColor>>
 	<<set $artificialEyeColor = "", $artificialEyeShape = "", $artificialEyeFill = "">>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index d21f6e7bf2129cd3c13144cb61eeefa25e23e604..f8479dde9a96ec616ffd7c69d74b851f12e624ef 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -320,18 +320,17 @@ is
 				<<set _nameloss = 1>>
 			<</if>>
 		<<elseif $activeSlave.slaveSurname != $activeSlave.birthSurname>>
-			<<if $activeSlave.slaveSurname === 0>>
-				$He once had a surname;
-				<<if $activeSlave.birthSurname === "">>
-					whatever it was, however, has been lost forever.
-					<<set _nameloss = 1>>
-				<</if>>
-			<<else>>
+			<<if $activeSlave.slaveSurname === 0 && $activeSlave.birthSurname === "">>
+				$He once had a surname; whatever it was, however, has been lost forever.
+				<<set _nameloss = 1>>
+			<<elseif $activeSlave.slaveSurname !== 0>>
 				$activeSlave.slaveSurname is not $his original surname;
 				<<if $activeSlave.birthSurname === "">>
 					whatever it was, however, has been lost forever.
 					<<set _nameloss = 1>>
 				<</if>>
+			<<else>>
+				<<set _nameloss = 1>>
 			<</if>>
 		<</if>>
 		<<if $activeSlave.birthName !== "" || $activeSlave.birthSurname !== "">>