From 8cee8d6ecca3a35b78e8710dfd57ceddc51a8ba0 Mon Sep 17 00:00:00 2001
From: Pregmodder <pregmodder@gmail.com>
Date: Sat, 18 Feb 2017 22:35:11 -0500
Subject: [PATCH] Bugfixes.

---
 src/events/intro/initNationalities.tw         |   2 +-
 src/gui/Encyclopedia/encyclopedia.tw          |   1 +
 src/init/storyInit.tw                         |   7 +-
 src/js/storyJS.tw                             | 418 +++++++++---------
 src/npc/acquisition.tw                        |  14 +-
 src/npc/databases/cheatmodeDatabase.tw        |   2 +-
 src/npc/exportSlave.tw                        |   2 +-
 src/npc/fRelation.tw                          |  40 +-
 src/npc/removeActiveSlave.tw                  |   1 -
 src/npc/uploadSlave.tw                        |   2 +-
 src/pregmod/generateChild.tw                  | 340 +++++++++++++-
 src/pregmod/pregmodWidgets.tw                 | 101 ++++-
 src/uncategorized/RESS.tw                     |   2 +-
 src/uncategorized/addCustomDescriptors.tw     |  42 +-
 src/uncategorized/bodyModification.tw         |   4 +-
 src/uncategorized/corporationDevelopments.tw  |   2 +-
 src/uncategorized/dispensary.tw               |   2 +-
 .../freeRangeDairyAssignmentScene.tw          |  40 +-
 src/uncategorized/generateXXSlave.tw          |   2 +-
 src/uncategorized/generateXYSlave.tw          |   2 +-
 src/uncategorized/genericPlotEvents.tw        |  10 +-
 src/uncategorized/longSlaveDescription.tw     |  58 +--
 src/uncategorized/main.tw                     |  38 +-
 src/uncategorized/pMercenaryRomeo.tw          |  48 +-
 src/uncategorized/randomNonindividualEvent.tw |  30 +-
 src/uncategorized/saDiet.tw                   |   2 +-
 src/uncategorized/saRecruitGirls.tw           |  38 +-
 src/uncategorized/saRelationships.tw          |   4 +-
 src/uncategorized/slaveInteract.tw            |  74 ++--
 src/uncategorized/slaveSummary.tw             |  16 +
 src/utility/assayWidgets.tw                   |   2 +-
 src/utility/descriptionWidgets.tw             |  49 +-
 src/utility/miscWidgets.tw                    |  17 +-
 33 files changed, 910 insertions(+), 502 deletions(-)

diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
index a2fe23ea81a..141c012fcc0 100644
--- a/src/events/intro/initNationalities.tw
+++ b/src/events/intro/initNationalities.tw
@@ -60,7 +60,7 @@
 /* SET HEROES */
 
 <<set $heroSlaves = []>>
-<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, visualAge: 18, physicalAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: 0, inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, father: 0, mother: 0, daughters: 0, sisters: 0, canRecruit: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
+<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, visualAge: 18, physicalAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: 0, inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, father: 0, mother: 0, daughters: 0, sisters: 0, canRecruit: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
 <<if ($seeDicks > 0) && ($seeDicks < 100)>>
 	<<display "D Slaves Database">>
 	<<display "DD Slaves Database">>
diff --git a/src/gui/Encyclopedia/encyclopedia.tw b/src/gui/Encyclopedia/encyclopedia.tw
index 7896615d8d2..03645963bcd 100644
--- a/src/gui/Encyclopedia/encyclopedia.tw
+++ b/src/gui/Encyclopedia/encyclopedia.tw
@@ -927,6 +927,7 @@ __I do not give credit without explicit permission to do so.__ If you have contr
 ''anon'' for player getting fucked work.
 ''anon'' for additional bodyguard weapons.
 ''anon'' for HGExclusion and animal pregnancy work.
+''anon'' for putting up with my javascript incompetence.
 ''Bane70'' optimized huge swaths of code with notable professionalism.
 ''Circle Tritagonist'' provided several new collars and outfits.
 ''Qotsafan'' submitted bugfixes.
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 0975fd52005..a3035bac27e 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -22,6 +22,7 @@
 		<</if>>
 		<<set $slaves[$i].daughters = 0>>
 		<<set $slaves[$i].sisters = 0>>
+		<<set $slaves[$i].breedingMark = 0>>
 		<<if $arcologies[0].FSRomanRevivalist > 90>>
 			<<set $slaves[$i].nationality to "Roman Revivalist">>
 		<<elseif $arcologies[0].FSEgyptianRevivalist > 90>>
@@ -216,6 +217,9 @@
 	<<if ndef $slaves[$i].fuckdoll>>
 		<<set $slaves[$i].fuckdoll to 0>>
 	<</if>>
+	<<if ndef $slaves[$i].customImage>>
+		<<set $slaves[$i].customImage to 0>>
+	<</if>>
 	<<set $activeSlave to $slaves[$i]>>
 	<<display "Checkin Checks">>
 	<</for>>
@@ -709,6 +713,7 @@ DairyRestraintsSetting($dairyRestraintsSetting)
 <<set $missingParentID to -10000>>
 <<set $startingSlaveRelative to 0>>
 <<set $relationID = 0>>
+<<set $mom = 0>>
 <<set $animalParts = 0>>
 <<set $showBestiality = 0>>
 
@@ -1262,7 +1267,7 @@ DairyRestraintsSetting($dairyRestraintsSetting)
 <<set $nextLink to "EW Slaves">>
 
 <<set $customSlaveOrdered to 0>>
-<<set $customSlave to {slaveName: "custom", birthName: "custom", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", hColor: "brown", pubicHColor: "brown", skin: 0, hLength: 60, hStyle: 0, pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 500, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 2, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "no default setting", tonguePiercing: 0, vagina: 1, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 1, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 1, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, actualAge: 18, visualAge: 18, physicalAge: 18, mother: 0, father: 0, sisters: 0, daughters: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
+<<set $customSlave to {slaveName: "custom", birthName: "custom", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", hColor: "brown", pubicHColor: "brown", skin: 0, hLength: 60, hStyle: 0, pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 500, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 2, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "no default setting", tonguePiercing: 0, vagina: 1, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 1, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 1, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, actualAge: 18, visualAge: 18, physicalAge: 18, mother: 0, father: 0, sisters: 0, daughters: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
 
 <<set $huskSlaveOrdered to 0>>
 <<set $huskSlave to {age: 18, nationality: "slave", race: "white", sex: 1, virgin: 0}>>
diff --git a/src/js/storyJS.tw b/src/js/storyJS.tw
index d6ac532e7e6..f89e4d28210 100644
--- a/src/js/storyJS.tw
+++ b/src/js/storyJS.tw
@@ -289,98 +289,29 @@ window.bigBelly = function(slave) {
 	}
 };
 
-window.milkAmount = function(slave) {
-	var milk;
-	var calcs;
-	if (!slave) {
-		return null;
-	} else {
-		calcs = slave.boobs-slave.boobsImplant
-		if (calcs > 20000) {
-			milk = (118+((calcs-20000)/400))
-		} else if (calcs > 10000) {
-			milk = (78+((calcs-10000)/300))
-		} else if (calcs > 5000) {
-			milk = (53+((calcs-5000)/200))
-		} else if (calcs > 2000) {
-			milk = (29+((calcs-2000)/125))
-		} else if (calcs > 800) {
-			milk = (16+((calcs-800)/80))
-		} else {
-			milk = (8+((calcs-400)/50))
-		}
-		if (slave.lactation == 2) {
-			milk *= 1.2
-		}
-		milk += (milk*((slave.devotion-50)/200))
-		if (slave.boobsImplant > 200) {
-			milk *= 0.9
-		}
-		calcs = slave.hormones
-		if (slave.balls != 0 && calcs > -2) {
-			calcs -= 1
-		} else if (slave.ovaries != 1 && calcs < 2) {
-			calcs += 1
-		}
-		milk *= (1+(calcs*0.1))
-		milk *= (1+(slave.preg/100))
-		milk *= (1+(slave.health/50))
-		milk *= (1+(slave.weight/500))
-		milk *= (1+(slave.lactationAdaptation/500))
-		milk = Math.trunc(milk)
-		milk = Math.clamp(milk,1,1000000000000000000)
-		return milk
-	}
-};
-
-window.cumAmount = function(slave) {
-	var cum = 0;
-	var calcs = 0;
+window.canAchieveErection = function(slave) {
 	if (!slave) {
 		return null;
+	} else if (slave.dick < 7 && slave.dick > 0 && (slave.balls > 0 ? slave.hormones <= 0 : slave.hormones < 0)) {
+		return true;
 	} else {
-		if (slave.drugs == "testicle enhancement") {
-			cum = ((slave.balls*3.5)+random(0,2))
-		} else if (slave.drugs == "hyper testicle enhancement") {
-			cum = ((slave.balls*5)+random(0,2))
-		} else {
-			cum = ((slave.balls*2.5)+random(0,2))
-		}
-		if (slave.prostateImplant == 1) {
-			cum *= 1.2
-		}
-		if (slave.diet == "cum production") {
-			cum *= 1.2
-		}
-		calcs = slave.hormones
-		cum *= (1-(calcs*0.1))
-		if (slave.scrotum == 0) {
-			cum *= 0.8
-		}
-		if (slave.devotion > 50) {
-			cum += (cum*(slave.devotion/100))
-		} else if (slave.devotion < -50) {
-			cum += (cum*(slave.devotion/100))
-		}
-		if (slave.health > 50) {
-			cum += (cum*(slave.health/50))
-		} else if (slave.health < -50) {
-			cum += (cum*(slave.health/50))
-		}
-		cum = Math.trunc(cum)
-		cum = Math.clamp(cum,1,1000000000000000000)
-		return cum
+		return false;
 	}
 };
 
-window.canAchieveErection = function(slave) {
+window.canPenetrate = function(slave) {
 	if (!slave) {
 		return null;
-	} else if (slave.dick < 7 && slave.dick > 0 && (slave.balls > 0 ? slave.hormones <= 0 : slave.hormones < 0)) {
-		return true;
-	} else {
+	} else if (canAchieveErection(slave) == false) {
+		return false;
+	} else if (slave.dickAccessory == "chastity") {
+		return false;
+	} else if (slave.dickAccessory == "combined chastity") {
+		return false;
+	} else if (slave.dick > 7) {
 		return false;
 	}
+	return true;
 };
 
 window.canSee = function(slave) {
@@ -476,7 +407,7 @@ window.canDoAnal = function(slave) {
 		return false;
 	} else if (slave.dickAccessory == "combined chastity") {
 		return false;
-	} 
+	}
 	return true;
 };
 
@@ -493,21 +424,6 @@ window.canDoVaginal = function(slave) {
 	return true;
 };
 
-window.canPenetrate = function(slave) {
-	if (!slave) {
-		return null;
-	} else if (canAchieveErection(slave) == false) {
-		return false;
-	} else if (slave.dickAccessory == "chastity") {
-		return false;
-	} else if (slave.dickAccessory == "combined chastity") {
-		return false;
-	} else if (slave.dick > 7) {
-		return false;
-	}
-	return true;
-};
-
 window.tooBigBreasts = function(slave){
 	if (!slave) {
 		return null;
@@ -687,7 +603,7 @@ window.relationTargetWord = function(slave) {
 		return "mother";
 	} else if (slave.relation == "mother") {
 		return "daughter";
-	} 
+	}
 	return slave.relation;
 };
 
@@ -697,7 +613,7 @@ window.ruleApplied = function(slave, ID) {
 	}else if (!slave.currentRules) {
 		return null;
 	} else {
-		for(var d=0; d < slave.currentRules.length; ++d){	
+		for(var d=0; d < slave.currentRules.length; ++d){
 			if(slave.currentRules[d] == ID){
 				return true;
 			}
@@ -706,7 +622,7 @@ window.ruleApplied = function(slave, ID) {
 };
 
 window.ruleAssignment = function(applyAssignment, assignment) {
-	for(var d=0; d < applyAssignment.length; ++d){	
+	for(var d=0; d < applyAssignment.length; ++d){
 		if(applyAssignment[d] == assignment){
 
 			return true;
@@ -715,7 +631,7 @@ window.ruleAssignment = function(applyAssignment, assignment) {
 };
 
 window.ruleFacility = function(applyFacility, facility) {
-	for(var d=0; d < applyFacility.length; ++d){	
+	for(var d=0; d < applyFacility.length; ++d){
 		if(applyFacility[d] == facility){
 			return true;
 		}
@@ -752,7 +668,7 @@ window.ruleExcludeSlaveFacility = function(rule, slave) {
 					return true;
 				}
 			}
-			else if(rule.excludeFacility[d] == "clinic"){ 
+			else if(rule.excludeFacility[d] == "clinic"){
 				if(slave.assignment == "get treatment in the clinic" ){
 					return true;
 				}
@@ -784,7 +700,7 @@ window.ruleExcludeSlaveFacility = function(rule, slave) {
 					return true;
 				}
 			}
-			else if(rule.excludeFacility[d] == "dairy"){ 
+			else if(rule.excludeFacility[d] == "dairy"){
 				if (slave.assignment == "work in the dairy"){
 					return true;
 				}
@@ -828,7 +744,7 @@ window.ruleAppliedToSlaveFacility = function(rule, slave) {
 	}else if (!rule.facility) {
 		return false;
 	} else {
-		for(var d=0; d < rule.facility.length; ++d){	
+		for(var d=0; d < rule.facility.length; ++d){
 			if(rule.facility[d] == "hgsuite"){
 				if(slave.assignment == "live with your Head Girl" ){
 					return true;
@@ -850,7 +766,7 @@ window.ruleAppliedToSlaveFacility = function(rule, slave) {
 					return true;
 				}
 			}
-			else if(rule.facility[d] == "clinic"){ 
+			else if(rule.facility[d] == "clinic"){
 				if(slave.assignment == "get treatment in the clinic" ){
 					return true;
 				}
@@ -882,7 +798,7 @@ window.ruleAppliedToSlaveFacility = function(rule, slave) {
 					return true;
 				}
 			}
-			else if(rule.facility[d] == "dairy"){ 
+			else if(rule.facility[d] == "dairy"){
 				if (slave.assignment == "work in the dairy"){
 					return true;
 				}
@@ -926,7 +842,7 @@ window.ruleSlaveSelected = function(slave, rule) {
 	}else if (!rule.selectedSlaves) {
 		return false;
 	} else {
-		for(var d=0; d < rule.selectedSlaves.length; ++d){	
+		for(var d=0; d < rule.selectedSlaves.length; ++d){
 			if(slave.ID == rule.selectedSlaves[d]){
 				return true;
 			}
@@ -942,7 +858,7 @@ window.ruleSlaveExcluded = function(slave, rule) {
 	}else if (!rule.excludedSlaves) {
 		return false;
 	} else {
-		for(var d=0; d < rule.excludedSlaves.length; ++d){	
+		for(var d=0; d < rule.excludedSlaves.length; ++d){
 			if(slave.ID == rule.excludedSlaves[d]){
 				return true;
 			}
@@ -957,8 +873,8 @@ window.hasSurgeryRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return false;
 	}else {
-		for(var d=rules.length-1; d >= 0; --d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0; --d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].autoSurgery > 0){
 						return true;
@@ -977,8 +893,8 @@ window.lastPregRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return false;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].preg == -1){
 						return rules[d];
@@ -997,8 +913,8 @@ window.hasHColorRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return false;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hColor != "no default setting"){
 						return true;
@@ -1017,8 +933,8 @@ window.hasHStyleRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return false;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hStyle != "no default setting"){
 						return true;
@@ -1037,8 +953,8 @@ window.hasEyeColorRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return false;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hStyle != "no default setting"){
 						return true;
@@ -1057,8 +973,8 @@ window.lastEyeWearRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].eyewear != "no default setting"){
 						return rules[d];
@@ -1077,8 +993,8 @@ window.lastEyeColorRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].eyeColor != "no default setting"){
 						return rules[d];
@@ -1097,8 +1013,8 @@ window.lastMakeupRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].makeup != "no default setting"){
 						return rules[d];
@@ -1117,8 +1033,8 @@ window.lastNailsRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].nails != "no default setting"){
 						return rules[d];
@@ -1137,8 +1053,8 @@ window.lastHColorRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hColor != "no default setting"){
 						return rules[d];
@@ -1157,8 +1073,8 @@ window.lastHStyleRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hStyle != "no default setting"){
 						return rules[d];
@@ -1177,8 +1093,8 @@ window.lastHLengthRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].hLength != "no default setting"){
 						return rules[d];
@@ -1197,8 +1113,8 @@ window.lastPubicHColorRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].pubicHColor != "no default setting"){
 						return rules[d];
@@ -1217,8 +1133,8 @@ window.lastPubicHStyleRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].pubicHStyle != "no default setting"){
 						return rules[d];
@@ -1277,8 +1193,8 @@ window.lastNipplesPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].nipplesPiercing != "no default setting"){
 						return rules[d];
@@ -1296,8 +1212,8 @@ window.lastAreolaePiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].areolaePiercing != "no default setting"){
 						return rules[d];
@@ -1315,8 +1231,8 @@ window.lastClitPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].clitPiercing != "no default setting"){
 						return rules[d];
@@ -1353,8 +1269,8 @@ window.lastVaginaPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].vaginaPiercing != "no default setting"){
 						return rules[d];
@@ -1372,8 +1288,8 @@ window.lastDickPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].dickPiercing != "no default setting"){
 						return rules[d];
@@ -1391,8 +1307,8 @@ window.lastAnusPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].anusPiercing != "no default setting"){
 						return rules[d];
@@ -1410,8 +1326,8 @@ window.lastLipsPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].lipsPiercing != "no default setting"){
 						return rules[d];
@@ -1429,8 +1345,8 @@ window.lastTonguePiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].tonguePiercing != "no default setting"){
 						return rules[d];
@@ -1448,8 +1364,8 @@ window.lastEarPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].earPiercing != "no default setting"){
 						return rules[d];
@@ -1467,8 +1383,8 @@ window.lastEyebrowPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].earPiercing != "no default setting"){
 						return rules[d];
@@ -1486,8 +1402,8 @@ window.lastNosePiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].nosePiercing != "no default setting"){
 						return rules[d];
@@ -1505,8 +1421,8 @@ window.lastNavelPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].navelPiercing != "no default setting"){
 						return rules[d];
@@ -1524,8 +1440,8 @@ window.lastCorsetPiercingRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].corsetPiercing != "no default setting"){
 						return rules[d];
@@ -1543,8 +1459,8 @@ window.lastBoobsTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].boobsTat != "no default setting"){
 						return rules[d];
@@ -1562,8 +1478,8 @@ window.lastButtTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].buttTat != "no default setting"){
 						return rules[d];
@@ -1581,8 +1497,8 @@ window.lastVaginaTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].vaginaTat != "no default setting"){
 						return rules[d];
@@ -1600,8 +1516,8 @@ window.lastDickTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].dickTat != "no default setting"){
 						return rules[d];
@@ -1619,8 +1535,8 @@ window.lastAnusTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].anusTat != "no default setting"){
 						return rules[d];
@@ -1638,8 +1554,8 @@ window.lastLipsTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].lipsTat != "no default setting"){
 						return rules[d];
@@ -1657,8 +1573,8 @@ window.lastShouldersTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].shouldersTat != "no default setting"){
 						return rules[d];
@@ -1676,8 +1592,8 @@ window.lastArmsTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].armsTat != "no default setting"){
 						return rules[d];
@@ -1695,8 +1611,8 @@ window.lastLegsTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].legsTat != "no default setting"){
 						return rules[d];
@@ -1714,8 +1630,8 @@ window.lastStampTatRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
-			for(var e=0; e < slave.currentRules.length;++e){	
+		for(var d=rules.length-1; d >= 0;--d){
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].stampTat != "no default setting"){
 						return rules[d];
@@ -1734,11 +1650,11 @@ window.lastLactationSurgeryRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
+		for(var d=rules.length-1; d >= 0;--d){
 			if (!rules[d].surgery) {
 				return null;
 			}
-			for(var e=0; e < slave.currentRules.length;++e){	
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].surgery.lactation != "no default setting"){
 						return rules[d];
@@ -1756,11 +1672,11 @@ window.lastLipSurgeryRule = function(slave, rules) {
 	}else if (!slave.currentRules) {
 		return null;
 	}else {
-		for(var d=rules.length-1; d >= 0;--d){	
+		for(var d=rules.length-1; d >= 0;--d){
 			if (!rules[d].surgery) {
 				return null;
 			}
-			for(var e=0; e < slave.currentRules.length;++e){	
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].surgery.lips != "no default setting"){
 						return rules[d];
@@ -1782,7 +1698,7 @@ window.lastBoobSurgeryRule = function(slave, rules) {
 			if (!rules[d].surgery) {
 				return null;
 			}
-			for(var e=0; e < slave.currentRules.length;++e){	
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].surgery.boobs != "no default setting"){
 						return rules[d];
@@ -1804,7 +1720,7 @@ window.lastButtSurgeryRule = function(slave, rules) {
 			if (!rules[d].surgery) {
 				return null;
 			}
-			for(var e=0; e < slave.currentRules.length;++e){	
+			for(var e=0; e < slave.currentRules.length;++e){
 				if(slave.currentRules[e] == rules[d].ID){
 					if (rules[d].surgery.butt != "no default setting"){
 						return rules[d];
@@ -1875,28 +1791,120 @@ window.removeFromArray = function(arr, val) {
 	return null;
 };
 
+window.milkAmount = function(slave) {
+	var milk;
+	var calcs;
+	if (!slave) {
+		return null;
+	} else {
+		calcs = slave.boobs-slave.boobsImplant
+		if (calcs > 20000) {
+			milk = (118+((calcs-20000)/400))
+		} else if (calcs > 10000) {
+			milk = (78+((calcs-10000)/300))
+		} else if (calcs > 5000) {
+			milk = (53+((calcs-5000)/200))
+		} else if (calcs > 2000) {
+			milk = (29+((calcs-2000)/125))
+		} else if (calcs > 800) {
+			milk = (16+((calcs-800)/80))
+		} else {
+			milk = (8+((calcs-400)/50))
+		}
+		if (slave.lactation == 2) {
+			milk *= 1.2
+		}
+		milk += (milk*((slave.devotion-50)/200))
+		if (slave.boobsImplant > 200) {
+			milk *= 0.9
+		}
+		calcs = slave.hormones
+		if (slave.balls != 0 && calcs > -2) {
+			calcs -= 1
+		} else if (slave.ovaries != 1 && calcs < 2) {
+			calcs += 1
+		}
+		milk *= (1+(calcs*0.1))
+		milk *= (1+(slave.preg/100))
+		milk *= (1+(slave.health/50))
+		milk *= (1+(slave.weight/500))
+		milk *= (1+(slave.lactationAdaptation/500))
+		milk = Math.trunc(milk)
+		milk = Math.clamp(milk,1,1000000000000000000)
+		return milk
+	}
+};
 
+window.cumAmount = function(slave) {
+	var cum = 0;
+	var calcs = 0;
+	if (!slave) {
+		return null;
+	} else {
+		if (slave.drugs == "testicle enhancement") {
+			cum = ((slave.balls*3.5)+random(0,2))
+		} else if (slave.drugs == "hyper testicle enhancement") {
+			cum = ((slave.balls*5)+random(0,2))
+		} else {
+			cum = ((slave.balls*2.5)+random(0,2))
+		}
+		if (slave.prostateImplant == 1) {
+			cum *= 1.2
+		}
+		if (slave.diet == "cum production") {
+			cum *= 1.2
+		}
+		calcs = slave.hormones
+		cum *= (1-(calcs*0.1))
+		if (slave.scrotum == 0) {
+			cum *= 0.8
+		}
+		if (slave.devotion > 50) {
+			cum += (cum*(slave.devotion/100))
+		} else if (slave.devotion < -50) {
+			cum += (cum*(slave.devotion/100))
+		}
+		if (slave.health > 50) {
+			cum += (cum*(slave.health/50))
+		} else if (slave.health < -50) {
+			cum += (cum*(slave.health/50))
+		}
+		cum = Math.trunc(cum)
+		cum = Math.clamp(cum,1,1000000000000000000)
+		return cum
+	}
+};
 
+window.randomRelatedSlave = function(slave, filterFunction) {
+  if(!slave || !SugarCube) { return undefined; }
+  if(typeof filterFunction !==  'function') { filterFunction = function(s, index, array) { return true; }; }
+  return SugarCube.State.variables.slaves.filter(filterFunction).shuffle().find(function(s, index, array) {return areSisters(slave, s) || s.mother == slave.ID || s.father == slave.ID || slave.ID == s.mother || slave.ID == father; })
+}
 
+window.randomRelatedAvailableSlave = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s); });
+}
 
+window.randomSister = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return areSisters(slave, s); });
+}
 
+window.randomAvailableSister = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && areSisters(slave, s); });
+}
 
+window.randomDaughter = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return s.mother == slave.ID || s.father == slave.ID; });
+}
 
+window.randomAvailableDaughter = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && (s.mother == slave.ID || s.father == slave.ID); });
+}
 
+window.randomParent = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return s.ID == slave.mother || s.ID == slave.father; });
+}
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+window.randomAvailableParent = function(slave) {
+	return randomRelatedSlave(slave, function(s, index, array) { return isSlaveAvailable(s) && (s.ID == slave.mother || s.ID == slave.father); });
+}
\ No newline at end of file
diff --git a/src/npc/acquisition.tw b/src/npc/acquisition.tw
index 254d4aa3c14..6ca1c2b1637 100644
--- a/src/npc/acquisition.tw
+++ b/src/npc/acquisition.tw
@@ -192,19 +192,7 @@ The previous owner seems to have left in something of a hurry. <<if $saveImporte
 				<<set $slaves[$i].daughters += 1>>
 			<</if>>
 			<<if areSisters($slaves[$j], $slaves[$i]) > 0>>
-				<<set $slaves[$i].sisters += 1>>
-			<</if>>
-		<</for>>
-	<</if>>
-	<<if $familyTesting == 1>>
-		<<set $slaves[$i].sisters = 0>>
-		<<set $slaves[$i].daughters = 0>>
-		<<for $j to 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].mother == $slaves[$i].ID || $slaves[$j].father == $slaves[$i].ID>>
-				<<set $slaves[$i].daughters += 1>>
-			<</if>>
-			<<if areSisters($slaves[$j], $slaves[$i]) > 0>>
-				<<set $slaves[$i].sisters += 1>>
+				<<set $slaves[$i].sisters++>>
 			<</if>>
 		<</for>>
 	<</if>>
diff --git a/src/npc/databases/cheatmodeDatabase.tw b/src/npc/databases/cheatmodeDatabase.tw
index 2ddb51f4003..9ceaafde33f 100644
--- a/src/npc/databases/cheatmodeDatabase.tw
+++ b/src/npc/databases/cheatmodeDatabase.tw
@@ -1,6 +1,6 @@
 :: Cheatmode Database [nobr]
 
-<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, physicalAge: 18, visualAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", currentRules: [], father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
+<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 1, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), actualAge: 18, physicalAge: 18, visualAge: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race: "white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, publicCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customImage: 0, currentRules: [], father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 0, HGExclude: 0, ballType: "human", eggType: "human"}>>
 
 <<set _HS = clone($activeSlave)>>
 <<set _HS.slaveName = "Miss Anne", _HS.birthName = "Lindy Anne", _HS.ID = 990000, _HS.relation = "mother", _HS.relationTarget = 990004, _HS.relationship = 4, _HS.relationshipTarget = 990001, _HS.rivalry = 1, _HS.rivalryTarget = 990002, _HS.assignment = "be your Head Girl", _HS.birthWeek = random(0,51), _HS.actualAge = 42, _HS.physicalAge = 42, _HS.visualAge = 42, _HS.ageImplant = 1, _HS.health = 50, _HS.devotion = 100, _HS.height = 175, _HS.eyeColor = "green", _HS.hColor = "honey blonde", _HS.skin = "pale", _HS.hStyle = "long", _HS.waist = 1, _HS.boobs = 1000, _HS.boobsImplant = 600, _HS.areolae = 1, _HS.butt = 4, _HS.buttImplant = 2, _HS.face = 2, _HS.lips = 35, _HS.vagina = 2, _HS.anus = 1, _HS.ovaries = 1, _HS.makeup = 1, _HS.nails = 1, _HS.earPiercing = 1, _HS.vaginalSkill = 100, _HS.oralSkill = 100, _HS.analSkill = 100, _HS.whoreSkill = 100, _HS.entertainSkill = 100, _HS.clothes = "a slave gown", _HS.intelligence = 3, _HS.energy = 65, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.customTat = "'Miss Anne' is tattooed in lovely flowing script over her collarbone.", _HS.customDesc = "She speaks with the rich accent of the Old South.">>
diff --git a/src/npc/exportSlave.tw b/src/npc/exportSlave.tw
index 04739d38148..efe5743f27d 100644
--- a/src/npc/exportSlave.tw
+++ b/src/npc/exportSlave.tw
@@ -13,4 +13,4 @@
 
 <<if (ndef $activeSlave.currentRules) || ($activeSlave.currentRules.length < 1)>><<set _currentRules to "[]">><<else>><<set _currentRules to "$activeSlave.currentRules">><</if>>
 
-slaveName: "$activeSlave.slaveName", birthName: "$activeSlave.birthName", weekAcquired: 1, origin: "$activeSlave.origin", career: "$activeSlave.career", ID: $activeSlave.ID, pornFame: $activeSlave.pornFame, pornFameSpending: $activeSlave.pornFameSpending, prestige: $activeSlave.prestige, prestigeDesc: "$activeSlave.prestigeDesc", recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: _birthWeek, age: $activeSlave.age, ageImplant: $activeSlave.ageImplant, health: $activeSlave.health, minorInjury: 0, trust: $activeSlave.trust, oldTrust: $activeSlave.trust, devotion: $activeSlave.devotion, oldDevotion: $activeSlave.devotion, weight: $activeSlave.weight, muscles: $activeSlave.muscles, height: $activeSlave.height, heightImplant: $activeSlave.heightImplant, nationality: "$activeSlave.nationality", race: "$activeSlave.race", markings: "none", eyes: 1, eyeColor: "$activeSlave.eyeColor", eyewear: "none", hColor: "$activeSlave.hColor", pubicHColor: "$activeSlave.pubicHColor", skin: "$activeSlave.skin", hLength: $activeSlave.hLength, hStyle: "$activeSlave.hStyle", pubicHStyle: "$activeSlave.pubicHStyle", waist: $activeSlave.waist, corsetPiercing: 0, amp: $activeSlave.amp, heels: $activeSlave.heels, voice: $activeSlave.voice, voiceImplant: $activeSlave.voiceImplant, accent: $activeSlave.accent, shoulders: $activeSlave.shoulders, shouldersImplant: $activeSlave.shouldersImplant, boobs: $activeSlave.boobs, boobsImplant: $activeSlave.boobsImplant, boobsImplantType: $activeSlave.boobsImplantType, boobShape: "normal", nipples: "$activeSlave.nipples",  nipplesPiercing: $activeSlave.nipplesPiercing, areolae: $activeSlave.areolae, areolaePiercing: $activeSlave.areolaePiercing, boobsTat: "$activeSlave.boobsTat", lactation: $activeSlave.lactation, lactationAdaptation: 0, milk: 0, cum: 0, hips: $activeSlave.hips, hipsImplant: $activeSlave.hipsImplant, butt: $activeSlave.butt, buttImplant: $activeSlave.buttImplant, buttImplantType: $activeSlave.buttImplantType, buttTat: "$activeSlave.buttTat", face: $activeSlave.face, faceImplant: $activeSlave.faceImplant, faceShape: "normal", lips: $activeSlave.lips, lipsImplant: $activeSlave.lipsImplant, lipsPiercing: $activeSlave.lipsPiercing, lipsTat: "$activeSlave.lipsTat", teeth: "$activeSlave.teeth", tonguePiercing: $activeSlave.tonguePiercing, vagina: $activeSlave.vagina, vaginaLube: $activeSlave.vaginaLube, vaginaPiercing: $activeSlave.vaginaPiercing, vaginaTat: "$activeSlave.vaginaTat", preg: $activeSlave.preg, pregSource: 0, pregType: 0, labor: 0, births: $activeSlave.births, cSec: 0, bellyAccessory: "none", labia: $activeSlave.labia, clit: $activeSlave.clit, clitPiercing: $activeSlave.clitPiercing, clitSetting: "$activeSlave.clitSetting", foreskin: 0, anus: $activeSlave.anus, dick: $activeSlave.dick, analArea: 1, dickPiercing: $activeSlave.dickPiercing, dickTat: "$activeSlave.dickTat", balls: $activeSlave.balls, scrotum: 0, ovaries: $activeSlave.ovaries, anusPiercing: $activeSlave.anusPiercing, anusTat: "$activeSlave.anusTat", makeup: $activeSlave.makeup, nails: $activeSlave.nails, brand: "$activeSlave.brand", brandLocation: "$activeSlave.brandLocation", earPiercing: $activeSlave.earPiercing, nosePiercing: $activeSlave.nosePiercing, eyebrowPiercing: $activeSlave.eyebrowPiercing, navelPiercing: $activeSlave.navelPiercing, shouldersTat: "$activeSlave.shouldersTat", armsTat: "$activeSlave.armsTat", legsTat: "$activeSlave.legsTat", backTat: "$activeSlave.backTat", stampTat: "$activeSlave.stampTat", vaginalSkill: $activeSlave.vaginalSkill, oralSkill: $activeSlave.oralSkill, analSkill: $activeSlave.analSkill, whoreSkill: $activeSlave.whoreSkill, entertainSkill: $activeSlave.entertainSkill, combatSkill: $activeSlave.combatSkill, livingRules: "$activeSlave.livingRules", speechRules: "$activeSlave.speechRules", releaseRules: "$activeSlave.releaseRules", relationshipRules: "$activeSlave.relationshipRules", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "$activeSlave.diet", dietCum: $activeSlave.dietCum, dietMilk: $activeSlave.dietMilk, tired: 0, hormones: 0, drugs: "$activeSlave.drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: $activeSlave.addict, fuckdoll: $activeSlave.fuckdoll, choosesOwnClothes: 0, clothes: "$activeSlave.clothes", collar: "$activeSlave.collar", shoes: "$activeSlave.shoes", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: $activeSlave.intelligence,  intelligenceImplant: $activeSlave.intelligenceImplant, energy: $activeSlave.energy, attrXX: $activeSlave.attrXX, attrXY: $activeSlave.attrXY, attrKnown: $activeSlave.attrKnown, fetish: "$activeSlave.fetish", fetishStrength: $activeSlave.fetishStrength, fetishKnown: $activeSlave.fetishKnown, behavioralFlaw: "$activeSlave.behavioralFlaw", behavioralQuirk: "none", sexualFlaw: "$activeSlave.sexualFlaw", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "$activeSlave.customTat", customLabel: "", customDesc: "$activeSlave.customDesc", currentRules: _currentRules
+slaveName: "$activeSlave.slaveName", birthName: "$activeSlave.birthName", weekAcquired: 1, origin: "$activeSlave.origin", career: "$activeSlave.career", ID: $activeSlave.ID, pornFame: $activeSlave.pornFame, pornFameSpending: $activeSlave.pornFameSpending, prestige: $activeSlave.prestige, prestigeDesc: "$activeSlave.prestigeDesc", recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: _birthWeek, age: $activeSlave.age, ageImplant: $activeSlave.ageImplant, health: $activeSlave.health, minorInjury: 0, trust: $activeSlave.trust, oldTrust: $activeSlave.trust, devotion: $activeSlave.devotion, oldDevotion: $activeSlave.devotion, weight: $activeSlave.weight, muscles: $activeSlave.muscles, height: $activeSlave.height, heightImplant: $activeSlave.heightImplant, nationality: "$activeSlave.nationality", race: "$activeSlave.race", markings: "none", eyes: 1, eyeColor: "$activeSlave.eyeColor", eyewear: "none", hColor: "$activeSlave.hColor", pubicHColor: "$activeSlave.pubicHColor", skin: "$activeSlave.skin", hLength: $activeSlave.hLength, hStyle: "$activeSlave.hStyle", pubicHStyle: "$activeSlave.pubicHStyle", waist: $activeSlave.waist, corsetPiercing: 0, amp: $activeSlave.amp, heels: $activeSlave.heels, voice: $activeSlave.voice, voiceImplant: $activeSlave.voiceImplant, accent: $activeSlave.accent, shoulders: $activeSlave.shoulders, shouldersImplant: $activeSlave.shouldersImplant, boobs: $activeSlave.boobs, boobsImplant: $activeSlave.boobsImplant, boobsImplantType: $activeSlave.boobsImplantType, boobShape: "normal", nipples: "$activeSlave.nipples",  nipplesPiercing: $activeSlave.nipplesPiercing, areolae: $activeSlave.areolae, areolaePiercing: $activeSlave.areolaePiercing, boobsTat: "$activeSlave.boobsTat", lactation: $activeSlave.lactation, lactationAdaptation: 0, milk: 0, cum: 0, hips: $activeSlave.hips, hipsImplant: $activeSlave.hipsImplant, butt: $activeSlave.butt, buttImplant: $activeSlave.buttImplant, buttImplantType: $activeSlave.buttImplantType, buttTat: "$activeSlave.buttTat", face: $activeSlave.face, faceImplant: $activeSlave.faceImplant, faceShape: "normal", lips: $activeSlave.lips, lipsImplant: $activeSlave.lipsImplant, lipsPiercing: $activeSlave.lipsPiercing, lipsTat: "$activeSlave.lipsTat", teeth: "$activeSlave.teeth", tonguePiercing: $activeSlave.tonguePiercing, vagina: $activeSlave.vagina, vaginaLube: $activeSlave.vaginaLube, vaginaPiercing: $activeSlave.vaginaPiercing, vaginaTat: "$activeSlave.vaginaTat", preg: $activeSlave.preg, pregSource: 0, pregType: 0, labor: 0, births: $activeSlave.births, cSec: 0, bellyAccessory: "none", labia: $activeSlave.labia, clit: $activeSlave.clit, clitPiercing: $activeSlave.clitPiercing, clitSetting: "$activeSlave.clitSetting", foreskin: 0, anus: $activeSlave.anus, dick: $activeSlave.dick, analArea: 1, dickPiercing: $activeSlave.dickPiercing, dickTat: "$activeSlave.dickTat", balls: $activeSlave.balls, scrotum: 0, ovaries: $activeSlave.ovaries, anusPiercing: $activeSlave.anusPiercing, anusTat: "$activeSlave.anusTat", makeup: $activeSlave.makeup, nails: $activeSlave.nails, brand: "$activeSlave.brand", brandLocation: "$activeSlave.brandLocation", earPiercing: $activeSlave.earPiercing, nosePiercing: $activeSlave.nosePiercing, eyebrowPiercing: $activeSlave.eyebrowPiercing, navelPiercing: $activeSlave.navelPiercing, shouldersTat: "$activeSlave.shouldersTat", armsTat: "$activeSlave.armsTat", legsTat: "$activeSlave.legsTat", backTat: "$activeSlave.backTat", stampTat: "$activeSlave.stampTat", vaginalSkill: $activeSlave.vaginalSkill, oralSkill: $activeSlave.oralSkill, analSkill: $activeSlave.analSkill, whoreSkill: $activeSlave.whoreSkill, entertainSkill: $activeSlave.entertainSkill, combatSkill: $activeSlave.combatSkill, livingRules: "$activeSlave.livingRules", speechRules: "$activeSlave.speechRules", releaseRules: "$activeSlave.releaseRules", relationshipRules: "$activeSlave.relationshipRules", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "$activeSlave.diet", dietCum: $activeSlave.dietCum, dietMilk: $activeSlave.dietMilk, tired: 0, hormones: 0, drugs: "$activeSlave.drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: $activeSlave.addict, fuckdoll: $activeSlave.fuckdoll, choosesOwnClothes: 0, clothes: "$activeSlave.clothes", collar: "$activeSlave.collar", shoes: "$activeSlave.shoes", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: $activeSlave.intelligence,  intelligenceImplant: $activeSlave.intelligenceImplant, energy: $activeSlave.energy, attrXX: $activeSlave.attrXX, attrXY: $activeSlave.attrXY, attrKnown: $activeSlave.attrKnown, fetish: "$activeSlave.fetish", fetishStrength: $activeSlave.fetishStrength, fetishKnown: $activeSlave.fetishKnown, behavioralFlaw: "$activeSlave.behavioralFlaw", behavioralQuirk: "none", sexualFlaw: "$activeSlave.sexualFlaw", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "$activeSlave.customTat", customLabel: "", customDesc: "$activeSlave.customDesc", customImage: 0, currentRules: _currentRules
diff --git a/src/npc/fRelation.tw b/src/npc/fRelation.tw
index da23f402972..41c9e98f6cd 100644
--- a/src/npc/fRelation.tw
+++ b/src/npc/fRelation.tw
@@ -16,33 +16,21 @@
 		<</if>>
 	<</for>>
 <<elseif ($partner is "daughter")>>
-	<<set $relation = $slaves>>
-	<<set $relation = $relation.shuffle()>>
-	<<for _i to 0; _i < $relation.length; _i++>>
-		<<if $activeSlave.ID == $relation[_i].father && isAvailabe($relation[_i])>>
-			<<set $partner to $relation[_i], _activeSlaveRel to "father", _partnerRel to "daughter">>
-			<<break>>
-		<<elseif $activeSlave.ID == $relation[_i].mother && isAvailabe($relation[_i])>>
-			<<set $partner to $relation[_i], _activeSlaveRel to "mother", _partnerRel to "daughter">>
-			<<break>>
-		<</if>>
-	<</for>>
+	<<set $partner = randomAvailableParent($activeSlave)>>
+	<<if $activeSlave.ID == $partner.father>>
+		<<set _activeSlaveRel to "father", _partnerRel to "daughter">>
+	<<elseif $activeSlave.ID == $partner.mother>>
+		<<set _activeSlaveRel to "mother", _partnerRel to "daughter">>
+	<</if>>
 <<elseif ($partner is "sister")>>
-	<<set $relation = $slaves>>
-	<<set $relation = $relation.shuffle()>>
-	<<for _i to 0; _i < $relation.length; _i++>>
-		<<if areSisters($activeSlave, $relation[_i]) > 0 && isAvailabe($relation[$i])>>
-			<<set $partner to $relation[_i]>>
-			<<if areSisters($activeSlave, $partner) == 3>>
-				<<set _activeSlaveRel to "half-sister", _partnerRel to "half-sister">>
-			<<elseif areSisters($activeSlave, $partner) == 2>>
-				<<set _activeSlaveRel to "sister", _partnerRel to "sister">>
-			<<elseif areSisters($activeSlave, $partner) == 1>>
-				<<set _activeSlaveRel to "twin", _partnerRel to "twin">>
-			<</if>>
-			<<break>>
-		<</if>>
-	<</for>>
+	<<set $partner to randomAvailableSister($activeSlave)>>
+	<<if areSisters($activeSlave, $partner) == 3>>
+		<<set _activeSlaveRel to "half-sister", _partnerRel to "half-sister">>
+	<<elseif areSisters($activeSlave, $partner) == 2>>
+		<<set _activeSlaveRel to "sister", _partnerRel to "sister">>
+	<<elseif areSisters($activeSlave, $partner) == 1>>
+		<<set _activeSlaveRel to "twin", _partnerRel to "twin">>
+	<</if>>
 <<elseif ($partner is "relation")>>
 	<<for _i to 0; _i lt $slaves.length; _i++>>
 	<<if $slaves[_i].ID == $activeSlave.relationTarget>>
diff --git a/src/npc/removeActiveSlave.tw b/src/npc/removeActiveSlave.tw
index b46c05acb88..770431f7677 100644
--- a/src/npc/removeActiveSlave.tw
+++ b/src/npc/removeActiveSlave.tw
@@ -154,7 +154,6 @@
 	<</if>>
 
 	<<set $dump to $slaves.pluck([$x], [$x])>>
-	/*<<set $x -= 1>>*/
 	<<break>>
 <</if>>
 <</for>>
diff --git a/src/npc/uploadSlave.tw b/src/npc/uploadSlave.tw
index 7a5b7c112f7..df199748376 100644
--- a/src/npc/uploadSlave.tw
+++ b/src/npc/uploadSlave.tw
@@ -12,6 +12,6 @@
 <<nobr>>
 
 VERSION: $ver.<br>
-slaveName: "$activeSlave.slaveName", birthName: "$activeSlave.birthName", weekAcquired: 1, origin: <<if $activeSlave.origin == 0>>0<<else>>"$activeSlave.origin"<</if>>, career: <<if $activeSlave.career == 0>>0<<else>>"$activeSlave.career"<</if>>, ID: $activeSlave.ID, pornFame: $activeSlave.pornFame, pornFameSpending: $activeSlave.pornFameSpending, prestige: $activeSlave.prestige, prestigeDesc: "$activeSlave.prestigeDesc", recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: $activeSlave.age, ageImplant: $activeSlave.ageImplant, health: $activeSlave.health, minorInjury: 0, trust: $activeSlave.trust, oldTrust: $activeSlave.trust, devotion: $activeSlave.devotion, oldDevotion: $activeSlave.devotion, weight: $activeSlave.weight, muscles: $activeSlave.muscles, height: $activeSlave.height, heightImplant: $activeSlave.heightImplant, nationality: "$activeSlave.nationality", race: "$activeSlave.race", markings: "none", eyes: 1, eyeColor: "$activeSlave.eyeColor", eyewear: "none", hColor: "$activeSlave.hColor", pubicHColor: "$activeSlave.pubicHColor", skin: "$activeSlave.skin", hLength: $activeSlave.hLength, hStyle: "$activeSlave.hStyle", pubicHStyle: "$activeSlave.pubicHStyle", waist: $activeSlave.waist, corsetPiercing: 0, amp: $activeSlave.amp, heels: $activeSlave.heels, voice: $activeSlave.voice, voiceImplant: $activeSlave.voiceImplant, accent: $activeSlave.accent, shoulders: $activeSlave.shoulders, shouldersImplant: $activeSlave.shouldersImplant, boobs: $activeSlave.boobs, boobsImplant: $activeSlave.boobsImplant, boobsImplantType: $activeSlave.boobsImplantType, boobShape: "normal", nipples: "$activeSlave.nipples",  nipplesPiercing: $activeSlave.nipplesPiercing, areolae: $activeSlave.areolae, areolaePiercing: $activeSlave.areolaePiercing, boobsTat: "$activeSlave.boobsTat", lactation: $activeSlave.lactation, lactationAdaptation: 0, milk: 0, cum: 0, hips: $activeSlave.hips, hipsImplant: $activeSlave.hipsImplant, butt: $activeSlave.butt, buttImplant: $activeSlave.buttImplant, buttImplantType: $activeSlave.buttImplantType, buttTat: "$activeSlave.buttTat", face: $activeSlave.face, faceImplant: $activeSlave.faceImplant, faceShape: "normal", lips: $activeSlave.lips, lipsImplant: $activeSlave.lipsImplant, lipsPiercing: $activeSlave.lipsPiercing, lipsTat: "$activeSlave.lipsTat", teeth: "$activeSlave.teeth", tonguePiercing: $activeSlave.tonguePiercing, vagina: $activeSlave.vagina, vaginaLube: $activeSlave.vaginaLube, vaginaPiercing: $activeSlave.vaginaPiercing, vaginaTat: "$activeSlave.vaginaTat", preg: $activeSlave.preg, pregSource: 0, pregType: 0, labor: 0, births: $activeSlave.births, cSec: 0, bellyAccessory: "none", labia: $activeSlave.labia, clit: $activeSlave.clit, clitPiercing: $activeSlave.clitPiercing, clitSetting: "$activeSlave.clitSetting", foreskin: 0, anus: $activeSlave.anus, dick: $activeSlave.dick, analArea: 1, dickPiercing: $activeSlave.dickPiercing, dickTat: "$activeSlave.dickTat", balls: $activeSlave.balls, scrotum: 0, ovaries: $activeSlave.ovaries, anusPiercing: $activeSlave.anusPiercing, anusTat: "$activeSlave.anusTat", makeup: $activeSlave.makeup, nails: $activeSlave.nails, brand: <<if $activeSlave.brand == 0>>0<<else>>"$activeSlave.brand "<</if>>, brandLocation: <<if $activeSlave.brandLocation == 0>>0<<else>>"$activeSlave.brandLocation"<</if>>, earPiercing: $activeSlave.earPiercing, nosePiercing: $activeSlave.nosePiercing, eyebrowPiercing: $activeSlave.eyebrowPiercing, navelPiercing: $activeSlave.navelPiercing, shouldersTat: "$activeSlave.shouldersTat", armsTat: "$activeSlave.armsTat", legsTat: "$activeSlave.legsTat", backTat: "$activeSlave.backTat", stampTat: "$activeSlave.stampTat", vaginalSkill: $activeSlave.vaginalSkill, oralSkill: $activeSlave.oralSkill, analSkill: $activeSlave.analSkill, whoreSkill: $activeSlave.whoreSkill, entertainSkill: $activeSlave.entertainSkill, combatSkill: $activeSlave.combatSkill, livingRules: "$activeSlave.livingRules", speechRules: "$activeSlave.speechRules", releaseRules: "$activeSlave.releaseRules", relationshipRules: "$activeSlave.relationshipRules", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "$activeSlave.diet", dietCum: $activeSlave.dietCum, dietMilk: $activeSlave.dietMilk, tired: 0, hormones: 0, drugs: "$activeSlave.drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: $activeSlave.addict, fuckdoll: 0, choosesOwnClothes: 0, clothes: "$activeSlave.clothes", collar: "$activeSlave.collar", shoes: "$activeSlave.shoes", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: $activeSlave.intelligence,  intelligenceImplant: $activeSlave.intelligenceImplant, energy: $activeSlave.energy, attrXX: $activeSlave.attrXX, attrXY: $activeSlave.attrXY, attrKnown: $activeSlave.attrKnown, fetish: "$activeSlave.fetish", fetishStrength: $activeSlave.fetishStrength, fetishKnown: $activeSlave.fetishKnown, behavioralFlaw: "$activeSlave.behavioralFlaw", behavioralQuirk: "none", sexualFlaw: "$activeSlave.sexualFlaw", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "$activeSlave.customTat", customLabel: "", customDesc: "$activeSlave.customDesc", currentRules: $activeSlave.currentRules
+slaveName: "$activeSlave.slaveName", birthName: "$activeSlave.birthName", weekAcquired: 1, origin: <<if $activeSlave.origin == 0>>0<<else>>"$activeSlave.origin"<</if>>, career: <<if $activeSlave.career == 0>>0<<else>>"$activeSlave.career"<</if>>, ID: $activeSlave.ID, pornFame: $activeSlave.pornFame, pornFameSpending: $activeSlave.pornFameSpending, prestige: $activeSlave.prestige, prestigeDesc: "$activeSlave.prestigeDesc", recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: $activeSlave.age, ageImplant: $activeSlave.ageImplant, health: $activeSlave.health, minorInjury: 0, trust: $activeSlave.trust, oldTrust: $activeSlave.trust, devotion: $activeSlave.devotion, oldDevotion: $activeSlave.devotion, weight: $activeSlave.weight, muscles: $activeSlave.muscles, height: $activeSlave.height, heightImplant: $activeSlave.heightImplant, nationality: "$activeSlave.nationality", race: "$activeSlave.race", markings: "none", eyes: 1, eyeColor: "$activeSlave.eyeColor", eyewear: "none", hColor: "$activeSlave.hColor", pubicHColor: "$activeSlave.pubicHColor", skin: "$activeSlave.skin", hLength: $activeSlave.hLength, hStyle: "$activeSlave.hStyle", pubicHStyle: "$activeSlave.pubicHStyle", waist: $activeSlave.waist, corsetPiercing: 0, amp: $activeSlave.amp, heels: $activeSlave.heels, voice: $activeSlave.voice, voiceImplant: $activeSlave.voiceImplant, accent: $activeSlave.accent, shoulders: $activeSlave.shoulders, shouldersImplant: $activeSlave.shouldersImplant, boobs: $activeSlave.boobs, boobsImplant: $activeSlave.boobsImplant, boobsImplantType: $activeSlave.boobsImplantType, boobShape: "normal", nipples: "$activeSlave.nipples",  nipplesPiercing: $activeSlave.nipplesPiercing, areolae: $activeSlave.areolae, areolaePiercing: $activeSlave.areolaePiercing, boobsTat: "$activeSlave.boobsTat", lactation: $activeSlave.lactation, lactationAdaptation: 0, milk: 0, cum: 0, hips: $activeSlave.hips, hipsImplant: $activeSlave.hipsImplant, butt: $activeSlave.butt, buttImplant: $activeSlave.buttImplant, buttImplantType: $activeSlave.buttImplantType, buttTat: "$activeSlave.buttTat", face: $activeSlave.face, faceImplant: $activeSlave.faceImplant, faceShape: "normal", lips: $activeSlave.lips, lipsImplant: $activeSlave.lipsImplant, lipsPiercing: $activeSlave.lipsPiercing, lipsTat: "$activeSlave.lipsTat", teeth: "$activeSlave.teeth", tonguePiercing: $activeSlave.tonguePiercing, vagina: $activeSlave.vagina, vaginaLube: $activeSlave.vaginaLube, vaginaPiercing: $activeSlave.vaginaPiercing, vaginaTat: "$activeSlave.vaginaTat", preg: $activeSlave.preg, pregSource: 0, pregType: 0, labor: 0, births: $activeSlave.births, cSec: 0, bellyAccessory: "none", labia: $activeSlave.labia, clit: $activeSlave.clit, clitPiercing: $activeSlave.clitPiercing, clitSetting: "$activeSlave.clitSetting", foreskin: 0, anus: $activeSlave.anus, dick: $activeSlave.dick, analArea: 1, dickPiercing: $activeSlave.dickPiercing, dickTat: "$activeSlave.dickTat", balls: $activeSlave.balls, scrotum: 0, ovaries: $activeSlave.ovaries, anusPiercing: $activeSlave.anusPiercing, anusTat: "$activeSlave.anusTat", makeup: $activeSlave.makeup, nails: $activeSlave.nails, brand: <<if $activeSlave.brand == 0>>0<<else>>"$activeSlave.brand "<</if>>, brandLocation: <<if $activeSlave.brandLocation == 0>>0<<else>>"$activeSlave.brandLocation"<</if>>, earPiercing: $activeSlave.earPiercing, nosePiercing: $activeSlave.nosePiercing, eyebrowPiercing: $activeSlave.eyebrowPiercing, navelPiercing: $activeSlave.navelPiercing, shouldersTat: "$activeSlave.shouldersTat", armsTat: "$activeSlave.armsTat", legsTat: "$activeSlave.legsTat", backTat: "$activeSlave.backTat", stampTat: "$activeSlave.stampTat", vaginalSkill: $activeSlave.vaginalSkill, oralSkill: $activeSlave.oralSkill, analSkill: $activeSlave.analSkill, whoreSkill: $activeSlave.whoreSkill, entertainSkill: $activeSlave.entertainSkill, combatSkill: $activeSlave.combatSkill, livingRules: "$activeSlave.livingRules", speechRules: "$activeSlave.speechRules", releaseRules: "$activeSlave.releaseRules", relationshipRules: "$activeSlave.relationshipRules", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "$activeSlave.diet", dietCum: $activeSlave.dietCum, dietMilk: $activeSlave.dietMilk, tired: 0, hormones: 0, drugs: "$activeSlave.drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: $activeSlave.addict, fuckdoll: 0, choosesOwnClothes: 0, clothes: "$activeSlave.clothes", collar: "$activeSlave.collar", shoes: "$activeSlave.shoes", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: $activeSlave.intelligence,  intelligenceImplant: $activeSlave.intelligenceImplant, energy: $activeSlave.energy, attrXX: $activeSlave.attrXX, attrXY: $activeSlave.attrXY, attrKnown: $activeSlave.attrKnown, fetish: "$activeSlave.fetish", fetishStrength: $activeSlave.fetishStrength, fetishKnown: $activeSlave.fetishKnown, behavioralFlaw: "$activeSlave.behavioralFlaw", behavioralQuirk: "none", sexualFlaw: "$activeSlave.sexualFlaw", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "$activeSlave.customTat", customLabel: "", customDesc: "$activeSlave.customDesc", customImage: 0, currentRules: $activeSlave.currentRules
 
 <</nobr>>
\ No newline at end of file
diff --git a/src/pregmod/generateChild.tw b/src/pregmod/generateChild.tw
index b597769d47c..47f86076ac4 100644
--- a/src/pregmod/generateChild.tw
+++ b/src/pregmod/generateChild.tw
@@ -1,12 +1,348 @@
-:: generateChild
+:: generateChild [nobr]
+
+<<if $mom != 0>>
+	<<set $mergeMom = 0>>
+	<<set $mergeDad = 0>>
+	<<for $m to 0; $m < $genePool.length; $m++>>
+		<<if $mom.ID == $genePool[$m].ID>>
+			<<set $mergeMom = $genePool[$m]>>
+		<</if>>
+		<<if $mom.pregSource == $genePool[$m].ID>>
+			<<set $mergeDad = $genePool[$m].ID>>
+		<</if>>
+	<</for>>
+	<<if $mom.pregSource == -1>>
+		<<set $mergeDad = $PC>>
+	<</if>>
+<</if>>
+		
+<<set $activeSlaveOneTimeMinAge to $targetAge>>
+<<set $activeSlaveOneTimeMaxAge to $targetAge>>
+<<set $one_time_age_overrides_pedo_mode to 1>>
 
 <<if $babyGender == 1>>
+	<<display "Generate XX Slave">>
 	<<if $PC.pregSource < 1>>
+		<<set $activeSlave.mother = -1>>
+		<<set $activeSlave.father = $missingParentID>>
+		<<set $missingParentID-->>
+		<<set $activeSlave.nationality = "Stateless">>
+		<<set $activeSlave.race = $PC.race>>
+		<<set $activeSlave.skin = $PC.skin>>
+		<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<set $activeSlave.hColor = $PC.hColor>>
+		<<set $activeSlave.pubicHColor = $PC.hColor>>
+		<<set $activeSlave.underArmHColor = $PC.hColor>>
 	<<else>>
+		<<for $m to 0; $m < $genePool.length; $m++>>
+			<<if $PC.pregSource == $genePool[$m].ID>>
+				<<set $mergeDad == $genePool[$m].ID>>
+				<<break>>
+			<</if>>
+		<</for>>
+		<<set $activeSlave.mother = -1>>
+		<<set $activeSlave.father = $mergeDad.ID>>
+		<<if $PC.nationality == $mergeDad.nationality>>
+			<<set $activeSlave.nationality = $mergeDad.nationality>>
+		<<else>>
+			<<set $activeSlave.nationality = "Stateless">>
+		<</if>>
+		<<if $PC.race == $mergeDad.race>>
+			<<set $activeSlave.race = $mergeDad.race>>
+		<<elseif random(1,4) == 4>>
+			<<set $activeSlave.race = either($PC.race, $mergeDad.race)>>
+		<<else>>
+			<<set $activeSlave.race = "mixed race">>
+		<</if>>
+		<<if $PC.skin == $mergeDad.skin>>
+			<<set $activeSlave.skin = $PC.skin>>
+		<<else>>
+			<<genSkinTone $PC, $mergeDad>>
+		<</if>>
+		<<if $PC.eyeColor == $mergeDad.eyeColor>>
+			<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<elseif $PC.eyeColor == "red" || $PC.eyeColor == "pale red" || $PC.eyeColor == "light red" || $PC.eyeColor == "pale gray">>
+			<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+		<<elseif $mergeDad.eyeColor == "red" || $mergeDad.eyeColor == "pale red" || $mergeDad.eyeColor == "light red" || $mergeDad.eyeColor == "pale gray" || $mergeDad.eyeColor == "milky white">>
+			<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<elseif $PC.eyeColor == "blue">>
+			<<if random(1,4) == 2>>
+				<<set $activeSlave.eyeColor = $PC.eyeColor>>
+			<<else>>
+				<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+			<</if>>
+		<<elseif $mergeDad.eyeColor == "blue">>
+			<<if random(1,4) == 2>>
+				<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+			<<else>>
+				<<set $activeSlave.eyeColor = $PC.eyeColor>>
+			<</if>>
+		<<else>>
+			<<set $activeSlave.eyeColor = either($PC.eyeColor, $mergeDad.eyeColor)>>
+		<</if>>
+		<<if $PC.hColor == $mergeDad.hColor>>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $PC.hColor == "black">>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $mergeDad.hColor == "black">>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<<elseif $PC.hColor == "brown">>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $mergeDad.hColor == "brown">>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<<elseif $PC.hColor == "white">>
+			<<if random(1,100) == 69>>
+				<<set $activeSlave.hColor = $PC.hColor>>
+			<<else>>
+				<<set $activeSlave.hColor = $mergeDad.hColor>>
+			<</if>>
+		<<elseif $mergeDad.hColor == "white">>
+			<<if random(1,100) == 69>>
+				<<set $activeSlave.hColor = $PC.hColor>>
+			<<else>>
+				<<set $activeSlave.hColor = $mergeDad.hColor>>
+			<</if>>
+		<<else>>
+			<<set $activeSlave.hColor = either($PC.hColor, $mergeDad.hColor)>>
+		<</if>>
+		<<set $activeSlave.pubicHColor = $activeSlave.hColor>>
+		<<set $activeSlave.underArmHColor = $activeSlave.hColor>>
 	<</if>>
 <<elseif $babyGender == 2>>
+	<<display "Generate XY Slave">>
 	<<if $PC.pregSource < 1>>
+		<<set $activeSlave.mother = -1>>
+		<<set $activeSlave.father = $missingParentID>>
+		<<set $missingParentID-->>
+		<<set $activeSlave.nationality = "Stateless">>
+		<<set $activeSlave.race = $PC.race>>
+		<<set $activeSlave.skin = $PC.skin>>
+		<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<set $activeSlave.hColor = $PC.hColor>>
+		<<set $activeSlave.pubicHColor = $PC.hColor>>
+		<<set $activeSlave.underArmHColor = $PC.hColor>>
 	<<else>>
+		<<for $m to 0; $m < $genePool.length; $m++>>
+			<<if $PC.pregSource == $genePool[$m].ID>>
+				<<set $mergeDad == $genePool[$m].ID>>
+				<<break>>
+			<</if>>
+		<</for>>
+		<<set $activeSlave.mother = -1>>
+		<<set $activeSlave.father = $mergeDad.ID>>
+		<<if $PC.nationality == $mergeDad.nationality>>
+			<<set $activeSlave.nationality = $mergeDad.nationality>>
+		<<else>>
+			<<set $activeSlave.nationality = "Stateless">>
+		<</if>>
+		<<if $PC.race == $mergeDad.race>>
+			<<set $activeSlave.race = $mergeDad.race>>
+		<<elseif random(1,4) == 4>>
+			<<set $activeSlave.race = either($PC.race, $mergeDad.race)>>
+		<<else>>
+			<<set $activeSlave.race = "mixed race">>
+		<</if>>
+		<<if $PC.skin == $mergeDad.skin>>
+			<<set $activeSlave.skin = $PC.skin>>
+		<<else>>
+			<<genSkinTone $PC, $mergeDad>>
+		<</if>>
+		<<if $PC.eyeColor == $mergeDad.eyeColor>>
+			<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<elseif $PC.eyeColor == "red" || $PC.eyeColor == "pale red" || $PC.eyeColor == "light red" || $PC.eyeColor == "pale gray">>
+			<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+		<<elseif $mergeDad.eyeColor == "red" || $mergeDad.eyeColor == "pale red" || $mergeDad.eyeColor == "light red" || $mergeDad.eyeColor == "pale gray" || $mergeDad.eyeColor == "milky white">>
+			<<set $activeSlave.eyeColor = $PC.eyeColor>>
+		<<elseif $PC.eyeColor == "blue">>
+			<<if random(1,4) == 2>>
+				<<set $activeSlave.eyeColor = $PC.eyeColor>>
+			<<else>>
+				<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+			<</if>>
+		<<elseif $mergeDad.eyeColor == "blue">>
+			<<if random(1,4) == 2>>
+				<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+			<<else>>
+				<<set $activeSlave.eyeColor = $PC.eyeColor>>
+			<</if>>
+		<<else>>
+			<<set $activeSlave.eyeColor = either($PC.eyeColor, $mergeDad.eyeColor)>>
+		<</if>>
+		<<if $PC.hColor == $mergeDad.hColor>>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $PC.hColor == "black">>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $mergeDad.hColor == "black">>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<<elseif $PC.hColor == "brown">>
+			<<set $activeSlave.hColor = $PC.hColor>>
+		<<elseif $mergeDad.hColor == "brown">>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<<elseif $PC.hColor == "white">>
+			<<if random(1,100) == 69>>
+				<<set $activeSlave.hColor = $PC.hColor>>
+			<<else>>
+				<<set $activeSlave.hColor = $mergeDad.hColor>>
+			<</if>>
+		<<elseif $mergeDad.hColor == "white">>
+			<<if random(1,100) == 69>>
+				<<set $activeSlave.hColor = $PC.hColor>>
+			<<else>>
+				<<set $activeSlave.hColor = $mergeDad.hColor>>
+			<</if>>
+		<<else>>
+			<<set $activeSlave.hColor = either($PC.hColor, $mergeDad.hColor)>>
+		<</if>>
+		<<set $activeSlave.pubicHColor = $activeSlave.hColor>>
+		<<set $activeSlave.underArmHColor = $activeSlave.hColor>>
 	<</if>>
 <<else>>
-<</if>>
\ No newline at end of file
+	<<if $seeDicks == 100>>
+		<<display "Generate XY Slave">>
+	<<elseif $seeDicks == 0>>
+		<<display "Generate XX Slave">>
+	<<else>>
+		<<if random(0,100) >= 40>>
+			<<display "Generate XX Slave">>
+		<<else>>
+			<<display "Generate XY Slave">>
+		<</if>>
+	<</if>>
+	<<set $activeSlave.mother = $mergeMom.ID>>
+	<<if $mergeDad != 0>>
+		<<set $activeSlave.father = $mergeDad.ID>>
+	<<elseif $mergeMom.pregSource == -1>>
+		<<set $activeSlave.father = -1>>
+	<<else>>
+		<<set $activeSlave.father = $missingParentID>>
+		<<set $missingParentID-->>
+	<</if>>
+	<<if $mergeMom.nationality == $mergeDad.nationality>>
+		<<set $activeSlave.nationality = $mergeDad.nationality>>
+	<<else>>
+		<<set $activeSlave.nationality = "Stateless">>
+	<</if>>
+	<<if $mergeMom.race == $mergeDad.race>>
+		<<set $activeSlave.race = $mergeDad.race>>
+	<<elseif random(1,4) == 4>>
+		<<set $activeSlave.race = either($mergeMom.race, $mergeDad.race)>>
+	<<else>>
+		<<set $activeSlave.race = "mixed race">>
+	<</if>>
+	<<if $mergeMom.skin == $mergeDad.skin>>
+		<<set $activeSlave.skin = $mergeMom.skin>>
+	<<else>>
+		<<genSkinTone $mergeMom, $mergeDad>>
+	<</if>>
+	<<if $mergeMom.eyeColor == $mergeDad.eyeColor>>
+		<<set $activeSlave.eyeColor = $mergeMom.eyeColor>>
+	<<elseif $mergeMom.eyeColor == "red" || $mergeMom.eyeColor == "pale red" || $mergeMom.eyeColor == "light red" || $mergeMom.eyeColor == "pale gray" || $mergeMom.eyeColor == "milky white">>
+		<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+	<<elseif $mergeDad.eyeColor == "red" || $mergeDad.eyeColor == "pale red" || $mergeDad.eyeColor == "light red" || $mergeDad.eyeColor == "pale gray" || $mergeDad.eyeColor == "milky white">>
+		<<set $activeSlave.eyeColor = $mergeMom.eyeColor>>
+	<<elseif $mergeMom.eyeColor == "blue">>
+		<<if random(1,4) == 2>>
+			<<set $activeSlave.eyeColor = $mergeMom.eyeColor>>
+		<<else>>
+			<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+		<</if>>
+	<<elseif $mergeDad.eyeColor == "blue">>
+		<<if random(1,4) == 2>>
+			<<set $activeSlave.eyeColor = $mergeDad.eyeColor>>
+		<<else>>
+			<<set $activeSlave.eyeColor = $mergeMom.eyeColor>>
+		<</if>>
+	<<else>>
+		<<set $activeSlave.eyeColor = either($mergeMom.eyeColor, $mergeDad.eyeColor)>>
+	<</if>>
+	<<if $mergeMom.hColor == $mergeDad.hColor>>
+		<<set $activeSlave.hColor = $mergeMom.hColor>>
+	<<elseif $mergeMom.hColor == "black">>
+		<<set $activeSlave.hColor = $mergeMom.hColor>>
+	<<elseif $mergeDad.hColor == "black">>
+		<<set $activeSlave.hColor = $mergeDad.hColor>>
+	<<elseif $mergeMom.hColor == "brown">>
+		<<set $activeSlave.hColor = $mergeMom.hColor>>
+	<<elseif $mergeDad.hColor == "brown">>
+		<<set $activeSlave.hColor = $mergeDad.hColor>>
+	<<elseif $mergeMom.hColor == "white">>
+		<<if random(1,100) == 69>>
+			<<set $activeSlave.hColor = $mergeMom.hColor>>
+		<<else>>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<</if>>
+	<<elseif $mergeDad.hColor == "white">>
+		<<if random(1,100) == 69>>
+			<<set $activeSlave.hColor = $mergeDad.hColor>>
+		<<else>>
+			<<set $activeSlave.hColor = $mergeMom.hColor>>
+		<</if>>
+	<<else>>
+		<<set $activeSlave.hColor = either($mergeMom.hColor, $mergeDad.hColor)>>
+	<</if>>
+	<<set $activeSlave.pubicHColor = $activeSlave.hColor>>
+	<<set $activeSlave.underArmHColor = $activeSlave.hColor>>
+<</if>>
+
+<<if $mom.addict > 0>>
+	<<set $activeSlave.addict = Math.trunc($mom.addict/2)
+<</if>>
+
+<<set $activeSlave.actualAge = 0>>
+<<set $activeSlave.weight = -100>>
+<<set $activeSlave.muscles = -100>>
+<<set $activeSlave.boobs = 0>>
+<<set $activeSlave.butt = 0>>
+<<set $activeSlave.energy = 0>>
+<<set $activeSlave.anus = 0>>
+<<set $activeSlave.chem = 990>>
+<<if $activeSlave.vagina > -1>>
+	<<set $activeSlave.vagina = 0>>
+<</if>>
+<<if $activeSlave.dick > 0>>
+	<<set $activeSlave.foreskin = 1>>
+	<<set $activeSlave.balls = 1>>
+	<<set $activeSlave.scrotom = 1>>
+<</if>>
+
+<<set $activeSlave.corsetPiercing = 0>>
+<<set $activeSlave.boobsImplant = 0>>
+<<set $activeSlave.boobsImplantType = 0>>
+<<set $activeSlave.nipplesPiercing = 0>>
+<<set $activeSlave.areolaePiercing = 0>>
+<<set $activeSlave.lactation = 0>>
+<<set $activeSlave.hipsImplant = 0>>
+<<set $activeSlave.buttImplant = 0>>
+<<set $activeSlave.buttImplantType = 0>>
+<<set $activeSlave.lipsImplants = 0>>
+<<set $activeSlave.lipsPiercing = 0>>
+<<set $activeSlave.tonguePiercing = 0>>
+<<set $activeSlave.vaginaPiercing = 0>>
+<<set $activeSlave.preg = 0>>
+<<set $activeSlave.clitPiercing = 0>>
+<<set $activeSlave.dickPiercing = 0>>
+<<set $activeSlave.makeup = 0>>
+<<set $activeSlave.nails = 0>>
+<<set $activeSlave.earPiercing = 0>>
+<<set $activeSlave.nosePiercing = 0>>
+<<set $activeSlave.eyebrowPiercing = 0>>
+<<set $activeSlave.stampTat = 0>>
+<<set $activeSlave.bellyTat = 0>>
+<<set $activeSlave.anusPiercing = 0>>
+<<set $activeSlave.anusTat = 0>>
+<<set $activeSlave.shouldersTat = 0>>
+<<set $activeSlave.armsTat = 0>>
+<<set $activeSlave.legsTat = 0>>
+<<set $activeSlave.backTat = 0>>
+<<set $activeSlave.combatSkill = 0>>
+<<set $activeSlave.whoreSkill = 0>>
+<<set $activeSlave.entertainSkill = 0>>
+<<set $activeSlave.oralSkill = 0>>
+<<set $activeSlave.analSkill = 0>>
+<<set $activeSlave.vaginalSkill = 0>>
+<<set $activeSlave.accent = 3>>
+
+<<set $targetAge = 0>>
+<<set $mergeMom = 0>>
+<<set $mergeDad = 0>>
+<<set $mom = 0>>
diff --git a/src/pregmod/pregmodWidgets.tw b/src/pregmod/pregmodWidgets.tw
index f52e0f459c3..5fcde86e88b 100644
--- a/src/pregmod/pregmodWidgets.tw
+++ b/src/pregmod/pregmodWidgets.tw
@@ -778,4 +778,103 @@ $activeSlave.slaveName is up for review:
 	at her side.
 <</if>>
 	
-<</widget>>
\ No newline at end of file
+<</widget>>
+
+<<widget "GenSkinTone">>
+
+/*
+black 5
+brown 4
+dark 3
+olive 2
+light brown 1
+null 0
+light -1
+white -2
+fair -3
+pale -4
+extremely pale -5
+*/
+
+<<set _skin = 0>>
+<<set _skin0 = 0>>
+<<set _skin1 = 0>>
+
+<<switch $args[0].skin>>
+<<case "black">>
+	<<set _skin0 = 10>>
+<<case "brown">>
+	<<set _skin0 = 9>>
+<<case "dark">>
+	<<set _skin0 = 8>>
+<<case "olive">>
+	<<set _skin0 = 7>>
+<<case "light brown">>
+	<<set _skin0 = 6>>
+<<case "light">>
+	<<set _skin0 = 4>>
+<<case "white">>
+	<<set _skin0 = 3>>
+<<case "fair">>
+	<<set _skin0 = 2>>
+<<case "pale">>
+	<<set _skin0 = 1>>
+<<case "extremely pale">>
+	<<set _skin0 = 0>>
+<<default>>
+	<<set _skin0 = 5>>
+<</switch>>
+
+<<switch $args[1].skin>>
+<<case "black">>
+	<<set _skin1 = 10>>
+<<case "brown">>
+	<<set _skin1 = 9>>
+<<case "dark">>
+	<<set _skin1 = 8>>
+<<case "olive">>
+	<<set _skin1 = 7>>
+<<case "light brown">>
+	<<set _skin1 = 6>>
+<<case "light">>
+	<<set _skin1 = 4>>
+<<case "white">>
+	<<set _skin1 = 3>>
+<<case "fair">>
+	<<set _skin1 = 2>>
+<<case "pale">>
+	<<set _skin1 = 1>>
+<<case "extremely pale">>
+	<<set _skin1 = 0>>
+<<default>>
+	<<set _skin1 = 5>>
+<</switch>>
+
+<<set _skin = Math.round((_skin1+_skin0)/2)>>
+
+<<switch _skin>>
+<<case 10>>
+	<<set $activeSlave.skin = "black">>
+<<case 9>>
+	<<set $activeSlave.skin = "brown">>
+<<case 8>>
+	<<set $activeSlave.skin = "dark">>
+<<case 7>>
+	<<set $activeSlave.skin = "olive">>
+<<case 6>>
+	<<set $activeSlave.skin = "light brown">>
+<<case 4>>
+	<<set $activeSlave.skin = "light">>
+<<case 3>>
+	<<set $activeSlave.skin = "white">>
+<<case 2>>
+	<<set $activeSlave.skin = "fair">>
+<<case 1>>
+	<<set $activeSlave.skin = "pale">>
+<<case 0>>
+	<<set _skin1 = "extremely pale">>
+<<default>>
+	<<set $activeSlave.skin = either($args[0].skin, $args[1].skin)>>
+<</switch>>
+
+<</widget>>
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index af352d08543..4367e364639 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -6736,7 +6736,7 @@ She's obviously @@color:mediumaquamarine;becoming more comfortable@@ playing the
 <<click "Enjoy some oral with your refreshments">>
 	<<replace "#name">>$activeSlave.slaveName<</replace>>
 	<<replace "#result">>
-	There were many things about being an arcology owner you didn't properly understand before you became one. One of the smallest and yet most enjoyable is the unlimited availability of <<if $PC.refreshmentType == 0>>a good$PC.refreshmentType<<elseif $PC.refreshmentType == 1>>a glass of $PC.refreshment<<elseif $PC.refreshmentType == 2>>a plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>$PC.refreshment<<else>>a syringe of $PC.refreshment<</if>> and <<if $PC.dick == 1>>a blowjob<<if $PC.vagina == 1>> and <</if>><</if>><<if $PC.vagina == 1>>some cunnilingus<</if>>. Turning to $activeSlave.slaveName, you <<if $PC.refreshmentType == 0>>select a $PC.refreshment<<elseif $PC.refreshmentType == 1>>pour yourself some $PC.refreshment<<elseif $PC.refreshmentType == 2>>serve yourself a plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>prepare a line of $PC.refreshment<<else>>select a syringe of $PC.refreshment<</if>>, relieve the slave of the tray, and <<if !canSee($activeSlave)>>audibly <</if>>widen your legs slightly in your chair. She <<if $activeSlave.preg > 20>>gently lowers her pregnant body to its<<else>>immediately drops to her<</if>> knees and gets to work, <<if $activeSlave.oralSkill >= 100>>using all of her mastery at giving oral pleasure<<elseif $activeSlave.oralSkill > 60>>using all of her skills at in oral pleasure<<else>>doing her best despite her mediocre oral skills<</if>>.<<if $activeSlave.teeth > 2>> You can feel the extreme care she has to take to keep her sharklike teeth clear of you.<<elseif $activeSlave.lips > 40>> Her huge lips are soft and pillowy against you.<<elseif ($activeSlave.teeth is "straightening braces") || ($activeSlave.teeth is "cosmetic braces")>>	You can feel the slight hesitations as she takes care to keep her braces off you.<</if>> You take your time, <<if $PC.refreshmentType == 0>>smoking meditatively<<elseif $PC.refreshmentType == 1>>taking meditative sips<<elseif $PC.refreshmentType == 2>>taking meditative bites<<elseif $PC.refreshmentType == 3>>enjoying your $PC.refreshment high<<else>>injecting a fix into your arm<</if>> and running a thoughtful hand <<if $activeSlave.hLength > 1>>through $activeSlave.slaveName's $activeSlave.hColor hair<<else>>across $activeSlave.slaveName's scalp<</if>> while you look at the view out your office windows. This isn't the first time you've done this, nor will it be the last, and $activeSlave.slaveName is @@color:hotpink;used to being used as a serving girl.@@
+	There were many things about being an arcology owner you didn't properly understand before you became one. One of the smallest and yet most enjoyable is the unlimited availability of <<if $PC.refreshmentType == 0>>a good $PC.refreshment<<elseif $PC.refreshmentType == 1>>a glass of $PC.refreshment<<elseif $PC.refreshmentType == 2>>a plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>$PC.refreshment<<else>>a syringe of $PC.refreshment<</if>> and <<if $PC.dick == 1>>a blowjob<<if $PC.vagina == 1>> and <</if>><</if>><<if $PC.vagina == 1>>some cunnilingus<</if>>. Turning to $activeSlave.slaveName, you <<if $PC.refreshmentType == 0>>select a $PC.refreshmentType<<elseif $PC.refreshmentType == 1>>pour yourself some $PC.refreshment<<elseif $PC.refreshmentType == 2>>serve yourself a plate of $PC.refreshment<<elseif $PC.refreshmentType == 3>>prepare a line of $PC.refreshment<<else>>select a syringe of $PC.refreshment<</if>>, relieve the slave of the tray, and <<if !canSee($activeSlave)>>audibly <</if>>widen your legs slightly in your chair. She <<if $activeSlave.preg > 20>>gently lowers her pregnant body to its<<else>>immediately drops to her<</if>> knees and gets to work, <<if $activeSlave.oralSkill >= 100>>using all of her mastery at giving oral pleasure<<elseif $activeSlave.oralSkill > 60>>using all of her skills at in oral pleasure<<else>>doing her best despite her mediocre oral skills<</if>>.<<if $activeSlave.teeth > 2>> You can feel the extreme care she has to take to keep her sharklike teeth clear of you.<<elseif $activeSlave.lips > 40>> Her huge lips are soft and pillowy against you.<<elseif ($activeSlave.teeth is "straightening braces") || ($activeSlave.teeth is "cosmetic braces")>>	You can feel the slight hesitations as she takes care to keep her braces off you.<</if>> You take your time, <<if $PC.refreshmentType == 0>>smoking meditatively<<elseif $PC.refreshmentType == 1>>taking meditative sips<<elseif $PC.refreshmentType == 2>>taking meditative bites<<elseif $PC.refreshmentType == 3>>enjoying your $PC.refreshment high<<else>>injecting a fix into your arm<</if>> and running a thoughtful hand <<if $activeSlave.hLength > 1>>through $activeSlave.slaveName's $activeSlave.hColor hair<<else>>across $activeSlave.slaveName's scalp<</if>> while you look at the view out your office windows. This isn't the first time you've done this, nor will it be the last, and $activeSlave.slaveName is @@color:hotpink;used to being used as a serving girl.@@
 	<<set $activeSlave.devotion += 4>>
 	<<set $activeSlave.oralCount += 1>>
 	<<set $oralTotal += 1>>
diff --git a/src/uncategorized/addCustomDescriptors.tw b/src/uncategorized/addCustomDescriptors.tw
index ff85c8d64b8..f93f8c53ff8 100644
--- a/src/uncategorized/addCustomDescriptors.tw
+++ b/src/uncategorized/addCustomDescriptors.tw
@@ -1,18 +1,10 @@
-:: Add custom descriptors
- 
-<<nobr>>
+:: Add custom descriptors [nobr]
 
-<<set $nextButton to "Continue">>
-<<set $nextLink to "AS Dump">>
-<<set $returnTo to "Main">>
+<<set $nextButton to "Continue", $nextLink to "AS Dump", $returnTo to "Main">>
 
 <<set $oldName to $activeSlave.slaveName>>
-
-<</nobr>>\
-\
 You may enter custom descriptors for your slave's hair color, hair style, tattoos, or anything else here. After typing, press enter to commit your change. These custom descriptors will appear in descriptions of your slave, but will have no gameplay effect. Changing them is free.
-
-<<nobr>>
+<br><br>
 
 <<if (($activeSlave.devotion >= -50) || ($activeSlave.trust < -20)) && ($activeSlave.birthName != $activeSlave.slaveName)>>
 	Rename her (birth name was $activeSlave.birthName): <<textbox "$activeSlave.slaveName" $activeSlave.slaveName "Rename">>
@@ -59,20 +51,34 @@ You may enter custom descriptors for your slave's hair color, hair style, tattoo
 	//You must break her will further before you can successfully force a new name on her.//
 <</if>>
 
-<</nobr>>
-
+<br><br>
 Her hair is $activeSlave.hStyle.
 Custom hair description: <<textbox "$activeSlave.hStyle" $activeSlave.hStyle "Add custom descriptors">>
-//For best results, use a short, uncapitalized and unpunctuated description; for example: 'back in a ponytail'//
+<br>&nbsp;&nbsp;&nbsp;&nbsp;//For best results, use a short, uncapitalized and unpunctuated description; for example: 'back in a ponytail'//
 
+<br><br>
 Her hair is $activeSlave.hColor in color.
 Custom hair color: <<textbox "$activeSlave.hColor" $activeSlave.hColor "Add custom descriptors">>
-//For best results, use a short, uncapitalized and unpunctuated description; for example: 'black with purple highlights'//
+<br>&nbsp;&nbsp;&nbsp;&nbsp;//For best results, use a short, uncapitalized and unpunctuated description; for example: 'black with purple highlights'//
 
-Change her custom tattoo: <<textbox "$activeSlave.customTat" $activeSlave.customTat "Add custom descriptors">> //For best results, use complete, capitalized and punctuated sentences; for example: 'She has blue stars tattooed along her cheekbones, and a blue arrow down each arm.'//
+<br><br>
+Change her custom tattoo: <<textbox "$activeSlave.customTat" $activeSlave.customTat "Add custom descriptors">> <br>&nbsp;&nbsp;&nbsp;&nbsp;//For best results, use complete sentences; for example: 'She has blue stars tattooed along her cheekbones.'//
 
+<br><br>
 Change her custom description: <<textbox "$activeSlave.customDesc" $activeSlave.customDesc "Add custom descriptors">>
-//For best results, use complete, capitalized and punctuated sentences; for example: 'She has a beauty mark above her left nipple.'//
+<br>&nbsp;&nbsp;&nbsp;&nbsp;//For best results, use complete, capitalized and punctuated sentences; for example: 'She has a beauty mark above her left nipple.'//
 
+<br><br>
 Change her custom label: <<textbox "$activeSlave.customLabel" $activeSlave.customLabel "Add custom descriptors">>
-//For best results, use a short phrase; for example: 'Breeder.'//
+<br>&nbsp;&nbsp;&nbsp;&nbsp;//For best results, use a short phrase; for example: 'Breeder.'//
+
+<br><br>
+<<if ndef $activeSlave.customImage>><<set $activeSlave.customImage = 0>><</if>>
+Assign her a custom image:
+<<if $activeSlave.customImage != 0>>
+	<<textbox "$activeSlave.customImage" $activeSlave.customImage "Add custom descriptors">>
+<<else>>
+	<<textbox "$activeSlave.customImage" "" "Add custom descriptors">>
+<</if>>
+<<click "Reset">><<set $activeSlave.customImage = 0>><<goto "Add custom descriptors">><</click>>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;//File must be in .png format. Place file in the \resources folder. Enter the filename without the .png extension. For example, for a file with the path \bin\resources\headgirl.png, enter headgirl.//
\ No newline at end of file
diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw
index c5c7f059bb3..655ac9b7030 100644
--- a/src/uncategorized/bodyModification.tw
+++ b/src/uncategorized/bodyModification.tw
@@ -94,7 +94,7 @@ $activeSlave.slaveName is lying strapped down on the table in your body modifica
 	$possessiveCap back is unpierced.
 <</if>>
 <<if $activeSlave.corsetPiercing == 0>>
-	[[Give $possessive corset piercings|Body Modification][$activeSlave.corsetPiercing to 1,$degradation += 2,$cash -= $modCost]]
+	[["Give " + $possessive + " corset piercings"|Body Modification][$activeSlave.corsetPiercing to 1,$degradation += 2,$cash -= $modCost]]
 <<else>>
 	//[[Remove corset piercings|Body Modification][$activeSlave.corsetPiercing to 0,$cash -= $modCost]]//
 <</if>>
@@ -207,7 +207,7 @@ $activeSlave.slaveName is lying strapped down on the table in your body modifica
 	$pronounCap has a row of big rings down $possessive labia.
 <</if>>
 <<if $activeSlave.vaginaPiercing == 0>>
-	[[Pierce $possessive|Body Modification][$activeSlave.vaginaPiercing to 1,$cash -= $modCost]]
+	[["Pierce " + $possessive|Body Modification][$activeSlave.vaginaPiercing to 1,$cash -= $modCost]]
 <<elseif $activeSlave.vaginaPiercing == 1>>
 	[[Huge piercings|Body Modification][$activeSlave.vaginaPiercing to 2,$cash -= $modCost,$degradation += 1]]
 <</if>>
diff --git a/src/uncategorized/corporationDevelopments.tw b/src/uncategorized/corporationDevelopments.tw
index 7dd4d4f0fcb..a839a0555d4 100644
--- a/src/uncategorized/corporationDevelopments.tw
+++ b/src/uncategorized/corporationDevelopments.tw
@@ -517,7 +517,7 @@ Slave training asset prices are
 		<</replace>>
 	<<else>>
 		<<replace "#update">>
-			You cannot sell anymore assets.
+			You cannot sell any more assets.
 		<</replace>>
 	<</if>>
 <</click>>
diff --git a/src/uncategorized/dispensary.tw b/src/uncategorized/dispensary.tw
index 209daf8e21f..4bfb6cdb882 100644
--- a/src/uncategorized/dispensary.tw
+++ b/src/uncategorized/dispensary.tw
@@ -224,7 +224,7 @@ The hormone replacement therapies
 <br><br>
 
 <<if ($healthyDrugsUpgrade == 0)>>
-	<<if (($organFarmUpgrade == 1) && ($injectionUpgrade != 0) && ($curativeUpgrade == 1) && ($aphrodisiacUpgrade == 1))>>
+	<<if (($organFarmUpgrade >= 1) && ($injectionUpgrade != 0) && ($curativeUpgrade == 1) && ($aphrodisiacUpgrade == 1))>>
 	<<if ($rep >= 15000*$upgradeMultiplierMedicine)>>
 		[[Fund research into drug formulations without negative physical side effects|Dispensary][$cash -= 500000*$upgradeMultiplierMedicine,$healthyDrugsUpgrade to 1]] //Costs ¤<<print 500000*$upgradeMultiplierMedicine>>. Will prevent the negative side effects of excessive drug usage on your slaves.//
 	<<else>>
diff --git a/src/uncategorized/freeRangeDairyAssignmentScene.tw b/src/uncategorized/freeRangeDairyAssignmentScene.tw
index 9870e05bfa6..7ebde663378 100644
--- a/src/uncategorized/freeRangeDairyAssignmentScene.tw
+++ b/src/uncategorized/freeRangeDairyAssignmentScene.tw
@@ -76,18 +76,17 @@ Eventually, $activeSlave.slaveName arrives at her designated milking stall.
 			<<if $activeSlave.father == $slaves[$i].ID && isAvailable($slaves[$i])>>
 				<<set $assayedSlave to $slaves[$i]>>
 				<<set $assayType to "father">>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
 	<</if>>
 	<<if $activeSlave.sisters > 0>>
-		<<set $relation = $slaves>>
-		<<set $relation.shuffle()>>
-		<<for $i to 0; $i < $relation.length; $i++>>
-			<<if areSisters($activeSlave, $relation[$i]) == 3 && isAvailable($relation[$i])>>
+		<<for $i to 0; $i < $slaves.length; $i++>>
+			<<if areSisters($activeSlave, $relation) == 3 && isAvailable($relation)>>
 				<<set $assayedSlave to $relation[$i]>>
 				<<set $assayType to "half-sister">>
-				<<set $relation = 0>>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
@@ -97,42 +96,37 @@ Eventually, $activeSlave.slaveName arrives at her designated milking stall.
 			<<if $activeSlave.mother == $slaves[$i].ID && isAvailable($slaves[$i])>>
 				<<set $assayedSlave to $slaves[$i]>>
 				<<set $assayType to "mother">>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
 	<</if>>
 	<<if $activeSlave.sisters > 0>>
-		<<set $relation = $slaves>>
-		<<set $relation.shuffle()>>
-		<<for $i to 0; $i < $relation.length; $i++>>
-			<<if areSisters($activeSlave, $relation[$i]) == 2 && isAvailable($relation[$i])>>
-				<<set $assayedSlave to $relation[$i]>>
+		<<for $i to 0; $i < $slaves.length; $i++>>
+			<<if areSisters($activeSlave, $slaves[$i]) == 2 && isAvailable($slaves[$i])>>
+				<<set $assayedSlave to $slaves[$i]>>
 				<<set $assayType to "sister">>
-				<<set $relation = 0>>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
 	<</if>>
 	<<if $activeSlave.daughters > 0>>
-		<<set $relation = $slaves>>
-		<<set $relation.shuffle()>>
-		<<for $i to 0; $i < $relation.length; $i++>>
-			<<if ($relation[$i].mother == $activeSlave.ID || $relation[$i].father == $activeSlave.ID) && isAvailable($relation[$i])>>
-				<<set $assayedSlave to $relation[$i]>>
+		<<for $i to 0; $i < $slaves.length; $i++>>
+			<<if ($slaves[$i].mother == $activeSlave.ID || $slaves[$i].father == $activeSlave.ID) && isAvailable($slaves[$i])>>
+				<<set $assayedSlave to $slaves[$i]>>
 				<<set $assayType to "daughter">>
-				<<set $relation = 0>>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
 	<</if>>
 	<<if $activeSlave.sisters > 0>>
-		<<set $relation = $slaves>>
-		<<set $relation.shuffle()>>
-		<<for $i to 0; $i < $relation.length; $i++>>
-			<<if areSisters($activeSlave, $relation[$i]) == 1 && isAvailable($relation[$i])>>
-				<<set $assayedSlave to $relation[$i]>>
+		<<for $i to 0; $i < $slaves.length; $i++>>
+			<<if areSisters($activeSlave, $slaves[$i]) == 1 && isAvailable($slaves[$i])>>
+				<<set $assayedSlave to $slaves[$i]>>
 				<<set $assayType to "twin">>
-				<<set $relation = 0>>
+				<<set $assayedSlaveAvailable = 1>>
 				<<break>>
 			<</if>>
 		<</for>>
diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw
index f699f6248db..de649aa9098 100644
--- a/src/uncategorized/generateXXSlave.tw
+++ b/src/uncategorized/generateXXSlave.tw
@@ -1,6 +1,6 @@
 :: Generate XX Slave [nobr]
 
-<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 1, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 1, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, underArmHStyle: "waxed", physicalAge: 18, actualAge: 18, visualAge: 18, father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 1, HGExclude: 0, ballType: "human", eggType: "human"}>>
+<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 60, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 1, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 1, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, underArmHStyle: "waxed", physicalAge: 18, actualAge: 18, visualAge: 18, father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 1, HGExclude: 0, ballType: "human", eggType: "human"}>>
 
 <<set $activeSlave.publicCount to 0>>
 <<if $activeSlaveOneTimeMaxAge > 998>>
diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw
index c662ebf1ce8..8f1cd56ad18 100644
--- a/src/uncategorized/generateXYSlave.tw
+++ b/src/uncategorized/generateXYSlave.tw
@@ -1,6 +1,6 @@
 :: Generate XY Slave [nobr]
 
-<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 10, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, underArmHStyle: "waxed", physicalAge: 18, actualAge: 18, visualAge: 18, father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 1, HGExclude: 0, ballType: "human", eggType: "human"}>>
+<<set $activeSlave to {slaveName: "blank", birthName: "blank", weekAcquired: 0, origin: 0, career: 0, ID: 0, prestige: 0, pornFame: 0, pornFameSpending: 0, prestigeDesc: 0, recruiter: 0, relation: 0, relationTarget: 0, relationship: 0, relationshipTarget: 0, rivalry: 0, rivalryTarget: 0, subTarget: 0, choosesOwnAssignment: 0, assignment: "rest", assignmentVisible: 1, sentence: 0, training: 0, toyHole: "all her holes", indenture: -1, indentureRestrictions: 0, birthWeek: random(0,51), age: 18, ageImplant: 0, health: 0, minorInjury: 0, trust: 0, oldTrust: 0, devotion: 0, oldDevotion: 0, weight: 0, muscles: 0, height: 170, heightImplant: 0, nationality: "slave", race:"white", markings: "none", eyes: 1, eyeColor: "brown", eyewear: "none", hColor: "brown", pubicHColor: "brown", skin: "light", hLength: 10, hStyle: "short", pubicHStyle: "neat", waist: 0, corsetPiercing: 0, amp: 0, heels:0, voice: 2, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, boobsImplant: 0, boobsImplantType: 0, boobShape: "normal", nipples: "cute",  nipplesPiercing: 0, areolae: 0, areolaePiercing: 0, boobsTat: 0, lactation: 0, lactationAdaptation: 0, milk: 0, cum: 0, hips: 0, hipsImplant: 0, butt: 0, buttImplant: 0, buttImplantType: 0, buttTat: 0, face: 0, faceImplant: 0, faceShape: "normal", lips: 15, lipsImplant: 0, lipsPiercing: 0, lipsTat: 0, teeth: "normal", tonguePiercing: 0, vagina: 0, vaginaLube: 0, vaginaPiercing: 0, vaginaTat: 0, preg: -1, pregSource: 0, pregType: 0, labor: 0, births: 0, cSec: 0, bellyAccessory: "none", labia: 0, clit: 0, clitPiercing: 0, clitSetting: "vanilla", foreskin: 0, anus: 0, dick: 0, analArea: 1, dickPiercing: 0, dickTat: 0, balls: 0, scrotum: 0, ovaries: 0, anusPiercing: 0, anusTat: 0, makeup: 0, nails: 0, brand: 0, brandLocation: 0, earPiercing: 0, nosePiercing: 0, eyebrowPiercing: 0, navelPiercing: 0, shouldersTat: 0, armsTat: 0, legsTat: 0, backTat: 0, stampTat: 0, vaginalSkill: 0, oralSkill: 0, analSkill: 0, whoreSkill: 0, entertainSkill: 0, combatSkill: 0, livingRules: "spare", speechRules: "restrictive", releaseRules:"restrictive", relationshipRules: "restrictive", standardPunishment: "situational", standardReward: "situational", useRulesAssistant: 1, diet: "healthy", dietCum: 0, dietMilk: 0, tired: 0, hormones: 0, drugs: "no drugs", curatives: 0, chem: 0, aphrodisiacs: 0, addict: 0, fuckdoll: 0, choosesOwnClothes: 0, clothes: "no clothing", collar: "none", shoes: "none", vaginalAccessory: "none", dickAccessory: "none", buttplug: "none", intelligence: 0,  intelligenceImplant: 0, energy: 50, attrXX: 0, attrXY: 0, attrKnown: 0, fetish: "none", fetishStrength: 70, fetishKnown: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", oralCount: 0, vaginalCount: 0, analCount: 0, mammaryCount: 0, penetrativeCount: 0, pitKills: 0, customTat: "", customLabel: "", customDesc: "", customImage: 0, currentRules: [], bellyTat: 0, induce: 0, mpreg: 0, inflation: 0, inflationType: "none", inflationMethod: 0, milkSource: 0, cumSource: 0, burst: 0, bellyImplant: 0, bellySag: 0, birthsTotal: 0, pubertyAgeXX: 13, pubertyAgeXY: 13, underArmHStyle: "waxed", physicalAge: 18, actualAge: 18, visualAge: 18, father: 0, mother: 0, sisters: 0, daughters: 0, canRecruit: 1, HGExclude: 0, ballType: "human", eggType: "human"}>>
 
 <<set $activeSlave.publicCount to 0>>
 <<if $activeSlaveOneTimeMaxAge > 998>>
diff --git a/src/uncategorized/genericPlotEvents.tw b/src/uncategorized/genericPlotEvents.tw
index 30e83f08f8e..9b3250eedbd 100644
--- a/src/uncategorized/genericPlotEvents.tw
+++ b/src/uncategorized/genericPlotEvents.tw
@@ -926,31 +926,31 @@ A screen opposite your desk springs to life, <<if $assistant == 0>>showing your
 			<<if ($slaves[$i].origin is "She was an initiate in a religious community of women you enslaved.") || ($slaves[$i].origin is "She was the head of a religious community of women you enslaved.")>>
 				<<slaveCost $slaves[$i]>>
 				<<set $cash += $slaveCost>>
-				<<set $dump to $slaves.pluck([$i], [$i])>>
+				<<set $dump to $slaves.pluck([$i], [$i])>><<set $i-->>
 			<</if>>
 		<<elseif $PAidTarget is "school">>
 			<<if ($slaves[$i].origin is "She was the principal of a girls' school whose remnants you enslaved. A strap-on and a large quantity of personal lubricant was found in her possession when she was enslaved.") || ($slaves[$i].origin is "She was a student at a girls' school whose remnants you enslaved.")>>
 				<<slaveCost $slaves[$i]>>
 				<<set $cash += $slaveCost>>
-				<<set $dump to $slaves.pluck([$i], [$i])>>
+				<<set $dump to $slaves.pluck([$i], [$i])>><<set $i-->>
 			<</if>>
 		<<elseif $PAidTarget is "maternity">>
 			<<if ($slaves[$i].origin is "She was an expectant mother you enslaved when you evacuated her from a threatened old world hospital.")>>
 				<<slaveCost $slaves[$i]>>
 				<<set $cash += $slaveCost>>
-				<<set $dump to $slaves.pluck([$i], [$i])>>
+				<<set $dump to $slaves.pluck([$i], [$i])>><<set $i-->>
 			<</if>>
 		<<elseif $PAidTarget is "conversion">>
 			<<if ($slaves[$i].origin is "She was the owner of a religious orientation conversion therapy camp whose remnants you enslaved.") || ($slaves[$i].origin is "She was an inmate at a religious orientation conversion therapy camp whose remnants you enslaved.")>>
 				<<slaveCost $slaves[$i]>>
 				<<set $cash += $slaveCost>>
-				<<set $dump to $slaves.pluck([$i], [$i])>>
+				<<set $dump to $slaves.pluck([$i], [$i])>><<set $i-->>
 			<</if>>
 		<<else>>
 			<<if ($slaves[$i].origin is "She was a wealthy housewife who you enslaved as she fled societal collapse.")>>
 				<<slaveCost $slaves[$i]>>
 				<<set $cash += $slaveCost>>
-				<<set $dump to $slaves.pluck([$i], [$i])>>
+				<<set $dump to $slaves.pluck([$i], [$i])>><<set $i-->>
 			<</if>>
 		<</if>>
 	<</for>>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index 9002fa95f46..4f0e7cee5ee 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -1557,40 +1557,40 @@ when a dick is pushed inside <<if $activeSlave.vagina >= -1>>either of its lower
 	<</if>>
 	Entertainment and prostitution skills are irrelevant for a Fuckdoll.
 <<else>>
-<<if $activeSlave.whoreSkill <= 10>>
-	<<if $activeSlave.entertainSkill <= 10>>
-	<<elseif $activeSlave.entertainSkill <= 30>>
-		She is @@color:aquamarine;reasonably entertaining.@@
-	<<elseif $activeSlave.entertainSkill <= 60>>
-		She is a @@color:aquamarine;skilled entertainer.@@
-	<<elseif $activeSlave.entertainSkill < 100>>
-		She is an @@color:aquamarine;expert entertainer.@@
+	<<if $activeSlave.whoreSkill <= 10>>
+		<<if $activeSlave.entertainSkill <= 10>>
+		<<elseif $activeSlave.entertainSkill <= 30>>
+			She is @@color:aquamarine;reasonably entertaining.@@
+		<<elseif $activeSlave.entertainSkill <= 60>>
+			She is a @@color:aquamarine;skilled entertainer.@@
+		<<elseif $activeSlave.entertainSkill < 100>>
+			She is an @@color:aquamarine;expert entertainer.@@
+		<<else>>
+			She is a @@color:aquamarine;master of entertainment.@@
+		<</if>>
 	<<else>>
-		She is a @@color:aquamarine;master of entertainment.@@
+		<<if $activeSlave.entertainSkill <= 10>>
+		<<elseif $activeSlave.entertainSkill <= 30>>
+			She is @@color:aquamarine;reasonably entertaining@@ and
+		<<elseif $activeSlave.entertainSkill <= 60>>
+			She is a @@color:aquamarine;skilled entertainer@@ and
+		<<elseif $activeSlave.entertainSkill < 100>>
+			She is an @@color:aquamarine;expert entertainer@@ and
+		<<else>>
+			She is a @@color:aquamarine;master of entertainment@@ and
+		<</if>>
 	<</if>>
-<<else>>
-	<<if $activeSlave.entertainSkill <= 10>>
-	<<elseif $activeSlave.entertainSkill <= 30>>
-		She is @@color:aquamarine;reasonably entertaining@@ and
-	<<elseif $activeSlave.entertainSkill <= 60>>
-		She is a @@color:aquamarine;skilled entertainer@@ and
-	<<elseif $activeSlave.entertainSkill < 100>>
-		She is an @@color:aquamarine;expert entertainer@@ and
+	<<if $activeSlave.whoreSkill <= 10>>
+	<<elseif $activeSlave.whoreSkill <= 30>>
+		<<if $activeSlave.entertainSkill <= 10>>She <</if>>has @@color:aquamarine;basic experience as a prostitute.@@
+	<<elseif $activeSlave.whoreSkill <= 60>>
+		<<if $activeSlave.entertainSkill <= 10>>She is <</if>>a @@color:aquamarine;skilled streetwalker.@@
+	<<elseif $activeSlave.whoreSkill < 100>>
+		<<if $activeSlave.entertainSkill <= 10>>She is <</if>>a @@color:aquamarine;expert working girl.@@
 	<<else>>
-		She is a @@color:aquamarine;master of entertainment@@ and
+		<<if $activeSlave.entertainSkill <= 10>>She is <</if>>a @@color:aquamarine;masterful whore.@@
 	<</if>>
 <</if>>
-<<if $activeSlave.whoreSkill <= 10>>
-<<elseif $activeSlave.whoreSkill <= 30>>
-	has @@color:aquamarine;basic experience as a prostitute.@@
-<<elseif $activeSlave.whoreSkill <= 60>>
-	a @@color:aquamarine;skilled streetwalker.@@
-<<elseif $activeSlave.whoreSkill < 100>>
-	a @@color:aquamarine;expert working girl.@@
-<<else>>
-	a @@color:aquamarine;masterful whore.@@
-<</if>>
-<</if>>
 
 <<if ($activeSlave.customDesc != "") && (def $activeSlave.customDesc)>>
 	<<print $activeSlave.customDesc>>
diff --git a/src/uncategorized/main.tw b/src/uncategorized/main.tw
index 67049969d04..8cb17b52264 100644
--- a/src/uncategorized/main.tw
+++ b/src/uncategorized/main.tw
@@ -250,26 +250,34 @@ __''MAIN MENU''__&nbsp;&nbsp;&nbsp;&nbsp;//[[Summary Options]]
 <<set $j to "Back",$k to "AS Dump",$l to "Main">>
 <<for $i to 0; $i < $slaves.length; $i++>>
 <<if ($slaves[$i].assignment is "please you")>>
-	<br><<display "Toychest">> //In the coming week you plan to concentrate on <<if $slaves[$i].fuckdoll == 0>>her<<else>>its<</if>>
+	<br><<display "Toychest">> //In the coming week you plan to concentrate on
 	<<if $slaves[$i].fuckdoll == 0>>
-		$slaves[$i].toyHole, but for now://
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;<<print "[[Use her mouth|FLips][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">> | <<print "[[Play with her tits|FBoobs][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
-		<<if canDoVaginal($slaves[$i])>>
-			| <<print "[[Fuck her|FVagina][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+		<<if $slaves[$i].toyHole != "all her holes">>
+			her $slaves[$i].toyHole, but for now://
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;<<print "[[Use her mouth|FLips][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">> | <<print "[[Play with her tits|FBoobs][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+			<<if canDoVaginal($slaves[$i])>>
+				| <<print "[[Fuck her|FVagina][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+				<<if canDoAnal($slaves[$i])>>
+				| <<print "[[Use her holes|FButt][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+				<</if>>
+			<</if>>
 			<<if canDoAnal($slaves[$i])>>
-			| <<print "[[Use her holes|FButt][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+			| <<print "[[Fuck her ass|FAnus][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
 			<</if>>
+			/*check*/
+			<<if canAchieveErection($slaves[$i])>>
+			| <<print "[[Ride her|FDick][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+			<</if>>
+			| <<print "[[Abuse her|FAbuse][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
+		<<else>>
+			all of her holes equally.
 		<</if>>
-		<<if canDoAnal($slaves[$i])>>
-		| <<print "[[Fuck her ass|FAnus][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
-		<</if>>
-		/*check*/
-		<<if canAchieveErection($slaves[$i])>>
-		| <<print "[[Ride her|FDick][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
-		<</if>>
-		| <<print "[[Abuse her|FAbuse][$activeSlave to $slaves[" + $i + "],$nextButton to $j,$nextLink to $k,$returnTo to $l]]">>
 	<<else>>
-		$slaves[$i].toyHole.
+		<<if $slaves[$i].toyHole != "all her holes">>
+			its $slaves[$i].toyHole.
+		<<else>>
+			all of its holes.
+		<</if>>
 	<</if>>
 <</if>>
 <</for>>
diff --git a/src/uncategorized/pMercenaryRomeo.tw b/src/uncategorized/pMercenaryRomeo.tw
index bf7c5752ddb..9ba37d66d17 100644
--- a/src/uncategorized/pMercenaryRomeo.tw
+++ b/src/uncategorized/pMercenaryRomeo.tw
@@ -1,5 +1,5 @@
 :: P mercenary romeo
- 
+
 <<nobr>>
 
 <<set $nextButton to "Continue">>
@@ -7,34 +7,38 @@
 
 <<if $activeSlave == 0>>
 	<<for $i to 0; $i < $slaves.length; $i++>>
-		<<if ($slaves[$i].assignment is "serve the public")>>
-			<<set $activeSlave to $slaves[$i]>>
-			<<break>>
-		<</if>>
-		<<if ($slaves[$i].assignment is "serve in the club")>>
-			<<set $activeSlave to $slaves[$i]>>
-			<<break>>
+		<<if $slaves[$i].fetish != "mindbroken">>
+		<<if $slaves[$i].fuckdoll == 0>>
+			<<if ($slaves[$i].assignment is "serve the public")>>
+				<<set $activeSlave to $slaves[$i]>>
+				<<break>>
+			<</if>>
+			<<if ($slaves[$i].assignment is "serve in the club")>>
+				<<set $activeSlave to $slaves[$i]>>
+				<<break>>
+			<</if>>
+			<<if ($slaves[$i].assignment is "whore")>>
+				<<set $activeSlave to $slaves[$i]>>
+				<<break>>
+			<</if>>
+			<<if ($slaves[$i].assignment is "work in the brothel")>>
+				<<set $activeSlave to $slaves[$i]>>
+				<<break>>
+			<</if>>
 		<</if>>
-		<<if ($slaves[$i].assignment is "whore")>>
-			<<set $activeSlave to $slaves[$i]>>
-			<<break>>
 		<</if>>
-		<<if ($slaves[$i].assignment is "work in the brothel")>>
+	<</for>>
+	<<if $activeSlave == 0>>
+		<<for $i to $slaves.length - 1; $i >= 0; $i-->>
+		<<if ($slaves[$i].publicCount > 0) && (($activeSlave == 0) || (random(1,100) > 50))>>
 			<<set $activeSlave to $slaves[$i]>>
 			<<break>>
 		<</if>>
-	<</for>>
-<</if>>
-<<if $activeSlave == 0>>
-	<<for $i to $slaves.length - 1; $i >= 0; $i-->>
-	<<if ($slaves[$i].publicCount > 0) && (($activeSlave == 0) || (random(1,100) > 50))>>
-		<<set $activeSlave to $slaves[$i]>>
-		<<break>>
+		<</for>>
 	<</if>>
-	<</for>>
-<</if>>
-<<if $activeSlave == 0>>
+	<<if $activeSlave == 0>>
 		<<set $activeSlave to $slaves.random()>>
+	<</if>>
 <</if>>
 
 <<slaveCost $activeSlave>>
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index d43c92c453f..bc5bee64d22 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -97,15 +97,7 @@
 <<if ($slaves[$i].daughters > 0)>>
 <<if ($slaves[$i].devotion > 50)>>
 	<<set $mother to $slaves[$i]>>
-	<<set $relation = $slaves>>
-	<<set $relation = $relation.shuffle()>>
-	<<for $j to 0; $j < $relation.length; $j++>>
-	<<if $relation[$j].mother == $mother.ID>>
-		<<set $daughter to $relation[$j]>>
-		<<set $relation = 0>>
-		<<break>>
-	<</if>>
-	<</for>>
+	<<set $daughter to RandomDaughter($slaves[$i])>>
 	<<if ($daughter.devotion > 50)>>
 	<<if canWalk($daughter)>>
 		<<if canWalk($mother)>>
@@ -129,15 +121,7 @@
 <<if ($slaves[$i].sisters > 0)>>
 <<if ($slaves[$i].dick == 1)>>
 	<<set $youngerSister to $slaves[$i]>>
-	<<set $relation = $slaves>>
-	<<set $relation = $relation.shuffle()>>
-	<<for $j to 0; $j < $relation.length; $j++>>
-		<<if areSisters($youngerSister, $relation[$j]) > 1>>
-			<<set $olderSister to $relation[$j]>>
-			<<set $relation = 0>>
-			<<break>>
-		<</if>>
-	<</for>>
+	<<set $olderSister to randomSister($slaves[$i])>>
 <<if ($olderSister.anus == 0)>>
 <<if ($youngerSister.devotion > ($olderSister.devotion+20))>>
 <<set $events.push("RE sibling revenge")>>
@@ -154,15 +138,7 @@
 <<if ($used == 0)>>
 <<if ($slaves[$i].sisters > 0)>>
 	<<set $alphaTwin to $slaves[$i]>>
-	<<set $relation = $slaves>>
-	<<set $relation = $relation.shuffle()>>
-	<<for $j to 0; $j < $relation.length; $j++>>
-		<<if areSisters($relation[$i], $alphaTwin) == 1>>
-			<<set $betaTwin to $relation[$j]>>
-			<<set $relation = 0>>
-			<<break>>
-		<</if>>
-	<</for>>
+	<<set $betaTwin to randomSister($slaves[$i])>>
 <<if ($alphaTwin.anus > 0)>>
 <<if ($betaTwin.anus > 0)>>
 <<if ($alphaTwin.devotion > 50)>>
diff --git a/src/uncategorized/saDiet.tw b/src/uncategorized/saDiet.tw
index 7a68f42af89..7e7ebeaf509 100644
--- a/src/uncategorized/saDiet.tw
+++ b/src/uncategorized/saDiet.tw
@@ -699,7 +699,7 @@
 					<<set $slaves[$i].devotion -= 4>>
 				<</if>>
 			<</if>>
-		<<elseif ($slaves[$i].fetishKnown == 0) && ($slaves[$i].fetish is "cumslut")>>
+		<<elseif ($slaves[$i].fetish is "cumslut")>>
 			<<if ($slaves[$i].fetishKnown == 0)>>
 				Being forced to get her sustenance only by working the phallic food dispensers in the kitchen has revealed something: @@color:lightcoral;she's got an oral fetish!@@
 				<<set $slaves[$i].fetishKnown to 1>>
diff --git a/src/uncategorized/saRecruitGirls.tw b/src/uncategorized/saRecruitGirls.tw
index 904d987fe05..326a6b7412d 100644
--- a/src/uncategorized/saRecruitGirls.tw
+++ b/src/uncategorized/saRecruitGirls.tw
@@ -357,28 +357,7 @@ She uses her extra time and @@color:yellowgreen;recruitment allowance@@ this wee
 <<if $familyTesting == 1>>
 	<<if $arcologies[0].FSEgyptianRevivalist != "unset">>
 		<<if totalRelatives($slaves[$i]) > 0>>
-			<<set $relation = $slaves>>
-			<<set $relation = $relation.shuffle()>>
-			<<set _recruiterRelation = 0>>
-			<<for _j = 0; _j < $relation.length; _j++>>
-				<<if areSisters($slaves[$i], $relation[_j]) > 0 && isSlaveAvailable($relation[_j])>>
-					<<set _recruiterRelation = $relation[_j]>>
-					<<break>>
-				<<elseif $relation[_j].mother == $slaves[$i].ID && isSlaveAvailable($relation[_j])>>
-					<<set _recruiterRelation = $relation[_j]>>
-					<<break>>
-				<<elseif $relation[_j].father == $slaves[$i].ID && isSlaveAvailable($relation[_j])>>
-					<<set _recruiterRelation = $relation[_j]>>
-					<<break>>
-				<<elseif $relation[_j].ID == $slaves[$i].mother && isSlaveAvailable($relation[_j])>>
-					<<set _recruiterRelation = $relation[_j]>>
-					<<break>>
-				<<elseif $relation[_j].ID == $slaves[$i].father && isSlaveAvailable($relation[_j])>>
-					<<set _recruiterRelation = $relation[_j]>>
-					<<break>>
-				<</if>>
-			<</for>>
-			<<set $relation = 0>>
+			<<set _recruiterRelation = getRandomAvailabeRelation($slaves[$i])>>
 			<<if _recruiterRelation != 0>>
 				<<if ($slaves[$i].energy > 60 || $slaves[$i].sexualQuirk == "tease" || $slaves[$i].sexualQuirk == "perverted") && (_recruiterRelation.energy > 60 || _recruiterRelation.sexualQuirk == "tease" || _recruiterRelation.sexualQuirk == "perverted")>>
 					<<set _seed += 6, _FSmatch++, $arcologies[0].FSEgyptianRevivalist += 0.02*$FSSingleSlaveRep>>
@@ -703,20 +682,7 @@ She is able to smartly <<if $arcologies[0].FSPaternalist != "unset">>answer<<els
 					The Ancient Egyptian sensibility of your arcology features slave incest, but she's too shy even to play-act with her $relationType for publicity.
 				<</if>>
 			<<else>>
-				<<if _recruiterRelation.mother == $slaves[$i].ID || _recruiterRelation.father == $slaves[$i].ID>>
-					<<set $relationType = "daughter">>
-				<<elseif $slaves[$i].mother == _recruiterRelation.ID>>
-					<<set $relationType = "mother">>
-				<<elseif $slaves[$i].father == _recruiterRelation.ID>>
-					<<set $relationType = "father">>
-				<<elseif areSisters($slaves[$i], _recruiterRelation) == 1>>
-					<<set $relationType = "twin">>
-				<<elseif areSisters($slaves[$i], _recruiterRelation) == 2>>
-					<<set $relationType = "sister">>
-				<<elseif areSisters($slaves[$i], _recruiterRelation) == 3>>
-					<<set $relationType = "half-sister">>
-				<</if>>
-				One idea that comes up while brainstorming is to act out Ancient Egyptian incest with her $relationType, but _recruiterRelation.slaveName is confined and unavailable.
+				One idea that comes up while brainstorming is to act out Ancient Egyptian incest with a family member, but all of them are confined and unavailable.
 			<</if>>
 		<<else>>
 			One of the most prominent features of your Egyptian Revival is an open, even expectant, attitude toward slave incest, but she doesn't have any close family living in your household.
diff --git a/src/uncategorized/saRelationships.tw b/src/uncategorized/saRelationships.tw
index 2a79ac7e913..9f0d65b168a 100644
--- a/src/uncategorized/saRelationships.tw
+++ b/src/uncategorized/saRelationships.tw
@@ -996,7 +996,7 @@ Since she is mindbroken, she @@color:lightsalmon;can't really maintain@@ any mea
 
 <<if $familyTesting == 1>>
 
-	<<if $slaves[$i].mother > 0 || $slaves[$i].father > 0 || $slaves[$i].sisters > 0 || $slaves[$i].daughters > 0>>
+	<<if totalRelatives($slaves[$i]) > 0>>
 		<<set $relation = 0>>
 		<<set $relationType = 0>>
 		<<for $j to 0; $j < $slaves.length; $j++>>
@@ -1337,7 +1337,7 @@ Since she is mindbroken, she @@color:lightsalmon;can't really maintain@@ any mea
 
 <<if $familyTesting == 1>>
 
-<<if $slaves[$i].daughters > 0 || $slaves[$i].mother > 0 || $slaves[$i].father > 0 || $slaves[$i].sisters > 0>>
+<<if totalRelatives($slaves[$i]) > 0>>
 <<if $slaves[$i].trust <= 95>>
 <<for $j to 0; $j < $slaves.length; $j++>>
 	<<if $slaves[$i].trust < -20>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 833fa8740c8..1ca7170bb37 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -155,7 +155,7 @@
 	<<if $familyTest == 1>>
 		<<for $i to 0; $i < $slaves.length; $i++>>
 			<<if $activeSlave.mother == $slaves[$i].ID>>
-				<<if isAvailabe($slaves[$i])>>
+				<<if isSlaveAvailable($slaves[$i])>>
 					| <<click "Fuck her with her mother">><<replace "#miniscene">><<set $partner to "mother">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
 				<<else>>
 					//Her mother, $slaves[$i].slaveName, is unavailable//
@@ -163,7 +163,7 @@
 			<</if>>
 			/*
 			<<if $activeSlave.father == $slaves[$i].ID>>
-				<<if isAvailabe($slaves[$i])>>
+				<<if isSlaveAvailable($slaves[$i])>>
 					| <<click "Fuck her with her father">><<replace "#miniscene">><<set $partner to "father">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
 				<<else>>
 					//Her father, $slaves[$i].slaveName, is unavailable//
@@ -172,24 +172,27 @@
 			*/
 		<</for>>
 		<<if $activeSlave.daughters > 0>>
-			<<set $relation = $slaves>>
-			<<set $relation = $relation.shuffle()>>
-			<<for $i to 0; $i < $relation.length; $i++>>
-				<<if ($activeSlave.ID == $relation[$i].father || $activeSlave.ID == $relation[$i].mother) && isAvailabe($relation[$i])>>
-					<<if $activeSlave.daughters == 1>>
-						| <<click "Fuck her with her daughter">><<replace "#miniscene">><<set $partner to "daughter">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
-					<<else>>
-						| <<click "Fuck her with one of her daughters">><<replace "#miniscene">><<set $partner to "daughter">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
-					<</if>>	
-					<<break>>
-				<<elseif $i == $relation.length - 1>>
-					<<if $activeSlave.daughters == 1>>
-						//Her daughter is unavailable//
-					<<else>>
-						//Her daughters are unavailable//
-					<</if>>
+			<<set $relation = 0>>
+			<<for $i to 0; $i < $slaves.length; $i++>>
+				<<if ($activeSlave.ID == $slaves[$i].father || $activeSlave.ID == $slaves[$i].mother) && !isSlaveAvailable($slaves[$i])>>
+					<<set $relation++>>	
 				<</if>>
 			<</for>>
+			<<if $relation == $activeSlave.daughters>>
+				<<if $activeSlave.daughters == 1>>
+					//Her daughter is unavailable//
+				<<else>>
+					//Her daughters are unavailable//
+				<</if>>
+				<<set $relation = 0>>
+			<<else>>
+				<<if $activeSlave.daughters == 1>>
+					| <<click "Fuck her with her daughter">><<replace "#miniscene">><<set $partner to "daughter">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
+				<<else>>
+					| <<click "Fuck her with one of her daughters">><<replace "#miniscene">><<set $partner to "daughter">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
+				<</if>>
+				<<set $relation = 0>>
+			<</if>>
 		<</if>>
 		/*
 		<<if $activeSlave.daughters > 1>>
@@ -197,24 +200,27 @@
 		<</if>>
 		*/
 		<<if $activeSlave.sisters > 0>>
-			<<set $relation = $slaves>>
-			<<set $relation = $relation.shuffle()>>
-			<<for $i to 0; $i < $relation.length; $i++>>
-				<<if areSisters($activeSlave, $relation[$i]) > 0 && isAvailabe($relation[$i])>>
-					<<if $activeSlave.sisters == 1>>
-						| <<click "Fuck her with her sister">><<replace "#miniscene">><<set $partner to "sister">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
-					<<else>>
-						| <<click "Fuck her with one of her sisters">><<replace "#miniscene">><<set $partner to "sister">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
-					<</if>>	
-					<<break>>
-				<<elseif $i == $relation.length - 1>>
-					<<if $activeSlave.sisters == 1>>
-						//Her sister is unavailable//
-					<<else>>
-						//Her sisters are unavailable//
-					<</if>>
+			<<set $relation = 0>>
+			<<for $i to 0; $i < $slaves.length; $i++>>
+				<<if areSisters($activeSlave, $slaves[$i]) > 0 && !isSlaveAvailable($slaves[$i])>>
+					<<set $relation++>>
 				<</if>>
 			<</for>>
+			<<if $relation == $activeSlave.sisters>>
+				<<if $activeSlave.sisters == 1>>
+					//Her sister is unavailable//
+				<<else>>
+					//Her sisters are unavailable//
+				<</if>>
+				<<set $relation = 0>>
+			<<else>>
+				<<if $activeSlave.sisters == 1>>
+					| <<click "Fuck her with her sister">><<replace "#miniscene">><<set $partner to "sister">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
+				<<else>>
+					| <<click "Fuck her with one of her sisters">><<replace "#miniscene">><<set $partner to "sister">><<display "FRelation">><br>&nbsp;&nbsp;&nbsp;&nbsp;<</replace>><</click>>
+				<</if>>	
+				<<set $relation = 0>>
+			<</if>>
 		<</if>>
 		/*
 		<<if $activeSlave.sisters > 1>>
diff --git a/src/uncategorized/slaveSummary.tw b/src/uncategorized/slaveSummary.tw
index 32519ca5be0..f38550fb045 100644
--- a/src/uncategorized/slaveSummary.tw
+++ b/src/uncategorized/slaveSummary.tw
@@ -1660,6 +1660,13 @@ Release rules: _Slave.releaseRules.
 <</if>>
 @@
 @@color:pink;
+<<if (_Slave.waist > 1)>>
+	Wst++
+<<elseif (_Slave.waist == 1)>>
+	Wst+
+<</if>>
+@@
+@@color:pink;
 <<if (_Slave.boobsImplant == 0) && (_Slave.buttImplant == 0) && (_Slave.waist < 2) && (_Slave.lipsImplant == 0) && (_Slave.faceImplant < 2) && (_Slave.bellyImplant == 0)>>
 	Natr
 <<else>>
@@ -1865,6 +1872,13 @@ _Slave.faceShape face.
 <</if>>
 @@
 @@color:pink;
+<<if (_Slave.waist > 1)>>
+	Unnaturally narrow waist.
+<<elseif (_Slave.waist == 1)>>
+	Narrow waist.
+<</if>>
+@@
+@@color:pink;
 <<if (_Slave.boobsImplant != 0) || (_Slave.buttImplant != 0) || (_Slave.lipsImplant != 0) || (_Slave.bellyImplant != 0)>>
 	Implants.
 <<elseif (_Slave.faceImplant >= 2) || (_Slave.waist >= 2)>>
@@ -2981,6 +2995,7 @@ _Slave.faceShape face.
 <</if>>
 <</if>>
 
+<<if _Slave.fuckdoll == 0>>
 <<if $abbreviateClothes is 2>>
 <<if _Slave.choosesOwnClothes == 1>>
 	Dressing herself.
@@ -3180,6 +3195,7 @@ _Slave.faceShape face.
 	Enormous buttplug.
 <</switch>>
 <</if>>
+<</if>>
 
 <<if $abbreviateRulesets is 2>>
 <<if (def _Slave.currentRules) && (_Slave.currentRules.length > 0)>>
diff --git a/src/utility/assayWidgets.tw b/src/utility/assayWidgets.tw
index 445a2f10816..782d4fb2472 100644
--- a/src/utility/assayWidgets.tw
+++ b/src/utility/assayWidgets.tw
@@ -694,7 +694,7 @@
 <<set $seed to $oralUseWeight + $vaginalUseWeight + $analUseWeight>>
 
 <<if $seed > 0>>
-<<set $FResult += 6*($oralUseWeight/$seed)*($args[0].oralSkill/30)>>
+<<set $FResult += (6+$args[0].tonguePiercing)*($oralUseWeight/$seed)*($args[0].oralSkill/30)>>
 <<if $args[0].sexualFlaw == "cum addict">>
 	<<set $FResult += ($oralUseWeight/$seed)*($args[0].oralSkill/30)>>
 <</if>>
diff --git a/src/utility/descriptionWidgets.tw b/src/utility/descriptionWidgets.tw
index 9ce668e620b..77774d06aa2 100644
--- a/src/utility/descriptionWidgets.tw
+++ b/src/utility/descriptionWidgets.tw
@@ -1696,41 +1696,41 @@ $pronounCap's got a
 
 <<if $activeSlave.hips < -1>>
 	<<if $activeSlave.butt > 2>>
-	$possessiveCap butt is disproportionately large for $possessive narrow hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
+	$possessiveCap butt is @@color:red;disproportionately large@@ for $possessive narrow hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
 	<<else>>
 	$possessiveCap hips are very narrow.
 	<</if>>
 <<elseif $activeSlave.hips < 0>>
 	<<if $activeSlave.butt > 4>>
-	$possessiveCap butt is disproportionately large for $possessive trim hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
+	$possessiveCap butt is @@color:red;disproportionately large@@ for $possessive trim hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
 	<<else>>
 	$possessiveCap butt is complemented by $possessive trim hips.
 	<</if>>
 <<elseif $activeSlave.hips > 2>>
 	<<if $activeSlave.butt <= 8>>
-	$possessiveCap butt is disproportionately small for $possessive monstrous hips.
+	$possessiveCap butt is @@color:red;disproportionately small@@ for $possessive monstrous hips.
 	<<else>>
 	$possessiveCap butt is fitting for $possessive monstrous hips.
 	<</if>>
 <<elseif $activeSlave.hips > 1>>
 	<<if $activeSlave.butt <= 3>>
-	$possessiveCap butt is disproportionately small for $possessive very wide hips.
+	$possessiveCap butt is @@color:red;disproportionately small@@ for $possessive very wide hips.
 	<<else>>
 	$possessiveCap butt is flattered by $possessive very wide hips.
 	<</if>>
 <<elseif $activeSlave.hips > 0>>
 	<<if $activeSlave.butt > 8>>
-	$possessiveCap butt is disproportionately large for $possessive broad hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
+	$possessiveCap butt is @@color:red;disproportionately large@@ for $possessive broad hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
 	<<elseif $activeSlave.butt <= 2>>
-	$possessiveCap butt is disproportionately small for $possessive broad hips.
+	$possessiveCap butt is @@color:red;disproportionately small@@ for $possessive broad hips.
 	<<else>>
 	$possessiveCap butt is complemented by $possessive broad hips.
 	<</if>>
 <<else>>
 	<<if $activeSlave.butt > 6>>
-	$possessiveCap butt is disproportionately large for $possessive womanly hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
+	$possessiveCap butt is @@color:red;disproportionately large@@ for $possessive womanly hips<<if $arcologies[0].FSTransformationFetishist is "unset">>.<<else>>, but your transformation fetishist arcology considers this attractive.<</if>>
 	<<elseif $activeSlave.butt <= 1>>
-	$possessiveCap butt is disproportionately small for $possessive ample hips.
+	$possessiveCap butt is @@color:red;disproportionately small@@ for $possessive ample hips.
 	<<else>>
 	$possessiveCap butt is complemented by $possessive ample hips.
 	<</if>>
@@ -2327,23 +2327,14 @@ $pronounCap's got a
 <<if $showBodyMods == 1>>
 
 <<if ($activeSlave.vagina > -1)>>
-	<<if ($activeSlave.dick == 0)>>
 	<<if ($activeSlave.anusPiercing == 1)>>
-		$pronounCap has a simple piercing between $possessive pussy and $possessive asshole<<if $activeSlave.fuckdoll > 0>> which helps keep the strip of material between its holes in place<</if>>.
+		$pronounCap has a simple piercing between $possessive pussy and $possessive asshole<<if $activeSlave.fuckdoll > 0>> which helps keep the strip of material <<if $activeSlave.vagina > -1>>between its holes<<else>>below its rear hole<</if>> in place<</if>>.
 	<<elseif ($activeSlave.anusPiercing is 2)>>
-		$pronounCap has a big ring between $possessive pussy and $possessive asshole<<if $activeSlave.fuckdoll > 0>>, which helps keep the strip of material between its holes in place,<</if>> and studs in all around $possessive anus.
-	<</if>>
-	<<else>>
-	<<if ($activeSlave.anusPiercing == 1)>>
-		$pronounCap has a simple piercing between $possessive pussy and the base of $possessive dick.
-		/* It rubs $possessive genitals and keeps $possessive sexually primed. */
-	<<elseif ($activeSlave.anusPiercing is 2)>>
-		$pronounCap has two rings between the base of $possessive dick and $possessive pussy, three more between $possessive pussy and $possessive ass, and studs in a ring around $possessive anus.
-	<</if>>
+		$pronounCap has a big ring between $possessive pussy and $possessive asshole<<if $activeSlave.fuckdoll > 0>>, which helps keep the strip of material <<if $activeSlave.vagina > -1>>between its holes<<else>>below its rear hole<</if>> in place,<</if>> and studs in all around $possessive anus.
 	<</if>>
 <<else>>
 	<<if ($activeSlave.anusPiercing == 1)>>
-		$pronounCap has a simple perianal piercing between the base of $possessive dick and $possessive girly butthole<<if $activeSlave.fuckdoll > 0>> which helps keep the strip of material between its holes in place<</if>>.
+		$pronounCap has a simple perianal piercing between the base of $possessive dick and $possessive girly butthole<<if $activeSlave.fuckdoll > 0>> which helps keep the strip of material <<if $activeSlave.vagina > -1>>between its holes<<else>>below its rear hole<</if>> in place<</if>>.
 	<<elseif ($activeSlave.anusPiercing is 2)>>
 		$pronounCap has a big ring between the base of $possessive dick and $possessive girly butthole, which has studs all around it.
 	<</if>>
@@ -2440,7 +2431,7 @@ $pronounCap's got a
 				$possessiveCap ballsack have its own uncomfortably tight pouch in the suit.
 			<</if>>
 		<<else>>
-			soft cock<<if $activeSlave.scrotum > 0>> and balls are<<else>>is<</if>> trapped up against her abdomen, under the Fuckdoll suit's protective material.
+			soft cock<<if $activeSlave.scrotum > 0>> and balls are<<else>>is<</if>> trapped up against its abdomen, under the Fuckdoll suit's protective material.
 		<</if>>
 	<</if>>
 	<<if $activeSlave.vagina > -1>>
@@ -3596,13 +3587,15 @@ $pronounCap's got a
 <</if>>
 
 <<if $activeSlave.fuckdoll > 0>>
-	$possessiveCap front hole
-	<<if $activeSlave.fuckdoll <= 45>>
-		is mostly useful when it's restrained for rape.
-	<<else>>
-		will massage <<if $PC.dick == 1>>cocks<<else>>anything<</if>> placed inside it on command.
-		<<if $activeSlave.fuckdoll <= 85>>
-			$pronounCap is even capable of riding <<if $PC.dick == 1>>dick<<else>>a strap-on<</if>>.
+	<<if $activeSlave.vagina > 0>>
+		$possessiveCap front hole
+		<<if $activeSlave.fuckdoll <= 45>>
+			is mostly useful when it's restrained for rape.
+		<<else>>
+			will massage <<if $PC.dick == 1>>cocks<<else>>anything<</if>> placed inside it on command.
+			<<if $activeSlave.fuckdoll <= 85>>
+				$pronounCap is even capable of riding <<if $PC.dick == 1>>dick<<else>>a strap-on<</if>>.
+			<</if>>
 		<</if>>
 	<</if>>
 <<else>>
diff --git a/src/utility/miscWidgets.tw b/src/utility/miscWidgets.tw
index b8c231a5f27..2e1a7905d60 100644
--- a/src/utility/miscWidgets.tw
+++ b/src/utility/miscWidgets.tw
@@ -1216,7 +1216,22 @@ $args[2]: icon UI Display for vector art, 1 for on.
 %/
 <<widget "SlaveArt">>
 
-<<if $imageChoice == 1>> /* VECTOR ART BY NOX */
+<<if ndef $args[0].customImage>><<set $args[0].customImage = 0>><</if>>
+<<if $args[0].customImage != 0>>
+
+<<set _fileName = "'resources/" + $args[0].customImage + ".png' ">>
+
+<<if $args[1] == 3>>
+	<<print "<img src=" + _fileName + "style='float:right; border:3px hidden'/>">>
+<<elseif $args[1] == 2>>
+	<<print "<img src=" + _fileName + "style='float:right; border:3px hidden' width='300' height='300'/>">>
+<<elseif $args[1] == 1>>
+	<<if $seeSummaryImages != 0>><<print "<img src=" + _fileName + "style='float:left; border:3px hidden' width='150' height='150'/>">><</if>>
+<<else>>
+	<<print "<img src=" + _fileName + "style='float:left; border:3px hidden' width='120' height='120'/>">>
+<</if>>
+
+<<elseif $imageChoice == 1>> /* VECTOR ART BY NOX */
 
 <<if $args[1] != 0>> /* IMAGE DOES NOT HAVE TO BE TINY */
 <<if ($args[1] != 1) || ($seeSummaryImages != 0)>> /* IMAGE IS NOT PART OF A LIST, OR IMAGES ARE TO BE DISPLAYED IN LISTS */
-- 
GitLab