From 23fdd8f2f8438cd38533df779c67c99ff8eb83c2 Mon Sep 17 00:00:00 2001
From: DCoded <dcoded@live.com>
Date: Mon, 25 May 2020 23:39:23 -0400
Subject: [PATCH] Split nurseryWidgets.js into seperate files

---
 .../nursery/widgets/children/ChildState.js    |  1931 ++
 .../nursery/widgets/children/childSummary.js  |  4410 +++
 .../longChildDescription.js}                  | 23381 +++++-----------
 .../nursery/widgets/infants/InfantState.js    |   180 +
 .../nursery/widgets/infants/infantSummary.js  |  1779 ++
 .../widgets/infants/longInfantDescription.js  |   253 +
 .../nursery/widgets/reports/childrenReport.js |   402 +
 .../nursery/widgets/reports/nurseryReport.js  |   298 +
 .../nursery/widgets/utils/nurseryUtils.js     |   970 +
 9 files changed, 16793 insertions(+), 16811 deletions(-)
 create mode 100644 src/facilities/nursery/widgets/children/ChildState.js
 create mode 100644 src/facilities/nursery/widgets/children/childSummary.js
 rename src/facilities/nursery/widgets/{nurseryWidgets.js => children/longChildDescription.js} (56%)
 create mode 100644 src/facilities/nursery/widgets/infants/InfantState.js
 create mode 100644 src/facilities/nursery/widgets/infants/infantSummary.js
 create mode 100644 src/facilities/nursery/widgets/infants/longInfantDescription.js
 create mode 100644 src/facilities/nursery/widgets/reports/childrenReport.js
 create mode 100644 src/facilities/nursery/widgets/reports/nurseryReport.js
 create mode 100644 src/facilities/nursery/widgets/utils/nurseryUtils.js

diff --git a/src/facilities/nursery/widgets/children/ChildState.js b/src/facilities/nursery/widgets/children/ChildState.js
new file mode 100644
index 00000000000..7052c95e6dd
--- /dev/null
+++ b/src/facilities/nursery/widgets/children/ChildState.js
@@ -0,0 +1,1931 @@
+/**
+ * Contains a list of properties the child object has
+ * Will need to be pared down
+ */
+App.Facilities.Nursery.ChildState = class ChildState {
+	constructor() {
+		/** Child's current name */
+		this.slaveName = "blank";
+		/** Child's current surname
+		 * @type {string|number} */
+		this.slaveSurname = 0;
+		/** Child's original name */
+		this.birthName = "blank";
+		/** Child's original surname
+		* @type {string|number} */
+		this.birthSurname = 0;
+		/** Slave sex ("XX", "XY") */
+		this.genes = "XX";
+		/** @type {number} */
+		this.pronoun = App.Data.Pronouns.Kind.female;
+		/** Game week slave was acquired.
+		*
+		* _0: Obtained prior to game start / at game start_ */
+		this.weekAcquired = 0;
+		/** Child's origin
+		* @type {string|number} */
+		this.origin = "$He was born and raised in your arcology.";
+		/** Career prior to enslavement
+		* @type {string|number} */
+		this.career = 0;
+		/** Child's ID */
+		this.ID = 0;
+		/**
+		 * TODO:
+		 * Child's relationship
+		 * * -3: married to you
+		 * * -2: emotionally bound to you
+		 * * -1: emotional slut
+		 * * 0: none
+		 * * 1: friends with relationshipTarget
+		 * * 2: best friends with relationshipTarget
+		 * * 3: friends with benefits with relationshipTarget
+		 * * 4: lover with relationshipTarget
+		 * * 5: relationshipTarget 's slave wife
+		 */
+		this.relationship = 0;
+		/** Target of relationship (ID) */
+		this.relationshipTarget = 0;
+		/**
+		* Child's rivalry
+		* * 0: none
+		* * 1: dislikes rivalryTarget
+		* * 2: rival of rivalryTarget
+		* * 3: bitterly hates rivalryTarget
+		*/
+		this.rivalry = 0;
+		/** Target of rival (ID) */
+		this.rivalryTarget = 0;
+		/** Slave will serve subTarget (ID) */
+		this.subTarget = 0;
+		this.father = 0;
+		this.mother = 0;
+		this.daughters = 0;
+		this.sisters = 0;
+		this.canRecruit = 0;
+		/**
+		* can slave choose own assignment
+		*
+		* 0: no; 1: yes */
+		this.choosesOwnAssignment = 0;
+		/** Child's assignment
+		 * TODO:
+		*/
+		this.assignment = Job.REST;
+		/** How far along slave is with being trained (skills, flaws, quirks)
+		 * TODO:
+		*/
+		this.training = 0;
+		/** Week she was born (int between 0-51) */
+		this.birthWeek = jsRandom(0, 51);
+		/** How old she really is. */
+		this.actualAge = 18;
+		/** How old her body looks. */
+		this.visualAge = 18;
+		/** How old her body is. */
+		this.physicalAge = 18;
+		/** How old her ovaries are. (used to trick menopause) */
+		this.ovaryAge = 18;
+		/** Has had facial surgery to reduce age. 0: no, 1: yes */
+		this.ageImplant = 0;
+		this.health = {
+			/**
+			* Child's health
+			* * -90 - : On the edge of death
+			* * -90 - -51: Extremely unhealthy
+			* * -50 - -21: Unhealthy
+			* * -20 -  20: Healthy
+			* * 21  -  50: Very healthy
+			* * 50  -  90: Extremely healthy
+			* * 90  -  : Unnaturally healthy
+			*/
+			condition: 0,
+			/** Child's short term health damage */
+			shortDamage: 0,
+			/** Child's long term health damage */
+			longDamage: 0,
+			/**
+			* Child's current illness status
+			* * 0 : Not ill
+			* * 1 : A little under the weather
+			* * 2 : Minor illness
+			* * 3 : Ill
+			* * 4 : serious illness
+			* * 5 : dangerous illness
+			*/
+			illness: 0,
+			/**
+			* Child's current level of exhaustion
+			* * 0  - 50 : Perfectly fine
+			* * 50 - 80 : tired
+			* * 80 - 100 : exhausted
+			*/
+			tired: 0,
+			/** Child's combined health (condition - short - long) */
+			health: 0
+		};
+		/**
+		* slave has a minor injury ("black eye", "bruise", "split lip")
+		* @type {number | string}
+		*/
+		this.minorInjury = 0;
+		/**
+		* slave 's trust.
+		* * -96-: abjectly terrified
+		* * -95 - -51: terrified
+		* * -50 - -21: frightened
+		* * -20 - 20: fearful
+		* * 21 - 50: careful
+		* * 51 - 95: trusting
+		* * 96+: profoundly trusting
+		*/
+		this.trust = 0;
+		/** Used to calculate trust loss/gain */
+		this.oldTrust = 0;
+		/**
+		* slave 's devotion
+		* * -96 - : hate-filled
+		* * -95 - -51: hateful
+		* * -50 - -21: reluctant
+		* * -20 - 20: careful
+		* * 21 - 50: accepting
+		* * 51 - 95: devoted
+		* * 96+: worshipful */
+		this.devotion = 0;
+		/** Used to calculate devotion loss/gain */
+		this.oldDevotion = 0;
+		/**
+			* slave 's weight
+			* * 191+: dangerously obese
+			* * 190 - 161: super obese
+			* * 160 - 131: obese
+			* * 130 - 96: fat
+			* * 95 - 31: overweight
+			* * 30 - 11: curvy
+			* * 10 - -10: neither too fat nor too skinny
+			* * -11 - -30: thin
+			* * -31 - -95: very thin
+			* * -96 - : emaciated
+			*/
+		this.weight = 0;
+		/**
+		* slave 's muscles
+		* * 96+ : extremely muscular
+		* * 31 - 95: muscular
+		* * 6 - 30: toned
+		* * -5 - 5: none
+		* * -30 - -6: weak
+		* * -95 - -31: very weak
+		* * -96- : frail
+		*/
+		this.muscles = 0;
+		/**
+		* Child's height in cm
+		* * < 150: petite
+		* * 150 - 159: short
+		* * 160 - 169: average
+		* * 170 - 185: tall
+		* * 186+ : very tall
+		*/
+		this.height = 170;
+		/** Slave has height implant
+		* -1: -10 cm, 0: none, 1: +10 cm */
+		this.heightImplant = 0;
+		/** Child's nationality */
+		this.nationality = "slave";
+		/** Child's race */
+		this.race = "white";
+		/** Child's original race */
+		this.origRace = "white";
+		/**
+		* slave markings
+		* * "beauty mark"
+		* * "birthmark"
+		* * "freckles"
+		* * "heavily freckled"
+		*/
+		this.markings = "none";
+		/**
+		 * Eyes of the slave.
+		 * @type {App.Entity.EyeState}
+		 */
+		this.eye = new App.Entity.EyeState();
+		/** "none", "glasses", "blurring glasses", "corrective glasses", "blurring contacts", "corrective contacts" */
+		this.eyewear = "none";
+		/** Slave hearing
+		*
+		* -2: deaf; -1: hard of hearing; 0: normal */
+		this.hears = 0;
+		/** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs" */
+		this.earwear = "none";
+		/** Is there an inner ear implant device
+		* 0: no; 1: yes */
+		this.earImplant = 0;
+		/** The shape of their outer ears
+			* "none", "damaged", "normal", "pointy", "elven", "ushi" */
+		this.earShape = "normal";
+		/** Type of kemonomimi ears if any
+			* "neko", "inu", "kit", "tanuki", "usagi" */
+		this.earT = "none";
+		/** Kemonomimi ear color
+			* "hairless" */
+		this.earTColor = "hairless";
+		/** Sense of smell
+		0 - yes, -1 - no */
+		this.smells = 0;
+		/** Sense of taste
+		0 - yes, -1 - no */
+		this.tastes = 0;
+		/** Horn type if any
+			* "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */
+		this.horn = "none";
+		/** Horn color */
+		this.hornColor = "none";
+		/** Type of tail installed
+			* "none", "mod", "combat", "sex"*/
+		this.tail = "none";
+		/**
+			* Does she have a tail interface installed
+			* * 0: no
+			* * 1: yes
+			*/
+		this.PTail = 0;
+		/** The current shape of their modular tail
+			* "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma" */
+		this.tailShape = "none";
+		/** Tail color */
+		this.tailColor = "none";
+		/** Child's original hair color, defaults to their initial hair color. */
+		this.origHColor = "brown";
+		/** Hair color */
+		this.hColor = "brown";
+		/** Pubic hair color */
+		this.pubicHColor = "brown";
+		/** Armpit hair style */
+		this.underArmHColor = "brown";
+		/** eyebrowHColor*/
+		this.eyebrowHColor = "brown";
+		/** Child's original skin color. */
+		this.origSkin = "light";
+		/** Skin color */
+		this.skin = "light";
+		/**
+		* hair length
+		* * 150: calf-length
+		* * 149-100: ass-length
+		* * 99-30: long
+		* * 29-10: shoulder-length
+		* * 9-0: short
+		*/
+		this.hLength = 60;
+		/**
+		* eyebrow thickness
+		* * "pencil-thin"
+		* * "thin"
+		* * "threaded"
+		* * "natural"
+		* * "tapered"
+		* * "thick"
+		* * "bushy"
+		*/
+		this.eyebrowFullness = "natural";
+		/** Hair style */
+		this.hStyle = "short";
+		/** Pubic hair style */
+		this.pubicHStyle = "neat";
+		/** Armpit hair style */
+		this.underArmHStyle = "neat";
+		/** EyebrowHStyle */
+		this.eyebrowHStyle = "natural";
+		/**
+		* slave waist
+		* * 96+: masculine
+		* * 95 - 41: ugly
+		* * 40 - 11: unattractive
+		* * 10 - -10: average
+		* * -11 - -40: feminine
+		* * -40 - -95: hourglass
+		* * -96-: absurd
+		*/
+		this.waist = 0;
+		/** Series of rings up the back that can be tied together. 0: no, 1: yes */
+		this.corsetPiercing = 0;
+		/**
+			* What level of prosthetic interface she has installed
+			* * 0: no interface
+			* * 1: basic interface
+			* * 2: advanced interface
+			*/
+		this.PLimb = 0;
+		/*
+		 * legs of the slave
+		 * * type:0: no leg
+		 * * type:1: has leg
+		 * * 2: simple prosthetic
+		 * * 3: artificial leg - Sex
+		 * * 4: artificial leg - Beauty
+		 * * 5: artificial leg - Combat
+		 * * 6: swiss army leg
+		 */
+		this.leg = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		};
+		/**
+		 * arms of the slave
+		 * * type:0: no arm
+		 * * type:1: has arm
+		 * * 2: simple prosthetic
+		 * * 3: artificial arm - Sex
+		 * * 4: artificial arm - Beauty
+		 * * 5: artificial arm - Combat
+		 * * 6: swiss army arm
+		 */
+		this.arm = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		};
+		/** Are heels clipped
+		*
+		* 0: no, 1: yes */
+		this.heels = 0;
+		/** Slave voice
+		*
+		* 0: mute, 1: deep, 2: feminine, 3: high, girly */
+		this.voice = 2;
+		/** Has voice implant
+		*
+		* 0: no; 1: yes, high; -1: yes, low */
+		this.voiceImplant = 0;
+		/** Has cybernetic voicebox
+		*
+		* 0: no; 1: yes */
+		this.electrolarynx = 0;
+		/**
+		* slave accent
+		* * 0: none
+		* * 1: attractive
+		* * 2: heavy
+		* * 3: does not speak language
+		*/
+		this.accent = 0;
+		/**
+		* shoulder width
+		* * -2: very narrow
+		* * -1: narrow
+		* * 0: feminine
+		* * 1: broad
+		* * 2: very broad
+		*/
+		this.shoulders = 0;
+		/**
+		* has shoulder implant
+		*
+		* * -1: shoulders -1
+		* * 0: none
+		* * 1: shoulders +1
+		*/
+		this.shouldersImplant = 0;
+		/**
+			*  slave boob size (in cc)
+			* * 0-299	- flat;
+			* * 300-399   - A-cup;
+			* * 400-499   - B-cup
+			* * 500-649   - C-cup
+			* * 650-799   - D-cup
+			* * 800-999   - DD-cup
+			* * 1000-1199 - F-cup
+			* * 1200-1399 - G-cup
+			* * 1400-1599 - H-cup
+			* * 1600-1799 - I-cup
+			* * 1800-2049 - J-cup
+			* * 2050-2299 - K-cup
+			* * 2300-2599 - L-cup
+			* * 2600-2899 - M-cup
+			* * 2900-3249 - N-cup
+			* * 3250-3599 - O-cup
+			* * 3600-3949 - P-cup
+			* * 3950-4299 - Q-cup
+			* * 4300-4699 - R-cup
+			* * 4700-5099 - S-cup
+			* * 5100-5499 - T-cup
+			* * 5500-6499 - U-cup
+			* * 6500-6999 - V-cup
+			* * 7000-7499 - X-cup
+			* * 7500-7999 - Y-cup
+			* * 8000-8499 - Z-cup
+			* * 8500-14999 - obscenely massive
+			* * 15000-24999 - arm filling
+			* * 25000-39999 - figure dominating
+			* * 40000-54999 - beanbag sized
+			* * 55000-69999 - door jamming
+			* * 70000-89999 - hall clearing
+			* * 90000-100000 - hall jamming
+			*/
+		this.boobs = 0;
+		/** Breast engorgement from unmilked tits */
+		this.boobsMilk = 0;
+		/**
+		*  slave implant size
+		* * 0: no implants;
+		* * 1-199: small implants;
+		* * 200-399: normal implants;
+		* * 400-599: large implants;
+		* * 600+: boobsImplant size fillable implants
+		*/
+		this.boobsImplant = 0;
+		/**
+		 * Implant type
+		 * * "none"
+		 * * "normal"
+		 * * "string"
+		 * * "fillable"
+		 * * "advanced fillable"
+		 * * "hyper fillable"
+		 */
+		this.boobsImplantType = "none";
+		/**
+		* breast shape
+		* * "normal"
+		* * "perky"
+		* * "saggy"
+		* * "torpedo-shaped"
+		* * "downward-facing"
+		* * "wide-set"
+		*/
+		this.boobShape = "normal";
+		/**
+		* nipple shape
+		* * "huge"
+		* * "puffy"
+		* * "inverted"
+		* * "tiny"
+		* * "cute"
+		* * "partially inverted"
+		* * "fuckable"
+		*/
+		this.nipples = "cute";
+		/**
+		* nipple are pierced
+		* @default 0
+		* 0: none; 1: yes; 2: heavily */
+		this.nipplesPiercing = 0;
+		/** What accessory, if any, or on her nipples */
+		this.nipplesAccessory = "none";
+		/** Slave areolae
+			*
+			* 0: normal; 1: large; 2: unusually wide; 3: huge, 4: massive */
+		this.areolae = 0;
+		/** Edge of areolae are pierced
+		* @default 0
+		* 0: none; 1: yes; 2: heavy */
+		this.areolaePiercing = 0;
+		/** Slave areolae shape ("heart"; "star"; "circle") */
+		this.areolaeShape = "circle";
+		/**
+		* boobs tattoo
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string | number}
+		*/
+		this.boobsTat = 0;
+		/** Slave lactation
+		*
+		* 0: none; 1: natural; 2: implant */
+		this.lactation = 0;
+		/** How many more weeks until lactation dries up
+		*
+		* usually 2 as interactions and lact. implant reset it to 2 */
+		this.lactationDuration = 0;
+		/**
+		* odds of inducing lactation
+		*
+		* begins trying on breast play if over 10 */
+		this.induceLactation = 0;
+		/** 0: 10: not used to producing milk(no bonuses);
+		* 11: 50: used to producing milk;
+		* 51: 100: heavily adapted to producing milk(big bonus) */
+		this.lactationAdaptation = 0;
+		/**
+		*  hip size
+		* * -2: very narrow
+		* * -1: narrow
+		* * 0: normal
+		* * 1: wide hips
+		* * 2: very wide hips
+		* * 3: inhumanly wide hips
+		*/
+		this.hips = 0;
+		/** Slave has hip implant
+		*
+		* -1: hips -1; 0: none; 1: hips +1 */
+		this.hipsImplant = 0;
+		/**
+		*  butt size
+		* * 0	: flat
+		* * 1	: small
+		* * 2   : plump *
+		* * 3	: big bubble butt
+		* * 4	: huge
+		* * 5	: enormous
+		* * 6	: gigantic
+		* * 7	: ridiculous
+		* * 8 - 10: immense
+		* * 11 - 20: inhuman
+		*
+		* _* Descriptions vary for just how big 2 is, as such, it may be better to just go with 3_
+		*/
+		this.butt = 0;
+		/**
+		* butt implant type and size
+		*
+		* * 0: none
+		* * 1: butt implant
+		* * 2: big butt implant
+		* * 3: fillable butt implants
+		* * 5 - 8: advanced fillable implants
+		* * 9+: hyper fillable implants
+		*/
+		this.buttImplant = 0;
+		/**
+		 * Implant type
+		 * * "none"
+		 * * "normal"
+		 * * "string"
+		 * * "fillable"
+		 * * "advanced fillable"
+		 * * "hyper fillable"
+		 */
+		this.buttImplantType = "none";
+		/**
+		* butt tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.buttTat = 0;
+		/**
+		* face attractiveness
+		*
+		* * -96 - : very ugly
+		* * -95 - -41: ugly
+		* * -40 - -11: unattractive
+		* * -10 - 10: attractive
+		* * 11 - 40: very pretty
+		* * 41 - 95: gorgeous
+		* * 96+: mind blowing
+		*/
+		this.face = 0;
+		/**
+		* facial surgery degree
+		*
+		* * 0 - 14: none
+		* * 15 - 34: Subtle Improvements
+		* * 35 - 64: Noticeable Work
+		* * 65 - 99: Heavily Reworked
+		* * 100: Uncanny Valley
+		*/
+		this.faceImplant = 0;
+		/**
+		* accepts string (will be treated as "normal")
+		* * "normal"
+		* * "masculine"
+		* * "androgynous"
+		* * "cute"
+		* * "sensual"
+		* * "exotic"
+		*/
+		this.faceShape = "normal";
+		/**
+		* lip size (0 - 100)
+		* * 0 - 10: thin
+		* * 11 - 20: normal
+		* * 21 - 40: pretty
+		* * 41 - 70: plush
+		* * 71 - 95: huge(lisps)
+		* * 96 - 100: facepussy(mute)
+		*/
+		this.lips = 15;
+		/**
+		* how large her lip implants are
+		* @see lips
+		*/
+		this.lipsImplant = 0;
+		/**
+		* lips pierced
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.lipsPiercing = 0;
+		/**
+		* lip tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "permanent makeup"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.lipsTat = 0;
+		/**
+		* teeth type
+		* * "normal"
+		* * "crooked"
+		* * "straightening braces"
+		* * "cosmetic braces"
+		* * "removable"
+		* * "pointy"
+		* * "baby"
+		* * "mixed"
+		*/
+		this.teeth = "normal";
+		/**
+		* has tongue piercing
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.tonguePiercing = 0;
+		/**
+		* vagina type
+		* * -1: no vagina
+		* * 0: virgin
+		* * 1: tight
+		* * 2: reasonably tight
+		* * 3: loose
+		* * 4: cavernous
+		* * 10: ruined
+		*/
+		this.vagina = 0;
+		/** How wet she is
+		*
+		* 0: dry; 1: wet; 2: soaking wet */
+		this.vaginaLube = 0;
+		/** Has vagina piercing
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.vaginaPiercing = 0;
+		/**
+		* vagina tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.vaginaTat = 0;
+		/**
+		* pregnancy time or state.See Pregnancy Control section for more.
+		* * -3: sterilized
+		* * -2: sterile
+		* * -1: contraceptives
+		* * 0: fertile
+		* * 1 - 10: pregnant, not showing
+		* * 11 - 20: showing
+		* * 21 - 30: pregnant
+		* * 30 - 35: very pregnant
+		*/
+		this.preg = -1;
+		/**
+			* accepts ID See Pregnancy Control section for more.
+			*
+			* Who sired her pregnancy
+			* * -9: a futanari sister
+			* * -8: an animal
+			* * -7: designer baby
+			* * -6: a member of the Societal Elite
+			* * -5: one of your clients
+			* * -4: another arcology owner
+			* * -3: your former Master
+			* * -2: citizen of your arcology
+			* * -1: you
+			* * 0: Unidentifiable
+			*/
+		this.pregSource = 0;
+		/**
+		* Number of children.
+		*
+		* **Warning!** Should be not changed after initial impregnation setup.
+		* See Pregnancy Control section for more.
+		*/
+		this.pregType = 0;
+		/**
+		* Number of ready to be impregnated ova (override normal cases),
+		*
+		* For delayed impregnations with multiples.Used onetime on next call of the SetPregType
+		* widget. After SetPregType use it to override .pregType, it set back to 0 automatically.
+		*/
+		this.pregAdaptation = 50;
+		/**
+		* Ovary implant type.
+		*
+		* * 0: no implants
+		* * "fertility": higher chance of twins (or more)
+		* * "sympathy": doubles eggs released
+		* * "asexual": self-fertilizing
+		*/
+		this.ovaImplant = 0;
+		/**
+		* Womb focused enhancements.
+		*
+		* * "none"
+		* * "restraint": Provides structural support for extremely oversized pregnancies
+		*/
+		this.wombImplant = "none";
+		/**
+			* Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period
+			*
+			* * 0: no
+			* * 1: yes
+			*/
+		this.fertKnown = 0;
+		/**
+			* Menstrual cycle control variable.
+			*
+			* * 0: Danger week
+			* * 1+: safe week
+			*/
+		this.fertPeak = 0;
+		/**
+			* has the slave been turned into a broodmother
+			*
+			* * 0: no
+			* * 1: standard 1 birth / week
+			* * 2: black market 12 births / week
+			* * 3: black market upgrade for implant firmware, to allow change weekly number
+			* of ova in range of 1 to 12 in remote surgery block. (broodmotherFetuses change
+			* through remote surgery). (future usage)
+			*/
+		this.broodmother = 0;
+		/**
+			* count of ova that broodmother implant force to release.
+			*
+			* Should be set with "broodmother" property together. If broodmother === 0 has no meaning.
+			*/
+		this.broodmotherFetuses = 0;
+		/**
+		* If broodmother implant set to pause it 's work.
+		*
+		* 1: implant on pause !1: working.
+		*
+		* If broodmother birth her last baby and her implant is on pause, she will be in contraception like state.
+		*/
+		this.broodmotherOnHold = 0;
+		/**
+		* Number of weeks left until last baby will be birthed.
+		*
+		* Mainly informative only. Updated automatically at birth process based on remaining fetuses. 0 - 37
+		*/
+		this.broodmotherCountDown = 0;
+		/**
+		* variable used to set off the birth events
+		*
+		* 1: birth this week; 0: not time yet */
+		this.labor = 0;
+		/**
+		* may accept strings, use at own risk
+		*
+		* * "none"
+		* * "a small empathy belly"
+		* * "a medium empathy belly"
+		* * "a large empathy belly"
+		* * "a huge empathy belly"
+		* * "a corset"
+		* * "an extreme corset"
+		*/
+		this.bellyAccessory = "none";
+		/**
+		* labia type
+		* * 0: minimal
+		* * 1: big
+		* * 2: huge
+		* * 3: huge dangling
+		*/
+		this.labia = 0;
+		/**
+		* clit size
+		* * 0: normal
+		* * 1: large
+		* * 2: huge
+		* * 3: enormous
+		* * 4: penis-like
+		* * 5: like a massive penis
+		*/
+		this.clit = 0;
+		/**
+		* is clit pierced
+		* * 0: no
+		* * 1: yes
+		* * 2: heavy
+		* * 3: smart
+		*/
+		this.clitPiercing = 0;
+		/**
+		* smart piercing setting
+		* * "off"
+		* * "none"
+		* * "all"
+		* * "no default setting"
+		* * "women"
+		* * "men"
+		* * "vanilla"
+		* * "oral"
+		* * "anal"
+		* * "boobs"
+		* * "submissive"
+		* * "humiliation"
+		* * "pregnancy"
+		* * "dom"
+		* * "masochist"
+		* * "sadist"
+		*/
+		this.clitSetting = "vanilla";
+		/** 0: circumcised; 1+:uncut, also affects foreskin size */
+		this.foreskin = 0;
+		/**
+		* anus size
+		* * 0: virgin
+		* * 1: tight
+		* * 2: loose
+		* * 3: very loose
+		* * 4: gaping
+		*/
+		this.anus = 0;
+		/**
+		* dick size
+		* * 0: none
+		* * 1: tiny
+		* * 2: little
+		* * 3: normal
+		* * 4: big
+		* * 5: huge
+		* * 6: gigantic
+		* * 7: massive/gigantic
+		* * 8: truly imposing/titanic
+		* * 9: monstrous/absurd
+		* * 10: awe-inspiring/inhuman
+		* * 11+: hypertrophied
+		*/
+		this.dick = 0;
+		/** Used to calculate size of area around anus. */
+		this.analArea = 1;
+		/**
+		* is dick pierced
+		* * 0: no
+		* * 1: yes
+		* * 2: heavy
+		*/
+		this.dickPiercing = 0;
+		/**
+		* dick tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.dickTat = 0;
+		/**
+		* does the slave have a prostate?
+		* * 0: no
+		* * 1: normal
+		* * 2: hyperstimulated +20%
+		* * 3: modified hyperstimulated +50%
+		*/
+		this.prostate = 0;
+		/**
+		* ball size
+		* * 0: none
+		* * 1: vestigial
+		* * 2: small
+		* * 3: average
+		* * 4: large
+		* * 5: massive
+		* * 6: huge
+		* * 7: giant
+		* * 8: enormous
+		* * 9: monstrous
+		* * 10: inhuman
+		* * 11+: hypertrophied
+		*/
+		this.balls = 0;
+		/**
+			* scrotum size
+			*
+			* function relative to .balls
+			*
+			* *If .balls > 0 and .scrotum === 0, balls are internal*
+			*/
+		this.scrotum = 0;
+		/** Has ovaries
+		*
+		* 0: no; 1: yes */
+		this.ovaries = 0;
+		/** Has anus piercing
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.anusPiercing = 0;
+		/**
+		* anus tattoo
+		*
+		* takes one of the following strings or 0
+		* * "bleached"
+		* * "tribal patterns"
+		* * "flowers"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.anusTat = 0;
+		/**
+		* has makeup
+		* * 0: none
+		* * 1: minimal
+		* * 2: expensive, luxurious
+		* * 3: color-coordinated with hair
+		* * 4: heavy
+		* * 5: neon
+		* * 6: color-coordinated neon
+		* * 7: metallic
+		* * 8: color-coordinated metallic
+		*/
+		this.makeup = 0;
+		/**
+		* nail type
+		* * 0: neatly clipped
+		* * 1: long and elegant
+		* * 2: color-coordinated with hair
+		* * 3: sharp and claw-like
+		* * 4: bright and glittery
+		* * 5: very long and garish
+		* * 6: neon
+		* * 7: color-coordinated neon
+		* * 8: metallic
+		* * 9: color-coordinated metallic
+		*/
+		this.nails = 0;
+		/**
+			* brand
+			*
+			* @type {Object.<string, string>} */
+		this.brand = {};
+		/** Has pierced ears
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.earPiercing = 0;
+		/** Has pierced nose
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.nosePiercing = 0;
+		/** Has eyebrow piercing
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.eyebrowPiercing = 0;
+		/** Has navel piercing
+		*
+		* 0: no; 1: yes; 2: heavy */
+		this.navelPiercing = 0;
+		/**
+		* shoulder tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.shouldersTat = 0;
+		/**
+		* arm tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.armsTat = 0;
+		/**
+		* leg tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		*  @type {string|number} */
+		this.legsTat = 0;
+		/**
+		* back tattoo
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.backTat = 0;
+		/**
+		* tramp stamp
+		*
+		* takes one of the following strings or 0
+		* * "tribal patterns"
+		* * "flowers"
+		* * "scenes"
+		* * "Asian art"
+		* * "degradation"
+		* * "counting"
+		* * "advertisements"
+		* * "rude words"
+		* * "bovine patterns"
+		* * "sacrament"
+		* * "Sacrilege"
+		* * "Possessive"
+		* * "Paternalist"
+		* @type {string|number} */
+		this.stampTat = 0;
+		/** rules */
+		this.rules = new App.Entity.RuleState();
+		/** Follows rules or is exempt from them
+		*
+		* 0: exempt; 1: obeys */
+		this.useRulesAssistant = 1;
+		/**
+		* * "healthy"
+		* * "restricted"
+		* * "muscle building"
+		* * "fattening"
+		* * "slimming"
+		* * "XX"
+		* * "XY"
+		* * "XXY"
+		* * "cum production"
+		* * "cleansing"
+		* * "fertility"
+		*/
+		this.diet = "healthy";
+		/** How much of her diet is cum
+		*
+		* 0: none; 1: supplemented; 2: nearly entirely */
+		this.dietCum = 0;
+		/** How much of her diet is milk
+		*
+		* 0: none; 1: supplemented; 2: nearly entirely */
+		this.dietMilk = 0;
+		/**
+		* * -2: heavy male hormones
+		* * -1: male hormones
+		* * 0: none
+		* * 1: female hormones
+		* * 2: heavy female hormones
+		*/
+		this.hormones = 0;
+		/**
+		* * "no drugs"
+		* * "breast injections"
+		* * "butt injections"
+		* * "lip injections"
+		* * "fertility drugs"
+		* * "penis enhancement"
+		* * "testicle enhancement"
+		* * "psychosuppressants"
+		* * "steroids"
+		* * "hormone enhancers"
+		* * "hormone blockers"
+		* * "super fertility drugs"
+		* * "hyper breast injections"
+		* * "hyper butt injections"
+		* * "hyper penis enhancement"
+		* * "hyper testicle enhancement"
+		* * "female hormone injections"
+		* * "male hormone injections"
+		* * "anti-aging cream"
+		* * "appetite suppressors"
+		* * "penis atrophiers"
+		* * "testicle atrophiers"
+		* * "clitoris atrophiers"
+		* * "labia atrophiers"
+		* * "nipple atrophiers"
+		* * "nipple enhancers"
+		* * "lip atrophiers"
+		* * "breast redistributors"
+		* * "butt redistributors"
+		* * "sag-B-gone"
+		* * "growth stimulants"
+		*/
+		this.drugs = "no drugs";
+		/**
+		 * * "none"
+		 * * "preventatives"
+		 * * "curatives"
+		 */
+		this.curatives = "none";
+		/** If greater than 10 triggers side effects from drug use. */
+		this.chem = 0;
+		/**
+		 * * "none"
+		 * * applied
+		 * * "extreme"
+		 * * "anaphrodisiacs"
+		 */
+		this.aphrodisiacs = "none";
+		/**
+		 * TODO:
+		* how addict to aphrodisiacs slave is
+		* * 0: not
+		* * 1-2: new addict
+		* * 3-9: confirmed addict
+		* * 10+: dependent
+		*/
+		this.addict = 0;
+		/** 0: no; 1: yes */
+		this.choosesOwnClothes = 0;
+		/**
+			* may accept strings, use at own risk
+			*
+			* * "choosing her own clothes"
+			* * "no clothing"
+			* * "a ball gown"
+			* * "a mini dress"
+			* * "an oversized t-shirt"
+			* * "a schoolgirl outfit"
+			* * "a slave gown"
+			* * "a sweater"
+			* * "a t-shirt"
+			*/
+		this.clothes = "no clothing";
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "ancient Egyptian"
+			* * "cruel retirement counter"
+			* * "uncomfortable leather"
+			* * "tight steel"
+			* * "shock punishment"
+			* * "dildo gag"
+			* * "heavy gold"
+			* * "pretty jewelry"
+			* * "nice retirement counter"
+			* * "bell collar"
+			* * "leather with cowbell"
+			* * "bowtie"
+			* * "neck corset"
+			* * "stylish leather"
+			* * "satin choker"
+			* * "preg biometrics"
+			* * "massive dildo gag"
+			* * "silk ribbon"
+			* * "ball gag"
+			* * "bit gag"
+			* * "ring gag"
+			* * "porcelain mask"
+			*/
+		this.collar = "none";
+		/**
+		* may accept strings, use at own risk
+		* * "none"
+		* * "heels"
+		* * "pumps"
+		* * "extreme heels"
+		* * "boots"
+		* * "flats"
+		*/
+		this.shoes = "none";
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "bullet vibrator"
+			* * "smart bullet vibrator"
+			* * "dildo"
+			* * "large dildo"
+			* * "huge dildo"
+			* * "long dildo"
+			* * "long, large dildo"
+			* * "long, huge dildo"
+			*/
+		this.vaginalAccessory = "none";
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "vibrator"
+			*/
+		this.vaginalAttachment = "none";
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "sock"
+			* * "vibrator"
+			*/
+		this.dickAccessory = "none";
+		/**
+			* whether the slave has a chastity device on their anus
+			* 0 - no
+			* 1 - yes
+			*/
+		this.chastityAnus = 0;
+		/**
+			* whether the slave has a chastity device on their penis
+			* 0 - no
+			* 1 - yes
+			*/
+		this.chastityPenis = 0;
+		/**
+			* whether the slave has a chastity device on their vagina
+			* 0 - no
+			* 1 - yes
+			*/
+		this.chastityVagina = 0;
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "hand gloves"
+			* * "elbow gloves"
+			*/
+		this.armAccessory = "none";
+		/**
+			* may accept strings, use at own risk
+			* * "none"
+			* * "short stockings"
+			* * "long stockings"
+			*/
+		this.legAccessory = "none";
+		/**
+		* may accept strings, use at own risk
+		* * "none"
+		* * "plug"
+		* * "large plug"
+		* * "huge plug"
+		* * "long plug"
+		* * "long, large plug"
+		* * "long, huge plug"
+		*/
+		this.buttplug = "none";
+		/**
+		* Does the slave have an attachment on their buttplug
+		*
+		*  may accept strings, use at own risk
+		* * "none"
+		* * "tail"
+		* * "fox tail"
+		* * "cat tail"
+		* * "cow tail"
+		*/
+		this.buttplugAttachment = "none";
+		/**
+		* slave intelligence
+		* * -100 - -96: borderline retarded
+		* * -95 - -51: very slow
+		* * -50 - -16: slow
+		* * -15 - 15: average
+		* * 16 - 50: smart
+		* * 51 - 95: very smart
+		* * 96 - 100: brilliant
+		*/
+		this.intelligence = 0;
+		/**
+		* Degree of slave 's education
+		* * 0: uneducated
+		* * 1+: partial education (not really used)
+		* * 15+: educated
+		* * 30: well educated
+		*/
+		this.intelligenceImplant = 0;
+		/**
+		* sex drive
+		* * 0 - 20: no sex drive
+		* * 21 - 40: poor sex drive
+		* * 41 - 60: average sex drive
+		* * 61 - 80: good sex drive
+		* * 81 - 95: powerful sex drive
+		* * 96+: nymphomaniac
+		*/
+		this.energy = 50;
+		/**
+			* The amount of sex the slave had with customers for certain jobs during a week
+			*/
+		this.sexAmount = 0;
+		/**
+			* The 'quality' of the sex a slave had with customers. High quality means they fetch a higher price for their services
+			*/
+		this.sexQuality = 0;
+		/**
+			* how badly she needs sex.
+			*
+			*  0: sated
+			*/
+		this.need = 0;
+		/**
+		* attraction to women
+		* * 0 - 5: disgusted by women
+		* * 6 - 15: turned off by women
+		* * 15 - 35: not attracted to women
+		* * 36 - 65: indifferent to women
+		* * 66 - 85: attracted to women
+		* * 86 - 95: aroused by women
+		* * 96+: passionate about women
+		*
+		* *if both attrXX and attrXY > 95, slave will be omnisexual*
+		*
+		* *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac*
+		*/
+		this.attrXX = 0;
+		/**
+			* attraction to men
+			* * 0 - 5: disgusted by men
+			* * 6 - 15: turned off by men
+			* * 15 - 35: not attracted to men
+			* * 36 - 65: indifferent to men
+			* * 66 - 85: attracted to men
+			* * 86 - 95: aroused by men
+			* * 96+: passionate about men
+			*
+			* *if both attrXX and attrXY > 95, slave will be omnisexual*
+			*
+			* *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac*
+			*/
+		this.attrXY = 0;
+		/** 0: no; 1: yes */
+		this.attrKnown = 0;
+		/**
+		* * "none"
+		* * "mindbroken"
+		* * "submissive"
+		* * "cumslut"
+		* * "humiliation"
+		* * "buttslut"
+		* * "boobs"
+		* * "sadist"
+		* * "masochist"
+		* * "dom"
+		* * "pregnancy"
+		*/
+		this.fetish = "none";
+		/** How strong her fetish is (10-100)
+		*
+		* 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */
+		this.fetishStrength = 70;
+		/** Is fetish known to player
+		*
+		* 0: no; 1: yes */
+		this.fetishKnown = 0;
+		/**
+		* * "none"
+		* * "arrogant": clings to her dignity, thinks slavery is beneath her
+		* * "bitchy": can 't keep her opinions to herself
+		* * "odd": says and does odd things
+		* * "hates men": hates men
+		* * "hates women": hates women
+		* * "gluttonous": likes eating, gains weight
+		* * "anorexic": dislikes eating and being forced to eat, loses weight
+		* * "devout": resistance through religious faith
+		* * "liberated": believes slavery is wrong
+		*/
+		this.behavioralFlaw = "none";
+		/**
+		* * "none"
+		* * "confident": believes she has value as a slave
+		* * "cutting": often has as witty or cunning remark ready, knows when to say it
+		* * "funny": is funny
+		* * "fitness": loves working out
+		* * "adores women": likes spending time with women
+		* * "adores men": likes spending time with men
+		* * "insecure": defines herself on the thoughts of others
+		* * "sinful": breaks cultural norms
+		* * "advocate": advocates slavery
+		*/
+		this.behavioralQuirk = "none";
+		/**
+		* * "none"
+		* * "hates oral": hates oral sex
+		* * "hates anal": hates anal sex
+		* * "hates penetration": dislikes penetrative sex
+		* * "shamefast": nervous when naked
+		* * "idealistic": believes sex should be based on love and consent
+		* * "repressed": dislikes sex
+		* * "apathetic": inert during sex
+		* * "crude": sexually crude and has little sense of what partners find disgusting during sex
+		* * "judgemental": sexually judgemental and often judges her sexual partners' performance
+		* * "neglectful": disregards herself in sex
+		* * "cum addict": addicted to cum
+		* * "anal addict": addicted to anal
+		* * "attention whore": addicted to being the center of attention
+		* * "breast growth": addicted to her own breasts
+		* * "abusive": sexually abusive
+		* * "malicious": loves causing pain and suffering
+		* * "self hating": hates herself
+		* * "breeder": addicted to being pregnant
+		*/
+		this.sexualFlaw = "none";
+		/**
+		* * "none"
+		* * "gagfuck queen": can take a facefucking
+		* * "painal queen": knows how far she can go without getting hurt
+		* * "strugglefuck queen": knows how much resistance her partners want
+		* * "tease": is a tease
+		* * "romantic": enjoys the closeness of sex
+		* * "perverted": enjoys breaking sexual boundaries
+		* * "caring": enjoys bring her partners to orgasm
+		* * "unflinching": willing to do anything
+		* * "size queen": prefers big cocks
+		*/
+		this.sexualQuirk = "none";
+		/** 0: does not have; 1: carrier; 2: active
+			* * heterochromia is an exception. String = active
+			*/
+		this.geneticQuirks = {
+			/** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */
+			macromastia: 0,
+			/** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced.
+			*
+			* **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
+			gigantomastia: 0,
+			/** Is prone to having twins, shorter pregnancy recovery rate */
+			fertility: 0,
+			/** Is prone to having multiples, even shorter pregnancy recovery rate
+			*
+			* **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */
+			hyperFertility: 0,
+			/** Pregnancy does not block ovulation, slave can become pregnant even while pregnant */
+			superfetation: 0,
+			/** Is abnormally tall. gigantism + dwarfism - is very average*/
+			gigantism: 0,
+			/** Is abnormally short. gigantism + dwarfism - is very average*/
+			dwarfism: 0,
+			/** Has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
+			pFace: 0,
+			/** Has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
+			uFace: 0,
+			/** Has pale skin, white hair and red eyes */
+			albinism: 0,
+			/** May have mismatched eyes */
+			heterochromia: 0,
+			/** Ass never stops growing. Increased growth rate, reduced shrink rate. */
+			rearLipedema: 0,
+			/** Has (or will have) a huge dong */
+			wellHung: 0,
+			/** Constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
+			wGain: 0,
+			/** Constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
+			wLoss: 0,
+			/** Body attempts to normalize to an androgynous state */
+			androgyny: 0,
+			/** Constantly gains muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss aplified, passively lose muscle unless building */
+			mGain: 0,
+			/** Constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss aplified, passively lose muscle unless building */
+			mLoss: 0,
+			/** Slave can only ever birth girls */
+			girlsOnly: 0
+		};
+		/** Counts various acts slave participated in */
+		this.counter = new App.Entity.ChildActionsCountersState();
+		/** Values provided by players */
+		this.custom = new App.Entity.ChildCustomAddonsState();
+		/** Does this slave refer to you rudely?
+		*
+		* 0: not being rude; 1: insists on calling you a rude title */
+		this.rudeTitle = 0;
+		/** @type {string[]} */
+		this.currentRules = [];
+		/**
+		* Child has a tattoo that is only recognizable when she has a big belly.
+		* * "a heart"
+		* * "a star"
+		* * "a butterfly"
+		* @type {string|number} */
+		this.bellyTat = 0;
+		/**
+			* Child has a series of tattoos to denote how many abortions she has had.
+			* * -1: no tattoo
+			* *  0: assigned to have tattoo, may not have one yet
+			* * 1+: number of abortion tattoos she has
+			*/
+		this.abortionTat = -1;
+		/**
+			* Child has a series of tattoos to denote how many times she has given birth.
+			* * -1: no tattoo
+			* *  0: assigned to have tattoo, may not have one yet
+			* * 1+: number of birth tattoos she has
+			*/
+		this.birthsTat = -1;
+		/** Child will give birth this week.
+		*
+		* 1: true; 0: false */
+		this.induce = 0;
+		/** Male slave has an anal womb and can get pregnant.
+		*
+		* 1: true; 0: false */
+		this.mpreg = 0;
+		/** How much fluid is distending the slave.
+		*
+		* 1: 2L; 2: 4L; 3: 8L */
+		this.inflation = 0;
+		/**
+		* What kind of fluid is in the slave.
+		* * "none"
+		* * "water"
+		* * "cum"
+		* * "milk"
+		* * "food"
+		* * "aphrodisiac"
+		* * "curative"
+		* * "tightener"
+		* * "urine"
+		*/
+		this.inflationType = "none";
+		/**
+		* How she is being filled.
+		* * 0: not
+		* * 1: oral
+		* * 2: anal
+		* * 3: orally by another slave
+		*/
+		this.inflationMethod = 0;
+		/** If inflationMethod === 3, ID of the slave filling her with milk. */
+		this.milkSource = 0;
+		/** If inflationMethod 3, ID of the slave filling her with cum. */
+		this.cumSource = 0;
+		/** Child's internals have ruptured. Used with poor health and overinflation.
+		*
+		* 1: true; 0: false */
+		this.burst = 0;
+		/** Do you and the slave know she is pregnant.
+		*
+		* 0: no; 1: yes */
+		this.pregKnown = 0;
+		/** How long she has been pregnant
+		*
+		* used in place of .preg when pregnancy speed up and slow down are used on a slave
+		*
+		* if negative, designates postpartum. */
+		this.pregWeek = 0;
+		/**
+			* how big their belly is in CCs
+			*
+			* ||thresholds:|
+			* |-|-|
+			* 100	| bloated
+			* 1500   | early pregnancy
+			* 5000   | obviously pregnant
+			* 10000  | very pregnant
+			* 15000  | full term
+			* 30000  | full term twins
+			* 45000  | full term triplets
+			* 60000  | full term quads
+			* 75000  | full term quints
+			* 90000  | full term sextuplets
+			* 105000 | full term septuplets
+			* 120000 | full term octuplets
+			* 150000 | oversized pregnancy
+			* 300000 | hyperpreg state 1
+			* 450000 | hyperpreg state 2
+			* 600000 | hyperpreg state 3
+			* 750000 | hyperpreg state 4
+			*/
+		this.belly = 0;
+		/**
+			* how big their belly is in CCs (pregnancy only)
+			*
+			* ||thresholds|
+			* |-|-|
+			* 100	| bloated
+			* 1500   | early pregnancy
+			* 5000   | obviously pregnant
+			* 10000  | very pregnant
+			* 15000  | full term
+			* 30000  | full term twins
+			* 45000  | full term triplets
+			* 60000  | full term quads
+			* 75000  | full term quints
+			* 90000  | full term sextuplets
+			* 105000 | full term septuplets
+			* 120000 | full term octuplets
+			* 150000 | oversized pregnancy (9+ babies)
+			* 300000 | hyperpreg state 1 (20+ babies)
+			* 450000 | hyperpreg state 2 (30+ babies)
+			* 600000 | hyperpreg state 3 (40+ babies)
+			* 750000 | hyperpreg state 4 (50+ babies)
+			*/
+		this.bellyPreg = 0;
+		/**
+		* how big their belly is in CCs (fluid distension only)
+		*
+		* ||thresholds|
+		* |-|-|
+		* 100   | bloated
+		* 2000  | clearly bloated (2 L)
+		* 5000  | very full (~1 gal)
+		* 10000 | full to bursting (~2 gal)
+		*/
+		this.bellyFluid = 0;
+		/**
+			* Does the slave have a fillable abdominal implant.
+			* * -1: no
+			* * 0+: yes
+			* * 2000+: Early pregnancy
+			* * 4000+: looks pregnant
+			* * 8000+: looks full term
+			* * 16000+: hyperpregnant 1
+			* * 32000+: hyperpregnant 2
+			*/
+		this.bellyImplant = -1;
+		/** How saggy her belly is after being distended for too long.
+		*
+		* 1+ changes belly description */
+		this.bellySag = 0;
+		/** How saggy her belly is from being too pregnant.
+		*
+		* 1+ changes belly description and overrides/coincides with bellySag */
+		this.bellySagPreg = 0;
+		/**
+		* Has the slave 's belly implant been filled this week. Causes health damage for overfilling.
+		*
+		* 0: no pain; 1: will experience pain; 2: cannot be filled this week */
+		this.bellyPain = 0;
+		/** Does the slave have a cervical implant that slowly feeds cum from being fucked into a fillable implant.
+		*
+		* 0: no; 1: vaginal version only; 2: anal version only; 3: both vaginal and anal */
+		this.cervixImplant = 0;
+		/** Target .physicalAge for female puberty to occur. */
+		this.pubertyAgeXX = 13;
+		/** Has the slave gone through female puberty.
+		*
+		* 0: no; 1: yes */
+		this.pubertyXX = 0;
+		/** Target .physicalAge for male puberty to occur. */
+		this.pubertyAgeXY = 13;
+		/** Has the slave gone through male puberty.
+		*
+		* 0: no; 1: yes */
+		this.pubertyXY = 0;
+		/**
+		* not fully implemented.
+		* * 0: no scars
+		* * 1: light scarring
+		* * 2: heavy scarring
+		* * 3: fresh scarring
+		* * 4: burns
+		* * 5: menacing scar
+		* * 6: exotic scar
+		*/
+		this.scars = 0;
+		/**
+		* In a eugenics society, this slave is a designated breeder.
+		*
+		* 1: yes; 0: no */
+		this.breedingMark = 0;
+		/**  Is the Head Girl permitted to fuck this slave pregnant.
+		*
+		* 0: no; 1: yes */
+		this.HGExclude = 0;
+		/**
+		* What species of sperm she produces.
+		* * "human"
+		* * "sterile"
+		* * "dog"
+		* * "pig"
+		* * "horse"
+		* * "cow"
+		*/
+		this.ballType = "human";
+		/**
+		* What species of ovum she produces.
+		* * "human"
+		* * "dog"
+		* * "pig"
+		* * "horse"
+		* * "cow"
+		*/
+		this.eggType = "human";
+		/** Eugenics variable. Is the slave allowed to choose to wear chastity.
+		*
+		* 0: no; 1: yes */
+		this.choosesOwnChastity = 0;
+		/**
+		* Is she on gestation altering drugs?
+		* * "none"
+		* * "slow gestation"
+		* * "speed up"
+		* * "labor suppressors"
+		*/
+		this.pregControl = "none";
+		/**
+			* Array that holds a slaves fitted prosthetics. Objects are used to ensure easier expansion later (tattoos for limbs and similar).
+			*
+			* Elements of the array should be objects.
+			* * .id: ID of the prosthetic, see setup.prostheticIDs
+			* @type {Array.<{id:string}>} */
+		this.readyProsthetics = [];
+		/**  */
+		this.ageAdjust = 0;
+		/** Child has undergone hair removal surgery
+		*
+		* 0: no; 1: yes */
+		this.bald = 0;
+		/** Child is in original body.
+			*
+			* 0: yes; 1+: number of swaps (increases upkeep each time) */
+		this.bodySwap = 0;
+		/** Who, if relevant, the body belonged to. */
+		this.origBodyOwner = "";
+		/** Who, if relevant, the body belonged to. */
+		this.origBodyOwnerID = 0;
+		/** Cause of slave death. */
+		this.death = "";
+		/**
+			* Child's current hormonal balance, directs saHormones changes
+			*
+			* ||thresholds|
+			* |-|-|
+			* -500 - -400 | overwhelmingly masculine
+			* -399 - -300 | extremely masculine
+			* -299 - -200 | heavily masculine
+			* -199 - -100 | very masculine
+			* -99 - -21 | masculine
+			* -20 - 20 | neutral
+			* 21 - 99 | feminine
+			* 100 - 199 | very feminine
+			* 200 - 299 | heavily feminine
+			* 300 - 399 | extremely feminine
+			* 400 - 500 | overwhelmingly feminine
+			*/
+		this.hormoneBalance = 0;
+		/** Whether a slave is permitted to eat Hedonistic Decadence's specialized slave food.
+		*
+		* 0: no; 1: yes */
+		this.onDiet = 0;
+		/** Does the slave have the breast shape maintaining mesh implant.
+		*
+		* 0: no; 1: yes */
+		this.breastMesh = 0;
+		/** Used to denote a slave giving birth prematurely.
+		*
+		* 0: no; 1: yes */
+		this.prematureBirth = 0;
+		/** Was the slave born prematurely?
+		*
+		* 0: no; 1: yes */
+		this.premature = 0;
+		/** Has the slave had a vasectomy?
+		*
+		* 0: no; 1: yes */
+		this.vasectomy = 0;
+		/** Is the Child's hair under constant maintenance?
+		*
+		* 0: no; 1: yes */
+		this.haircuts = 0;
+		/** Used to tell if the slave is from this game or a previous.
+		*
+		* 0: no; 1: yes */
+		this.newGamePlus = 0;
+		/** Her skills */
+		this.skill = new App.Entity.ChildSkillsState();
+		/** Whether she was put in the incubator at birth
+		*
+		* 0: no; 1: yes, comforting; 2: yes, terrifying */
+		this.tankBaby = 0;
+		/** */
+		this.clone = 0;
+		/**  */
+		this.geneMods = {
+			/** Does slave have induced NCS?
+			*
+			* 0: no; 1: yes */
+			NCS: 0,
+			/** Has the slave undergone the elasticity (plasticity) treatment?
+			*
+			* 0: no; 1: yes */
+			rapidCellGrowth: 0
+		};
+		/* eslint-disable camelcase*/
+		this.NCSyouthening = 0;
+		this.override_Race = 0;
+		this.override_Skin = 0;
+		this.override_Eye_Color = 0;
+		this.override_H_Color = 0;
+		this.override_Pubic_H_Color = 0;
+		this.override_Arm_H_Color = 0;
+		this.override_Brow_H_Color = 0;
+		/** Erratic weight gain
+		*
+		* 0: stable; 1: gaining; -1: losing */
+		this.weightDirection = 0;
+		/** @type {{skin:string, eyeColor:string, hColor:string}} */
+		this.albinismOverride = null;
+		/* eslint-enable */
+		/** Amount of cash paid to acquire the slave
+		*
+		* accepts negative numbers, 0, or 1.
+		* 1: unknown price; 0: free; negative: amount paid */
+		this.slaveCost = 0;
+		/** Amount of cash you have spent because of this slave
+		*
+		* accepts negative numbers or 0 */
+		this.lifetimeCashExpenses = 0;
+		/** Total amount of cash you have earned because of this slave
+		*
+		* accepts positive numbers or 0 */
+		this.lifetimeCashIncome = 0;
+		/**  Amount of cash you have earned because of this slave last week
+		*
+		* accepts positive numbers or 0 */
+		this.lastWeeksCashIncome = 0;
+		/** Not currently used, will work similarly to the cash variables above */
+		this.lifetimeRepExpenses = 0;
+		/** Not currently used, will work similarly to the cash variables above */
+		this.lifetimeRepIncome = 0;
+		/** Not currently used, will work similarly to the cash variables above */
+		this.lastWeeksRepIncome = 0;
+		/** Not currently used, will work similarly to the cash variables above */
+		this.lastWeeksRepExpenses = 0;
+	}
+};
diff --git a/src/facilities/nursery/widgets/children/childSummary.js b/src/facilities/nursery/widgets/children/childSummary.js
new file mode 100644
index 00000000000..865343ccebc
--- /dev/null
+++ b/src/facilities/nursery/widgets/children/childSummary.js
@@ -0,0 +1,4410 @@
+/**
+ * Displays a summary of the child
+ * @param {App.Entity.SlaveState} child
+ * @returns {string}
+ */
+App.Facilities.Nursery.ChildSummary = function(child) {
+	"use strict";
+	/** @type {App.UI.SlaveSummary.AbbreviationState} */
+	const abbreviate = V.UI.slaveSummary.abbreviation;
+
+	let
+		r = ``;
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 * @returns {string}
+	 */
+	function ChildSummaryUncached(child) {
+		if (abbreviate.devotion === 1) {
+			shortDevotion(child);
+		} else if (abbreviate.devotion === 2) {
+			longDevotion(child);
+		}
+		if (child.fuckdoll === 0) {
+			if (abbreviate.rules === 1) {
+				shortRules(child);
+			} else if (abbreviate.rules === 2) {
+				longRules(child);
+			}
+		}
+		if (abbreviate.diet === 1) {
+			shortWeight(child);
+		} else if (abbreviate.diet === 2) {
+			longWeight(child);
+		}
+		if (abbreviate.diet === 1) {
+			shortDiet(child);
+		} else if (abbreviate.diet === 2) {
+			longDiet(child);
+		}
+		if (abbreviate.health === 1) {
+			shortHealth(child);
+		} else if (abbreviate.health === 2) {
+			longHealth(child);
+		}
+		if (abbreviate.drugs === 1) {
+			shortDrugs(child);
+		} else if (abbreviate.drugs === 2) {
+			longDrugs(child);
+		}
+		if (abbreviate.nationality + abbreviate.genitalia + abbreviate.physicals + abbreviate.skills + abbreviate.mental !== 0) {
+			r += `<br> `;
+			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+				r += "&nbsp;&nbsp;&nbsp;&nbsp;";
+			}
+		}
+		V.desc = SlaveTitle(child);
+		const firstLetter = V.desc.substring(0, 1).toUpperCase();
+		V.desc = firstLetter + V.desc.substring(1);
+		r += `<strong><span class="coral">${V.desc}${abbreviate.physicals === 2? '.' : ''}</span></strong> `;
+		if (V.seeRace) {
+			r += `<span class="tan">`;
+			if (abbreviate.race === 1) {
+				shortRace(child);
+			} else if (abbreviate.race === 2) {
+				longRace(child);
+			}
+			r += `</span> `;
+		}
+		if (abbreviate.nationality === 1) {
+			shortNationality(child);
+		} else if (abbreviate.nationality === 2) {
+			longNationality(child);
+		}
+		if (abbreviate.physicals === 1) {
+			shortSkin(child);
+		} else {
+			r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `;
+		}
+		if (abbreviate.genitalia === 1) {
+			shortGenitals(child);
+		} else if (abbreviate.genitalia === 2) {
+			longGenitals(child);
+		}
+		if (abbreviate.physicals === 1) {
+			shortAge(child);
+			shortFace(child);
+			shortEyes(child);
+			shortEars(child);
+			if (child.markings !== "none") {
+				r += "Markings";
+			}
+			shortLips(child);
+			shortTeeth(child);
+			shortMuscles(child);
+			r += App.Desc.shortLimbs(child);
+			shortVoice(child);
+			shortTitsAss(child);
+			shortHips(child);
+			shortWaist(child);
+			shortImplants(child);
+			shortLactation(child);
+			// shortMods(child);
+			r += `</span> `;
+		} else if (abbreviate.physicals === 2) {
+			longAge(child);
+			longFace(child);
+			longEyes(child);
+			longEars(child);
+			longLips(child);
+			longTeeth(child);
+			longMuscles(child);
+			r += App.Desc.longLimbs(child);
+			longVoice(child);
+			longTitsAss(child);
+			longHips(child);
+			longWaist(child);
+			longImplants(child);
+			longLactation(child);
+			// longMods(child);
+			if (!jQuery.isEmptyObject(child.brand)) {
+				r += `Branded. `;
+			}
+			r += `</span> `;
+		}
+		if (abbreviate.hormoneBalance === 1) {
+			if (child.hormoneBalance <= -21) {
+				r += `<span class="deepskyblue">`;
+				r += ` <strong>HB:M</strong> `;
+			} else if (child.hormoneBalance <= 20) {
+				r += `<span class="pink">`;
+				r += ` <strong>HB:N</strong> `;
+			} else if (child.hormoneBalance <= 500) {
+				r += `<span class="pink">`;
+				r += ` <strong>HB:F</strong> `;
+			}
+			r += `</span> `;
+		} else if (abbreviate.hormoneBalance === 2) {
+			r += `<span class=`;
+			if (child.hormoneBalance <= -21) {
+				r += `"deepskyblue"`;
+			} else {
+				r += `"pink"`;
+			}
+			r += `> `;
+			if (child.hormoneBalance < -400) {
+				r += `Overwhelmingly masculine`;
+			} else if (child.hormoneBalance <= -300) {
+				r += `Extremely masculine`;
+			} else if (child.hormoneBalance <= -200) {
+				r += `Heavily masculine`;
+			} else if (child.hormoneBalance <= -100) {
+				r += `Very masculine`;
+			} else if (child.hormoneBalance <= -21) {
+				r += `Masculine`;
+			} else if (child.hormoneBalance <= 20) {
+				r += `Neutral`;
+			} else if (child.hormoneBalance <= 99) {
+				r += `Feminine`;
+			} else if (child.hormoneBalance <= 199) {
+				r += `Very feminine`;
+			} else if (child.hormoneBalance <= 299) {
+				r += `Heavily feminine`;
+			} else if (child.hormoneBalance <= 399) {
+				r += `Extremely feminine`;
+			} else if (child.hormoneBalance <= 500) {
+				r += `Overwhelmingly feminine`;
+			}
+			r += ` hormone balance.</span> `;
+		}
+		r += `<br>`;
+		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+			r += "&nbsp;&nbsp;&nbsp;&nbsp;";
+		}
+		if (abbreviate.skills === 1) {
+			shortIntelligence(child);
+			shortSexSkills(child);
+			if (child.skill.combat > 0) {
+				r += "C";
+			}
+			r += "</span> ";
+			shortPrestige(child);
+			shortPornPrestige(child);
+		} else if (abbreviate.skills === 2) {
+			longIntelligence(child);
+			longSexSkills(child);
+			if (child.skill.combat > 0) {
+				r += `Trained fighter. `;
+			}
+			r += "</span> ";
+			longPrestige(child);
+			longPornPrestige(child);
+		}
+		if (abbreviate.mental === 1) {
+			if (child.fetish !== "mindbroken") {
+				if (child.fetishKnown === 1) {
+					shortFetish(child);
+				}
+				if (child.attrKnown === 1) {
+					shortAttraction(child);
+				}
+			}
+			if (child.clitPiercing === 3) {
+				shortSmartFetish(child);
+				shortSmartAttraction(child);
+			}
+			shortBehaviorFlaw(child);
+			shortSexFlaw(child);
+			shortBehaviorQuirk(child);
+			shortSexQuirk(child);
+		} else if (abbreviate.mental === 2) {
+			if (child.fetish !== "mindbroken") {
+				if (child.fetishKnown === 1) {
+					longFetish(child);
+				}
+				if (child.attrKnown === 1) {
+					longAttraction(child);
+				}
+			}
+			if (child.clitPiercing === 3) {
+				longSmartFetish(child);
+				longSmartAttraction(child);
+			}
+			longBehaviorFlaw(child);
+			longSexFlaw(child);
+			longBehaviorQuirk(child);
+			longSexQuirk(child);
+		}
+		if (child.custom.label) {
+			r += `<strong><span class="yellow">${capFirstChar(child.custom.label)}</span></strong> `;
+		}
+		if ((child.relationship !== 0) || (abbreviate.clothes === 2) || (abbreviate.rulesets === 2)) {
+			r += `<br> `;
+			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			}
+		}
+		if (abbreviate.mental === 1) {
+			r += `<span class="lightgreen">`;
+			shortExtendedFamily(child);
+			r += `</span> `;
+			shortClone(child);
+			shortRival(child);
+		} else if (abbreviate.mental === 2) {
+			longExtendedFamily(child);
+		}
+		if (child.fuckdoll === 0) {
+			if (abbreviate.clothes === 2) {
+				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+				if (child.choosesOwnClothes === 1) {
+					r += "Dressing herself. ";
+				}
+				longClothes(child);
+				longCollar(child);
+				longBelly(child);
+				if (hasAnyLegs(child)) {
+					longLegs(child);
+				}
+				if (canWalk(child)) {
+					longShoes(child);
+				}
+				longChastity(child);
+				longVaginalAcc(child);
+				longDickAcc(child);
+				longButtplug(child);
+			}
+		}
+		r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+		rulesAssistant(child);
+		if (abbreviate.origins === 2 && child.origin !== 0) {
+			origins(child);
+		}
+		return r;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortDevotion(child) {
+		r += `<br>`;
+		if (child.fetish === "mindbroken") {
+			r += `<span class="mindbroken">MB</span> `;
+		} else if (child.devotion < -95) {
+			r += `<span class="devotion hateful">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else if (child.devotion < -50) {
+			r += `<span class="devotion hateful">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else if (child.devotion < -20) {
+			r += `<span class="devotion resistant">Res${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else if (child.devotion <= 20) {
+			r += `<span class="devotion ambivalent">Ambiv${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else if (child.devotion <= 50) {
+			r += `<span class="devotion accept">Accept${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else if (child.devotion <= 95) {
+			r += `<span class="devotion devoted">Devo${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		} else {
+			r += `<span class="devotion worship">Wor${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
+		}
+		if (child.fetish === "mindbroken") {
+			return;
+		} else if (child.trust < -95) {
+			r += `<span class="trust extremely-terrified">ETerr${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+		} else if (child.trust < -50) {
+			r += `<span class="trust terrified">Terr${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+		} else if (child.trust < -20) {
+			r += `<span class="trust frightened">Fright${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+		} else if (child.trust <= 20) {
+			r += `<span class="trust fearful">Fear${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+		} else if (child.trust <= 50) {
+			if (child.devotion < -20) {
+				r += `<span class="defiant careful">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			} else {
+				r += `<span class="trust careful">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			}
+		} else if (child.trust < 95) {
+			if (child.devotion < -20) {
+				r += `<span class="defiant bold">Bold${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			} else {
+				r += `<span class="trust trusting">Trust${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			}
+		} else {
+			if (child.devotion < -20) {
+				r += `<span class="defiant full">Defiant${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			} else {
+				r += `<span class="trust prof-trusting">VTrust ${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longDevotion(child) {
+		r += `<br>`;
+		if (child.fetish === "mindbroken") {
+			r += `<span class="mindbroken">Mindbroken.</span> `;
+		} else if (child.devotion < -95) {
+			r += `<span class="devotion hateful">Very hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else if (child.devotion < -50) {
+			r += `<span class="devotion hateful">Hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else if (child.devotion < -20) {
+			r += `<span class="devotion resistant">Resistant${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else if (child.devotion <= 20) {
+			r += `<span class="devotion ambivalent">Ambivalent${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else if (child.devotion <= 50) {
+			r += `<span class="devotion accept">Accepting${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else if (child.devotion <= 95) {
+			r += `<span class="devotion devoted">Devoted${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		} else {
+			r += `<span class="devotion worship">Worshipful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
+		}
+		if (child.fetish === "mindbroken") {
+			return;
+		} else if (child.trust < -95) {
+			r += `<span class="trust extremely-terrified">Extremely terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+		} else if (child.trust < -50) {
+			r += `<span class="trust terrifies">Terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+		} else if (child.trust < -20) {
+			r += `<span class="trust frightened">Frightened${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+		} else if (child.trust <= 20) {
+			r += `<span class="trust fearful">Fearful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+		} else if (child.trust <= 50) {
+			if (child.devotion < -20) {
+				r += `<span class="defiant careful">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			} else {
+				r += `<span class="trust careful">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			}
+		} else if (child.trust < 95) {
+			if (child.devotion < -20) {
+				r += `<span class="defiant bold">Bold${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			} else {
+				r += `<span class="trust trusting">Trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			}
+		} else {
+			if (child.devotion < -20) {
+				r += `<span class="defiant full">Defiant${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			} else {
+				r += `<span class="trust prof-trusting">Profoundly trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortRules(child) {
+		switch (child.rules.living) {
+			case "luxurious":
+				r += `<strong>LS:Lux</strong> `;
+				break;
+			case "normal":
+				r += `<strong>LS:Nor</strong> `;
+				break;
+			default:
+				r += `<strong>LS:Spa</strong> `;
+				break;
+		}
+		if (canTalk(child)) {
+			switch (child.rules.speech) {
+				case "permissive":
+					r += `<strong>SpR:P</strong> `;
+					break;
+				case "accent elimination":
+					r += `<strong>SpR:NoAcc</strong> `;
+					break;
+				case "language lessons":
+					r += `<strong>SpR:LL</strong> `;
+					break;
+				default:
+					r += `<strong>SpR:R</strong> `;
+					break;
+			}
+			r += " ";
+		}
+		switch (child.rules.relationship) {
+			case "permissive":
+				r += `<strong>ReR:P</strong> `;
+				break;
+			case "just friends":
+				r += `<strong>ReR:Fr</strong> `;
+				break;
+			default:
+				r += `<strong>ReR:R</strong> `;
+				break;
+		}
+		switch (child.rules.punishment) {
+			case "confinement":
+				r += `<strong>Pun:Conf</strong> `;
+				break;
+			case "whipping":
+				r += `<strong>Pun:Whip</strong> `;
+				break;
+			case "chastity":
+				r += `<strong>Pun:Chas</strong> `;
+				break;
+			default:
+				r += `<strong>Pun:Situ</strong> `;
+				break;
+		}
+		switch (child.rules.reward) {
+			case "relaxation":
+				r += `<strong>Rew:Relx</strong> `;
+				break;
+			case "drugs":
+				r += `<strong>Rew:Drug</strong> `;
+				break;
+			case "orgasm":
+				r += `<strong>Rew:Orga</strong> `;
+				break;
+			default:
+				r += `<strong>Rew:Situ</strong> `;
+				break;
+		}
+		r += `<strong>MaR:${App.Utils.releaseSummaryShort(child)}</strong> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longRules(child) {
+		r += `Living standard: ${child.rules.living}. `;
+		if (canTalk(child)) {
+			r += `Speech rules: ${child.rules.speech}. `;
+		}
+		r += `Relationship rules: ${child.rules.relationship}. `;
+		r += `Typical punishment: ${child.rules.punishment}. `;
+		r += `Typical reward: ${child.rules.reward}. `;
+		r += `Release rules: ${App.Utils.releaseSummaryLong(child)}. `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortWeight(child) {
+		if (child.weight < -95) {
+			r += `<strong><span class="red">W---${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+		} else if (child.weight < -30) {
+			if (child.hips < -1) {
+				r += `<strong>W--${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W--${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		} else if (child.weight < -10) {
+			r += `<strong>W-${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+		} else if (child.weight <= 10) {
+			r += `<strong>W${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+		} else if (child.weight <= 30) {
+			r += `<strong>W+${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+		} else if (child.weight <= 95) {
+			if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `<strong>W++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		} else if (child.weight <= 130) {
+			if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `<strong>W+++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W+++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		} else if (child.weight <= 160) {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `<strong>W++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		} else if (child.weight <= 190) {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `<strong>W+++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W+++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		} else {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `<strong>W++++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
+			} else {
+				r += `<strong><span class="red">W++++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longWeight(child) {
+		if (child.weight < -95) {
+			r += `<span class="red">Emaciated${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+		} else if (child.weight < -30) {
+			if (child.hips < -1) {
+				r += `Model-thin${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Very thin${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		} else if (child.weight < -10) {
+			r += `Thin${V.summaryStats ? `[${child.weight}]`: ''}. `;
+		} else if (child.weight <= 10) {
+			r += `Trim${V.summaryStats ? `[${child.weight}]`: ''}. `;
+		} else if (child.weight <= 30) {
+			r += `Plush ${V.summaryStats ? `[${child.weight}]`: ''}. `;
+		} else if (child.weight <= 95) {
+			if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `Nicely chubby${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Overweight${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		} else if (child.weight <= 130) {
+			if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `Pleasantly soft and shapely${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Fat${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		} else if (child.weight <= 160) {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `Amazingly voluptuous${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		} else if (child.weight <= 190) {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `SSBBW${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Super Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		} else {
+			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
+				r += `Perfectly massive${V.summaryStats ? `[${child.weight}]`: ''}. `;
+			} else {
+				r += `<span class="red">Dangerously Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortDiet(child) {
+		r += `<span class="teal">`;
+		switch (child.diet) {
+			case "restricted":
+				r += `<strong>Di:W-</strong> `;
+				break;
+			case "fattening":
+				r += `<strong>Di:W+</strong> `;
+				break;
+			case "XX":
+				r += `<strong>Di:XX+</strong> `;
+				break;
+			case "XY":
+				r += `<strong>Di:XY+</strong> `;
+				break;
+			case "XXY":
+				r += `<strong>Di:XXY+</strong> `;
+				break;
+			case "muscle building":
+				r += `<strong>Di:M+</strong> `;
+				break;
+			case "slimming":
+				r += `<strong>Di:M-</strong> `;
+				break;
+			case "cum production":
+				r += `<strong>Di:C+</strong> `;
+				break;
+			case "cleansing":
+				r += `<strong>Di:H+</strong> `;
+				break;
+			case "fertility":
+				r += `<strong>Di:F+</strong> `;
+				break;
+		}
+		r += `</span> `;
+		r += `<span class="cyan">`;
+		if (child.dietCum === 2) {
+			r += `<strong>Cum++</strong> `;
+		} else if (((child.dietCum === 1) && (child.dietMilk === 0))) {
+			r += `<strong>Cum+</strong> `;
+		} else if (((child.dietCum === 1) && (child.dietMilk === 1))) {
+			r += `<strong>Cum+ Milk+</strong> `;
+		} else if (((child.dietCum === 0) && (child.dietMilk === 1))) {
+			r += `<strong>Milk+</strong> `;
+		} else if ((child.dietMilk === 2)) {
+			r += `<strong>Milk++</strong> `;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longDiet(child) {
+		r += `<span class="teal">`;
+		switch (child.diet) {
+			case "restricted":
+				r += `Dieting. `;
+				break;
+			case "fattening":
+				r += `Gaining weight. `;
+				break;
+			case "XX":
+				r += `Estrogen rich. `;
+				break;
+			case "XY":
+				r += `Testosterone rich. `;
+				break;
+			case "XXY":
+				r += `Futanari mix. `;
+				break;
+			case "muscle building":
+				r += `Pumping iron. `;
+				break;
+			case "slimming":
+				r += `Slimming down. `;
+				break;
+			case "cum production":
+				r += `Cum production. `;
+				break;
+			case "cleansing":
+				r += `Cleansing. `;
+				break;
+			case "fertility":
+				r += `Fertility. `;
+				break;
+		}
+		r += `</span> `;
+		if (child.dietCum === 2) {
+			r += `Diet base: <span class="cyan">Cum Based.</span> `;
+		} else if (((child.dietCum === 1) && (child.dietMilk === 0))) {
+			r += `Diet base: <span class="cyan">Cum Added.</span> `;
+		} else if (((child.dietCum === 1) && (child.dietMilk === 1))) {
+			r += `Diet base: <span class="cyan">Milk & Cum Added.</span> `;
+		} else if (((child.dietCum === 0) && (child.dietMilk === 1))) {
+			r += `Diet base: <span class="cyan">Milk Added.</span> `;
+		} else if ((child.dietMilk === 2)) {
+			r += `Diet base: <span class="cyan">Milk Based.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortHealth(child) {
+		if (child.health.condition < -20) {
+			r += `<strong><span class="red">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+		} else if (child.health.condition <= 20) {
+			r += `<strong><span class="yellow">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+		} else if (child.health.condition > 20) {
+			r += `<strong><span class="green">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longHealth(child) {
+		if (child.health.condition < -90) {
+			r += `<span class="red">On the edge of death ${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else if (child.health.condition < -50) {
+			r += `<span class="red">Extremely unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else if (child.health.condition < -20) {
+			r += `<span class="red">Unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else if (child.health.condition <= 20) {
+			r += `<span class="yellow">Healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else if (child.health.condition <= 50) {
+			r += `<span class="green">Very healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else if (child.health.condition <= 90) {
+			r += `<span class="green">Extremely healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		} else {
+			r += `<span class="green">Unnaturally healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortDrugs(child) {
+		r += `<span class="tan">`;
+		switch (child.drugs) {
+			case "breast injections":
+				r += `<strong>Dr:Boobs+</strong> `;
+				break;
+			case "intensive breast injections":
+				r += `<strong>Dr:Boobs++</strong> `;
+				break;
+			case "nipple enhancers":
+				r += `<strong>Dr:Nipple+</strong> `;
+				break;
+			case "hyper breast injections":
+				r += `<strong>Dr:Boobs+++</strong> `;
+				break;
+			case "butt injections":
+				r += `<strong>Dr:Butt+</strong> `;
+				break;
+			case "intensive butt injections":
+				r += `<strong>Dr:Butt++</strong> `;
+				break;
+			case "hyper butt injections":
+				r += `<strong>Dr:Butt+++</strong> `;
+				break;
+			case "lip injections":
+				r += `<strong>Dr:Lip+</strong> `;
+				break;
+			case "fertility drugs":
+				r += `<strong>Dr:Fert+</strong> `;
+				break;
+			case "super fertility drugs":
+				r += `<strong>Dr:Fert++</strong> `;
+				break;
+			case "penis enhancement":
+				r += `<strong>Dr:Dick+</strong> `;
+				break;
+			case "intensive penis enhancement":
+				r += `<strong>Dr:Dick++</strong> `;
+				break;
+			case "hyper penis enhancement":
+				r += `<strong>Dr:Dick+++</strong> `;
+				break;
+			case "testicle enhancement":
+				r += `<strong>Dr:Balls+</strong> `;
+				break;
+			case "intensive testicle enhancement":
+				r += `<strong>Dr:Balls++</strong> `;
+				break;
+			case "hyper testicle enhancement":
+				r += `<strong>Dr:Balls+++</strong> `;
+				break;
+			case "psychosuppressants":
+				r += `<strong>Dr:Psych</strong> `;
+				break;
+			case "steroids":
+				r += `<strong>Dr:Ster</strong> `;
+				break;
+			case "female hormone injections":
+				r += `<strong>Dr:HormXX++</strong> `;
+				break;
+			case "male hormone injections":
+				r += `<strong>Dr:HormXY++</strong> `;
+				break;
+			case "hormone enhancers":
+				r += `<strong>Dr:Horm+</strong> `;
+				break;
+			case "hormone blockers":
+				r += `<strong>Dr:Horm-</strong> `;
+				break;
+			case "anti-aging cream":
+				r += `<strong>Dr:Age-</strong> `;
+				break;
+			case "appetite suppressors":
+				r += `<strong>Dr:ApSup</strong> `;
+				break;
+			case "penis atrophiers":
+				r += `<strong>Dr:Dick-</strong> `;
+				break;
+			case "testicle atrophiers":
+				r += `<strong>Dr:Balls-</strong> `;
+				break;
+			case "clitoris atrophiers":
+				r += `<strong>Dr:Clit-</strong> `;
+				break;
+			case "labia atrophiers":
+				r += `<strong>Dr:Labia-</strong> `;
+				break;
+			case "nipple atrophiers":
+				r += `<strong>Dr:Nipple-</strong> `;
+				break;
+			case "lip atrophiers":
+				r += `<strong>Dr:Lip-</strong> `;
+				break;
+			case "breast redistributors":
+				r += `<strong>Dr:Breast-</strong> `;
+				break;
+			case "butt redistributors":
+				r += `<strong>Dr:Butt-</strong> `;
+				break;
+			case "sag-B-gone":
+				r += `<strong>Dr:AntiSag</strong> `;
+				break;
+			case "growth stimulants":
+				r += `<strong>Dr:groStim</strong> `;
+				break;
+		}
+		r += `</span> `;
+		r += `<span class="lightgreen">`;
+		if (child.curatives === 2) {
+			r += `<strong>Cura</strong> `;
+		} else if (child.curatives === 1) {
+			r += `<strong>Prev</strong> `;
+		}
+		r += `</span> `;
+		if (child.aphrodisiacs !== 0) {
+			r += `<span class="lightblue">`;
+			if (child.aphrodisiacs === 1) {
+				r += `<strong>Aph</strong> `;
+			} else if (child.aphrodisiacs === 2) {
+				r += `<strong>Aph++</strong> `;
+			} else {
+				r += `<strong>Anaph</strong> `;
+			}
+			r += `</span> `;
+		}
+		if (child.addict !== 0) {
+			r += `<span class="cyan">Add</span> `;
+		}
+		r += `<span class="lightsalmon">`;
+		if (child.hormones > 1) {
+			r += `<strong>Ho:F+</strong> `;
+		} else if (child.hormones > 0) {
+			r += `<strong>Ho:F</strong> `;
+		} else if (child.hormones < -1) {
+			r += `<strong>Ho:M+</strong> `;
+		} else if (child.hormones < 0) {
+			r += `<strong>Ho:M</strong> `;
+		}
+		r += `</span> `;
+		r += `<span class="mediumseagreen">`;
+		if ((child.bellyImplant > -1)) {
+			r += `<strong>Belly Imp</strong> `;
+		} else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) {
+			r += `<strong>Barr</strong> `;
+		} else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `<strong>Prepub</strong> `;
+		} else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `<strong>Meno</strong> `;
+		} else if (child.pregWeek < 0) {
+			r += `<strong>Postpartum</strong> `;
+		} else if (child.preg === -1) {
+			r += `<strong>CC</strong> `;
+		} else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `<strong>Fert+</strong> `;
+			// } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) {
+			//	r += `<strong>Preg?</strong> `;
+		} else if (child.preg >= 36) {
+			r += `<strong>Perm preg</strong> `;
+		} else if (child.pregKnown === 1) {
+			r += `<strong>${child.pregWeek} wks preg</strong> `;
+		}
+		r += `</span> `;
+		if (child.induce === 1) {
+			r += `<span class="orange"><strong>Early Labor</strong></span> `;
+		}
+		if (child.pubertyXY === 0 && child.balls > 0) {
+			r += `<strong>Prepub balls</strong> `;
+		}
+		if (child.balls > 0 && child.vasectomy === 1) {
+			r += `<strong>Vasect</strong> `;
+		}
+		r += `<span class="springgreen">`;
+		if (child.inflation === 3) {
+			r += `<strong>8 ltr ${child.inflationType}</strong> `;
+		} else if (child.inflation === 2) {
+			r += `<strong>4 ltr ${child.inflationType}</strong> `;
+		} else if (child.inflation === 1) {
+			r += `<strong>2 ltr ${child.inflationType}</strong> `;
+		} else if (child.bellyFluid > 0) {
+			r += `<strong>${child.bellyFluid}ccs ${child.inflationType}</strong> `;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longDrugs(child) {
+		if ((child.drugs !== "no drugs") && (child.drugs !== "none")) {
+			r += `<span class="tan">On ${child.drugs}.</span> `;
+		}
+		r += `<span class="lightgreen">`;
+		if (child.curatives === 2) {
+			r += `On curatives. `;
+		} else if (child.curatives === 1) {
+			r += `On preventatives. `;
+		}
+		r += `</span> `;
+		r += `<span class="lightblue">`;
+		if (child.aphrodisiacs > 0) {
+			r += `On ${child.aphrodisiacs > 1 ? 'extreme': ''} aphrodisiacs. `;
+		} else if (child.aphrodisiacs === -1) {
+			r += `On anaphrodisiacs. `;
+		}
+		r += `</span> `;
+		if (child.addict !== 0) {
+			r += `<span class="cyan">Addict.</span> `;
+		}
+		r += `<span class="lightsalmon">`;
+		if (child.hormones > 1) {
+			r += `Heavy female hormones. `;
+		} else if (child.hormones > 0) {
+			r += `Female hormones. `;
+		} else if (child.hormones < -1) {
+			r += `Heavy male hormones. `;
+		} else if (child.hormones < 0) {
+			r += `Male hormones. `;
+		}
+		r += `</span> `;
+		r += `<span class="mediumseagreen">`;
+		if ((child.bellyImplant > -1)) {
+			r += `Belly Implant. `;
+		} else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) {
+			r += `Barren. `;
+		} else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `Not ovulating yet. `;
+		} else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `Menopausal. `;
+		} else if (child.pregWeek < 0) {
+			r += `Postpartum. `;
+		} else if (child.preg === -1) {
+			r += `On contraceptives. `;
+		} else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
+			r += `Fertile. `;
+		} else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) {
+			r += `May be pregnant. `;
+		} else if (child.preg >= 36) {
+			r += `Permanently pregnant. `;
+		} else if (child.pregKnown === 1) {
+			if (child.pregType < 2) {
+				r += `${child.pregWeek} weeks pregnant. `;
+			} else {
+				r += `${child.pregWeek} weeks pregnant with `;
+				if (child.pregType >= 40) {
+					r += `a tremendous brood of offspring. `;
+				} else if (child.pregType >= 20) {
+					r += `a brood of offspring. `;
+				} else if (child.pregType >= 10) {
+					r += `${child.pregType} babies. `;
+				} else if (child.pregType === 9) {
+					r += `nonuplets. `;
+				} else if (child.pregType === 8) {
+					r += `octuplets. `;
+				} else if (child.pregType === 7) {
+					r += `septuplets. `;
+				} else if (child.pregType === 6) {
+					r += `sextuplets. `;
+				} else if (child.pregType === 5) {
+					r += `quintuplets. `;
+				} else if (child.pregType === 4) {
+					r += `quadruplets. `;
+				} else if (child.pregType === 3) {
+					r += `triplets. `;
+				} else {
+					r += `twins. `;
+				}
+			}
+			if (child.preg > child.pregData.normalBirth) { // TODO: double check this
+				r += ` (Overdue.)`;
+			}
+		}
+		r += `</span> `;
+		if (child.induce === 1) {
+			r += `<span class="orange">Showing signs of early labor.</span> `;
+		}
+		if (child.pubertyXY === 0 && child.balls > 0) {
+			r += `Has not had first ejaculation. `;
+		}
+		if (child.balls > 0 && child.vasectomy === 1) {
+			r += `Vasectomy. `;
+		}
+		r += `<span class="springgreen">`;
+		if (child.inflation === 3) {
+			r += `Filled with 8 liters of ${child.inflationType}. `;
+		} else if (child.inflation === 2) {
+			r += `Filled with 4 liters of ${child.inflationType}. `;
+		} else if (child.inflation === 1) {
+			r += `Filled with 2 liters of ${child.inflationType}. `;
+		} else if (child.bellyFluid > 0) {
+			r += `Stuffed with ${child.bellyFluid}ccs of ${child.inflationType}. `;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortRace(child) {
+		switch (child.race) {
+			case "white":
+				r += `C`;
+				break;
+			case "asian":
+				r += `A`;
+				break;
+			case "indo-aryan":
+				r += `I`;
+				break;
+			case "latina":
+				r += `L`;
+				break;
+			case "middle eastern":
+				r += `ME`;
+				break;
+			case "black":
+				r += `B`;
+				break;
+			case "pacific islander":
+				r += `PI`;
+				break;
+			case "malay":
+				r += `M`;
+				break;
+			case "amerindian":
+				r += `AI`;
+				break;
+			case "semitic":
+				r += `S`;
+				break;
+			case "southern european":
+				r += `SE`;
+				break;
+			case "mixed race":
+				r += `MR`;
+				break;
+			default:
+				r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longRace(child) {
+		switch (child.race) {
+			case "white":
+				r += `Caucasian. `;
+				break;
+			case "asian":
+				r += `Asian. `;
+				break;
+			case "indo-aryan":
+				r += `Indo-aryan. `;
+				break;
+			case "latina":
+				r += `Latina. `;
+				break;
+			case "middle eastern":
+				r += `Middle Eastern. `;
+				break;
+			case "black":
+				r += `Black. `;
+				break;
+			case "pacific islander":
+				r += `Pacific Islander. `;
+				break;
+			case "malay":
+				r += `Malay. `;
+				break;
+			case "amerindian":
+				r += `Amerindian. `;
+				break;
+			case "semitic":
+				r += `Semitic. `;
+				break;
+			case "southern european":
+				r += `Southern European. `;
+				break;
+			case "mixed race":
+				r += `Mixed race. `;
+				break;
+			default:
+				r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortNationality(child) {
+		r += `<span class="tan">`;
+		switch (child.nationality) {
+			case "Afghan":
+				r += `Afg`;
+				break;
+			case "Albanian":
+				r += `Alb`;
+				break;
+			case "Algerian":
+				r += `Alg`;
+				break;
+			case "American":
+				r += `USA`;
+				break;
+			case "Andorran":
+				r += `And`;
+				break;
+			case "Angolan":
+				r += `Ang`;
+				break;
+			case "Antiguan":
+				r += `AB`;
+				break;
+			case "Argentinian":
+				r += `Arg`;
+				break;
+			case "Armenian":
+				r += `Arm`;
+				break;
+			case "Aruban":
+				r += `Aru`;
+				break;
+			case "Australian":
+				r += `Aus`;
+				break;
+			case "Austrian":
+				r += `Aut`;
+				break;
+			case "Azerbaijani":
+				r += `Aze`;
+				break;
+			case "Bahamian":
+				r += `Bah`;
+				break;
+			case "Bahraini":
+				r += `Bah`;
+				break;
+			case "Bangladeshi":
+				r += `Bgd`;
+				break;
+			case "Barbadian":
+				r += `Bar`;
+				break;
+			case "Belarusian":
+				r += `Ber`;
+				break;
+			case "Belgian":
+				r += `Bel`;
+				break;
+			case "Belizean":
+				r += `Blz`;
+				break;
+			case "Beninese":
+				r += `Ben`;
+				break;
+			case "Bermudian":
+				r += `Bmd`;
+				break;
+			case "Bhutanese":
+				r += `Bhu`;
+				break;
+			case "Bissau-Guinean":
+				r += `GB`;
+				break;
+			case "Bolivian":
+				r += `Bol`;
+				break;
+			case "Bosnian":
+				r += `Bos`;
+				break;
+			case "Brazilian":
+				r += `Bra`;
+				break;
+			case "British":
+				r += `UK`;
+				break;
+			case "Bruneian":
+				r += `Bru`;
+				break;
+			case "Bulgarian":
+				r += `Bul`;
+				break;
+			case "Burkinabé":
+				r += `BF`;
+				break;
+			case "Burmese":
+				r += `Bur`;
+				break;
+			case "Burundian":
+				r += `Bnd`;
+				break;
+			case "Cambodian":
+				r += `Kam`;
+				break;
+			case "Cameroonian":
+				r += `Cam`;
+				break;
+			case "Canadian":
+				r += `Can`;
+				break;
+			case "Cape Verdean":
+				r += `CV`;
+				break;
+			case "Catalan":
+				r += `Cat`;
+				break;
+			case "Central African":
+				r += `CAR`;
+				break;
+			case "Chadian":
+				r += `Cha`;
+				break;
+			case "Chilean":
+				r += `Chl`;
+				break;
+			case "Chinese":
+				r += `Chi`;
+				break;
+			case "Colombian":
+				r += `Col`;
+				break;
+			case "Comorian":
+				r += `Com`;
+				break;
+			case "Congolese":
+				r += `RC`;
+				break;
+			case "a Cook Islander":
+				r += `CI`;
+				break;
+			case "Costa Rican":
+				r += `CR`;
+				break;
+			case "Croatian":
+				r += `Cro`;
+				break;
+			case "Cuban":
+				r += `Cub`;
+				break;
+			case "Curaçaoan":
+				r += `Cur`;
+				break;
+			case "Cypriot":
+				r += `Cyp`;
+				break;
+			case "Czech":
+				r += `Cze`;
+				break;
+			case "Danish":
+				r += `Den`;
+				break;
+			case "Djiboutian":
+				r += `Dji`;
+				break;
+			case "Dominican":
+				r += `DR`;
+				break;
+			case "Dominiquais":
+				r += `Dom`;
+				break;
+			case "Dutch":
+				r += `Nld`;
+				break;
+			case "East Timorese":
+				r += `ET`;
+				break;
+			case "Ecuadorian":
+				r += `Ecu`;
+				break;
+			case "Egyptian":
+				r += `Egy`;
+				break;
+			case "Emirati":
+				r += `UAE`;
+				break;
+			case "Equatoguinean":
+				r += `EG`;
+				break;
+			case "Eritrean":
+				r += `Eri`;
+				break;
+			case "Estonian":
+				r += `Est`;
+				break;
+			case "Ethiopian":
+				r += `Eth`;
+				break;
+			case "Fijian":
+				r += `Fij`;
+				break;
+			case "Filipina":
+				r += `Phl`;
+				break;
+			case "Finnish":
+				r += `Fin`;
+				break;
+			case "French":
+				r += `Fra`;
+				break;
+			case "French Guianan":
+				r += `FG`;
+				break;
+			case "French Polynesian":
+				r += `FP`;
+				break;
+			case "Gabonese":
+				r += `Gab`;
+				break;
+			case "Gambian":
+				r += `Gam`;
+				break;
+			case "Georgian":
+				r += `Geo`;
+				break;
+			case "German":
+				r += `Ger`;
+				break;
+			case "Ghanan":
+				r += `Gha`;
+				break;
+			case "Greek":
+				r += `Gre`;
+				break;
+			case "Greenlandic":
+				r += `Grn`;
+				break;
+			case "Grenadian":
+				r += `Gda`;
+				break;
+			case "Guamanian":
+				r += `Gua`;
+				break;
+			case "Guatemalan":
+				r += `Gtm`;
+				break;
+			case "Guinean":
+				r += `Gui`;
+				break;
+			case "Guyanese":
+				r += `Guy`;
+				break;
+			case "Haitian":
+				r += `Hai`;
+				break;
+			case "Honduran":
+				r += `Hon`;
+				break;
+			case "Hungarian":
+				r += `Hun`;
+				break;
+			case "I-Kiribati":
+				r += `Kir`;
+				break;
+			case "Icelandic":
+				r += `Ice`;
+				break;
+			case "Indian":
+				r += `Ind`;
+				break;
+			case "Indonesian":
+				r += `Idn`;
+				break;
+			case "Iranian":
+				r += `Irn`;
+				break;
+			case "Iraqi":
+				r += `Irq`;
+				break;
+			case "Irish":
+				r += `Irl`;
+				break;
+			case "Israeli":
+				r += `Isr`;
+				break;
+			case "Italian":
+				r += `Ita`;
+				break;
+			case "Ivorian":
+				r += `IC`;
+				break;
+			case "Jamaican":
+				r += `Jam`;
+				break;
+			case "Japanese":
+				r += `Jpn`;
+				break;
+			case "Jordanian":
+				r += `Jor`;
+				break;
+			case "Kazakh":
+				r += `Kaz`;
+				break;
+			case "Kenyan":
+				r += `Ken`;
+				break;
+			case "Kittitian":
+				r += `SKN`;
+				break;
+			case "Korean":
+				r += `Kor`;
+				break;
+			case "Kosovan":
+				r += `Kos`;
+				break;
+			case "Kurdish":
+				r += `Kur`;
+				break;
+			case "Kuwaiti":
+				r += `Kuw`;
+				break;
+			case "Kyrgyz":
+				r += `Kyr`;
+				break;
+			case "Laotian":
+				r += `Lao`;
+				break;
+			case "Latvian":
+				r += `Lat`;
+				break;
+			case "Lebanese":
+				r += `Lbn`;
+				break;
+			case "Liberian":
+				r += `Lib`;
+				break;
+			case "Libyan":
+				r += `Lby`;
+				break;
+			case "a Liechtensteiner":
+				r += `Lie`;
+				break;
+			case "Lithuanian":
+				r += `Lit`;
+				break;
+			case "Luxembourgian":
+				r += `Lux`;
+				break;
+			case "Macedonian":
+				r += `Mac`;
+				break;
+			case "Malagasy":
+				r += `Mad`;
+				break;
+			case "Malawian":
+				r += `Mwi`;
+				break;
+			case "Malaysian":
+				r += `Mys`;
+				break;
+			case "Maldivian":
+				r += `Mdv`;
+				break;
+			case "Malian":
+				r += `Mal`;
+				break;
+			case "Maltese":
+				r += `Mlt`;
+				break;
+			case "Marshallese":
+				r += `MI`;
+				break;
+			case "Mauritanian":
+				r += `Mta`;
+				break;
+			case "Mauritian":
+				r += `Mts`;
+				break;
+			case "Mexican":
+				r += `Mex`;
+				break;
+			case "Micronesian":
+				r += `FSM`;
+				break;
+			case "Moldovan":
+				r += `Mol`;
+				break;
+			case "Monégasque":
+				r += `Mnc`;
+				break;
+			case "Mongolian":
+				r += `Mon`;
+				break;
+			case "Montenegrin":
+				r += `Mng`;
+				break;
+			case "Moroccan":
+				r += `Mor`;
+				break;
+			case "Mosotho":
+				r += `Les`;
+				break;
+			case "Motswana":
+				r += `Bot`;
+				break;
+			case "Mozambican":
+				r += `Moz`;
+				break;
+			case "Namibian":
+				r += `Nam`;
+				break;
+			case "Nauruan":
+				r += `Nau`;
+				break;
+			case "Nepalese":
+				r += `Npl`;
+				break;
+			case "New Caledonian":
+				r += `NC`;
+				break;
+			case "a New Zealander":
+				r += `NZ`;
+				break;
+			case "Ni-Vanuatu":
+				r += `Van`;
+				break;
+			case "Nicaraguan":
+				r += `Nic`;
+				break;
+			case "Nigerian":
+				r += `Nga`;
+				break;
+			case "Nigerien":
+				r += `Ngr`;
+				break;
+			case "Niuean":
+				r += `Niu`;
+				break;
+			case "Norwegian":
+				r += `Nor`;
+				break;
+			case "Omani":
+				r += `Omn`;
+				break;
+			case "Pakistani":
+				r += `Pak`;
+				break;
+			case "Palauan":
+				r += `Plu`;
+				break;
+			case "Palestinian":
+				r += `Pal`;
+				break;
+			case "Panamanian":
+				r += `Pan`;
+				break;
+			case "Papua New Guinean":
+				r += `PNG`;
+				break;
+			case "Paraguayan":
+				r += `Par`;
+				break;
+			case "Peruvian":
+				r += `Per`;
+				break;
+			case "Polish":
+				r += `Pol`;
+				break;
+			case "Portuguese":
+				r += `Por`;
+				break;
+			case "Puerto Rican":
+				r += `PR`;
+				break;
+			case "Qatari":
+				r += `Qat`;
+				break;
+			case "Romanian":
+				r += `Rom`;
+				break;
+			case "Russian":
+				r += `Rus`;
+				break;
+			case "Rwandan":
+				r += `Rwa`;
+				break;
+			case "Sahrawi":
+				r += `Sah`;
+				break;
+			case "Saint Lucian":
+				r += `SL`;
+				break;
+			case "Salvadoran":
+				r += `ES`;
+				break;
+			case "Sammarinese":
+				r += `SM`;
+				break;
+			case "Samoan":
+				r += `Sam`;
+				break;
+			case "São Toméan":
+				r += `STP`;
+				break;
+			case "Saudi":
+				r += `Sau`;
+				break;
+			case "Scottish":
+				r += `Sco`;
+				break;
+			case "Senegalese":
+				r += `Sen`;
+				break;
+			case "Serbian":
+				r += `Srb`;
+				break;
+			case "Seychellois":
+				r += `Sey`;
+				break;
+			case "Sierra Leonean":
+				r += `Sie`;
+				break;
+			case "Singaporean":
+				r += `Sng`;
+				break;
+			case "Slovak":
+				r += `Svk`;
+				break;
+			case "Slovene":
+				r += `Svn`;
+				break;
+			case "a Solomon Islander":
+				r += `SI`;
+				break;
+			case "Somali":
+				r += `Som`;
+				break;
+			case "South African":
+				r += `RSA`;
+				break;
+			case "South Sudanese":
+				r += `SS`;
+				break;
+			case "Spanish":
+				r += `Spa`;
+				break;
+			case "Sri Lankan":
+				r += `Sri`;
+				break;
+			case "Sudanese":
+				r += `Sud`;
+				break;
+			case "Surinamese":
+				r += `Sur`;
+				break;
+			case "Swazi":
+				r += `Swa`;
+				break;
+			case "Swedish":
+				r += `Swe`;
+				break;
+			case "Swiss":
+				r += `Swi`;
+				break;
+			case "Syrian":
+				r += `Syr`;
+				break;
+			case "Taiwanese":
+				r += `Tai`;
+				break;
+			case "Tajik":
+				r += `Taj`;
+				break;
+			case "Tanzanian":
+				r += `Tza`;
+				break;
+			case "Thai":
+				r += `Tha`;
+				break;
+			case "Tibetan":
+				r += `Tib`;
+				break;
+			case "Togolese":
+				r += `Tog`;
+				break;
+			case "Tongan":
+				r += `Ton`;
+				break;
+			case "Trinidadian":
+				r += `TT`;
+				break;
+			case "Tunisian":
+				r += `Tun`;
+				break;
+			case "Turkish":
+				r += `Tur`;
+				break;
+			case "Turkmen":
+				r += `Tkm`;
+				break;
+			case "Tuvaluan":
+				r += `Tuv`;
+				break;
+			case "Ugandan":
+				r += `Uga`;
+				break;
+			case "Ukrainian":
+				r += `Ukr`;
+				break;
+			case "Uruguayan":
+				r += `Uru`;
+				break;
+			case "Uzbek":
+				r += `Uzb`;
+				break;
+			case "Vatican":
+				r += `VC`;
+				break;
+			case "Venezuelan":
+				r += `Ven`;
+				break;
+			case "Vietnamese":
+				r += `Vnm`;
+				break;
+			case "Vincentian":
+				r += `SVG`;
+				break;
+			case "Yemeni":
+				r += `Yem`;
+				break;
+			case "Zairian":
+				r += `DRC`;
+				break;
+			case "Zambian":
+				r += `Zam`;
+				break;
+			case "Zimbabwean":
+				if (child.race === "white") {
+					r += `Rho`;
+				} else {
+					r += `Zwe`;
+				}
+				break;
+			case "Ancient Chinese Revivalist":
+				r += `Chi Rev`;
+				break;
+			case "Ancient Egyptian Revivalist":
+				r += `Egy Rev`;
+				break;
+			case "Arabian Revivalist":
+				r += `Ara Rev`;
+				break;
+			case "Aztec Revivalist":
+				r += `Azt Rev`;
+				break;
+			case "Edo Revivalist":
+				r += `Edo Rev`;
+				break;
+			case "Roman Revivalist":
+				r += `Rom Rev`;
+				break;
+			case "":
+			case "none":
+			case "child":
+			case "Stateless":
+				r += `None`;
+				break;
+			default:
+				r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longNationality(child) {
+		r += `<span class="tan">`;
+		switch (child.nationality) {
+			case "a Cook Islander":
+				r += `Cook Islander. `;
+				break;
+			case "a Liechtensteiner":
+				r += `Liechtensteiner. `;
+				break;
+			case "a New Zealander":
+				r += `New Zealander. `;
+				break;
+			case "a Solomon Islander":
+				r += `Solomon Islander. `;
+				break;
+			case "Zimbabwean":
+				if (child.race === "white") {
+					r += `Rhodesian. `;
+				} else {
+					r += `${child.nationality}. `;
+				}
+				break;
+			case "child":
+			case "none":
+			case "":
+			case "Stateless":
+				r += `Stateless. `;
+				break;
+			default:
+				r += `${child.nationality}. `;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSkin(child) {
+		r += `<span class="pink">`;
+		switch (child.skin) {
+			case "pure white":
+				r += `P. Whi`;
+				break;
+			case "extremely fair":
+				r += `E. Fai`;
+				break;
+			case "very fair":
+				r += `V. Fai`;
+				break;
+			case "extremely pale":
+				r += `E. Pal`;
+				break;
+			case "very pale":
+				r += `V. Pal`;
+				break;
+			case "light brown":
+				r += `L. Br`;
+				break;
+			case "dark brown":
+				r += `D. Br`;
+				break;
+			case "light olive":
+				r += `L. Oli`;
+				break;
+			case "dark olive":
+				r += `D. Oli`;
+				break;
+			case "light beige":
+				r += `L. Bei`;
+				break;
+			case "dark beige":
+				r += `D. Bei`;
+				break;
+			case "tan":
+				r += `Tan`;
+				break;
+			case "bronze":
+				r += `Bron`;
+				break;
+			case "ebony":
+				r += `Ebon`;
+				break;
+			case "pure black":
+				r += `P. Bla`;
+				break;
+			case "dark":
+			case "fair":
+			case "pale":
+				r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`;
+				break;
+			default:
+				r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortGenitals(child) {
+		if (child.dick > 0) {
+			r += `<span class="pink">`;
+			if (child.balls === 0) {
+				r += `Geld`;
+			}
+			if ((child.dick > 8) && (child.balls > 8)) {
+				r += `Junk+++`;
+			} else if ((child.dick > 5) && (child.balls > 5)) {
+				r += `Junk++`;
+			} else if ((child.dick > 4) && (child.balls > 4)) {
+				r += `Junk+`;
+			} else if ((child.dick > 3) && (child.balls > 3)) {
+				r += `Junk`;
+			} else if (child.dick > 8) {
+				r += `Dick+++`;
+			} else if (child.dick > 5) {
+				r += `Dick++`;
+			} else if (child.dick > 4) {
+				r += `Dick+`;
+			} else if (child.dick > 3) {
+				r += `Dick`;
+			} else if (child.balls > 10) {
+				r += `Balls+++`;
+			} else if (child.balls > 5) {
+				r += `Balls++`;
+			} else if (child.balls > 4) {
+				r += `Balls+`;
+			} else if (child.balls > 3) {
+				r += `Balls`;
+			}
+			r += `</span> `;
+		}
+		if (child.vagina === 0) {
+			r += `<span class="lime">VV</span> `;
+		} else if (child.pregKnown === 1 && canWalk(child) && child.clothes === "no clothing" && child.shoes === "none") {
+			r += `<span class="pink">NBP</span> `;
+		}
+		if (child.anus === 0) {
+			r += ` <span class="lime">AV</span> `;
+		}
+		r += `<span class="pink">`;
+		if ((child.vagina > 3) && (child.anus > 3)) {
+			r += ` V++A++`;
+		} else if ((child.vagina > 2) && (child.anus > 2)) {
+			r += ` V+A+`;
+		} else if (child.vagina > 3) {
+			r += ` V++`;
+		} else if (child.vagina > 2) {
+			r += ` V+`;
+		} else if (child.anus > 3) {
+			r += ` A++`;
+		} else if (child.anus > 2) {
+			r += ` A+`;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longGenitals(child) {
+		if (child.dick > 0) {
+			r += `<span class="pink">`;
+			if (child.balls === 0) {
+				r += `Gelded. `;
+			}
+			if ((child.dick > 8) && (child.balls > 8)) {
+				r += `Hyper dick & balls. `;
+			} else if ((child.dick > 5) && (child.balls > 5)) {
+				r += `Monster dick & balls. `;
+			} else if ((child.dick > 4) && (child.balls > 4)) {
+				r += `Huge dick & balls. `;
+			} else if ((child.dick > 3) && (child.balls > 3)) {
+				r += `Big dick & balls. `;
+			} else if (child.dick > 8) {
+				r += `Hyper dong. `;
+			} else if (child.dick > 5) {
+				r += `Monster dong. `;
+			} else if (child.dick > 4) {
+				r += `Huge dick. `;
+			} else if (child.dick > 3) {
+				r += `Big dick. `;
+			} else if (child.balls > 8) {
+				r += `Hyper balls. `;
+			} else if (child.balls > 5) {
+				r += `Monstrous balls. `;
+			} else if (child.balls > 4) {
+				r += `Huge balls. `;
+			} else if (child.balls > 3) {
+				r += `Big balls. `;
+			}
+			r += `</span> `;
+		}
+		if (child.vagina === 0) {
+			r += `<span class="lime">Virgin.</span> `;
+		} else if (child.pregKnown === 1 && canWalk(child) && child.clothes === "no clothing" && child.shoes === "none") {
+			r += `<span class="pink">Naked, barefoot, and pregnant.</span> `;
+		}
+		if (child.anus === 0) {
+			r += `<span class="lime">Anal virgin.</span> `;
+		}
+		r += `<span class="pink">`;
+		if ((child.vagina > 3) && (child.anus > 3)) {
+			r += `Blown out holes. `;
+		} else if ((child.vagina > 2) && (child.anus > 2)) {
+			r += `High mileage. `;
+		} else if (child.vagina > 3) {
+			r += `Cavernous pussy. `;
+		} else if (child.vagina > 2) {
+			r += `Loose pussy. `;
+		} else if (child.anus > 3) {
+			r += `Permagaped anus. `;
+		} else if (child.anus > 2) {
+			r += `Gaping anus. `;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortAge(child) {
+		r += `<span class="pink">`;
+		if (V.showAgeDetail === 1) {
+			r += child.actualAge;
+		}
+		if (child.actualAge !== child.physicalAge) {
+			r += ` w ${child.physicalAge}y-bdy`;
+		}
+		if (child.visualAge !== child.physicalAge) {
+			r += ` Lks${child.visualAge}`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortFace(child) {
+		if (child.face < -95) {
+			r += `<span class="red">Face---${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face < -40) {
+			r += `<span class="red">Face--${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face < -10) {
+			r += `<span class="red">Face-${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face <= 10) {
+			r += `Face${V.summaryStats ? `[${child.face}]` : ''}`;
+		} else if (child.face <= 40) {
+			r += `<span class="pink">Face+${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face <= 95) {
+			r += `<span class="pink">Face++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else {
+			r += `<span class="pink">Face+++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortEyes(child) {
+		if (!canSee(slave)) {
+			r += `<span class="red">Blind</span> `;
+		} else if (!canSeePerfectly(slave)) {
+			r += `<span class="yellow">Sight-</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortEars(child) {
+		if (child.hears === -2) {
+			r += `<span class="red">Deaf</span> `;
+		} else if ((child.hears === -1) && (child.earwear !== "hearing aids")) {
+			r += `<span class="yellow">Hearing-</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortLips(child) {
+		if (child.lips > 95) {
+			r += `Facepussy`;
+		} else if (child.lips > 70) {
+			r += `Lips+++${V.summaryStats ? `[${child.lips}]` : ''}`;
+		} else if (child.lips > 40) {
+			r += `Lips++${V.summaryStats ? `[${child.lips}]` : ''}`;
+		} else if (child.lips > 20) {
+			r += `Lips+${V.summaryStats ? `[${child.lips}]` : ''}`;
+		} else if (child.lips > 10) {
+			r += `Lips${V.summaryStats ? `[${child.lips}]` : ''}`;
+		} else {
+			r += `<span class="red">Lips-${V.summaryStats ? `[${child.lips}]` : ''}</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortTeeth(child) {
+		if (child.teeth === "crooked") {
+			r += `<span class="yellow">Cr Teeth</span> `;
+		} else if (child.teeth === "gapped") {
+			r += `<span class="yellow">Gap</span> `;
+		} else if (child.teeth === "cosmetic braces") {
+			r += `Cos Braces`;
+		} else if (child.teeth === "straightening braces") {
+			r += `Braces`;
+		} else if (child.teeth === "removable") {
+			r += `Rem Teeth`;
+		} else if (child.teeth === "pointy") {
+			r += `Fangs`;
+		} else if (child.teeth === "baby") {
+			r += `Baby`;
+		} else if (child.teeth === "mixed") {
+			r += `Mixed`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortMuscles(child) {
+		if (child.muscles > 95) {
+			r += `Musc++${V.summaryStats ? `[${child.muscles}]`: ''}`;
+		} else if (child.muscles > 50) {
+			r += `Musc+${V.summaryStats ? `[${child.muscles}]`: ''}`;
+		} else if (child.muscles > 5) {
+			r += `Fit${V.summaryStats ? `[${child.muscles}]`: ''}`;
+		} else if (child.muscles > -6) {
+			r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`;
+		} else if (child.muscles > -31) {
+			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
+				r += `<span class="red">Weak</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
+			} else {
+				r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`;
+			}
+		} else if (child.muscles > -96) {
+			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
+				r += `<span class="red">Weak+</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
+			} else {
+				r += `Soft+${V.summaryStats ? `[${child.muscles}]`: ''}`;
+			}
+		} else {
+			r += `<span class="red">Weak++</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortVoice(child) {
+		if (child.voice === 0) {
+			r += `<span class="red">Mute</span> `;
+		} else {
+			if (child.accent === 3) {
+				r += `<span class="red">Acc--</span> `;
+			} else if (child.accent === 2) {
+				r += `Acc-`;
+			} else if (child.accent === 4) {
+				r += `Acc--`;
+			} else if (child.accent === 1) {
+				r += `<span class="pink">Acc</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortTitsAss(child) {
+		r += `<span class="pink">`;
+		if ((child.boobs >= 12000) && (child.butt > 9)) {
+			r += `T&A+++`;
+		} else if ((child.boobs > 4000) && (child.butt > 8)) {
+			r += `T&A++`;
+		} else if ((child.boobs > 2000) && (child.butt > 6)) {
+			r += `T&A+`;
+		} else if ((child.boobs > 800) && (child.butt > 4)) {
+			r += `T&A`;
+		} else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) {
+			r += `Girlish`;
+		} else if (child.boobs >= 12000) {
+			r += `Boobs+++`;
+		} else if (child.boobs > 4000) {
+			r += `Boobs++`;
+		} else if (child.boobs > 2000) {
+			r += `Boobs+`;
+		} else if (child.boobs > 800) {
+			r += `Boobs`;
+		} else if (child.butt > 9) {
+			r += `Ass+++`;
+		} else if (child.butt > 8) {
+			r += `Ass++`;
+		} else if (child.butt > 6) {
+			r += `Ass+`;
+		} else if (child.butt > 4) {
+			r += `Ass`;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortHips(child) {
+		r += `<span class="red">`;
+		if (child.hips < -1) {
+			if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
+				r += `Disp+`;
+			}
+		} else if (child.hips < 0) {
+			if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
+				r += `Disp+`;
+			}
+		} else if (child.hips > 2) {
+			if (child.butt <= 8) {
+				r += `Disp-`;
+			}
+		} else if (child.hips > 1) {
+			if (child.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
+				r += `Disp-`;
+			}
+		} else if (child.hips > 0) {
+			if (child.butt > 8) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
+					r += `Disp+`;
+				}
+			} else if (child.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
+				r += `Disp-`;
+			}
+		} else {
+			if (child.butt > 6) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
+					r += `Disp+`;
+				}
+			} else if (child.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
+				r += `Disp-`;
+			}
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortWaist(child) {
+		if (child.waist > 95) {
+			r += `<span class="red">Wst---${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
+		} else if (child.waist > 40) {
+			r += `<span class="red">Wst--${V.summaryStats ? `[${child.waist}]`: ''}</span> `;
+		} else if (child.waist > 10) {
+			r += `<span class="red">Wst-${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
+		} else if (child.waist >= -10) {
+			r += `Wst${V.summaryStats ? `[${child.waist}]`: ''}`;
+		} else if (child.waist >= -40) {
+			r += `<span class="pink">Wst+${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
+		} else if (child.waist >= -95) {
+			r += `<span class="pink">Wst++${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
+		} else {
+			r += `<span class="pink">Wst+++${V.summaryStats ? `[${child.waist}]`: ''}</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortImplants(child) {
+		r += `<span class="pink">`;
+		if ((child.boobsImplant === 0) && (child.buttImplant === 0) && (child.waist >= -95) && (child.lipsImplant === 0) && (child.faceImplant <= 5) && (child.bellyImplant === -1)) {
+			r += `Natr`;
+		} else {
+			r += `Impl`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortLactation(child) {
+		if (child.lactation === 1) {
+			r += `Lact`;
+		} else if (child.lactation === 2) {
+			r += `Lact++`;
+		}
+	}
+
+	// /**	TODO:
+	//  * @param {App.Entity.SlaveState} child
+	//  */
+	// function shortMods(child) {
+	// 	V.modScore = SlaveStatsChecker.modScore(child);
+	// 	if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
+	// 		return;
+	// 	} else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) {
+	// 		r += `Mods++`;
+	// 	} else if (V.modScore > 7) {
+	// 		r += `Mods+`;
+	// 	} else {
+	// 		r += `Mods`;
+	// 	}
+	// 	if (!jQuery.isEmptyObject(child.brand)) {
+	// 		r += `Br`;
+	// 	}
+	// }
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longAge(child) {
+		r += `<span class="pink">`;
+		if (V.showAgeDetail === 1) {
+			r += `Age ` + `${num(child.actualAge)}` + `. `;
+		} else if (child.actualAge >= 40) {
+			r += `Forties. `;
+		} else if (child.actualAge >= 35) {
+			r += `Late thirties. `;
+		} else if (child.actualAge >= 30) {
+			r += `Early thirties. `;
+		} else if (child.actualAge >= 25) {
+			r += `Late twenties. `;
+		} else if (child.actualAge >= 20) {
+			r += `Early twenties. `;
+		} else if (child.actualAge >= 19) {
+			r += `Nineteen. `;
+		} else if (child.actualAge >= 18) {
+			r += `Eighteen. `;
+		} else {
+			r += `Underage. `;
+		}
+		/*
+		 ** No NCS, then do the standard, However because of the wrinkes of Incubators, as long as visual age is greater
+		 ** than or equal to physical age, we do the old physical body/Looks for fresh out of the can NCS slaves.
+		 */
+		if (((child.geneMods.NCS === 0) || (child.visualAge >= child.physicalAge))) {
+			if (child.actualAge !== child.physicalAge) {
+				r += `${child.physicalAge}` + ` year old body. `;
+			}
+			if (child.visualAge !== child.physicalAge) {
+				r += `Looks ` + `${child.visualAge}` + `. `;
+			}
+		} else {
+			/*
+			 ** Now the rub. The use of physical Age for the year old body above, basically conflicts with the changes
+			 ** that NCS introduces, so here to *distinguish* the changes, we use visual age with the 'year old body'
+			 ** and appears, for exampChild release from incubator at age 10, Her summary would show, 'Age 0. 10
+			 ** year old body.' But if she's given NCS a few weeks after release, while she's still before her first
+			 ** birthday, it'll appear the same. But once her birthday fires, if we ran with the above code it would
+			 ** say: 'Age 1. 11 year old body.' -- this conflicts with the way NCS works though, because she hasn't
+			 ** visually aged, so our change here makes it say 'Age 1. Appears to have a 10 year old body.'
+			 */
+			r += `Appears to have a ` + `${child.visualAge}` + ` year old body. `;
+		}
+		if (child.geneMods.NCS === 1) {
+			r += `(<span class="orange">NCS</span>) `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longFace(child) {
+		if (child.face < -95) {
+			r += `<span class="red">Very ugly${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		} else if (child.face < -40) {
+			r += `<span class="red">Ugly${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		} else if (child.face < -10) {
+			r += `<span class="red">Unattractive${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		} else if (child.face <= 10) {
+			r += `Average${V.summaryStats ? `[${child.face}]`: ''}`;
+		} else if (child.face <= 40) {
+			r += `<span class="pink">Attractive${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		} else if (child.face <= 95) {
+			r += `<span class="pink">Beautiful${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		} else {
+			r += `<span class="pink">Very beautiful${V.summaryStats ? `[${child.face}]`: ''}</span> `;
+		}
+		r += ` ${child.faceShape} face. `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longEyes(child) {
+		if (!canSee(slave)) {
+			r += `<span class="red">Blind.</span> `;
+		} else if (!canSeePerfectly(slave)) {
+			r += `<span class="yellow">Nearsighted.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longEars(child) {
+		if (child.hears <= -2) {
+			r += `<span class="red">Deaf.</span> `;
+		} else if ((child.hears === -1) && (child.earwear !== "hearing aids")) {
+			r += `<span class="yellow">Hard of hearing.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longLips(child) {
+		if (child.lips > 95) {
+			r += `Facepussy${V.summaryStats ? `[${child.lips}]`: ''}. `;
+		} else if (child.lips > 70) {
+			r += `Huge lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
+		} else if (child.lips > 40) {
+			r += `Big lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
+		} else if (child.lips > 20) {
+			r += `Pretty lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
+		} else if (child.lips > 10) {
+			r += `Normal lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
+		} else {
+			r += `<span class="red">Thin lips${V.summaryStats ? `[${child.lips}]`: ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longTeeth(child) {
+		if (child.teeth === "crooked") {
+			r += `<span class="yellow">Crooked teeth.</span> `;
+		} else if (child.teeth === "gapped") {
+			r += `<span class="yellow">Tooth gap.</span> `;
+		} else if (child.teeth === "cosmetic braces") {
+			r += `Cosmetic braces. `;
+		} else if (child.teeth === "straightening braces") {
+			r += `Braces. `;
+		} else if (child.teeth === "removable") {
+			r += `Removable teeth. `;
+		} else if (child.teeth === "pointy") {
+			r += `Sharp fangs. `;
+		} else if (child.teeth === "baby") {
+			r += `Baby teeth. `;
+		} else if (child.teeth === "mixed") {
+			r += `Mixed teeth. `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longMuscles(child) {
+		if (child.muscles > 95) {
+			r += `Hugely muscular${V.summaryStats ? `[${child.muscles}]` : ''}. `;
+		} else if (child.muscles > 50) {
+			r += `Muscular${V.summaryStats ? `[${child.muscles}]`: ''}. `;
+		} else if (child.muscles > 5) {
+			r += `Fit${V.summaryStats ? `[${child.muscles}]`: ''}. `;
+		} else if (child.muscles > -6) {
+			r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}. `;
+		} else if (child.muscles > -31) {
+			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
+				r += `<span class="red">Weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
+			} else {
+				r += `Weak${V.summaryStats ? `[${child.muscles}]`: ''}. `;
+			}
+		} else if (child.muscles > -96) {
+			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
+				r += `<span class="red">Very weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
+			} else {
+				r += `Very weak${V.summaryStats ? `[${child.muscles}]`: ''}. `;
+			}
+		} else {
+			r += `<span class="red">Frail${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longVoice(child) {
+		if (child.voice === 0) {
+			r += `<span class="red">Mute.</span> `;
+		} else {
+			if (child.accent === 3) {
+				r += `<span class="red">Bad accent.</span> `;
+			} else if (child.accent === 4) {
+				r += `<span class="red">No language skills.</span> `;
+			} else if (child.accent === 2) {
+				r += `Accent. `;
+			} else if (child.accent === 1) {
+				r += `<span class="pink">Cute accent.</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longTitsAss(child) {
+		r += `<span class="pink">`;
+		if ((child.boobs >= 12000) && (child.butt > 9)) {
+			r += `Hyper T&A. `;
+		} else if ((child.boobs > 4000) && (child.butt > 8)) {
+			r += `Enormous T&A. `;
+		} else if ((child.boobs > 2000) && (child.butt > 6)) {
+			r += `Huge T&A. `;
+		} else if ((child.boobs > 800) && (child.butt > 4)) {
+			r += `Big T&A. `;
+		} else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) {
+			r += `Girlish figure. `;
+		} else if (child.boobs >= 12000) {
+			r += `Immobilizing tits. `;
+		} else if (child.boobs > 4000) {
+			r += `Monstrous tits. `;
+		} else if (child.boobs > 2000) {
+			r += `Huge tits. `;
+		} else if (child.boobs > 800) {
+			r += `Big tits. `;
+		} else if (child.butt > 9) {
+			r += `Hyper ass. `;
+		} else if (child.butt > 8) {
+			r += `Titanic ass. `;
+		} else if (child.butt > 6) {
+			r += `Huge ass. `;
+		} else if (child.butt > 4) {
+			r += `Big ass. `;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longHips(child) {
+		r += `<span class="red">`;
+		if (child.hips < -1) {
+			if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+				r += `Disproportionately big butt. `;
+			}
+		} else if (child.hips < 0) {
+			if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+				r += `Disproportionately big butt. `;
+			}
+		} else if (child.hips > 2) {
+			if (child.butt <= 8) {
+				r += `Disproportionately small butt. `;
+			}
+		} else if (child.hips > 1) {
+			if (child.butt <= 3 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
+				r += `Disproportionately small butt. `;
+			}
+		} else if (child.hips > 0) {
+			if (child.butt > 8) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+					r += `Disproportionately big butt. `;
+				}
+			} else if (child.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
+				r += `Disproportionately small butt. `;
+			}
+		} else {
+			if (child.butt > 6) {
+				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
+					r += `Disproportionately big butt. `;
+				}
+			} else if (child.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
+				r += `Disproportionately small butt. `;
+			}
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longWaist(child) {
+		if (child.waist > 95) {
+			r += `<span class="red">Masculine waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		} else if (child.waist > 40) {
+			r += `<span class="red">Ugly waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		} else if (child.waist > 10) {
+			r += `<span class="red">Unattractive waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		} else if (child.waist >= -10) {
+			r += `Average waist${V.summaryStats ? `[${child.waist}]`: ''}. `;
+		} else if (child.waist >= -40) {
+			r += `<span class="pink">Feminine waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		} else if (child.waist >= -95) {
+			r += `<span class="pink">Hourglass waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		} else {
+			r += `<span class="pink">Absurdly narrow waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longImplants(child) {
+		r += `<span class="pink">`;
+		if ((child.boobsImplant !== 0) || (child.buttImplant !== 0) || (child.lipsImplant !== 0) || (child.bellyImplant !== -1)) {
+			r += `Implants. `;
+		} else if ((child.faceImplant >= 30) || (child.waist < -95)) {
+			r += `Surgery enhanced. `;
+		} else {
+			r += `All natural. `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longLactation(child) {
+		if (child.lactation === 1) {
+			r += `Lactating naturally. `;
+		} else if (child.lactation === 2) {
+			r += `Heavy lactation. `;
+		}
+	}
+
+	// /**	TODO:
+	//  * @param {App.Entity.SlaveState} child
+	//  */
+	// function longMods(child) {
+	// 	V.modScorChildStatsChecker.modScore(child);
+	// 	if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
+	// 		return;
+	// 	} else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) {
+	// 		r += `Extensive body mods. `;
+	// 	} else if (V.modScore > 7) {
+	// 		r += `Noticeable body mods. `;
+	// 	} else {
+	// 		r += `Light body mods. `;
+	// 	}
+	// }
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortIntelligence(child) {
+		let intelligence = child.intelligence;
+		if (child.hasOwnProperty("intelligenceImplant")) {
+			intelligence += child.intelligenceImplant;
+		}
+		if (child.fetish === "mindbroken") {
+			return;
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
+			if (intelligence >= 130) {
+				r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I(e+)${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I(e)${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		} else {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSexSkills(child) {
+		let SSkills = child.skill.anal + child.skill.oral;
+		r += `<span class="aquamarine">`;
+		if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) {
+			r += `MSS`;
+		} else {
+			SSkills += child.skill.vaginal;
+			SSkills = Math.trunc(SSkills);
+			if (SSkills > 180) {
+				r += `S++`;
+			} else if ((SSkills > 120) && (child.vagina < 0)) {
+				r += `Sh++`;
+			} else if (SSkills > 90) {
+				r += `S+`;
+			} else if (SSkills > 30) {
+				r += `S`;
+			} else {
+				r += `S-`;
+			}
+			if (V.summaryStats) {
+				r += `[${SSkills}] `;
+			}
+			r += " ";
+			if (child.skill.whoring >= 100) {
+				r += `W+++`;
+			} else if (child.skill.whoring > 60) {
+				r += `W++`;
+			} else if (child.skill.whoring > 30) {
+				r += `W+`;
+			} else if (child.skill.whoring > 10) {
+				r += `W`;
+			}
+			if (child.skill.whoring > 10) {
+				if (V.summaryStats) {
+					r += `[${child.skill.whoring}] `;
+				}
+			}
+			r += " ";
+			if (child.skill.entertainment >= 100) {
+				r += `E+++`;
+			} else if (child.skill.entertainment > 60) {
+				r += `E++`;
+			} else if (child.skill.entertainment > 30) {
+				r += `E+`;
+			} else if (child.skill.entertainment > 10) {
+				r += `E`;
+			}
+			if (child.skill.entertainment > 10) {
+				if (V.summaryStats) {
+					r += `[${child.skill.entertainment}] `;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortPrestige(child) {
+		if (child.prestige > 0) {
+			r += `<span class="green">`;
+			if (child.prestige > 2) {
+				r += `Prest++`;
+			} else if (child.prestige === 2) {
+				r += `Prest+`;
+			} else if (child.prestige === 1) {
+				r += `Prest`;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortPornPrestige(child) {
+		if (child.pornPrestige > 0) {
+			r += `<span class="green">`;
+			if (child.pornPrestige > 2) {
+				r += `PPrest++`;
+			} else if (child.pornPrestige === 2) {
+				r += `PPrest+`;
+			} else if (child.pornPrestige === 1) {
+				r += `PPrest`;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longIntelligence(child) {
+		let intelligence = child.intelligence;
+		if (child.hasOwnProperty("intelligenceImplant")) {
+			intelligence += child.intelligenceImplant;
+		}
+		if (child.fetish === "mindbroken") {
+			return;
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
+			if (intelligence >= 130) {
+				r += `<span class="deepskyblue">Genius${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 95) {
+				r += `<span class="deepskyblue">Brilliant, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">Very smart, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">Smart, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -15) {
+				r += `Average intelligence, well educated${V.summaryStats ? `[${intelligence}]` : ''}. `;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">Slow, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">Very slow, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else {
+				r += `<span class="orangered">Moronic, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			}
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">Brilliant, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">Very smart, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">Smart, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -15) {
+				r += `Average intelligence, educated${V.summaryStats ? `[${intelligence}]` : ''}. `;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">Slow, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">Very slow, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else {
+				r += `<span class="orangered">Moronic, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			}
+		} else {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">Brilliant${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">Very smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">Smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -15) {
+				r += `Average intelligence${V.summaryStats ? `[${intelligence}]` : ''}. `;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">Slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">Very slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			} else {
+				r += `<span class="orangered">Moronic${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longSexSkills(child) {
+		let SSkills = (child.skill.anal + child.skill.oral);
+		r += `<span class="aquamarine">`;
+		if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) {
+			r += `Masterful Whore. `;
+		} else {
+			SSkills += child.skill.vaginal;
+			if (SSkills > 180) {
+				r += `Sex master${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
+			} else if ((SSkills > 120) && (child.vagina < 0)) {
+				r += `Masterful shemale${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
+			} else if (SSkills > 90) {
+				r += `Sexual expert${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
+			} else if (SSkills > 30) {
+				r += `Sexually skilled${V.summaryStats ? `[${Math.trunc(SSkills)}]` : ''}. `;
+			} else {
+				r += `Sexually unskilled${V.summaryStats ? `[${Math.trunc(SSkills)}]` : ''}. `;
+			}
+			r += " ";
+			if (child.skill.whoring >= 100) {
+				r += `Masterful whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
+			} else if (child.skill.whoring >= 60) {
+				r += `Expert whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
+			} else if (child.skill.whoring >= 30) {
+				r += `Skilled whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
+			} else if (child.skill.whoring >= 10) {
+				r += `Basic whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
+			}
+			r += " ";
+			if (child.skill.entertainment >= 100) {
+				r += `Masterful entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
+			} else if (child.skill.entertainment >= 60) {
+				r += `Expert entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
+			} else if (child.skill.entertainment >= 30) {
+				r += `Skilled entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
+			} else if (child.skill.entertainment >= 10) {
+				r += `Basic entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
+			}
+			r += " ";
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longPrestige(child) {
+		if (child.prestige > 0) {
+			r += `<span class="green">`;
+			if (child.prestige > 2) {
+				r += `Extremely prestigious. `;
+			} else if (child.prestige === 2) {
+				r += `Very prestigious. `;
+			} else if (child.prestige === 1) {
+				r += `Prestigious. `;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longPornPrestige(child) {
+		if (child.pornPrestige > 0) {
+			r += `<span class="green">`;
+			if (child.pornPrestige > 2) {
+				r += `Porn star. `;
+			} else if (child.pornPrestige === 2) {
+				r += `Porn slut. `;
+			} else if (child.pornPrestige === 1) {
+				r += `Porn amateur. `;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortFetish(child) {
+		r += `<span class="lightcoral">`;
+		switch (child.fetish) {
+			case "submissive":
+				if (child.fetishStrength > 95) {
+					r += `Sub++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Sub+`;
+				} else {
+					r += `Sub`;
+				}
+				break;
+			case "cumslut":
+				if (child.fetishStrength > 95) {
+					r += `Oral++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Oral+`;
+				} else {
+					r += `Oral`;
+				}
+				break;
+			case "humiliation":
+				if (child.fetishStrength > 95) {
+					r += `Humil++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Humil+`;
+				} else {
+					r += `Humil`;
+				}
+				break;
+			case "buttslut":
+				if (child.fetishStrength > 95) {
+					r += `Anal++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Anal+`;
+				} else {
+					r += `Anal`;
+				}
+				break;
+			case "boobs":
+				if (child.fetishStrength > 95) {
+					r += `Boobs++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Boobs+`;
+				} else {
+					r += `Boobs`;
+				}
+				break;
+			case "sadist":
+				if (child.fetishStrength > 95) {
+					r += `Sadist++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Sadist+`;
+				} else {
+					r += `Sadist`;
+				}
+				break;
+			case "masochist":
+				if (child.fetishStrength > 95) {
+					r += `Pain++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Pain+`;
+				} else {
+					r += `Pain`;
+				}
+				break;
+			case "dom":
+				if (child.fetishStrength > 95) {
+					r += `Dom++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Dom+`;
+				} else {
+					r += `Dom`;
+				}
+				break;
+			case "pregnancy":
+				if (child.fetishStrength > 95) {
+					r += `Preg++`;
+				} else if (child.fetishStrength > 60) {
+					r += `Preg+`;
+				} else {
+					r += `Preg`;
+				}
+				break;
+			default:
+				r += `Vanilla`;
+				break;
+		}
+		if (V.summaryStats) {
+			r += `[${child.fetishStrength}]`;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortAttraction(child) {
+		if (child.attrXY <= 5) {
+			r += `<span class="red">XY---${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		} else if (child.attrXY <= 15) {
+			r += `<span class="red">XY--${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		} else if (child.attrXY <= 35) {
+			r += `<span class="red">XY-${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		} else if (child.attrXY <= 65) {
+			r += `XY${V.summaryStats ? `[${child.attrXY}]`: ''}`;
+		} else if (child.attrXY <= 85) {
+			r += `<span class="green">XY+${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		} else if (child.attrXY <= 95) {
+			r += `<span class="green">XY++${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		} else if (child.attrXX > 95) {
+			if (child.energy <= 95) {
+				r += `<span class="green">Omni!</span> `;
+			} else {
+				r += `<span class="green">Omni+Nympho!!</span> `;
+			}
+		} else {
+			r += `<span class="green">XY+++${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
+		}
+		if (child.attrXX <= 5) {
+			r += `<span class="red">XX---${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		} else if (child.attrXX <= 15) {
+			r += `<span class="red">XX--${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		} else if (child.attrXX <= 35) {
+			r += `<span class="red">XX-${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		} else if (child.attrXX <= 65) {
+			r += `XX${V.summaryStats ? `[${child.attrXX}]`: ''}`;
+		} else if (child.attrXX <= 85) {
+			r += `<span class="green">XX+${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		} else if (child.attrXX <= 95) {
+			r += `<span class="green">XX++${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		} else if (child.attrXY <= 95) {
+			r += `<span class="green">XX+++${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
+		}
+		if (child.energy > 95) {
+			if ((child.attrXY <= 95) || (child.attrXX <= 95)) {
+				r += `<span class="green">Nympho!</span> `;
+			}
+		} else if (child.energy > 80) {
+			r += `<span class="green">SD++${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
+		} else if (child.energy > 60) {
+			r += `<span class="green">SD+${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
+		} else if (child.energy > 40) {
+			r += `<span class="yellow">SD${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
+		} else if (child.energy > 20) {
+			r += `<span class="red">SD-${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
+		} else {
+			r += `<span class="red">SD--${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSmartFetish(child) {
+		if (child.fetishKnown === 1) {
+			if (child.clitSetting === "off") {
+				r += `SP-`;
+			} else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) {
+				r += `SP:sub`;
+			} else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) {
+				r += `SP:oral`;
+			} else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) {
+				r += `SP:humil`;
+			} else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) {
+				r += `SP:anal`;
+			} else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) {
+				r += `SP:boobs`;
+			} else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) {
+				r += `SP:sade`;
+			} else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) {
+				r += `SP:pain`;
+			} else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) {
+				r += `SP:dom`;
+			} else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) {
+				r += `SP:preg`;
+			} else if (((child.fetish !== "none") && (child.clitSetting === "vanilla"))) {
+				r += `SP:vanilla`;
+			} else if ((child.energy <= 95) && (child.clitSetting === "all")) {
+				r += `SP:all`;
+			} else if ((child.energy > 5) && (child.clitSetting === "none")) {
+				r += `SP:none`;
+			} else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) {
+				r += `SP:monitoring`;
+			}
+		} else {
+			switch (child.clitSetting) {
+				case "off":
+					r += `SP-`;
+					break;
+				case "submissive":
+					r += `SP:sub`;
+					break;
+				case "lesbian":
+					r += `SP:les`;
+					break;
+				case "oral":
+					r += `SP:oral`;
+					break;
+				case "humiliation":
+					r += `SP:humil`;
+					break;
+				case "anal":
+					r += `SP:anal`;
+					break;
+				case "boobs":
+					r += `SP:boobs`;
+					break;
+				case "sadist":
+					r += `SP:sade`;
+					break;
+				case "masochist":
+					r += `SP:pain`;
+					break;
+				case "dom":
+					r += `SP:dom`;
+					break;
+				case "pregnancy":
+					r += `SP:pregnancy`;
+					break;
+				case "vanilla":
+					r += `SP:vanilla`;
+					break;
+				case "all":
+					r += `SP:all`;
+					break;
+				case "none":
+					r += `SP:none`;
+					break;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSmartAttraction(child) {
+		if (child.attrKnown === 1) {
+			if (child.clitSetting === "women") {
+				if (child.attrXX < 95) {
+					r += `SP:women`;
+				} else {
+					r += `SP:monitoring`;
+				}
+			} else if (child.clitSetting === "men") {
+				if (child.attrXY < 95) {
+					r += `SP:men`;
+				} else {
+					r += `SP:monitoring`;
+				}
+			} else if (child.clitSetting === "anti-women") {
+				if (child.attrXX > 0) {
+					r += `SP:anti-women`;
+				} else {
+					r += `SP:monitoring`;
+				}
+			} else if (child.clitSetting === "anti-men") {
+				if (child.attrXY > 0) {
+					r += `SP:anti-men`;
+				} else {
+					r += `SP:monitoring`;
+				}
+			}
+		} else {
+			if (child.clitSetting === "women") {
+				r += `SP:women`;
+			} else if (child.clitSetting === "men") {
+				r += `SP:men`;
+			} else if (child.clitSetting === "anti-women") {
+				r += `SP:anti-women`;
+			} else if (child.clitSetting === "anti-men") {
+				r += `SP:anti-men`;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortBehaviorFlaw(child) {
+		r += `<span class="red">`;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				r += `Arrog`;
+				break;
+			case "bitchy":
+				r += `Bitchy`;
+				break;
+			case "odd":
+				r += `Odd`;
+				break;
+			case "hates men":
+				r += `Men-`;
+				break;
+			case "hates women":
+				r += `Women-`;
+				break;
+			case "gluttonous":
+				r += `Glut`;
+				break;
+			case "anorexic":
+				r += `Ano`;
+				break;
+			case "devout":
+				r += `Dev`;
+				break;
+			case "liberated":
+				r += `Lib`;
+				break;
+			default:
+				child.behavioralFlaw = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSexFlaw(child) {
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `<span class="red">Oral-</span> `;
+				break;
+			case "hates anal":
+				r += `<span class="red">Anal-</span> `;
+				break;
+			case "hates penetration":
+				r += `<span class="red">Fuck-</span> `;
+				break;
+			case "shamefast":
+				r += `<span class="red">Shame</span> `;
+				break;
+			case "idealistic":
+				r += `<span class="red">Ideal</span> `;
+				break;
+			case "repressed":
+				r += `<span class="red">Repre</span> `;
+				break;
+			case "apathetic":
+				r += `<span class="red">Apath</span> `;
+				break;
+			case "crude":
+				r += `<span class="red">Crude</span> `;
+				break;
+			case "judgemental":
+				r += `<span class="red">Judge</span> `;
+				break;
+			case "cum addict":
+				r += `<span class="yellow">CumAdd</span> `;
+				break;
+			case "anal addict":
+				r += `<span class="yellow">AnalAdd</span> `;
+				break;
+			case "attention whore":
+				r += `<span class="yellow">Attention</span> `;
+				break;
+			case "breast growth":
+				r += `<span class="yellow">BoobObsess</span> `;
+				break;
+			case "abusive":
+				r += `<span class="yellow">Abusive</span> `;
+				break;
+			case "malicious":
+				r += `<span class="yellow">Malice</span> `;
+				break;
+			case "self hating":
+				r += `<span class="yellow">SelfHatr</span> `;
+				break;
+			case "neglectful":
+				r += `<span class="yellow">SelfNeglect</span> `;
+				break;
+			case "breeder":
+				r += `<span class="yellow">BreedObsess</span> `;
+				break;
+			default:
+				child.sexualFlaw = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortBehaviorQuirk(child) {
+		r += `<span class="green">`;
+		switch (child.behavioralQuirk) {
+			case "confident":
+				r += `Confid`;
+				break;
+			case "cutting":
+				r += `Cutting`;
+				break;
+			case "funny":
+				r += `Funny`;
+				break;
+			case "fitness":
+				r += `Fit`;
+				break;
+			case "adores women":
+				r += `Women+`;
+				break;
+			case "adores men":
+				r += `Men+`;
+				break;
+			case "insecure":
+				r += `Insec`;
+				break;
+			case "sinful":
+				r += `Sinf`;
+				break;
+			case "advocate":
+				r += `Advoc`;
+				break;
+			default:
+				child.behavioralQuirk = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortSexQuirk(child) {
+		switch (child.sexualQuirk) {
+			case "gagfuck queen":
+				r += `Gagfuck`;
+				break;
+			case "painal queen":
+				r += `Painal`;
+				break;
+			case "strugglefuck queen":
+				r += `Struggle`;
+				break;
+			case "tease":
+				r += `Tease`;
+				break;
+			case "romantic":
+				r += `Romantic`;
+				break;
+			case "perverted":
+				r += `Perverted`;
+				break;
+			case "caring":
+				r += `Caring`;
+				break;
+			case "unflinching":
+				r += `Unflinch`;
+				break;
+			case "size queen":
+				r += `SizeQ`;
+				break;
+			default:
+				child.sexualQuirk = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longFetish(child) {
+		r += `<span class="lightcoral">`;
+		switch (child.fetish) {
+			case "submissive":
+				if (child.fetishStrength > 95) {
+					r += `Complete submissive${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Submissive${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Submissive tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "cumslut":
+				if (child.fetishStrength > 95) {
+					r += `Cumslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Oral fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Prefers oral${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "humiliation":
+				if (child.fetishStrength > 95) {
+					r += `Humiliation slut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Exhibitionist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Interest in humiliation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "buttslut":
+				if (child.fetishStrength > 95) {
+					r += `Buttslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Anal fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Prefers anal${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "boobs":
+				if (child.fetishStrength > 95) {
+					r += `Boobslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Breast fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Loves boobs${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "sadist":
+				if (child.fetishStrength > 95) {
+					r += `Complete sadist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Sadist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Sadistic tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "masochist":
+				if (child.fetishStrength > 95) {
+					r += `Complete masochist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Masochist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Masochistic tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "dom":
+				if (child.fetishStrength > 95) {
+					r += `Complete dom${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Dominant${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Dominant tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			case "pregnancy":
+				if (child.fetishStrength > 95) {
+					r += `Pregnancy fetish ${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else if (child.fetishStrength > 60) {
+					r += `Pregnancy kink${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				} else {
+					r += `Interest in impregnation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				}
+				break;
+			default:
+				r += `Sexually vanilla${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longAttraction(child) {
+		if (child.attrXY <= 5) {
+			r += `<span class="red">Disgusted by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		} else if (child.attrXY <= 15) {
+			r += `<span class="red">Turned off by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		} else if (child.attrXY <= 35) {
+			r += `<span class="red">Not attracted to men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		} else if (child.attrXY <= 65) {
+			r += `Indifferent to men${V.summaryStats ? `[${child.attrXY}]` : ''}, `;
+		} else if (child.attrXY <= 85) {
+			r += `<span class="green">Attracted to men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		} else if (child.attrXY <= 95) {
+			r += `<span class="green">Aroused by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		} else if (child.attrXX > 95) {
+			if (child.energy <= 95) {
+				r += `<span class="green">Omnisexual!</span> `;
+			} else {
+				r += `<span class="green">Omnisexual nymphomaniac!</span> `;
+			}
+		} else {
+			r += `<span class="green">Passionate about men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
+		}
+		if (child.attrXX <= 5) {
+			r += `<span class="red">disgusted by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		} else if (child.attrXX <= 15) {
+			r += `<span class="red">turned off by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		} else if (child.attrXX <= 35) {
+			r += `<span class="red">not attracted to women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		} else if (child.attrXX <= 65) {
+			r += `indifferent to women${V.summaryStats ? `[${child.attrXX}]` : ''}. `;
+		} else if (child.attrXX <= 85) {
+			r += `<span class="green">attracted to women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		} else if (child.attrXX <= 95) {
+			r += `<span class="green">aroused by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		} else if (child.attrXY <= 95) {
+			r += `<span class="green">passionate about women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
+		}
+		if (child.energy > 95) {
+			if ((child.attrXY <= 95) || (child.attrXX <= 95)) {
+				r += `<span class="green">Nymphomaniac!</span> `;
+			}
+		} else if (child.energy > 80) {
+			r += `<span class="green">Powerful sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
+		} else if (child.energy > 60) {
+			r += `<span class="green">Good sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
+		} else if (child.energy > 40) {
+			r += `<span class="yellow">Average sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
+		} else if (child.energy > 20) {
+			r += `<span class="red">Poor sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
+		} else {
+			r += `<span class="red">No sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longSmartFetish(child) {
+		if (child.fetishKnown === 1) {
+			if (child.clitSetting === "off") {
+				r += `SP off. `;
+			} else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) {
+				r += `SP: submissive. `;
+			} else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) {
+				r += `SP: oral. `;
+			} else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) {
+				r += `SP: humiliation. `;
+			} else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) {
+				r += `SP: anal. `;
+			} else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) {
+				r += `SP: breasts. `;
+			} else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) {
+				r += `SP: sadism. `;
+			} else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) {
+				r += `SP: masochism. `;
+			} else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) {
+				r += `SP: dominance. `;
+			} else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) {
+				r += `SP: pregnancy. `;
+			} else if ((child.fetish !== "none") && (child.clitSetting === "vanilla")) {
+				r += `SP: vanilla. `;
+			} else if ((child.energy <= 95) && (child.clitSetting === "all")) {
+				r += `SP: all. `;
+			} else if ((child.energy > 5) && (child.clitSetting === "none")) {
+				r += `SP: none. `;
+			} else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) {
+				r += `SP: monitoring. `;
+			}
+		} else {
+			switch (child.clitSetting) {
+				case "off":
+					r += `SP off. `;
+					break;
+				case "submissive":
+					r += `SP: submissive. `;
+					break;
+				case "oral":
+					r += `SP: oral. `;
+					break;
+				case "humiliation":
+					r += `SP: humiliation. `;
+					break;
+				case "anal":
+					r += `SP: anal. `;
+					break;
+				case "boobs":
+					r += `SP: breasts. `;
+					break;
+				case "sadist":
+					r += `SP: sadism. `;
+					break;
+				case "masochist":
+					r += `SP: masochism. `;
+					break;
+				case "dom":
+					r += `SP: dominance. `;
+					break;
+				case "pregnancy":
+					r += `SP: pregnancy. `;
+					break;
+				case "vanilla":
+					r += `SP: vanilla. `;
+					break;
+				case "all":
+					r += `SP: all. `;
+					break;
+				case "none":
+					r += `SP: none. `;
+					break;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longSmartAttraction(child) {
+		if (child.attrKnown === 1) {
+			if ((child.attrXX < 100) && (child.clitSetting === "women")) {
+				r += `SP: women. `;
+			} else if ((child.attrXY < 100) && (child.clitSetting === "men")) {
+				r += `SP: men. `;
+			}
+		} else {
+			if (child.clitSetting === "women") {
+				r += `SP: women. `;
+			} else if (child.clitSetting === "men") {
+				r += `SP: men. `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longBehaviorFlaw(child) {
+		r += `<span class="red">`;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				r += `Arrogant. `;
+				break;
+			case "bitchy":
+				r += `Bitchy. `;
+				break;
+			case "odd":
+				r += `Odd. `;
+				break;
+			case "hates men":
+				r += `Hates men. `;
+				break;
+			case "hates women":
+				r += `Hates women. `;
+				break;
+			case "gluttonous":
+				r += `Stress eater. `;
+				break;
+			case "anorexic":
+				r += `Anorexic. `;
+				break;
+			case "devout":
+				r += `Devoutly religious. `;
+				break;
+			case "liberated":
+				r += `Mentally liberated. `;
+				break;
+			default:
+				child.behavioralFlaw = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longSexFlaw(child) {
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `<span class="red">Hates oral.</span> `;
+				break;
+			case "hates anal":
+				r += `<span class="red">Hates anal.</span> `;
+				break;
+			case "hates penetration":
+				r += `<span class="red">Hates penetration.</span> `;
+				break;
+			case "shamefast":
+				r += `<span class="red">Shamefast.</span> `;
+				break;
+			case "idealistic":
+				r += `<span class="red">Sexually idealistic.</span> `;
+				break;
+			case "repressed":
+				r += `<span class="red">Sexually repressed.</span> `;
+				break;
+			case "apathetic":
+				r += `<span class="red">Sexually apathetic.</span> `;
+				break;
+			case "crude":
+				r += `<span class="red">Sexually crude.</span> `;
+				break;
+			case "judgemental":
+				r += `<span class="red">Sexually judgemental.</span> `;
+				break;
+			case "cum addict":
+				r += `<span class="yellow">Cum addict.</span> `;
+				break;
+			case "anal addict":
+				r += `<span class="yellow">Anal addict.</span> `;
+				break;
+			case "attention whore":
+				r += `<span class="yellow">Attention whore.</span> `;
+				break;
+			case "breast growth":
+				r += `<span class="yellow">Breast obsession.</span> `;
+				break;
+			case "abusive":
+				r += `<span class="yellow">Sexually abusive.</span> `;
+				break;
+			case "malicious":
+				r += `<span class="yellow">Sexually malicious.</span> `;
+				break;
+			case "self hating":
+				r += `<span class="yellow">Self hatred.</span> `;
+				break;
+			case "neglectful":
+				r += `<span class="yellow">Self neglectful.</span> `;
+				break;
+			case "breeder":
+				r += `<span class="yellow">Breeding obsession.</span> `;
+				break;
+			default:
+				child.sexualFlaw = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longBehaviorQuirk(child) {
+		r += `<span class="green">`;
+		switch (child.behavioralQuirk) {
+			case "confident":
+				r += `Confident. `;
+				break;
+			case "cutting":
+				r += `Cutting. `;
+				break;
+			case "funny":
+				r += `Funny. `;
+				break;
+			case "fitness":
+				r += `Fitness. `;
+				break;
+			case "adores women":
+				r += `Adores women. `;
+				break;
+			case "adores men":
+				r += `Adores men. `;
+				break;
+			case "insecure":
+				r += `Insecure. `;
+				break;
+			case "sinful":
+				r += `Sinful. `;
+				break;
+			case "advocate":
+				r += `Advocate. `;
+				break;
+			default:
+				child.behavioralQuirk = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longSexQuirk(child) {
+		switch (child.sexualQuirk) {
+			case "gagfuck queen":
+				r += `Gagfuck queen. `;
+				break;
+			case "painal queen":
+				r += `Painal queen. `;
+				break;
+			case "strugglefuck queen":
+				r += `Strugglefuck queen. `;
+				break;
+			case "tease":
+				r += `Tease. `;
+				break;
+			case "romantic":
+				r += `Romantic. `;
+				break;
+			case "perverted":
+				r += `Perverted. `;
+				break;
+			case "caring":
+				r += `Caring. `;
+				break;
+			case "unflinching":
+				r += `Unflinching. `;
+				break;
+			case "size queen":
+				r += `Size queen. `;
+				break;
+			default:
+				child.sexualQuirk = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortExtendedFamily(child) {
+		let handled = 0;
+		if (child.mother > 0) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.mother;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.mother === -1) {
+			r += `Your daughter`;
+			if (child.relationship < -1) {
+				res += ` & ${PCrelationshipTerm(child)}`;
+				handled = 1;
+			}
+			r += " ";
+		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.mother].fullName}'s daughter `;
+		}
+		if (child.father > 0 && child.father !== child.mother) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.father;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.father === -1 && child.mother !== -1) {
+			r += `Your daughter`;
+			if (child.relationship < -1) {
+				res += ` & ${PCrelationshipTerm(child)}`;
+				handled = 1;
+			}
+			r += " ";
+		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.father].fullName}'s daughter`;
+		}
+		if (child.daughters === 1) {
+			let _ssj = V.slaves.findIndex(function(s) {
+				return s.mother === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s mother`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+			_ssj = V.slaves.findIndex(function(s) {
+				return s.father === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s father`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.daughters > 1) {
+			r += `multiple daughters `;
+		}
+		if (child.sisters === 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return areSisters(s, child) > 0;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s sister`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += `& ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.sisters > 1) {
+			r += `multiple sisters `;
+		}
+		if (child.relationship > 0 && handled !== 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.relationshipTarget;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s`;
+				const friendShipShort = relationshipTermShort(child);
+				r += ` ${friendShipShort}`;
+			}
+		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
+			r += `Your wife`;
+		} else if (child.relationship === -2) {
+			r += `E Bonded`;
+		} else if (child.relationship === -1) {
+			r += `E Slut`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortClone(child) {
+		if (child.clone !== 0) {
+			r += ` Clone`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function shortRival(child) {
+		if (child.rivalry !== 0) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.rivalryTarget;
+			});
+			if (_ssj !== -1) {
+				r += `<span class="lightsalmon">`;
+				if (child.rivalry <= 1) {
+					r += `Disl ${SlaveFullName(V.slaves[_ssj])}`;
+				} else if (child.rivalry <= 2) {
+					r += `${SlaveFullName(V.slaves[_ssj])}'s rival`;
+				} else {
+					r += `Hates ${SlaveFullName(V.slaves[_ssj])}`;
+				}
+				r += `</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longExtendedFamily(child) {
+		let handled = 0;
+		if (child.mother > 0) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.mother;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.mother === -1) {
+			r += `Your `;
+			if (child.relationship < -1) {
+				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
+				handled = 1;
+			} else {
+				r += `<span class="lightgreen">daughter.</span> `;
+			}
+		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `;
+		}
+		if (child.father > 0 && child.father !== child.mother) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.father;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.father === -1 && child.father !== child.mother) {
+			r += `Your `;
+			if (child.relationship < -1) {
+				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
+				handled = 1;
+			} else {
+				r += `<span class="lightgreen">daughter.</span> `;
+			}
+		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `;
+		}
+		if (child.daughters === 1) {
+			let _ssj = V.slaves.findIndex(function(s) {
+				return s.mother === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+			_ssj = V.slaves.findIndex(function(s) {
+				return s.father === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.daughters > 1) {
+			if (child.daughters > 10) {
+				r += `<span class="lightgreen">Has tons of daughters.</span> `;
+			} else if (child.daughters > 5) {
+				r += `<span class="lightgreen">Has many daughters.</span> `;
+			} else {
+				r += `<span class="lightgreen">Has several daughters.</span> `;
+			}
+		}
+		if (child.sisters === 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return areSisters(s, child) > 0;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.sisters > 1) {
+			if (child.sisters > 10) {
+				r += `<span class="lightgreen">One of many sisters.</span> `;
+			} else if (child.sisters > 5) {
+				r += `<span class="lightgreen">Has many sisters.</span> `;
+			} else {
+				r += `<span class="lightgreen">Has several sisters.</span> `;
+			}
+		}
+		if (child.relationship > 0 && handled !== 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.relationshipTarget;
+			});
+			if (_ssj !== -1) {
+				const friendship = relationshipTerm(child);
+				r += `${SlaveFullName(V.slaves[_ssj])}'s `;
+				r += `<span class="lightgreen">${friendship}.</span> `;
+			}
+		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
+			r += `<span class="lightgreen">Your wife.</span> `;
+		} else if (child.relationship === -2) {
+			r += `<span class="lightgreen">Emotionally bonded to you.</span> `;
+		} else if (child.relationship === -1) {
+			r += `<span class="lightgreen">Emotional slut.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longClone(child) {
+		if (child.clone !== 0) {
+			r += ` <span class="skyblue">Clone of ${child.clone}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longRival(child) {
+		if (child.rivalry !== 0) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.rivalryTarget;
+			});
+			if (_ssj !== -1) {
+				if (child.rivalry <= 1) {
+					r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `;
+				} else if (child.rivalry <= 2) {
+					r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `;
+				} else {
+					r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `;
+				}
+			}
+			r += " ";
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longClothes(child) {
+		switch (child.clothes) {
+			case "a slave gown":
+				r += `Slave gown. `;
+				break;
+			case "a mini dress":
+				r += `Mini dress. `;
+				break;
+			case "a ball gown":
+				r += `Ball gown. `;
+				break;
+			case "a schoolgirl outfit":
+				r += `Schoolgirl outfit. `;
+				break;
+			case "a tank-top":
+				r += `Nice tank-top. `;
+				break;
+			case "a tube top":
+				r += `Nice tube top. `;
+				break;
+			case "a t-shirt":
+				r += `T-shirt. `;
+				break;
+			case "an oversized t-shirt":
+				r += `Nice over-sized t-shirt. `;
+				break;
+			default:
+				r += `Naked. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longCollar(child) {
+		switch (child.collar) {
+			case "uncomfortable leather":
+				r += `Leather collar. `;
+				break;
+			case "tight steel":
+				r += `Steel collar. `;
+				break;
+			case "preg biometrics":
+				r += `Pregnancy biometrics collar. `;
+				break;
+			case "cruel retirement counter":
+				r += `Cruel counter collar. `;
+				break;
+			case "shock punishment":
+				r += `Shock collar. `;
+				break;
+			case "dildo gag":
+				r += `Dildo gag. `;
+				break;
+			case "massive dildo gag":
+				r += `Throat-bulging dildo gag. `;
+				break;
+			case "neck corset":
+				r += `Neck corset. `;
+				break;
+			case "stylish leather":
+				r += `Stylish leather collar. `;
+				break;
+			case "satin choker":
+				r += `Satin choker. `;
+				break;
+			case "silk ribbon":
+				r += `Silken ribbon. `;
+				break;
+			case "heavy gold":
+				r += `Gold collar. `;
+				break;
+			case "bowtie":
+				r += `Bowtie collar. `;
+				break;
+			case "pretty jewelry":
+				r += `Pretty collar. `;
+				break;
+			case "nice retirement counter":
+				r += `Nice counter collar. `;
+				break;
+			case "bell collar":
+				r += `Bell collar. `;
+				break;
+			case "leather with cowbell":
+				r += `Cowbell collar. `;
+				break;
+			case "ancient Egyptian":
+				r += `Wesekh. `;
+				break;
+			case "ball gag":
+				r += `Ball gag. `;
+				break;
+			case "bit gag":
+				r += `Bit gag. `;
+				break;
+			case "porcelain mask":
+				r += `Porcelain mask. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longBelly(child) {
+		switch (child.bellyAccessory) {
+			case "shapewear":
+				r += `Shapewear. `;
+				break;
+			case "a small empathy belly":
+				r += `Small fake belly. `;
+				break;
+			case "a medium empathy belly":
+				r += `Medium fake belly. `;
+				break;
+			case "a large empathy belly":
+				r += `Large fake belly. `;
+				break;
+			case "a huge empathy belly":
+				r += `Huge fake belly. `;
+				break;
+			case "a corset":
+				r += `Corset. `;
+				break;
+			case "an extreme corset":
+				r += `Extreme corsetage. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longLegs(child) {
+		if (child.legAccessory === "short stockings") {
+			r += `Short stockings. `;
+		} else if (child.legAccessory === "long stockings") {
+			r += `Long stockings. `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longShoes(child) {
+		if (child.shoes === "heels") {
+			r += `Heels. `;
+		} else if (child.shoes === "pumps") {
+			r += `Pumps. `;
+		} else if (child.shoes === "extreme heels") {
+			r += `Extreme heels. `;
+		} else if (child.shoes === "boots") {
+			r += `Boots. `;
+		} else if (child.heels === 1) {
+			r += `<span class="yellow">Crawling.</span> `;
+		} else if (child.shoes === "flats") {
+			r += `Flats. `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longChastity(child) {
+		if (child.chastityAnus === 1 && child.chastityPenis === 1 && child.chastityVagina === 1) {
+			r += `Full chastity. `;
+		} else if (child.chastityPenis === 1 && child.chastityVagina === 1) {
+			r += `Genital chastity. `;
+		} else if ((child.chastityAnus === 1 && child.chastityVagina === 1) || (child.chastityAnus === 1 && child.chastityPenis === 1)) {
+			r += `Combined chastity. `;
+		} else if (child.chastityVagina === 1) {
+			r += `Vaginal chastity. `;
+		} else if (child.chastityPenis === 1) {
+			r += `Chastity cage. `;
+		} else if (child.chastityAnus === 1) {
+			r += `Anal chastity. `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longVaginalAcc(child) {
+		if (child.vaginalAttachment !== "vibrator") {
+			switch (child.vaginalAccessory) {
+				case "bullet vibrator":
+					r += `Attached bullet vibrator. `;
+					break;
+				case "smart bullet vibrator":
+					r += `Attached smart bullet vibrator. `;
+					break;
+				case "dildo":
+					r += `Vaginal dildo. `;
+					break;
+				case "large dildo":
+					r += `Large vaginal dildo. `;
+					break;
+				case "huge dildo":
+					r += `Huge vaginal dildo. `;
+					break;
+				case "long dildo":
+					r += `Long vaginal dildo. `;
+					break;
+				case "long, large dildo":
+					r += `Long and large vaginal dildo. `;
+					break;
+				case "long, huge dildo":
+					r += `Long and wide vaginal dildo. `;
+					break;
+			}
+		}
+		if (child.vaginalAttachment !== "none") {
+			switch (child.vaginalAttachment) {
+				case "vibrator":
+					r += `Vibrating dildo. `;
+					break;
+			}
+			r += " ";
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longDickAcc(child) {
+		switch (child.dickAccessory) {
+			case "sock":
+				r += `Cock sock. `;
+				break;
+			case "bullet vibrator":
+				r += `Frenulum bullet vibrator. `;
+				break;
+			case "smart bullet vibrator":
+				r += `Smart frenulum bullet vibrator. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function longButtplug(child) {
+		switch (child.buttplug) {
+			case "plug":
+				r += `Buttplug. `;
+				break;
+			case "large plug":
+				r += `Large buttplug. `;
+				break;
+			case "huge plug":
+				r += `Huge buttplug. `;
+				break;
+			case "long plug":
+				r += `Long buttplug. `;
+				break;
+			case "long, large plug":
+				r += `Large, long buttplug. `;
+				break;
+			case "long, huge plug":
+				r += `Enormous buttplug. `;
+				break;
+		}
+		switch (child.buttplugAttachment) {
+			case "tail":
+				r += `Attached tail. `;
+				break;
+			case "cat tail":
+				r += `Attached cat tail. `;
+				break;
+			case "fox tail":
+				r += `Attached fox tail. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function rulesAssistant(child) {
+		if (child.useRulesAssistant === 0) {
+			r += `<span class="lightgreen">RA-Exempt</span> `;
+		} else if (abbreviate.rulesets === 2 && (child.currentRules !== undefined) && (child.currentRules.length > 0)) {
+			r += `Rules: ${V.defaultRules.filter(x => ruleApplied(child, x)).map(x => x.name).join(", ")}`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} child
+	 */
+	function origins(child) {
+		r += `<br> `;
+		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+		}
+		r += `<span class="gray">${child.origin}</span> `;
+	}
+
+	return ChildSummaryUncached(child);
+};
diff --git a/src/facilities/nursery/widgets/nurseryWidgets.js b/src/facilities/nursery/widgets/children/longChildDescription.js
similarity index 56%
rename from src/facilities/nursery/widgets/nurseryWidgets.js
rename to src/facilities/nursery/widgets/children/longChildDescription.js
index 5f1ea8fb39a..5646db25c7f 100644
--- a/src/facilities/nursery/widgets/nurseryWidgets.js
+++ b/src/facilities/nursery/widgets/children/longChildDescription.js
@@ -1,7747 +1,1298 @@
-/* INFANTS */
-
 /**
- * Displays a summary of the infant
- * @param {App.Entity.InfantState} child
+ * Displays a detailed description of the child
+ * @param {App.Entity.SlaveState} child
  * @returns {string}
  */
-App.Facilities.Nursery.InfantSummary = function(child) {
+App.Facilities.Nursery.LongChildDescription = function(child) {
 	"use strict";
+
+	// declarations
 	const
-		weeksOwned = V.week - child.weekAcquired;
+		arcology = V.arcologies[0],
+		PC = V.PC,
+		slaves = V.slaves,
+		desc = child.actualAge < 13 ? `child` : `teen`, // TODO:
+		girl = V.girl,
+		father = child.father === -1 ? PC : getSlave(child.father),
+		mother = child.mother === -1 ? PC : getSlave(child.mother);
 
 	let
 		r = ``;
 
-	function InfantSummaryUncached(child) {
-		/** @type {App.UI.SlaveSummary.AbbreviationState} */
-		const abbreviate = V.UI.slaveSummary.abbreviation;
-		if (abbreviate.health === 1) {
-			// shortHealth(child);
-		} else if (abbreviate.health === 2) {
-			// longHealth(child);
-		}
-		if (abbreviate.nationality + abbreviate.genitalia + abbreviate.physicals + abbreviate.skills + abbreviate.mental !== 0) {
-			r += `<br> `;
-			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-				r += "&nbsp;&nbsp;&nbsp;&nbsp;";
-			}
-		}
-		if (child.actualAge > 0) {
-			if (child.actualAge > 1) {
-				V.desc = `toddler`;
-			} else {
-				V.desc = `baby`;
-			}
-		} else {
-			if (weeksOwned <= 1) {
-				V.desc = `newborn`;
-			} else {
-				V.desc = `baby`;
-			}
-		}
-		const firstLetter = V.desc.substring(0, 1).toUpperCase();
-		V.desc = firstLetter + V.desc.substring(1);
-		r += `<strong><span class="coral">${V.desc}${abbreviate.physicals === 2? '.' : ''}</span></strong> `;
-		if (V.seeRace) {
-			r += `<span class="tan">`;
-			if (abbreviate.race === 1) {
-				shortRace(child);
-			} else if (abbreviate.race === 2) {
-				longRace(child);
-			}
-			r += `</span> `;
-		}
-		if (abbreviate.nationality === 1) {
-			shortNationality(child);
-		} else if (abbreviate.nationality === 2) {
-			longNationality(child);
-		}
-		if (abbreviate.physicals === 1) {
-			shortSkin(child);
-		} else {
-			r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `;
-		}
-		if (abbreviate.physicals === 1) {
-			shortAge(child);
-			shortFace(child);
-			r += `</span> `;
-		} else if (abbreviate.physicals === 2) {
-			longAge(child);
-			longFace(child);
-			r += `</span> `;
-		}
-		r += `<br>`;
-		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-			r += "&nbsp;&nbsp;&nbsp;&nbsp;";
-		}
-		if (abbreviate.skills === 1) {
-			shortIntelligence(child);
-			shortPrestige(child);
-			shortPornPrestige(child);
-		} else if (abbreviate.skills === 2) {
-			longIntelligence(child);
-			longPrestige(child);
-			longPornPrestige(child);
-		}
-		if (abbreviate.mental === 1) {
-			shortBehaviorFlaw(child);
-			shortSexFlaw(child);
-		} else if (abbreviate.mental === 2) {
-			longBehaviorFlaw(child);
-			longSexFlaw(child);
-		}
-		if ((child.relationship !== 0) || (abbreviate.clothes === 2) || (abbreviate.rulesets === 2)) {
-			r += `<br> `;
-			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			}
-		}
-		if (abbreviate.mental === 1) {
-			r += `<span class="lightgreen">`;
-			shortExtendedFamily(child);
-			r += `</span> `;
-			shortRival(child);
-		} else if (abbreviate.mental === 2) {
-			longExtendedFamily(child);
-			longRival(child);
-		}
-		r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-		if (abbreviate.origins === 2 && child.origin !== 0) {
-			origins(child);
-		}
-		return r;
-	}
+	const
+		{
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(child);
 
-	// /**	TODO: add health to infants
-	//  * @param {App.Entity.InfantState} child
-	//  */
-	// function shortHealth(child) {
-	// 	if (child.health.condition < -20) {
-	// 		r += `<strong><span class="red">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-	// 	} else if (child.health.condition <= 20) {
-	// 		r += `<strong><span class="yellow">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-	// 	} else if (child.health.condition > 20) {
-	// 		r += `<strong><span class="green">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-	// 	}
-	// 	r += " ";
-	// }
-
-	// /**
-	//  * @param {App.Entity.InfantState} child
-	//  */
-	// function longHealth(child) {
-	// 	if (child.health.condition < -90) {
-	// 		r += `<span class="red">On the edge of death ${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else if (child.health.condition < -50) {
-	// 		r += `<span class="red">Extremely unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else if (child.health.condition < -20) {
-	// 		r += `<span class="red">Unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else if (child.health.condition <= 20) {
-	// 		r += `<span class="yellow">Healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else if (child.health.condition <= 50) {
-	// 		r += `<span class="green">Very healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else if (child.health.condition <= 90) {
-	// 		r += `<span class="green">Extremely healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	} else {
-	// 		r += `<span class="green">Unnaturally healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-	// 	}
-	// 	r += " ";
-	// }
-
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortRace(child) {
-		switch (child.race) {
-			case "white":
-				r += `C`;
-				break;
-			case "asian":
-				r += `A`;
-				break;
-			case "indo-aryan":
-				r += `I`;
-				break;
-			case "latina":
-				r += `L`;
-				break;
-			case "middle eastern":
-				r += `ME`;
-				break;
-			case "black":
-				r += `B`;
-				break;
-			case "pacific islander":
-				r += `PI`;
-				break;
-			case "malay":
-				r += `M`;
-				break;
-			case "amerindian":
-				r += `AI`;
+	// helper functions
+	function accent(child) {
+		let
+			r = ``,
+			accent,
+			nationality;
+
+		switch (child.nationality) {
+			case "a Cook Islander":
+				nationality = `Cook Islander`;
 				break;
-			case "semitic":
-				r += `S`;
+			case "a Liechtensteiner":
+				nationality = `Liechtensteiner`;
 				break;
-			case "southern european":
-				r += `SE`;
+			case "a New Zealander":
+				nationality = `New Zealander`;
 				break;
-			case "mixed race":
-				r += `MR`;
+			case "a Solomon Islander":
+				nationality = `Solomon Islander`;
 				break;
 			default:
-				r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`;
+				nationality = child.nationality;
 				break;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longRace(child) {
-		switch (child.race) {
-			case "white":
-				r += `Caucasian. `;
-				break;
-			case "asian":
-				r += `Asian. `;
-				break;
-			case "indo-aryan":
-				r += `Indo-aryan. `;
-				break;
-			case "latina":
-				r += `Latina. `;
-				break;
-			case "middle eastern":
-				r += `Middle Eastern. `;
-				break;
-			case "black":
-				r += `Black. `;
-				break;
-			case "pacific islander":
-				r += `Pacific Islander. `;
-				break;
-			case "malay":
-				r += `Malay. `;
-				break;
-			case "amerindian":
-				r += `Amerindian. `;
-				break;
-			case "semitic":
-				r += `Semitic. `;
-				break;
-			case "southern european":
-				r += `Southern European. `;
-				break;
-			case "mixed race":
-				r += `Mixed race. `;
-				break;
-			default:
-				r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `;
-				break;
+		if (child.accent !== 0) {
+			if (child.accent === 1) {
+				accent = jsEither("a beautiful", "a distinctive", "an intriguing", "a light", "a lovely", "a mild", "a pleasant", "a rich", "a slight", "a smooth");
+				r += `${He} speaks ${V.language} in ${accent} ${nationality} accent${child.rules.speech === "accent elimination" ? `, which the rules encourage ${him} to suppress` : ``}. `;
+			} else if (child.accent === 2) {
+				accent = jsEither("a broad", "a harsh", "a heavy", "an intense", "a marked", "a noticeable", "a rough", "a significant", "a stressed", "a strong", "a thick");
+				r += `${He} speaks ${V.language} in ${accent} ${nationality} accent that can be hard to understand${child.rules.speech === "accent elimination" ? `, and the rules encourage ${him} to make an effort to suppress it` : ``}. `;
+			} else {
+				r += `${He} speaks little ${V.language}, but understands enough to be given orders. `;
+			}
 		}
+
+		return r;
 	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortNationality(child) {
-		r += `<span class="tan">`;
-		switch (child.nationality) {
-			case "Afghan":
-				r += `Afg`;
-				break;
-			case "Albanian":
-				r += `Alb`;
-				break;
-			case "Algerian":
-				r += `Alg`;
-				break;
-			case "American":
-				r += `USA`;
-				break;
-			case "Andorran":
-				r += `And`;
-				break;
-			case "Angolan":
-				r += `Ang`;
-				break;
-			case "Antiguan":
-				r += `AB`;
-				break;
-			case "Argentinian":
-				r += `Arg`;
-				break;
-			case "Armenian":
-				r += `Arm`;
-				break;
-			case "Aruban":
-				r += `Aru`;
-				break;
-			case "Australian":
-				r += `Aus`;
-				break;
-			case "Austrian":
-				r += `Aut`;
-				break;
-			case "Azerbaijani":
-				r += `Aze`;
-				break;
-			case "Bahamian":
-				r += `Bah`;
-				break;
-			case "Bahraini":
-				r += `Bah`;
-				break;
-			case "Bangladeshi":
-				r += `Bgd`;
-				break;
-			case "Barbadian":
-				r += `Bar`;
-				break;
-			case "Belarusian":
-				r += `Ber`;
-				break;
-			case "Belgian":
-				r += `Bel`;
-				break;
-			case "Belizean":
-				r += `Blz`;
-				break;
-			case "Beninese":
-				r += `Ben`;
-				break;
-			case "Bermudian":
-				r += `Bmd`;
-				break;
-			case "Bhutanese":
-				r += `Bhu`;
-				break;
-			case "Bissau-Guinean":
-				r += `GB`;
-				break;
-			case "Bolivian":
-				r += `Bol`;
-				break;
-			case "Bosnian":
-				r += `Bos`;
-				break;
-			case "Brazilian":
-				r += `Bra`;
-				break;
-			case "British":
-				r += `UK`;
-				break;
-			case "Bruneian":
-				r += `Bru`;
-				break;
-			case "Bulgarian":
-				r += `Bul`;
-				break;
-			case "Burkinabé":
-				r += `BF`;
-				break;
-			case "Burmese":
-				r += `Bur`;
-				break;
-			case "Burundian":
-				r += `Bnd`;
-				break;
-			case "Cambodian":
-				r += `Kam`;
-				break;
-			case "Cameroonian":
-				r += `Cam`;
-				break;
-			case "Canadian":
-				r += `Can`;
-				break;
-			case "Cape Verdean":
-				r += `CV`;
-				break;
-			case "Catalan":
-				r += `Cat`;
-				break;
-			case "Central African":
-				r += `CAR`;
-				break;
-			case "Chadian":
-				r += `Cha`;
-				break;
-			case "Chilean":
-				r += `Chl`;
-				break;
-			case "Chinese":
-				r += `Chi`;
-				break;
-			case "Colombian":
-				r += `Col`;
-				break;
-			case "Comorian":
-				r += `Com`;
-				break;
-			case "Congolese":
-				r += `RC`;
-				break;
-			case "a Cook Islander":
-				r += `CI`;
-				break;
-			case "Costa Rican":
-				r += `CR`;
-				break;
-			case "Croatian":
-				r += `Cro`;
-				break;
-			case "Cuban":
-				r += `Cub`;
-				break;
-			case "Curaçaoan":
-				r += `Cur`;
-				break;
-			case "Cypriot":
-				r += `Cyp`;
-				break;
-			case "Czech":
-				r += `Cze`;
-				break;
-			case "Danish":
-				r += `Den`;
-				break;
-			case "Djiboutian":
-				r += `Dji`;
-				break;
-			case "Dominican":
-				r += `DR`;
-				break;
-			case "Dominiquais":
-				r += `Dom`;
-				break;
-			case "Dutch":
-				r += `Nld`;
-				break;
-			case "East Timorese":
-				r += `ET`;
-				break;
-			case "Ecuadorian":
-				r += `Ecu`;
-				break;
-			case "Egyptian":
-				r += `Egy`;
-				break;
-			case "Emirati":
-				r += `UAE`;
-				break;
-			case "Equatoguinean":
-				r += `EG`;
-				break;
-			case "Eritrean":
-				r += `Eri`;
-				break;
-			case "Estonian":
-				r += `Est`;
-				break;
-			case "Ethiopian":
-				r += `Eth`;
-				break;
-			case "Fijian":
-				r += `Fij`;
-				break;
-			case "Filipina":
-				r += `Phl`;
-				break;
-			case "Finnish":
-				r += `Fin`;
-				break;
-			case "French":
-				r += `Fra`;
-				break;
-			case "French Guianan":
-				r += `FG`;
-				break;
-			case "French Polynesian":
-				r += `FP`;
-				break;
-			case "Gabonese":
-				r += `Gab`;
-				break;
-			case "Gambian":
-				r += `Gam`;
-				break;
-			case "Georgian":
-				r += `Geo`;
-				break;
-			case "German":
-				r += `Ger`;
-				break;
-			case "Ghanan":
-				r += `Gha`;
-				break;
-			case "Greek":
-				r += `Gre`;
-				break;
-			case "Greenlandic":
-				r += `Grn`;
-				break;
-			case "Grenadian":
-				r += `Gda`;
-				break;
-			case "Guamanian":
-				r += `Gua`;
-				break;
-			case "Guatemalan":
-				r += `Gtm`;
-				break;
-			case "Guinean":
-				r += `Gui`;
-				break;
-			case "Guyanese":
-				r += `Guy`;
-				break;
-			case "Haitian":
-				r += `Hai`;
-				break;
-			case "Honduran":
-				r += `Hon`;
-				break;
-			case "Hungarian":
-				r += `Hun`;
-				break;
-			case "I-Kiribati":
-				r += `Kir`;
-				break;
-			case "Icelandic":
-				r += `Ice`;
-				break;
-			case "Indian":
-				r += `Ind`;
-				break;
-			case "Indonesian":
-				r += `Idn`;
-				break;
-			case "Iranian":
-				r += `Irn`;
-				break;
-			case "Iraqi":
-				r += `Irq`;
-				break;
-			case "Irish":
-				r += `Irl`;
-				break;
-			case "Israeli":
-				r += `Isr`;
-				break;
-			case "Italian":
-				r += `Ita`;
-				break;
-			case "Ivorian":
-				r += `IC`;
-				break;
-			case "Jamaican":
-				r += `Jam`;
-				break;
-			case "Japanese":
-				r += `Jpn`;
-				break;
-			case "Jordanian":
-				r += `Jor`;
-				break;
-			case "Kazakh":
-				r += `Kaz`;
-				break;
-			case "Kenyan":
-				r += `Ken`;
-				break;
-			case "Kittitian":
-				r += `SKN`;
-				break;
-			case "Korean":
-				r += `Kor`;
-				break;
-			case "Kosovan":
-				r += `Kos`;
-				break;
-			case "Kurdish":
-				r += `Kur`;
-				break;
-			case "Kuwaiti":
-				r += `Kuw`;
-				break;
-			case "Kyrgyz":
-				r += `Kyr`;
-				break;
-			case "Laotian":
-				r += `Lao`;
-				break;
-			case "Latvian":
-				r += `Lat`;
-				break;
-			case "Lebanese":
-				r += `Lbn`;
-				break;
-			case "Liberian":
-				r += `Lib`;
-				break;
-			case "Libyan":
-				r += `Lby`;
-				break;
-			case "a Liechtensteiner":
-				r += `Lie`;
-				break;
-			case "Lithuanian":
-				r += `Lit`;
-				break;
-			case "Luxembourgian":
-				r += `Lux`;
-				break;
-			case "Macedonian":
-				r += `Mac`;
-				break;
-			case "Malagasy":
-				r += `Mad`;
-				break;
-			case "Malawian":
-				r += `Mwi`;
-				break;
-			case "Malaysian":
-				r += `Mys`;
-				break;
-			case "Maldivian":
-				r += `Mdv`;
-				break;
-			case "Malian":
-				r += `Mal`;
-				break;
-			case "Maltese":
-				r += `Mlt`;
-				break;
-			case "Marshallese":
-				r += `MI`;
-				break;
-			case "Mauritanian":
-				r += `Mta`;
-				break;
-			case "Mauritian":
-				r += `Mts`;
-				break;
-			case "Mexican":
-				r += `Mex`;
-				break;
-			case "Micronesian":
-				r += `FSM`;
-				break;
-			case "Moldovan":
-				r += `Mol`;
-				break;
-			case "Monégasque":
-				r += `Mnc`;
-				break;
-			case "Mongolian":
-				r += `Mon`;
-				break;
-			case "Montenegrin":
-				r += `Mng`;
-				break;
-			case "Moroccan":
-				r += `Mor`;
-				break;
-			case "Mosotho":
-				r += `Les`;
-				break;
-			case "Motswana":
-				r += `Bot`;
-				break;
-			case "Mozambican":
-				r += `Moz`;
-				break;
-			case "Namibian":
-				r += `Nam`;
-				break;
-			case "Nauruan":
-				r += `Nau`;
-				break;
-			case "Nepalese":
-				r += `Npl`;
-				break;
-			case "New Caledonian":
-				r += `NC`;
-				break;
-			case "a New Zealander":
-				r += `NZ`;
-				break;
-			case "Ni-Vanuatu":
-				r += `Van`;
-				break;
-			case "Nicaraguan":
-				r += `Nic`;
-				break;
-			case "Nigerian":
-				r += `Nga`;
-				break;
-			case "Nigerien":
-				r += `Ngr`;
-				break;
-			case "Niuean":
-				r += `Niu`;
-				break;
-			case "Norwegian":
-				r += `Nor`;
-				break;
-			case "Omani":
-				r += `Omn`;
-				break;
-			case "Pakistani":
-				r += `Pak`;
-				break;
-			case "Palauan":
-				r += `Plu`;
-				break;
-			case "Palestinian":
-				r += `Pal`;
-				break;
-			case "Panamanian":
-				r += `Pan`;
-				break;
-			case "Papua New Guinean":
-				r += `PNG`;
-				break;
-			case "Paraguayan":
-				r += `Par`;
-				break;
-			case "Peruvian":
-				r += `Per`;
-				break;
-			case "Polish":
-				r += `Pol`;
-				break;
-			case "Portuguese":
-				r += `Por`;
-				break;
-			case "Puerto Rican":
-				r += `PR`;
-				break;
-			case "Qatari":
-				r += `Qat`;
-				break;
-			case "Romanian":
-				r += `Rom`;
-				break;
-			case "Russian":
-				r += `Rus`;
-				break;
-			case "Rwandan":
-				r += `Rwa`;
-				break;
-			case "Sahrawi":
-				r += `Sah`;
-				break;
-			case "Saint Lucian":
-				r += `SL`;
-				break;
-			case "Salvadoran":
-				r += `ES`;
-				break;
-			case "Sammarinese":
-				r += `SM`;
-				break;
-			case "Samoan":
-				r += `Sam`;
-				break;
-			case "São Toméan":
-				r += `STP`;
-				break;
-			case "Saudi":
-				r += `Sau`;
-				break;
-			case "Scottish":
-				r += `Sco`;
-				break;
-			case "Senegalese":
-				r += `Sen`;
-				break;
-			case "Serbian":
-				r += `Srb`;
-				break;
-			case "Seychellois":
-				r += `Sey`;
-				break;
-			case "Sierra Leonean":
-				r += `Sie`;
-				break;
-			case "Singaporean":
-				r += `Sng`;
-				break;
-			case "Slovak":
-				r += `Svk`;
-				break;
-			case "Slovene":
-				r += `Svn`;
-				break;
-			case "a Solomon Islander":
-				r += `SI`;
-				break;
-			case "Somali":
-				r += `Som`;
-				break;
-			case "South African":
-				r += `RSA`;
-				break;
-			case "South Sudanese":
-				r += `SS`;
-				break;
-			case "Spanish":
-				r += `Spa`;
-				break;
-			case "Sri Lankan":
-				r += `Sri`;
-				break;
-			case "Sudanese":
-				r += `Sud`;
-				break;
-			case "Surinamese":
-				r += `Sur`;
-				break;
-			case "Swazi":
-				r += `Swa`;
-				break;
-			case "Swedish":
-				r += `Swe`;
-				break;
-			case "Swiss":
-				r += `Swi`;
-				break;
-			case "Syrian":
-				r += `Syr`;
-				break;
-			case "Taiwanese":
-				r += `Tai`;
-				break;
-			case "Tajik":
-				r += `Taj`;
-				break;
-			case "Tanzanian":
-				r += `Tza`;
-				break;
-			case "Thai":
-				r += `Tha`;
-				break;
-			case "Tibetan":
-				r += `Tib`;
-				break;
-			case "Togolese":
-				r += `Tog`;
-				break;
-			case "Tongan":
-				r += `Ton`;
-				break;
-			case "Trinidadian":
-				r += `TT`;
-				break;
-			case "Tunisian":
-				r += `Tun`;
-				break;
-			case "Turkish":
-				r += `Tur`;
-				break;
-			case "Turkmen":
-				r += `Tkm`;
-				break;
-			case "Tuvaluan":
-				r += `Tuv`;
-				break;
-			case "Ugandan":
-				r += `Uga`;
-				break;
-			case "Ukrainian":
-				r += `Ukr`;
-				break;
-			case "Uruguayan":
-				r += `Uru`;
-				break;
-			case "Uzbek":
-				r += `Uzb`;
-				break;
-			case "Vatican":
-				r += `VC`;
-				break;
-			case "Venezuelan":
-				r += `Ven`;
-				break;
-			case "Vietnamese":
-				r += `Vnm`;
-				break;
-			case "Vincentian":
-				r += `SVG`;
-				break;
-			case "Yemeni":
-				r += `Yem`;
-				break;
-			case "Zairian":
-				r += `DRC`;
-				break;
-			case "Zambian":
-				r += `Zam`;
-				break;
-			case "Zimbabwean":
-				if (child.race === "white") {
-					r += `Rho`;
-				} else {
-					r += `Zwe`;
-				}
-				break;
-			case "Ancient Chinese Revivalist":
-				r += `Chi Rev`;
-				break;
-			case "Ancient Egyptian Revivalist":
-				r += `Egy Rev`;
-				break;
-			case "Arabian Revivalist":
-				r += `Ara Rev`;
-				break;
-			case "Aztec Revivalist":
-				r += `Azt Rev`;
-				break;
-			case "Edo Revivalist":
-				r += `Edo Rev`;
-				break;
-			case "Roman Revivalist":
-				r += `Rom Rev`;
-				break;
-			case "":
-			case "none":
-			case "child":
-			case "Stateless":
-				r += `None`;
-				break;
-			default:
-				r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`;
-				break;
-		}
-		r += `</span> `;
-	}
+	function accessories() {
+		function buttplug(child) {
+			let
+				r = ``;
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longNationality(child) {
-		r += `<span class="tan">`;
-		switch (child.nationality) {
-			case "a Cook Islander":
-				r += `Cook Islander. `;
-				break;
-			case "a Liechtensteiner":
-				r += `Liechtensteiner. `;
-				break;
-			case "a New Zealander":
-				r += `New Zealander. `;
-				break;
-			case "a Solomon Islander":
-				r += `Solomon Islander. `;
-				break;
-			case "Zimbabwean":
-				if (child.race === "white") {
-					r += `Rhodesian. `;
-				} else {
-					r += `${child.nationality}. `;
+			if (V.showClothing && !V.saleDescription) {
+				switch (child.clothes) {
+					case "a slave gown":
+						if (child.chastityAnus) {
+							r += `${His} pretty gown hides ${his} anal chastity accessory underneath. `;
+						} else {
+							r += `Though ${his} gown is very pretty, ${his} asshole is bare beneath it. `;
+						}
+						break;
+					case "a ball gown":
+						if (child.chastityAnus) {
+							r += `${His} fabulous silken ball gown hides ${his} anal chastity accessory underneath. `;
+						} else {
+							r += `Though ${his} silken ball gown is fabulous, ${his} asshole is bare beneath it. `;
+						}
+						break;
+					case "a mini dress":
+						r += `If ${he} bends over even slightly, the hem of ${his} short dress rides up to reveal ${his} `;
+						if (child.chastityAnus) {
+							r += `anal chastity accessory underneath. `;
+						} else {
+							if (child.anus > 1) {
+								r += `lewd butthole. `;
+							} else {
+								r += `tight anus. `;
+							}
+						}
+						break;
+					case "a schoolgirl outfit":
+						r += `The skirt is so short that it `;
+						if (child.chastityAnus) {
+							r += `reveals ${his} anal chastity accessory. `;
+						} else {
+							r += `doesn't even have to be lifted to fuck ${his} schoolgirl ass. `;
+						}
+						break;
+					case "a tank-top":
+					case "a tube top":
+					case "a t-shirt":
+					case "an oversized t-shirt":
+						break;
+					default:
+						if (child.anus > 2) {
+							if (child.chastityAnus) {
+								r += `${His} bare buttocks and ${his} anal chastity accessory are very visible from the rear. `;
+							} else {
+								r += `With ${his} ass bare, ${his} huge asshole is very visible from the rear. `;
+							}
+						} else if (child.anus > 1) {
+							if (child.chastityAnus) {
+								r += `${His} bare buttocks and ${his} anal chastity accessory are very visible from the rear. `;
+							} else {
+								r += `With ${his} ass bare, ${his} loose asshole is visible from the rear. `;
+							}
+						} else {
+							if (child.chastityAnus) {
+								r += `${His} bare buttocks and ${his} anal chastity accessory are visible. `;
+							} else {
+								r += `With ${his} ass bare, there is an occasional glimpse of ${his} asshole. `;
+							}
+						}
+						break;
 				}
-				break;
-			case "child":
-			case "none":
-			case "":
-			case "Stateless":
-				r += `Stateless. `;
-				break;
-			default:
-				r += `${child.nationality}. `;
-				break;
-		}
-		r += `</span> `;
-	}
+			}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortSkin(child) {
-		r += `<span class="pink">`;
-		switch (child.skin) {
-			case "pure white":
-				r += `P. Whi`;
-				break;
-			case "extremely fair":
-				r += `E. Fai`;
-				break;
-			case "very fair":
-				r += `V. Fai`;
-				break;
-			case "extremely pale":
-				r += `E. Pal`;
-				break;
-			case "very pale":
-				r += `V. Pal`;
-				break;
-			case "light brown":
-				r += `L. Br`;
-				break;
-			case "dark brown":
-				r += `D. Br`;
-				break;
-			case "light olive":
-				r += `L. Oli`;
-				break;
-			case "dark olive":
-				r += `D. Oli`;
-				break;
-			case "light beige":
-				r += `L. Bei`;
-				break;
-			case "dark beige":
-				r += `D. Bei`;
-				break;
-			case "tan":
-				r += `Tan`;
-				break;
-			case "bronze":
-				r += `Bron`;
-				break;
-			case "ebony":
-				r += `Ebon`;
-				break;
-			case "pure black":
-				r += `P. Bla`;
-				break;
-			case "dark":
-			case "fair":
-			case "pale":
-				r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`;
-				break;
-			default:
-				r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`;
-				break;
-		}
-		r += `</span> `;
-	}
+			switch (child.buttplug) {
+				case "plug":
+					r += `It's filled by a standard `;
+					if (child.anus > 2) {
+						r += `buttplug, which is on the verge of falling out. `;
+					} else {
+						r += `buttplug. `;
+					}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortAge(child) {
-		r += `<span class="pink">`;
-		if (V.showAgeDetail === 1) {
-			if (child.actualAge > 0) {
-				r += `${capFirstChar(num(child.actualAge))}yrs. `;
-			} else {
-				if (weeksOwned > 4) {
-					r += `${capFirstChar(num(Math.trunc(weeksOwned / 4)))}mos. `;
-				} else {
-					if (weeksOwned <= 1) {
-						r += `Nwbrn. `;
+					if (child.buttplugAttachment === "tail") {
+						r += `A tail protrudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `A bushy ${child.hColor} tail with a white tip protrudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `A slim, spotted tail with a cute tuft at its tip protudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `A tail protrudes from the back of the plug and springs upwards from ${his} rear. `;
+					}
+					break;
+				case "long plug":
+					r += `It's filled by a standard sized, overly long `;
+					if (child.anus > 2) {
+						r += `buttplug, which is on the verge of sliding out ${his} rear. `;
 					} else {
-						r += `${capFirstChar(num(weeksOwned))}wks. `;
+						r += `buttplug. `;
 					}
-				}
-			}
-		}
-	}
+					r += `It causes a noticeable bulge in ${his} belly. `;
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortFace(child) {
-		if (child.face < -95) {
-			r += `<span class="red">Face---${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face < -40) {
-			r += `<span class="red">Face--${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face < -10) {
-			r += `<span class="red">Face-${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face <= 10) {
-			r += `Face${V.summaryStats ? `[${child.face}]` : ''}`;
-		} else if (child.face <= 40) {
-			r += `<span class="pink">Face+${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face <= 95) {
-			r += `<span class="pink">Face++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else {
-			r += `<span class="pink">Face+++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		}
-	}
+					if (child.buttplugAttachment === "tail") {
+						r += `A tail protrudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `A bushy ${child.hColor} tail with a white tip protrudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `A slim, spotted tail with a cute tuft at its tip protudes from the back of the plug and dangles from ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `A tail protrudes from the back of the plug and springs upwards from ${his} rear. `;
+					}
+					break;
+				case "large plug":
+					r += `It's `;
+					if (child.anus < 2) {
+						r += `agonizingly stretched `;
+					} else if (child.anus < 3) {
+						r += `uncomfortably stretched `;
+					} else {
+						r += `comfortably stretched `;
+					}
+					r += `by a large buttplug. `;
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longAge(child) {
-		r += `<span class="pink">`;
-		if (V.showAgeDetail) {
-			if (child.actualAge > 0) {
-				r += `${capFirstChar(num(child.actualAge))}-year-old `;
-				if (child.actualAge > 1) {
-					r += `toddler. `;
-				} else {
-					r += `baby. `;
-				}
-			} else {
-				if (weeksOwned > 4) {
-					r += `${capFirstChar(num(Math.trunc(weeksOwned / 4)))} months old. `;
-				} else {
-					if (weeksOwned <= 1) {
-						r += `Newborn. `;
+					if (child.buttplugAttachment === "tail") {
+						r += `${He} swings the tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `${He} swings the bushy ${child.hColor} tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `${He} swings the spotted tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `${He} bounces the tail from side to side with every shift of ${his} rear. `;
+					}
+					break;
+				case "long, large plug":
+					r += `It's `;
+					if (child.anus < 2) {
+						r += `agonizingly stretched `;
+					} else if (child.anus < 3) {
+						r += `uncomfortably stretched `;
 					} else {
-						r += `${capFirstChar(num(weeksOwned))} weeks old. `;
+						r += `comfortably stretched `;
 					}
-				}
-			}
-		}
-	}
+					r += `by a large and long buttplug. It causes a noticeable bulge in ${his} belly. `;
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longFace(child) {
-		r += `Likely to have a `;
-		if (child.face < -95) {
-			r += `<span class="red">very ugly${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		} else if (child.face < -40) {
-			r += `<span class="red">ugly${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		} else if (child.face < -10) {
-			r += `<span class="red">unattractive${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		} else if (child.face <= 10) {
-			r += `Average${V.summaryStats ? `[${child.face}]`: ''}`;
-		} else if (child.face <= 40) {
-			r += `<span class="pink">attractive${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		} else if (child.face <= 95) {
-			r += `<span class="pink">beautiful${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		} else {
-			r += `<span class="pink">very beautiful${V.summaryStats ? `[${child.face}]`: ''}</span>`;
-		}
-		r += `, ${child.faceShape} face. `;
+					if (child.buttplugAttachment === "tail") {
+						r += `${He} swings the tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `${He} swings the bushy ${child.hColor} tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `${He} swings the spotted tail from side to side with every shift of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `${He} bounces the tail from side to side with every shift of ${his} rear. `;
+					}
+					break;
+				case "huge plug":
+					if (child.anus < 4) {
+						r += `It's agonizingly stretched by a plug so huge ${his} anus is probably being stretched into a permanent gape. `;
+						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
+							r += `${He}'s frequently in tears from the pain, which is so sharp it often tips ${him} over into spontaneous orgasm. `;
+						} else {
+							r += `${He} spends much of ${his} time sobbing with anal pain and fear at having ${his} hole ruined. `;
+						}
+					} else {
+						r += `Its ridiculous gape is comfortably filled by a huge buttplug. `;
+					}
+
+					if (child.buttplugAttachment === "tail") {
+						r += `${He} sways the tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `${He} sways the bushy ${child.hColor} tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `${He} sways the spotted tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `${He} jiggles the tail back and forth with every ginger movement of ${his} rear. `;
+					}
+					break;
+				case "long, huge plug":
+					if (child.anus < 4) {
+						r += `It's agonizingly stretched by a plug so huge it causes ${his} belly to bulge and is likely stretching ${his} anus into a permanent gape. `;
+						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
+							r += `${He}'s frequently in tears from the pain, which is so sharp it often tips ${him} over into spontaneous orgasm. `;
+						} else {
+							r += `${He} spends much of ${his} time sobbing with anal pain and fear at having ${his} hole ruined. `;
+						}
+					} else {
+						r += `Its ridiculous gape is comfortably filled by a wide and long buttplug. It causes a noticeable bulge in ${his} belly. `;
+					}
+
+					if (child.buttplugAttachment === "tail") {
+						r += `${He} sways the tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "fox tail") {
+						r += `${He} sways the bushy ${child.hColor} tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cow tail") {
+						r += `${He} sways the spotted tail back and forth with every ginger movement of ${his} rear. `;
+					} else if (child.buttplugAttachment === "cat tail") {
+						r += `${He} jiggles the tail back and forth with every ginger movement of ${his} rear. `;
+					}
+					break;
+			}
+
+			return r;
+		}
+
+		accessories.buttplug = buttplug;
+
+		function dick(child) {
+			let
+				r = ``;
+
+			if (child.chastityPenis) {
+				r += `${His} cock is encased in a tight chastity cage, which is designed to be comfortable as long as ${he} remains soft. `;
+				if (child.energy > 95) {
+					r += `The poor nympho looks painfully frustrated by this, and a long string of precum is dangling from the hole in the bottom of the cage. `;
+				}
+				if (arcology.FSRestart !== "unset") {
+					r += `This pleases the Societal Elite. `;
+				}
+			}
+
+			return r;
+		}
+
+		accessories.dick = dick;
+
+		function vaginal(child) {
+			let
+				r = ``,
+				held;
+
+			if (child.chastityVagina) {
+				held = `held in place by a chastity belt`;
+			} else if (child.vaginalAccessory === "bullet vibrator" || child.vaginalAccessory === "smart bullet vibrator") {
+				held = `held in place by a strap`;
+			} else {
+				held = `held in place by a strap, which ${he} can remove for vaginal intercourse`;
+			}
+
+			switch (child.vaginalAccessory) {
+				case "bullet vibrator":
+				case "smart bullet vibrator":
+					r += `A bullet vibrator is attached on ${his} clit, ${held}. `;
+					break;
+				case "dildo":
+					r += `${His} pussy is filled by a dildo ${held}. `;
+					break;
+				case "long dildo":
+					r += `${His} pussy is filled by a very long dildo ${held}. It noticeably bulges ${his} stomach. `;
+					break;
+				case "large dildo":
+					r += `${His} pussy is ${child.vagina < 2 ? `painfully stretched` : child.vagina < 3 ? `uncomfortably filled` : `comfortably filled`} by a large dildo ${held}. `;
+					break;
+				case "long, large dildo":
+					r += `${His} pussy is ${child.vagina < 2 ? `painfully stretched` : child.vagina < 3 ? `uncomfortably filled` : `comfortably filled`} by a very long and large dildo ${held}. It noticeably bulges ${his} stomach. `;
+					break;
+				case "huge dildo":
+					if (child.vagina < 4) {
+						r += `${His} pussy is filled to the breaking point by an enormous dildo. `;
+						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
+							r += `${He} can barely move with the discomfort, but ${he} frequently climaxes with agony. `;
+						} else {
+							r += `${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched. `;
+						}
+					} else {
+						r += `${His} cavernous pussy is comfortably filled by a huge dildo. `;
+					}
+					if (child.chastityVagina) {
+						r += `A chastity belt locks it securely in place. `;
+					}
+					break;
+				case "long, huge dildo":
+					if (child.vagina < 4) {
+						r += `${His} pussy is filled to the breaking point by an enormously wide and long dildo. It noticeably bulges ${his} stomach. `;
+						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
+							r += `${He} can barely move with the discomfort, but ${he} frequently climaxes with agony. `;
+						} else {
+							r += `${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched. `;
+						}
+					} else {
+						r += `${His} cavernous pussy is comfortably filled by an enormously wide and long dildo. It noticeably bulges ${his} stomach. `;
+					}
+					if (child.chastityVagina) {
+						r += `A chastity belt locks it securely in place. `;
+					}
+					break;
+				default:
+					if (child.chastityVagina) {
+						r += `${His} pussy is protected by a chastity belt${child.clothes !== "no clothing" ? `worn under ${his} clothing` : ``}. `;
+					}
+					break;
+			}
+
+			if (child.chastityVagina && arcology.FSRestart !== "unset") {
+				r += `This pleases the Societal Elite. `;
+			}
+
+			return r;
+		}
+
+		accessories.vaginal = vaginal;
 	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortIntelligence(child) {
-		let intelligence = child.intelligence;
-		if (child.hasOwnProperty("intelligenceImplant")) {
-			intelligence += child.intelligenceImplant;
+	function anus(child) {
+		let
+			r = ``,
+			skinDesc,
+			analSkinDesc,
+			ass,
+			anus = child.analArea - child.anus;
+
+		if (skinToneLevel(child.skin) < 13) {
+			skinDesc = "pink";
+		} else if (child.anusTat === "bleached") {
+			skinDesc = child.skin;
+		} else if (skinToneLevel(child.skin) > 19) {
+			skinDesc = "dark";
+		} else {
+			skinDesc = "darker";
 		}
-		if (child.fetish === "mindbroken") {
-			return;
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
-			if (intelligence >= 130) {
-				r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I(e+)${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+
+		analSkinDesc = jsEither("crinkled", "puckered", "puffy");
+
+		if (child.anus === 0) {
+			r += `${He} is an <span class="lime">anal virgin;</span> ${his} asshole is fresh and tight. `;
+		} else if (child.anus === 1) {
+			ass = jsEither("anal opening", "anus", "asshole", "butthole");
+			r += `${His} ${ass} is ${jsEither("nice and", "very")} tight, `;
+			if (anus > 3) {
+				r += `but it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
+			} else if (anus > 2) {
+				r += `but it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
+			} else if (anus > 1) {
+				r += `but it's surrounded by a big ring of ${analSkinDesc} ${skinDesc} skin. `;
+			} else if (anus > 0) {
+				r += `and it's surrounded by a cute ${jsEither("pucker", "ring", "rosebud")} ${ass} of ${skinDesc} skin. `;
+			} else {
+				r += `and the ${skinDesc} skin around it is stretched smooth, since it's been deflowered only recently. `;
+			}
+		} else if (child.anus === 2) {
+			ass = jsEither("anal opening", "anus", "asshole", "asspussy", "butthole");
+			r += `${His} ${ass} is ${anus > 1 ? `only ` : ``}${jsEither("relaxed", "loose", "accommodating")} ${ass}, `;
+			if (anus > 2) {
+				r += `but it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
+			} else if (anus > 1) {
+				r += `but it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
+			} else if (anus > 0) {
+				r += `and it's surrounded by a big ring of ${analSkinDesc} ${skinDesc} skin. `;
 			} else {
-				r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting it's getting used to being this way. `;
 			}
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I(e)${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+		} else if (child.anus === 3) {
+			ass = jsEither("anal opening", "anus", "asshole", "asspussy", "butthole");
+			r += `${His} ${ass} is a ${jsEither("lewd", "loose", "relaxed", "welcoming")} ${ass} slit, `;
+			if (anus > 1) {
+				r += `and it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
+			} else if (anus > 0) {
+				r += `and it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
 			} else {
-				r += `<span class="orangered">I---(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting ${he}'s getting used to having such a cock-hungry rear fuckhole. `;
 			}
 		} else {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			ass = jsEither("anal opening", "anal slit", "anus", "asshole", "asspussy", "butthole");
+			r += `${His} ${ass} is a ${jsEither("loose", "open", "permanent", "relaxed")} ${ass} gape, `;
+			if (anus > 0) {
+				r += `and it's surrounded by a massive oval of ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
 			} else {
-				r += `<span class="orangered">I---${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting ${he}'s only recently had ${his} ass ruined. `;
 			}
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortPrestige(child) {
-		if (child.prestige > 0) {
-			r += `<span class="green">`;
-			if (child.prestige > 2) {
-				r += `Prest++`;
-			} else if (child.prestige === 2) {
-				r += `Prest+`;
-			} else if (child.prestige === 1) {
-				r += `Prest`;
+		if (child.pubicHStyle === "bushy" || child.pubicHStyle === "very bushy") {
+			if (child.physicalAge >= 13) {
+				r += `Since ${he} has been left natural, ${he} has some light ${child.pubicHColor} pubic hair around ${his} ass. `;
 			}
-			r += `</span> `;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortPornPrestige(child) {
-		if (child.pornPrestige > 0) {
-			r += `<span class="green">`;
-			if (child.pornPrestige > 2) {
-				r += `PPrest++`;
-			} else if (child.pornPrestige === 2) {
-				r += `PPrest+`;
-			} else if (child.pornPrestige === 1) {
-				r += `PPrest`;
-			}
-			r += `</span> `;
+		if (child.minorInjury === "sore ass") {
+			r += `${His} asshole has seen hard use lately and looks a little sore. `;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longIntelligence(child) {
-		let intelligence = child.intelligence;
-		if (child.hasOwnProperty("intelligenceImplant")) {
-			intelligence += child.intelligenceImplant;
-		}
-		if (child.intelligence > 95) {
-			r += `<span class="deepskyblue">Likely to be brilliant${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-		} else if (intelligence > 50) {
-			r += `<span class="deepskyblue">Likely to be very smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-		} else if (intelligence > 15) {
-			r += `<span class="deepskyblue">Likely to be smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-		} else if (intelligence >= -15) {
-			r += `Average intelligence${V.summaryStats ? `[${intelligence}]` : ''}. `;
-		} else if (intelligence >= -50) {
-			r += `<span class="orangered">Likely to be slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-		} else if (intelligence >= -95) {
-			r += `<span class="orangered">Likely to be very slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-		} else {
-			r += `<span class="orangered">Likely to be moronic${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		if (V.saleDescription && V.gingering === "ginger") {
+			r += `${His} asshole looks unusually puffy and sore. ${He}'s either been cruelly assraped lately, or ${he}'s had an irritant placed in ${his} anus. `;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longPrestige(child) {
-		if (child.prestige > 0) {
-			r += `<span class="green">`;
-			if (child.prestige > 2) {
-				r += `Extremely prestigious. `;
-			} else if (child.prestige === 2) {
-				r += `Very prestigious. `;
-			} else if (child.prestige === 1) {
-				r += `Prestigious. `;
-			}
-			r += `</span> `;
+		r += accessories.buttplug(child);
+
+		if (V.showBodyMods) {
+			r += piercings.anus(child);
+			r += tats.anus(child);
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longPornPrestige(child) {
-		if (child.pornPrestige > 0) {
-			r += `<span class="green">`;
-			if (child.pornPrestige > 2) {
-				r += `Porn star. `;
-			} else if (child.pornPrestige === 2) {
-				r += `Porn slut. `;
-			} else if (child.pornPrestige === 1) {
-				r += `Porn amateur. `;
-			}
-			r += `</span> `;
+		if (child.skill.anal >= 100) {
+			r += `${He} is a <span class="aquamarine">masterful anal slut.</span> `;
+		} else if (child.skill.anal > 60) {
+			r += `${He} is an <span class="aquamarine">expert anal slut.</span> `;
+		} else if (child.skill.anal > 30) {
+			r += `${He} is a <span class="aquamarine">skilled anal slut.</span> `;
+		} else if (child.skill.anal > 10) {
+			r += `${He} has <span class="aquamarine">basic knowledge about anal.</span> `;
+		} else {
+			r += `${He} is unskilled at taking anal. `;
 		}
+
+		return r;
 	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortBehaviorFlaw(child) {
-		r += `<span class="red">`;
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				r += `Arrog`;
-				break;
-			case "bitchy":
-				r += `Bitchy`;
-				break;
-			case "odd":
-				r += `Odd`;
-				break;
-			case "hates men":
-				r += `Men-`;
-				break;
-			case "hates women":
-				r += `Women-`;
-				break;
-			case "gluttonous":
-				r += `Glut`;
-				break;
-			case "anorexic":
-				r += `Ano`;
-				break;
-			case "devout":
-				r += `Dev`;
-				break;
-			case "liberated":
-				r += `Lib`;
-				break;
-			default:
-				child.behavioralFlaw = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortSexFlaw(child) {
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `<span class="red">Oral-</span> `;
-				break;
-			case "hates anal":
-				r += `<span class="red">Anal-</span> `;
-				break;
-			case "hates penetration":
-				r += `<span class="red">Fuck-</span> `;
-				break;
-			case "shamefast":
-				r += `<span class="red">Shame</span> `;
-				break;
-			case "idealistic":
-				r += `<span class="red">Ideal</span> `;
-				break;
-			case "repressed":
-				r += `<span class="red">Repre</span> `;
-				break;
-			case "apathetic":
-				r += `<span class="red">Apath</span> `;
-				break;
-			case "crude":
-				r += `<span class="red">Crude</span> `;
-				break;
-			case "judgemental":
-				r += `<span class="red">Judge</span> `;
-				break;
-			case "cum addict":
-				r += `<span class="yellow">CumAdd</span> `;
-				break;
-			case "anal addict":
-				r += `<span class="yellow">AnalAdd</span> `;
-				break;
-			case "attention whore":
-				r += `<span class="yellow">Attention</span> `;
-				break;
-			case "breast growth":
-				r += `<span class="yellow">BoobObsess</span> `;
-				break;
-			case "abusive":
-				r += `<span class="yellow">Abusive</span> `;
-				break;
-			case "malicious":
-				r += `<span class="yellow">Malice</span> `;
-				break;
-			case "self hating":
-				r += `<span class="yellow">SelfHatr</span> `;
-				break;
-			case "neglectful":
-				r += `<span class="yellow">SelfNeglect</span> `;
-				break;
-			case "breeder":
-				r += `<span class="yellow">BreedObsess</span> `;
-				break;
-			default:
-				child.sexualFlaw = "none";
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longBehaviorFlaw(child) {
-		r += `<span class="red">`;
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				r += `Arrogant. `;
-				break;
-			case "bitchy":
-				r += `Bitchy. `;
-				break;
-			case "odd":
-				r += `Odd. `;
-				break;
-			case "hates men":
-				r += `Hates men. `;
-				break;
-			case "hates women":
-				r += `Hates women. `;
-				break;
-			case "gluttonous":
-				r += `Stress eater. `;
-				break;
-			case "anorexic":
-				r += `Anorexic. `;
-				break;
-			case "devout":
-				r += `Devoutly religious. `;
-				break;
-			case "liberated":
-				r += `Mentally liberated. `;
-				break;
-			default:
-				child.behavioralFlaw = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longSexFlaw(child) {
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `<span class="red">Hates oral.</span> `;
-				break;
-			case "hates anal":
-				r += `<span class="red">Hates anal.</span> `;
-				break;
-			case "hates penetration":
-				r += `<span class="red">Hates penetration.</span> `;
-				break;
-			case "shamefast":
-				r += `<span class="red">Shamefast.</span> `;
-				break;
-			case "idealistic":
-				r += `<span class="red">Sexually idealistic.</span> `;
-				break;
-			case "repressed":
-				r += `<span class="red">Sexually repressed.</span> `;
-				break;
-			case "apathetic":
-				r += `<span class="red">Sexually apathetic.</span> `;
-				break;
-			case "crude":
-				r += `<span class="red">Sexually crude.</span> `;
-				break;
-			case "judgemental":
-				r += `<span class="red">Sexually judgemental.</span> `;
-				break;
-			case "cum addict":
-				r += `<span class="yellow">Cum addict.</span> `;
-				break;
-			case "anal addict":
-				r += `<span class="yellow">Anal addict.</span> `;
-				break;
-			case "attention whore":
-				r += `<span class="yellow">Attention whore.</span> `;
-				break;
-			case "breast growth":
-				r += `<span class="yellow">Breast obsession.</span> `;
-				break;
-			case "abusive":
-				r += `<span class="yellow">Sexually abusive.</span> `;
-				break;
-			case "malicious":
-				r += `<span class="yellow">Sexually malicious.</span> `;
-				break;
-			case "self hating":
-				r += `<span class="yellow">Self hatred.</span> `;
-				break;
-			case "neglectful":
-				r += `<span class="yellow">Self neglectful.</span> `;
-				break;
-			case "breeder":
-				r += `<span class="yellow">Breeding obsession.</span> `;
-				break;
-			default:
-				child.sexualFlaw = "none";
-				break;
-		}
-	}
+	function butt(child) {
+		let
+			r = ``;
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortExtendedFamily(child) {
-		let handled = 0;
-		if (child.mother > 0) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.mother;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.mother === -1) {
-			r += `Your daughter`;
-			if (child.relationship < -1) {
-				res += ` & ${PCrelationshipTerm(child)}`;
-				handled = 1;
-			}
-			r += " ";
-		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.mother].fullName}'s daughter `;
-		}
-		if (child.father > 0 && child.father !== child.mother) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.father;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.father === -1 && child.mother !== -1) {
-			r += `Your daughter`;
-			if (child.relationship < -1) {
-				res += ` & ${PCrelationshipTerm(child)}`;
-				handled = 1;
-			}
-			r += " ";
-		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.father].fullName}'s daughter`;
-		}
-		if (child.daughters === 1) {
-			let _ssj = V.slaves.findIndex(function(s) {
-				return s.mother === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s mother`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-			_ssj = V.slaves.findIndex(function(s) {
-				return s.father === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s father`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.daughters > 1) {
-			r += `multiple daughters `;
-		}
-		if (child.sisters === 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return areSisters(s, child) > 0;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s sister`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += `& ${friendShipShort}`;
-					handled = 1;
+		if (V.showClothing && !V.saleDescription) {
+			if (!V.surgeryDescription) {
+				switch (child.clothes) {
+					case "a schoolgirl outfit":
+						r += `${His} skirt `;
+						if (child.butt > 10) {
+							r += `can't begin to cover ${his} massive butt, and just rests on top of ${his} buttocks, leaving virtually ${his} entire behind `;
+						} else if (child.butt > 6) {
+							r += `can't begin to cover ${his} huge butt, and just rests on top of ${his} buttocks, leaving virtually ${his} entire behind `;
+						} else if (child.butt > 3) {
+							r += `only covers the top of ${his} big butt, leaving most of ${his} bottom `;
+						} else {
+							r += `only covers the top half of ${his} butt, leaving the bottom half of ${his} behind `;
+						}
+						r += `bare. `;
+						break;
+					case "a slave gown":
+						r += `${His} slave gown `;
+						if (child.butt > 10) {
+							r += `is tailored as tastefully as possible for ${his} inhuman `;
+						} else if (child.butt > 6) {
+							r += `is tailored as tastefully as possible for ${his} massive `;
+						} else if (child.butt > 3) {
+							r += `is tailored to flatter ${his} big `;
+						} else {
+							r += `tastefully clings to ${his} `;
+						}
+						r += `buttocks. `;
+						break;
+					case "a ball gown":
+						r += `${His} fabulous silken ball gown is draped `;
+						if (child.butt > 10) {
+							r += `as tastefully as possible for ${his} inhuman `;
+						} else if (child.butt > 6) {
+							r += `as tastefully as possible for ${his} massive `;
+						} else if (child.butt > 3) {
+							r += `around ${his} big `;
+						} else {
+							r += `around ${his} `;
+						}
+						r += `buttocks. `;
+						break;
+					case "a mini dress":
+						r += `${His} scandalously short dress `;
+						if (child.butt > 10) {
+							r += `is impossible to pull over ${his} enormous buttocks, leaving ${his} behind entirely exposed. `;
+						} else if (child.butt > 6) {
+							r += `is at constant risk of sliding above ${his} huge butt and leaving ${his} behind entirely exposed. `;
+						} else if (child.butt > 3) {
+							r += `barely covers half of ${his} ample buttocks. `;
+						} else {
+							r += `barely manages to cover ${his} buttocks. `;
+						}
+						break;
+					case "a tank-top":
+					case "a tube top":
+					case "an oversized t-shirt":
+					case "a t-shirt":
+						r += `${His} clothing leaves ${his} `;
+						if (child.butt > 10) {
+							r += `mammoth ass completely bare. `;
+						} else if (child.butt > 6) {
+							r += `huge ass completely bare. `;
+						} else if (child.butt > 3) {
+							r += `big ass completely bare. `;
+						} else {
+							r += `ass completely bare. `;
+						}
+						break;
 				}
 			}
-			r += " ";
-		} else if (child.sisters > 1) {
-			r += `multiple sisters `;
-		}
-		if (child.relationship > 0 && handled !== 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.relationshipTarget;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s`;
-				const friendShipShort = relationshipTermShort(child);
-				r += ` ${friendShipShort}`;
-			}
-		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `Your wife`;
-		} else if (child.relationship === -2) {
-			r += `E Bonded`;
-		} else if (child.relationship === -1) {
-			r += `E Slut`;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function shortRival(child) {
-		if (child.rivalry !== 0) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.rivalryTarget;
-			});
-			if (_ssj !== -1) {
-				r += `<span class="lightsalmon">`;
-				if (child.rivalry <= 1) {
-					r += `Disl ${SlaveFullName(V.slaves[_ssj])}`;
-				} else if (child.rivalry <= 2) {
-					r += `${SlaveFullName(V.slaves[_ssj])}'s rival`;
-				} else {
-					r += `Hates ${SlaveFullName(V.slaves[_ssj])}`;
-				}
-				r += `</span> `;
-			}
+		if (V.showBodyMods) {
+			r += tats.stamp(child);
 		}
-	}
-
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longExtendedFamily(child) {
-		let handled = 0;
-		if (child.mother > 0) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.mother;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.mother === -1) {
-			r += `Your `;
 
-			if (child.relationship < -1) {
-				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
-				handled = 1;
-			} else {
-				r += `<span class="lightgreen">daughter.</span> `;
-			}
-		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `;
-		}
-		if (child.father > 0 && child.father !== child.mother) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.father;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.father === -1 && child.father !== child.mother) {
-			r += `Your `;
-			if (child.relationship < -1) {
-				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
-				handled = 1;
+		r += `${He}'s got a `;
+		if (child.butt <= 1) {
+			r += `flat and `;
+			if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") {
+				r += `${jsEither("attractive", "enticing", "fashionable")} `;
 			} else {
-				r += `<span class="lightgreen">daughter.</span> `;
-			}
-		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `;
-		}
-		if (child.daughters === 1) {
-			let _ssj = V.slaves.findIndex(function(s) {
-				return s.mother === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-			_ssj = V.slaves.findIndex(function(s) {
-				return s.father === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
+				r += `${jsEither("skinny", "slim", "taut")} `;
 			}
-		} else if (child.daughters > 1) {
-			if (child.daughters > 10) {
-				r += `<span class="lightgreen">Has tons of daughters.</span> `;
-			} else if (child.daughters > 5) {
-				r += `<span class="lightgreen">Has many daughters.</span> `;
+			r += `ass. `;
+		} else if (child.butt <= 2) {
+			if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") {
+				r += `${jsEither("fashionable", "sleek and attractive", "small and enticing")} `;
 			} else {
-				r += `<span class="lightgreen">Has several daughters.</span> `;
+				r += `${jsEither("small, sleek", "small but rounded", "rounded, small")} `;
 			}
-		}
-		if (child.sisters === 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return areSisters(s, child) > 0;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
+			r += `rear end. `;
+		} else if (child.butt <= 3) {
+			r += `${jsEither("big and healthy", "curved and plump", "healthy and plump")} derrière. `;
+		} else if (child.butt <= 4) {
+			r += `${jsEither("big bubble", "curvy and enticing", "juicy and large")} butt. `;
+		} else if (child.butt <= 5) {
+			r += `${jsEither("huge", "juicy and huge", "massive and undeniable")} rear end. `;
+		} else if (child.butt <= 6) {
+			r += `${jsEither("enormous", "truly massive")} posterior. `;
+		} else if (child.butt <= 7) {
+			r += `${jsEither("gigantic", "titanic")} ass. `;
+		} else if (child.butt <= 10) {
+			r += `${jsEither("gigantic", "titanic")} ass. `;
+			if (!canWalk(child)) {
+				r += ` It's so big it would jiggle as ${he} walked — if ${he} could walk. `;
+			} else {
+				r += ` It's so big it jiggles as ${he} walks. `;
 			}
-		} else if (child.sisters > 1) {
-			if (child.sisters > 10) {
-				r += `<span class="lightgreen">One of many sisters.</span> `;
-			} else if (child.sisters > 5) {
-				r += `<span class="lightgreen">Has many sisters.</span> `;
+		} else if (child.butt <= 14) {
+			r += `${jsEither("cushion-like", "hall-crowding")} ass. `;
+			if (!canWalk(child)) {
+				r += ` It's so big it would jiggle nonstop as ${he} walked — if ${he} could walk. `;
 			} else {
-				r += `<span class="lightgreen">Has several sisters.</span> `;
+				r += ` It's so big it jiggles nonstop as ${he} walks. `;
 			}
-		}
-		if (child.relationship > 0 && handled !== 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.relationshipTarget;
-			});
-			if (_ssj !== -1) {
-				const friendship = relationshipTerm(child);
-				r += `${SlaveFullName(V.slaves[_ssj])}'s `;
-				r += `<span class="lightgreen">${friendship}.</span> `;
+		} else {
+			r += `${jsEither("bean bag sized", "room-crowding")} ass. `;
+			if (!canWalk(child)) {
+				r += ` It's so massive it would jiggle endlessly as ${he} walked — if ${he} could walk. `;
+			} else {
+				r += ` It's so massive it jiggles endlessly as ${he} walks. `;
 			}
-		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `<span class="lightgreen">Your wife.</span> `;
-		} else if (child.relationship === -2) {
-			r += `<span class="lightgreen">Emotionally bonded to you.</span> `;
-		} else if (child.relationship === -1) {
-			r += `<span class="lightgreen">Emotional slut.</span> `;
 		}
-	}
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function longRival(child) {
-		if (child.rivalry !== 0) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.rivalryTarget;
-			});
-			if (_ssj !== -1) {
-				if (child.rivalry <= 1) {
-					r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `;
-				} else if (child.rivalry <= 2) {
-					r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `;
-				} else {
-					r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `;
-				}
-			}
-			r += " ";
-		}
-	}
+		r += hips(child);
 
-	/**
-	 * @param {App.Entity.InfantState} child
-	 */
-	function origins(child) {
-		r += `<br> `;
-		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+		if (V.showImplantEffects) {
+			if (child.buttImplant === 1) {
+				r += `${His} butt implants make ${his} ass look especially pert no matter how ${he} moves. `;
+			} else if (child.buttImplant === 2) {
+				r += `${His} big butt implants make ${his} ass jut out curvaceously whatever pose ${he}'s in. `;
+			} else if (child.buttImplant > 17) {
+				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} immense ass dominates ${his} surroundings with its unyielding mass. `;
+			} else if (child.buttImplant > 12) {
+				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} ass looks like someone shoved a pair of ready to burst weather balloons in ${his} buttcheeks. `;
+			} else if (child.buttImplant > 7) {
+				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} ass looks like someone shoved a pair of overinflated beachballs in ${his} buttcheeks. `;
+			} else if (child.buttImplant > 2) {
+				r += `${He} has ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it shows. Whatever ${his} position, ${his} ass looks just as artificially enticing. `;
+			}
 		}
-		r += `<span class="gray">${child.origin}</span> `;
-	}
-
-	return InfantSummaryUncached(child);
-};
-
-/**
- * Displays a detailed description of the infant
- * @param {App.Entity.InfantState} child
- * @returns {string}
- */
-App.Facilities.Nursery.LongInfantDescription = function(child) {
-	"use strict";
-	const
-		PC = V.PC,
-		arcology = V.arcologies[0],
-		weeksOwned = V.week - child.weekAcquired;
 
-	let
-		r = ``,
-		age,
-		title,
-		father = 0,
-		fatherPC = 0,
-		mother = 0,
-		motherPC = 0;
-
-	const
-		{
-			he, him, his, He, His
-		} = getPronouns(child);
-
-	if (child.father === -1 && child.mother === -1) {
-		father = PC;
-		fatherPC = 1;
-		mother = PC;
-		motherPC = 1;
-	} else {
-		if (child.father === -1) {
-			father = PC;
-			fatherPC = 1;
-			mother = getSlave(child.mother);
-		} else if (child.mother === -1) {
-			father = getSlave(child.father);
-			mother = PC;
-			motherPC = 1;
-		} else {
-			if (child.father > 0) { /* Fathered by a current slave */
-				father = getSlave(child.father);
-			} else if (child.father < 0) { /* Fathered by a missing slave */
-				father = -1;
-			}
-			if (child.father > 0) { /* Mothered by a current slave */
-				mother = getSlave(child.mother);
-			} else if (child.mother < 0) { /* Mothered by a missing slave */
-				mother = -1;
+		if (arcology.FSTransformationFetishist !== "unset") {
+			if (child.buttImplant > 0) {
+				r += `${His} rear is about Math.floor((child.buttImplant/child.butt)*100)>>% implant. `;
 			}
 		}
-	}
-
-	// TODO: add infant art here
-
-	r += `&nbsp;&nbsp;&nbsp;&nbsp; `;
-
-	r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `;
-
-	if (jsDef(child.custom)) {
-		if (child.custom.label) {
-			r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `;
+		if (arcology.FSTransformationFetishist > 20) {
+			if (arcology.FSSlimnessEnthusiast !== "unset") {
+				if (child.butt >= 3) {
+					if (child.buttImplant / child.butt < .25) {
+						r += `${His} ass is <span class="red">disgustingly natural</span> for its size. `;
+					} else {
+						r += `${His} asscheeks are <span class="green">obviously implants,</span> as they should be. `;
+					}
+				}
+			} else {
+				if (child.butt >= 6) {
+					if (child.buttImplant / child.butt > .5) {
+						r += `${His} ass is <span class="red">disgustingly natural</span> for its size. `;
+					} else {
+						r += `${His} asscheeks are <span class="green">obviously implants,</span> as they should be. `;
+					}
+				}
+			}
 		}
-	}
 
-	if (child.actualAge > 0) {
-		age = `${num(child.actualAge)}-year-old`;
-		if (child.actualAge > 1) {
-			title = `toddler`;
-		} else {
-			title = `baby`;
-		}
-	} else {
-		if (weeksOwned > 4) {
-			age = `${num(Math.trunc(weeksOwned / 4))}-month-old`;
-			title = `baby`;
-		} else {
-			if (weeksOwned <= 1) {
-				age = ``;
-				title = `newborn`;
-			} else {
-				age = `${num(weeksOwned)}-week-old`;
-				title = `baby`;
+		if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) {
+			if (child.butt > 6 && arcology.FSAssetExpansionist !== "unset") {
+				r += `It's too big for the fashionable feminine ideal. `;
+			} else if (child.butt > 4 && arcology.FSAssetExpansionist !== "unset") {
+				r += `It's bigger than expected for the fashionable feminine ideal, but your arcology loves huge butts, so it's not a surprise. `;
+			} else if (child.butt > 4) {
+				r += `It's too big for the fashionable feminine ideal. `;
+			} else if (child.butt < 3) {
+				r += `It's too small for the fashionable feminine ideal. `;
 			}
+		} else if (arcology.FSSlimnessEnthusiastLaw && child.butt > 1) {
+			r += `It's way too big for the fashionable feminine ideal. `;
+		} else if (arcology.FSHedonisticDecadenceLaw2 && child.butt < 5) {
+			r += `It's too small for the fashionable feminine ideal. `;
 		}
-	}
 
-	r += ` is a ${age} <strong><span class="coral">${title}.</span></strong> ${He} was born in ${arcology.name} ${weeksOwned > 4 ? weeksOwned < 9 ? `about a month` : `${num(weeksOwned)} months` : weeksOwned <= 1 ? `last week` : `${num(weeksOwned)} weeks`}${weeksOwned > 1 ? ` ago` : ``}`;
-
-	if (jsDef(child.counter)) {
-		const
-			oral = child.counter.oral,
-			vaginal = child.counter.vaginal,
-			anal = child.counter.oral,
-			mammary = child.counter.mammary,
-			penetrative = child.counter.penetrative,
-			total = oral + vaginal + anal + mammary + penetrative;
-
-		if (total > 0) {
-			r += ` and has been fucked about ${num(total)} times, including `;
-			if ((vaginal + anal + mammary + penetrative) > 0) {
-				if (vaginal > 0) {
-					r += `${num(vaginal)} vanilla, `;
-				}
-				if (anal > 0) {
-					r += `${num(anal)} anal, `;
-				}
-				if (mammary > 0) {
-					r += `${num(mammary)} mammary `;
-				}
-				if (penetrative > 0) {
-					r += `${num(penetrative)} penetrating, `;
+		if (child.physicalAge <= 3) {
+			if (child.butt >= 8) {
+				if (canWalk(child)) {
+					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
+					if (child.muscles > 95) {
+						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
+					} else if (child.muscles > 30) {
+						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
+					} else if (child.muscles > 5) {
+						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
+					} else {
+						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
+					}
+				} else {
+					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
 				}
-				r += ` and `;
-			}
-			r += `${num(oral)} oral sexual encounters. `;
-		} else {
-			if (weeksOwned >= 1) {
-				r += ` and `;
-			} else {
-				r += `. ${He} `;
 			}
+		}
 
-			r += `has had little or no sexual experience `;
-			if (child.weekAcquired !== 0) {
-				r += `as your slave `;
+		if (child.butt > 15) {
+			if (V.buttAccessibility) {
+				r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
 			} else {
-				r += `in your new arcology `;
+				r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
 			}
-			r += `yet. `;
-
-			let sortedCounts = [];
-			sortedCounts.push(
-				{type: "oral", value: oral},
-				{type: "vaginal", value: vaginal},
-				{type: "anal", value: anal},
-				{type: "mammary", value: mammary},
-				{type: "penetrative", value: penetrative}
-			);
-			sortedCounts = sortedCounts.sort(function(a, b) {	// sorts the counts from largest to smallest
-				return b.value - a.value;
-			});
+			r += `wider than a standard doorway. `;
+		}
 
-			if (sortedCounts[0].type === "oral") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s sucked something off `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
+		if (child.physicalAge <= 12) {
+			if (child.butt >= 12) {
+				if (canWalk(child)) {
+					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
+					if (child.muscles > 95) {
+						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
+					} else if (child.muscles > 30) {
+						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
+					} else if (child.muscles > 5) {
+						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
 					} else {
-						r += `about once every four hours `;
+						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
 					}
-					r += ` ${he}'s spent awake. `;
+				} else {
+					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
 				}
-			} else if (sortedCounts[0].type === "vaginal") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${his} pussy has been fucked `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
+			}
+
+			if (child.butt > 15) {
+				if (V.buttAccessibility) {
+					r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
+				} else {
+					r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
 				}
-			} else if (sortedCounts[0].type === "anal") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s been buttfucked `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
+				r += `wider than a standard doorway. `;
+			}
+		} else if (child.physicalAge > 12) {
+			if (child.butt > 17) {
+				if (canWalk(child)) {
+					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
+					if (child.muscles > 95) {
+						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
+					} else if (child.muscles > 30) {
+						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
+					} else if (child.muscles > 5) {
+						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
 					} else {
-						r += `about once every four hours `;
+						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
 					}
-					r += ` ${he}'s spent awake. `;
+				} else {
+					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
 				}
-			} else if (sortedCounts[0].type === "mammary") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s put ${his} tits to work `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
+
+				if (child.butt > 15) {
+					if (V.buttAccessibility) {
+						r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
 					} else {
-						r += `about once every four hours `;
+						r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
 					}
-					r += ` ${he}'s spent awake. `;
-				}
-			} else if (sortedCounts[0].type === "penetrative") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s pounded a hole `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
+					r += `wider than a standard doorway. `;
 				}
 			}
 		}
-	} else {
-		r += `. `;
-	}
-
-	r += App.Desc.family(child) + ' ';
 
-	if (father && fatherPC) {
-		if (child.eyeColor === PC.eye.origColor) {
-			r += `${He} has your ${child.eyeColor} eyes, `;
-		} else if (mother) {
-			r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `;
-		}
-	} else {
-		if (father && child.eyeColor === father.eyeColor) {
-			r += `${He} has ${his} father ${father.slaveName}'s ${child.eyeColor} eyes, `;
-		} else if (mother) {
-			r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `;
-		} else {
-			r += `${He} has ${child.eyeColor} eyes, `;
+		if (child.markings === "heavily freckled") {
+			r += `${His} freckles are particularly dense across ${his} lower back. `;
+		} else if (child.markings === "freckles") {
+			r += `${His} lower back is covered in a light speckling of freckles. `;
 		}
-	}
-	r += ` and ${he} will most likely have ${child.hColor} hair when ${he}'s older. `;
-
-	r += `${He} ${V.seeRace ? `is ${child.race} and ${child.nationality}, and` : ``} has ${child.skin} skin. `;
-
-	return r;
-};
 
-/* CHILDREN */
+		if (V.showBodyMods) {
+			r += tats.butt(child);
+		}
 
-/**
- * Displays a summary of the child
- * @param {App.Entity.SlaveState} child
- * @returns {string}
- */
-App.Facilities.Nursery.ChildSummary = function(child) {
-	"use strict";
-	/** @type {App.UI.SlaveSummary.AbbreviationState} */
-	const abbreviate = V.UI.slaveSummary.abbreviation;
+		return r;
+	}
 
-	let
-		r = ``;
+	function clothingCorset(child) {
+		let
+			r = ``;
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 * @returns {string}
-	 */
-	function ChildSummaryUncached(child) {
-		if (abbreviate.devotion === 1) {
-			shortDevotion(child);
-		} else if (abbreviate.devotion === 2) {
-			longDevotion(child);
-		}
-		if (child.fuckdoll === 0) {
-			if (abbreviate.rules === 1) {
-				shortRules(child);
-			} else if (abbreviate.rules === 2) {
-				longRules(child);
-			}
-		}
-		if (abbreviate.diet === 1) {
-			shortWeight(child);
-		} else if (abbreviate.diet === 2) {
-			longWeight(child);
-		}
-		if (abbreviate.diet === 1) {
-			shortDiet(child);
-		} else if (abbreviate.diet === 2) {
-			longDiet(child);
-		}
-		if (abbreviate.health === 1) {
-			shortHealth(child);
-		} else if (abbreviate.health === 2) {
-			longHealth(child);
-		}
-		if (abbreviate.drugs === 1) {
-			shortDrugs(child);
-		} else if (abbreviate.drugs === 2) {
-			longDrugs(child);
-		}
-		if (abbreviate.nationality + abbreviate.genitalia + abbreviate.physicals + abbreviate.skills + abbreviate.mental !== 0) {
-			r += `<br> `;
-			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-				r += "&nbsp;&nbsp;&nbsp;&nbsp;";
-			}
-		}
-		V.desc = SlaveTitle(child);
-		const firstLetter = V.desc.substring(0, 1).toUpperCase();
-		V.desc = firstLetter + V.desc.substring(1);
-		r += `<strong><span class="coral">${V.desc}${abbreviate.physicals === 2? '.' : ''}</span></strong> `;
-		if (V.seeRace) {
-			r += `<span class="tan">`;
-			if (abbreviate.race === 1) {
-				shortRace(child);
-			} else if (abbreviate.race === 2) {
-				longRace(child);
-			}
-			r += `</span> `;
-		}
-		if (abbreviate.nationality === 1) {
-			shortNationality(child);
-		} else if (abbreviate.nationality === 2) {
-			longNationality(child);
-		}
-		if (abbreviate.physicals === 1) {
-			shortSkin(child);
-		} else {
-			r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `;
-		}
-		if (abbreviate.genitalia === 1) {
-			shortGenitals(child);
-		} else if (abbreviate.genitalia === 2) {
-			longGenitals(child);
-		}
-		if (abbreviate.physicals === 1) {
-			shortAge(child);
-			shortFace(child);
-			shortEyes(child);
-			shortEars(child);
-			if (child.markings !== "none") {
-				r += "Markings";
-			}
-			shortLips(child);
-			shortTeeth(child);
-			shortMuscles(child);
-			r += App.Desc.shortLimbs(child);
-			shortVoice(child);
-			shortTitsAss(child);
-			shortHips(child);
-			shortWaist(child);
-			shortImplants(child);
-			shortLactation(child);
-			// shortMods(child);
-			r += `</span> `;
-		} else if (abbreviate.physicals === 2) {
-			longAge(child);
-			longFace(child);
-			longEyes(child);
-			longEars(child);
-			longLips(child);
-			longTeeth(child);
-			longMuscles(child);
-			r += App.Desc.longLimbs(child);
-			longVoice(child);
-			longTitsAss(child);
-			longHips(child);
-			longWaist(child);
-			longImplants(child);
-			longLactation(child);
-			// longMods(child);
-			if (!jQuery.isEmptyObject(child.brand)) {
-				r += `Branded. `;
-			}
-			r += `</span> `;
-		}
-		if (abbreviate.hormoneBalance === 1) {
-			if (child.hormoneBalance <= -21) {
-				r += `<span class="deepskyblue">`;
-				r += ` <strong>HB:M</strong> `;
-			} else if (child.hormoneBalance <= 20) {
-				r += `<span class="pink">`;
-				r += ` <strong>HB:N</strong> `;
-			} else if (child.hormoneBalance <= 500) {
-				r += `<span class="pink">`;
-				r += ` <strong>HB:F</strong> `;
-			}
-			r += `</span> `;
-		} else if (abbreviate.hormoneBalance === 2) {
-			r += `<span class=`;
-			if (child.hormoneBalance <= -21) {
-				r += `"deepskyblue"`;
-			} else {
-				r += `"pink"`;
-			}
-			r += `> `;
-			if (child.hormoneBalance < -400) {
-				r += `Overwhelmingly masculine`;
-			} else if (child.hormoneBalance <= -300) {
-				r += `Extremely masculine`;
-			} else if (child.hormoneBalance <= -200) {
-				r += `Heavily masculine`;
-			} else if (child.hormoneBalance <= -100) {
-				r += `Very masculine`;
-			} else if (child.hormoneBalance <= -21) {
-				r += `Masculine`;
-			} else if (child.hormoneBalance <= 20) {
-				r += `Neutral`;
-			} else if (child.hormoneBalance <= 99) {
-				r += `Feminine`;
-			} else if (child.hormoneBalance <= 199) {
-				r += `Very feminine`;
-			} else if (child.hormoneBalance <= 299) {
-				r += `Heavily feminine`;
-			} else if (child.hormoneBalance <= 399) {
-				r += `Extremely feminine`;
-			} else if (child.hormoneBalance <= 500) {
-				r += `Overwhelmingly feminine`;
-			}
-			r += ` hormone balance.</span> `;
-		}
-		r += `<br>`;
-		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-			r += "&nbsp;&nbsp;&nbsp;&nbsp;";
-		}
-		if (abbreviate.skills === 1) {
-			shortIntelligence(child);
-			shortSexSkills(child);
-			if (child.skill.combat > 0) {
-				r += "C";
-			}
-			r += "</span> ";
-			shortPrestige(child);
-			shortPornPrestige(child);
-		} else if (abbreviate.skills === 2) {
-			longIntelligence(child);
-			longSexSkills(child);
-			if (child.skill.combat > 0) {
-				r += `Trained fighter. `;
-			}
-			r += "</span> ";
-			longPrestige(child);
-			longPornPrestige(child);
-		}
-		if (abbreviate.mental === 1) {
-			if (child.fetish !== "mindbroken") {
-				if (child.fetishKnown === 1) {
-					shortFetish(child);
+		switch (child.clothes) {
+			case "a slave gown":
+				if (child.bellyAccessory === "a corset") {
+					r += `${His} gown has an elegant integral corset. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `${His} gown has extreme corsetage built into it. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is concealed by ${his} gown. `;
 				}
-				if (child.attrKnown === 1) {
-					shortAttraction(child);
+				break;
+			case "a ball gown":
+				if (child.bellyAccessory === "a corset") {
+					r += `The dress has an elegant integral corset. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `The dress has extreme corsetage built into it. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is hidden by ${his} gown. `;
 				}
-			}
-			if (child.clitPiercing === 3) {
-				shortSmartFetish(child);
-				shortSmartAttraction(child);
-			}
-			shortBehaviorFlaw(child);
-			shortSexFlaw(child);
-			shortBehaviorQuirk(child);
-			shortSexQuirk(child);
-		} else if (abbreviate.mental === 2) {
-			if (child.fetish !== "mindbroken") {
-				if (child.fetishKnown === 1) {
-					longFetish(child);
+				break;
+			case "a mini dress":
+				if (child.bellyAccessory === "a corset") {
+					r += `The dress also cleverly doubles as an overbust corset. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `The dress also cleverly doubles as an extreme overbust corset. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is hidden by ${his} dress. `;
 				}
-				if (child.attrKnown === 1) {
-					longAttraction(child);
+				break;
+			case "a schoolgirl outfit":
+				if (child.bellyAccessory === "a corset") {
+					r += `The outline of ${his} corset can be seen through ${his} blouse. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `The outline of ${his} absurd corsetage can be seen through ${his} blouse. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band can be seen under ${his} blouse. `;
 				}
-			}
-			if (child.clitPiercing === 3) {
-				longSmartFetish(child);
-				longSmartAttraction(child);
-			}
-			longBehaviorFlaw(child);
-			longSexFlaw(child);
-			longBehaviorQuirk(child);
-			longSexQuirk(child);
-		}
-		if (child.custom.label) {
-			r += `<strong><span class="yellow">${capFirstChar(child.custom.label)}</span></strong> `;
-		}
-		if ((child.relationship !== 0) || (abbreviate.clothes === 2) || (abbreviate.rulesets === 2)) {
-			r += `<br> `;
-			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			}
-		}
-		if (abbreviate.mental === 1) {
-			r += `<span class="lightgreen">`;
-			shortExtendedFamily(child);
-			r += `</span> `;
-			shortClone(child);
-			shortRival(child);
-		} else if (abbreviate.mental === 2) {
-			longExtendedFamily(child);
-		}
-		if (child.fuckdoll === 0) {
-			if (abbreviate.clothes === 2) {
-				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-				if (child.choosesOwnClothes === 1) {
-					r += "Dressing herself. ";
+				break;
+			case "a tube top":
+				if (child.bellyAccessory === "a corset") {
+					r += `${His} sturdy corset is completely exposed. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `${His} extreme corsetage is completely exposed. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is completely exposed. `;
 				}
-				longClothes(child);
-				longCollar(child);
-				longBelly(child);
-				if (hasAnyLegs(child)) {
-					longLegs(child);
+				break;
+			case "a tank-top":
+			case "a t-shirt":
+			case "an oversized t-shirt":
+				if (child.bellyAccessory === "a corset") {
+					r += `${His} sturdy corset is hidden by ${his} clothing. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `${His} extreme corsetage is hidden by ${his} clothing. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is hidden by ${his} clothing. `;
 				}
-				if (canWalk(child)) {
-					longShoes(child);
+				break;
+			default:
+				if (child.bellyAccessory === "a corset") {
+					r += `${His} corset is ${his} only real piece of clothing. `;
+				} else if (child.bellyAccessory === "an extreme corset") {
+					r += `${His} extreme corset is ${his} only real piece of clothing. `;
+				} else if (child.bellyAccessory === "a support band") {
+					r += `${His} support band is ${his} only real piece of clothing. `;
 				}
-				longChastity(child);
-				longVaginalAcc(child);
-				longDickAcc(child);
-				longButtplug(child);
-			}
 		}
-		r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-		rulesAssistant(child);
-		if (abbreviate.origins === 2 && child.origin !== 0) {
-			origins(child);
-		}
-		return r;
-	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortDevotion(child) {
-		r += `<br>`;
-		if (child.fetish === "mindbroken") {
-			r += `<span class="mindbroken">MB</span> `;
-		} else if (child.devotion < -95) {
-			r += `<span class="devotion hateful">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else if (child.devotion < -50) {
-			r += `<span class="devotion hateful">Hate${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else if (child.devotion < -20) {
-			r += `<span class="devotion resistant">Res${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else if (child.devotion <= 20) {
-			r += `<span class="devotion ambivalent">Ambiv${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else if (child.devotion <= 50) {
-			r += `<span class="devotion accept">Accept${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else if (child.devotion <= 95) {
-			r += `<span class="devotion devoted">Devo${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		} else {
-			r += `<span class="devotion worship">Wor${V.summaryStats ? `[${child.devotion}]` : ''}</span> `;
-		}
-		if (child.fetish === "mindbroken") {
-			return;
-		} else if (child.trust < -95) {
-			r += `<span class="trust extremely-terrified">ETerr${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-		} else if (child.trust < -50) {
-			r += `<span class="trust terrified">Terr${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-		} else if (child.trust < -20) {
-			r += `<span class="trust frightened">Fright${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-		} else if (child.trust <= 20) {
-			r += `<span class="trust fearful">Fear${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-		} else if (child.trust <= 50) {
-			if (child.devotion < -20) {
-				r += `<span class="defiant careful">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			} else {
-				r += `<span class="trust careful">Caref${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			}
-		} else if (child.trust < 95) {
-			if (child.devotion < -20) {
-				r += `<span class="defiant bold">Bold${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			} else {
-				r += `<span class="trust trusting">Trust${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			}
-		} else {
-			if (child.devotion < -20) {
-				r += `<span class="defiant full">Defiant${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			} else {
-				r += `<span class="trust prof-trusting">VTrust ${V.summaryStats ? `[${child.trust}]` : ''}</span> `;
-			}
-		}
+		return r;
 	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longDevotion(child) {
-		r += `<br>`;
-		if (child.fetish === "mindbroken") {
-			r += `<span class="mindbroken">Mindbroken.</span> `;
-		} else if (child.devotion < -95) {
-			r += `<span class="devotion hateful">Very hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else if (child.devotion < -50) {
-			r += `<span class="devotion hateful">Hateful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else if (child.devotion < -20) {
-			r += `<span class="devotion resistant">Resistant${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else if (child.devotion <= 20) {
-			r += `<span class="devotion ambivalent">Ambivalent${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else if (child.devotion <= 50) {
-			r += `<span class="devotion accept">Accepting${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else if (child.devotion <= 95) {
-			r += `<span class="devotion devoted">Devoted${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		} else {
-			r += `<span class="devotion worship">Worshipful${V.summaryStats ? `[${child.devotion}]` : ''}.</span> `;
-		}
-		if (child.fetish === "mindbroken") {
-			return;
-		} else if (child.trust < -95) {
-			r += `<span class="trust extremely-terrified">Extremely terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-		} else if (child.trust < -50) {
-			r += `<span class="trust terrifies">Terrified${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-		} else if (child.trust < -20) {
-			r += `<span class="trust frightened">Frightened${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-		} else if (child.trust <= 20) {
-			r += `<span class="trust fearful">Fearful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-		} else if (child.trust <= 50) {
-			if (child.devotion < -20) {
-				r += `<span class="defiant careful">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			} else {
-				r += `<span class="trust careful">Careful${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			}
-		} else if (child.trust < 95) {
-			if (child.devotion < -20) {
-				r += `<span class="defiant bold">Bold${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			} else {
-				r += `<span class="trust trusting">Trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			}
-		} else {
-			if (child.devotion < -20) {
-				r += `<span class="defiant full">Defiant${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			} else {
-				r += `<span class="trust prof-trusting">Profoundly trusting${V.summaryStats ? `[${child.trust}]` : ''}.</span> `;
-			}
-		}
-	}
+	function collar(child) {
+		let
+			r = ``,
+			daddy,
+			pregCollar = jsEither(1, 2, 3);
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortRules(child) {
-		switch (child.rules.living) {
-			case "luxurious":
-				r += `<strong>LS:Lux</strong> `;
+		switch (child.collar) {
+			case "uncomfortable leather":
+				r += `${He} is wearing an uncomfortable leather collar with a useful steel ring in front. `;
 				break;
-			case "normal":
-				r += `<strong>LS:Nor</strong> `;
+			case "dildo gag":
+				r += `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It holds a ring gag in ${his} mouth, into which slots a formidable inward-facing dildo that reaches down ${his} throat. It can be removed to facefuck ${him}. `;
 				break;
-			default:
-				r += `<strong>LS:Spa</strong> `;
+			case "massive dildo gag":
+				r += `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It acts as an anchor for an enormous inward-facing dildo that reaches deep down ${his} throat. The sheer size of the phallus forces ${his} mouth as wide as it will go and considerably bulges ${his} throat. Fortunately for ${him}, it is designed to allow ${him} to be able to breathe through ${his} nose; though when removed, the poor ${girl} finds ${himself} incapable of closing ${his} mouth for some time. `;
 				break;
-		}
-		if (canTalk(child)) {
-			switch (child.rules.speech) {
-				case "permissive":
-					r += `<strong>SpR:P</strong> `;
-					break;
-				case "accent elimination":
-					r += `<strong>SpR:NoAcc</strong> `;
-					break;
-				case "language lessons":
-					r += `<strong>SpR:LL</strong> `;
-					break;
-				default:
-					r += `<strong>SpR:R</strong> `;
-					break;
-			}
-			r += " ";
-		}
-		switch (child.rules.relationship) {
-			case "permissive":
-				r += `<strong>ReR:P</strong> `;
+			case "preg biometrics":
+				if (child.pregSource > 0) {
+					daddy = findFather(child.pregSource), daddy = daddy.slaveName;
+				}
+
+				r += `${He} is wearing a heavy metal collar with a digital display; it currently reads: `;
+				if (child.preg > 0 && !child.pregKnown) {
+					r += `"I might be preggers! Rub my belly for luck!" `;
+				} else {
+					if (pregCollar === 1) {
+						if (child.pregWeek < 0) {
+							r += `"I'm a mommy now!" `;
+						} else if (!child.pregKnown) {
+							r += `"Knock me up!" `;
+						} else if (child.pregKnown) {
+							r += `"${child.pregType === 0 ? `1` : `${child.pregType}`} bab${child.pregType > 1 ? `ies` : `y`} on board!" `;
+						} else {
+							r += `"I'm infertile!" `;
+						}
+					} else if (pregCollar === 2) {
+						if (child.pregWeek < 0) {
+							r += `"${num(child.pregWeek * -1)} week${child.pregWeek !== -1 ? `s` : ``} until I can get preggers again!" `;
+						} else if (child.pregKnown) {
+							r += `"${40-child.preg} weeks till I pop!" `;
+						} else {
+							r += `"My womb needs filling!" `;
+						}
+					} else {
+						if (child.pregWeek < 0) {
+							r += `"I can't wait for my belly to swell with life again!" `;
+						} else if (!child.pregKnown) {
+							r += `"Put a baby in me today!" `;
+						} else if (child.pregSource === -1) {
+							r += `"Womb claimed by my ${WrittenMaster(child)}!" `;
+						} else if (child.pregSource === -2 || child.pregSource === 0) {
+							r += `"Baby made by slutting around!" `;
+						} else if (child.pregSource === -7) {
+							r += `"My baby was made with science!" `;
+						} else if (child.pregSource === -9) {
+							r += `"Futanari Sisters, now two for the price of one!" `;
+						} else if (child.pregSource > 0) {
+							r += `"Womb claimed by ${daddy}!" `;
+						} else {
+							r += `"Put a baby in me today!" `;
+						}
+					}
+				}
 				break;
-			case "just friends":
-				r += `<strong>ReR:Fr</strong> `;
+			case "silk ribbon":
+				r += `${He} is wearing a tight silk ribbon fitted to ${his} neck; it is oddly elegant. `;
 				break;
-			default:
-				r += `<strong>ReR:R</strong> `;
+			case "tight steel":
+				r += `${He} is wearing a tight steel collar whose restricting metal touch ${he} cannot escape. `;
 				break;
-		}
-		switch (child.rules.punishment) {
-			case "confinement":
-				r += `<strong>Pun:Conf</strong> `;
+			case "porcelain mask":
+				r += `${He} is wearing a beautiful porcelain mask to hide ${his} unsightly facial features. `;
 				break;
-			case "whipping":
-				r += `<strong>Pun:Whip</strong> `;
+			case "shock punishment":
+				r += `${He} is wearing a utilitarian collar with a punishment device at ${his} throat to administer agonizing shocks. `;
 				break;
-			case "chastity":
-				r += `<strong>Pun:Chas</strong> `;
+			case "neck corset":
+				r += `${He} is wearing a fitted leather neck corset that constricts ${his} breathing and holds ${his} head rigidly upright. `;
 				break;
-			default:
-				r += `<strong>Pun:Situ</strong> `;
-				break;
-		}
-		switch (child.rules.reward) {
-			case "relaxation":
-				r += `<strong>Rew:Relx</strong> `;
-				break;
-			case "drugs":
-				r += `<strong>Rew:Drug</strong> `;
-				break;
-			case "orgasm":
-				r += `<strong>Rew:Orga</strong> `;
-				break;
-			default:
-				r += `<strong>Rew:Situ</strong> `;
+			case "stylish leather":
+				r += `${He} is wearing a stylish leather collar buckled in the front, a classic accessory for the well behaved slave. `;
 				break;
-		}
-		r += `<strong>MaR:${App.Utils.releaseSummaryShort(child)}</strong> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longRules(child) {
-		r += `Living standard: ${child.rules.living}. `;
-		if (canTalk(child)) {
-			r += `Speech rules: ${child.rules.speech}. `;
-		}
-		r += `Relationship rules: ${child.rules.relationship}. `;
-		r += `Typical punishment: ${child.rules.punishment}. `;
-		r += `Typical reward: ${child.rules.reward}. `;
-		r += `Release rules: ${App.Utils.releaseSummaryLong(child)}. `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortWeight(child) {
-		if (child.weight < -95) {
-			r += `<strong><span class="red">W---${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-		} else if (child.weight < -30) {
-			if (child.hips < -1) {
-				r += `<strong>W--${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W--${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		} else if (child.weight < -10) {
-			r += `<strong>W-${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-		} else if (child.weight <= 10) {
-			r += `<strong>W${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-		} else if (child.weight <= 30) {
-			r += `<strong>W+${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-		} else if (child.weight <= 95) {
-			if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `<strong>W++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		} else if (child.weight <= 130) {
-			if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `<strong>W+++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W+++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		} else if (child.weight <= 160) {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `<strong>W++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		} else if (child.weight <= 190) {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `<strong>W+++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W+++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		} else {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `<strong>W++++++${V.summaryStats ? `[${child.weight}]` : ''}</strong> `;
-			} else {
-				r += `<strong><span class="red">W++++++${V.summaryStats ? `[${child.weight}]` : ''}</span></strong> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longWeight(child) {
-		if (child.weight < -95) {
-			r += `<span class="red">Emaciated${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-		} else if (child.weight < -30) {
-			if (child.hips < -1) {
-				r += `Model-thin${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Very thin${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		} else if (child.weight < -10) {
-			r += `Thin${V.summaryStats ? `[${child.weight}]`: ''}. `;
-		} else if (child.weight <= 10) {
-			r += `Trim${V.summaryStats ? `[${child.weight}]`: ''}. `;
-		} else if (child.weight <= 30) {
-			r += `Plush ${V.summaryStats ? `[${child.weight}]`: ''}. `;
-		} else if (child.weight <= 95) {
-			if (child.hips > 1 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `Nicely chubby${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Overweight${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		} else if (child.weight <= 130) {
-			if (child.hips > 2 || V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `Pleasantly soft and shapely${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Fat${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		} else if (child.weight <= 160) {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `Amazingly voluptuous${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		} else if (child.weight <= 190) {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `SSBBW${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Super Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		} else {
-			if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
-				r += `Perfectly massive${V.summaryStats ? `[${child.weight}]`: ''}. `;
-			} else {
-				r += `<span class="red">Dangerously Obese${V.summaryStats ? `[${child.weight}]`: ''}.</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortDiet(child) {
-		r += `<span class="teal">`;
-		switch (child.diet) {
-			case "restricted":
-				r += `<strong>Di:W-</strong> `;
+			case "satin choker":
+				r += `${He} is wearing a steel reinforced black satin choker that is at once elegant and functional. `;
 				break;
-			case "fattening":
-				r += `<strong>Di:W+</strong> `;
+			case "heavy gold":
+				r += `${He} is wearing a heavy gold collar, an outstanding bit of ostentation. `;
 				break;
-			case "XX":
-				r += `<strong>Di:XX+</strong> `;
+			case "pretty jewelry":
+				r += `${He} is wearing a pretty slave collar that can almost be mistaken for jewelry. `;
 				break;
-			case "XY":
-				r += `<strong>Di:XY+</strong> `;
+			case "bell collar":
+				r += `${He} is wearing a comfortable leather collar with a small brass bell at ${his} throat. `;
 				break;
-			case "XXY":
-				r += `<strong>Di:XXY+</strong> `;
+			case "leather with cowbell":
+				r += `${He} is wearing a comfortable leather collar with a small steel cowbell at ${his} throat. `;
 				break;
-			case "muscle building":
-				r += `<strong>Di:M+</strong> `;
+			case "bowtie":
+				r += `${He} is wearing the collar from a white formal shirt, and a black bowtie, though these conceal an actual collar that works perfectly well for restraint. `;
 				break;
-			case "slimming":
-				r += `<strong>Di:M-</strong> `;
+			case "ancient Egyptian":
+				r += `${He} is wearing a beautiful golden wesekh, a collar that spreads from ${his} neck out onto both shoulders and down ${his} front. `;
 				break;
-			case "cum production":
-				r += `<strong>Di:C+</strong> `;
+			case "ball gag":
+				r += `${He} is wearing a mouth filling, ${child.makeup === 3 || child.makeup === 6 || child.makeup === 8 ? `${child.hColor}` : `red`} ball-shaped gag that prevents ${him} from uttering a word while keeping ${him} uncomfortably aware of ${his} status. `;
 				break;
-			case "cleansing":
-				r += `<strong>Di:H+</strong> `;
+			case "bit gag":
+				r += `${He} is wearing a jaw spreading, bar-shaped gag that prevents ${him} from speaking while keeping ${him} uncomfortably aware of ${his} status. `;
 				break;
-			case "fertility":
-				r += `<strong>Di:F+</strong> `;
+			case "cruel retirement counter":
+			case "nice retirement counter":
+				r += `${He} is wearing a ${child.collar === "cruel retirement counter" ? `heavy metal collar` : `nice collar, almost a necklace,`} with a small numerical display reading `;
+				if (V.policies.retirement.sex > 0) {
+					r += `${V.policies.retirement.sex - (child.counter.oral + child.counter.anal + child.counter.vaginal + child.counter.penetrative + child.counter.mammary)}, for the number of cocks between ${him} and ${his} freedom. `;
+				} else if (V.policies.retirement.milk > 0) {
+					r += `${V.policies.retirement.milk - child.counter.milk}, for the amount of milk ${he} has yet to give. `;
+				} else if (V.policies.retirement.cum > 0) {
+					r += `${V.policies.retirement.cum - child.counter.cum}, for the amount of cum ${he} has yet to give. `;
+				} else if (V.policies.retirement.births > 0) {
+					r += `${V.policies.retirement.births - child.counter.births}, for the number of pregnancies still between ${him} and freedom. `;
+				} else if (V.policies.retirement.kills > 0) {
+					r += `${V.policies.retirement.kills - child.counter.pitKills}, for the number of lives still between ${him} and freedom. `;
+				} else if (V.policies.retirement.physicalAgePolicy === 0) {
+					r += `${(365*(V.retirementAge-child.actualAge))+(7*(52-child.birthWeek))}, the number of days of sexual slavery ahead of ${him}. `;
+				} else {
+					r += `${(365*(V.retirementAge-child.physicalAge))+(7*(52-child.birthWeek))}, the number of days of sexual slavery ahead of ${him}. `;
+				}
 				break;
 		}
-		r += `</span> `;
-		r += `<span class="cyan">`;
-		if (child.dietCum === 2) {
-			r += `<strong>Cum++</strong> `;
-		} else if (((child.dietCum === 1) && (child.dietMilk === 0))) {
-			r += `<strong>Cum+</strong> `;
-		} else if (((child.dietCum === 1) && (child.dietMilk === 1))) {
-			r += `<strong>Cum+ Milk+</strong> `;
-		} else if (((child.dietCum === 0) && (child.dietMilk === 1))) {
-			r += `<strong>Milk+</strong> `;
-		} else if ((child.dietMilk === 2)) {
-			r += `<strong>Milk++</strong> `;
-		}
-		r += `</span> `;
-	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longDiet(child) {
-		r += `<span class="teal">`;
-		switch (child.diet) {
-			case "restricted":
-				r += `Dieting. `;
-				break;
-			case "fattening":
-				r += `Gaining weight. `;
-				break;
-			case "XX":
-				r += `Estrogen rich. `;
-				break;
-			case "XY":
-				r += `Testosterone rich. `;
-				break;
-			case "XXY":
-				r += `Futanari mix. `;
-				break;
-			case "muscle building":
-				r += `Pumping iron. `;
-				break;
-			case "slimming":
-				r += `Slimming down. `;
-				break;
-			case "cum production":
-				r += `Cum production. `;
-				break;
-			case "cleansing":
-				r += `Cleansing. `;
-				break;
-			case "fertility":
-				r += `Fertility. `;
-				break;
-		}
-		r += `</span> `;
-		if (child.dietCum === 2) {
-			r += `Diet base: <span class="cyan">Cum Based.</span> `;
-		} else if (((child.dietCum === 1) && (child.dietMilk === 0))) {
-			r += `Diet base: <span class="cyan">Cum Added.</span> `;
-		} else if (((child.dietCum === 1) && (child.dietMilk === 1))) {
-			r += `Diet base: <span class="cyan">Milk & Cum Added.</span> `;
-		} else if (((child.dietCum === 0) && (child.dietMilk === 1))) {
-			r += `Diet base: <span class="cyan">Milk Added.</span> `;
-		} else if ((child.dietMilk === 2)) {
-			r += `Diet base: <span class="cyan">Milk Based.</span> `;
-		}
+		return r;
 	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortHealth(child) {
-		if (child.health.condition < -20) {
-			r += `<strong><span class="red">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-		} else if (child.health.condition <= 20) {
-			r += `<strong><span class="yellow">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-		} else if (child.health.condition > 20) {
-			r += `<strong><span class="green">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
-		}
-	}
+	function crotch(child) {
+		let
+			r = ``;
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longHealth(child) {
-		if (child.health.condition < -90) {
-			r += `<span class="red">On the edge of death ${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else if (child.health.condition < -50) {
-			r += `<span class="red">Extremely unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else if (child.health.condition < -20) {
-			r += `<span class="red">Unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else if (child.health.condition <= 20) {
-			r += `<span class="yellow">Healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else if (child.health.condition <= 50) {
-			r += `<span class="green">Very healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else if (child.health.condition <= 90) {
-			r += `<span class="green">Extremely healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
-		} else {
-			r += `<span class="green">Unnaturally healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+		if (V.showClothing && !V.saleDescription) {
+			switch (child.clothes) {
+				case "a slave gown":
+					r += `${child.slaveName}'s `;
+					if (child.dick > 6) {
+						r += `lovely gown cannot hide the fact that something massive is lurking between ${his} legs. `;
+					} else if (child.dick > 3) {
+						r += `cock tents the front of ${his} lovely gown. `;
+					} else if (child.dick > 0 && child.vagina > -1) {
+						r += `hermaphroditic genitalia are hidden by ${his} lovely gown. `;
+					} else if (child.dick > 0) {
+						r += `cock is hidden by ${his} lovely gown. `;
+					} else if (child.vagina === -1) {
+						r += `featureless groin is concealed by ${his} lovely gown. `;
+					} else {
+						r += `pussy is concealed by ${his} lovely gown. `;
+					}
+					break;
+				case "a ball gown":
+					r += `${child.slaveName}'s `;
+					if (child.dick > 3) {
+						r += `cock tents the front of ${his} fabulous silken ball gown. `;
+					} else if (child.dick > 0 && child.vagina > -1) {
+						r += `hermaphroditic genitalia are hidden by ${his} fabulous silken ball gown. `;
+					} else if (child.dick > 0) {
+						r += `cock is hidden by ${his} fabulous silken ball gown. `;
+					} else if (child.vagina === -1) {
+						r += `featureless groin is hidden by ${his} fabulous silken ball gown. `;
+					} else {
+						r += `pussy is concealed by ${his} fabulous silken ball gown. `;
+					}
+					break;
+				case "a mini dress":
+					r += `${child.slaveName}'s `;
+					if (child.dick > 5 && canAchieveErection(child) && child.devotion > 20 && child.belly >= 5000) {
+						r += `massive erection is agonizingly pinned to the front of ${his} ${child.bellyPreg > 2000 ? `gravid` : bellyImplant > 2000 ? `rounded` : `swollen`} belly, entirely visible against the straining fabric of ${his} dress. `;
+					} else if (child.dick > 5 && canAchieveErection(child) && child.devotion > 20) {
+						r += `massive erection ascends up ${his} chest, entirely visible against the straining fabric of ${his} dress. `;
+					} else if (child.dick > 3 && canAchieveErection(child) && child.devotion > 20 && child.belly >= 5000) {
+						r += `erection lies flush against the bottom of ${his} ${child.bellyPreg > 2000 ? `gravid` : bellyImplant > 2000 ? `rounded` : `swollen`} stomach, visible under the tight fabric of ${his} dress. `;
+					} else if (child.dick > 3 && canAchieveErection(child) && child.devotion > 20) {
+						r += `erection lies flush against ${his} stomach, visible under the tight fabric of ${his} dress. `;
+					} else if (child.dick > 5) {
+						r += `short dress can't possibly conceal ${his} huge cock; its lower half sticks out below the hemline. `;
+					} else if (child.dick > 3) {
+						r += `short dress can't possibly conceal ${his} big cock; its head peeks out below the hemline. `;
+					} else if (child.dick > 0 && child.vagina > -1) {
+						r += `short dress scarcely covers the bulge of ${his} cock, while leaving a hint of ${his} bare pussy visible below the hemline. `;
+					} else if (child.dick > 0) {
+						r += `short dress scarcely covers the bulge of ${his} cock. `;
+					} else if (child.chastityVagina) {
+						r += `short dress leaves a hint of ${his} polished chastity belt below the hemline. `;
+					} else if (child.chastityAnus) {
+						r += `short dress leaves a hint of ${his} polished anal chastity belt below the hemline. `;
+					} else if (child.vagina === -1) {
+						r += `short dress leaves a hint of ${his} featureless groin below its hemline. `;
+					} else {
+						r += `short dress leaves a hint of ${his} bare pussy below the hemline. `;
+					}
+					break;
+				case "a schoolgirl outfit":
+					if (child.dick > 3) {
+						r += `${child.slaveName}'s dickhead is visible, swinging below the hem of ${his} skirt. `;
+					} else if (child.dick > 0) {
+						r += `Something is pushing against the front of ${child.slaveName}'s plaid skirt. `;
+					} else if (child.vagina === -1) {
+						r += `${child.slaveName}'s plaid skirt lifts to show off ${his} featureless groin. `;
+					} else {
+						r += `${child.slaveName}'s plaid skirt lifts to show off ${his} pussy with the slightest provocation. `;
+					}
+					break;
+				case "a tank-top":
+				case "a tube top":
+				case "a t-shirt":
+					if (child.dick > 6) {
+						r += `${his} outfit does nothing to conceal ${his} swinging cock. `;
+					} else if (child.dick > 0 && child.vagina > -1) {
+						r += `${child.slaveName}'s outfit does nothing to conceal ${his} hermaphroditic genitalia. `;
+					} else if (child.dick > 0) {
+						r += `${child.slaveName}'s outfit does nothing to conceal ${his} cock. `;
+					} else if (child.vagina === -1) {
+						r += `${child.slaveName}'s outfit does nothing to conceal ${his} featureless groin. `;
+					} else {
+						r += `${child.slaveName}'s outfit does nothing to conceal ${his} pussy. `;
+					}
+					break;
+				default:
+					if (!child.chastityPenis) {
+						if (child.vagina > -1) {
+							r += `${child.slaveName}'s ${child.dick > 0 ? `hermaphrodite genitalia are` : `pussy is`} bare and available. `;
+						} else if (child.dick > 0) {
+							r += `${child.slaveName}'s `;
+
+							switch (child.dick) {
+								case 10:
+									r += `inhuman cock hangs naked. `;
+									break;
+								case 9:
+									r += `absurd cock hangs naked. `;
+									break;
+								case 8:
+									r += `titanic${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
+									break;
+								case 7:
+									r += `gigantic${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
+									break;
+								case 6:
+									r += `huge${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
+									break;
+								case 5:
+									r += `imposing${!canAchieveErection(child) ? `, flaccid` : ``} cock swings naked. `;
+									break;
+								case 4:
+									r += `big${!canAchieveErection(child) ? `, flaccid` : ``} cock dangles naked. `;
+									break;
+								case 3:
+									r += `${!canAchieveErection(child) ? ` flaccid` : ``} cock dangles bare. `;
+									break;
+								case 2:
+									r += `little${!canAchieveErection(child) ? ` flaccid` : ``} dick is bare. `;
+									break;
+								case 1:
+									r += `tiny${!canAchieveErection(child) ? ` flaccid` : ``} dick is bare. `;
+									break;
+								default:
+									r += `hypertrophied cock hangs naked. `;
+									break;
+							}
+						} else {
+							r += `${child.slaveName}'s ${child.balls > 0 ? `lonely balls are` : `featureless groin is`} bare and vulnerable. `;
+						}
+					}
+					break;
+			}
 		}
+
+		return r;
 	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortDrugs(child) {
-		r += `<span class="tan">`;
-		switch (child.drugs) {
-			case "breast injections":
-				r += `<strong>Dr:Boobs+</strong> `;
-				break;
-			case "intensive breast injections":
-				r += `<strong>Dr:Boobs++</strong> `;
-				break;
-			case "nipple enhancers":
-				r += `<strong>Dr:Nipple+</strong> `;
-				break;
-			case "hyper breast injections":
-				r += `<strong>Dr:Boobs+++</strong> `;
-				break;
-			case "butt injections":
-				r += `<strong>Dr:Butt+</strong> `;
-				break;
-			case "intensive butt injections":
-				r += `<strong>Dr:Butt++</strong> `;
-				break;
-			case "hyper butt injections":
-				r += `<strong>Dr:Butt+++</strong> `;
-				break;
-			case "lip injections":
-				r += `<strong>Dr:Lip+</strong> `;
-				break;
-			case "fertility drugs":
-				r += `<strong>Dr:Fert+</strong> `;
-				break;
-			case "super fertility drugs":
-				r += `<strong>Dr:Fert++</strong> `;
-				break;
-			case "penis enhancement":
-				r += `<strong>Dr:Dick+</strong> `;
-				break;
-			case "intensive penis enhancement":
-				r += `<strong>Dr:Dick++</strong> `;
-				break;
-			case "hyper penis enhancement":
-				r += `<strong>Dr:Dick+++</strong> `;
-				break;
-			case "testicle enhancement":
-				r += `<strong>Dr:Balls+</strong> `;
-				break;
-			case "intensive testicle enhancement":
-				r += `<strong>Dr:Balls++</strong> `;
-				break;
-			case "hyper testicle enhancement":
-				r += `<strong>Dr:Balls+++</strong> `;
-				break;
-			case "psychosuppressants":
-				r += `<strong>Dr:Psych</strong> `;
-				break;
-			case "steroids":
-				r += `<strong>Dr:Ster</strong> `;
-				break;
-			case "female hormone injections":
-				r += `<strong>Dr:HormXX++</strong> `;
-				break;
-			case "male hormone injections":
-				r += `<strong>Dr:HormXY++</strong> `;
-				break;
-			case "hormone enhancers":
-				r += `<strong>Dr:Horm+</strong> `;
-				break;
-			case "hormone blockers":
-				r += `<strong>Dr:Horm-</strong> `;
-				break;
-			case "anti-aging cream":
-				r += `<strong>Dr:Age-</strong> `;
-				break;
-			case "appetite suppressors":
-				r += `<strong>Dr:ApSup</strong> `;
-				break;
-			case "penis atrophiers":
-				r += `<strong>Dr:Dick-</strong> `;
-				break;
-			case "testicle atrophiers":
-				r += `<strong>Dr:Balls-</strong> `;
-				break;
-			case "clitoris atrophiers":
-				r += `<strong>Dr:Clit-</strong> `;
-				break;
-			case "labia atrophiers":
-				r += `<strong>Dr:Labia-</strong> `;
-				break;
-			case "nipple atrophiers":
-				r += `<strong>Dr:Nipple-</strong> `;
-				break;
-			case "lip atrophiers":
-				r += `<strong>Dr:Lip-</strong> `;
-				break;
-			case "breast redistributors":
-				r += `<strong>Dr:Breast-</strong> `;
-				break;
-			case "butt redistributors":
-				r += `<strong>Dr:Butt-</strong> `;
-				break;
-			case "sag-B-gone":
-				r += `<strong>Dr:AntiSag</strong> `;
-				break;
-			case "growth stimulants":
-				r += `<strong>Dr:groStim</strong> `;
-				break;
-		}
-		r += `</span> `;
-		r += `<span class="lightgreen">`;
-		if (child.curatives === 2) {
-			r += `<strong>Cura</strong> `;
-		} else if (child.curatives === 1) {
-			r += `<strong>Prev</strong> `;
-		}
-		r += `</span> `;
-		if (child.aphrodisiacs !== 0) {
-			r += `<span class="lightblue">`;
-			if (child.aphrodisiacs === 1) {
-				r += `<strong>Aph</strong> `;
-			} else if (child.aphrodisiacs === 2) {
-				r += `<strong>Aph++</strong> `;
-			} else {
-				r += `<strong>Anaph</strong> `;
+	function dick(child) {
+		let
+			r = ``,
+			scrotalFullness = child.scrotum - child.balls;
+
+		if (child.dick > 0) {
+			switch (child.dick) {
+				case 10:
+					if (V.showDickCMs) {
+						r += `${His} awe-inspiring${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around ${dickToEitherUnit(child.dick)} long, `;
+					} else {
+						r += `${He} has an awe-inspiring${V.seeCircumcision ? `, uncut` : ` circumcised`} penis, `;
+					}
+					r += `a true masterpiece of modern growth hormone treatment, `;
+					break;
+				case 9:
+					if (V.showDickCMs) {
+						r += `${His} monstrous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long, `;
+					} else {
+						r += `${He} has a monstrous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
+					}
+					r += `a work of modern pharmacological art, `;
+					break;
+				case 8:
+					if (V.showDickCMs) {
+						r += `${His} truly imposing${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long when as hard as it can get, `;
+					} else {
+						r += `${He} has a truly imposing${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
+					}
+					r += `an obvious product of modern growth hormones, `;
+					break;
+				case 7:
+					if (V.showDickCMs) {
+						r += `${His} massive${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long when as hard as it can get, `;
+					} else {
+						r += `${He} has a massive${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
+					}
+					r += `larger than a dick can grow naturally, `;
+					break;
+				case 6:
+					r += `${showDickCMs ? `${His} enormous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has an enormous${V.seeCircumcision ? `, uncut,` : `, circumcised,`} penis`}, a rival to the world's largest natural dicks, `;
+					break;
+				case 5:
+					r += `${showDickCMs ? `${His} huge${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is more than${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a huge${V.seeCircumcision ? `, uncut,` : `, circumcised,`} penis`}, large enough to be sexually inconvenient, `;
+					break;
+				case 4:
+					r += `${showDickCMs ? `${His} large${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a large${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, big enough to be a source of pride on a male, `;
+					break;
+				case 3:
+					r += `${showDickCMs ? `${His} average-sized${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`}s erect` : `${He} has an average-sized${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, `;
+					break;
+				case 2:
+					r += `${showDickCMs ? `${His} small${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a small${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, little enough to be a source of embarrassment on a male, `;
+					break;
+				case 1:
+					r += `${showDickCMs ? `${His}${V.seeCircumcision ? `, uncut` : ` circumcised`} micropenis ${canAchieveErection(child) ? `is less than${dickToEitherUnit(child.dick)} long when` : `would be less than${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has ${V.seeCircumcision ? `an uncut` : `a circumcised`} micropenis`}, `;
+					break;
+				default:
+					if (V.showDickCMs) {
+						r += `${His} mind-shattering${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long, `;
+					} else {
+						r += `${He} has a mind-shattering${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
+					}
+					r += `a true masterpiece of modern growth hormone treatment, `;
+					break;
 			}
-			r += `</span> `;
-		}
-		if (child.addict !== 0) {
-			r += `<span class="cyan">Add</span> `;
-		}
-		r += `<span class="lightsalmon">`;
-		if (child.hormones > 1) {
-			r += `<strong>Ho:F+</strong> `;
-		} else if (child.hormones > 0) {
-			r += `<strong>Ho:F</strong> `;
-		} else if (child.hormones < -1) {
-			r += `<strong>Ho:M+</strong> `;
-		} else if (child.hormones < 0) {
-			r += `<strong>Ho:M</strong> `;
-		}
-		r += `</span> `;
-		r += `<span class="mediumseagreen">`;
-		if ((child.bellyImplant > -1)) {
-			r += `<strong>Belly Imp</strong> `;
-		} else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) {
-			r += `<strong>Barr</strong> `;
-		} else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `<strong>Prepub</strong> `;
-		} else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `<strong>Meno</strong> `;
-		} else if (child.pregWeek < 0) {
-			r += `<strong>Postpartum</strong> `;
-		} else if (child.preg === -1) {
-			r += `<strong>CC</strong> `;
-		} else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `<strong>Fert+</strong> `;
-			// } else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) {
-			//	r += `<strong>Preg?</strong> `;
-		} else if (child.preg >= 36) {
-			r += `<strong>Perm preg</strong> `;
-		} else if (child.pregKnown === 1) {
-			r += `<strong>${child.pregWeek} wks preg</strong> `;
-		}
-		r += `</span> `;
-		if (child.induce === 1) {
-			r += `<span class="orange"><strong>Early Labor</strong></span> `;
-		}
-		if (child.pubertyXY === 0 && child.balls > 0) {
-			r += `<strong>Prepub balls</strong> `;
-		}
-		if (child.balls > 0 && child.vasectomy === 1) {
-			r += `<strong>Vasect</strong> `;
-		}
-		r += `<span class="springgreen">`;
-		if (child.inflation === 3) {
-			r += `<strong>8 ltr ${child.inflationType}</strong> `;
-		} else if (child.inflation === 2) {
-			r += `<strong>4 ltr ${child.inflationType}</strong> `;
-		} else if (child.inflation === 1) {
-			r += `<strong>2 ltr ${child.inflationType}</strong> `;
-		} else if (child.bellyFluid > 0) {
-			r += `<strong>${child.bellyFluid}ccs ${child.inflationType}</strong> `;
-		}
-		r += `</span> `;
-	}
 
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longDrugs(child) {
-		if ((child.drugs !== "no drugs") && (child.drugs !== "none")) {
-			r += `<span class="tan">On ${child.drugs}.</span> `;
-		}
-		r += `<span class="lightgreen">`;
-		if (child.curatives === 2) {
-			r += `On curatives. `;
-		} else if (child.curatives === 1) {
-			r += `On preventatives. `;
-		}
-		r += `</span> `;
-		r += `<span class="lightblue">`;
-		if (child.aphrodisiacs > 0) {
-			r += `On ${child.aphrodisiacs > 1 ? 'extreme': ''} aphrodisiacs. `;
-		} else if (child.aphrodisiacs === -1) {
-			r += `On anaphrodisiacs. `;
-		}
-		r += `</span> `;
-		if (child.addict !== 0) {
-			r += `<span class="cyan">Addict.</span> `;
-		}
-		r += `<span class="lightsalmon">`;
-		if (child.hormones > 1) {
-			r += `Heavy female hormones. `;
-		} else if (child.hormones > 0) {
-			r += `Female hormones. `;
-		} else if (child.hormones < -1) {
-			r += `Heavy male hormones. `;
-		} else if (child.hormones < 0) {
-			r += `Male hormones. `;
-		}
-		r += `</span> `;
-		r += `<span class="mediumseagreen">`;
-		if ((child.bellyImplant > -1)) {
-			r += `Belly Implant. `;
-		} else if (((child.preg <= -2) || (child.ovaries === 0)) && (child.vagina !== -1)) {
-			r += `Barren. `;
-		} else if (child.pubertyXX === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `Not ovulating yet. `;
-		} else if (child.ovaryAge >= 47 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `Menopausal. `;
-		} else if (child.pregWeek < 0) {
-			r += `Postpartum. `;
-		} else if (child.preg === -1) {
-			r += `On contraceptives. `;
-		} else if (child.preg === 0 && (child.ovaries === 1 || child.mpreg === 1)) {
-			r += `Fertile. `;
-		} else if (((child.preg < child.pregData.normalBirth / 10) && (child.preg > 0) && child.pregKnown === 0) || child.pregWeek === 1) {
-			r += `May be pregnant. `;
-		} else if (child.preg >= 36) {
-			r += `Permanently pregnant. `;
-		} else if (child.pregKnown === 1) {
-			if (child.pregType < 2) {
-				r += `${child.pregWeek} weeks pregnant. `;
-			} else {
-				r += `${child.pregWeek} weeks pregnant with `;
-				if (child.pregType >= 40) {
-					r += `a tremendous brood of offspring. `;
-				} else if (child.pregType >= 20) {
-					r += `a brood of offspring. `;
-				} else if (child.pregType >= 10) {
-					r += `${child.pregType} babies. `;
-				} else if (child.pregType === 9) {
-					r += `nonuplets. `;
-				} else if (child.pregType === 8) {
-					r += `octuplets. `;
-				} else if (child.pregType === 7) {
-					r += `septuplets. `;
-				} else if (child.pregType === 6) {
-					r += `sextuplets. `;
-				} else if (child.pregType === 5) {
-					r += `quintuplets. `;
-				} else if (child.pregType === 4) {
-					r += `quadruplets. `;
-				} else if (child.pregType === 3) {
-					r += `triplets. `;
+			if (!child.scrotum) {
+				if (child.vagina > -1) {
+					r += `and is right above ${his} vagina. `;
 				} else {
-					r += `twins. `;
+					r += `and rests above nothing but smooth, sensitive skin until `;
+
+					switch (child.anus) {
+						case 0:
+							r += `the tiny crinkle of ${his} virgin asshole. `;
+							break;
+						case 1:
+							r += `${his} tight little rosebud. `;
+							break;
+						case 2:
+							r += `the bottom of the vertical slit formed by ${his} rear pussy. `;
+							break;
+						case 3:
+							r += `the bottom of the soft slit formed by ${his} lewd rear pussy. `;
+							break;
+						default:
+							r += `the edge of ${his} open anal gape. `;
+							break;
+					}
+				}
+			} else {
+				switch (child.balls) {
+					case 10:
+						r += `and ${he} has an inhuman pair of testicles${V.showDickCMs ? `, nearly ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 9:
+						r += `and ${he} has a titanic pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 8:
+						r += `and ${he} has a gigantic pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 7:
+						r += `and ${he} has a monstrous pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 6:
+						r += `and ${he} has an enormous pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 5:
+						r += `and ${he} has a huge pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 4:
+						r += `and ${he} has a big pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 3:
+						r += `and ${he} has an average pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 2:
+						r += `and ${he} has a small pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
+						break;
+					case 1:
+						r += `and ${his} testicles are so small they have retreated up into ${his} abdomen. `;
+						break;
+					case 0:
+						if (child.dick === 2) {
+							r += `and ${he} lacks testicles. `;
+						} else if (child.dick === 1) {
+							r += `and ${he} lacks testicles: ${his} vestigial dick is functionally a large, soft clit. `;
+						} else {
+							r += `but ${he} lacks testicles. `;
+						}
+						break;
+					default:
+						r += `and ${he} has a hypertrophied, clearly unnatural pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}, a true masterpiece of modern growth hormone treatment. `;
+						break;
 				}
 			}
-			if (child.preg > child.pregData.normalBirth) { // TODO: double check this
-				r += ` (Overdue.)`;
-			}
-		}
-		r += `</span> `;
-		if (child.induce === 1) {
-			r += `<span class="orange">Showing signs of early labor.</span> `;
-		}
-		if (child.pubertyXY === 0 && child.balls > 0) {
-			r += `Has not had first ejaculation. `;
-		}
-		if (child.balls > 0 && child.vasectomy === 1) {
-			r += `Vasectomy. `;
-		}
-		r += `<span class="springgreen">`;
-		if (child.inflation === 3) {
-			r += `Filled with 8 liters of ${child.inflationType}. `;
-		} else if (child.inflation === 2) {
-			r += `Filled with 4 liters of ${child.inflationType}. `;
-		} else if (child.inflation === 1) {
-			r += `Filled with 2 liters of ${child.inflationType}. `;
-		} else if (child.bellyFluid > 0) {
-			r += `Stuffed with ${child.bellyFluid}ccs of ${child.inflationType}. `;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortRace(child) {
-		switch (child.race) {
-			case "white":
-				r += `C`;
-				break;
-			case "asian":
-				r += `A`;
-				break;
-			case "indo-aryan":
-				r += `I`;
-				break;
-			case "latina":
-				r += `L`;
-				break;
-			case "middle eastern":
-				r += `ME`;
-				break;
-			case "black":
-				r += `B`;
-				break;
-			case "pacific islander":
-				r += `PI`;
-				break;
-			case "malay":
-				r += `M`;
-				break;
-			case "amerindian":
-				r += `AI`;
-				break;
-			case "semitic":
-				r += `S`;
-				break;
-			case "southern european":
-				r += `SE`;
-				break;
-			case "mixed race":
-				r += `MR`;
-				break;
-			default:
-				r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longRace(child) {
-		switch (child.race) {
-			case "white":
-				r += `Caucasian. `;
-				break;
-			case "asian":
-				r += `Asian. `;
-				break;
-			case "indo-aryan":
-				r += `Indo-aryan. `;
-				break;
-			case "latina":
-				r += `Latina. `;
-				break;
-			case "middle eastern":
-				r += `Middle Eastern. `;
-				break;
-			case "black":
-				r += `Black. `;
-				break;
-			case "pacific islander":
-				r += `Pacific Islander. `;
-				break;
-			case "malay":
-				r += `Malay. `;
-				break;
-			case "amerindian":
-				r += `Amerindian. `;
-				break;
-			case "semitic":
-				r += `Semitic. `;
-				break;
-			case "southern european":
-				r += `Southern European. `;
-				break;
-			case "mixed race":
-				r += `Mixed race. `;
-				break;
-			default:
-				r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortNationality(child) {
-		r += `<span class="tan">`;
-		switch (child.nationality) {
-			case "Afghan":
-				r += `Afg`;
-				break;
-			case "Albanian":
-				r += `Alb`;
-				break;
-			case "Algerian":
-				r += `Alg`;
-				break;
-			case "American":
-				r += `USA`;
-				break;
-			case "Andorran":
-				r += `And`;
-				break;
-			case "Angolan":
-				r += `Ang`;
-				break;
-			case "Antiguan":
-				r += `AB`;
-				break;
-			case "Argentinian":
-				r += `Arg`;
-				break;
-			case "Armenian":
-				r += `Arm`;
-				break;
-			case "Aruban":
-				r += `Aru`;
-				break;
-			case "Australian":
-				r += `Aus`;
-				break;
-			case "Austrian":
-				r += `Aut`;
-				break;
-			case "Azerbaijani":
-				r += `Aze`;
-				break;
-			case "Bahamian":
-				r += `Bah`;
-				break;
-			case "Bahraini":
-				r += `Bah`;
-				break;
-			case "Bangladeshi":
-				r += `Bgd`;
-				break;
-			case "Barbadian":
-				r += `Bar`;
-				break;
-			case "Belarusian":
-				r += `Ber`;
-				break;
-			case "Belgian":
-				r += `Bel`;
-				break;
-			case "Belizean":
-				r += `Blz`;
-				break;
-			case "Beninese":
-				r += `Ben`;
-				break;
-			case "Bermudian":
-				r += `Bmd`;
-				break;
-			case "Bhutanese":
-				r += `Bhu`;
-				break;
-			case "Bissau-Guinean":
-				r += `GB`;
-				break;
-			case "Bolivian":
-				r += `Bol`;
-				break;
-			case "Bosnian":
-				r += `Bos`;
-				break;
-			case "Brazilian":
-				r += `Bra`;
-				break;
-			case "British":
-				r += `UK`;
-				break;
-			case "Bruneian":
-				r += `Bru`;
-				break;
-			case "Bulgarian":
-				r += `Bul`;
-				break;
-			case "Burkinabé":
-				r += `BF`;
-				break;
-			case "Burmese":
-				r += `Bur`;
-				break;
-			case "Burundian":
-				r += `Bnd`;
-				break;
-			case "Cambodian":
-				r += `Kam`;
-				break;
-			case "Cameroonian":
-				r += `Cam`;
-				break;
-			case "Canadian":
-				r += `Can`;
-				break;
-			case "Cape Verdean":
-				r += `CV`;
-				break;
-			case "Catalan":
-				r += `Cat`;
-				break;
-			case "Central African":
-				r += `CAR`;
-				break;
-			case "Chadian":
-				r += `Cha`;
-				break;
-			case "Chilean":
-				r += `Chl`;
-				break;
-			case "Chinese":
-				r += `Chi`;
-				break;
-			case "Colombian":
-				r += `Col`;
-				break;
-			case "Comorian":
-				r += `Com`;
-				break;
-			case "Congolese":
-				r += `RC`;
-				break;
-			case "a Cook Islander":
-				r += `CI`;
-				break;
-			case "Costa Rican":
-				r += `CR`;
-				break;
-			case "Croatian":
-				r += `Cro`;
-				break;
-			case "Cuban":
-				r += `Cub`;
-				break;
-			case "Curaçaoan":
-				r += `Cur`;
-				break;
-			case "Cypriot":
-				r += `Cyp`;
-				break;
-			case "Czech":
-				r += `Cze`;
-				break;
-			case "Danish":
-				r += `Den`;
-				break;
-			case "Djiboutian":
-				r += `Dji`;
-				break;
-			case "Dominican":
-				r += `DR`;
-				break;
-			case "Dominiquais":
-				r += `Dom`;
-				break;
-			case "Dutch":
-				r += `Nld`;
-				break;
-			case "East Timorese":
-				r += `ET`;
-				break;
-			case "Ecuadorian":
-				r += `Ecu`;
-				break;
-			case "Egyptian":
-				r += `Egy`;
-				break;
-			case "Emirati":
-				r += `UAE`;
-				break;
-			case "Equatoguinean":
-				r += `EG`;
-				break;
-			case "Eritrean":
-				r += `Eri`;
-				break;
-			case "Estonian":
-				r += `Est`;
-				break;
-			case "Ethiopian":
-				r += `Eth`;
-				break;
-			case "Fijian":
-				r += `Fij`;
-				break;
-			case "Filipina":
-				r += `Phl`;
-				break;
-			case "Finnish":
-				r += `Fin`;
-				break;
-			case "French":
-				r += `Fra`;
-				break;
-			case "French Guianan":
-				r += `FG`;
-				break;
-			case "French Polynesian":
-				r += `FP`;
-				break;
-			case "Gabonese":
-				r += `Gab`;
-				break;
-			case "Gambian":
-				r += `Gam`;
-				break;
-			case "Georgian":
-				r += `Geo`;
-				break;
-			case "German":
-				r += `Ger`;
-				break;
-			case "Ghanan":
-				r += `Gha`;
-				break;
-			case "Greek":
-				r += `Gre`;
-				break;
-			case "Greenlandic":
-				r += `Grn`;
-				break;
-			case "Grenadian":
-				r += `Gda`;
-				break;
-			case "Guamanian":
-				r += `Gua`;
-				break;
-			case "Guatemalan":
-				r += `Gtm`;
-				break;
-			case "Guinean":
-				r += `Gui`;
-				break;
-			case "Guyanese":
-				r += `Guy`;
-				break;
-			case "Haitian":
-				r += `Hai`;
-				break;
-			case "Honduran":
-				r += `Hon`;
-				break;
-			case "Hungarian":
-				r += `Hun`;
-				break;
-			case "I-Kiribati":
-				r += `Kir`;
-				break;
-			case "Icelandic":
-				r += `Ice`;
-				break;
-			case "Indian":
-				r += `Ind`;
-				break;
-			case "Indonesian":
-				r += `Idn`;
-				break;
-			case "Iranian":
-				r += `Irn`;
-				break;
-			case "Iraqi":
-				r += `Irq`;
-				break;
-			case "Irish":
-				r += `Irl`;
-				break;
-			case "Israeli":
-				r += `Isr`;
-				break;
-			case "Italian":
-				r += `Ita`;
-				break;
-			case "Ivorian":
-				r += `IC`;
-				break;
-			case "Jamaican":
-				r += `Jam`;
-				break;
-			case "Japanese":
-				r += `Jpn`;
-				break;
-			case "Jordanian":
-				r += `Jor`;
-				break;
-			case "Kazakh":
-				r += `Kaz`;
-				break;
-			case "Kenyan":
-				r += `Ken`;
-				break;
-			case "Kittitian":
-				r += `SKN`;
-				break;
-			case "Korean":
-				r += `Kor`;
-				break;
-			case "Kosovan":
-				r += `Kos`;
-				break;
-			case "Kurdish":
-				r += `Kur`;
-				break;
-			case "Kuwaiti":
-				r += `Kuw`;
-				break;
-			case "Kyrgyz":
-				r += `Kyr`;
-				break;
-			case "Laotian":
-				r += `Lao`;
-				break;
-			case "Latvian":
-				r += `Lat`;
-				break;
-			case "Lebanese":
-				r += `Lbn`;
-				break;
-			case "Liberian":
-				r += `Lib`;
-				break;
-			case "Libyan":
-				r += `Lby`;
-				break;
-			case "a Liechtensteiner":
-				r += `Lie`;
-				break;
-			case "Lithuanian":
-				r += `Lit`;
-				break;
-			case "Luxembourgian":
-				r += `Lux`;
-				break;
-			case "Macedonian":
-				r += `Mac`;
-				break;
-			case "Malagasy":
-				r += `Mad`;
-				break;
-			case "Malawian":
-				r += `Mwi`;
-				break;
-			case "Malaysian":
-				r += `Mys`;
-				break;
-			case "Maldivian":
-				r += `Mdv`;
-				break;
-			case "Malian":
-				r += `Mal`;
-				break;
-			case "Maltese":
-				r += `Mlt`;
-				break;
-			case "Marshallese":
-				r += `MI`;
-				break;
-			case "Mauritanian":
-				r += `Mta`;
-				break;
-			case "Mauritian":
-				r += `Mts`;
-				break;
-			case "Mexican":
-				r += `Mex`;
-				break;
-			case "Micronesian":
-				r += `FSM`;
-				break;
-			case "Moldovan":
-				r += `Mol`;
-				break;
-			case "Monégasque":
-				r += `Mnc`;
-				break;
-			case "Mongolian":
-				r += `Mon`;
-				break;
-			case "Montenegrin":
-				r += `Mng`;
-				break;
-			case "Moroccan":
-				r += `Mor`;
-				break;
-			case "Mosotho":
-				r += `Les`;
-				break;
-			case "Motswana":
-				r += `Bot`;
-				break;
-			case "Mozambican":
-				r += `Moz`;
-				break;
-			case "Namibian":
-				r += `Nam`;
-				break;
-			case "Nauruan":
-				r += `Nau`;
-				break;
-			case "Nepalese":
-				r += `Npl`;
-				break;
-			case "New Caledonian":
-				r += `NC`;
-				break;
-			case "a New Zealander":
-				r += `NZ`;
-				break;
-			case "Ni-Vanuatu":
-				r += `Van`;
-				break;
-			case "Nicaraguan":
-				r += `Nic`;
-				break;
-			case "Nigerian":
-				r += `Nga`;
-				break;
-			case "Nigerien":
-				r += `Ngr`;
-				break;
-			case "Niuean":
-				r += `Niu`;
-				break;
-			case "Norwegian":
-				r += `Nor`;
-				break;
-			case "Omani":
-				r += `Omn`;
-				break;
-			case "Pakistani":
-				r += `Pak`;
-				break;
-			case "Palauan":
-				r += `Plu`;
-				break;
-			case "Palestinian":
-				r += `Pal`;
-				break;
-			case "Panamanian":
-				r += `Pan`;
-				break;
-			case "Papua New Guinean":
-				r += `PNG`;
-				break;
-			case "Paraguayan":
-				r += `Par`;
-				break;
-			case "Peruvian":
-				r += `Per`;
-				break;
-			case "Polish":
-				r += `Pol`;
-				break;
-			case "Portuguese":
-				r += `Por`;
-				break;
-			case "Puerto Rican":
-				r += `PR`;
-				break;
-			case "Qatari":
-				r += `Qat`;
-				break;
-			case "Romanian":
-				r += `Rom`;
-				break;
-			case "Russian":
-				r += `Rus`;
-				break;
-			case "Rwandan":
-				r += `Rwa`;
-				break;
-			case "Sahrawi":
-				r += `Sah`;
-				break;
-			case "Saint Lucian":
-				r += `SL`;
-				break;
-			case "Salvadoran":
-				r += `ES`;
-				break;
-			case "Sammarinese":
-				r += `SM`;
-				break;
-			case "Samoan":
-				r += `Sam`;
-				break;
-			case "São Toméan":
-				r += `STP`;
-				break;
-			case "Saudi":
-				r += `Sau`;
-				break;
-			case "Scottish":
-				r += `Sco`;
-				break;
-			case "Senegalese":
-				r += `Sen`;
-				break;
-			case "Serbian":
-				r += `Srb`;
-				break;
-			case "Seychellois":
-				r += `Sey`;
-				break;
-			case "Sierra Leonean":
-				r += `Sie`;
-				break;
-			case "Singaporean":
-				r += `Sng`;
-				break;
-			case "Slovak":
-				r += `Svk`;
-				break;
-			case "Slovene":
-				r += `Svn`;
-				break;
-			case "a Solomon Islander":
-				r += `SI`;
-				break;
-			case "Somali":
-				r += `Som`;
-				break;
-			case "South African":
-				r += `RSA`;
-				break;
-			case "South Sudanese":
-				r += `SS`;
-				break;
-			case "Spanish":
-				r += `Spa`;
-				break;
-			case "Sri Lankan":
-				r += `Sri`;
-				break;
-			case "Sudanese":
-				r += `Sud`;
-				break;
-			case "Surinamese":
-				r += `Sur`;
-				break;
-			case "Swazi":
-				r += `Swa`;
-				break;
-			case "Swedish":
-				r += `Swe`;
-				break;
-			case "Swiss":
-				r += `Swi`;
-				break;
-			case "Syrian":
-				r += `Syr`;
-				break;
-			case "Taiwanese":
-				r += `Tai`;
-				break;
-			case "Tajik":
-				r += `Taj`;
-				break;
-			case "Tanzanian":
-				r += `Tza`;
-				break;
-			case "Thai":
-				r += `Tha`;
-				break;
-			case "Tibetan":
-				r += `Tib`;
-				break;
-			case "Togolese":
-				r += `Tog`;
-				break;
-			case "Tongan":
-				r += `Ton`;
-				break;
-			case "Trinidadian":
-				r += `TT`;
-				break;
-			case "Tunisian":
-				r += `Tun`;
-				break;
-			case "Turkish":
-				r += `Tur`;
-				break;
-			case "Turkmen":
-				r += `Tkm`;
-				break;
-			case "Tuvaluan":
-				r += `Tuv`;
-				break;
-			case "Ugandan":
-				r += `Uga`;
-				break;
-			case "Ukrainian":
-				r += `Ukr`;
-				break;
-			case "Uruguayan":
-				r += `Uru`;
-				break;
-			case "Uzbek":
-				r += `Uzb`;
-				break;
-			case "Vatican":
-				r += `VC`;
-				break;
-			case "Venezuelan":
-				r += `Ven`;
-				break;
-			case "Vietnamese":
-				r += `Vnm`;
-				break;
-			case "Vincentian":
-				r += `SVG`;
-				break;
-			case "Yemeni":
-				r += `Yem`;
-				break;
-			case "Zairian":
-				r += `DRC`;
-				break;
-			case "Zambian":
-				r += `Zam`;
-				break;
-			case "Zimbabwean":
-				if (child.race === "white") {
-					r += `Rho`;
-				} else {
-					r += `Zwe`;
-				}
-				break;
-			case "Ancient Chinese Revivalist":
-				r += `Chi Rev`;
-				break;
-			case "Ancient Egyptian Revivalist":
-				r += `Egy Rev`;
-				break;
-			case "Arabian Revivalist":
-				r += `Ara Rev`;
-				break;
-			case "Aztec Revivalist":
-				r += `Azt Rev`;
-				break;
-			case "Edo Revivalist":
-				r += `Edo Rev`;
-				break;
-			case "Roman Revivalist":
-				r += `Rom Rev`;
-				break;
-			case "":
-			case "none":
-			case "child":
-			case "Stateless":
-				r += `None`;
-				break;
-			default:
-				r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`;
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longNationality(child) {
-		r += `<span class="tan">`;
-		switch (child.nationality) {
-			case "a Cook Islander":
-				r += `Cook Islander. `;
-				break;
-			case "a Liechtensteiner":
-				r += `Liechtensteiner. `;
-				break;
-			case "a New Zealander":
-				r += `New Zealander. `;
-				break;
-			case "a Solomon Islander":
-				r += `Solomon Islander. `;
-				break;
-			case "Zimbabwean":
-				if (child.race === "white") {
-					r += `Rhodesian. `;
-				} else {
-					r += `${child.nationality}. `;
-				}
-				break;
-			case "child":
-			case "none":
-			case "":
-			case "Stateless":
-				r += `Stateless. `;
-				break;
-			default:
-				r += `${child.nationality}. `;
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSkin(child) {
-		r += `<span class="pink">`;
-		switch (child.skin) {
-			case "pure white":
-				r += `P. Whi`;
-				break;
-			case "extremely fair":
-				r += `E. Fai`;
-				break;
-			case "very fair":
-				r += `V. Fai`;
-				break;
-			case "extremely pale":
-				r += `E. Pal`;
-				break;
-			case "very pale":
-				r += `V. Pal`;
-				break;
-			case "light brown":
-				r += `L. Br`;
-				break;
-			case "dark brown":
-				r += `D. Br`;
-				break;
-			case "light olive":
-				r += `L. Oli`;
-				break;
-			case "dark olive":
-				r += `D. Oli`;
-				break;
-			case "light beige":
-				r += `L. Bei`;
-				break;
-			case "dark beige":
-				r += `D. Bei`;
-				break;
-			case "tan":
-				r += `Tan`;
-				break;
-			case "bronze":
-				r += `Bron`;
-				break;
-			case "ebony":
-				r += `Ebon`;
-				break;
-			case "pure black":
-				r += `P. Bla`;
-				break;
-			case "dark":
-			case "fair":
-			case "pale":
-				r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`;
-				break;
-			default:
-				r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`;
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortGenitals(child) {
-		if (child.dick > 0) {
-			r += `<span class="pink">`;
-			if (child.balls === 0) {
-				r += `Geld`;
-			}
-			if ((child.dick > 8) && (child.balls > 8)) {
-				r += `Junk+++`;
-			} else if ((child.dick > 5) && (child.balls > 5)) {
-				r += `Junk++`;
-			} else if ((child.dick > 4) && (child.balls > 4)) {
-				r += `Junk+`;
-			} else if ((child.dick > 3) && (child.balls > 3)) {
-				r += `Junk`;
-			} else if (child.dick > 8) {
-				r += `Dick+++`;
-			} else if (child.dick > 5) {
-				r += `Dick++`;
-			} else if (child.dick > 4) {
-				r += `Dick+`;
-			} else if (child.dick > 3) {
-				r += `Dick`;
-			} else if (child.balls > 10) {
-				r += `Balls+++`;
-			} else if (child.balls > 5) {
-				r += `Balls++`;
-			} else if (child.balls > 4) {
-				r += `Balls+`;
-			} else if (child.balls > 3) {
-				r += `Balls`;
-			}
-			r += `</span> `;
-		}
-		if (child.vagina === 0) {
-			r += `<span class="lime">VV</span> `;
-		} else if (child.pregKnown === 1 && canWalk(child) && child.clothes === "no clothing" && child.shoes === "none") {
-			r += `<span class="pink">NBP</span> `;
-		}
-		if (child.anus === 0) {
-			r += ` <span class="lime">AV</span> `;
-		}
-		r += `<span class="pink">`;
-		if ((child.vagina > 3) && (child.anus > 3)) {
-			r += ` V++A++`;
-		} else if ((child.vagina > 2) && (child.anus > 2)) {
-			r += ` V+A+`;
-		} else if (child.vagina > 3) {
-			r += ` V++`;
-		} else if (child.vagina > 2) {
-			r += ` V+`;
-		} else if (child.anus > 3) {
-			r += ` A++`;
-		} else if (child.anus > 2) {
-			r += ` A+`;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longGenitals(child) {
-		if (child.dick > 0) {
-			r += `<span class="pink">`;
-			if (child.balls === 0) {
-				r += `Gelded. `;
-			}
-			if ((child.dick > 8) && (child.balls > 8)) {
-				r += `Hyper dick & balls. `;
-			} else if ((child.dick > 5) && (child.balls > 5)) {
-				r += `Monster dick & balls. `;
-			} else if ((child.dick > 4) && (child.balls > 4)) {
-				r += `Huge dick & balls. `;
-			} else if ((child.dick > 3) && (child.balls > 3)) {
-				r += `Big dick & balls. `;
-			} else if (child.dick > 8) {
-				r += `Hyper dong. `;
-			} else if (child.dick > 5) {
-				r += `Monster dong. `;
-			} else if (child.dick > 4) {
-				r += `Huge dick. `;
-			} else if (child.dick > 3) {
-				r += `Big dick. `;
-			} else if (child.balls > 8) {
-				r += `Hyper balls. `;
-			} else if (child.balls > 5) {
-				r += `Monstrous balls. `;
-			} else if (child.balls > 4) {
-				r += `Huge balls. `;
-			} else if (child.balls > 3) {
-				r += `Big balls. `;
-			}
-			r += `</span> `;
-		}
-		if (child.vagina === 0) {
-			r += `<span class="lime">Virgin.</span> `;
-		} else if (child.pregKnown === 1 && canWalk(child) && child.clothes === "no clothing" && child.shoes === "none") {
-			r += `<span class="pink">Naked, barefoot, and pregnant.</span> `;
-		}
-		if (child.anus === 0) {
-			r += `<span class="lime">Anal virgin.</span> `;
-		}
-		r += `<span class="pink">`;
-		if ((child.vagina > 3) && (child.anus > 3)) {
-			r += `Blown out holes. `;
-		} else if ((child.vagina > 2) && (child.anus > 2)) {
-			r += `High mileage. `;
-		} else if (child.vagina > 3) {
-			r += `Cavernous pussy. `;
-		} else if (child.vagina > 2) {
-			r += `Loose pussy. `;
-		} else if (child.anus > 3) {
-			r += `Permagaped anus. `;
-		} else if (child.anus > 2) {
-			r += `Gaping anus. `;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortAge(child) {
-		r += `<span class="pink">`;
-		if (V.showAgeDetail === 1) {
-			r += child.actualAge;
-		}
-		if (child.actualAge !== child.physicalAge) {
-			r += ` w ${child.physicalAge}y-bdy`;
-		}
-		if (child.visualAge !== child.physicalAge) {
-			r += ` Lks${child.visualAge}`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortFace(child) {
-		if (child.face < -95) {
-			r += `<span class="red">Face---${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face < -40) {
-			r += `<span class="red">Face--${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face < -10) {
-			r += `<span class="red">Face-${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face <= 10) {
-			r += `Face${V.summaryStats ? `[${child.face}]` : ''}`;
-		} else if (child.face <= 40) {
-			r += `<span class="pink">Face+${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else if (child.face <= 95) {
-			r += `<span class="pink">Face++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		} else {
-			r += `<span class="pink">Face+++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortEyes(child) {
-		if (!canSee(slave)) {
-			r += `<span class="red">Blind</span> `;
-		} else if (!canSeePerfectly(slave)) {
-			r += `<span class="yellow">Sight-</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortEars(child) {
-		if (child.hears === -2) {
-			r += `<span class="red">Deaf</span> `;
-		} else if ((child.hears === -1) && (child.earwear !== "hearing aids")) {
-			r += `<span class="yellow">Hearing-</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortLips(child) {
-		if (child.lips > 95) {
-			r += `Facepussy`;
-		} else if (child.lips > 70) {
-			r += `Lips+++${V.summaryStats ? `[${child.lips}]` : ''}`;
-		} else if (child.lips > 40) {
-			r += `Lips++${V.summaryStats ? `[${child.lips}]` : ''}`;
-		} else if (child.lips > 20) {
-			r += `Lips+${V.summaryStats ? `[${child.lips}]` : ''}`;
-		} else if (child.lips > 10) {
-			r += `Lips${V.summaryStats ? `[${child.lips}]` : ''}`;
-		} else {
-			r += `<span class="red">Lips-${V.summaryStats ? `[${child.lips}]` : ''}</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortTeeth(child) {
-		if (child.teeth === "crooked") {
-			r += `<span class="yellow">Cr Teeth</span> `;
-		} else if (child.teeth === "gapped") {
-			r += `<span class="yellow">Gap</span> `;
-		} else if (child.teeth === "cosmetic braces") {
-			r += `Cos Braces`;
-		} else if (child.teeth === "straightening braces") {
-			r += `Braces`;
-		} else if (child.teeth === "removable") {
-			r += `Rem Teeth`;
-		} else if (child.teeth === "pointy") {
-			r += `Fangs`;
-		} else if (child.teeth === "baby") {
-			r += `Baby`;
-		} else if (child.teeth === "mixed") {
-			r += `Mixed`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortMuscles(child) {
-		if (child.muscles > 95) {
-			r += `Musc++${V.summaryStats ? `[${child.muscles}]`: ''}`;
-		} else if (child.muscles > 50) {
-			r += `Musc+${V.summaryStats ? `[${child.muscles}]`: ''}`;
-		} else if (child.muscles > 5) {
-			r += `Fit${V.summaryStats ? `[${child.muscles}]`: ''}`;
-		} else if (child.muscles > -6) {
-			r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`;
-		} else if (child.muscles > -31) {
-			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
-				r += `<span class="red">Weak</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
-			} else {
-				r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}`;
-			}
-		} else if (child.muscles > -96) {
-			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
-				r += `<span class="red">Weak+</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
-			} else {
-				r += `Soft+${V.summaryStats ? `[${child.muscles}]`: ''}`;
-			}
-		} else {
-			r += `<span class="red">Weak++</span>${V.summaryStats ? `[${child.muscles}]`: ''}`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortVoice(child) {
-		if (child.voice === 0) {
-			r += `<span class="red">Mute</span> `;
-		} else {
-			if (child.accent === 3) {
-				r += `<span class="red">Acc--</span> `;
-			} else if (child.accent === 2) {
-				r += `Acc-`;
-			} else if (child.accent === 4) {
-				r += `Acc--`;
-			} else if (child.accent === 1) {
-				r += `<span class="pink">Acc</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortTitsAss(child) {
-		r += `<span class="pink">`;
-		if ((child.boobs >= 12000) && (child.butt > 9)) {
-			r += `T&A+++`;
-		} else if ((child.boobs > 4000) && (child.butt > 8)) {
-			r += `T&A++`;
-		} else if ((child.boobs > 2000) && (child.butt > 6)) {
-			r += `T&A+`;
-		} else if ((child.boobs > 800) && (child.butt > 4)) {
-			r += `T&A`;
-		} else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) {
-			r += `Girlish`;
-		} else if (child.boobs >= 12000) {
-			r += `Boobs+++`;
-		} else if (child.boobs > 4000) {
-			r += `Boobs++`;
-		} else if (child.boobs > 2000) {
-			r += `Boobs+`;
-		} else if (child.boobs > 800) {
-			r += `Boobs`;
-		} else if (child.butt > 9) {
-			r += `Ass+++`;
-		} else if (child.butt > 8) {
-			r += `Ass++`;
-		} else if (child.butt > 6) {
-			r += `Ass+`;
-		} else if (child.butt > 4) {
-			r += `Ass`;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortHips(child) {
-		r += `<span class="red">`;
-		if (child.hips < -1) {
-			if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
-				r += `Disp+`;
-			}
-		} else if (child.hips < 0) {
-			if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
-				r += `Disp+`;
-			}
-		} else if (child.hips > 2) {
-			if (child.butt <= 8) {
-				r += `Disp-`;
-			}
-		} else if (child.hips > 1) {
-			if (child.butt <= 3 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
-				r += `Disp-`;
-			}
-		} else if (child.hips > 0) {
-			if (child.butt > 8) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
-					r += `Disp+`;
-				}
-			} else if (child.butt <= 2 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
-				r += `Disp-`;
-			}
-		} else {
-			if (child.butt > 6) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset")) {
-					r += `Disp+`;
-				}
-			} else if (child.butt <= 1 && (V.arcologies[0].FSSlimnessEnthusiast === "unset" || (child.boobs >= 500))) {
-				r += `Disp-`;
-			}
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortWaist(child) {
-		if (child.waist > 95) {
-			r += `<span class="red">Wst---${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
-		} else if (child.waist > 40) {
-			r += `<span class="red">Wst--${V.summaryStats ? `[${child.waist}]`: ''}</span> `;
-		} else if (child.waist > 10) {
-			r += `<span class="red">Wst-${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
-		} else if (child.waist >= -10) {
-			r += `Wst${V.summaryStats ? `[${child.waist}]`: ''}`;
-		} else if (child.waist >= -40) {
-			r += `<span class="pink">Wst+${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
-		} else if (child.waist >= -95) {
-			r += `<span class="pink">Wst++${V.summaryStats ? `[${child.waist}]` : ''}</span> `;
-		} else {
-			r += `<span class="pink">Wst+++${V.summaryStats ? `[${child.waist}]`: ''}</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortImplants(child) {
-		r += `<span class="pink">`;
-		if ((child.boobsImplant === 0) && (child.buttImplant === 0) && (child.waist >= -95) && (child.lipsImplant === 0) && (child.faceImplant <= 5) && (child.bellyImplant === -1)) {
-			r += `Natr`;
-		} else {
-			r += `Impl`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortLactation(child) {
-		if (child.lactation === 1) {
-			r += `Lact`;
-		} else if (child.lactation === 2) {
-			r += `Lact++`;
-		}
-	}
-
-	// /**	TODO:
-	//  * @param {App.Entity.SlaveState} child
-	//  */
-	// function shortMods(child) {
-	// 	V.modScore = SlaveStatsChecker.modScore(child);
-	// 	if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
-	// 		return;
-	// 	} else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) {
-	// 		r += `Mods++`;
-	// 	} else if (V.modScore > 7) {
-	// 		r += `Mods+`;
-	// 	} else {
-	// 		r += `Mods`;
-	// 	}
-	// 	if (!jQuery.isEmptyObject(child.brand)) {
-	// 		r += `Br`;
-	// 	}
-	// }
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longAge(child) {
-		r += `<span class="pink">`;
-		if (V.showAgeDetail === 1) {
-			r += `Age ` + `${num(child.actualAge)}` + `. `;
-		} else if (child.actualAge >= 40) {
-			r += `Forties. `;
-		} else if (child.actualAge >= 35) {
-			r += `Late thirties. `;
-		} else if (child.actualAge >= 30) {
-			r += `Early thirties. `;
-		} else if (child.actualAge >= 25) {
-			r += `Late twenties. `;
-		} else if (child.actualAge >= 20) {
-			r += `Early twenties. `;
-		} else if (child.actualAge >= 19) {
-			r += `Nineteen. `;
-		} else if (child.actualAge >= 18) {
-			r += `Eighteen. `;
-		} else {
-			r += `Underage. `;
-		}
-		/*
-		 ** No NCS, then do the standard, However because of the wrinkes of Incubators, as long as visual age is greater
-		 ** than or equal to physical age, we do the old physical body/Looks for fresh out of the can NCS slaves.
-		 */
-		if (((child.geneMods.NCS === 0) || (child.visualAge >= child.physicalAge))) {
-			if (child.actualAge !== child.physicalAge) {
-				r += `${child.physicalAge}` + ` year old body. `;
-			}
-			if (child.visualAge !== child.physicalAge) {
-				r += `Looks ` + `${child.visualAge}` + `. `;
-			}
-		} else {
-			/*
-			 ** Now the rub. The use of physical Age for the year old body above, basically conflicts with the changes
-			 ** that NCS introduces, so here to *distinguish* the changes, we use visual age with the 'year old body'
-			 ** and appears, for exampChild release from incubator at age 10, Her summary would show, 'Age 0. 10
-			 ** year old body.' But if she's given NCS a few weeks after release, while she's still before her first
-			 ** birthday, it'll appear the same. But once her birthday fires, if we ran with the above code it would
-			 ** say: 'Age 1. 11 year old body.' -- this conflicts with the way NCS works though, because she hasn't
-			 ** visually aged, so our change here makes it say 'Age 1. Appears to have a 10 year old body.'
-			 */
-			r += `Appears to have a ` + `${child.visualAge}` + ` year old body. `;
-		}
-		if (child.geneMods.NCS === 1) {
-			r += `(<span class="orange">NCS</span>) `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longFace(child) {
-		if (child.face < -95) {
-			r += `<span class="red">Very ugly${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		} else if (child.face < -40) {
-			r += `<span class="red">Ugly${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		} else if (child.face < -10) {
-			r += `<span class="red">Unattractive${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		} else if (child.face <= 10) {
-			r += `Average${V.summaryStats ? `[${child.face}]`: ''}`;
-		} else if (child.face <= 40) {
-			r += `<span class="pink">Attractive${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		} else if (child.face <= 95) {
-			r += `<span class="pink">Beautiful${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		} else {
-			r += `<span class="pink">Very beautiful${V.summaryStats ? `[${child.face}]`: ''}</span> `;
-		}
-		r += ` ${child.faceShape} face. `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longEyes(child) {
-		if (!canSee(slave)) {
-			r += `<span class="red">Blind.</span> `;
-		} else if (!canSeePerfectly(slave)) {
-			r += `<span class="yellow">Nearsighted.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longEars(child) {
-		if (child.hears <= -2) {
-			r += `<span class="red">Deaf.</span> `;
-		} else if ((child.hears === -1) && (child.earwear !== "hearing aids")) {
-			r += `<span class="yellow">Hard of hearing.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longLips(child) {
-		if (child.lips > 95) {
-			r += `Facepussy${V.summaryStats ? `[${child.lips}]`: ''}. `;
-		} else if (child.lips > 70) {
-			r += `Huge lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
-		} else if (child.lips > 40) {
-			r += `Big lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
-		} else if (child.lips > 20) {
-			r += `Pretty lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
-		} else if (child.lips > 10) {
-			r += `Normal lips${V.summaryStats ? `[${child.lips}]`: ''}. `;
-		} else {
-			r += `<span class="red">Thin lips${V.summaryStats ? `[${child.lips}]`: ''}.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longTeeth(child) {
-		if (child.teeth === "crooked") {
-			r += `<span class="yellow">Crooked teeth.</span> `;
-		} else if (child.teeth === "gapped") {
-			r += `<span class="yellow">Tooth gap.</span> `;
-		} else if (child.teeth === "cosmetic braces") {
-			r += `Cosmetic braces. `;
-		} else if (child.teeth === "straightening braces") {
-			r += `Braces. `;
-		} else if (child.teeth === "removable") {
-			r += `Removable teeth. `;
-		} else if (child.teeth === "pointy") {
-			r += `Sharp fangs. `;
-		} else if (child.teeth === "baby") {
-			r += `Baby teeth. `;
-		} else if (child.teeth === "mixed") {
-			r += `Mixed teeth. `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longMuscles(child) {
-		if (child.muscles > 95) {
-			r += `Hugely muscular${V.summaryStats ? `[${child.muscles}]` : ''}. `;
-		} else if (child.muscles > 50) {
-			r += `Muscular${V.summaryStats ? `[${child.muscles}]`: ''}. `;
-		} else if (child.muscles > 5) {
-			r += `Fit${V.summaryStats ? `[${child.muscles}]`: ''}. `;
-		} else if (child.muscles > -6) {
-			r += `Soft${V.summaryStats ? `[${child.muscles}]`: ''}. `;
-		} else if (child.muscles > -31) {
-			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
-				r += `<span class="red">Weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
-			} else {
-				r += `Weak${V.summaryStats ? `[${child.muscles}]`: ''}. `;
-			}
-		} else if (child.muscles > -96) {
-			if (V.arcologies[0].FSPhysicalIdealist === "unset") {
-				r += `<span class="red">Very weak${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
-			} else {
-				r += `Very weak${V.summaryStats ? `[${child.muscles}]`: ''}. `;
-			}
-		} else {
-			r += `<span class="red">Frail${V.summaryStats ? `[${child.muscles}]`: ''}.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longVoice(child) {
-		if (child.voice === 0) {
-			r += `<span class="red">Mute.</span> `;
-		} else {
-			if (child.accent === 3) {
-				r += `<span class="red">Bad accent.</span> `;
-			} else if (child.accent === 4) {
-				r += `<span class="red">No language skills.</span> `;
-			} else if (child.accent === 2) {
-				r += `Accent. `;
-			} else if (child.accent === 1) {
-				r += `<span class="pink">Cute accent.</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longTitsAss(child) {
-		r += `<span class="pink">`;
-		if ((child.boobs >= 12000) && (child.butt > 9)) {
-			r += `Hyper T&A. `;
-		} else if ((child.boobs > 4000) && (child.butt > 8)) {
-			r += `Enormous T&A. `;
-		} else if ((child.boobs > 2000) && (child.butt > 6)) {
-			r += `Huge T&A. `;
-		} else if ((child.boobs > 800) && (child.butt > 4)) {
-			r += `Big T&A. `;
-		} else if ((child.boobs < 500) && (child.butt < 3) && (child.weight <= 10) && (child.muscles <= 30)) {
-			r += `Girlish figure. `;
-		} else if (child.boobs >= 12000) {
-			r += `Immobilizing tits. `;
-		} else if (child.boobs > 4000) {
-			r += `Monstrous tits. `;
-		} else if (child.boobs > 2000) {
-			r += `Huge tits. `;
-		} else if (child.boobs > 800) {
-			r += `Big tits. `;
-		} else if (child.butt > 9) {
-			r += `Hyper ass. `;
-		} else if (child.butt > 8) {
-			r += `Titanic ass. `;
-		} else if (child.butt > 6) {
-			r += `Huge ass. `;
-		} else if (child.butt > 4) {
-			r += `Big ass. `;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longHips(child) {
-		r += `<span class="red">`;
-		if (child.hips < -1) {
-			if (child.butt > 2 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
-				r += `Disproportionately big butt. `;
-			}
-		} else if (child.hips < 0) {
-			if (child.butt > 4 && (V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
-				r += `Disproportionately big butt. `;
-			}
-		} else if (child.hips > 2) {
-			if (child.butt <= 8) {
-				r += `Disproportionately small butt. `;
-			}
-		} else if (child.hips > 1) {
-			if (child.butt <= 3 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
-				r += `Disproportionately small butt. `;
-			}
-		} else if (child.hips > 0) {
-			if (child.butt > 8) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
-					r += `Disproportionately big butt. `;
-				}
-			} else if (child.butt <= 2 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
-				r += `Disproportionately small butt. `;
-			}
-		} else {
-			if (child.butt > 6) {
-				if ((V.arcologies[0].FSTransformationFetishist < 20 || V.arcologies[0].FSTransformationFetishist === "unset") && (V.arcologies[0].FSHedonisticDecadence < 20 || V.arcologies[0].FSHedonisticDecadence === "unset") && (V.arcologies[0].FSAssetExpansionist < 20 || V.arcologies[0].FSAssetExpansionist === "unset")) {
-					r += `Disproportionately big butt. `;
-				}
-			} else if (child.butt <= 1 && ((V.arcologies[0].FSSlimnessEnthusiast === "unset") || (child.boobs >= 500))) {
-				r += `Disproportionately small butt. `;
-			}
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longWaist(child) {
-		if (child.waist > 95) {
-			r += `<span class="red">Masculine waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		} else if (child.waist > 40) {
-			r += `<span class="red">Ugly waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		} else if (child.waist > 10) {
-			r += `<span class="red">Unattractive waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		} else if (child.waist >= -10) {
-			r += `Average waist${V.summaryStats ? `[${child.waist}]`: ''}. `;
-		} else if (child.waist >= -40) {
-			r += `<span class="pink">Feminine waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		} else if (child.waist >= -95) {
-			r += `<span class="pink">Hourglass waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		} else {
-			r += `<span class="pink">Absurdly narrow waist${V.summaryStats ? `[${child.waist}]`: ''}.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longImplants(child) {
-		r += `<span class="pink">`;
-		if ((child.boobsImplant !== 0) || (child.buttImplant !== 0) || (child.lipsImplant !== 0) || (child.bellyImplant !== -1)) {
-			r += `Implants. `;
-		} else if ((child.faceImplant >= 30) || (child.waist < -95)) {
-			r += `Surgery enhanced. `;
-		} else {
-			r += `All natural. `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longLactation(child) {
-		if (child.lactation === 1) {
-			r += `Lactating naturally. `;
-		} else if (child.lactation === 2) {
-			r += `Heavy lactation. `;
-		}
-	}
-
-	// /**	TODO:
-	//  * @param {App.Entity.SlaveState} child
-	//  */
-	// function longMods(child) {
-	// 	V.modScorChildStatsChecker.modScore(child);
-	// 	if (child.corsetPiercing === 0 && V.piercingScore < 3 && V.tatScore < 2) {
-	// 		return;
-	// 	} else if (V.modScore > 15 || (V.piercingScore > 8 && V.tatScore > 5)) {
-	// 		r += `Extensive body mods. `;
-	// 	} else if (V.modScore > 7) {
-	// 		r += `Noticeable body mods. `;
-	// 	} else {
-	// 		r += `Light body mods. `;
-	// 	}
-	// }
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortIntelligence(child) {
-		let intelligence = child.intelligence;
-		if (child.hasOwnProperty("intelligenceImplant")) {
-			intelligence += child.intelligenceImplant;
-		}
-		if (child.fetish === "mindbroken") {
-			return;
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
-			if (intelligence >= 130) {
-				r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I(e+)${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else {
-				r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			}
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I(e)${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else {
-				r += `<span class="orangered">I---(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			}
-		} else {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">I++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">I+${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -15) {
-				r += `I${V.summaryStats ? `[${intelligence}]` : ''}`;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">I-${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">I--${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			} else {
-				r += `<span class="orangered">I---${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSexSkills(child) {
-		let SSkills = child.skill.anal + child.skill.oral;
-		r += `<span class="aquamarine">`;
-		if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) {
-			r += `MSS`;
-		} else {
-			SSkills += child.skill.vaginal;
-			SSkills = Math.trunc(SSkills);
-			if (SSkills > 180) {
-				r += `S++`;
-			} else if ((SSkills > 120) && (child.vagina < 0)) {
-				r += `Sh++`;
-			} else if (SSkills > 90) {
-				r += `S+`;
-			} else if (SSkills > 30) {
-				r += `S`;
-			} else {
-				r += `S-`;
-			}
-			if (V.summaryStats) {
-				r += `[${SSkills}] `;
-			}
-			r += " ";
-			if (child.skill.whoring >= 100) {
-				r += `W+++`;
-			} else if (child.skill.whoring > 60) {
-				r += `W++`;
-			} else if (child.skill.whoring > 30) {
-				r += `W+`;
-			} else if (child.skill.whoring > 10) {
-				r += `W`;
-			}
-			if (child.skill.whoring > 10) {
-				if (V.summaryStats) {
-					r += `[${child.skill.whoring}] `;
-				}
-			}
-			r += " ";
-			if (child.skill.entertainment >= 100) {
-				r += `E+++`;
-			} else if (child.skill.entertainment > 60) {
-				r += `E++`;
-			} else if (child.skill.entertainment > 30) {
-				r += `E+`;
-			} else if (child.skill.entertainment > 10) {
-				r += `E`;
-			}
-			if (child.skill.entertainment > 10) {
-				if (V.summaryStats) {
-					r += `[${child.skill.entertainment}] `;
-				}
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortPrestige(child) {
-		if (child.prestige > 0) {
-			r += `<span class="green">`;
-			if (child.prestige > 2) {
-				r += `Prest++`;
-			} else if (child.prestige === 2) {
-				r += `Prest+`;
-			} else if (child.prestige === 1) {
-				r += `Prest`;
-			}
-			r += `</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortPornPrestige(child) {
-		if (child.pornPrestige > 0) {
-			r += `<span class="green">`;
-			if (child.pornPrestige > 2) {
-				r += `PPrest++`;
-			} else if (child.pornPrestige === 2) {
-				r += `PPrest+`;
-			} else if (child.pornPrestige === 1) {
-				r += `PPrest`;
-			}
-			r += `</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longIntelligence(child) {
-		let intelligence = child.intelligence;
-		if (child.hasOwnProperty("intelligenceImplant")) {
-			intelligence += child.intelligenceImplant;
-		}
-		if (child.fetish === "mindbroken") {
-			return;
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
-			if (intelligence >= 130) {
-				r += `<span class="deepskyblue">Genius${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 95) {
-				r += `<span class="deepskyblue">Brilliant, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">Very smart, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">Smart, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -15) {
-				r += `Average intelligence, well educated${V.summaryStats ? `[${intelligence}]` : ''}. `;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">Slow, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">Very slow, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else {
-				r += `<span class="orangered">Moronic, well educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			}
-		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">Brilliant, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">Very smart, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">Smart, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -15) {
-				r += `Average intelligence, educated${V.summaryStats ? `[${intelligence}]` : ''}. `;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">Slow, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">Very slow, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else {
-				r += `<span class="orangered">Moronic, educated${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			}
-		} else {
-			if (intelligence > 95) {
-				r += `<span class="deepskyblue">Brilliant${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 50) {
-				r += `<span class="deepskyblue">Very smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence > 15) {
-				r += `<span class="deepskyblue">Smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -15) {
-				r += `Average intelligence${V.summaryStats ? `[${intelligence}]` : ''}. `;
-			} else if (intelligence >= -50) {
-				r += `<span class="orangered">Slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else if (intelligence >= -95) {
-				r += `<span class="orangered">Very slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			} else {
-				r += `<span class="orangered">Moronic${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longSexSkills(child) {
-		let SSkills = (child.skill.anal + child.skill.oral);
-		r += `<span class="aquamarine">`;
-		if (((SSkills + child.skill.whoring + child.skill.entertainment) >= 400) && ((child.vagina < 0) || (child.skill.vaginal >= 100))) {
-			r += `Masterful Whore. `;
-		} else {
-			SSkills += child.skill.vaginal;
-			if (SSkills > 180) {
-				r += `Sex master${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
-			} else if ((SSkills > 120) && (child.vagina < 0)) {
-				r += `Masterful shemale${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
-			} else if (SSkills > 90) {
-				r += `Sexual expert${V.summaryStats ? `[${Math.trunc(SSkills)}]`: ''}. `;
-			} else if (SSkills > 30) {
-				r += `Sexually skilled${V.summaryStats ? `[${Math.trunc(SSkills)}]` : ''}. `;
-			} else {
-				r += `Sexually unskilled${V.summaryStats ? `[${Math.trunc(SSkills)}]` : ''}. `;
-			}
-			r += " ";
-			if (child.skill.whoring >= 100) {
-				r += `Masterful whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
-			} else if (child.skill.whoring >= 60) {
-				r += `Expert whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
-			} else if (child.skill.whoring >= 30) {
-				r += `Skilled whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
-			} else if (child.skill.whoring >= 10) {
-				r += `Basic whore${V.summaryStats ? `[${child.skill.whoring}]`: ''}. `;
-			}
-			r += " ";
-			if (child.skill.entertainment >= 100) {
-				r += `Masterful entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
-			} else if (child.skill.entertainment >= 60) {
-				r += `Expert entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
-			} else if (child.skill.entertainment >= 30) {
-				r += `Skilled entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
-			} else if (child.skill.entertainment >= 10) {
-				r += `Basic entertainer${V.summaryStats ? `[${child.skill.entertainment}]`: ''}. `;
-			}
-			r += " ";
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longPrestige(child) {
-		if (child.prestige > 0) {
-			r += `<span class="green">`;
-			if (child.prestige > 2) {
-				r += `Extremely prestigious. `;
-			} else if (child.prestige === 2) {
-				r += `Very prestigious. `;
-			} else if (child.prestige === 1) {
-				r += `Prestigious. `;
-			}
-			r += `</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longPornPrestige(child) {
-		if (child.pornPrestige > 0) {
-			r += `<span class="green">`;
-			if (child.pornPrestige > 2) {
-				r += `Porn star. `;
-			} else if (child.pornPrestige === 2) {
-				r += `Porn slut. `;
-			} else if (child.pornPrestige === 1) {
-				r += `Porn amateur. `;
-			}
-			r += `</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortFetish(child) {
-		r += `<span class="lightcoral">`;
-		switch (child.fetish) {
-			case "submissive":
-				if (child.fetishStrength > 95) {
-					r += `Sub++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Sub+`;
-				} else {
-					r += `Sub`;
-				}
-				break;
-			case "cumslut":
-				if (child.fetishStrength > 95) {
-					r += `Oral++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Oral+`;
-				} else {
-					r += `Oral`;
-				}
-				break;
-			case "humiliation":
-				if (child.fetishStrength > 95) {
-					r += `Humil++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Humil+`;
-				} else {
-					r += `Humil`;
-				}
-				break;
-			case "buttslut":
-				if (child.fetishStrength > 95) {
-					r += `Anal++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Anal+`;
-				} else {
-					r += `Anal`;
-				}
-				break;
-			case "boobs":
-				if (child.fetishStrength > 95) {
-					r += `Boobs++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Boobs+`;
-				} else {
-					r += `Boobs`;
-				}
-				break;
-			case "sadist":
-				if (child.fetishStrength > 95) {
-					r += `Sadist++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Sadist+`;
-				} else {
-					r += `Sadist`;
-				}
-				break;
-			case "masochist":
-				if (child.fetishStrength > 95) {
-					r += `Pain++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Pain+`;
-				} else {
-					r += `Pain`;
-				}
-				break;
-			case "dom":
-				if (child.fetishStrength > 95) {
-					r += `Dom++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Dom+`;
-				} else {
-					r += `Dom`;
-				}
-				break;
-			case "pregnancy":
-				if (child.fetishStrength > 95) {
-					r += `Preg++`;
-				} else if (child.fetishStrength > 60) {
-					r += `Preg+`;
-				} else {
-					r += `Preg`;
-				}
-				break;
-			default:
-				r += `Vanilla`;
-				break;
-		}
-		if (V.summaryStats) {
-			r += `[${child.fetishStrength}]`;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortAttraction(child) {
-		if (child.attrXY <= 5) {
-			r += `<span class="red">XY---${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		} else if (child.attrXY <= 15) {
-			r += `<span class="red">XY--${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		} else if (child.attrXY <= 35) {
-			r += `<span class="red">XY-${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		} else if (child.attrXY <= 65) {
-			r += `XY${V.summaryStats ? `[${child.attrXY}]`: ''}`;
-		} else if (child.attrXY <= 85) {
-			r += `<span class="green">XY+${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		} else if (child.attrXY <= 95) {
-			r += `<span class="green">XY++${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		} else if (child.attrXX > 95) {
-			if (child.energy <= 95) {
-				r += `<span class="green">Omni!</span> `;
-			} else {
-				r += `<span class="green">Omni+Nympho!!</span> `;
-			}
-		} else {
-			r += `<span class="green">XY+++${V.summaryStats ? `[${child.attrXY}]`: ''}</span> `;
-		}
-		if (child.attrXX <= 5) {
-			r += `<span class="red">XX---${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		} else if (child.attrXX <= 15) {
-			r += `<span class="red">XX--${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		} else if (child.attrXX <= 35) {
-			r += `<span class="red">XX-${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		} else if (child.attrXX <= 65) {
-			r += `XX${V.summaryStats ? `[${child.attrXX}]`: ''}`;
-		} else if (child.attrXX <= 85) {
-			r += `<span class="green">XX+${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		} else if (child.attrXX <= 95) {
-			r += `<span class="green">XX++${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		} else if (child.attrXY <= 95) {
-			r += `<span class="green">XX+++${V.summaryStats ? `[${child.attrXX}]`: ''}</span> `;
-		}
-		if (child.energy > 95) {
-			if ((child.attrXY <= 95) || (child.attrXX <= 95)) {
-				r += `<span class="green">Nympho!</span> `;
-			}
-		} else if (child.energy > 80) {
-			r += `<span class="green">SD++${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
-		} else if (child.energy > 60) {
-			r += `<span class="green">SD+${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
-		} else if (child.energy > 40) {
-			r += `<span class="yellow">SD${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
-		} else if (child.energy > 20) {
-			r += `<span class="red">SD-${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
-		} else {
-			r += `<span class="red">SD--${V.summaryStats ? `[${child.energy}]`: ''}</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSmartFetish(child) {
-		if (child.fetishKnown === 1) {
-			if (child.clitSetting === "off") {
-				r += `SP-`;
-			} else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) {
-				r += `SP:sub`;
-			} else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) {
-				r += `SP:oral`;
-			} else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) {
-				r += `SP:humil`;
-			} else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) {
-				r += `SP:anal`;
-			} else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) {
-				r += `SP:boobs`;
-			} else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) {
-				r += `SP:sade`;
-			} else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) {
-				r += `SP:pain`;
-			} else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) {
-				r += `SP:dom`;
-			} else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) {
-				r += `SP:preg`;
-			} else if (((child.fetish !== "none") && (child.clitSetting === "vanilla"))) {
-				r += `SP:vanilla`;
-			} else if ((child.energy <= 95) && (child.clitSetting === "all")) {
-				r += `SP:all`;
-			} else if ((child.energy > 5) && (child.clitSetting === "none")) {
-				r += `SP:none`;
-			} else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) {
-				r += `SP:monitoring`;
-			}
-		} else {
-			switch (child.clitSetting) {
-				case "off":
-					r += `SP-`;
-					break;
-				case "submissive":
-					r += `SP:sub`;
-					break;
-				case "lesbian":
-					r += `SP:les`;
-					break;
-				case "oral":
-					r += `SP:oral`;
-					break;
-				case "humiliation":
-					r += `SP:humil`;
-					break;
-				case "anal":
-					r += `SP:anal`;
-					break;
-				case "boobs":
-					r += `SP:boobs`;
-					break;
-				case "sadist":
-					r += `SP:sade`;
-					break;
-				case "masochist":
-					r += `SP:pain`;
-					break;
-				case "dom":
-					r += `SP:dom`;
-					break;
-				case "pregnancy":
-					r += `SP:pregnancy`;
-					break;
-				case "vanilla":
-					r += `SP:vanilla`;
-					break;
-				case "all":
-					r += `SP:all`;
-					break;
-				case "none":
-					r += `SP:none`;
-					break;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSmartAttraction(child) {
-		if (child.attrKnown === 1) {
-			if (child.clitSetting === "women") {
-				if (child.attrXX < 95) {
-					r += `SP:women`;
-				} else {
-					r += `SP:monitoring`;
-				}
-			} else if (child.clitSetting === "men") {
-				if (child.attrXY < 95) {
-					r += `SP:men`;
-				} else {
-					r += `SP:monitoring`;
-				}
-			} else if (child.clitSetting === "anti-women") {
-				if (child.attrXX > 0) {
-					r += `SP:anti-women`;
-				} else {
-					r += `SP:monitoring`;
-				}
-			} else if (child.clitSetting === "anti-men") {
-				if (child.attrXY > 0) {
-					r += `SP:anti-men`;
-				} else {
-					r += `SP:monitoring`;
-				}
-			}
-		} else {
-			if (child.clitSetting === "women") {
-				r += `SP:women`;
-			} else if (child.clitSetting === "men") {
-				r += `SP:men`;
-			} else if (child.clitSetting === "anti-women") {
-				r += `SP:anti-women`;
-			} else if (child.clitSetting === "anti-men") {
-				r += `SP:anti-men`;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortBehaviorFlaw(child) {
-		r += `<span class="red">`;
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				r += `Arrog`;
-				break;
-			case "bitchy":
-				r += `Bitchy`;
-				break;
-			case "odd":
-				r += `Odd`;
-				break;
-			case "hates men":
-				r += `Men-`;
-				break;
-			case "hates women":
-				r += `Women-`;
-				break;
-			case "gluttonous":
-				r += `Glut`;
-				break;
-			case "anorexic":
-				r += `Ano`;
-				break;
-			case "devout":
-				r += `Dev`;
-				break;
-			case "liberated":
-				r += `Lib`;
-				break;
-			default:
-				child.behavioralFlaw = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSexFlaw(child) {
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `<span class="red">Oral-</span> `;
-				break;
-			case "hates anal":
-				r += `<span class="red">Anal-</span> `;
-				break;
-			case "hates penetration":
-				r += `<span class="red">Fuck-</span> `;
-				break;
-			case "shamefast":
-				r += `<span class="red">Shame</span> `;
-				break;
-			case "idealistic":
-				r += `<span class="red">Ideal</span> `;
-				break;
-			case "repressed":
-				r += `<span class="red">Repre</span> `;
-				break;
-			case "apathetic":
-				r += `<span class="red">Apath</span> `;
-				break;
-			case "crude":
-				r += `<span class="red">Crude</span> `;
-				break;
-			case "judgemental":
-				r += `<span class="red">Judge</span> `;
-				break;
-			case "cum addict":
-				r += `<span class="yellow">CumAdd</span> `;
-				break;
-			case "anal addict":
-				r += `<span class="yellow">AnalAdd</span> `;
-				break;
-			case "attention whore":
-				r += `<span class="yellow">Attention</span> `;
-				break;
-			case "breast growth":
-				r += `<span class="yellow">BoobObsess</span> `;
-				break;
-			case "abusive":
-				r += `<span class="yellow">Abusive</span> `;
-				break;
-			case "malicious":
-				r += `<span class="yellow">Malice</span> `;
-				break;
-			case "self hating":
-				r += `<span class="yellow">SelfHatr</span> `;
-				break;
-			case "neglectful":
-				r += `<span class="yellow">SelfNeglect</span> `;
-				break;
-			case "breeder":
-				r += `<span class="yellow">BreedObsess</span> `;
-				break;
-			default:
-				child.sexualFlaw = "none";
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortBehaviorQuirk(child) {
-		r += `<span class="green">`;
-		switch (child.behavioralQuirk) {
-			case "confident":
-				r += `Confid`;
-				break;
-			case "cutting":
-				r += `Cutting`;
-				break;
-			case "funny":
-				r += `Funny`;
-				break;
-			case "fitness":
-				r += `Fit`;
-				break;
-			case "adores women":
-				r += `Women+`;
-				break;
-			case "adores men":
-				r += `Men+`;
-				break;
-			case "insecure":
-				r += `Insec`;
-				break;
-			case "sinful":
-				r += `Sinf`;
-				break;
-			case "advocate":
-				r += `Advoc`;
-				break;
-			default:
-				child.behavioralQuirk = "none";
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortSexQuirk(child) {
-		switch (child.sexualQuirk) {
-			case "gagfuck queen":
-				r += `Gagfuck`;
-				break;
-			case "painal queen":
-				r += `Painal`;
-				break;
-			case "strugglefuck queen":
-				r += `Struggle`;
-				break;
-			case "tease":
-				r += `Tease`;
-				break;
-			case "romantic":
-				r += `Romantic`;
-				break;
-			case "perverted":
-				r += `Perverted`;
-				break;
-			case "caring":
-				r += `Caring`;
-				break;
-			case "unflinching":
-				r += `Unflinch`;
-				break;
-			case "size queen":
-				r += `SizeQ`;
-				break;
-			default:
-				child.sexualQuirk = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longFetish(child) {
-		r += `<span class="lightcoral">`;
-		switch (child.fetish) {
-			case "submissive":
-				if (child.fetishStrength > 95) {
-					r += `Complete submissive${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Submissive${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Submissive tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "cumslut":
-				if (child.fetishStrength > 95) {
-					r += `Cumslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Oral fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Prefers oral${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "humiliation":
-				if (child.fetishStrength > 95) {
-					r += `Humiliation slut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Exhibitionist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Interest in humiliation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "buttslut":
-				if (child.fetishStrength > 95) {
-					r += `Buttslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Anal fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Prefers anal${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "boobs":
-				if (child.fetishStrength > 95) {
-					r += `Boobslut${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Breast fixation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Loves boobs${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "sadist":
-				if (child.fetishStrength > 95) {
-					r += `Complete sadist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Sadist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Sadistic tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "masochist":
-				if (child.fetishStrength > 95) {
-					r += `Complete masochist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Masochist${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Masochistic tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "dom":
-				if (child.fetishStrength > 95) {
-					r += `Complete dom${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Dominant${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Dominant tendencies${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			case "pregnancy":
-				if (child.fetishStrength > 95) {
-					r += `Pregnancy fetish ${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else if (child.fetishStrength > 60) {
-					r += `Pregnancy kink${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				} else {
-					r += `Interest in impregnation${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				}
-				break;
-			default:
-				r += `Sexually vanilla${V.summaryStats ? `[${child.fetishStrength}]` : ''}. `;
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longAttraction(child) {
-		if (child.attrXY <= 5) {
-			r += `<span class="red">Disgusted by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		} else if (child.attrXY <= 15) {
-			r += `<span class="red">Turned off by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		} else if (child.attrXY <= 35) {
-			r += `<span class="red">Not attracted to men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		} else if (child.attrXY <= 65) {
-			r += `Indifferent to men${V.summaryStats ? `[${child.attrXY}]` : ''}, `;
-		} else if (child.attrXY <= 85) {
-			r += `<span class="green">Attracted to men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		} else if (child.attrXY <= 95) {
-			r += `<span class="green">Aroused by men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		} else if (child.attrXX > 95) {
-			if (child.energy <= 95) {
-				r += `<span class="green">Omnisexual!</span> `;
-			} else {
-				r += `<span class="green">Omnisexual nymphomaniac!</span> `;
-			}
-		} else {
-			r += `<span class="green">Passionate about men${V.summaryStats ? `[${child.attrXY}]` : ''},</span> `;
-		}
-		if (child.attrXX <= 5) {
-			r += `<span class="red">disgusted by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		} else if (child.attrXX <= 15) {
-			r += `<span class="red">turned off by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		} else if (child.attrXX <= 35) {
-			r += `<span class="red">not attracted to women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		} else if (child.attrXX <= 65) {
-			r += `indifferent to women${V.summaryStats ? `[${child.attrXX}]` : ''}. `;
-		} else if (child.attrXX <= 85) {
-			r += `<span class="green">attracted to women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		} else if (child.attrXX <= 95) {
-			r += `<span class="green">aroused by women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		} else if (child.attrXY <= 95) {
-			r += `<span class="green">passionate about women${V.summaryStats ? `[${child.attrXX}]` : ''}.</span> `;
-		}
-		if (child.energy > 95) {
-			if ((child.attrXY <= 95) || (child.attrXX <= 95)) {
-				r += `<span class="green">Nymphomaniac!</span> `;
-			}
-		} else if (child.energy > 80) {
-			r += `<span class="green">Powerful sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
-		} else if (child.energy > 60) {
-			r += `<span class="green">Good sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
-		} else if (child.energy > 40) {
-			r += `<span class="yellow">Average sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
-		} else if (child.energy > 20) {
-			r += `<span class="red">Poor sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
-		} else {
-			r += `<span class="red">No sex drive${V.summaryStats ? `[${child.energy}]` : ''}.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longSmartFetish(child) {
-		if (child.fetishKnown === 1) {
-			if (child.clitSetting === "off") {
-				r += `SP off. `;
-			} else if (((child.fetish !== "submissive") || (child.fetishStrength <= 95)) && (child.clitSetting === "submissive")) {
-				r += `SP: submissive. `;
-			} else if (((child.fetish !== "cumslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "oral")) {
-				r += `SP: oral. `;
-			} else if (((child.fetish !== "humiliation") || (child.fetishStrength <= 95)) && (child.clitSetting === "humiliation")) {
-				r += `SP: humiliation. `;
-			} else if (((child.fetish !== "buttslut") || (child.fetishStrength <= 95)) && (child.clitSetting === "anal")) {
-				r += `SP: anal. `;
-			} else if (((child.fetish !== "boobs") || (child.fetishStrength <= 95)) && (child.clitSetting === "boobs")) {
-				r += `SP: breasts. `;
-			} else if (((child.fetish !== "sadist") || (child.fetishStrength <= 95)) && (child.clitSetting === "sadist")) {
-				r += `SP: sadism. `;
-			} else if (((child.fetish !== "masochist") || (child.fetishStrength <= 95)) && (child.clitSetting === "masochist")) {
-				r += `SP: masochism. `;
-			} else if (((child.fetish !== "dom") || (child.fetishStrength <= 95)) && (child.clitSetting === "dom")) {
-				r += `SP: dominance. `;
-			} else if (((child.fetish !== "pregnancy") || (child.fetishStrength <= 95)) && (child.clitSetting === "pregnancy")) {
-				r += `SP: pregnancy. `;
-			} else if ((child.fetish !== "none") && (child.clitSetting === "vanilla")) {
-				r += `SP: vanilla. `;
-			} else if ((child.energy <= 95) && (child.clitSetting === "all")) {
-				r += `SP: all. `;
-			} else if ((child.energy > 5) && (child.clitSetting === "none")) {
-				r += `SP: none. `;
-			} else if (!["women", "men", "anti-women", "anti-men"].includes(child.clitSetting)) {
-				r += `SP: monitoring. `;
-			}
-		} else {
-			switch (child.clitSetting) {
-				case "off":
-					r += `SP off. `;
-					break;
-				case "submissive":
-					r += `SP: submissive. `;
-					break;
-				case "oral":
-					r += `SP: oral. `;
-					break;
-				case "humiliation":
-					r += `SP: humiliation. `;
-					break;
-				case "anal":
-					r += `SP: anal. `;
-					break;
-				case "boobs":
-					r += `SP: breasts. `;
-					break;
-				case "sadist":
-					r += `SP: sadism. `;
-					break;
-				case "masochist":
-					r += `SP: masochism. `;
-					break;
-				case "dom":
-					r += `SP: dominance. `;
-					break;
-				case "pregnancy":
-					r += `SP: pregnancy. `;
-					break;
-				case "vanilla":
-					r += `SP: vanilla. `;
-					break;
-				case "all":
-					r += `SP: all. `;
-					break;
-				case "none":
-					r += `SP: none. `;
-					break;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longSmartAttraction(child) {
-		if (child.attrKnown === 1) {
-			if ((child.attrXX < 100) && (child.clitSetting === "women")) {
-				r += `SP: women. `;
-			} else if ((child.attrXY < 100) && (child.clitSetting === "men")) {
-				r += `SP: men. `;
-			}
-		} else {
-			if (child.clitSetting === "women") {
-				r += `SP: women. `;
-			} else if (child.clitSetting === "men") {
-				r += `SP: men. `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longBehaviorFlaw(child) {
-		r += `<span class="red">`;
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				r += `Arrogant. `;
-				break;
-			case "bitchy":
-				r += `Bitchy. `;
-				break;
-			case "odd":
-				r += `Odd. `;
-				break;
-			case "hates men":
-				r += `Hates men. `;
-				break;
-			case "hates women":
-				r += `Hates women. `;
-				break;
-			case "gluttonous":
-				r += `Stress eater. `;
-				break;
-			case "anorexic":
-				r += `Anorexic. `;
-				break;
-			case "devout":
-				r += `Devoutly religious. `;
-				break;
-			case "liberated":
-				r += `Mentally liberated. `;
-				break;
-			default:
-				child.behavioralFlaw = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longSexFlaw(child) {
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `<span class="red">Hates oral.</span> `;
-				break;
-			case "hates anal":
-				r += `<span class="red">Hates anal.</span> `;
-				break;
-			case "hates penetration":
-				r += `<span class="red">Hates penetration.</span> `;
-				break;
-			case "shamefast":
-				r += `<span class="red">Shamefast.</span> `;
-				break;
-			case "idealistic":
-				r += `<span class="red">Sexually idealistic.</span> `;
-				break;
-			case "repressed":
-				r += `<span class="red">Sexually repressed.</span> `;
-				break;
-			case "apathetic":
-				r += `<span class="red">Sexually apathetic.</span> `;
-				break;
-			case "crude":
-				r += `<span class="red">Sexually crude.</span> `;
-				break;
-			case "judgemental":
-				r += `<span class="red">Sexually judgemental.</span> `;
-				break;
-			case "cum addict":
-				r += `<span class="yellow">Cum addict.</span> `;
-				break;
-			case "anal addict":
-				r += `<span class="yellow">Anal addict.</span> `;
-				break;
-			case "attention whore":
-				r += `<span class="yellow">Attention whore.</span> `;
-				break;
-			case "breast growth":
-				r += `<span class="yellow">Breast obsession.</span> `;
-				break;
-			case "abusive":
-				r += `<span class="yellow">Sexually abusive.</span> `;
-				break;
-			case "malicious":
-				r += `<span class="yellow">Sexually malicious.</span> `;
-				break;
-			case "self hating":
-				r += `<span class="yellow">Self hatred.</span> `;
-				break;
-			case "neglectful":
-				r += `<span class="yellow">Self neglectful.</span> `;
-				break;
-			case "breeder":
-				r += `<span class="yellow">Breeding obsession.</span> `;
-				break;
-			default:
-				child.sexualFlaw = "none";
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longBehaviorQuirk(child) {
-		r += `<span class="green">`;
-		switch (child.behavioralQuirk) {
-			case "confident":
-				r += `Confident. `;
-				break;
-			case "cutting":
-				r += `Cutting. `;
-				break;
-			case "funny":
-				r += `Funny. `;
-				break;
-			case "fitness":
-				r += `Fitness. `;
-				break;
-			case "adores women":
-				r += `Adores women. `;
-				break;
-			case "adores men":
-				r += `Adores men. `;
-				break;
-			case "insecure":
-				r += `Insecure. `;
-				break;
-			case "sinful":
-				r += `Sinful. `;
-				break;
-			case "advocate":
-				r += `Advocate. `;
-				break;
-			default:
-				child.behavioralQuirk = "none";
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longSexQuirk(child) {
-		switch (child.sexualQuirk) {
-			case "gagfuck queen":
-				r += `Gagfuck queen. `;
-				break;
-			case "painal queen":
-				r += `Painal queen. `;
-				break;
-			case "strugglefuck queen":
-				r += `Strugglefuck queen. `;
-				break;
-			case "tease":
-				r += `Tease. `;
-				break;
-			case "romantic":
-				r += `Romantic. `;
-				break;
-			case "perverted":
-				r += `Perverted. `;
-				break;
-			case "caring":
-				r += `Caring. `;
-				break;
-			case "unflinching":
-				r += `Unflinching. `;
-				break;
-			case "size queen":
-				r += `Size queen. `;
-				break;
-			default:
-				child.sexualQuirk = "none";
-				break;
-		}
-		r += `</span> `;
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortExtendedFamily(child) {
-		let handled = 0;
-		if (child.mother > 0) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.mother;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.mother === -1) {
-			r += `Your daughter`;
-			if (child.relationship < -1) {
-				res += ` & ${PCrelationshipTerm(child)}`;
-				handled = 1;
-			}
-			r += " ";
-		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.mother].fullName}'s daughter `;
-		}
-		if (child.father > 0 && child.father !== child.mother) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.father;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.father === -1 && child.mother !== -1) {
-			r += `Your daughter`;
-			if (child.relationship < -1) {
-				res += ` & ${PCrelationshipTerm(child)}`;
-				handled = 1;
-			}
-			r += " ";
-		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.father].fullName}'s daughter`;
-		}
-		if (child.daughters === 1) {
-			let _ssj = V.slaves.findIndex(function(s) {
-				return s.mother === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s mother`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-			_ssj = V.slaves.findIndex(function(s) {
-				return s.father === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s father`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
-					const friendShipShort = relationshipTermShort(child);
-					r += ` & ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.daughters > 1) {
-			r += `multiple daughters `;
-		}
-		if (child.sisters === 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return areSisters(s, child) > 0;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s sister`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTermShort(child);
-					r += `& ${friendShipShort}`;
-					handled = 1;
-				}
-			}
-			r += " ";
-		} else if (child.sisters > 1) {
-			r += `multiple sisters `;
-		}
-		if (child.relationship > 0 && handled !== 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.relationshipTarget;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s`;
-				const friendShipShort = relationshipTermShort(child);
-				r += ` ${friendShipShort}`;
-			}
-		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `Your wife`;
-		} else if (child.relationship === -2) {
-			r += `E Bonded`;
-		} else if (child.relationship === -1) {
-			r += `E Slut`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortClone(child) {
-		if (child.clone !== 0) {
-			r += ` Clone`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function shortRival(child) {
-		if (child.rivalry !== 0) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.rivalryTarget;
-			});
-			if (_ssj !== -1) {
-				r += `<span class="lightsalmon">`;
-				if (child.rivalry <= 1) {
-					r += `Disl ${SlaveFullName(V.slaves[_ssj])}`;
-				} else if (child.rivalry <= 2) {
-					r += `${SlaveFullName(V.slaves[_ssj])}'s rival`;
-				} else {
-					r += `Hates ${SlaveFullName(V.slaves[_ssj])}`;
-				}
-				r += `</span> `;
-			}
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longExtendedFamily(child) {
-		let handled = 0;
-		if (child.mother > 0) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.mother;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.mother === -1) {
-			r += `Your `;
-			if (child.relationship < -1) {
-				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
-				handled = 1;
-			} else {
-				r += `<span class="lightgreen">daughter.</span> `;
-			}
-		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `;
-		}
-		if (child.father > 0 && child.father !== child.mother) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.father;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.father === -1 && child.father !== child.mother) {
-			r += `Your `;
-			if (child.relationship < -1) {
-				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
-				handled = 1;
-			} else {
-				r += `<span class="lightgreen">daughter.</span> `;
-			}
-		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
-			r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `;
-		}
-		if (child.daughters === 1) {
-			let _ssj = V.slaves.findIndex(function(s) {
-				return s.mother === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-			_ssj = V.slaves.findIndex(function(s) {
-				return s.father === child.ID;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.daughters > 1) {
-			if (child.daughters > 10) {
-				r += `<span class="lightgreen">Has tons of daughters.</span> `;
-			} else if (child.daughters > 5) {
-				r += `<span class="lightgreen">Has many daughters.</span> `;
-			} else {
-				r += `<span class="lightgreen">Has several daughters.</span> `;
-			}
-		}
-		if (child.sisters === 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return areSisters(s, child) > 0;
-			});
-			if (_ssj !== -1) {
-				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`;
-				if (child.relationshipTarget === V.slaves[_ssj].ID) {
-					const friendShipShort = relationshipTerm(child);
-					r += ` and ${friendShipShort}`;
-					handled = 1;
-				}
-				r += `.</span> `;
-			}
-		} else if (child.sisters > 1) {
-			if (child.sisters > 10) {
-				r += `<span class="lightgreen">One of many sisters.</span> `;
-			} else if (child.sisters > 5) {
-				r += `<span class="lightgreen">Has many sisters.</span> `;
-			} else {
-				r += `<span class="lightgreen">Has several sisters.</span> `;
-			}
-		}
-		if (child.relationship > 0 && handled !== 1) {
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.relationshipTarget;
-			});
-			if (_ssj !== -1) {
-				const friendship = relationshipTerm(child);
-				r += `${SlaveFullName(V.slaves[_ssj])}'s `;
-				r += `<span class="lightgreen">${friendship}.</span> `;
-			}
-		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
-			r += `<span class="lightgreen">Your wife.</span> `;
-		} else if (child.relationship === -2) {
-			r += `<span class="lightgreen">Emotionally bonded to you.</span> `;
-		} else if (child.relationship === -1) {
-			r += `<span class="lightgreen">Emotional slut.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longClone(child) {
-		if (child.clone !== 0) {
-			r += ` <span class="skyblue">Clone of ${child.clone}.</span> `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longRival(child) {
-		if (child.rivalry !== 0) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-			const _ssj = V.slaves.findIndex(function(s) {
-				return s.ID === child.rivalryTarget;
-			});
-			if (_ssj !== -1) {
-				if (child.rivalry <= 1) {
-					r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `;
-				} else if (child.rivalry <= 2) {
-					r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `;
-				} else {
-					r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `;
-				}
-			}
-			r += " ";
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longClothes(child) {
-		switch (child.clothes) {
-			case "a slave gown":
-				r += `Slave gown. `;
-				break;
-			case "a mini dress":
-				r += `Mini dress. `;
-				break;
-			case "a ball gown":
-				r += `Ball gown. `;
-				break;
-			case "a schoolgirl outfit":
-				r += `Schoolgirl outfit. `;
-				break;
-			case "a tank-top":
-				r += `Nice tank-top. `;
-				break;
-			case "a tube top":
-				r += `Nice tube top. `;
-				break;
-			case "a t-shirt":
-				r += `T-shirt. `;
-				break;
-			case "an oversized t-shirt":
-				r += `Nice over-sized t-shirt. `;
-				break;
-			default:
-				r += `Naked. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longCollar(child) {
-		switch (child.collar) {
-			case "uncomfortable leather":
-				r += `Leather collar. `;
-				break;
-			case "tight steel":
-				r += `Steel collar. `;
-				break;
-			case "preg biometrics":
-				r += `Pregnancy biometrics collar. `;
-				break;
-			case "cruel retirement counter":
-				r += `Cruel counter collar. `;
-				break;
-			case "shock punishment":
-				r += `Shock collar. `;
-				break;
-			case "dildo gag":
-				r += `Dildo gag. `;
-				break;
-			case "massive dildo gag":
-				r += `Throat-bulging dildo gag. `;
-				break;
-			case "neck corset":
-				r += `Neck corset. `;
-				break;
-			case "stylish leather":
-				r += `Stylish leather collar. `;
-				break;
-			case "satin choker":
-				r += `Satin choker. `;
-				break;
-			case "silk ribbon":
-				r += `Silken ribbon. `;
-				break;
-			case "heavy gold":
-				r += `Gold collar. `;
-				break;
-			case "bowtie":
-				r += `Bowtie collar. `;
-				break;
-			case "pretty jewelry":
-				r += `Pretty collar. `;
-				break;
-			case "nice retirement counter":
-				r += `Nice counter collar. `;
-				break;
-			case "bell collar":
-				r += `Bell collar. `;
-				break;
-			case "leather with cowbell":
-				r += `Cowbell collar. `;
-				break;
-			case "ancient Egyptian":
-				r += `Wesekh. `;
-				break;
-			case "ball gag":
-				r += `Ball gag. `;
-				break;
-			case "bit gag":
-				r += `Bit gag. `;
-				break;
-			case "porcelain mask":
-				r += `Porcelain mask. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longBelly(child) {
-		switch (child.bellyAccessory) {
-			case "shapewear":
-				r += `Shapewear. `;
-				break;
-			case "a small empathy belly":
-				r += `Small fake belly. `;
-				break;
-			case "a medium empathy belly":
-				r += `Medium fake belly. `;
-				break;
-			case "a large empathy belly":
-				r += `Large fake belly. `;
-				break;
-			case "a huge empathy belly":
-				r += `Huge fake belly. `;
-				break;
-			case "a corset":
-				r += `Corset. `;
-				break;
-			case "an extreme corset":
-				r += `Extreme corsetage. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longLegs(child) {
-		if (child.legAccessory === "short stockings") {
-			r += `Short stockings. `;
-		} else if (child.legAccessory === "long stockings") {
-			r += `Long stockings. `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longShoes(child) {
-		if (child.shoes === "heels") {
-			r += `Heels. `;
-		} else if (child.shoes === "pumps") {
-			r += `Pumps. `;
-		} else if (child.shoes === "extreme heels") {
-			r += `Extreme heels. `;
-		} else if (child.shoes === "boots") {
-			r += `Boots. `;
-		} else if (child.heels === 1) {
-			r += `<span class="yellow">Crawling.</span> `;
-		} else if (child.shoes === "flats") {
-			r += `Flats. `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longChastity(child) {
-		if (child.chastityAnus === 1 && child.chastityPenis === 1 && child.chastityVagina === 1) {
-			r += `Full chastity. `;
-		} else if (child.chastityPenis === 1 && child.chastityVagina === 1) {
-			r += `Genital chastity. `;
-		} else if ((child.chastityAnus === 1 && child.chastityVagina === 1) || (child.chastityAnus === 1 && child.chastityPenis === 1)) {
-			r += `Combined chastity. `;
-		} else if (child.chastityVagina === 1) {
-			r += `Vaginal chastity. `;
-		} else if (child.chastityPenis === 1) {
-			r += `Chastity cage. `;
-		} else if (child.chastityAnus === 1) {
-			r += `Anal chastity. `;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longVaginalAcc(child) {
-		if (child.vaginalAttachment !== "vibrator") {
-			switch (child.vaginalAccessory) {
-				case "bullet vibrator":
-					r += `Attached bullet vibrator. `;
-					break;
-				case "smart bullet vibrator":
-					r += `Attached smart bullet vibrator. `;
-					break;
-				case "dildo":
-					r += `Vaginal dildo. `;
-					break;
-				case "large dildo":
-					r += `Large vaginal dildo. `;
-					break;
-				case "huge dildo":
-					r += `Huge vaginal dildo. `;
-					break;
-				case "long dildo":
-					r += `Long vaginal dildo. `;
-					break;
-				case "long, large dildo":
-					r += `Long and large vaginal dildo. `;
-					break;
-				case "long, huge dildo":
-					r += `Long and wide vaginal dildo. `;
-					break;
-			}
-		}
-		if (child.vaginalAttachment !== "none") {
-			switch (child.vaginalAttachment) {
-				case "vibrator":
-					r += `Vibrating dildo. `;
-					break;
-			}
-			r += " ";
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longDickAcc(child) {
-		switch (child.dickAccessory) {
-			case "sock":
-				r += `Cock sock. `;
-				break;
-			case "bullet vibrator":
-				r += `Frenulum bullet vibrator. `;
-				break;
-			case "smart bullet vibrator":
-				r += `Smart frenulum bullet vibrator. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function longButtplug(child) {
-		switch (child.buttplug) {
-			case "plug":
-				r += `Buttplug. `;
-				break;
-			case "large plug":
-				r += `Large buttplug. `;
-				break;
-			case "huge plug":
-				r += `Huge buttplug. `;
-				break;
-			case "long plug":
-				r += `Long buttplug. `;
-				break;
-			case "long, large plug":
-				r += `Large, long buttplug. `;
-				break;
-			case "long, huge plug":
-				r += `Enormous buttplug. `;
-				break;
-		}
-		switch (child.buttplugAttachment) {
-			case "tail":
-				r += `Attached tail. `;
-				break;
-			case "cat tail":
-				r += `Attached cat tail. `;
-				break;
-			case "fox tail":
-				r += `Attached fox tail. `;
-				break;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function rulesAssistant(child) {
-		if (child.useRulesAssistant === 0) {
-			r += `<span class="lightgreen">RA-Exempt</span> `;
-		} else if (abbreviate.rulesets === 2 && (child.currentRules !== undefined) && (child.currentRules.length > 0)) {
-			r += `Rules: ${V.defaultRules.filter(x => ruleApplied(child, x)).map(x => x.name).join(", ")}`;
-		}
-	}
-
-	/**
-	 * @param {App.Entity.SlaveState} child
-	 */
-	function origins(child) {
-		r += `<br> `;
-		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
-			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
-		}
-		r += `<span class="gray">${child.origin}</span> `;
-	}
-
-	return ChildSummaryUncached(child);
-};
-
-/**
- * Displays a detailed description of the child
- * @param {App.Entity.SlaveState} child
- * @returns {string}
- */
-App.Facilities.Nursery.LongChildDescription = function(child) {
-	"use strict";
-
-	// declarations
-	const
-		arcology = V.arcologies[0],
-		PC = V.PC,
-		slaves = V.slaves,
-		desc = child.actualAge < 13 ? `child` : `teen`, // TODO:
-		girl = V.girl,
-		father = child.father === -1 ? PC : getSlave(child.father),
-		mother = child.mother === -1 ? PC : getSlave(child.mother);
-
-	let
-		r = ``;
-
-	const
-		{
-			he, him, his, hers, himself, boy, He, His
-		} = getPronouns(child);
-
-	// helper functions
-	function accent(child) {
-		let
-			r = ``,
-			accent,
-			nationality;
-
-		switch (child.nationality) {
-			case "a Cook Islander":
-				nationality = `Cook Islander`;
-				break;
-			case "a Liechtensteiner":
-				nationality = `Liechtensteiner`;
-				break;
-			case "a New Zealander":
-				nationality = `New Zealander`;
-				break;
-			case "a Solomon Islander":
-				nationality = `Solomon Islander`;
-				break;
-			default:
-				nationality = child.nationality;
-				break;
-		}
-
-		if (child.accent !== 0) {
-			if (child.accent === 1) {
-				accent = jsEither("a beautiful", "a distinctive", "an intriguing", "a light", "a lovely", "a mild", "a pleasant", "a rich", "a slight", "a smooth");
-				r += `${He} speaks ${V.language} in ${accent} ${nationality} accent${child.rules.speech === "accent elimination" ? `, which the rules encourage ${him} to suppress` : ``}. `;
-			} else if (child.accent === 2) {
-				accent = jsEither("a broad", "a harsh", "a heavy", "an intense", "a marked", "a noticeable", "a rough", "a significant", "a stressed", "a strong", "a thick");
-				r += `${He} speaks ${V.language} in ${accent} ${nationality} accent that can be hard to understand${child.rules.speech === "accent elimination" ? `, and the rules encourage ${him} to make an effort to suppress it` : ``}. `;
-			} else {
-				r += `${He} speaks little ${V.language}, but understands enough to be given orders. `;
-			}
-		}
-
-		return r;
-	}
-
-	function accessories() {
-		function buttplug(child) {
-			let
-				r = ``;
-
-			if (V.showClothing && !V.saleDescription) {
-				switch (child.clothes) {
-					case "a slave gown":
-						if (child.chastityAnus) {
-							r += `${His} pretty gown hides ${his} anal chastity accessory underneath. `;
-						} else {
-							r += `Though ${his} gown is very pretty, ${his} asshole is bare beneath it. `;
-						}
-						break;
-					case "a ball gown":
-						if (child.chastityAnus) {
-							r += `${His} fabulous silken ball gown hides ${his} anal chastity accessory underneath. `;
-						} else {
-							r += `Though ${his} silken ball gown is fabulous, ${his} asshole is bare beneath it. `;
-						}
-						break;
-					case "a mini dress":
-						r += `If ${he} bends over even slightly, the hem of ${his} short dress rides up to reveal ${his} `;
-						if (child.chastityAnus) {
-							r += `anal chastity accessory underneath. `;
-						} else {
-							if (child.anus > 1) {
-								r += `lewd butthole. `;
-							} else {
-								r += `tight anus. `;
-							}
-						}
-						break;
-					case "a schoolgirl outfit":
-						r += `The skirt is so short that it `;
-						if (child.chastityAnus) {
-							r += `reveals ${his} anal chastity accessory. `;
-						} else {
-							r += `doesn't even have to be lifted to fuck ${his} schoolgirl ass. `;
-						}
-						break;
-					case "a tank-top":
-					case "a tube top":
-					case "a t-shirt":
-					case "an oversized t-shirt":
-						break;
-					default:
-						if (child.anus > 2) {
-							if (child.chastityAnus) {
-								r += `${His} bare buttocks and ${his} anal chastity accessory are very visible from the rear. `;
-							} else {
-								r += `With ${his} ass bare, ${his} huge asshole is very visible from the rear. `;
-							}
-						} else if (child.anus > 1) {
-							if (child.chastityAnus) {
-								r += `${His} bare buttocks and ${his} anal chastity accessory are very visible from the rear. `;
-							} else {
-								r += `With ${his} ass bare, ${his} loose asshole is visible from the rear. `;
-							}
-						} else {
-							if (child.chastityAnus) {
-								r += `${His} bare buttocks and ${his} anal chastity accessory are visible. `;
-							} else {
-								r += `With ${his} ass bare, there is an occasional glimpse of ${his} asshole. `;
-							}
-						}
-						break;
-				}
-			}
-
-			switch (child.buttplug) {
-				case "plug":
-					r += `It's filled by a standard `;
-					if (child.anus > 2) {
-						r += `buttplug, which is on the verge of falling out. `;
-					} else {
-						r += `buttplug. `;
-					}
-
-					if (child.buttplugAttachment === "tail") {
-						r += `A tail protrudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `A bushy ${child.hColor} tail with a white tip protrudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `A slim, spotted tail with a cute tuft at its tip protudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `A tail protrudes from the back of the plug and springs upwards from ${his} rear. `;
-					}
-					break;
-				case "long plug":
-					r += `It's filled by a standard sized, overly long `;
-					if (child.anus > 2) {
-						r += `buttplug, which is on the verge of sliding out ${his} rear. `;
-					} else {
-						r += `buttplug. `;
-					}
-					r += `It causes a noticeable bulge in ${his} belly. `;
-
-					if (child.buttplugAttachment === "tail") {
-						r += `A tail protrudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `A bushy ${child.hColor} tail with a white tip protrudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `A slim, spotted tail with a cute tuft at its tip protudes from the back of the plug and dangles from ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `A tail protrudes from the back of the plug and springs upwards from ${his} rear. `;
-					}
-					break;
-				case "large plug":
-					r += `It's `;
-					if (child.anus < 2) {
-						r += `agonizingly stretched `;
-					} else if (child.anus < 3) {
-						r += `uncomfortably stretched `;
-					} else {
-						r += `comfortably stretched `;
-					}
-					r += `by a large buttplug. `;
-
-					if (child.buttplugAttachment === "tail") {
-						r += `${He} swings the tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `${He} swings the bushy ${child.hColor} tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `${He} swings the spotted tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `${He} bounces the tail from side to side with every shift of ${his} rear. `;
-					}
-					break;
-				case "long, large plug":
-					r += `It's `;
-					if (child.anus < 2) {
-						r += `agonizingly stretched `;
-					} else if (child.anus < 3) {
-						r += `uncomfortably stretched `;
-					} else {
-						r += `comfortably stretched `;
-					}
-					r += `by a large and long buttplug. It causes a noticeable bulge in ${his} belly. `;
-
-					if (child.buttplugAttachment === "tail") {
-						r += `${He} swings the tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `${He} swings the bushy ${child.hColor} tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `${He} swings the spotted tail from side to side with every shift of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `${He} bounces the tail from side to side with every shift of ${his} rear. `;
-					}
-					break;
-				case "huge plug":
-					if (child.anus < 4) {
-						r += `It's agonizingly stretched by a plug so huge ${his} anus is probably being stretched into a permanent gape. `;
-						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
-							r += `${He}'s frequently in tears from the pain, which is so sharp it often tips ${him} over into spontaneous orgasm. `;
-						} else {
-							r += `${He} spends much of ${his} time sobbing with anal pain and fear at having ${his} hole ruined. `;
-						}
-					} else {
-						r += `Its ridiculous gape is comfortably filled by a huge buttplug. `;
-					}
-
-					if (child.buttplugAttachment === "tail") {
-						r += `${He} sways the tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `${He} sways the bushy ${child.hColor} tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `${He} sways the spotted tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `${He} jiggles the tail back and forth with every ginger movement of ${his} rear. `;
-					}
-					break;
-				case "long, huge plug":
-					if (child.anus < 4) {
-						r += `It's agonizingly stretched by a plug so huge it causes ${his} belly to bulge and is likely stretching ${his} anus into a permanent gape. `;
-						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
-							r += `${He}'s frequently in tears from the pain, which is so sharp it often tips ${him} over into spontaneous orgasm. `;
-						} else {
-							r += `${He} spends much of ${his} time sobbing with anal pain and fear at having ${his} hole ruined. `;
-						}
-					} else {
-						r += `Its ridiculous gape is comfortably filled by a wide and long buttplug. It causes a noticeable bulge in ${his} belly. `;
-					}
-
-					if (child.buttplugAttachment === "tail") {
-						r += `${He} sways the tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "fox tail") {
-						r += `${He} sways the bushy ${child.hColor} tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cow tail") {
-						r += `${He} sways the spotted tail back and forth with every ginger movement of ${his} rear. `;
-					} else if (child.buttplugAttachment === "cat tail") {
-						r += `${He} jiggles the tail back and forth with every ginger movement of ${his} rear. `;
-					}
-					break;
-			}
-
-			return r;
-		}
-
-		accessories.buttplug = buttplug;
-
-		function dick(child) {
-			let
-				r = ``;
-
-			if (child.chastityPenis) {
-				r += `${His} cock is encased in a tight chastity cage, which is designed to be comfortable as long as ${he} remains soft. `;
-				if (child.energy > 95) {
-					r += `The poor nympho looks painfully frustrated by this, and a long string of precum is dangling from the hole in the bottom of the cage. `;
-				}
-				if (arcology.FSRestart !== "unset") {
-					r += `This pleases the Societal Elite. `;
-				}
-			}
-
-			return r;
-		}
-
-		accessories.dick = dick;
-
-		function vaginal(child) {
-			let
-				r = ``,
-				held;
-
-			if (child.chastityVagina) {
-				held = `held in place by a chastity belt`;
-			} else if (child.vaginalAccessory === "bullet vibrator" || child.vaginalAccessory === "smart bullet vibrator") {
-				held = `held in place by a strap`;
-			} else {
-				held = `held in place by a strap, which ${he} can remove for vaginal intercourse`;
-			}
-
-			switch (child.vaginalAccessory) {
-				case "bullet vibrator":
-				case "smart bullet vibrator":
-					r += `A bullet vibrator is attached on ${his} clit, ${held}. `;
-					break;
-				case "dildo":
-					r += `${His} pussy is filled by a dildo ${held}. `;
-					break;
-				case "long dildo":
-					r += `${His} pussy is filled by a very long dildo ${held}. It noticeably bulges ${his} stomach. `;
-					break;
-				case "large dildo":
-					r += `${His} pussy is ${child.vagina < 2 ? `painfully stretched` : child.vagina < 3 ? `uncomfortably filled` : `comfortably filled`} by a large dildo ${held}. `;
-					break;
-				case "long, large dildo":
-					r += `${His} pussy is ${child.vagina < 2 ? `painfully stretched` : child.vagina < 3 ? `uncomfortably filled` : `comfortably filled`} by a very long and large dildo ${held}. It noticeably bulges ${his} stomach. `;
-					break;
-				case "huge dildo":
-					if (child.vagina < 4) {
-						r += `${His} pussy is filled to the breaking point by an enormous dildo. `;
-						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
-							r += `${He} can barely move with the discomfort, but ${he} frequently climaxes with agony. `;
-						} else {
-							r += `${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched. `;
-						}
-					} else {
-						r += `${His} cavernous pussy is comfortably filled by a huge dildo. `;
-					}
-					if (child.chastityVagina) {
-						r += `A chastity belt locks it securely in place. `;
-					}
-					break;
-				case "long, huge dildo":
-					if (child.vagina < 4) {
-						r += `${His} pussy is filled to the breaking point by an enormously wide and long dildo. It noticeably bulges ${his} stomach. `;
-						if (child.fetish === "masochist" && child.fetishKnown && child.fetishStrength > 60) {
-							r += `${He} can barely move with the discomfort, but ${he} frequently climaxes with agony. `;
-						} else {
-							r += `${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched. `;
-						}
-					} else {
-						r += `${His} cavernous pussy is comfortably filled by an enormously wide and long dildo. It noticeably bulges ${his} stomach. `;
-					}
-					if (child.chastityVagina) {
-						r += `A chastity belt locks it securely in place. `;
-					}
-					break;
-				default:
-					if (child.chastityVagina) {
-						r += `${His} pussy is protected by a chastity belt${child.clothes !== "no clothing" ? `worn under ${his} clothing` : ``}. `;
-					}
-					break;
-			}
-
-			if (child.chastityVagina && arcology.FSRestart !== "unset") {
-				r += `This pleases the Societal Elite. `;
-			}
-
-			return r;
-		}
-
-		accessories.vaginal = vaginal;
-	}
-
-	function anus(child) {
-		let
-			r = ``,
-			skinDesc,
-			analSkinDesc,
-			ass,
-			anus = child.analArea - child.anus;
-
-		if (skinToneLevel(child.skin) < 13) {
-			skinDesc = "pink";
-		} else if (child.anusTat === "bleached") {
-			skinDesc = child.skin;
-		} else if (skinToneLevel(child.skin) > 19) {
-			skinDesc = "dark";
-		} else {
-			skinDesc = "darker";
-		}
-
-		analSkinDesc = jsEither("crinkled", "puckered", "puffy");
-
-		if (child.anus === 0) {
-			r += `${He} is an <span class="lime">anal virgin;</span> ${his} asshole is fresh and tight. `;
-		} else if (child.anus === 1) {
-			ass = jsEither("anal opening", "anus", "asshole", "butthole");
-			r += `${His} ${ass} is ${jsEither("nice and", "very")} tight, `;
-			if (anus > 3) {
-				r += `but it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
-			} else if (anus > 2) {
-				r += `but it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
-			} else if (anus > 1) {
-				r += `but it's surrounded by a big ring of ${analSkinDesc} ${skinDesc} skin. `;
-			} else if (anus > 0) {
-				r += `and it's surrounded by a cute ${jsEither("pucker", "ring", "rosebud")} ${ass} of ${skinDesc} skin. `;
-			} else {
-				r += `and the ${skinDesc} skin around it is stretched smooth, since it's been deflowered only recently. `;
-			}
-		} else if (child.anus === 2) {
-			ass = jsEither("anal opening", "anus", "asshole", "asspussy", "butthole");
-			r += `${His} ${ass} is ${anus > 1 ? `only ` : ``}${jsEither("relaxed", "loose", "accommodating")} ${ass}, `;
-			if (anus > 2) {
-				r += `but it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
-			} else if (anus > 1) {
-				r += `but it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
-			} else if (anus > 0) {
-				r += `and it's surrounded by a big ring of ${analSkinDesc} ${skinDesc} skin. `;
-			} else {
-				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting it's getting used to being this way. `;
-			}
-		} else if (child.anus === 3) {
-			ass = jsEither("anal opening", "anus", "asshole", "asspussy", "butthole");
-			r += `${His} ${ass} is a ${jsEither("lewd", "loose", "relaxed", "welcoming")} ${ass} slit, `;
-			if (anus > 1) {
-				r += `and it's surrounded by a massive oval of ${analSkinDesc} ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
-			} else if (anus > 0) {
-				r += `and it's surrounded by an oval of ${analSkinDesc} ${skinDesc} skin that occupies ${his} entire ${jsEither("asscrack", "buttcrack")} ${ass}. `;
-			} else {
-				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting ${he}'s getting used to having such a cock-hungry rear fuckhole. `;
-			}
-		} else {
-			ass = jsEither("anal opening", "anal slit", "anus", "asshole", "asspussy", "butthole");
-			r += `${His} ${ass} is a ${jsEither("loose", "open", "permanent", "relaxed")} ${ass} gape, `;
-			if (anus > 0) {
-				r += `and it's surrounded by a massive oval of ${skinDesc} skin that runs from ${his} tailbone all the way down to the ${child.vagina > -1 ? `bottom of ${his} pussy` : `base of ${his} cock`}. `;
-			} else {
-				r += `and the ${skinDesc} skin around it is stretched smooth, suggesting ${he}'s only recently had ${his} ass ruined. `;
-			}
-		}
-
-		if (child.pubicHStyle === "bushy" || child.pubicHStyle === "very bushy") {
-			if (child.physicalAge >= 13) {
-				r += `Since ${he} has been left natural, ${he} has some light ${child.pubicHColor} pubic hair around ${his} ass. `;
-			}
-		}
-
-		if (child.minorInjury === "sore ass") {
-			r += `${His} asshole has seen hard use lately and looks a little sore. `;
-		}
-
-		if (V.saleDescription && V.gingering === "ginger") {
-			r += `${His} asshole looks unusually puffy and sore. ${He}'s either been cruelly assraped lately, or ${he}'s had an irritant placed in ${his} anus. `;
-		}
-
-		r += accessories.buttplug(child);
-
-		if (V.showBodyMods) {
-			r += piercings.anus(child);
-			r += tats.anus(child);
-		}
-
-		if (child.skill.anal >= 100) {
-			r += `${He} is a <span class="aquamarine">masterful anal slut.</span> `;
-		} else if (child.skill.anal > 60) {
-			r += `${He} is an <span class="aquamarine">expert anal slut.</span> `;
-		} else if (child.skill.anal > 30) {
-			r += `${He} is a <span class="aquamarine">skilled anal slut.</span> `;
-		} else if (child.skill.anal > 10) {
-			r += `${He} has <span class="aquamarine">basic knowledge about anal.</span> `;
-		} else {
-			r += `${He} is unskilled at taking anal. `;
-		}
-
-		return r;
-	}
-
-	function butt(child) {
-		let
-			r = ``;
-
-		if (V.showClothing && !V.saleDescription) {
-			if (!V.surgeryDescription) {
-				switch (child.clothes) {
-					case "a schoolgirl outfit":
-						r += `${His} skirt `;
-						if (child.butt > 10) {
-							r += `can't begin to cover ${his} massive butt, and just rests on top of ${his} buttocks, leaving virtually ${his} entire behind `;
-						} else if (child.butt > 6) {
-							r += `can't begin to cover ${his} huge butt, and just rests on top of ${his} buttocks, leaving virtually ${his} entire behind `;
-						} else if (child.butt > 3) {
-							r += `only covers the top of ${his} big butt, leaving most of ${his} bottom `;
-						} else {
-							r += `only covers the top half of ${his} butt, leaving the bottom half of ${his} behind `;
-						}
-						r += `bare. `;
-						break;
-					case "a slave gown":
-						r += `${His} slave gown `;
-						if (child.butt > 10) {
-							r += `is tailored as tastefully as possible for ${his} inhuman `;
-						} else if (child.butt > 6) {
-							r += `is tailored as tastefully as possible for ${his} massive `;
-						} else if (child.butt > 3) {
-							r += `is tailored to flatter ${his} big `;
-						} else {
-							r += `tastefully clings to ${his} `;
-						}
-						r += `buttocks. `;
-						break;
-					case "a ball gown":
-						r += `${His} fabulous silken ball gown is draped `;
-						if (child.butt > 10) {
-							r += `as tastefully as possible for ${his} inhuman `;
-						} else if (child.butt > 6) {
-							r += `as tastefully as possible for ${his} massive `;
-						} else if (child.butt > 3) {
-							r += `around ${his} big `;
-						} else {
-							r += `around ${his} `;
-						}
-						r += `buttocks. `;
-						break;
-					case "a mini dress":
-						r += `${His} scandalously short dress `;
-						if (child.butt > 10) {
-							r += `is impossible to pull over ${his} enormous buttocks, leaving ${his} behind entirely exposed. `;
-						} else if (child.butt > 6) {
-							r += `is at constant risk of sliding above ${his} huge butt and leaving ${his} behind entirely exposed. `;
-						} else if (child.butt > 3) {
-							r += `barely covers half of ${his} ample buttocks. `;
-						} else {
-							r += `barely manages to cover ${his} buttocks. `;
-						}
-						break;
-					case "a tank-top":
-					case "a tube top":
-					case "an oversized t-shirt":
-					case "a t-shirt":
-						r += `${His} clothing leaves ${his} `;
-						if (child.butt > 10) {
-							r += `mammoth ass completely bare. `;
-						} else if (child.butt > 6) {
-							r += `huge ass completely bare. `;
-						} else if (child.butt > 3) {
-							r += `big ass completely bare. `;
-						} else {
-							r += `ass completely bare. `;
-						}
-						break;
-				}
-			}
-		}
-
-		if (V.showBodyMods) {
-			r += tats.stamp(child);
-		}
-
-		r += `${He}'s got a `;
-		if (child.butt <= 1) {
-			r += `flat and `;
-			if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") {
-				r += `${jsEither("attractive", "enticing", "fashionable")} `;
-			} else {
-				r += `${jsEither("skinny", "slim", "taut")} `;
-			}
-			r += `ass. `;
-		} else if (child.butt <= 2) {
-			if (arcology.FSSlimnessEnthusiast > 20 && arcology.FSHedonisticDecadence === "unset") {
-				r += `${jsEither("fashionable", "sleek and attractive", "small and enticing")} `;
-			} else {
-				r += `${jsEither("small, sleek", "small but rounded", "rounded, small")} `;
-			}
-			r += `rear end. `;
-		} else if (child.butt <= 3) {
-			r += `${jsEither("big and healthy", "curved and plump", "healthy and plump")} derrière. `;
-		} else if (child.butt <= 4) {
-			r += `${jsEither("big bubble", "curvy and enticing", "juicy and large")} butt. `;
-		} else if (child.butt <= 5) {
-			r += `${jsEither("huge", "juicy and huge", "massive and undeniable")} rear end. `;
-		} else if (child.butt <= 6) {
-			r += `${jsEither("enormous", "truly massive")} posterior. `;
-		} else if (child.butt <= 7) {
-			r += `${jsEither("gigantic", "titanic")} ass. `;
-		} else if (child.butt <= 10) {
-			r += `${jsEither("gigantic", "titanic")} ass. `;
-			if (!canWalk(child)) {
-				r += ` It's so big it would jiggle as ${he} walked — if ${he} could walk. `;
-			} else {
-				r += ` It's so big it jiggles as ${he} walks. `;
-			}
-		} else if (child.butt <= 14) {
-			r += `${jsEither("cushion-like", "hall-crowding")} ass. `;
-			if (!canWalk(child)) {
-				r += ` It's so big it would jiggle nonstop as ${he} walked — if ${he} could walk. `;
-			} else {
-				r += ` It's so big it jiggles nonstop as ${he} walks. `;
-			}
-		} else {
-			r += `${jsEither("bean bag sized", "room-crowding")} ass. `;
-			if (!canWalk(child)) {
-				r += ` It's so massive it would jiggle endlessly as ${he} walked — if ${he} could walk. `;
-			} else {
-				r += ` It's so massive it jiggles endlessly as ${he} walks. `;
-			}
-		}
-
-		r += hips(child);
-
-		if (V.showImplantEffects) {
-			if (child.buttImplant === 1) {
-				r += `${His} butt implants make ${his} ass look especially pert no matter how ${he} moves. `;
-			} else if (child.buttImplant === 2) {
-				r += `${His} big butt implants make ${his} ass jut out curvaceously whatever pose ${he}'s in. `;
-			} else if (child.buttImplant > 17) {
-				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} immense ass dominates ${his} surroundings with its unyielding mass. `;
-			} else if (child.buttImplant > 12) {
-				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} ass looks like someone shoved a pair of ready to burst weather balloons in ${his} buttcheeks. `;
-			} else if (child.buttImplant > 7) {
-				r += `${He} has oversized ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it is completely obvious. Whatever ${his} position, ${his} ass looks like someone shoved a pair of overinflated beachballs in ${his} buttcheeks. `;
-			} else if (child.buttImplant > 2) {
-				r += `${He} has ${child.buttImplantType === "string" ? `engorged string` : `fillable butt`} implants, and it shows. Whatever ${his} position, ${his} ass looks just as artificially enticing. `;
-			}
-		}
-
-		if (arcology.FSTransformationFetishist !== "unset") {
-			if (child.buttImplant > 0) {
-				r += `${His} rear is about Math.floor((child.buttImplant/child.butt)*100)>>% implant. `;
-			}
-		}
-		if (arcology.FSTransformationFetishist > 20) {
-			if (arcology.FSSlimnessEnthusiast !== "unset") {
-				if (child.butt >= 3) {
-					if (child.buttImplant / child.butt < .25) {
-						r += `${His} ass is <span class="red">disgustingly natural</span> for its size. `;
-					} else {
-						r += `${His} asscheeks are <span class="green">obviously implants,</span> as they should be. `;
-					}
-				}
-			} else {
-				if (child.butt >= 6) {
-					if (child.buttImplant / child.butt > .5) {
-						r += `${His} ass is <span class="red">disgustingly natural</span> for its size. `;
-					} else {
-						r += `${His} asscheeks are <span class="green">obviously implants,</span> as they should be. `;
-					}
-				}
-			}
-		}
-
-		if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) {
-			if (child.butt > 6 && arcology.FSAssetExpansionist !== "unset") {
-				r += `It's too big for the fashionable feminine ideal. `;
-			} else if (child.butt > 4 && arcology.FSAssetExpansionist !== "unset") {
-				r += `It's bigger than expected for the fashionable feminine ideal, but your arcology loves huge butts, so it's not a surprise. `;
-			} else if (child.butt > 4) {
-				r += `It's too big for the fashionable feminine ideal. `;
-			} else if (child.butt < 3) {
-				r += `It's too small for the fashionable feminine ideal. `;
-			}
-		} else if (arcology.FSSlimnessEnthusiastLaw && child.butt > 1) {
-			r += `It's way too big for the fashionable feminine ideal. `;
-		} else if (arcology.FSHedonisticDecadenceLaw2 && child.butt < 5) {
-			r += `It's too small for the fashionable feminine ideal. `;
-		}
-
-		if (child.physicalAge <= 3) {
-			if (child.butt >= 8) {
-				if (canWalk(child)) {
-					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
-					if (child.muscles > 95) {
-						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
-					} else if (child.muscles > 30) {
-						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
-					} else if (child.muscles > 5) {
-						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
-					} else {
-						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
-					}
-				} else {
-					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
-				}
-			}
-		}
-
-		if (child.butt > 15) {
-			if (V.buttAccessibility) {
-				r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
-			} else {
-				r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
-			}
-			r += `wider than a standard doorway. `;
-		}
-
-		if (child.physicalAge <= 12) {
-			if (child.butt >= 12) {
-				if (canWalk(child)) {
-					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
-					if (child.muscles > 95) {
-						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
-					} else if (child.muscles > 30) {
-						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
-					} else if (child.muscles > 5) {
-						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
-					} else {
-						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
-					}
-				} else {
-					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
-				}
-			}
-
-			if (child.butt > 15) {
-				if (V.buttAccessibility) {
-					r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
-				} else {
-					r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
-				}
-				r += `wider than a standard doorway. `;
-			}
-		} else if (child.physicalAge > 12) {
-			if (child.butt > 17) {
-				if (canWalk(child)) {
-					r += `${His} butt is so massive that it is difficult for ${him} to move. `;
-					if (child.muscles > 95) {
-						r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
-					} else if (child.muscles > 30) {
-						r += `${He} can barely manage to get to ${his} feet unaided, and usually walks with ${his} hands sunk into ${his} buttcheeks to help take their weight. `;
-					} else if (child.muscles > 5) {
-						r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge cheeks on whatever nearby surfaces ${he} can. `;
-					} else {
-						r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated on ${his} enormous rear rather than stand. `;
-					}
-				} else {
-					r += `Together it is nearly the same size as ${his} torso, making ${him} about half butt. `;
-				}
-
-				if (child.butt > 15) {
-					if (V.buttAccessibility) {
-						r += `Fortunately for ${him}, the penthouse is adapted for daily life with a rear `;
-					} else {
-						r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with buttcheeks `;
-					}
-					r += `wider than a standard doorway. `;
-				}
-			}
-		}
-
-		if (child.markings === "heavily freckled") {
-			r += `${His} freckles are particularly dense across ${his} lower back. `;
-		} else if (child.markings === "freckles") {
-			r += `${His} lower back is covered in a light speckling of freckles. `;
-		}
-
-		if (V.showBodyMods) {
-			r += tats.butt(child);
-		}
-
-		return r;
-	}
-
-	function clothingCorset(child) {
-		let
-			r = ``;
-
-		switch (child.clothes) {
-			case "a slave gown":
-				if (child.bellyAccessory === "a corset") {
-					r += `${His} gown has an elegant integral corset. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `${His} gown has extreme corsetage built into it. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is concealed by ${his} gown. `;
-				}
-				break;
-			case "a ball gown":
-				if (child.bellyAccessory === "a corset") {
-					r += `The dress has an elegant integral corset. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `The dress has extreme corsetage built into it. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is hidden by ${his} gown. `;
-				}
-				break;
-			case "a mini dress":
-				if (child.bellyAccessory === "a corset") {
-					r += `The dress also cleverly doubles as an overbust corset. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `The dress also cleverly doubles as an extreme overbust corset. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is hidden by ${his} dress. `;
-				}
-				break;
-			case "a schoolgirl outfit":
-				if (child.bellyAccessory === "a corset") {
-					r += `The outline of ${his} corset can be seen through ${his} blouse. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `The outline of ${his} absurd corsetage can be seen through ${his} blouse. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band can be seen under ${his} blouse. `;
-				}
-				break;
-			case "a tube top":
-				if (child.bellyAccessory === "a corset") {
-					r += `${His} sturdy corset is completely exposed. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `${His} extreme corsetage is completely exposed. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is completely exposed. `;
-				}
-				break;
-			case "a tank-top":
-			case "a t-shirt":
-			case "an oversized t-shirt":
-				if (child.bellyAccessory === "a corset") {
-					r += `${His} sturdy corset is hidden by ${his} clothing. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `${His} extreme corsetage is hidden by ${his} clothing. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is hidden by ${his} clothing. `;
-				}
-				break;
-			default:
-				if (child.bellyAccessory === "a corset") {
-					r += `${His} corset is ${his} only real piece of clothing. `;
-				} else if (child.bellyAccessory === "an extreme corset") {
-					r += `${His} extreme corset is ${his} only real piece of clothing. `;
-				} else if (child.bellyAccessory === "a support band") {
-					r += `${His} support band is ${his} only real piece of clothing. `;
-				}
-		}
-
-		return r;
-	}
-
-	function collar(child) {
-		let
-			r = ``,
-			daddy,
-			pregCollar = jsEither(1, 2, 3);
-
-		switch (child.collar) {
-			case "uncomfortable leather":
-				r += `${He} is wearing an uncomfortable leather collar with a useful steel ring in front. `;
-				break;
-			case "dildo gag":
-				r += `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It holds a ring gag in ${his} mouth, into which slots a formidable inward-facing dildo that reaches down ${his} throat. It can be removed to facefuck ${him}. `;
-				break;
-			case "massive dildo gag":
-				r += `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It acts as an anchor for an enormous inward-facing dildo that reaches deep down ${his} throat. The sheer size of the phallus forces ${his} mouth as wide as it will go and considerably bulges ${his} throat. Fortunately for ${him}, it is designed to allow ${him} to be able to breathe through ${his} nose; though when removed, the poor ${girl} finds ${himself} incapable of closing ${his} mouth for some time. `;
-				break;
-			case "preg biometrics":
-				if (child.pregSource > 0) {
-					daddy = findFather(child.pregSource), daddy = daddy.slaveName;
-				}
-
-				r += `${He} is wearing a heavy metal collar with a digital display; it currently reads: `;
-				if (child.preg > 0 && !child.pregKnown) {
-					r += `"I might be preggers! Rub my belly for luck!" `;
-				} else {
-					if (pregCollar === 1) {
-						if (child.pregWeek < 0) {
-							r += `"I'm a mommy now!" `;
-						} else if (!child.pregKnown) {
-							r += `"Knock me up!" `;
-						} else if (child.pregKnown) {
-							r += `"${child.pregType === 0 ? `1` : `${child.pregType}`} bab${child.pregType > 1 ? `ies` : `y`} on board!" `;
-						} else {
-							r += `"I'm infertile!" `;
-						}
-					} else if (pregCollar === 2) {
-						if (child.pregWeek < 0) {
-							r += `"${num(child.pregWeek * -1)} week${child.pregWeek !== -1 ? `s` : ``} until I can get preggers again!" `;
-						} else if (child.pregKnown) {
-							r += `"${40-child.preg} weeks till I pop!" `;
-						} else {
-							r += `"My womb needs filling!" `;
-						}
-					} else {
-						if (child.pregWeek < 0) {
-							r += `"I can't wait for my belly to swell with life again!" `;
-						} else if (!child.pregKnown) {
-							r += `"Put a baby in me today!" `;
-						} else if (child.pregSource === -1) {
-							r += `"Womb claimed by my ${WrittenMaster(child)}!" `;
-						} else if (child.pregSource === -2 || child.pregSource === 0) {
-							r += `"Baby made by slutting around!" `;
-						} else if (child.pregSource === -7) {
-							r += `"My baby was made with science!" `;
-						} else if (child.pregSource === -9) {
-							r += `"Futanari Sisters, now two for the price of one!" `;
-						} else if (child.pregSource > 0) {
-							r += `"Womb claimed by ${daddy}!" `;
-						} else {
-							r += `"Put a baby in me today!" `;
-						}
-					}
-				}
-				break;
-			case "silk ribbon":
-				r += `${He} is wearing a tight silk ribbon fitted to ${his} neck; it is oddly elegant. `;
-				break;
-			case "tight steel":
-				r += `${He} is wearing a tight steel collar whose restricting metal touch ${he} cannot escape. `;
-				break;
-			case "porcelain mask":
-				r += `${He} is wearing a beautiful porcelain mask to hide ${his} unsightly facial features. `;
-				break;
-			case "shock punishment":
-				r += `${He} is wearing a utilitarian collar with a punishment device at ${his} throat to administer agonizing shocks. `;
-				break;
-			case "neck corset":
-				r += `${He} is wearing a fitted leather neck corset that constricts ${his} breathing and holds ${his} head rigidly upright. `;
-				break;
-			case "stylish leather":
-				r += `${He} is wearing a stylish leather collar buckled in the front, a classic accessory for the well behaved slave. `;
-				break;
-			case "satin choker":
-				r += `${He} is wearing a steel reinforced black satin choker that is at once elegant and functional. `;
-				break;
-			case "heavy gold":
-				r += `${He} is wearing a heavy gold collar, an outstanding bit of ostentation. `;
-				break;
-			case "pretty jewelry":
-				r += `${He} is wearing a pretty slave collar that can almost be mistaken for jewelry. `;
-				break;
-			case "bell collar":
-				r += `${He} is wearing a comfortable leather collar with a small brass bell at ${his} throat. `;
-				break;
-			case "leather with cowbell":
-				r += `${He} is wearing a comfortable leather collar with a small steel cowbell at ${his} throat. `;
-				break;
-			case "bowtie":
-				r += `${He} is wearing the collar from a white formal shirt, and a black bowtie, though these conceal an actual collar that works perfectly well for restraint. `;
-				break;
-			case "ancient Egyptian":
-				r += `${He} is wearing a beautiful golden wesekh, a collar that spreads from ${his} neck out onto both shoulders and down ${his} front. `;
-				break;
-			case "ball gag":
-				r += `${He} is wearing a mouth filling, ${child.makeup === 3 || child.makeup === 6 || child.makeup === 8 ? `${child.hColor}` : `red`} ball-shaped gag that prevents ${him} from uttering a word while keeping ${him} uncomfortably aware of ${his} status. `;
-				break;
-			case "bit gag":
-				r += `${He} is wearing a jaw spreading, bar-shaped gag that prevents ${him} from speaking while keeping ${him} uncomfortably aware of ${his} status. `;
-				break;
-			case "cruel retirement counter":
-			case "nice retirement counter":
-				r += `${He} is wearing a ${child.collar === "cruel retirement counter" ? `heavy metal collar` : `nice collar, almost a necklace,`} with a small numerical display reading `;
-				if (V.policies.retirement.sex > 0) {
-					r += `${V.policies.retirement.sex - (child.counter.oral + child.counter.anal + child.counter.vaginal + child.counter.penetrative + child.counter.mammary)}, for the number of cocks between ${him} and ${his} freedom. `;
-				} else if (V.policies.retirement.milk > 0) {
-					r += `${V.policies.retirement.milk - child.counter.milk}, for the amount of milk ${he} has yet to give. `;
-				} else if (V.policies.retirement.cum > 0) {
-					r += `${V.policies.retirement.cum - child.counter.cum}, for the amount of cum ${he} has yet to give. `;
-				} else if (V.policies.retirement.births > 0) {
-					r += `${V.policies.retirement.births - child.counter.births}, for the number of pregnancies still between ${him} and freedom. `;
-				} else if (V.policies.retirement.kills > 0) {
-					r += `${V.policies.retirement.kills - child.counter.pitKills}, for the number of lives still between ${him} and freedom. `;
-				} else if (V.policies.retirement.physicalAgePolicy === 0) {
-					r += `${(365*(V.retirementAge-child.actualAge))+(7*(52-child.birthWeek))}, the number of days of sexual slavery ahead of ${him}. `;
-				} else {
-					r += `${(365*(V.retirementAge-child.physicalAge))+(7*(52-child.birthWeek))}, the number of days of sexual slavery ahead of ${him}. `;
-				}
-				break;
-		}
-
-		return r;
-	}
-
-	function crotch(child) {
-		let
-			r = ``;
-
-		if (V.showClothing && !V.saleDescription) {
-			switch (child.clothes) {
-				case "a slave gown":
-					r += `${child.slaveName}'s `;
-					if (child.dick > 6) {
-						r += `lovely gown cannot hide the fact that something massive is lurking between ${his} legs. `;
-					} else if (child.dick > 3) {
-						r += `cock tents the front of ${his} lovely gown. `;
-					} else if (child.dick > 0 && child.vagina > -1) {
-						r += `hermaphroditic genitalia are hidden by ${his} lovely gown. `;
-					} else if (child.dick > 0) {
-						r += `cock is hidden by ${his} lovely gown. `;
-					} else if (child.vagina === -1) {
-						r += `featureless groin is concealed by ${his} lovely gown. `;
-					} else {
-						r += `pussy is concealed by ${his} lovely gown. `;
-					}
-					break;
-				case "a ball gown":
-					r += `${child.slaveName}'s `;
-					if (child.dick > 3) {
-						r += `cock tents the front of ${his} fabulous silken ball gown. `;
-					} else if (child.dick > 0 && child.vagina > -1) {
-						r += `hermaphroditic genitalia are hidden by ${his} fabulous silken ball gown. `;
-					} else if (child.dick > 0) {
-						r += `cock is hidden by ${his} fabulous silken ball gown. `;
-					} else if (child.vagina === -1) {
-						r += `featureless groin is hidden by ${his} fabulous silken ball gown. `;
-					} else {
-						r += `pussy is concealed by ${his} fabulous silken ball gown. `;
-					}
-					break;
-				case "a mini dress":
-					r += `${child.slaveName}'s `;
-					if (child.dick > 5 && canAchieveErection(child) && child.devotion > 20 && child.belly >= 5000) {
-						r += `massive erection is agonizingly pinned to the front of ${his} ${child.bellyPreg > 2000 ? `gravid` : bellyImplant > 2000 ? `rounded` : `swollen`} belly, entirely visible against the straining fabric of ${his} dress. `;
-					} else if (child.dick > 5 && canAchieveErection(child) && child.devotion > 20) {
-						r += `massive erection ascends up ${his} chest, entirely visible against the straining fabric of ${his} dress. `;
-					} else if (child.dick > 3 && canAchieveErection(child) && child.devotion > 20 && child.belly >= 5000) {
-						r += `erection lies flush against the bottom of ${his} ${child.bellyPreg > 2000 ? `gravid` : bellyImplant > 2000 ? `rounded` : `swollen`} stomach, visible under the tight fabric of ${his} dress. `;
-					} else if (child.dick > 3 && canAchieveErection(child) && child.devotion > 20) {
-						r += `erection lies flush against ${his} stomach, visible under the tight fabric of ${his} dress. `;
-					} else if (child.dick > 5) {
-						r += `short dress can't possibly conceal ${his} huge cock; its lower half sticks out below the hemline. `;
-					} else if (child.dick > 3) {
-						r += `short dress can't possibly conceal ${his} big cock; its head peeks out below the hemline. `;
-					} else if (child.dick > 0 && child.vagina > -1) {
-						r += `short dress scarcely covers the bulge of ${his} cock, while leaving a hint of ${his} bare pussy visible below the hemline. `;
-					} else if (child.dick > 0) {
-						r += `short dress scarcely covers the bulge of ${his} cock. `;
-					} else if (child.chastityVagina) {
-						r += `short dress leaves a hint of ${his} polished chastity belt below the hemline. `;
-					} else if (child.chastityAnus) {
-						r += `short dress leaves a hint of ${his} polished anal chastity belt below the hemline. `;
-					} else if (child.vagina === -1) {
-						r += `short dress leaves a hint of ${his} featureless groin below its hemline. `;
-					} else {
-						r += `short dress leaves a hint of ${his} bare pussy below the hemline. `;
-					}
-					break;
-				case "a schoolgirl outfit":
-					if (child.dick > 3) {
-						r += `${child.slaveName}'s dickhead is visible, swinging below the hem of ${his} skirt. `;
-					} else if (child.dick > 0) {
-						r += `Something is pushing against the front of ${child.slaveName}'s plaid skirt. `;
-					} else if (child.vagina === -1) {
-						r += `${child.slaveName}'s plaid skirt lifts to show off ${his} featureless groin. `;
-					} else {
-						r += `${child.slaveName}'s plaid skirt lifts to show off ${his} pussy with the slightest provocation. `;
-					}
-					break;
-				case "a tank-top":
-				case "a tube top":
-				case "a t-shirt":
-					if (child.dick > 6) {
-						r += `${his} outfit does nothing to conceal ${his} swinging cock. `;
-					} else if (child.dick > 0 && child.vagina > -1) {
-						r += `${child.slaveName}'s outfit does nothing to conceal ${his} hermaphroditic genitalia. `;
-					} else if (child.dick > 0) {
-						r += `${child.slaveName}'s outfit does nothing to conceal ${his} cock. `;
-					} else if (child.vagina === -1) {
-						r += `${child.slaveName}'s outfit does nothing to conceal ${his} featureless groin. `;
-					} else {
-						r += `${child.slaveName}'s outfit does nothing to conceal ${his} pussy. `;
-					}
-					break;
-				default:
-					if (!child.chastityPenis) {
-						if (child.vagina > -1) {
-							r += `${child.slaveName}'s ${child.dick > 0 ? `hermaphrodite genitalia are` : `pussy is`} bare and available. `;
-						} else if (child.dick > 0) {
-							r += `${child.slaveName}'s `;
-
-							switch (child.dick) {
-								case 10:
-									r += `inhuman cock hangs naked. `;
-									break;
-								case 9:
-									r += `absurd cock hangs naked. `;
-									break;
-								case 8:
-									r += `titanic${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
-									break;
-								case 7:
-									r += `gigantic${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
-									break;
-								case 6:
-									r += `huge${!canAchieveErection(child) ? `, flaccid` : ``} cock hangs naked. `;
-									break;
-								case 5:
-									r += `imposing${!canAchieveErection(child) ? `, flaccid` : ``} cock swings naked. `;
-									break;
-								case 4:
-									r += `big${!canAchieveErection(child) ? `, flaccid` : ``} cock dangles naked. `;
-									break;
-								case 3:
-									r += `${!canAchieveErection(child) ? ` flaccid` : ``} cock dangles bare. `;
-									break;
-								case 2:
-									r += `little${!canAchieveErection(child) ? ` flaccid` : ``} dick is bare. `;
-									break;
-								case 1:
-									r += `tiny${!canAchieveErection(child) ? ` flaccid` : ``} dick is bare. `;
-									break;
-								default:
-									r += `hypertrophied cock hangs naked. `;
-									break;
-							}
-						} else {
-							r += `${child.slaveName}'s ${child.balls > 0 ? `lonely balls are` : `featureless groin is`} bare and vulnerable. `;
-						}
-					}
-					break;
-			}
-		}
-
-		return r;
-	}
-
-	function dick(child) {
-		let
-			r = ``,
-			scrotalFullness = child.scrotum - child.balls;
-
-		if (child.dick > 0) {
-			switch (child.dick) {
-				case 10:
-					if (V.showDickCMs) {
-						r += `${His} awe-inspiring${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around ${dickToEitherUnit(child.dick)} long, `;
-					} else {
-						r += `${He} has an awe-inspiring${V.seeCircumcision ? `, uncut` : ` circumcised`} penis, `;
-					}
-					r += `a true masterpiece of modern growth hormone treatment, `;
-					break;
-				case 9:
-					if (V.showDickCMs) {
-						r += `${His} monstrous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long, `;
-					} else {
-						r += `${He} has a monstrous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
-					}
-					r += `a work of modern pharmacological art, `;
-					break;
-				case 8:
-					if (V.showDickCMs) {
-						r += `${His} truly imposing${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long when as hard as it can get, `;
-					} else {
-						r += `${He} has a truly imposing${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
-					}
-					r += `an obvious product of modern growth hormones, `;
-					break;
-				case 7:
-					if (V.showDickCMs) {
-						r += `${His} massive${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long when as hard as it can get, `;
-					} else {
-						r += `${He} has a massive${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
-					}
-					r += `larger than a dick can grow naturally, `;
-					break;
-				case 6:
-					r += `${showDickCMs ? `${His} enormous${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has an enormous${V.seeCircumcision ? `, uncut,` : `, circumcised,`} penis`}, a rival to the world's largest natural dicks, `;
-					break;
-				case 5:
-					r += `${showDickCMs ? `${His} huge${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is more than${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a huge${V.seeCircumcision ? `, uncut,` : `, circumcised,`} penis`}, large enough to be sexually inconvenient, `;
-					break;
-				case 4:
-					r += `${showDickCMs ? `${His} large${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a large${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, big enough to be a source of pride on a male, `;
-					break;
-				case 3:
-					r += `${showDickCMs ? `${His} average-sized${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`}s erect` : `${He} has an average-sized${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, `;
-					break;
-				case 2:
-					r += `${showDickCMs ? `${His} small${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis ${canAchieveErection(child) ? `is around${dickToEitherUnit(child.dick)} long when` : `would be around${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has a small${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis`}, little enough to be a source of embarrassment on a male, `;
-					break;
-				case 1:
-					r += `${showDickCMs ? `${His}${V.seeCircumcision ? `, uncut` : ` circumcised`} micropenis ${canAchieveErection(child) ? `is less than${dickToEitherUnit(child.dick)} long when` : `would be less than${dickToEitherUnit(child.dick)} long if it could become`} erect` : `${He} has ${V.seeCircumcision ? `an uncut` : `a circumcised`} micropenis`}, `;
-					break;
-				default:
-					if (V.showDickCMs) {
-						r += `${His} mind-shattering${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis is around${dickToEitherUnit(child.dick)} long, `;
-					} else {
-						r += `${He} has a mind-shattering${V.seeCircumcision ? `, uncut` : ` circumcised`}, penis, `;
-					}
-					r += `a true masterpiece of modern growth hormone treatment, `;
-					break;
-			}
-
-			if (!child.scrotum) {
-				if (child.vagina > -1) {
-					r += `and is right above ${his} vagina. `;
-				} else {
-					r += `and rests above nothing but smooth, sensitive skin until `;
-
-					switch (child.anus) {
-						case 0:
-							r += `the tiny crinkle of ${his} virgin asshole. `;
-							break;
-						case 1:
-							r += `${his} tight little rosebud. `;
-							break;
-						case 2:
-							r += `the bottom of the vertical slit formed by ${his} rear pussy. `;
-							break;
-						case 3:
-							r += `the bottom of the soft slit formed by ${his} lewd rear pussy. `;
-							break;
-						default:
-							r += `the edge of ${his} open anal gape. `;
-							break;
-					}
-				}
-			} else {
-				switch (child.balls) {
-					case 10:
-						r += `and ${he} has an inhuman pair of testicles${V.showDickCMs ? `, nearly ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 9:
-						r += `and ${he} has a titanic pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 8:
-						r += `and ${he} has a gigantic pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 7:
-						r += `and ${he} has a monstrous pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 6:
-						r += `and ${he} has an enormous pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 5:
-						r += `and ${he} has a huge pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 4:
-						r += `and ${he} has a big pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 3:
-						r += `and ${he} has an average pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 2:
-						r += `and ${he} has a small pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}. `;
-						break;
-					case 1:
-						r += `and ${his} testicles are so small they have retreated up into ${his} abdomen. `;
-						break;
-					case 0:
-						if (child.dick === 2) {
-							r += `and ${he} lacks testicles. `;
-						} else if (child.dick === 1) {
-							r += `and ${he} lacks testicles: ${his} vestigial dick is functionally a large, soft clit. `;
-						} else {
-							r += `but ${he} lacks testicles. `;
-						}
-						break;
-					default:
-						r += `and ${he} has a hypertrophied, clearly unnatural pair of testicles${V.showDickCMs ? `, about ${ballsToEitherUnit(child.balls)} long` : ``}, a true masterpiece of modern growth hormone treatment. `;
-						break;
-				}
-			}
-
-			if (child.balls > 0 && child.scrotum > 0) {
-				if (child.balls > 90) {
-					if (scrotalFullness < -1) {
-						r += `${His} poor scrotum is agonizingly overfilled and looks ready to burst. ${He} must be in constant pain. `;
-					} else if (scrotalFullness === -1) {
-						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in constant discomfort. `;
-					} else if (scrotalFullness === 0) {
-						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
-					} else {
-						r += `Their weight and size has stretched ${his} scrotum downward, so that they ${hasBothLegs(child) ? `drag along the floor` : `hang far from ${his} legless torso`}. `;
-					}
-				} else if (child.balls >= 20) {
-					if (scrotalFullness < -1) {
-						r += `${His} poor scrotum is agonizingly overfilled and taut. ${He} must be in constant pain. `;
-					} else if (scrotalFullness === -1) {
-						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in constant discomfort. `;
-					} else if (scrotalFullness === 0) {
-						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
-					} else {
-						r += `Their weight and size has stretched ${his} scrotum downward, so that they dangle ${hasBothLegs(child) ? `to ${his} knees` : `quite the distance from ${his} legless torso`}. `;
-					}
-				} else if (child.balls > 5) {
-					if (scrotalFullness < -1) {
-						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in agony. `;
-					} else if (scrotalFullness === -1) {
-						r += `They're held against ${his} base by a tight scrotum that permits them little movement. `;
-					} else if (scrotalFullness === 0) {
-						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
-					} else {
-						r += `Their weight has stretched ${his} scrotum downward, so that they dangle ${hasBothLegs(child) ? `halfway to ${his} knees` : `some distance from ${his} legless torso`}. `;
-					}
-				} else if (child.balls > 3) {
-					if (scrotalFullness < -1) {
-						r += `They're too big for ${his} tiny scrotum, which is stretched tight over each ball. `;
-					} else if (scrotalFullness === -1) {
-						r += `They're held against ${his} base by a tight scrotum that permits them little movement. `;
-					} else if (scrotalFullness === 0) {
-						r += `${His} soft scrotum allows them to rest comfortably ${hasBothLegs(child) ? `between ${his} legs` : `beneath ${his} legless torso`}. `;
-					} else {
-						r += `${He} has a loose, dangling scrotum that allows them to swing ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
-					}
-				} else if (child.balls > 1) {
-					if (scrotalFullness === -1) {
-						r += `They're held tightly by a very minimal scrotum that turns them into a soft little bump. `;
-					} else if (scrotalFullness === 0) {
-						r += `${His} comfortable little scrotum allows them to rest softly. `;
-					} else {
-						r += `They're almost lost in ${his} big soft scrotum, wrinkled for lack of anything to fill it properly. `;
-					}
-				} else {
-					if (scrotalFullness === 0) {
-						r += `${He} has a soft little trace of scrotum. `;
-					} else {
-						r += `They've left ${his} scrotum soft and empty. `;
-					}
-				}
+
+			if (child.balls > 0 && child.scrotum > 0) {
+				if (child.balls > 90) {
+					if (scrotalFullness < -1) {
+						r += `${His} poor scrotum is agonizingly overfilled and looks ready to burst. ${He} must be in constant pain. `;
+					} else if (scrotalFullness === -1) {
+						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in constant discomfort. `;
+					} else if (scrotalFullness === 0) {
+						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
+					} else {
+						r += `Their weight and size has stretched ${his} scrotum downward, so that they ${hasBothLegs(child) ? `drag along the floor` : `hang far from ${his} legless torso`}. `;
+					}
+				} else if (child.balls >= 20) {
+					if (scrotalFullness < -1) {
+						r += `${His} poor scrotum is agonizingly overfilled and taut. ${He} must be in constant pain. `;
+					} else if (scrotalFullness === -1) {
+						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in constant discomfort. `;
+					} else if (scrotalFullness === 0) {
+						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
+					} else {
+						r += `Their weight and size has stretched ${his} scrotum downward, so that they dangle ${hasBothLegs(child) ? `to ${his} knees` : `quite the distance from ${his} legless torso`}. `;
+					}
+				} else if (child.balls > 5) {
+					if (scrotalFullness < -1) {
+						r += `${His} poor scrotum is so overfilled, every little vein is visible. ${He} must be in agony. `;
+					} else if (scrotalFullness === -1) {
+						r += `They're held against ${his} base by a tight scrotum that permits them little movement. `;
+					} else if (scrotalFullness === 0) {
+						r += `${His} comfortable scrotum allows them to hang massively ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
+					} else {
+						r += `Their weight has stretched ${his} scrotum downward, so that they dangle ${hasBothLegs(child) ? `halfway to ${his} knees` : `some distance from ${his} legless torso`}. `;
+					}
+				} else if (child.balls > 3) {
+					if (scrotalFullness < -1) {
+						r += `They're too big for ${his} tiny scrotum, which is stretched tight over each ball. `;
+					} else if (scrotalFullness === -1) {
+						r += `They're held against ${his} base by a tight scrotum that permits them little movement. `;
+					} else if (scrotalFullness === 0) {
+						r += `${His} soft scrotum allows them to rest comfortably ${hasBothLegs(child) ? `between ${his} legs` : `beneath ${his} legless torso`}. `;
+					} else {
+						r += `${He} has a loose, dangling scrotum that allows them to swing ${hasBothLegs(child) ? `between ${his} legs` : `from ${his} legless torso`}. `;
+					}
+				} else if (child.balls > 1) {
+					if (scrotalFullness === -1) {
+						r += `They're held tightly by a very minimal scrotum that turns them into a soft little bump. `;
+					} else if (scrotalFullness === 0) {
+						r += `${His} comfortable little scrotum allows them to rest softly. `;
+					} else {
+						r += `They're almost lost in ${his} big soft scrotum, wrinkled for lack of anything to fill it properly. `;
+					}
+				} else {
+					if (scrotalFullness === 0) {
+						r += `${He} has a soft little trace of scrotum. `;
+					} else {
+						r += `They've left ${his} scrotum soft and empty. `;
+					}
+				}
 			}
 
 			if (child.mpreg && canAchieveErection(child) && child.belly >= 10000 && child.prostate > 0) {
@@ -8477,3132 +2028,2130 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 						}
 
 						if (child.balls > 90) {
-							if (V.ballsAccessibility) {
-								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
-							} else {
-								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
-							}
-							r += `wider than a standard doorway. `;
-						}
-					}
-				} else if (child.physicalAge <= 12) {
-					if (child.balls >= 25) {
-						if (canWalk(child)) {
-							r += `${His} balls are so massive that it is difficult for ${him} to move. `;
-							if (child.muscles > 95) {
-								r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
-							} else if (child.muscles > 30) {
-								r += `${He} can barely manage to get to ${his} feet unaided, and usually walks carrying ${his} testicles in any way ${he} can. `;
-							} else if (child.muscles > 5) {
-								r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge balls on the ground whenever ${he} can. `;
-							} else {
-								r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated so ${his} enormous balls don't weigh ${him} down as much. `;
-							}
-						} else if (child.balls >= 100) {
-							r += `${His} testicles are each nearly the same size as ${him}, making ${him} about mostly testicle. `;
-						} else {
-							r += `${His} testicles are each nearly the same size as ${his} torso, making ${him} about mostly testicle. `;
-						}
-
-						if (child.balls > 90) {
-							if (V.ballsAccessibility) {
-								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
-							} else {
-								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
-							}
-							r += `wider than a standard doorway. `;
-						}
-					}
-				} else {
-					if (child.balls >= 25) {
-						if (canWalk(child)) {
-							r += `${His} balls are so massive that it is difficult for ${him} to move. `;
-							if (child.muscles > 95) {
-								r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
-							} else if (child.muscles > 30) {
-								r += `${He} can barely manage to get to ${his} feet unaided, and usually walks carrying ${his} testicles in any way ${he} can. `;
-							} else if (child.muscles > 5) {
-								r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge balls on the ground whenever ${he} can. `;
-							} else {
-								r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated so ${his} enormous balls don't weigh ${him} down as much. `;
-							}
-						} else if (child.balls >= 100) {
-							r += `Together, ${his} testicles are nearly the same size as ${him}, making ${him} about half testicle. `;
-						} else {
-							r += `Together, ${his} testicles are nearly the same size as ${his} torso, making ${him} about half testicle. `;
-						}
-
-						if (child.balls > 90) {
-							if (V.ballsAccessibility) {
-								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
-							} else {
-								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
-							}
-							r += `wider than a standard doorway. `;
-						}
-					}
-				}
-
-
-
-
-				if (child.prostate > 2) {
-					r += `The area above ${his} crotch has a slight swell to it from ${his} prostate implant. A constant dribble of precum streams from the hole and down ${his} testicles; ${his} artificially hyperactive prostate keeps ${him} that way. `;
-				} else if (child.prostate > 1) {
-					r += `${He}'s got a string of precum dangling from the hole and down ${his} testicles; ${his} artificially hyperactive prostate keeps ${him} that way. `;
-				}
-
-				if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiac") {
-					r += `The aphrodisiacs have ${him} so horny that there's a ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum beading at`} the hole. `;
-				} else if (child.energy > 95) {
-					r += `As a nympho, ${he}'s almost always got a ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole. `;
-				} else if (child.fetishKnown) {
-					if (child.fetishStrength > 60) {
-						switch (child.fetish) {
-							case "buttslut":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being buttfucked. `;
-								break;
-							case "cumslut":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being facefucked. `;
-								break;
-							case "humiliation":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being humiliated. `;
-								break;
-							case "submissive":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about submission. `;
-								break;
-							case "dom":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about dominating someone. `;
-								break;
-							case "masochist":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about pain. `;
-								break;
-							case "sadist":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about hurting someone. `;
-								break;
-							case "pregnancy":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about getting someone pregnant. `;
-								break;
-							case "boobs":
-								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about boobs. `;
-								break;
-						}
-					}
-				}
-
-				if (child.prostate > 2) {
-					r += `This hole is normally almost invisible, making it absolutely shocking when ${he} orgasms and shoots a massive cumshot out of it. `;
-				} else if (child.balls !== 0) {
-					r += `This hole is normally almost invisible, making it quite surprising when ${he} orgasms and shoots cum out of it. `;
-				} else if (child.prostate !== 0) {
-					r += `This hole is normally almost invisible, though it does leak some watery ejaculate when ${he} orgasms. `;
-				}
-
-				if (child.balls >= 50) {
-					r += `${His} testicles are so big and sensitive that ${he} can barely move without stopping to let shivers run down ${his} body. It takes a great deal of control to not release their contents in huge spurts down ${his} balls. `;
-				} else if (child.balls >= 37) {
-					r += `${His} perpetual stream of semen-laced precum running down ${his} balls leaves a mess on the floor wherever ${he} goes. `;
-				} else if (child.balls >= 25) {
-					r += `Parts of the constant dribble coming out of the hole are now white, a testament to just how much cum ${his} massive balls produce and how desperate they are for release. `;
-				} else if (child.balls >= 10) {
-					r += `${He} produces so much cum that ${his} dick uncontrollably dribbles precum wherever ${he} goes, leaving a trail of drops behind ${him}. `;
-				}
-
-				if (child.prostate > 2) {
-					r += `${His} ejaculate has a distinct clearness to it from the sheer amount of prostate fluid produced by ${his} overstimulated prostate. `;
-				}
-			} else {
-				if (child.prostate > 2) {
-					r += `The area above ${his} crotch has a slight swell to it from ${his} prostate implant. `;
-				}
-			}
-		}
-
-		if (!child.prostate) {
-			if (child.dick > 0 || child.balls > 0) {
-				if (child.genes === "XY") {
-					r += `Though it's not externally apparent, ${his} prostate has been removed, `;
-				} else {
-					r += `${He} is lacking a prostate, `;
-				}
-				r += `giving ${his} ejaculations less body${child.anus !== 0 ? ` and reducing the stimulation ${he} feels during anal sex` : ``}. `;
-			}
-		}
-
-		if (V.showBodyMods) {
-			r += tats.dick(child);
-			r += piercings.dick(child);
-		}
-		r += App.Desc.brand(child, "penis");
-		r += App.Desc.brand(child, "testicle");
-
-		return r;
-	}
-
-	function ears(child) {
-		let
-			r = ``;
-
-		switch (child.earShape) {
-			case "none":
-				if (child.earImplant) {
-					if (child.earT !== "none") {
-						r += `${He} has smooth skin where ${his} ears should be as ${his} hearing has been cybernetically rerouted to ${his} secondary ears. `;
-					} else {
-						r += `${He} has nothing but small, perforated metal disks where ${his} ears should be. `;
-					}
-				} else if (child.earwear === "none") {
-					r += `${He} has small unsightly holes on the sides of ${his} head. `;
-				} else {
-					r += `The sides of ${his} head are smooth where ${his} ears should be, but upon closer inspection it is revealed that `;
-					if (child.earwear === "hearing aids") {
-						r += `${his} ear canals are fitted with hearing aids capped with a skin-matching sheet to obscure the hole. `;
-					} else {
-						r += `${his} ear canals are filled with plugs with skin-matching caps. `;
-					}
-				}
-				break;
-			case "damaged":
-				r += `${His} outer ears have been severely damaged. `;
-				break;
-			case "normal":
-				r += `${He} has perfectly ordinary ears. `;
-				break;
-			case "robot":
-				r += `${He} has high tech cyber-ears that could be mistaken for headphones. `;
-				break;
-			case "pointy":
-				r += `${His} small, ${jsEither("elfin", "leaf-shaped", "pointed")} ears are quite cute and give ${him} an exotic appearance. `;
-				break;
-			case "elven":
-				r += `${He} has long, thin elven ears that ${jsEither(`tend to droop when ${he} is relaxed or sad`, `tend to waggle up and down when ${he} is excited`, `twitch at the slightest touch`)}. `;
-				break;
-			case "ushi":
-				r += `${He} has long, floppy cow ears. `;
-				break;
-		}
-
-		switch (child.earT) {
-			case "neko":
-				r += `${He} has cute, ${child.earTColor} cat ears on ${his} head; they `;
-				if (child.earImplant) {
-					r += `perk up at `;
-					if (child.devotion > 20) {
-						r += `the sound of your voice and `;
-					} else {
-						r += `sudden noises and `;
-					}
-					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
-				}
-				break;
-			case "inu":
-				r += `${He} has cute, ${child.earTColor} dog ears on ${his} head; they `;
-				if (child.earImplant) {
-					r += `perk up at `;
-					if (child.devotion > 20) {
-						r += `the sound of your voice and `;
-					} else {
-						r += `sudden noises and `;
-					}
-					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
-				}
-				break;
-			case "kit":
-				r += `${He} has elegant, ${child.earTColor} fox ears on ${his} head; they `;
-				if (child.earImplant) {
-					r += `perk up at `;
-					if (child.devotion > 20) {
-						r += `the sound of your voice and `;
-					} else {
-						r += `sudden noises and `;
+							if (V.ballsAccessibility) {
+								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
+							} else {
+								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
+							}
+							r += `wider than a standard doorway. `;
+						}
 					}
-					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
-				}
-				break;
-			case "tanuki":
-				r += `${He} has adorable, ${child.earTColor}, round tanuki ears on ${his} head; they `;
-				if (child.earImplant) {
-					r += `perk up at `;
-					if (child.devotion > 20) {
-						r += `the sound of your voice and `;
-					} else {
-						r += `sudden noises and `;
+				} else if (child.physicalAge <= 12) {
+					if (child.balls >= 25) {
+						if (canWalk(child)) {
+							r += `${His} balls are so massive that it is difficult for ${him} to move. `;
+							if (child.muscles > 95) {
+								r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
+							} else if (child.muscles > 30) {
+								r += `${He} can barely manage to get to ${his} feet unaided, and usually walks carrying ${his} testicles in any way ${he} can. `;
+							} else if (child.muscles > 5) {
+								r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge balls on the ground whenever ${he} can. `;
+							} else {
+								r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated so ${his} enormous balls don't weigh ${him} down as much. `;
+							}
+						} else if (child.balls >= 100) {
+							r += `${His} testicles are each nearly the same size as ${him}, making ${him} about mostly testicle. `;
+						} else {
+							r += `${His} testicles are each nearly the same size as ${his} torso, making ${him} about mostly testicle. `;
+						}
+
+						if (child.balls > 90) {
+							if (V.ballsAccessibility) {
+								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
+							} else {
+								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
+							}
+							r += `wider than a standard doorway. `;
+						}
 					}
-					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
-				}
-				break;
-			case "usagi":
-				r += `${He} has long, ${child.earTColor}, fluffy rabbit ears on ${his} head; they `;
-				if (child.earImplant) {
-					r += `perk up at `;
-					if (child.devotion > 20) {
-						r += `the sound of your voice and `;
-					} else {
-						r += `sudden noises and `;
+				} else {
+					if (child.balls >= 25) {
+						if (canWalk(child)) {
+							r += `${His} balls are so massive that it is difficult for ${him} to move. `;
+							if (child.muscles > 95) {
+								r += `However, ${he} is so powerfully built that ${he} can manage it with effort, using ${his} arms to support them. `;
+							} else if (child.muscles > 30) {
+								r += `${He} can barely manage to get to ${his} feet unaided, and usually walks carrying ${his} testicles in any way ${he} can. `;
+							} else if (child.muscles > 5) {
+								r += `${He} requires assistance to get to ${his} feet, and tries to rest ${his} huge balls on the ground whenever ${he} can. `;
+							} else {
+								r += `${He} cannot get to ${his} feet unaided, and prefers to remain seated so ${his} enormous balls don't weigh ${him} down as much. `;
+							}
+						} else if (child.balls >= 100) {
+							r += `Together, ${his} testicles are nearly the same size as ${him}, making ${him} about half testicle. `;
+						} else {
+							r += `Together, ${his} testicles are nearly the same size as ${his} torso, making ${him} about half testicle. `;
+						}
+
+						if (child.balls > 90) {
+							if (V.ballsAccessibility) {
+								r += `Fortunately for ${him}, the penthouse is adapted for daily life with balls `;
+							} else {
+								r += `${He} has trouble living in your penthouse, which is not designed for ${girl}s with testicles `;
+							}
+							r += `wider than a standard doorway. `;
+						}
 					}
-					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
-				break;
-			case "normal":
-				r += `${He} has ${child.earShape !== "none" ? `a second set` : `a pair`} of non-functioning ears grafted to the top of ${his} head. `;
-				break;
-		}
-
-		if (child.hears < 0) {
-			if (child.hears === -1) {
-				r += `${His} hearing is noticeably impaired, `;
-			} else if (child.hears < -1) {
-				r += `${He} is completely deaf, `;
-			}
 
-			if (child.hears < -1 && child.earShape === "none") {
-				r += `which is fitting due to ${his} lack of ears. `;
-			} else {
-				r += `but this isn't obvious just by looking at ${his} ears. `;
-			}
-		}
 
-		return r;
-	}
 
-	function face(child) {
-		let
-			r = ``;
 
-		r += `${His} <span class="pink">face is `;
-		switch (child.faceShape) {
-			case "masculine":
-				if (child.face < -95) {
-					r += `so ugly and masculine that ${his} designation as a slave girl is a mockery. `;
-				} else if (child.face < -40) {
-					r += `ugly and masculine, making ${him} a poor slave girl by appearance. `;
-				} else if (child.face < -10) {
-					r += `unattractively masculine. `;
-				} else if (child.face <= 10) {
-					r += `masculine, but not entirely unappealing. `;
-				} else if (child.face <= 40) {
-					r += `attractively masculine. `;
-				} else if (child.face <= 95) {
-					r += `quite handsome in a masculine way. `;
-				} else {
-					r += `the height of masculine handsomeness. `;
-				}
-				break;
-			case "androgynous":
-				if (child.face < -95) {
-					r += `disturbingly androgynous and terribly ugly. `;
-				} else if (child.face < -40) {
-					r += `ugly and androgynous; ${he} has neither masculine nor feminine appeal. `;
-				} else if (child.face < -10) {
-					r += `strangely androgynous, and rather unattractive. `;
-				} else if (child.face <= 10) {
-					r += `strangely androgynous. `;
-				} else if (child.face <= 40) {
-					r += `androgynous, and attractive enough that this ambiguity is interesting. `;
-				} else if (child.face <= 95) {
-					r += `gorgeously androgynous in a complex way that captures the eye. `;
-				} else {
-					r += `so gorgeously androgynous that ${he} tends to induce sexual confusion. `;
-				}
-				break;
-			case "cute":
-				if (child.face < -95) {
-					r += `very ugly, yet somehow cute; ${he}'s so unattractive that ${he} inspires pity. `;
-				} else if (child.face < -40) {
-					r += `ugly, but cute, with a pitiable appeal. `;
-				} else if (child.face < -10) {
-					r += `not attractive, but is appealingly cute. `;
-				} else if (child.face <= 10) {
-					r += `merely average, but is appealingly cute. `;
-				} else if (child.face <= 40) {
-					r += `both attractive and appealingly cute. `;
-				} else if (child.face <= 95) {
-					r += `beautiful, yet somehow also approachably cute. `;
-				} else {
-					r += `an impossibly perfect combination of beauty and girl-next-door cuteness. `;
-				}
-				break;
-			case "sensual":
-				if (child.face < -95) {
-					r += `very ugly, yet naturally slutty, promising a decent fuck despite its appearance. `;
-				} else if (child.face < -40) {
-					r += `ugly, but also slutty, promising a good fuck despite its appearance. `;
-				} else if (child.face < -10) {
-					r += `not attractive, but it has a certain sensual appeal. `;
-				} else if (child.face <= 10) {
-					r += `merely average, but undeniably sensual. `;
-				} else if (child.face <= 40) {
-					r += `both attractive and naturally sultry. `;
-				} else if (child.face <= 95) {
-					r += `both beautiful and sultry, bringing sex to mind naturally. `;
-				} else {
-					r += `very beautiful in a consummately sexual way. `;
-				}
-				break;
-			case "exotic":
-				if (child.face < -95) {
-					r += `very ugly and unusual, a real tragedy in flesh. `;
-				} else if (child.face < -40) {
-					r += `ugly and unusual, a real misfortune. `;
-				} else if (child.face < -10) {
-					r += `unattractive, and distinctive in its unattractiveness. `;
-				} else if (child.face <= 10) {
-					r += `quite average, but not uninteresting. `;
-				} else if (child.face <= 40) {
-					r += `attractive in an exotic and interesting way. `;
-				} else if (child.face <= 95) {
-					r += `exotic and beautiful, capable of catching the eye and keeping its gaze. `;
-				} else {
-					r += `very beautiful and exotic, almost to the point of alien fascination. `;
-				}
-				break;
-			default:
-				if (child.face < -95) {
-					r += `very ugly. `;
-				} else if (child.face < -40) {
-					r += `quite ugly. `;
-				} else if (child.face < -10) {
-					r += `unattractive. `;
-				} else if (child.face <= 10) {
-					r += `average and conventionally feminine. `;
-				} else if (child.face <= 40) {
-					r += `conventionally attractive. `;
-				} else if (child.face <= 95) {
-					r += `conventionally beautiful. `;
-				} else {
-					r += `the height of conventional feminine beauty. `;
+				if (child.prostate > 2) {
+					r += `The area above ${his} crotch has a slight swell to it from ${his} prostate implant. A constant dribble of precum streams from the hole and down ${his} testicles; ${his} artificially hyperactive prostate keeps ${him} that way. `;
+				} else if (child.prostate > 1) {
+					r += `${He}'s got a string of precum dangling from the hole and down ${his} testicles; ${his} artificially hyperactive prostate keeps ${him} that way. `;
 				}
-				break;
-		}
-		r += `</span> `;
-
-		if (child.weight > 190) {
-			r += `${His} face is quite fat with ample excess chins. `;
-		} else if (child.weight > 160) {
-			r += `${His} face is round and plump with a trio of extra chins. `;
-		} else if (child.weight > 130) {
-			r += `${His} face is chubby with an obvious second chin. `;
-		} else if (child.weight > 97) {
-			r += `${His} face is soft with barely a second chin. `;
-		}
 
-		if (child.markings === "beauty mark") {
-			if (child.face < -95) {
-				r += `It bears a severely disfiguring, discolored mark. `;
-			} else if (child.face < -40) {
-				r += `It bears a couple of unsightly moles. `;
-			} else if (child.face < -10) {
-				r += `It bears an ugly mole. `;
-			} else if (child.face <= 10) {
-				r += `${He} has a distinctive beauty mark. `;
-			} else if (child.face <= 40) {
-				r += `${He} has a nice beauty mark. `;
-			} else if (child.face <= 95) {
-				r += `${He} has a beauty mark that adds to ${his} distinctiveness. `;
-			} else {
-				r += `${He} has a beauty mark that makes ${him} really memorable. `;
-			}
-		}
+				if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiac") {
+					r += `The aphrodisiacs have ${him} so horny that there's a ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum beading at`} the hole. `;
+				} else if (child.energy > 95) {
+					r += `As a nympho, ${he}'s almost always got a ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole. `;
+				} else if (child.fetishKnown) {
+					if (child.fetishStrength > 60) {
+						switch (child.fetish) {
+							case "buttslut":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being buttfucked. `;
+								break;
+							case "cumslut":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being facefucked. `;
+								break;
+							case "humiliation":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about being humiliated. `;
+								break;
+							case "submissive":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about submission. `;
+								break;
+							case "dom":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about dominating someone. `;
+								break;
+							case "masochist":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about pain. `;
+								break;
+							case "sadist":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about hurting someone. `;
+								break;
+							case "pregnancy":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about getting someone pregnant. `;
+								break;
+							case "boobs":
+								r += `Judging by the ${child.prostate > 1 ? `constant flow of precum leaking from` : `little precum forming at`} the hole, ${he}'s probably fantasizing about boobs. `;
+								break;
+						}
+					}
+				}
 
-		if (child.faceImplant > 5) {
-			r += `${He}'s `;
-			if (child.faceImplant > 95) {
-				r += `had so much cosmetic surgery that ${his} face is located at the bottom of the uncanny valley ${child.face < -10 ? `in addition to its ugliness` : child.face <= 10 ? `the only thing really distinctive about it` : `its attractiveness notwithstanding`}. `;
-			} else if (child.faceImplant > 60) {
-				r += `obviously gotten a lot of facial cosmetic surgery. `;
-			} else if (child.faceImplant > 30) {
-				r += `noticeably received facial cosmetic surgery. `;
-			} else {
-				if (PC.skill.medicine >= 100) {
-					r += `Someone without your knowledge might miss it entirely. `;
+				if (child.prostate > 2) {
+					r += `This hole is normally almost invisible, making it absolutely shocking when ${he} orgasms and shoots a massive cumshot out of it. `;
+				} else if (child.balls !== 0) {
+					r += `This hole is normally almost invisible, making it quite surprising when ${he} orgasms and shoots cum out of it. `;
+				} else if (child.prostate !== 0) {
+					r += `This hole is normally almost invisible, though it does leak some watery ejaculate when ${he} orgasms. `;
 				}
-			}
 
-			if (arcology.FSBodyPurist !== "unset") {
-				if (child.faceImplant > 30) {
-					r += `had some facial cosmetic surgery, though it's subtle. `;
-				} else {
-					r += `This is considered extremely tragic by a society that values bodily purity. `;
+				if (child.balls >= 50) {
+					r += `${His} testicles are so big and sensitive that ${he} can barely move without stopping to let shivers run down ${his} body. It takes a great deal of control to not release their contents in huge spurts down ${his} balls. `;
+				} else if (child.balls >= 37) {
+					r += `${His} perpetual stream of semen-laced precum running down ${his} balls leaves a mess on the floor wherever ${he} goes. `;
+				} else if (child.balls >= 25) {
+					r += `Parts of the constant dribble coming out of the hole are now white, a testament to just how much cum ${his} massive balls produce and how desperate they are for release. `;
+				} else if (child.balls >= 10) {
+					r += `${He} produces so much cum that ${his} dick uncontrollably dribbles precum wherever ${he} goes, leaving a trail of drops behind ${him}. `;
 				}
-			} else if (arcology.FSTransformationFetishist !== "unset") {
-				if (child.faceImplant > 30) {
-					r += `Since society values bodily purity, even this subtlety affects ${his} attractiveness when it's noticed. `;
-				} else {
-					r += `Your transformationist society doesn't think this ${child.face < -10 ? `makes ${him} uglier` : `reduces ${his} attractiveness`}. `;
+
+				if (child.prostate > 2) {
+					r += `${His} ejaculate has a distinct clearness to it from the sheer amount of prostate fluid produced by ${his} overstimulated prostate. `;
 				}
 			} else {
-				if (child.faceImplant > 30) {
-					r += `The effect is enough to reduce ${his} attractiveness. `;
+				if (child.prostate > 2) {
+					r += `The area above ${his} crotch has a slight swell to it from ${his} prostate implant. `;
 				}
 			}
 		}
 
-		if (child.smells === -1) {
-			r += `${He} has no sense of smell, but this isn't immediately obvious just by looking at ${his} nose. `;
-		}
-
-		if (V.showBodyMods) {
-			if (!child.fuckdoll) {
-				r += makeup(child);
-				r += tats.lips(child);
+		if (!child.prostate) {
+			if (child.dick > 0 || child.balls > 0) {
+				if (child.genes === "XY") {
+					r += `Though it's not externally apparent, ${his} prostate has been removed, `;
+				} else {
+					r += `${He} is lacking a prostate, `;
+				}
+				r += `giving ${his} ejaculations less body${child.anus !== 0 ? ` and reducing the stimulation ${he} feels during anal sex` : ``}. `;
 			}
 		}
 
-		return r;
-	}
-
-	function flowers(child) {
-		let
-			r = ``;
-
-		if (child.dick > 0 && !child.balls) {
-			r += `a white orchid, its black stamen stiffly erect. `;
-		} else if (child.dick > 0) {
-			r += `a morning glory, light around its edges with a puckered pink center. `;
-		} else if (child.addict > 5) {
-			r += `a large poppy, its pod glistening with black opiate juice. `;
-		} else if (child.vagina === 0) {
-			r += `a white lily, pure and unspoiled. `;
-		} else if (child.pregType > 3 && child.pregKnown) {
-			r += `a pink lotus, beautiful and fertile. `;
-		} else if (child.energy > 95) {
-			r += `a flamboyant tiger lily. `;
-		} else if (child.actualAge < 15) {
-			r += `an innocent little peony. `;
-		} else if (child.boobs > 2000) {
-			r += `a huge round sunflower. `;
-		} else {
-			r += `a nice red rose. `;
-		}
-
-		return r;
-	}
-
-	function footwear(child) {
-		let
-			r = ``;
-
-		if (hasAnyLegs(child)) {
-			switch (child.clothes) {
-				case "a slave gown":
-					switch (child.shoes) {
-						case "flats":
-							r += `a pair of fashionable slingback sandals. `;
-							break;
-						case "boots":
-							r += `elegant worked leather boots. `;
-							break;
-						case "pumps":
-							r += `kitten heels. `;
-							break;
-						case "heels":
-							r += `sleek pumps. `;
-							break;
-						case "extreme heels":
-							r += `daring spike heels so high ${his} butt is at dick height. `;
-							break;
-						default:
-							r += `nothing on ${his} bare feet. `;
-							break;
-					}
-					break;
-				case "a ball gown":
-					switch (child.shoes) {
-						case "flats":
-							r += `a delicate pair of dancing slippers. `;
-							break;
-						case "boots":
-							r += `a dainty pair of heeled booties. `;
-							break;
-						case "pumps":
-							r += `an ornate pair of stiletto heels. `;
-							break;
-						case "heels":
-							r += `an ornate pair of stiletto pumps. `;
-							break;
-						case "extreme heels":
-							r += `an ornate pair of stiletto heels so extreme ${he} has to concentrate just to stand. `;
-							break;
-						default:
-							r += `ridiculously bare stockinged feet. `;
-							break;
-					}
-					break;
-				case "a mini dress":
-					switch (child.shoes) {
-						case "flats":
-							r += `suede flats. `;
-							break;
-						case "boots":
-							r += `suede thigh-high boots. `;
-							break;
-						case "pumps":
-							r += `suede ankle strap heels. `;
-							break;
-						case "heels":
-							r += `suede ankle strap pumps. `;
-							break;
-						case "extreme heels":
-							r += `suede ankle strap heels so tall, ${he} has to walk with ${his} ass sticking out. `;
-							break;
-						default:
-							r += `bare feet. `;
-							break;
-					}
-					break;
-				case "a tube top":
-				case "an oversized t-shirt":
-				case "a t-shirt":
-				case "a sweater":
-				case "a tank-top":
-					switch (child.shoes) {
-						case "flats":
-							r += `a pair of comfortable shoes. `;
-							break;
-						case "boots":
-							r += `a pair of heeled boots. `;
-							break;
-						case "pumps":
-							r += `a pair of heels. `;
-							break;
-						case "heels":
-							r += `a pair of pumps. `;
-							break;
-						case "extreme heels":
-							r += `a pair of heels so extreme ${he}'s practically on tiptoe. `;
-							break;
-						default:
-							r += `nothing on ${his} feet. `;
-							break;
-					}
-					break;
-				case "a schoolgirl outfit":
-					switch (child.shoes) {
-						case "flats":
-							r += `girly tennis shoes with bright white laces. `;
-							break;
-						case "boots":
-							r += `brown leather riding boots with buckled tops. `;
-							break;
-						case "pumps":
-							r += `black heels with little plaid bows. `;
-							break;
-						case "heels":
-							r += `black pumps with little plaid bows. `;
-							break;
-						case "extreme heels":
-							r += `tall black pump heels with little plaid bows. `;
-							break;
-						default:
-							r += `bare feet. `;
-							break;
-					}
-					break;
-				default:
-					switch (child.shoes) {
-						case "flats":
-							r += `a pair of simple sandals which just call attention to ${his} otherwise nude state. `;
-							break;
-						case "boots":
-							r += `a pair of sexy leather boots which just call attention to ${his} otherwise nude state. `;
-							break;
-						case "pumps":
-							r += `a pair of sexy heels which just call attention to ${his} otherwise nude state. `;
-							break;
-						case "heels":
-							r += `a pair of sexy pumps which just call attention to ${his} otherwise nude state. `;
-							break;
-						case "extreme heels":
-							r += `a pair of daringly high heels which just call attention to ${his} otherwise nude state. `;
-							break;
-						default:
-							r += `nothing on ${his} bare feet either, naturally. `;
-							break;
-					}
-					break;
-			}
+		if (V.showBodyMods) {
+			r += tats.dick(child);
+			r += piercings.dick(child);
 		}
+		r += App.Desc.brand(child, "penis");
+		r += App.Desc.brand(child, "testicle");
 
 		return r;
 	}
 
-	function hair(child) {
+	function ears(child) {
 		let
-			r = `${His} `,
-			hLength;
+			r = ``;
 
-		switch (child.hStyle) {
-			case "bald":
-				r += `hair no longer grows. If it did, it would be ${child.origHColor}. `;
+		switch (child.earShape) {
+			case "none":
+				if (child.earImplant) {
+					if (child.earT !== "none") {
+						r += `${He} has smooth skin where ${his} ears should be as ${his} hearing has been cybernetically rerouted to ${his} secondary ears. `;
+					} else {
+						r += `${He} has nothing but small, perforated metal disks where ${his} ears should be. `;
+					}
+				} else if (child.earwear === "none") {
+					r += `${He} has small unsightly holes on the sides of ${his} head. `;
+				} else {
+					r += `The sides of ${his} head are smooth where ${his} ears should be, but upon closer inspection it is revealed that `;
+					if (child.earwear === "hearing aids") {
+						r += `${his} ear canals are fitted with hearing aids capped with a skin-matching sheet to obscure the hole. `;
+					} else {
+						r += `${his} ear canals are filled with plugs with skin-matching caps. `;
+					}
+				}
 				break;
-			case "shaved":
-			case "shaved bald":
-				r += `hair has been shaved. If ${his} hair were visible, it would be ${child.hColor}. `;
+			case "damaged":
+				r += `${His} outer ears have been severely damaged. `;
 				break;
-			case "buzzcut":
-				r += `${child.hColor} hair is in a short buzzcut. `;
+			case "normal":
+				r += `${He} has perfectly ordinary ears. `;
 				break;
-			case "trimmed":
-				r += `${child.hColor} hair is trimmed short. `;
+			case "robot":
+				r += `${He} has high tech cyber-ears that could be mistaken for headphones. `;
 				break;
-			case "afro":
-				r += `${child.hColor} hair is in a `;
-				if (child.hLength > 100) {
-					r += `gigantic puffed-up afro and looks ridiculous. `;
-				} else if (child.hLength > 30) {
-					r += `puffy afro. `;
-				} else {
-					r += `short afro. `;
+			case "pointy":
+				r += `${His} small, ${jsEither("elfin", "leaf-shaped", "pointed")} ears are quite cute and give ${him} an exotic appearance. `;
+				break;
+			case "elven":
+				r += `${He} has long, thin elven ears that ${jsEither(`tend to droop when ${he} is relaxed or sad`, `tend to waggle up and down when ${he} is excited`, `twitch at the slightest touch`)}. `;
+				break;
+			case "ushi":
+				r += `${He} has long, floppy cow ears. `;
+				break;
+		}
+
+		switch (child.earT) {
+			case "neko":
+				r += `${He} has cute, ${child.earTColor} cat ears on ${his} head; they `;
+				if (child.earImplant) {
+					r += `perk up at `;
+					if (child.devotion > 20) {
+						r += `the sound of your voice and `;
+					} else {
+						r += `sudden noises and `;
+					}
+					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
 				break;
-			case "cornrows":
-				r += `${child.hColor} hair is formed tightly into cornrows in a decorative pattern on ${his} head, dangling `;
-				if (child.hLength >= 150) {
-					r += `down calf-length, `;
-				} else if (child.hLength >= 100) {
-					r += `down ass-length, `;
-				} else if (child.hLength >= 30) {
-					r += `down long, `;
-				} else if (child.hLength >= 10) {
-					r += `down shoulder-length, `;
-				} else {
-					r += `down, `;
+			case "inu":
+				r += `${He} has cute, ${child.earTColor} dog ears on ${his} head; they `;
+				if (child.earImplant) {
+					r += `perk up at `;
+					if (child.devotion > 20) {
+						r += `the sound of your voice and `;
+					} else {
+						r += `sudden noises and `;
+					}
+					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
-				r += `with colorful beads interspersed in them. `;
 				break;
-			case "bun":
-				r += `${child.hColor} hair is `;
-				if (child.hLength >= 100) {
-					r += `packed tightly into a huge puffy `;
-				} else if (child.hLength >= 30) {
-					r += `packed into a large `;
-				} else if (child.hLength >= 10) {
-					r += `tied into a small `;
-				} else {
-					r += `tied into a `;
+			case "kit":
+				r += `${He} has elegant, ${child.earTColor} fox ears on ${his} head; they `;
+				if (child.earImplant) {
+					r += `perk up at `;
+					if (child.devotion > 20) {
+						r += `the sound of your voice and `;
+					} else {
+						r += `sudden noises and `;
+					}
+					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
-				r += `bun. `;
 				break;
-			case "messy bun":
-				r += `${child.hColor} hair is `;
-				if (child.hLength >= 100) {
-					r += `packed tightly into a huge messy `;
-				} else if (child.hLength >= 30) {
-					r += `packed into a large messy `;
-				} else if (child.hLength >= 10) {
-					r += `tied into a small messy `;
-				} else {
-					r += `tied into a messy `;
+			case "tanuki":
+				r += `${He} has adorable, ${child.earTColor}, round tanuki ears on ${his} head; they `;
+				if (child.earImplant) {
+					r += `perk up at `;
+					if (child.devotion > 20) {
+						r += `the sound of your voice and `;
+					} else {
+						r += `sudden noises and `;
+					}
+					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
-				r += `bun. `;
 				break;
-			case "braided":
-			case "curled":
-			case "dreadlocks":
-			case "luxurious":
-			case "neat":
-			case "permed":
-			case "ponytail":
-			case "strip":
-			case "tails":
-			case "up":
-				hLength = child.hLength / child.height;
-				if (child.hLength > 0.9) {
-					r += `floor-length, `;
-				} else if (hLength > 0.8) {
-					r += `calf-length, `;
-				} else if (hLength > 0.7) {
-					r += `knee-length, `;
-				} else if (hLength >= 0.6) {
-					r += `thigh-length, `;
-				} else if (hLength >= 0.4) {
-					r += `ass-length, `;
-				} else if (hLength >= 0.2) {
-					r += `long, `;
-				} else if (hLength >= 1.5) {
-					r += `shoulder-length, `;
-				} else {
-					r += `short, `;
+			case "usagi":
+				r += `${He} has long, ${child.earTColor}, fluffy rabbit ears on ${his} head; they `;
+				if (child.earImplant) {
+					r += `perk up at `;
+					if (child.devotion > 20) {
+						r += `the sound of your voice and `;
+					} else {
+						r += `sudden noises and `;
+					}
+					r += `${jsEither(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}. `;
 				}
-				r += `${child.hColor} hair`;
-				r += hairClothing(child);
 				break;
-			default:
-				r += `${child.hColor} hair is ${child.hStyle}. `;
+			case "normal":
+				r += `${He} has ${child.earShape !== "none" ? `a second set` : `a pair`} of non-functioning ears grafted to the top of ${his} head. `;
 				break;
 		}
 
-		r += `${His} `;
-		if (child.eyebrowHStyle === "bald") {
-			r += `brows do not grow hair. ${His} eyebrows would be ${child.eyebrowHColor} in color if they did. `;
-		} else if (child.eyebrowHStyle === "shaved") {
-			r += `eyebrows have${child.hStyle === "shaved" || child.hStyle === "shaved bald" ? ` also` : ``} been shaved off. If they were visible, they would be ${child.eyebrowHColor} in color. `;
-		} else {
-			r += `${child.eyebrowHColor} eyebrows `;
-
-			switch (child.eyebrowHStyle) {
-				case "slanted inwards":
-					r += `slant inwards from the sides of ${his} forehead down to the center of ${his} head. `;
-					break;
-				case "slanted outwards":
-					r += `slant outwards from the center of ${his} head down to the sides of ${his} forehead. `;
-					break;
-				case "rounded":
-					r += `form perfect semicircles. `;
-					break;
-				case "natural":
-					r += `naturally contour to the shape of ${his} brow. `;
-					break;
-				case "curved":
-					r += `form small "S"-shaped curves above ${his} eyes. `;
-					break;
-				case "straight":
-					r += `are near perfectly straight, instead of curving. `;
-					break;
-				case "high-arched":
-					r += `form tall arches on ${his} forehead. `;
-					break;
-				case "elongated":
-					r += `are elongated to cover far more of ${his} brow than what would be considered average. `;
-					break;
-				case "shortened":
-					r += `are shortened to cover far less of ${his} brow than what would be considered average. `;
-					break;
-				default:
-					r += `are styled to be ${child.eyebrowHStyle}. `;
-					break;
+		if (child.hears < 0) {
+			if (child.hears === -1) {
+				r += `${His} hearing is noticeably impaired, `;
+			} else if (child.hears < -1) {
+				r += `${He} is completely deaf, `;
 			}
 
-			r += `They're `;
-
-			switch (child.eyebrowFullness) {
-				case "pencil-thin":
-					r += `incredibly and unnaturally light and thin. `;
-					break;
-				case "thin":
-					r += `considerably thinner than what would be considered average. `;
-					break;
-				case "threaded":
-					r += `styled to be thinner on the sides but otherwise normal. `;
-					break;
-				case "natural":
-					r += `kept to a natural level of fullness. `;
-					break;
-				case "tapered":
-					r += `styled to be thicker in the center but otherwise normal. `;
-					break;
-				case "thick":
-					r += `considerably thicker than what would be considered average. `;
-					break;
-				case "bushy":
-					r += `incredibly and unnaturally full and bushy. `;
-					break;
-				default:
-					r += `${child.eyebrowFullness}. `;
-					break;
+			if (child.hears < -1 && child.earShape === "none") {
+				r += `which is fitting due to ${his} lack of ears. `;
+			} else {
+				r += `but this isn't obvious just by looking at ${his} ears. `;
 			}
 		}
 
 		return r;
 	}
 
-	function hairClothing(child) {
+	function face(child) {
 		let
 			r = ``;
 
-		switch (child.hStyle) {
-			case "neat":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is kept out of ${his} face by a pastel-colored headband. `;
-							break;
-						default:
-							r += `cascades almost to the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `flows fashionably down ${his} bare back. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is kept out of ${his} face by a pastel-colored headband. `;
-							break;
-						default:
-							r += `is brushed back over ${his} shoulders. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `follows the latest fashion. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is kept out of ${his} face by a pastel-colored headband. `;
-							break;
-						default:
-							r += `is brushed back. `;
-							break;
-					}
-				} else {
-					switch (child.clothes) {
-						case "a slave gown":
-							r += `is gelled into a fashionable wave. `;
-							break;
-						case "a ball gown":
-							r += `is gelled into a fashionable wave. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is neatly brushed. `;
-							break;
-					}
-				}
-				break;
-			case "up":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is piled up on ${his} head in a perfect 60's beehive. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is in a huge bun secured by a pastel scrunchy. `;
-							break;
-						default:
-							r += `is back in an enormous bun. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is piled up on ${his} head in a perfect 60's beehive. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is in a bun secured by a pastel scrunchy. `;
-							break;
-						default:
-							r += `is back in a big bun. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is piled up on ${his} head in a perfect 60's 'do. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is in a tight little bun secured by a pastel scrunchy. `;
-							break;
-						default:
-							r += `is back in a tight little bun. `;
-							break;
-					}
+		r += `${His} <span class="pink">face is `;
+		switch (child.faceShape) {
+			case "masculine":
+				if (child.face < -95) {
+					r += `so ugly and masculine that ${his} designation as a slave girl is a mockery. `;
+				} else if (child.face < -40) {
+					r += `ugly and masculine, making ${him} a poor slave girl by appearance. `;
+				} else if (child.face < -10) {
+					r += `unattractively masculine. `;
+				} else if (child.face <= 10) {
+					r += `masculine, but not entirely unappealing. `;
+				} else if (child.face <= 40) {
+					r += `attractively masculine. `;
+				} else if (child.face <= 95) {
+					r += `quite handsome in a masculine way. `;
 				} else {
-					switch (child.clothes) {
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is combed back. `;
-							break;
-					}
+					r += `the height of masculine handsomeness. `;
 				}
 				break;
-			case "tails":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in huge tails secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into beautiful long tails, one of which comes around to run down ${his} chest. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in long tails and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in long tails and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in twin tails that almost reach the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in big tails secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into beautiful tails, one of which comes around to fall between ${his} breasts. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in long tails and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in long tails and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in long twin tails. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in short tails secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into short tails set low at the nape of ${his} neck. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in short braids and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in short braids and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in short braids. `;
-							break;
-					}
+			case "androgynous":
+				if (child.face < -95) {
+					r += `disturbingly androgynous and terribly ugly. `;
+				} else if (child.face < -40) {
+					r += `ugly and androgynous; ${he} has neither masculine nor feminine appeal. `;
+				} else if (child.face < -10) {
+					r += `strangely androgynous, and rather unattractive. `;
+				} else if (child.face <= 10) {
+					r += `strangely androgynous. `;
+				} else if (child.face <= 40) {
+					r += `androgynous, and attractive enough that this ambiguity is interesting. `;
+				} else if (child.face <= 95) {
+					r += `gorgeously androgynous in a complex way that captures the eye. `;
 				} else {
-					switch (child.clothes) {
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is too short to be kept in proper tails, so it's simply combed back. `;
-							break;
-					}
+					r += `so gorgeously androgynous that ${he} tends to induce sexual confusion. `;
 				}
 				break;
-			case "ponytail":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in a huge ponytail secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into a beautiful long ponytail, which swooshes as ${he} moves. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in a long ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in a long ponytail and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in a ponytail that almost reaches the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in a big ponytail secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into a beautiful ponytail, which swooshes as ${he} moves. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in a long ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in a long ponytail and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in a long ponytail. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in a short ponytail secured by a hair tie with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into a short ponytail set low at the nape of ${his} neck. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in a ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in a ponytail and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in a short ponytail. `;
-							break;
-					}
+			case "cute":
+				if (child.face < -95) {
+					r += `very ugly, yet somehow cute; ${he}'s so unattractive that ${he} inspires pity. `;
+				} else if (child.face < -40) {
+					r += `ugly, but cute, with a pitiable appeal. `;
+				} else if (child.face < -10) {
+					r += `not attractive, but is appealingly cute. `;
+				} else if (child.face <= 10) {
+					r += `merely average, but is appealingly cute. `;
+				} else if (child.face <= 40) {
+					r += `both attractive and appealingly cute. `;
+				} else if (child.face <= 95) {
+					r += `beautiful, yet somehow also approachably cute. `;
 				} else {
-					r += `is too short to be kept in a proper ponytail, so it's simply combed back. `;
+					r += `an impossibly perfect combination of beauty and girl-next-door cuteness. `;
 				}
 				break;
-			case "braided":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in huge braids secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into beautiful long braids, one of which comes around to run down ${his} chest. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in long braids and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in long braids and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in braids that almost reach the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in long braids secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a ball gown":
-						case "a slave gown":
-							r += `is in beautiful braids, one of which comes around to fall between ${his} breasts. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in braids and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in braids and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in long braids. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is back in short braids secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is combed into short braids set low at the nape of ${his} neck. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in short braids and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in short braids and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in short braids. `;
-							break;
-					}
+			case "sensual":
+				if (child.face < -95) {
+					r += `very ugly, yet naturally slutty, promising a decent fuck despite its appearance. `;
+				} else if (child.face < -40) {
+					r += `ugly, but also slutty, promising a good fuck despite its appearance. `;
+				} else if (child.face < -10) {
+					r += `not attractive, but it has a certain sensual appeal. `;
+				} else if (child.face <= 10) {
+					r += `merely average, but undeniably sensual. `;
+				} else if (child.face <= 40) {
+					r += `both attractive and naturally sultry. `;
+				} else if (child.face <= 95) {
+					r += `both beautiful and sultry, bringing sex to mind naturally. `;
 				} else {
-					switch (child.clothes) {
-						default:
-							r += `is too short to be kept in proper braids, so it's simply combed back. `;
-							break;
-					}
+					r += `very beautiful in a consummately sexual way. `;
 				}
 				break;
-			case "dreadlocks":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is in dreadlocks, some in ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is in dreadlocks, spreading out in many directions and almost reaching the ground. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in long dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in long dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in dreadlocks that almost reach the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is in dreadlocks, some in hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-							r += `is in dreadlocks, spreading out in many directions. `;
-							break;
-						case "a ball gown":
-							r += `is in dreadlocks, spreading out in many directions. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in dreadlocks. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is in short dreadlocks, some in hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is in short dreadlocks, spreading around ${his} head. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in short dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in short dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is in short dreadlocks. `;
-							break;
-					}
+			case "exotic":
+				if (child.face < -95) {
+					r += `very ugly and unusual, a real tragedy in flesh. `;
+				} else if (child.face < -40) {
+					r += `ugly and unusual, a real misfortune. `;
+				} else if (child.face < -10) {
+					r += `unattractive, and distinctive in its unattractiveness. `;
+				} else if (child.face <= 10) {
+					r += `quite average, but not uninteresting. `;
+				} else if (child.face <= 40) {
+					r += `attractive in an exotic and interesting way. `;
+				} else if (child.face <= 95) {
+					r += `exotic and beautiful, capable of catching the eye and keeping its gaze. `;
 				} else {
-					switch (child.clothes) {
-						default:
-							r += `is too short to be kept in proper dreadlocks, so it's simply combed back. `;
-							break;
-					}
+					r += `very beautiful and exotic, almost to the point of alien fascination. `;
 				}
 				break;
-			case "curled":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is curled into long flowing locks secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is curled into long flowing locks, almost reaching the ground. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is curled into long flowing locks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is curled into long flowing locks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is curled into long flowing locks that almost reach the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is curled into long locks secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is curled into long locks, reaching past ${his} shoulders. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is curled into long locks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is curled into long locks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is curled into long locks. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is curled into short locks secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is curled into short locks. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is curled into short locks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is curled into short locks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is curled into short locks. `;
-							break;
-					}
+			default:
+				if (child.face < -95) {
+					r += `very ugly. `;
+				} else if (child.face < -40) {
+					r += `quite ugly. `;
+				} else if (child.face < -10) {
+					r += `unattractive. `;
+				} else if (child.face <= 10) {
+					r += `average and conventionally feminine. `;
+				} else if (child.face <= 40) {
+					r += `conventionally attractive. `;
+				} else if (child.face <= 95) {
+					r += `conventionally beautiful. `;
 				} else {
-					switch (child.clothes) {
-						default:
-							r += `is in short curls. `;
-							break;
-					}
+					r += `the height of conventional feminine beauty. `;
 				}
 				break;
-			case "permed":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is permed into long flowing curls secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is permed into long flowing curls, almost reaching the ground. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is permed and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is permed and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is permed; ${his} curls almost reach the ground. `;
-							break;
-					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is permed and secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is permed, reaching past ${his} shoulders. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is permed and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is permed and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						default:
-							r += `is permed. `;
-							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is permed into short waves secured by hair ties with plastic buttons, bearing the garish inscription `;
-							r += App.Desc.inscrip(child);
-							break;
-						case "a slave gown":
-						case "a ball gown":
-							r += `is permed into short waves. `;
+		}
+		r += `</span> `;
+
+		if (child.weight > 190) {
+			r += `${His} face is quite fat with ample excess chins. `;
+		} else if (child.weight > 160) {
+			r += `${His} face is round and plump with a trio of extra chins. `;
+		} else if (child.weight > 130) {
+			r += `${His} face is chubby with an obvious second chin. `;
+		} else if (child.weight > 97) {
+			r += `${His} face is soft with barely a second chin. `;
+		}
+
+		if (child.markings === "beauty mark") {
+			if (child.face < -95) {
+				r += `It bears a severely disfiguring, discolored mark. `;
+			} else if (child.face < -40) {
+				r += `It bears a couple of unsightly moles. `;
+			} else if (child.face < -10) {
+				r += `It bears an ugly mole. `;
+			} else if (child.face <= 10) {
+				r += `${He} has a distinctive beauty mark. `;
+			} else if (child.face <= 40) {
+				r += `${He} has a nice beauty mark. `;
+			} else if (child.face <= 95) {
+				r += `${He} has a beauty mark that adds to ${his} distinctiveness. `;
+			} else {
+				r += `${He} has a beauty mark that makes ${him} really memorable. `;
+			}
+		}
+
+		if (child.faceImplant > 5) {
+			r += `${He}'s `;
+			if (child.faceImplant > 95) {
+				r += `had so much cosmetic surgery that ${his} face is located at the bottom of the uncanny valley ${child.face < -10 ? `in addition to its ugliness` : child.face <= 10 ? `the only thing really distinctive about it` : `its attractiveness notwithstanding`}. `;
+			} else if (child.faceImplant > 60) {
+				r += `obviously gotten a lot of facial cosmetic surgery. `;
+			} else if (child.faceImplant > 30) {
+				r += `noticeably received facial cosmetic surgery. `;
+			} else {
+				if (PC.skill.medicine >= 100) {
+					r += `Someone without your knowledge might miss it entirely. `;
+				}
+			}
+
+			if (arcology.FSBodyPurist !== "unset") {
+				if (child.faceImplant > 30) {
+					r += `had some facial cosmetic surgery, though it's subtle. `;
+				} else {
+					r += `This is considered extremely tragic by a society that values bodily purity. `;
+				}
+			} else if (arcology.FSTransformationFetishist !== "unset") {
+				if (child.faceImplant > 30) {
+					r += `Since society values bodily purity, even this subtlety affects ${his} attractiveness when it's noticed. `;
+				} else {
+					r += `Your transformationist society doesn't think this ${child.face < -10 ? `makes ${him} uglier` : `reduces ${his} attractiveness`}. `;
+				}
+			} else {
+				if (child.faceImplant > 30) {
+					r += `The effect is enough to reduce ${his} attractiveness. `;
+				}
+			}
+		}
+
+		if (child.smells === -1) {
+			r += `${He} has no sense of smell, but this isn't immediately obvious just by looking at ${his} nose. `;
+		}
+
+		if (V.showBodyMods) {
+			if (!child.fuckdoll) {
+				r += makeup(child);
+				r += tats.lips(child);
+			}
+		}
+
+		return r;
+	}
+
+	function flowers(child) {
+		let
+			r = ``;
+
+		if (child.dick > 0 && !child.balls) {
+			r += `a white orchid, its black stamen stiffly erect. `;
+		} else if (child.dick > 0) {
+			r += `a morning glory, light around its edges with a puckered pink center. `;
+		} else if (child.addict > 5) {
+			r += `a large poppy, its pod glistening with black opiate juice. `;
+		} else if (child.vagina === 0) {
+			r += `a white lily, pure and unspoiled. `;
+		} else if (child.pregType > 3 && child.pregKnown) {
+			r += `a pink lotus, beautiful and fertile. `;
+		} else if (child.energy > 95) {
+			r += `a flamboyant tiger lily. `;
+		} else if (child.actualAge < 15) {
+			r += `an innocent little peony. `;
+		} else if (child.boobs > 2000) {
+			r += `a huge round sunflower. `;
+		} else {
+			r += `a nice red rose. `;
+		}
+
+		return r;
+	}
+
+	function footwear(child) {
+		let
+			r = ``;
+
+		if (hasAnyLegs(child)) {
+			switch (child.clothes) {
+				case "a slave gown":
+					switch (child.shoes) {
+						case "flats":
+							r += `a pair of fashionable slingback sandals. `;
 							break;
-						case "a burkini":
-						case "a burqa":
-						case "a hijab and abaya":
-						case "a hijab and blouse":
-						case "a niqab and abaya":
-							r += `is permed into short waves, but they're hidden by ${his} modest garb. `;
+						case "boots":
+							r += `elegant worked leather boots. `;
 							break;
-						case "a klan robe":
-						case "a slutty klan robe":
-							r += `is permed into short waves, but they're hidden by ${his} hood. `;
+						case "pumps":
+							r += `kitten heels. `;
 							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is permed into short waves and is kept out of ${his} face by a couple of cute hairpins. `;
+						case "heels":
+							r += `sleek pumps. `;
 							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is permed into short waves and is kept out of ${his} face by a couple of black hairpins. `;
+						case "extreme heels":
+							r += `daring spike heels so high ${his} butt is at dick height. `;
 							break;
 						default:
-							r += `is permed into short waves. `;
+							r += `nothing on ${his} bare feet. `;
 							break;
 					}
-				} else {
-					switch (child.clothes) {
-						case "a burkini":
-						case "a burqa":
-						case "a hijab and abaya":
-						case "a hijab and blouse":
-						case "a niqab and abaya":
-							r += `is hidden by ${his} modest garb. `;
-							break;
-						case "a klan robe":
-						case "a slutty klan robe":
-							r += `is hidden by ${his} hood. `;
-							break;
-						default:
-							r += `is permed into short curls. `;
+					break;
+				case "a ball gown":
+					switch (child.shoes) {
+						case "flats":
+							r += `a delicate pair of dancing slippers. `;
 							break;
-					}
-				}
-				break;
-			case "luxurious":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is in luxurious layered locks flowing gorgeously down ${his} bare back.habit": `;
+						case "boots":
+							r += `a dainty pair of heeled booties. `;
 							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+						case "pumps":
+							r += `an ornate pair of stiletto heels. `;
 							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+						case "heels":
+							r += `an ornate pair of stiletto pumps. `;
 							break;
-						case "a schoolgirl outfit":
-							r += `is in luxurious layered locks kept out of ${his} face by a pastel-colored headband. `;
-							r += `In ${his} hair is ${flowers(child)}`;
+						case "extreme heels":
+							r += `an ornate pair of stiletto heels so extreme ${he} has to concentrate just to stand. `;
 							break;
 						default:
-							r += `is in luxurious layered locks, cascading almost to the ground. `;
+							r += `ridiculously bare stockinged feet. `;
 							break;
 					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is in luxurious layered locks flowing gorgeously down ${his} bare back.habit": `;
-							break;
-						case "a klan robe":
-						case "a slutty klan robe":
-							r += `is in luxurious layered locks flowing gorgeously but not visible under ${his} modest head covering. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of black hairpins. `;
-							break;
-						case "a schoolgirl outfit":
-							r += `is in luxurious layered locks kept out of ${his} face by a pastel-colored headband. `;
-							r += `In ${his} hair is ${flowers(child)}`;
-							break;
-						default:
-							r += `is brushed back over ${his} shoulders. `;
+					break;
+				case "a mini dress":
+					switch (child.shoes) {
+						case "flats":
+							r += `suede flats. `;
 							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a slave gown":
-						case "a ball gown":
-							r += `is in luxuriously styled short locks. `;
+						case "boots":
+							r += `suede thigh-high boots. `;
 							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+						case "pumps":
+							r += `suede ankle strap heels. `;
 							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+						case "heels":
+							r += `suede ankle strap pumps. `;
 							break;
-						case "a schoolgirl outfit":
-							r += `is in luxuriously styled short locks kept out of ${his} face by a pastel-colored headband. `;
-							r += `In ${his} hair is ${flowers(child)}`;
+						case "extreme heels":
+							r += `suede ankle strap heels so tall, ${he} has to walk with ${his} ass sticking out. `;
 							break;
 						default:
-							r += `is brushed back. `;
+							r += `bare feet. `;
 							break;
 					}
-				} else {
-					switch (child.clothes) {
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+					break;
+				case "a tube top":
+				case "an oversized t-shirt":
+				case "a t-shirt":
+				case "a sweater":
+				case "a tank-top":
+					switch (child.shoes) {
+						case "flats":
+							r += `a pair of comfortable shoes. `;
 							break;
-						default:
-							r += `is luxuriously styled and layered. `;
+						case "boots":
+							r += `a pair of heeled boots. `;
 							break;
-					}
-				}
-				break;
-			case "strip":
-				if (child.hLength > 100) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is shaved into a strip that cascades magnificently down ${his} back, with scores of tiny pastel bows woven into it. `;
+						case "pumps":
+							r += `a pair of heels. `;
 							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is shaved into a strip and is kept out of ${his} face by a couple of cute hairpins. `;
+						case "heels":
+							r += `a pair of pumps. `;
 							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is shaved into a strip and is kept out of ${his} face by a couple of black hairpins. `;
+						case "extreme heels":
+							r += `a pair of heels so extreme ${he}'s practically on tiptoe. `;
 							break;
 						default:
-							r += `is shaved into a strip atop ${his} head that cascades magnificently down ${his} back. `;
+							r += `nothing on ${his} feet. `;
 							break;
 					}
-				} else if (child.hLength > 30) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is shaved into a long braided strip with tiny pastel bows woven into it. `;
-							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is shaved into a long braided strip and is kept out of ${his} face by a couple of cute hairpins. `;
-							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is shaved into a long braided strip and is kept out of ${his} face by a couple of black hairpins. `;
+					break;
+				case "a schoolgirl outfit":
+					switch (child.shoes) {
+						case "flats":
+							r += `girly tennis shoes with bright white laces. `;
 							break;
-						default:
-							r += `is shaved into a long braided strip. `;
+						case "boots":
+							r += `brown leather riding boots with buckled tops. `;
 							break;
-					}
-				} else if (child.hLength > 10) {
-					switch (child.clothes) {
-						case "a schoolgirl outfit":
-							r += `is shaved into a strip down the middle of ${his} head with tiny pastel bows woven into it. `;
+						case "pumps":
+							r += `black heels with little plaid bows. `;
 							break;
-						case "a t-shirt":
-						case "an oversized t-shirt":
-							r += `is shaved into a strip and is kept out of ${his} face by a couple of cute hairpins. `;
+						case "heels":
+							r += `black pumps with little plaid bows. `;
 							break;
-						case "a tank-top":
-						case "a tube top":
-							r += `is shaved into a strip and is kept out of ${his} face by a couple of black hairpins. `;
+						case "extreme heels":
+							r += `tall black pump heels with little plaid bows. `;
 							break;
 						default:
-							r += `is shaved into a strip. `;
+							r += `bare feet. `;
 							break;
 					}
-				} else {
-					r += `is shaved into a mohawk. `;
-				}
-				break;
-			case "bald":
-				r += `is completely bald. `;
-				break;
-		}
-
-		return r;
-	}
-
-	function heel(child) {
-		let
-			r = ``;
-
-		if (child.heels) {
-			r += `${His} <span class="pink">legs have been altered</span> so that ${he} must wear heels in order to walk. `;
-		}
-
-		if (V.showClothing && !V.saleDescription) {
-			if (hasAnyLegs(child)) {
-				if (child.shoes !== "none" && child.shoes !== "flats") {
-					r += `${He} is, so ${he} can walk reasonably well. `;
-				} else {
-					r += `Since ${he} is without them, ${he}'s crawling on all fours. `;
-				}
+					break;
+				default:
+					switch (child.shoes) {
+						case "flats":
+							r += `a pair of simple sandals which just call attention to ${his} otherwise nude state. `;
+							break;
+						case "boots":
+							r += `a pair of sexy leather boots which just call attention to ${his} otherwise nude state. `;
+							break;
+						case "pumps":
+							r += `a pair of sexy heels which just call attention to ${his} otherwise nude state. `;
+							break;
+						case "heels":
+							r += `a pair of sexy pumps which just call attention to ${his} otherwise nude state. `;
+							break;
+						case "extreme heels":
+							r += `a pair of daringly high heels which just call attention to ${his} otherwise nude state. `;
+							break;
+						default:
+							r += `nothing on ${his} bare feet either, naturally. `;
+							break;
+					}
+					break;
 			}
 		}
 
 		return r;
 	}
 
-	function heightImplant(child) {
-		let
-			r = ``;
-
-		if (child.heightImplant > 0) {
-			r += `The proportions of ${his} arms and legs are odd, as though they have been artificially lengthened. `;
-		} else if (child.heightImplant < 0) {
-			r += `The proportions of ${his} arms and legs are odd, as though they have been surgically shortened. `;
-		}
-
-		return r;
-	}
-
-	function hips(child) {
+	function hair(child) {
 		let
-			r = ``;
+			r = `${His} `,
+			hLength;
 
-		if (child.hips < -1) {
-			if (child.butt > 2) {
-				r += `${His} butt is `;
-				if (arcology.FSHedonisticDecadence !== "unset") {
-					r += `disproportionately large for ${his} narrow hips, but your hedonistic arcology finds this attractive. `;
-				} else if (arcology.FSTransformationFetishist !== "unset") {
-					r += `disproportionately large for ${his} narrow hips, but your transformation fetishist arcology considers this attractive. `;
-				} else if (arcology.FSAssetExpansionist !== "unset") {
-					r += `disproportionately large for ${his} narrow hips, but that's just fine to your asset expansionist society. `;
+		switch (child.hStyle) {
+			case "bald":
+				r += `hair no longer grows. If it did, it would be ${child.origHColor}. `;
+				break;
+			case "shaved":
+			case "shaved bald":
+				r += `hair has been shaved. If ${his} hair were visible, it would be ${child.hColor}. `;
+				break;
+			case "buzzcut":
+				r += `${child.hColor} hair is in a short buzzcut. `;
+				break;
+			case "trimmed":
+				r += `${child.hColor} hair is trimmed short. `;
+				break;
+			case "afro":
+				r += `${child.hColor} hair is in a `;
+				if (child.hLength > 100) {
+					r += `gigantic puffed-up afro and looks ridiculous. `;
+				} else if (child.hLength > 30) {
+					r += `puffy afro. `;
 				} else {
-					r += `<span class="red">disproportionately large</span> for ${his} narrow hips. `;
+					r += `short afro. `;
 				}
-			} else {
-				r += `${His} hips are very narrow. `;
-			}
-		} else if (child.hips < 0) {
-			if (child.butt > 4) {
-				r += `${His} butt is `;
-				if (arcology.FSHedonisticDecadence !== "unset") {
-					r += `disproportionately large for ${his} trim hips, but your hedonistic arcology finds this attractive. `;
-				} else if (arcology.FSTransformationFetishist !== "unset") {
-					r += `disproportionately large for ${his} trim hips, but your transformation fetishist arcology considers this attractive. `;
-				} else if (arcology.FSAssetExpansionist !== "unset") {
-					r += `disproportionately large for ${his} trim hips, but that's just fine to your asset expansionist society. `;
+				break;
+			case "cornrows":
+				r += `${child.hColor} hair is formed tightly into cornrows in a decorative pattern on ${his} head, dangling `;
+				if (child.hLength >= 150) {
+					r += `down calf-length, `;
+				} else if (child.hLength >= 100) {
+					r += `down ass-length, `;
+				} else if (child.hLength >= 30) {
+					r += `down long, `;
+				} else if (child.hLength >= 10) {
+					r += `down shoulder-length, `;
 				} else {
-					r += `<span class="red">disproportionately large</span> for ${his} trim hips. `;
+					r += `down, `;
 				}
-			} else {
-				r += `${His} butt is complemented by ${his} trim hips. `;
-			}
-		} else if (child.hips > 2) {
-			if (child.butt <= 8) {
-				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} monstrous hips. `;
-			} else {
-				r += `${His} butt is fitting for ${his} monstrous hips. `;
-			}
-		} else if (child.hips > 1) {
-			if (child.butt <= 3 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
-				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} very wide hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
-			} else {
-				r += `${His} butt is flattered by ${his} very wide hips. `;
-			}
-		} else if (child.hips > 0) {
-			if (child.butt > 8) {
-				r += `${His} butt is `;
-				if (arcology.FSHedonisticDecadence !== "unset") {
-					r += `disproportionately large for ${his} broad hips, but your hedonistic arcology finds this attractive. `;
-				} else if (arcology.FSTransformationFetishist !== "unset") {
-					r += `disproportionately large for ${his} broad hips, but your transformation fetishist arcology considers this attractive. `;
-				} else if (arcology.FSAssetExpansionist !== "unset") {
-					r += `disproportionately large for ${his} broad hips, but that's just fine to your asset expansionist society. `;
+				r += `with colorful beads interspersed in them. `;
+				break;
+			case "bun":
+				r += `${child.hColor} hair is `;
+				if (child.hLength >= 100) {
+					r += `packed tightly into a huge puffy `;
+				} else if (child.hLength >= 30) {
+					r += `packed into a large `;
+				} else if (child.hLength >= 10) {
+					r += `tied into a small `;
 				} else {
-					r += `<span class="red">disproportionately large</span> for ${his} broad hips. `;
+					r += `tied into a `;
 				}
-			} else if (child.butt <= 2 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
-				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} broad hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
-			} else {
-				r += `${His} butt is complemented by ${his} broad hips. `;
-			}
-		} else {
-			if (child.butt > 6) {
-				r += `${His} butt is `;
-				if (arcology.FSHedonisticDecadence !== "unset") {
-					r += `disproportionately large for ${his} womanly hips, but your hedonistic arcology finds this attractive. `;
-				} else if (arcology.FSTransformationFetishist !== "unset") {
-					r += `disproportionately large for ${his} womanly hips, but your transformation fetishist arcology considers this attractive. `;
-				} else if (arcology.FSAssetExpansionist !== "unset") {
-					r += `disproportionately large for ${his} womanly hips, but that's just fine to your asset expansionist society. `;
+				r += `bun. `;
+				break;
+			case "messy bun":
+				r += `${child.hColor} hair is `;
+				if (child.hLength >= 100) {
+					r += `packed tightly into a huge messy `;
+				} else if (child.hLength >= 30) {
+					r += `packed into a large messy `;
+				} else if (child.hLength >= 10) {
+					r += `tied into a small messy `;
 				} else {
-					r += `<span class="red">disproportionately large</span> for ${his} womanly hips. `;
+					r += `tied into a messy `;
 				}
-			} else if (child.butt <= 1 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
-				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} ample hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
-			} else {
-				r += `${His} butt is complemented by ${his} ample hips. `;
-			}
-		}
-
-		switch (child.tailShape) {
-			case "neko":
-				r += `${He} has a long, slender, ${child.tailColor} cat tail which tends to sway side to side when ${he} is focused on a task. `;
-				break;
-			case "inu":
-				r += `${He} has a bushy, ${child.tailColor} dog tail which tends to wag energetically when ${he} gets exited. `;
-				break;
-			case "kit":
-				r += `${He} has a soft, fluffy, ${child.tailColor} fox tail. `;
-				break;
-			case "kitsune":
-				r += `${He} has three incredibly soft, fluffy, ${child.tailColor} fox tails; they feel heavenly to the touch. `;
-				break;
-			case "tanuki":
-				r += `${He} has a long, fluffy, ${child.tailColor} tanuki tail with a dark stripe running down the middle. `;
-				break;
-			case "ushi":
-				r += `${He} has a long, ${child.tailColor} cow tail; it has a small tuft of hair at the end and tends to swat at things absentmindedly. `;
-				break;
-			case "usagi":
-				r += `${He} has a short and fluffy ${child.tailColor} rabbit tail. `;
-				break;
-			case "risu":
-				r += `${He} has a big and bushy ${child.tailColor} squirrel tail. `;
+				r += `bun. `;
 				break;
-			case "uma":
-				r += `${He} has a long horse tail consisting of ${child.tailColor} hair. `;
+			case "braided":
+			case "curled":
+			case "dreadlocks":
+			case "luxurious":
+			case "neat":
+			case "permed":
+			case "ponytail":
+			case "strip":
+			case "tails":
+			case "up":
+				hLength = child.hLength / child.height;
+				if (child.hLength > 0.9) {
+					r += `floor-length, `;
+				} else if (hLength > 0.8) {
+					r += `calf-length, `;
+				} else if (hLength > 0.7) {
+					r += `knee-length, `;
+				} else if (hLength >= 0.6) {
+					r += `thigh-length, `;
+				} else if (hLength >= 0.4) {
+					r += `ass-length, `;
+				} else if (hLength >= 0.2) {
+					r += `long, `;
+				} else if (hLength >= 1.5) {
+					r += `shoulder-length, `;
+				} else {
+					r += `short, `;
+				}
+				r += `${child.hColor} hair`;
+				r += hairClothing(child);
 				break;
 			default:
-				if (child.tail === "combat") {
-					r += `${He} has a very long ${child.tailColor} metallic tail that can lash out, constrict, and deploy razor sharp spikes on command. `;
-				} else if (child.tail === "sex") {
-					r += `${He} has a long, slender, ${child.tailColor} tail. While not strong it is very dexterous and has a small fleshy spade-shaped tip that can vibrate and dispense lube on command. `;
-				}
+				r += `${child.hColor} hair is ${child.hStyle}. `;
+				break;
 		}
 
-		return r;
-	}
+		r += `${His} `;
+		if (child.eyebrowHStyle === "bald") {
+			r += `brows do not grow hair. ${His} eyebrows would be ${child.eyebrowHColor} in color if they did. `;
+		} else if (child.eyebrowHStyle === "shaved") {
+			r += `eyebrows have${child.hStyle === "shaved" || child.hStyle === "shaved bald" ? ` also` : ``} been shaved off. If they were visible, they would be ${child.eyebrowHColor} in color. `;
+		} else {
+			r += `${child.eyebrowHColor} eyebrows `;
+
+			switch (child.eyebrowHStyle) {
+				case "slanted inwards":
+					r += `slant inwards from the sides of ${his} forehead down to the center of ${his} head. `;
+					break;
+				case "slanted outwards":
+					r += `slant outwards from the center of ${his} head down to the sides of ${his} forehead. `;
+					break;
+				case "rounded":
+					r += `form perfect semicircles. `;
+					break;
+				case "natural":
+					r += `naturally contour to the shape of ${his} brow. `;
+					break;
+				case "curved":
+					r += `form small "S"-shaped curves above ${his} eyes. `;
+					break;
+				case "straight":
+					r += `are near perfectly straight, instead of curving. `;
+					break;
+				case "high-arched":
+					r += `form tall arches on ${his} forehead. `;
+					break;
+				case "elongated":
+					r += `are elongated to cover far more of ${his} brow than what would be considered average. `;
+					break;
+				case "shortened":
+					r += `are shortened to cover far less of ${his} brow than what would be considered average. `;
+					break;
+				default:
+					r += `are styled to be ${child.eyebrowHStyle}. `;
+					break;
+			}
 
-	function makeup(child) {
-		let
-			r = ``;
+			r += `They're `;
 
-		if (child.makeup > 0) {
-			switch (child.makeup) {
-				case 1:
-					r += `${He}'s wearing minimal makeup. `;
+			switch (child.eyebrowFullness) {
+				case "pencil-thin":
+					r += `incredibly and unnaturally light and thin. `;
 					break;
-				case 2:
-					r += `${He}'s wearing expensive, luxurious makeup. `;
+				case "thin":
+					r += `considerably thinner than what would be considered average. `;
 					break;
-				case 3:
-					r += `${His} makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+				case "threaded":
+					r += `styled to be thinner on the sides but otherwise normal. `;
 					break;
-				case 4:
-					r += `${He}'s wearing stereotypical, garish streetwalker makeup. `;
+				case "natural":
+					r += `kept to a natural level of fullness. `;
 					break;
-				case 5:
-					r += `${He}'s wearing eye-catching neon makeup. `;
+				case "tapered":
+					r += `styled to be thicker in the center but otherwise normal. `;
 					break;
-				case 6:
-					r += `${His} neon makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+				case "thick":
+					r += `considerably thicker than what would be considered average. `;
 					break;
-				case 7:
-					r += `${He}'s wearing expensive, metallic makeup. `;
+				case "bushy":
+					r += `incredibly and unnaturally full and bushy. `;
 					break;
-				case 8:
-					r += `${His} metallic makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+				default:
+					r += `${child.eyebrowFullness}. `;
 					break;
 			}
-		} else if (child.lipsTat === "permanent makeup") {
-			r += `${His} face appears to bear very heavy, slutty makeup, but on closer inspection, the makeup is actually tattooed on. `;
-		} else {
-			r += `${His} face is makeup-free. `;
 		}
 
 		return r;
 	}
 
-	function master(child) {
-		return getEnunciation(child).title;
-	}
-
-	function mouth(child) {
+	function hairClothing(child) {
 		let
 			r = ``;
 
-		r += `${He} has `;
-		if (child.lips <= 10) {
-			r += `thin, unattractive lips. `;
-		} else if (child.lips <= 20) {
-			r += `normal lips. `;
-		} else if (child.lips <= 40) {
-			r += `full, attractive lips. `;
-		} else if (child.lips <= 70) {
-			r += `plump, beestung lips. `;
-		} else if (child.lips <= 95) {
-			r += `huge, obviously augmented lips. `;
-		} else {
-			r += `a facepussy: ${his} lips are so huge that they're always a bit parted in the middle, forming a moist, inviting hole${PC.dick ? ` for cock` : ``}. `;
-		}
-
-		if (V.showImplantEffects) {
-			if (arcology.FSTransformationFetishist !== "unset") {
-				if (child.lipsImplant > 0) {
-					r += `They are about ${Math.floor((child.lipsImplant / child.lips) * 100)}% implant. `;
+		switch (child.hStyle) {
+			case "neat":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is kept out of ${his} face by a pastel-colored headband. `;
+							break;
+						default:
+							r += `cascades almost to the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `flows fashionably down ${his} bare back. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is kept out of ${his} face by a pastel-colored headband. `;
+							break;
+						default:
+							r += `is brushed back over ${his} shoulders. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `follows the latest fashion. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is kept out of ${his} face by a pastel-colored headband. `;
+							break;
+						default:
+							r += `is brushed back. `;
+							break;
+					}
+				} else {
+					switch (child.clothes) {
+						case "a slave gown":
+							r += `is gelled into a fashionable wave. `;
+							break;
+						case "a ball gown":
+							r += `is gelled into a fashionable wave. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is neatly brushed. `;
+							break;
+					}
 				}
-				if (arcology.FSTransformationFetishist > 20) {
-					if (child.lips > 70) {
-						if (child.lipsImplant / child.lips < .50) {
-							r += `${His} lips are huge and <span class="red">disgustingly natural</span> for their size. `;
-						} else {
-							r += `${His} lips are huge and <span class="green">obviously implants,</span> as they should be. `;
-						}
+				break;
+			case "up":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is piled up on ${his} head in a perfect 60's beehive. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is in a huge bun secured by a pastel scrunchy. `;
+							break;
+						default:
+							r += `is back in an enormous bun. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is piled up on ${his} head in a perfect 60's beehive. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is in a bun secured by a pastel scrunchy. `;
+							break;
+						default:
+							r += `is back in a big bun. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is piled up on ${his} head in a perfect 60's 'do. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is in a tight little bun secured by a pastel scrunchy. `;
+							break;
+						default:
+							r += `is back in a tight little bun. `;
+							break;
+					}
+				} else {
+					switch (child.clothes) {
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is combed back. `;
+							break;
+					}
+				}
+				break;
+			case "tails":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in huge tails secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into beautiful long tails, one of which comes around to run down ${his} chest. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in long tails and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in long tails and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in twin tails that almost reach the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in big tails secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into beautiful tails, one of which comes around to fall between ${his} breasts. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in long tails and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in long tails and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in long twin tails. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in short tails secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into short tails set low at the nape of ${his} neck. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in short braids and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in short braids and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in short braids. `;
+							break;
+					}
+				} else {
+					switch (child.clothes) {
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is too short to be kept in proper tails, so it's simply combed back. `;
+							break;
 					}
 				}
-			}
-		}
-
-		if (canTalk(child)) {
-			if (child.lips > 70) {
-				r += `${He} can barely enunciate past ${his} dick-sucking lips; '${WrittenMaster(child)}' comes out as '${master(child)}.' `;
-			}
-		}
-
-		if (child.teeth !== "normal") {
-			if (child.teeth === "crooked") {
-				r += `${His} teeth are <span class="yellow">crooked,</span> detracting from ${his} beauty whenever ${he} opens ${his} mouth. `;
-			} else if (child.teeth === "straightening braces") {
-				r += `${He} has braces, ${child.visualAge < 15 ? `a cute look on such a young girl. ` : `and occasionally looks preoccupied with discomfort as they straighten ${his} teeth. `}`;
-			} else if (child.teeth === "cosmetic braces") {
-				r += `${He}'s wearing braces despite ${his} straight teeth, ${child.visualAge < 15 ? `a cute look on such a young girl. ` : `just for appearances. `}`;
-			} else if (child.teeth === "gapped") {
-				r += `${He} has a prominent gap between ${his} front teeth${child.faceShape === "cute" ? ` that suits ${his} cute face surprisingly well` : ``}. `;
-				if (canTalk(child)) {
-					r += `It also leaves ${him} with a slight lisp. `;
-				}
-			} else if (child.teeth === "removable") {
-				r += `${His} teeth have been removed and replaced with high-quality dentures. It's difficult to tell anything's unusual until you take them out for gummy oral sex. `;
-			} else if (child.teeth === "pointy") {
-				r += `${His} teeth have been replaced with realistic implants that mimic the dentition of a carnivore. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying. `;
-			} else if (child.teeth === "baby") {
-				r += `${He} still has ${his} baby teeth. `;
-			} else if (child.teeth === "mixed") {
-				r += `${He} is in the process of replacing ${his} baby teeth. `;
-			}
-		}
-
-		if (child.tastes === -1) {
-			r += `${He} has no sense of taste, but this isn't immediately obvious just by looking at ${his} tongue. `;
-		}
-
-		if (V.showBodyMods) {
-			r += piercings.lips(child);
-			r += piercings.tongue(child);
-		}
-
-		r += `${He} is `;
-		if (child.skill.oral >= 100) {
-			r += `an <span class="aquamarine">oral sex master.</span> `;
-		} else if (child.skill.oral > 60) {
-			r += `an <span class="aquamarine">expert at oral.</span> `;
-		} else if (child.skill.oral > 30) {
-			r += `<span class="aquamarine">orally skilled.</span> `;
-		} else if (child.skill.oral > 10) {
-			r += `<span class="aquamarine">capable of basic oral sex.</span> `;
-		} else {
-			r += `unskilled at oral sex. `;
-		}
-
-		return r;
-	}
-
-	function nails(child) {
-		let
-			r = ``;
-
-		if (!hasAnyArms(child)) {
-			r += `${He} has no hands, and thus, no nails. `;
-		} else {
-			switch (child.nails) {
-				case 1:
-					r += `${His} nails are long and elegant. `;
-					break;
-				case 2:
-					r += `${His} nails are color-coordinated with ${his} ${child.hColor} hair. `;
-					break;
-				case 3:
-					r += `${His} nails are sharp and claw-like. `;
-					break;
-				case 4:
-					r += `${His} nails are bright and glittery. `;
-					break;
-				case 5:
-					r += `${His} nails are long and garish, streetwalker-style. `;
-					break;
-				case 6:
-					r += `${His} nails are vivid and eye-catching. `;
-					break;
-				case 7:
-					r += `${His} nails are vivid, eye-catching and color-coordinated with ${his} ${child.hColor} hair. `;
-					break;
-				case 8:
-					r += `${His} nails are shiny and metallic. `;
-					break;
-				case 9:
-					r += `${His} nails are shiny, metallic and color-coordinated with ${his} ${child.hColor} hair. `;
-					break;
-				default:
-					r += `${His} nails are neatly clipped. `;
-					break;
-			}
-		}
-
-		return r;
-	}
-
-	function piercings() {
-		function anus(child) {
-			let
-				r = ``;
-
-			if (child.vagina > -1) {
-				if (child.anusPiercing === 1) {
-					r += `${He} has a simple piercing between ${his} pussy and ${his} asshole. `;
-				} else if (child.anusPiercing === 2) {
-					r += `${He} has a big ring between ${his} pussy and ${his} asshole and studs in all around ${his} anus. `;
+				break;
+			case "ponytail":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in a huge ponytail secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into a beautiful long ponytail, which swooshes as ${he} moves. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in a long ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in a long ponytail and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in a ponytail that almost reaches the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in a big ponytail secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into a beautiful ponytail, which swooshes as ${he} moves. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in a long ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in a long ponytail and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in a long ponytail. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in a short ponytail secured by a hair tie with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into a short ponytail set low at the nape of ${his} neck. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in a ponytail and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in a ponytail and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in a short ponytail. `;
+							break;
+					}
+				} else {
+					r += `is too short to be kept in a proper ponytail, so it's simply combed back. `;
 				}
-			} else {
-				if (child.anusPiercing === 1) {
-					r += `${He} has a simple perianal piercing between the base of ${his} dick and ${his} girly butthole. `;
-				} else if (child.anusPiercing === 2) {
-					r += `${He} has a big ring between the base of ${his} dick and ${his} girly butthole, which has studs all around it. `;
+				break;
+			case "braided":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in huge braids secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into beautiful long braids, one of which comes around to run down ${his} chest. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in long braids and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in long braids and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in braids that almost reach the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in long braids secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a ball gown":
+						case "a slave gown":
+							r += `is in beautiful braids, one of which comes around to fall between ${his} breasts. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in braids and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in braids and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in long braids. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is back in short braids secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is combed into short braids set low at the nape of ${his} neck. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in short braids and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in short braids and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in short braids. `;
+							break;
+					}
+				} else {
+					switch (child.clothes) {
+						default:
+							r += `is too short to be kept in proper braids, so it's simply combed back. `;
+							break;
+					}
 				}
-			}
-
-			return r;
-		}
-
-		piercings.anus = anus;
-
-		function clit(child) {
-			let
-				r = ``;
-
-			switch (child.clitPiercing) {
-				case 3:
-					if (child.vagina > -1) {
-						r += `${He} has a smart piercing in ${his} clit. `;
-					} else {
-						r += `${He} has a smart frenulum piercing. `;
+				break;
+			case "dreadlocks":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is in dreadlocks, some in ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is in dreadlocks, spreading out in many directions and almost reaching the ground. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in long dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in long dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in dreadlocks that almost reach the ground. `;
+							break;
 					}
-					break;
-				case 2:
-					if (child.vagina > -1) {
-						r += `${He} has a big ring in ${his} clit. `;
-					} else {
-						r += `${He} has a big ring in ${his} dickhead. `;
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is in dreadlocks, some in hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+							r += `is in dreadlocks, spreading out in many directions. `;
+							break;
+						case "a ball gown":
+							r += `is in dreadlocks, spreading out in many directions. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in dreadlocks. `;
+							break;
 					}
-					break;
-				case 1:
-					if (child.vagina > -1) {
-						r += `${He} has a simple clitoral stud. `;
-					} else {
-						r += `${He} has a simple dickhead stud. `;
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is in short dreadlocks, some in hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is in short dreadlocks, spreading around ${his} head. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in short dreadlocks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in short dreadlocks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is in short dreadlocks. `;
+							break;
 					}
-					break;
-			}
-
-			return r;
-		}
-
-		piercings.clit = clit;
-
-		function corset(child) {
-			let
-				r = ``;
-
-			if (child.corsetPiercing > 0) {
-				r += `${He} has a corset piercing, a ladder of steel rings running up each side of ${his} back: `;
-				if (child.bellyAccessory === "a corset" || child.bellyAccessory === "an extreme corset") {
-					r += `these are looped through special lugs in the back of ${his} actual corset, making it almost a part of ${his} body. `;
-					if (child.devotion > 50) {
-						r += `${He} couldn't remove it, even if ${he} wanted to. `;
-					} else if (child.devotion >= -20) {
-						r += `${He} couldn't remove it, even if ${he} were inclined to try. `;
-					} else {
-						r += `Any attempt to remove it will cause intense pain. `;
+				} else {
+					switch (child.clothes) {
+						default:
+							r += `is too short to be kept in proper dreadlocks, so it's simply combed back. `;
+							break;
+					}
+				}
+				break;
+			case "curled":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is curled into long flowing locks secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is curled into long flowing locks, almost reaching the ground. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is curled into long flowing locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is curled into long flowing locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is curled into long flowing locks that almost reach the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is curled into long locks secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is curled into long locks, reaching past ${his} shoulders. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is curled into long locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is curled into long locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is curled into long locks. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is curled into short locks secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is curled into short locks. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is curled into short locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is curled into short locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is curled into short locks. `;
+							break;
 					}
 				} else {
+					switch (child.clothes) {
+						default:
+							r += `is in short curls. `;
+							break;
+					}
+				}
+				break;
+			case "permed":
+				if (child.hLength > 100) {
 					switch (child.clothes) {
 						case "a schoolgirl outfit":
-							r += `${his} blouse hides them completely, but they're laced tightly, so ${he}'s aware they're there. `;
+							r += `is permed into long flowing curls secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
 							break;
-						case "a mini dress":
-							r += `these are clipped into the mini dress covering them, making it almost a part of ${his} body. `;
-							if (child.devotion > 50) {
-								r += `${He} couldn't remove it, even if ${he} wanted to. `;
-							} else if (child.devotion >= -20) {
-								r += `${He} couldn't remove it, even if ${he} were inclined to try. `;
-							} else {
-								r += `Any attempt to remove it will cause intense pain. `;
-							}
+						case "a slave gown":
+						case "a ball gown":
+							r += `is permed into long flowing curls, almost reaching the ground. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is permed and is kept out of ${his} face by a couple of cute hairpins. `;
 							break;
+						case "a tank-top":
 						case "a tube top":
-							r += `the piercings are only partly visible on ${his} back. `;
+							r += `is permed and is kept out of ${his} face by a couple of black hairpins. `;
 							break;
-						case "a t-shirt":
-							r += `${his} shirt hides them completely, but they're laced tightly, so ${he}'s aware they're there. `;
+						default:
+							r += `is permed; ${his} curls almost reach the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is permed and secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
 							break;
 						case "a slave gown":
-							r += `they're revealed by the swooping back of ${his} gown and laced up with matching silk ribbon. `;
+						case "a ball gown":
+							r += `is permed, reaching past ${his} shoulders. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is permed and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is permed and is kept out of ${his} face by a couple of black hairpins. `;
 							break;
 						default:
-							r += `they're laced up with a ribbon, tightly enough to keep ${him} aware they're there. `;
+							r += `is permed. `;
 							break;
 					}
-				}
-			}
-
-			return r;
-		}
-
-		piercings.corset = corset;
-
-		function dick(child) {
-			let
-				r = ``;
-
-			if (child.dick !== 0) {
-				if (child.dickPiercing === 1) {
-					r += `${He} has a row of studs down ${his} shaft. `;
-				} else if (child.dickPiercing === 2) {
-					r += `${He} has a row of heavy rings down ${his} shaft. `;
-				}
-
-				if (child.scrotum !== 0) {
-					if (child.dickPiercing === 1) {
-						r += `${He} has a couple of studs in ${his} ballsack. `;
-					} else if (child.dickPiercing === 2) {
-						r += `${He} has a row of rings down the center of ${his} ballsack, all the way from the base of ${his} shaft to ${his} perineum. `;
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is permed into short waves secured by hair ties with plastic buttons, bearing the garish inscription `;
+							r += App.Desc.inscrip(child);
+							break;
+						case "a slave gown":
+						case "a ball gown":
+							r += `is permed into short waves. `;
+							break;
+						case "a burkini":
+						case "a burqa":
+						case "a hijab and abaya":
+						case "a hijab and blouse":
+						case "a niqab and abaya":
+							r += `is permed into short waves, but they're hidden by ${his} modest garb. `;
+							break;
+						case "a klan robe":
+						case "a slutty klan robe":
+							r += `is permed into short waves, but they're hidden by ${his} hood. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is permed into short waves and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is permed into short waves and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is permed into short waves. `;
+							break;
 					}
 				} else {
-					if (child.dickPiercing === 1) {
-						r += `${He} has a couple of studs beneath the base of ${his} dick. `;
-					} else if (child.dickPiercing === 2) {
-						r += `${He} has a row of rings all the way from the base of ${his} shaft to ${his} perineum. `;
+					switch (child.clothes) {
+						case "a burkini":
+						case "a burqa":
+						case "a hijab and abaya":
+						case "a hijab and blouse":
+						case "a niqab and abaya":
+							r += `is hidden by ${his} modest garb. `;
+							break;
+						case "a klan robe":
+						case "a slutty klan robe":
+							r += `is hidden by ${his} hood. `;
+							break;
+						default:
+							r += `is permed into short curls. `;
+							break;
 					}
 				}
-			}
-
-			return r;
-		}
-
-		piercings.dick = dick;
-
-		function ears(child) {
-			let
-				r = ``;
-
-			if (child.earPiercing > 0) {
-				if (child.earPiercing === 1) {
-					r += `${His} earlobes are conventionally pierced. `;
-				} else {
-					r += `${His} ears are heavily pierced, with multiple lobe piercings and a row of helix piercings. `;
-				}
-
-				switch (child.clothes) {
-					case "a t-shirt":
-						r += `${He}'s wearing plain but pretty earrings. `;
-						break;
-					case "a tube top":
-						r += `${He}'s wearing large hoop earrings. `;
-						break;
-					case "a schoolgirl outfit":
-						r += `${He}'s wearing small girlish earrings. `;
-						break;
-					case "a mini dress":
-						r += `${He}'s wearing shiny pearl earrings. `;
-						break;
-					case "a slave gown":
-					case "a ball gown":
-						r += `${He}'s wearing lovely diamond earrings; the stones are cut in an alluring, feminine style. `;
-						break;
-				}
-			}
-
-			return r;
-		}
-
-		piercings.ears = ears;
-
-		function eyebrows(child) {
-			let
-				r = ``;
-
-			if (child.eyebrowPiercing === 1) {
-				r += `${He} has a simple stud in one eyebrow. `;
-			} else if (child.eyebrowPiercing === 2) {
-				r += `${He} has multiple eyebrow rings. `;
-			}
-
-			return r;
-		}
-
-		piercings.eyebrows = eyebrows;
-
-		function lips(child) {
-			let
-				r = ``;
-
-			if (child.lipsPiercing === 1) {
-				r += `${He} has a simple lip piercing. `;
-			} else if (child.lipsPiercing === 2) {
-				r += `${His} lips are heavily pierced. `;
-			}
-
-			return r;
-		}
-
-		piercings.lips = lips;
-
-		function nipples(child) {
-			let
-				r = ``,
-				nipColor = nippleColor(child);
-
-			if (child.nipplesPiercing === 1) {
-				r += `${His} ${nipColor} nipples have a simple piercing, which keeps them a little harder than they would normally be. `;
-			} else if (child.nipplesPiercing === 2) {
-				r += `${His} ${nipColor} nipples are heavily pierced with several rings and studs, and there is a chain between them. `;
-				if (child.boobShape === "saggy" && child.boobs > 2500) {
-					r += `It's been shortened to take advantage of the way ${his} tits sag, and holds ${his} ${nipColor} nipples almost together, producing cleavage that runs from ${his} ${nipColor} nipples all the way up to ${his} sternum. `;
-				} else {
-					r += `The constant tugging keeps ${his} ${nipColor} nipples erect. `;
-				}
-
-				if (child.nipplesPiercing > 0) {
+				break;
+			case "luxurious":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is in luxurious layered locks flowing gorgeously down ${his} bare back.habit": `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is in luxurious layered locks kept out of ${his} face by a pastel-colored headband. `;
+							r += `In ${his} hair is ${flowers(child)}`;
+							break;
+						default:
+							r += `is in luxurious layered locks, cascading almost to the ground. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
 					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is in luxurious layered locks flowing gorgeously down ${his} bare back.habit": `;
+							break;
+						case "a klan robe":
+						case "a slutty klan robe":
+							r += `is in luxurious layered locks flowing gorgeously but not visible under ${his} modest head covering. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in luxurious layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
 						case "a schoolgirl outfit":
-							if (child.boobs <= 2500) {
-								r += `The piercings are tantalizingly visible under the thin material. `;
-							}
+							r += `is in luxurious layered locks kept out of ${his} face by a pastel-colored headband. `;
+							r += `In ${his} hair is ${flowers(child)}`;
 							break;
-						case "a mini dress":
-							r += `The piercings are tantalizingly visible under the tight mini dress. `;
+						default:
+							r += `is brushed back over ${his} shoulders. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a slave gown":
+						case "a ball gown":
+							r += `is in luxuriously styled short locks. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						case "a schoolgirl outfit":
+							r += `is in luxuriously styled short locks kept out of ${his} face by a pastel-colored headband. `;
+							r += `In ${his} hair is ${flowers(child)}`;
+							break;
+						default:
+							r += `is brushed back. `;
 							break;
 					}
-				}
-			}
-
-			return r;
-		}
-
-		piercings.nipples = nipples;
-
-		function nose(child) {
-			let
-				r = ``;
-
-			if (child.nosePiercing === 1) {
-				r += `${He} has simple studs in ${his} nose. `;
-			} else if (child.nosePiercing === 2) {
-				r += `${He} has nasal studs and a large septum ring. `;
-			}
-
-			return r;
-		}
-
-		piercings.nose = nose;
-
-		function tongue(child) {
-			let
-				r = ``;
-
-			if (child.tonguePiercing === 1) {
-				r += `${His} tongue bears a single stud, so oral sex with ${him} is a bit more fun. `;
-			} else if (child.tonguePiercing === 2) {
-				r += `${His} tongue bears a row of studs, offering thorough stimulation to anyone ${he} blows. `;
-			}
-			if (canTalk(child) && child.lips <= 70 && child.lipsPiercing === 2) {
-				r += `${He} can barely enunciate past ${his} piercings; '${WrittenMaster(child)}' comes out as '${master(child)}.' `;
-			}
-
-			return r;
-		}
-
-		piercings.tongue = tongue;
-
-		function vagina(child) {
-			let
-				r = ``;
-
-			if (child.vaginaPiercing > 0) {
-				r += `${He} has a `;
-				if (child.vaginaPiercing) {
-					r += `simple row of studs `;
 				} else {
-					r += `row of big rings `;
+					switch (child.clothes) {
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is in luxurious short layered locks and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is luxuriously styled and layered. `;
+							break;
+					}
 				}
-				r += `down ${his} labia. `;
-			}
-
-			return r;
-		}
-
-		piercings.vagina = vagina;
-	}
-
-	function shoulders(child) {
-		let
-			r = ``;
-
-		if (child.shoulders < -1) {
-			r += `${His} shoulders and chest are very narrow and `;
-			if (child.boobs > 2000) {
-				r += `feminine, forcing ${his} pressed-together tits to spread far beyond ${his} sides. `;
-			} else {
-				r += `feminine. `;
-			}
-		} else if (child.shoulders < 0) {
-			r += `${His} shoulders and chest are quite `;
-			if (child.boobs > 1200) {
-				r += `feminine, causing a lot of cleavage and pressing ${his} boobs outward beyond ${his} sides. `;
-			} else {
-				r += `feminine. `;
-			}
-		} else if (child.shoulders > 1) {
-			r += `${His} shoulders and chest are very `;
-			if (child.boobs > 600) {
-				r += `broad, making ${his} boobs look a lot smaller than they actually are. `;
-			} else {
-				r += `broad. `;
-			}
-		} else if (child.shoulders > 0) {
-			r += `${His} shoulders and chest are fairly `;
-			if (child.boobs > 600) {
-				r += `broad, making ${his} tits look smaller than they actually are. `;
-			} else {
-				r += `broad. `;
-			}
-		} else {
-			r += `${His} shoulders and chest are `;
-			if (child.boobs > 800) {
-				r += `feminine, flattering ${his} breasts. `;
-			} else {
-				r += `feminine. `;
-			}
-		}
-
-		if (child.shoulders > child.hips) {
-			r += `They're wider than ${his} hips, `;
-			if (child.boobs > 2000 * (child.shoulders - child.hips)) {
-				r += `but ${his} massive breasts make it hard to discern. `;
-			} else if (arcology.FSGenderRadicalist !== "unset") {
-				r += `giving ${him} a somewhat mannish appearance. `;
-			} else if (arcology.FSGenderFundamentalist !== "unset") {
-				r += `giving ${him} an <span class="red">ugly, mannish appearance.</span> `;
-			} else {
-				r += `giving ${him} an <span class="red">unattractive, somewhat mannish, appearance.</span> `;
-			}
-		}
-
-		return r;
-	}
-
-	function skin(child) {
-		let
-			r = ``;
-
-		if (V.seeNationality) {
-			if (child.nationality === 0) {
-				r += `Ethnically, ${he}'s `;
-			} else if (child.nationality === "slave") {
-				r += `${He}'s been chattel long enough that slavery is effectively ${his} nationality; ethnically, ${he}'s `;
-			} else if (child.nationality === "Stateless") {
-				r += `${He} has spent so much time in the Free Cities that their statelessness is effectively ${his} nationality; ethnically, ${he}'s `;
-			} else if (child.nationality === "Zimbabwean" && child.race === "white") {
-				r += `${He}'s originally <span class="tan">Rhodesian;</span> ethnically, ${he}'s `;
-			} else if (child.nationality === "Vatican") {
-				r += `${He}'s originally <span class="tan">from Vatican City;</span> ethnically, ${he}'s `;
-			} else {
-				r += `${He}'s originally <span class="tan">${child.nationality};</span> ethnically, ${he}'s `;
-			}
-			r += `<span class="tan">${child.race},</span> and ${his} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
-
-			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}.` : ``}`;
-
-			if (child.race !== child.origRace) {
-				if (V.saleDescription) {
-					if (PC.skill.medicine >= 100) {
-						r += `Thanks to your medical experience, you can easily tell that ${he} was originally ${child.origRace}, but surgically modified. `;
-					} else if (PC.skill.medicine >= 50) {
-						r += `Oddly enough, ${he} appears to have a number of ${child.origRace} features. `;
-					} else if (PC.skill.slaving >= 50) {
-						r += `Thanks to your experience in buying and selling slaves, you can easily tell that ${he} is not naturally ${child.race}. `;
-					} else if (jsRandom(0, 100) < PC.skill.medicine) {
-						r += `${His} features seem slightly off. `;
+				break;
+			case "strip":
+				if (child.hLength > 100) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is shaved into a strip that cascades magnificently down ${his} back, with scores of tiny pastel bows woven into it. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is shaved into a strip and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is shaved into a strip and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is shaved into a strip atop ${his} head that cascades magnificently down ${his} back. `;
+							break;
+					}
+				} else if (child.hLength > 30) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is shaved into a long braided strip with tiny pastel bows woven into it. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is shaved into a long braided strip and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is shaved into a long braided strip and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is shaved into a long braided strip. `;
+							break;
+					}
+				} else if (child.hLength > 10) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `is shaved into a strip down the middle of ${his} head with tiny pastel bows woven into it. `;
+							break;
+						case "a t-shirt":
+						case "an oversized t-shirt":
+							r += `is shaved into a strip and is kept out of ${his} face by a couple of cute hairpins. `;
+							break;
+						case "a tank-top":
+						case "a tube top":
+							r += `is shaved into a strip and is kept out of ${his} face by a couple of black hairpins. `;
+							break;
+						default:
+							r += `is shaved into a strip. `;
+							break;
 					}
 				} else {
-					r += `${He} has received plastic surgery to appear ${child.race}; ${he} is originally ${child.origRace}. `;
+					r += `is shaved into a mohawk. `;
 				}
-			}
-		} else if (V.seeRace) {
-			r += `Ethnically, ${he}'s <span class=tan>${child.race},</span> and ${his} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
+				break;
+			case "bald":
+				r += `is completely bald. `;
+				break;
+		}
 
-			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}. ` : ``}`;
+		return r;
+	}
 
-			if (child.race !== child.origRace) {
-				if (V.saleDescription) {
-					if (PC.skill.medicine >= 100) {
-						r += `Thanks to your medical experience, you can easily tell that ${he} was originally ${child.origRace}, but surgically modified. `;
-					} else if (PC.skill.medicine >= 50) {
-						r += `Oddly enough, ${he} appears to have a number of ${child.origRace} features. `;
-					} else if (PC.skill.slaving >= 50) {
-						r += `Thanks to your experience in buying and selling slaves, you can easily tell that ${he} is not naturally ${child.race}. `;
-					} else if (jsRandom(0, 100) < PC.skill.medicine) {
-						r += `${His} features seem slightly off. `;
-					}
+	function heel(child) {
+		let
+			r = ``;
+
+		if (child.heels) {
+			r += `${His} <span class="pink">legs have been altered</span> so that ${he} must wear heels in order to walk. `;
+		}
+
+		if (V.showClothing && !V.saleDescription) {
+			if (hasAnyLegs(child)) {
+				if (child.shoes !== "none" && child.shoes !== "flats") {
+					r += `${He} is, so ${he} can walk reasonably well. `;
 				} else {
-					r += `${He} has received plastic surgery to appear ${child.race}; ${he} is originally ${child.origRace}. `;
+					r += `Since ${he} is without them, ${he}'s crawling on all fours. `;
 				}
 			}
-		} else {
-			r += `${His} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
-
-			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}.` : ``}`;
 		}
 
 		return r;
 	}
 
-	function tats() {
-		function anus(child) {
-			let
-				r = ``;
-
-			if (child.anusTat !== 0) {
-				switch (child.anusTat) {
-					case "bleached":
-						r += `${His} anus is bleached. `;
-						break;
-					case "tribal patterns":
-						r += `${His} anus is bleached. It is tattooed with a tribal pattern that changes interestingly when ${he} relaxes or tightens ${his} sphincter. `;
-						break;
-					case "flowers":
-						r += `${He} has a huge blooming flower tattooed right over ${his} anus. `;
-						break;
-					case "counting":
-						if (child.counter.anal === 0) {
-							r += `${He} has a dashed line tattooed around ${his} anus as a guideline for where ${his} anal count will be inscribed. `;
-						} else if (child.counter.anal < 1000) {
-							r += `${He} has fine rings tattooed around ${his} anus, one for each hundred cocks. `;
-						} else {
-							r += `${He} has thick and fine rings tattooed around ${his} anus, for each thousand and hundred cocks. `;
-						}
-						break;
-					case "advertisements":
-						if (child.vagina > -1) {
-							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Second Pussy.' `;
-						} else {
-							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Spit First.' `;
-						}
-						break;
-					case "rude words":
-						if (child.vagina > -1) {
-							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Fucktoy's Favorite Fuckhole.' `;
-						} else {
-							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Sissy Slut's Sodomy Slit.' `;
-						}
-						break;
-					case "degradation":
-						r += `${His} anus is bleached. It is tattooed with gothic script in a ring around ${his} hole, reading '${WrittenMaster(child)} Made Me An Anal Slut.' `;
-						break;
-					case "bovine patterns":
-						r += `${His} anus is tattooed to mimic the puffy, dark appearance of a cow's. `;
-						break;
-					case "sacrilege":
-						r += `${He} has a ring of Aramaic text tattooed around ${his} anus, which translates to horrible blasphemy. `;
-						break;
-					case "sacrament":
-						r += `${He} has a ring of Aramaic text tattooed around ${his} anus, which translates to a comforting blessing. `;
-						break;
-					case "possessive":
-						r += `${He} has a ring of numbers around ${his} anus, detailing the date ${he} was enslaved by you. `;
-						break;
-					case "paternalist":
-						r += `${His} anus is bleached. It is tattooed with text in a ring around ${his} hole, reading '${WrittenMaster(child)} Helped Me Love Anal.' `;
-						break;
-					case "Asian art":
-						r += `${His} anus is bleached. `;
-						break;
-					default:
-						r += `${child.anusTat}`;
-						break;
-				}
-			}
-
-			r += App.Desc.brand(child, "anus");
-			r += App.Desc.brand(child, "asshole");
+	function heightImplant(child) {
+		let
+			r = ``;
 
-			return r;
+		if (child.heightImplant > 0) {
+			r += `The proportions of ${his} arms and legs are odd, as though they have been artificially lengthened. `;
+		} else if (child.heightImplant < 0) {
+			r += `The proportions of ${his} arms and legs are odd, as though they have been surgically shortened. `;
 		}
 
-		tats.anus = anus;
+		return r;
+	}
 
-		function arms(child) {
-			let
-				r = ``;
+	function hips(child) {
+		let
+			r = ``;
 
-			if (child.armsTat !== 0) {
-				switch (child.armsTat) {
-					case "tribal patterns":
-						r += `${His} tribal tattoos run down ${his} arms. `;
-						break;
-					case "flowers":
-						r += `${His} floral tattoos run down ${his} arms to end in a pretty bloom on the back of each hand. `;
-						break;
-					case "counting":
-						if (child.counter.oral === 0) {
-							r += `There are horizontal lines tattooed around ${his} forearms, creating a blank space to permanently tally future sexual exploits. `;
-						} else if (child.counter.oral < 500) {
-							r += `Tiny dick, pussy, and anus symbols are tattooed on ${his} forearms, one for each organ ${he}'s manually pleasured. `;
-						} else {
-							r += `Tiny dick, pussy, and anus symbols are tattooed all over both ${his} arms, one for each organ ${he}'s manually pleasured. `;
-						}
-						break;
-					case "advertisements":
-						r += `${His} right arm is tattooed with a price list for use if ${he}'s whoring, and ${his} left with a simple tourist guide for use if ${he}'s serving the public. `;
-						break;
-					case "rude words":
-						r += `${His} arms have helpful instructions on how to restrain ${him} for rape, including indications of the best anchor points at ${his} wrists. `;
-						break;
-					case "degradation":
-						if (child.dick > 0) {
-							if (child.vagina > -1) {
-								if (child.boobs > 600) {
-									r += `'Boobs Pussy Cock Asshole' is tattooed on ${his} left arm, and 'Suck Fuck Hurt Rape' is tattooed on ${his} right. `;
-								} else {
-									r += `'Half Pussy & Half Cock' is tattooed on ${his} left arm, and 'All Whore' is tattooed on ${his} right. `;
-								}
-							} else if (child.boobs > 600) {
-								r += `'I didn't use to have boobs' is tattooed on ${his} left arm, and 'I didn't always take it up the ass' is tattooed on ${his} right. `;
-							} else {
-								r += `'I promise to cum buckets' is tattooed on ${his} left arm, and 'If you fuck my butt' is tattooed on ${his} right. `;
-							}
-						} else {
-							if (child.boobs > 800 && child.lactation > 0) {
-								r += `'Grade AAA Milker' is tattooed on ${his} left arm, and 'Grade AAA Breeder' is tattooed on ${his} right. `;
-							} else if (child.visualAge < 15) {
-								r += `'Teach me how to suck cock' is tattooed on ${his} left arm, and 'Teach me how to take dick' is tattooed on ${his} right. `;
-							} else {
-								r += `'There are many sex slaves like me' is tattooed on ${his} left arm, and 'But this one is ${WrittenMaster(child)}'s' is tattooed on ${his} right. `;
-							}
-						}
-						break;
-					case "Asian art":
-						r += `Tattoos of fierce dragons wind around both ${his} arms. `;
-						break;
-					case "scenes":
-						r += `${His} lewd tattoos cover ${his} arms; they include lots of little vignettes of sex, with dates to show when ${he} was first fucked like that. `;
-						break;
-					case "bovine pattern":
-						r += `Tattoos of cow-like spots cover ${his} arms, but stop short of each of ${his} elbows. `;
-						break;
-					case "sacrilege":
-						r += `Tattoos of swirling flames run down ${his} arms. `;
-						break;
-					case "sacrament":
-						r += `Tattoos of swirling thorns run down ${his} arms, culminating in a stylized depiction of a bloody nail on the back of each hand. `;
-						break;
-					case "possessive":
-						r += `${His} arm tattoos depict notable moments during ${his} enslavement by you, culminating in a stylized rendition of your first initial on ${his} left hand and your second on the right. `;
-						break;
-					case "paternalist":
-						if (child.dick > 0) {
-							if (child.vagina > -1) {
-								if (child.boobs > 600) {
-									r += `'Boobs Pussy Cock Asshole' is tattooed on ${his} left arm, and 'Caress Pleasure Stroke Stretch' is tattooed on ${his} right. `;
-								} else {
-									r += `'Half Pussy & Half Cock' is tattooed on ${his} left arm, and 'All Loved' is tattooed on ${his} right. `;
-								}
-							} else if (child.boobs > 600) {
-								r += `'I didn't use to have boobs' is tattooed on ${his} left arm, and 'And now I do!' is tattooed on ${his} right. `;
-							} else {
-								r += `'I promise to cum buckets' is tattooed on ${his} left arm, and 'If you treat me right' is tattooed on ${his} right. `;
-							}
-						} else {
-							if (child.boobs > 800 && child.lactation > 0) {
-								r += `'Please drink' is tattooed on ${his} left arm, and 'All my milk' is tattooed on ${his} right. `;
-							} else if (child.visualAge < 15) {
-								r += `'Please teach me how to suck cock' is tattooed on ${his} left arm, and 'Please teach me how to fuck' is tattooed on ${his} right. `;
-							} else {
-								r += `'There are many sex slaves like me' is tattooed on ${his} left arm, and 'But ${WrittenMaster(child)} loves me' is tattooed on ${his} right. `;
-							}
-						}
-						break;
-					default:
-						r += `${child.armsTat}`;
-						break;
+		if (child.hips < -1) {
+			if (child.butt > 2) {
+				r += `${His} butt is `;
+				if (arcology.FSHedonisticDecadence !== "unset") {
+					r += `disproportionately large for ${his} narrow hips, but your hedonistic arcology finds this attractive. `;
+				} else if (arcology.FSTransformationFetishist !== "unset") {
+					r += `disproportionately large for ${his} narrow hips, but your transformation fetishist arcology considers this attractive. `;
+				} else if (arcology.FSAssetExpansionist !== "unset") {
+					r += `disproportionately large for ${his} narrow hips, but that's just fine to your asset expansionist society. `;
+				} else {
+					r += `<span class="red">disproportionately large</span> for ${his} narrow hips. `;
+				}
+			} else {
+				r += `${His} hips are very narrow. `;
+			}
+		} else if (child.hips < 0) {
+			if (child.butt > 4) {
+				r += `${His} butt is `;
+				if (arcology.FSHedonisticDecadence !== "unset") {
+					r += `disproportionately large for ${his} trim hips, but your hedonistic arcology finds this attractive. `;
+				} else if (arcology.FSTransformationFetishist !== "unset") {
+					r += `disproportionately large for ${his} trim hips, but your transformation fetishist arcology considers this attractive. `;
+				} else if (arcology.FSAssetExpansionist !== "unset") {
+					r += `disproportionately large for ${his} trim hips, but that's just fine to your asset expansionist society. `;
+				} else {
+					r += `<span class="red">disproportionately large</span> for ${his} trim hips. `;
+				}
+			} else {
+				r += `${His} butt is complemented by ${his} trim hips. `;
+			}
+		} else if (child.hips > 2) {
+			if (child.butt <= 8) {
+				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} monstrous hips. `;
+			} else {
+				r += `${His} butt is fitting for ${his} monstrous hips. `;
+			}
+		} else if (child.hips > 1) {
+			if (child.butt <= 3 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
+				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} very wide hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
+			} else {
+				r += `${His} butt is flattered by ${his} very wide hips. `;
+			}
+		} else if (child.hips > 0) {
+			if (child.butt > 8) {
+				r += `${His} butt is `;
+				if (arcology.FSHedonisticDecadence !== "unset") {
+					r += `disproportionately large for ${his} broad hips, but your hedonistic arcology finds this attractive. `;
+				} else if (arcology.FSTransformationFetishist !== "unset") {
+					r += `disproportionately large for ${his} broad hips, but your transformation fetishist arcology considers this attractive. `;
+				} else if (arcology.FSAssetExpansionist !== "unset") {
+					r += `disproportionately large for ${his} broad hips, but that's just fine to your asset expansionist society. `;
+				} else {
+					r += `<span class="red">disproportionately large</span> for ${his} broad hips. `;
 				}
+			} else if (child.butt <= 2 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
+				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} broad hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
+			} else {
+				r += `${His} butt is complemented by ${his} broad hips. `;
 			}
+		} else {
+			if (child.butt > 6) {
+				r += `${His} butt is `;
+				if (arcology.FSHedonisticDecadence !== "unset") {
+					r += `disproportionately large for ${his} womanly hips, but your hedonistic arcology finds this attractive. `;
+				} else if (arcology.FSTransformationFetishist !== "unset") {
+					r += `disproportionately large for ${his} womanly hips, but your transformation fetishist arcology considers this attractive. `;
+				} else if (arcology.FSAssetExpansionist !== "unset") {
+					r += `disproportionately large for ${his} womanly hips, but that's just fine to your asset expansionist society. `;
+				} else {
+					r += `<span class="red">disproportionately large</span> for ${his} womanly hips. `;
+				}
+			} else if (child.butt <= 1 && (arcology.FSSlimnessEnthusiast === "unset" || child.boobs >= 500)) {
+				r += `${His} butt is <span class="red">disproportionately small</span> for ${his} ample hips${arcology.FSSlimnessEnthusiast !== "unset" ? `, which your arcology finds unattractive on busty slaves` : ``}. `;
+			} else {
+				r += `${His} butt is complemented by ${his} ample hips. `;
+			}
+		}
 
-			r += App.Desc.brand(child, "upper arm");
-			r += App.Desc.brand(child, "lower arm");
-			r += App.Desc.brand(child, "hand");
-			r += App.Desc.brand(child, "wrist");
-
-			return r;
+		switch (child.tailShape) {
+			case "neko":
+				r += `${He} has a long, slender, ${child.tailColor} cat tail which tends to sway side to side when ${he} is focused on a task. `;
+				break;
+			case "inu":
+				r += `${He} has a bushy, ${child.tailColor} dog tail which tends to wag energetically when ${he} gets exited. `;
+				break;
+			case "kit":
+				r += `${He} has a soft, fluffy, ${child.tailColor} fox tail. `;
+				break;
+			case "kitsune":
+				r += `${He} has three incredibly soft, fluffy, ${child.tailColor} fox tails; they feel heavenly to the touch. `;
+				break;
+			case "tanuki":
+				r += `${He} has a long, fluffy, ${child.tailColor} tanuki tail with a dark stripe running down the middle. `;
+				break;
+			case "ushi":
+				r += `${He} has a long, ${child.tailColor} cow tail; it has a small tuft of hair at the end and tends to swat at things absentmindedly. `;
+				break;
+			case "usagi":
+				r += `${He} has a short and fluffy ${child.tailColor} rabbit tail. `;
+				break;
+			case "risu":
+				r += `${He} has a big and bushy ${child.tailColor} squirrel tail. `;
+				break;
+			case "uma":
+				r += `${He} has a long horse tail consisting of ${child.tailColor} hair. `;
+				break;
+			default:
+				if (child.tail === "combat") {
+					r += `${He} has a very long ${child.tailColor} metallic tail that can lash out, constrict, and deploy razor sharp spikes on command. `;
+				} else if (child.tail === "sex") {
+					r += `${He} has a long, slender, ${child.tailColor} tail. While not strong it is very dexterous and has a small fleshy spade-shaped tip that can vibrate and dispense lube on command. `;
+				}
 		}
 
-		tats.arms = arms;
+		return r;
+	}
 
-		function back(child) {
-			let
-				r = ``;
+	function makeup(child) {
+		let
+			r = ``;
 
-			if (child.backTat !== 0) {
-				switch (child.backTat) {
-					case "tribal pattern":
-						r += `${He} has a totem of ${his} spirit animal tattooed across ${his} back. `;
-						break;
-					case "flowers":
-						r += `${His} back is covered in hundreds of beautiful flower tattoos; one could spend half an hour examining them all. `;
-						break;
-					case "counting":
-						r += `${His} back is tattooed with tick marks to count the days of ${his} sexual `;
-						if (child.weekAcquired === 0) {
-							r += `enslavement to you. There are a lot of them. `;
-						} else {
-							if (((V.week - child.weekAcquired) * 7) + jsRandom(-3, 3)) {
-								r += `slavery here. There are only a few. `;
-							} else {
-								r += `slavery here: ${weeksOwned} of them. `;
-							}
-						}
-						break;
-					case "advertisements":
-						r += `${He} has an ad for the arcology itself tattooed across ${his} back. `;
-						break;
-					case "rude words":
-						r += `'Sex Slave' is tattooed across ${his} back; the tattoo uses the broad space to make each letter ${V.showInches === 2 ? `six inches` : `fifteen centimeters`} tall, so that ${his} identity can be read from hundreds of ${V.showInches === 2 ? `yards` : `meters`} off. `;
-						break;
-					case "degradation":
-						r += `${He} has `;
-						if (child.dick > 0) {
-							if (child.vagina > -1) {
-								if (child.boobs > 600) {
-									r += `'Futa Slave'`;
-								} else {
-									r += `'Hermaphrodite'`;
-								}
-							} else if (child.boobs > 600) {
-								r += `'Shemale Slave'`;
-							} else {
-								r += `'Dickgirl Slave'`;
-							}
-						} else {
-							if (child.boobs > 800 && child.lactation > 0) {
-								r += `'Slave Cow'`;
-							} else if (child.visualAge < 15) {
-								r += `'Slave Girl'`;
-							} else {
-								r += `'Sex Slave'`;
-							}
-						}
-						r += `tattooed across ${his} back in gothic script. `;
-						break;
-					case "Asian art":
-						r += `An Asian dragon is tattooed in a circle across ${his} back; the dragon has subtle features that, according to traditional meanings, relate it to ${his} personality. `;
-						break;
-					case "scenes":
-						if (child.vagina === -1) {
-							r += `A line-art rendition of ${child.slaveName} ${himself} cumming copiously while riding a dick is tattooed across ${his} entire back. `;
-						} else if (child.lactation > 0) {
-							r += `A line-art rendition of ${child.slaveName} ${himself} nursing a pair of ${his} fellow slaves is tattooed across ${his} entire back. `;
-						} else if (child.skill.vaginal >= 100) {
-							r += `A line-art rendition of ${child.slaveName} ${himself} performing reverse cowgirl and spreading ${his} pussy is tattooed across ${his} entire back. `;
-						} else if (PC.vagina !== -1) {
-							r += `A line-art rendition of ${child.slaveName} ${himself} eating pussy is tattooed across ${his} entire back. `;
-						} else {
-							r += `A line-art rendition of ${child.slaveName} ${himself} deepthroating a cock is tattooed across ${his} entire back. `;
-						}
-						break;
-					case "bovine patterns":
-						r += `${His} back is tattooed to resemble the dappled flank of a cow. `;
-						break;
-					case "sacrilege":
-						r += `${He} has a pair of blackened wings tattooed across ${his} entire back. `;
-						break;
-					case "sacrament":
-						r += `${He} has a pair of pure white wings tattooed across ${his} entire back. `;
-						break;
-					case "possessive":
-						r += `An abridged and stylized version of ${his} slave contract is tattooed across ${his} entire back. `;
-						break;
-					case "paternalist":
-						r += `${He} has your name and the location of your penthouse tattooed on ${his} upper back, so kind citizens can return ${him} to you if ${he} wanders off. `;
-						break;
-					default:
-						r += `${child.backTat}`;
-				}
+		if (child.makeup > 0) {
+			switch (child.makeup) {
+				case 1:
+					r += `${He}'s wearing minimal makeup. `;
+					break;
+				case 2:
+					r += `${He}'s wearing expensive, luxurious makeup. `;
+					break;
+				case 3:
+					r += `${His} makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
+				case 4:
+					r += `${He}'s wearing stereotypical, garish streetwalker makeup. `;
+					break;
+				case 5:
+					r += `${He}'s wearing eye-catching neon makeup. `;
+					break;
+				case 6:
+					r += `${His} neon makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
+				case 7:
+					r += `${He}'s wearing expensive, metallic makeup. `;
+					break;
+				case 8:
+					r += `${His} metallic makeup is color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
 			}
+		} else if (child.lipsTat === "permanent makeup") {
+			r += `${His} face appears to bear very heavy, slutty makeup, but on closer inspection, the makeup is actually tattooed on. `;
+		} else {
+			r += `${His} face is makeup-free. `;
+		}
 
-			r += App.Desc.brand(child, "back");
+		return r;
+	}
 
-			return r;
-		}
+	function master(child) {
+		return getEnunciation(child).title;
+	}
 
-		tats.back = back;
+	function mouth(child) {
+		let
+			r = ``;
 
-		function boobs(child) {
-			let
-				r = ``;
+		r += `${He} has `;
+		if (child.lips <= 10) {
+			r += `thin, unattractive lips. `;
+		} else if (child.lips <= 20) {
+			r += `normal lips. `;
+		} else if (child.lips <= 40) {
+			r += `full, attractive lips. `;
+		} else if (child.lips <= 70) {
+			r += `plump, beestung lips. `;
+		} else if (child.lips <= 95) {
+			r += `huge, obviously augmented lips. `;
+		} else {
+			r += `a facepussy: ${his} lips are so huge that they're always a bit parted in the middle, forming a moist, inviting hole${PC.dick ? ` for cock` : ``}. `;
+		}
 
-			if (child.boobsTat !== 0) {
-				switch (child.boobsTat) {
-					case "tribal patterns":
-						r += `${His} chest and breasts are tattooed with tribal patterns that focus attention on ${his} nipples. `;
-						break;
-					case "flowers":
-						r += `${His} chest is tattooed with a pattern of flowering vines that delicately outlines ${his} breasts. `;
-						break;
-					case "counting":
-						if (child.counter.mammary === 0) {
-							r += `There is a horizontal line tattooed across ${his} middle chest for symbols counting ${his} mammary encounters to be inscribed under, once ${he} has some. `;
-						} else if (child.counter.mammary < 500) {
-							r += `Tiny dick, lips, breast, and even pussy symbols are tattooed all over ${his} cleavage, one for each of ${his} mammary encounters. `;
+		if (V.showImplantEffects) {
+			if (arcology.FSTransformationFetishist !== "unset") {
+				if (child.lipsImplant > 0) {
+					r += `They are about ${Math.floor((child.lipsImplant / child.lips) * 100)}% implant. `;
+				}
+				if (arcology.FSTransformationFetishist > 20) {
+					if (child.lips > 70) {
+						if (child.lipsImplant / child.lips < .50) {
+							r += `${His} lips are huge and <span class="red">disgustingly natural</span> for their size. `;
 						} else {
-							r += `Tiny dick, lips, breast, and even pussy symbols cover ${his} breasts, cleavage, and sides, one for each of ${his} mammary encounters. `;
+							r += `${His} lips are huge and <span class="green">obviously implants,</span> as they should be. `;
 						}
-						break;
-					case "advertisements":
-						r += `'Fuck Me!' is tattooed across ${his} chest in such large letters that the word is visible a long way off. `;
-						break;
-					case "rude words":
-						r += `'Fuckslave' is tattooed across ${his} chest in such large letters that the word is visible a long way off. `;
-						break;
-					case "degradation":
-						r += `'${WrittenMaster(child)}'s' is tattooed across the top of ${his} right breast; 'Bitch' is tattooed across the top of ${his} left. `;
-						break;
-					case "Asian art":
-						r += `An octopus is tattooed on ${his} upper chest; its tentacles reach down to envelop ${his} breasts, their tips reaching for but not quite reaching each nipple. `;
-						break;
-					case "scenes":
-						r += `${His} chest is tattooed with lewd scenes; each of ${his} breasts shows a phallus receiving a titfuck while each of ${his} collarbones shows a ${woman} deepthroating a large phallus. `;
-						break;
-					case "bovine patterns":
-						r += `${His} chest is tattooed to look like a Holstein cow's, with ${his} udders left bare to draw attention to them. `;
-						break;
-					case "sacrilege":
-						r += `Each of ${his} breasts is tattooed with a depiction of a pentagram, with ${his} nipples forming the center. `;
-						break;
-					case "sacrament":
-						r += `Each of ${his} breasts is tattooed with a depiction of a crucifix, with ${his} nipples forming the center. `;
-						break;
-					case "possessive":
-						r += `Your personal symbol is tattooed above ${his} left breast, '${PlayerName()}' above ${his} right, leaving the rest of ${his} chest and breasts bare. `;
-						break;
-					case "paternalist":
-						r += `'${WrittenMaster(child)}'s' is tattooed across the top of ${his} right breast; 'Darling' is tattooed across the top of ${his} left. `;
-						break;
-					default:
-						r += `${child.boobsTat}`;
-						break;
+					}
 				}
 			}
-
-			return r;
 		}
 
-		tats.boobs = boobs;
-
-		function butt(child) {
-			let
-				r = ``;
+		if (canTalk(child)) {
+			if (child.lips > 70) {
+				r += `${He} can barely enunciate past ${his} dick-sucking lips; '${WrittenMaster(child)}' comes out as '${master(child)}.' `;
+			}
+		}
 
-			if (child.buttTat !== 0) {
-				switch (child.buttTat) {
-					case "tribal patterns":
-						r += `${His} buttocks and hips are tattooed with tribal patterns that emphasize ${his} womanly curves. `;
-						break;
-					case "flowers":
-						r += `${His} hips are tattooed with a cute floral design. `;
-						break;
-					case "counting":
-						if (child.counter.anal === 0) {
-							r += `There is a horizontal line tattooed across the tops of ${his} buttocks for symbols counting ${his} anal exploits to be inscribed under, once ${he} has some. `;
-						} else if (child.counter.anal < 500) {
-							r += `Tiny dick symbols are tattooed all over the top of ${his} buttocks, one for every time ${he}'s been assfucked. `;
-						} else {
-							r += `Tiny dick symbols are tattooed all over ${his} entire buttocks, attesting to long anal slavery. `;
-						}
-						break;
-					case "advertisements":
-						r += `'Shove' is tattooed across ${his} left buttock; 'It In' is tattooed across ${his} right. `;
-						break;
-					case "rude words":
-						r += `${child.vagina > 0 ? `'No. 2'` : `'No. 1'`} is tattooed across ${his} left buttock; 'Fuckhole' is tattooed across ${his} right. `;
-						break;
-					case "degradation":
-						r += `'Treat it' is tattooed across ${his} left buttock; 'Like a Pussy' is tattooed across ${his} right. `;
-						break;
-					case "Asian art":
-						r += `Each of ${his} buttocks bears a tattoo of a coiled dragon, advancing meaningfully towards ${his} anus. `;
-						break;
-					case "scenes":
-						if (child.dick > 0 && child.balls > 0) {
-							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a smiling shemale offering ${his} anus, while each of ${his} thighs shows a rear view of a shemale simultaneously being sodomized and sodomizing. `;
-						} else if (child.dick > 0) {
-							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a gelding, legs together to conceal ${his} cock and display ${his} anus, while each of ${his} thighs shows a gelding being double penetrated in ${his} gaping anus. `;
-						} else {
-							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a ${woman} being sodomized while each of ${his} thighs shows a ${woman} being gangbanged in all ${his} holes. `;
-						}
-						break;
-					case "bovine patterns":
-						r += `${His} buttocks are tattooed with large black splotches like those of a Holstein cow. `;
-						break;
-					case "sacrilege":
-						r += `'It's not a sin' is tattooed across ${his} left buttock; ${child.vagina > -1 ? `'If I don't enjoy it'` : `'I'm a girl'`} is tattooed across ${his} right. `;
-						break;
-					case "sacrament":
-						r += `'This is my penance' is tattooed across ${his} left buttock; ${child.vagina > -1 ? `'Make me suffer.'` : `'As a slave.'`} is tattooed across ${his} right. `;
-						break;
-					case "possessive":
-						r += `'${PC.slaveName} made me their' is tattooed across ${his} left buttock; with '${desc}' tattooed across ${his} right. `;
-						break;
-					case "paternalist":
-						r += `'Treat it' is tattooed across ${his} left buttock; 'Gently' is tattooed across ${his} right. `;
-						break;
-					default:
-						r += `${child.buttTat}`;
-						break;
+		if (child.teeth !== "normal") {
+			if (child.teeth === "crooked") {
+				r += `${His} teeth are <span class="yellow">crooked,</span> detracting from ${his} beauty whenever ${he} opens ${his} mouth. `;
+			} else if (child.teeth === "straightening braces") {
+				r += `${He} has braces, ${child.visualAge < 15 ? `a cute look on such a young girl. ` : `and occasionally looks preoccupied with discomfort as they straighten ${his} teeth. `}`;
+			} else if (child.teeth === "cosmetic braces") {
+				r += `${He}'s wearing braces despite ${his} straight teeth, ${child.visualAge < 15 ? `a cute look on such a young girl. ` : `just for appearances. `}`;
+			} else if (child.teeth === "gapped") {
+				r += `${He} has a prominent gap between ${his} front teeth${child.faceShape === "cute" ? ` that suits ${his} cute face surprisingly well` : ``}. `;
+				if (canTalk(child)) {
+					r += `It also leaves ${him} with a slight lisp. `;
 				}
+			} else if (child.teeth === "removable") {
+				r += `${His} teeth have been removed and replaced with high-quality dentures. It's difficult to tell anything's unusual until you take them out for gummy oral sex. `;
+			} else if (child.teeth === "pointy") {
+				r += `${His} teeth have been replaced with realistic implants that mimic the dentition of a carnivore. ${His} smiles are frightening, and ${he} can bare them to become truly terrifying. `;
+			} else if (child.teeth === "baby") {
+				r += `${He} still has ${his} baby teeth. `;
+			} else if (child.teeth === "mixed") {
+				r += `${He} is in the process of replacing ${his} baby teeth. `;
 			}
+		}
 
-			r += App.Desc.brand(child, "buttock");
+		if (child.tastes === -1) {
+			r += `${He} has no sense of taste, but this isn't immediately obvious just by looking at ${his} tongue. `;
+		}
 
-			return r;
+		if (V.showBodyMods) {
+			r += piercings.lips(child);
+			r += piercings.tongue(child);
 		}
 
-		tats.butt = butt;
+		r += `${He} is `;
+		if (child.skill.oral >= 100) {
+			r += `an <span class="aquamarine">oral sex master.</span> `;
+		} else if (child.skill.oral > 60) {
+			r += `an <span class="aquamarine">expert at oral.</span> `;
+		} else if (child.skill.oral > 30) {
+			r += `<span class="aquamarine">orally skilled.</span> `;
+		} else if (child.skill.oral > 10) {
+			r += `<span class="aquamarine">capable of basic oral sex.</span> `;
+		} else {
+			r += `unskilled at oral sex. `;
+		}
 
-		function dick(child) {
+		return r;
+	}
+
+	function nails(child) {
+		let
+			r = ``;
+
+		if (!hasAnyArms(child)) {
+			r += `${He} has no hands, and thus, no nails. `;
+		} else {
+			switch (child.nails) {
+				case 1:
+					r += `${His} nails are long and elegant. `;
+					break;
+				case 2:
+					r += `${His} nails are color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
+				case 3:
+					r += `${His} nails are sharp and claw-like. `;
+					break;
+				case 4:
+					r += `${His} nails are bright and glittery. `;
+					break;
+				case 5:
+					r += `${His} nails are long and garish, streetwalker-style. `;
+					break;
+				case 6:
+					r += `${His} nails are vivid and eye-catching. `;
+					break;
+				case 7:
+					r += `${His} nails are vivid, eye-catching and color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
+				case 8:
+					r += `${His} nails are shiny and metallic. `;
+					break;
+				case 9:
+					r += `${His} nails are shiny, metallic and color-coordinated with ${his} ${child.hColor} hair. `;
+					break;
+				default:
+					r += `${His} nails are neatly clipped. `;
+					break;
+			}
+		}
+
+		return r;
+	}
+
+	function piercings() {
+		function anus(child) {
 			let
 				r = ``;
-
-			if (!child.fuckdoll) {
-				if (child.dick !== 0 && child.dickTat !== 0) {
-					switch (child.dickTat) {
-						case "tribal patterns":
-							r += `${His} cock is tattooed with tribal patterns. `;
-							break;
-						case "flowers":
-							r += `${His} cock is tattooed with a vine that wraps around its shaft. `;
-							break;
-						case "counting":
-							if (child.counter.penetrative === 0) {
-								r += `There is a horizontal line tattooed around the base of ${his} dick for symbols counting ${his} penetrative exploits to be inscribed under, once ${he} has some. `;
-							} else if (child.counter.penetrative < 500) {
-								r += `Tiny anus, pussy and mouth symbols are tattooed all over ${his} dick, recounting ${his} penetrative exploits. `;
-							} else {
-								r += `Tiny anus, pussy and mouth symbols are tattooed all over ${his} dick, recounting ${his} penetrative exploits. ${He} has so many that they radiate out across ${his} crotch, too. `;
-							}
-							break;
-						case "advertisements":
-							r += `${His} cock reads 'Sissy Slut.' `;
-							break;
-						case "rude words":
-							r += `${His} cock reads 'Bitchstick.' `;
-							break;
-						case "degradation":
-							if (child.anus === 0) {
-								r += `${His} cock reads '100% Virgin Anus.' `;
-							} else {
-								r += `${His} cock reads 'Comes When Assraped.' `;
-							}
-							break;
-						case "Asian art":
-							r += `${His} cock has an Asian dragon rushing down each side to the tip. `;
-							break;
-						case "bovine patterns":
-							r += `${His} cock is tattooed to make it look a little like a bulls'. `;
-							break;
-						case "sacrilege":
-							r += `${His} cock is covered in tiny words, each derived from a sacrilegious text. `;
-							break;
-						case "sacrament":
-							r += `${His} cock is covered in tiny words, each derived from a sacred scripture. `;
-							break;
-						case "possessive":
-							r += `${His} cock has an identification barcode tattooed on its side. `;
-							break;
-						case "paternalist":
-							if (child.anus === 0) {
-								r += `${His} cock reads 'Still an Ass Virgin.' `;
-							} else {
-								r += `${His} cock reads 'Comes When Stroked.' `;
-							}
-							break;
-						default:
-							r += `${child.dickTat}`;
-					}
+
+			if (child.vagina > -1) {
+				if (child.anusPiercing === 1) {
+					r += `${He} has a simple piercing between ${his} pussy and ${his} asshole. `;
+				} else if (child.anusPiercing === 2) {
+					r += `${He} has a big ring between ${his} pussy and ${his} asshole and studs in all around ${his} anus. `;
+				}
+			} else {
+				if (child.anusPiercing === 1) {
+					r += `${He} has a simple perianal piercing between the base of ${his} dick and ${his} girly butthole. `;
+				} else if (child.anusPiercing === 2) {
+					r += `${He} has a big ring between the base of ${his} dick and ${his} girly butthole, which has studs all around it. `;
 				}
 			}
 
 			return r;
 		}
 
-		tats.dick = dick;
+		piercings.anus = anus;
 
-		function lips(child) {
+		function clit(child) {
 			let
 				r = ``;
 
-			if (child.lipsTat !== 0) {
-				switch (child.lipsTat) {
-					case "tribal patterns":
-						r += `${His} face is tattooed with tribal patterns that make ${him} seem mysterious and exotic. `;
-						break;
-					case "flowers":
-						r += `${His} minimal facial tattoos are limited to a cute flower on each cheek. `;
-						break;
-					case "counting":
-						if (child.counter.oral === 0) {
-							r += `There is a horizontal line tattooed across the ${his} cheeks for symbols counting ${his} oral totals to be inscribed under, once ${he} has some. `;
-						} else if (child.counter.oral < 500) {
-							r += `Tiny dick, pussy, and anus symbols are tattooed all over ${his} cheeks, one for every thing ${he}'s sucked. `;
-						} else {
-							r += `Tiny dick, pussy, and anus symbols are tattooed all over ${his} face, forehead, and neck, one for every thing ${he}'s sucked. `;
-						}
-						break;
-					case "advertisements":
-						r += `${His} facial tattoos include 'Facefuck Me' across ${his} forehead, 'Cock' to the left of ${his} mouth, and 'Sucker' to the right of it. `;
-						break;
-					case "rude words":
-						r += `${His} facial tattoos include 'Sex Slave' across ${his} forehead, 'Face' to the left of ${his} mouth, and 'Pussy' to the right of it. `;
-						break;
-					case "degradation":
-						r += `'${desc}' is tattooed across ${his} forehead. `;
-						break;
-					case "Asian art":
-						r += `${He} has a blossoming cherry tree tattooed on one temple; its pink petals are dappled across ${his} cheeks. `;
-						break;
-					case "bovine patterns":
-						r += `${His} face is subtly tattooed to give ${him} a somewhat bovine appearance. `;
-						break;
-					case "permanent makeup":
-						if (child.makeup !== 0) {
-							r += `${His} normal makeup is difficult to distinguish from the underlying tattoo. `;
-						}
-						break;
-					case "sacrilege":
-						r += `${His} face is subtly tattooed to give ${him} a decidedly demonic appearance. `;
-						break;
-					case "sacrament":
-						r += `${His} face is subtly tattooed to give ${him} a decidedly angelic appearance. `;
-						break;
-					case "possessive":
-						r += `'Property of ${PlayerName()}' is tattooed across ${his} forehead. `;
-						break;
-					case "paternalist":
-						r += `'Beloved ${desc}' is tattooed across one of ${his} cheeks. `;
-						break;
-					default:
-						r += `${child.lipsTat}`;
-						break;
-				}
+			switch (child.clitPiercing) {
+				case 3:
+					if (child.vagina > -1) {
+						r += `${He} has a smart piercing in ${his} clit. `;
+					} else {
+						r += `${He} has a smart frenulum piercing. `;
+					}
+					break;
+				case 2:
+					if (child.vagina > -1) {
+						r += `${He} has a big ring in ${his} clit. `;
+					} else {
+						r += `${He} has a big ring in ${his} dickhead. `;
+					}
+					break;
+				case 1:
+					if (child.vagina > -1) {
+						r += `${He} has a simple clitoral stud. `;
+					} else {
+						r += `${He} has a simple dickhead stud. `;
+					}
+					break;
 			}
 
-			r += App.Desc.brand(child, "lips");
-
 			return r;
 		}
 
-		tats.lips = lips;
+		piercings.clit = clit;
 
-		function shoulders(child) {
+		function corset(child) {
 			let
 				r = ``;
 
-			if (child.shouldersTat !== 0) {
-				switch (child.shouldersTat) {
-					case "tribal patterns":
-						r += `Tribal tattoos encircle both ${his} shoulders in swirling patterns. `;
-						break;
-					case "flowers":
-						r += `A gorgeous flower tattoo covers each shoulder. `;
-						break;
-					case "counting":
-						r += `A '¤' tattoo counting ${his} earnings and acquirements cover ${his} shoulders. `;
-						break;
-					case "advertisements":
-						if (child.vagina < 0) {
-							r += `'Two Hole Whore' is tattooed on each of ${his} shoulders. `;
-						} else {
-							r += `'Three Hole Whore' is tattooed on each of ${his} shoulders. `;
-						}
-						break;
-					case "rude words":
-						r += `'Dickholster' is tattooed on ${his} left shoulder, and 'Fuckmeat' is tattooed on ${his} right. `;
-						break;
-					case "degradation":
-						r += `'Hurt Me' is tattooed on ${his} left shoulder, and 'Rape Me' on ${his} right. `;
-						break;
-					case "Asian art":
-						r += `Beautiful, colorful tattoos cover ${his} upper body: a line of wind-whipped waves lashing against mountains runs across ${his} collarbone and around both shoulders. `;
-						break;
-					case "scenes":
-						if (child.vagina < 0) {
-							r += `A stylized rendition of a dick plunging into an open mouth is tattooed on ${his} left shoulder, and a similar image of a dick entering an anus on ${his} right. `;
-						} else {
-							r += `A stylized rendition of a dick going into a pussy is tattooed on ${his} left shoulder, and a similar image of a dick entering an anus on ${his} right. `;
-						}
-						break;
-					case "bovine patterns":
-						r += `${His} shoulders are flecked with tattoos of bovine blotches. `;
-						break;
-					case "sacrilege":
-						r += `Tattoos depicting demonic nude figures adorn ${his} shoulders. `;
-						break;
-					case "sacrament":
-						r += `Tattoos depicting saintly nude figures adorn ${his} shoulders. `;
-						break;
-					case "possessive":
-						r += `A rendition of your face inside a heart is tattooed onto ${his} left shoulder, and the words 'I love my ${WrittenMaster(child)}' inside an identical heart are tattooed on ${his} right. `;
-						break;
-					case "paternalist":
-						r += `'Love Me' is tattooed on ${his} left shoulder, and 'Teach Me' on ${his} right. `;
-						break;
+			if (child.corsetPiercing > 0) {
+				r += `${He} has a corset piercing, a ladder of steel rings running up each side of ${his} back: `;
+				if (child.bellyAccessory === "a corset" || child.bellyAccessory === "an extreme corset") {
+					r += `these are looped through special lugs in the back of ${his} actual corset, making it almost a part of ${his} body. `;
+					if (child.devotion > 50) {
+						r += `${He} couldn't remove it, even if ${he} wanted to. `;
+					} else if (child.devotion >= -20) {
+						r += `${He} couldn't remove it, even if ${he} were inclined to try. `;
+					} else {
+						r += `Any attempt to remove it will cause intense pain. `;
+					}
+				} else {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							r += `${his} blouse hides them completely, but they're laced tightly, so ${he}'s aware they're there. `;
+							break;
+						case "a mini dress":
+							r += `these are clipped into the mini dress covering them, making it almost a part of ${his} body. `;
+							if (child.devotion > 50) {
+								r += `${He} couldn't remove it, even if ${he} wanted to. `;
+							} else if (child.devotion >= -20) {
+								r += `${He} couldn't remove it, even if ${he} were inclined to try. `;
+							} else {
+								r += `Any attempt to remove it will cause intense pain. `;
+							}
+							break;
+						case "a tube top":
+							r += `the piercings are only partly visible on ${his} back. `;
+							break;
+						case "a t-shirt":
+							r += `${his} shirt hides them completely, but they're laced tightly, so ${he}'s aware they're there. `;
+							break;
+						case "a slave gown":
+							r += `they're revealed by the swooping back of ${his} gown and laced up with matching silk ribbon. `;
+							break;
+						default:
+							r += `they're laced up with a ribbon, tightly enough to keep ${him} aware they're there. `;
+							break;
+					}
 				}
 			}
 
-			r += App.Desc.brand(child, "shoulder");
-
 			return r;
 		}
 
-		tats.shoulders = shoulders;
+		piercings.corset = corset;
 
-		function stamp(child) {
+		function dick(child) {
 			let
 				r = ``;
 
-			if (child.stampTat !== 0) {
-				switch (child.stampTat) {
-					case "tribal patterns":
-						r += `${He} has a tribal-patterned tramp stamp. `;
-						break;
-					case "flowers":
-						r += `${He} has a floral-patterned tramp stamp. `;
-						break;
-					case "counting":
-						if (child.anus === 0) {
-							r += `${He} has the dashed outline of a cock tattooed across ${his} lower back. `;
-						} else {
-							r += `${He} has the silhouette of the largest cock ${he}'s ever had up ${his} anus tattooed across ${his} lower back. `;
-						}
-						break;
-					case "advertisements":
-						r += `${He} has a tramp stamp which reads 'Fuck my ass!' `;
-						break;
-					case "rude words":
-						r += `${He} has a tramp stamp which reads 'Rear Entrance,' with an arrow pointing downward. `;
-						break;
-					case "degradation":
-						r += `${He} has a tramp stamp formed from gothic lettering that reads 'Anal Whore.' `;
-						break;
-					case "Asian art":
-						r += `A traditional Asian household scene is tattooed on ${his} lower back, showing a rendition of ${child.slaveName}, dressed in rich silks, having sex with a ${PC.title ? `gentleman` : `lady`}. The slave and the ${PC.title ? `gentleman` : `lady`} are kissing passionately as ${PC.title ? `he` : `she`} `;
-						if (child.vagina < 0) {
-							r += `penetrates the child's anus. `;
-						} else if (child.bellyPreg >= 1500 || child.bellyImplant >= 1500) {
-							r += `embraces the child's ${child.pregKnown ? `pregnant` : `rounded`} belly. `;
-						} else {
-							r += `penetrates the child's vagina. `;
-						}
-						break;
-					case "scenes":
-						r += `${He} has a tramp stamp which shows a cock entering an anus, recognizably ${hers}. `;
-						break;
-					case "bovine patterns":
-						r += `${He} has an identifying barcode tattooed across ${his} lower back. `;
-						break;
-					case "sacrilege":
-						r += `${He} has a tramp stamp which reads 'Fuck my ass and be damned.' `;
-						break;
-					case "sacrament":
-						r += `${He} has a tramp stamp which reads 'Fuck my ass and be blessed.' `;
-						break;
-					case "possessive":
-						r += `${He} has a tramp stamp which reads '${PC.slaveName}'s $desc.' `;
-						break;
-					case "paternalist":
-						r += `${He} has a tramp stamp which reads 'Fuck me slowly' with an arrow pointing downward. `;
-						break;
-					default:
-						r += `${child.stampTat}`;
-						break;
+			if (child.dick !== 0) {
+				if (child.dickPiercing === 1) {
+					r += `${He} has a row of studs down ${his} shaft. `;
+				} else if (child.dickPiercing === 2) {
+					r += `${He} has a row of heavy rings down ${his} shaft. `;
+				}
+
+				if (child.scrotum !== 0) {
+					if (child.dickPiercing === 1) {
+						r += `${He} has a couple of studs in ${his} ballsack. `;
+					} else if (child.dickPiercing === 2) {
+						r += `${He} has a row of rings down the center of ${his} ballsack, all the way from the base of ${his} shaft to ${his} perineum. `;
+					}
+				} else {
+					if (child.dickPiercing === 1) {
+						r += `${He} has a couple of studs beneath the base of ${his} dick. `;
+					} else if (child.dickPiercing === 2) {
+						r += `${He} has a row of rings all the way from the base of ${his} shaft to ${his} perineum. `;
+					}
 				}
-
-				r += App.Desc.brand(child, "lower back");
 			}
 
 			return r;
 		}
 
-		tats.stamp = stamp;
+		piercings.dick = dick;
 
-		function vagina(child) {
+		function ears(child) {
 			let
 				r = ``;
 
-			if (child.vaginaTat !== 0) {
-				switch (child.vaginaTat) {
-					case "tribal patterns":
-						r += `${His} abdomen is tattooed with tribal patterns that draw the eye down toward ${his} ${child.dick ? `cock` : child.vagina === -1 ? `featureless crotch` : `vagina`}. `;
-						break;
-					case "flowers":
-						r += `${His} abdomen bears a tasteful tattoo of a ${child.dick ? `lily with a large stamen` : `blooming flower`}. `;
-						break;
-					case "counting":
-						if (child.counter.vaginal === 0) {
-							r += `${His} abdomen reads 'count begins other side, sorry.' `;
-						} else if (child.counter.vaginal < 500) {
-							r += `Tiny dick symbols are tattooed all over ${his} abdomen, one for every time ${he}'s been fucked. `;
-						} else {
-							r += `Tiny dick symbols are tattooed all over ${his} abdomen, one for every time ${he}'s been fucked. There are so many that they spread up to ${his} breasts and around ${his} sides. `;
-						}
-						break;
-					case "advertisements":
-						r += `${His} abdomen reads ${child.vagina < 0 ? `'Rear Entrance Other Side.'` : `'Insert Cock' with an arrow pointing downward.`} `;
-						break;
-					case "rude words":
-						r += `${His} abdomen reads ${child.vagina < 0 ? `'Useless, Rape Ass Instead' with an arrow pointing downward` : `'Fucktoy'`}. `;
-						break;
-					case "degradation":
-						r += `${His} abdomen is tattooed with ${child.dick ? `a downward-pointing arrow which reads 'Bounces When Buttfucked.'` : `gothic script that reads '${PC.dick ? PC.vagina ? `Futa` : `Cock` : `Cunt`} Pleaser.'`} `;
-						break;
-					case "Asian art":
-						r += `${He} has formal Asian characters tattooed across ${his} abdomen. To those who do not know the language, they look elegant, but roughly translated, they read `;
-						if (child.dick > 0 && canAchieveErection(child)) {
-							r += `'dick girl slut.' `;
-						} else if (child.dick > 0) {
-							r += `'limp dick slut.' `;
-						} else if (child.pregKnown && child.bellyPreg >= 100) {
-							r += `'pregnant cow.' `;
-						} else if (child.physicalAge < 13) {
-							r += `'horny little bitch.' `;
-						} else {
-							r += `'sex slave.' `;
-						}
-						break;
-					case "scenes":
-						r += `${His} abdomen is tattooed with lewd scenes. It entices with a depiction of ${child.dick ? child.balls ? `sodomy of a shemale` : `sodomy of a gelding` : child.vagina === -1 ? `sodomy of a null` : `loving intercourse`}. `;
-						break;
-					case "bovine patterns":
-						r += `${His} abdomen is tattooed in a Holstein cow pattern. `;
-						break;
-					case "sacrilege":
-						r += `${His} abdomen is tattooed with a variety of heretical symbols. `;
+			if (child.earPiercing > 0) {
+				if (child.earPiercing === 1) {
+					r += `${His} earlobes are conventionally pierced. `;
+				} else {
+					r += `${His} ears are heavily pierced, with multiple lobe piercings and a row of helix piercings. `;
+				}
+
+				switch (child.clothes) {
+					case "a t-shirt":
+						r += `${He}'s wearing plain but pretty earrings. `;
 						break;
-					case "sacrament":
-						r += `${His} abdomen is tattooed with a variety of religious symbols. `;
+					case "a tube top":
+						r += `${He}'s wearing large hoop earrings. `;
 						break;
-					case "possessive":
-						r += `${His} abdomen is tattooed with `;
-						if (child.dick > 0 && canAchieveErection(child)) {
-							r += `'Dick girl slave `;
-						} else if (child.dick > 0) {
-							r += `'Limp dick slave `;
-						} else if (child.counter.births > 5) {
-							r += `'Breeder slave `;
-						} else if (child.actualAge < 13) {
-							r += `'loli slave `;	// TODO: not sure about this
-						} else {
-							r += `'Sex slave `;
-						}
-						r += `of ${WrittenMaster(child)} ${PC.slaveName}.' `;
+					case "a schoolgirl outfit":
+						r += `${He}'s wearing small girlish earrings. `;
 						break;
-					case "paternalist":
-						r += `${His} abdomen is tattooed with a downward-pointing arrow which reads 'Let's come together.' `;
+					case "a mini dress":
+						r += `${He}'s wearing shiny pearl earrings. `;
 						break;
-					default:
-						r += `${child.vaginaTat}`;
+					case "a slave gown":
+					case "a ball gown":
+						r += `${He}'s wearing lovely diamond earrings; the stones are cut in an alluring, feminine style. `;
 						break;
 				}
 			}
@@ -11610,6753 +4159,3963 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 			return r;
 		}
 
-		tats.vagina = vagina;
-	}
+		piercings.ears = ears;
 
-	function upperFace(child) {
-		let r = ``;
+		function eyebrows(child) {
+			let
+				r = ``;
 
-		if (!child.fuckdoll) {
-			if (hasAnyProstheticEyes(child)) {
-				r += `${He} has ${App.Desc.eyesType(slave)}. `;
+			if (child.eyebrowPiercing === 1) {
+				r += `${He} has a simple stud in one eyebrow. `;
+			} else if (child.eyebrowPiercing === 2) {
+				r += `${He} has multiple eyebrow rings. `;
 			}
 
-			if (child.eyewear === "corrective glasses" || child.eyewear === "blurring glasses" || child.eyewear === "glasses") {
-				r += `${He}'s wearing a pair of `;
-				switch (child.clothes) {
-					case "a ball gown":
-					case "a slave gown":
-						r += `nice frameless glasses,`;
-						break;
-					case "a schoolgirl outfit":
-						r += `horn-rimmed glasses to improve ${his} schoolgirl look,`;
-						break;
-					default:
-						r += `simple wire-frame glasses,`;
-						break;
-				}
+			return r;
+		}
 
-				if (getWorstVision(child) >= 2) {
-					if (child.eyewear === "blurring glasses") {
-						r += ` which are designed to blur ${his} vision, making ${him} clumsy. `;
-					} else {
-						r += ` which are just for show. `;
-					}
-				} else if (getWorstVision(child) >= 1) {
-					if (child.eyewear === "corrective glasses") {
-						r += ` which correct ${his} vision. `;
-					} else {
-						r += ` which do nothing to help ${his} <span class="yellow">nearsightedness</span> and consequent clumsiness. `;
-					}
-				} else {
-					r += ` which, since ${he} is <span class="red">blind,</span> are just for show. ${He} moves carefully as to not bump into things. `;
-				}
-			} else {
-				if (getWorstVision(child) >= 2) {
-					if (child.eyewear === "blurring contacts") {
-						r += `${He}'s wearing contact lenses designed to blur ${his} vision, making ${him} clumsy. `;
-					}
-				} else if (getWorstVision(child) >= 2) {
-					if (child.eyewear === "corrective contacts") {
-						r += `${He}'s wearing contact lenses to correct ${his} <span class="yellow">nearsightedness.</span> `;
-					} else {
-						r += `${He}'s <span class="yellow">nearsighted,</span> and a bit clumsy as a result. `;
-					}
-				} else {
-					r += `${He} is <span class="red">blind,</span> and moves very carefully as a result. `;
-				}
-			}
+		piercings.eyebrows = eyebrows;
 
-			if (child.earwear === "hearing aids" || child.earwear === "muffling ear plugs" || child.earwear === "deafening ear plugs") {
-				r += `In ${his} ears, ${he} wears `;
-				if (child.earwear === "hearing aids") {
-					r += `a pair of hearing aids, `;
-					if (child.hears > -1) {
-						r += `which do little to correct ${his} already adequate hearing. `;
-					} else if (child.hears === -1) {
-						r += `which are used to correct ${his} <span class="yellow">hearing impairment.</span> `;
-					} else {
-						r += `which, due to ${his} <span class="red">deafness,</span> are useless. `;
-					}
-				} else if (child.earwear === "muffling ear plugs") {
-					r += `a pair of small foam ear plugs, `;
-					if (child.hears > -1) {
-						r += `which noticeably <span class="yellow">muffle ${his} hearing.</span> `;
-					} else if (child.hears === -1) {
-						r += `which are pointless, as ${he} is already <span class="yellow">hard of hearing.</span> `;
-					} else {
-						r += `which are pointless, as ${he} is totally <span class="red">deaf.</span> `;
-					}
-				} else if (child.earwear === "deafening ear plugs") {
-					r += `a pair of large silicone ear plugs, `;
-					if (child.hears > -1) {
-						r += `which <span class="red">nullify ${his} sense of hearing.</span> `;
-					} else if (child.hears === -1) {
-						r += `which impair ${his} hearing to the point of <span class="red">deafness.</span> `;
-					} else {
-						r += `which are pointless, as ${he} is already <span class="red">deaf.</span> `;
-					}
-				}
-			} else {
-				if (child.hears === -1) {
-					r += `${He}'s <span class="yellow">hard of hearing,</span> and a bit nervous as a result. `;
-				} else if (child.hears < -1) {
-					r += `${He} is <span class="red">deaf,</span> and overly paranoid as a result. `;
-				}
+		function lips(child) {
+			let
+				r = ``;
+
+			if (child.lipsPiercing === 1) {
+				r += `${He} has a simple lip piercing. `;
+			} else if (child.lipsPiercing === 2) {
+				r += `${His} lips are heavily pierced. `;
 			}
-		} else {
-			r += `${His} face is featurelessly obscured by the Fuckdoll suit from the top of ${his} head down to ${his} face hole. `;
+
+			return r;
 		}
 
-		return r;
-	}
+		piercings.lips = lips;
 
-	function vagina(child) {
-		let
-			r = ``,
-			pubertyAge = Math.min(child.pubertyAgeXX, child.pubertyAgeXY);
+		function nipples(child) {
+			let
+				r = ``,
+				nipColor = nippleColor(child);
 
-		if (child.dick > 0) {
-			if (child.vagina > -1) {
-				r += `${His} `;
-				if (child.genes === "XX") {
-					r += `beautifully natural `;
-				} else if (child.ovaries === 1) {
-					r += `finely crafted `;
+			if (child.nipplesPiercing === 1) {
+				r += `${His} ${nipColor} nipples have a simple piercing, which keeps them a little harder than they would normally be. `;
+			} else if (child.nipplesPiercing === 2) {
+				r += `${His} ${nipColor} nipples are heavily pierced with several rings and studs, and there is a chain between them. `;
+				if (child.boobShape === "saggy" && child.boobs > 2500) {
+					r += `It's been shortened to take advantage of the way ${his} tits sag, and holds ${his} ${nipColor} nipples almost together, producing cleavage that runs from ${his} ${nipColor} nipples all the way up to ${his} sternum. `;
 				} else {
-					r += `artificial `;
+					r += `The constant tugging keeps ${his} ${nipColor} nipples erect. `;
 				}
-				r += `vagina is located beneath the base of ${his} penis, `;
-				if (child.scrotum > 3 && child.balls <= child.scrotum) {
-					r += `though it is almost completely hidden by ${his} hanging ballsack. `;
-				} else if (child.scrotum > 1 && child.balls > 0) {
-					r += `its upper part concealed by ${his} balls. `;
-				} else if (canAchieveErection(child)) {
-					r += `and merges seamlessly into ${his} shaft. `;
-				} else {
-					if (child.dick > 3) {
-						r += `though it is almost completely hidden by ${his} soft cockmeat. `;
-					} else {
-						r += `which acts as a soft little dickclit for it. `;
+
+				if (child.nipplesPiercing > 0) {
+					switch (child.clothes) {
+						case "a schoolgirl outfit":
+							if (child.boobs <= 2500) {
+								r += `The piercings are tantalizingly visible under the thin material. `;
+							}
+							break;
+						case "a mini dress":
+							r += `The piercings are tantalizingly visible under the tight mini dress. `;
+							break;
 					}
 				}
-
-				if (child.clit === 0) {
-					r += `The base of ${his} cock is located where the clitoris would be on a normal woman. `;
-				}
 			}
+
+			return r;
 		}
 
-		if (child.vagina > -1) {
-			switch (child.vagina) {
-				case 10:
-					r += `${His} pussy has been completely ruined from hundreds of births. One could fit their arm into it with minimal effort and ${he} can barely get off from vaginal sex now. ${His} pussy is abyssal, `;
-					break;
-				case 3:
-					r += `${His} pussy is loose, `;
-					break;
-				case 2:
-					r += `${His} pussy is reasonably tight, `;
-					break;
-				case 1:
-					r += `${His} pussy is tight and appealing, `;
-					break;
-				case 0:
-					r += `${He} is a <span class="lime">virgin.</span> ${His} pussy is fresh, `;
-					break;
-				default:
-					r += `${His} pussy is utterly cavernous, `;
-					break;
-			}
+		piercings.nipples = nipples;
 
-			if (child.labia === 0) {
-				r += ``;
-			} else if (child.labia === 1) {
-				r += ``;
-			} else if (child.labia === 2) {
-				r += ``;
-			} else {
-				r += ``;
-			}
+		function nose(child) {
+			let
+				r = ``;
 
-			if (V.seeRace) {
-				switch (child.race) {
-					case "white":
-						r += `pink pussylips. `;
-						break;
-					case "asian":
-						r += `dark ${child.race} pussylips. `;
-						break;
-					case "middle eastern":
-						r += `dark ${child.race} pussylips. `;
-						break;
-					case "latina":
-						r += `dark ${child.race} pussylips. `;
-						break;
-					case "black":
-						r += `dark ${child.race} pussylips. `;
-						break;
-					default:
-						r += `${child.skin} pussylips. `;
-						break;
-				}
-			} else {
-				r += `${child.skin} pussylips. `;
+			if (child.nosePiercing === 1) {
+				r += `${He} has simple studs in ${his} nose. `;
+			} else if (child.nosePiercing === 2) {
+				r += `${He} has nasal studs and a large septum ring. `;
 			}
 
-			if (child.vagina > -1) {
-				if (child.vaginaLube === 0) {
-					if (child.vagina > 0 && !child.chastityVagina) {
-						r += `${He} produces very little natural wetness, so ${he} is required to keep ${himself} artificially lubricated for anyone who wishes to use ${his} cunt. `;
-					} else {
-						r += `${He} produces very little natural wetness. `;
-					}
+			return r;
+		}
 
-					if (child.prostate !== 0) {
-						if (child.dick === 0) {
-							r += `In stark contrast, however, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, so despite ${his} dryness, ${he} squirts ${child.balls ? `semen` : `fluid`} when ${he} orgasms. `;
-							if (child.prostate > 2) {
-								r += `With the implant embedded in it, that squirt is more like a blast; ${he} will soak ${himself} and anyone near ${him}. `;
-							}
-						}
-					}
-				} else if (child.vaginaLube < 2) {
-					if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiacs") {
-						r += `The aphrodisiacs have them${child.aphrodisiacs > 1 || child.inflationType === "aphrodisiac" && child.inflation >= 2 ? ` sopping` : ``} wet. `;
-					} else if (child.energy > 95) {
-						r += `As a nympho, ${he}'s almost constantly wet. `;
-					} else if (child.fetishStrength > 60 && child.fetishKnown) {
-						r += `Judging by how wet ${he} is, ${he}'s probably fantasizing about`;
+		piercings.nose = nose;
 
-						switch (child.fetish) {
-							case "buttslut":
-								r += `being buttfucked. `;
-								break;
-							case "cumslut":
-								r += `being facefucked. `;
-								break;
-							case "humiliation":
-								r += `being humiliated. `;
-								break;
-							case "submissive":
-								r += `submission. `;
-								break;
-							case "dom":
-								r += `dominating someone. `;
-								break;
-							case "sadist":
-								r += `hurting someone. `;
-								break;
-							case "masochist":
-								r += `pain. `;
-								break;
-							case "pregnancy":
-								r += `getting pregnant. `;
-								break;
-							case "boobs":
-								r += `boobs. `;
-								break;
-							default:
-								r += `getting fucked. `;
-								break;
-						}
-					} else if (child.devotion > 50) {
-						r += `As a devoted sex slave, ${he} has no trouble keeping ${himself} wet for ${his} ${WrittenMaster(child)}. `;
-					} else if (child.devotion > 20) {
-						r += `As an obedient sex slave, ${he} does ${his} best to keep ${himself} wet for ${his} ${WrittenMaster(child)}. `;
-					}
+		function tongue(child) {
+			let
+				r = ``;
 
-					if (child.prostate !== 0) {
-						if (child.dick === 0) {
-							r += `Bizarrely, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, ${child.balls ? `which in combination with ${his} testicles make ${his} squirt copious amounts of fluids and semen with each orgasm` : `so ${he} squirts copiously when ${he} orgasms`}. `;
-							if (child.prostate > 2) {
-								r += `With the implant embedded in it; that gush is more like a flood. Changes of clothes are a must with ${him}, as ${he} can and will soak both you, ${himself} and what ${he} is getting fucked over. `;
-							}
-						}
-					}
-				} else {
-					if (child.aphrodisiacs > 0 || (V.saleDescription && V.gingering === "vasodilator") || child.inflationType === "aphrodisiac") {
-						r += `The combination of the aphrodisiacs and ${his} natural tendency to produce a lot of female lubricant is having a drastic effect. ${His} cunt is absolutely beribboned with femcum, and ${he} smells strongly of wet, clean pussy. `;
-					} else if (child.energy > 95) {
-						r += `${He} has a naturally wet cunt, and in combination with ${his} nymphomania, it's soaking. ${He} smells of good clean female arousal. `;
-					} else if (child.fetishStrength > 60 && child.fetishKnown) {
-						r += `${His} naturally wet cunt is almost dripping female lubricant, and ${he} smells of good clean female arousal. ${He}'s probably fantasizing about `;
+			if (child.tonguePiercing === 1) {
+				r += `${His} tongue bears a single stud, so oral sex with ${him} is a bit more fun. `;
+			} else if (child.tonguePiercing === 2) {
+				r += `${His} tongue bears a row of studs, offering thorough stimulation to anyone ${he} blows. `;
+			}
+			if (canTalk(child) && child.lips <= 70 && child.lipsPiercing === 2) {
+				r += `${He} can barely enunciate past ${his} piercings; '${WrittenMaster(child)}' comes out as '${master(child)}.' `;
+			}
 
-						switch (child.fetish) {
-							case "buttslut":
-								r += `being buttfucked. `;
-								break;
-							case "cumslut":
-								r += `being facefucked. `;
-								break;
-							case "humiliation":
-								r += `being humiliated. `;
-								break;
-							case "submissive":
-								r += `submission. `;
-								break;
-							case "dom":
-								r += `dominating someone. `;
-								break;
-							case "sadist":
-								r += `hurting someone. `;
-								break;
-							case "masochist":
-								r += `pain. `;
-								break;
-							case "pregnancy":
-								if (child.pregKnown) {
-									r += `growing rounder. `;
-								} else {
-									r += `getting pregnant. `;
-								}
-								break;
-							case "boobs":
-								r += `boobs. `;
-								break;
-							default:
-								r += `getting fucked. `;
-								break;
-						}
-					} else if (child.devotion > 50) {
-						r += `${His} cunt is almost always soaking wet, but being near you has ${his} almost dripping. `;
-					} else if (child.devotion > 20) {
-						r += `${His} cunt is almost always soaking wet, and being near you isn't affecting that. `;
-					} else {
-						r += `${His} cunt is almost always soaking wet, regardless of ${his} feelings. `;
-					}
+			return r;
+		}
 
-					if (child.prostate !== 0) {
-						if (child.dick === 0) {
-							r += `Bizarrely, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, ${child.balls ? `which in combination with ${his} testicles make ${his} squirt unreasonable volume of fluids and semen with each orgasm` : `meaning that when ${he} orgasms, ${he} squirts an unreasonable volume of fluid`}. `;
-							if (child.prostate > 2) {
-								r += `With the implant embedded in it; that gush is insane. Everything around ${him} is at risk of being splashed. Changes of clothes are a must with ${him}, as are supplies to mop up afterwards. `;
-							}
-						}
-					}
+		piercings.tongue = tongue;
+
+		function vagina(child) {
+			let
+				r = ``;
+
+			if (child.vaginaPiercing > 0) {
+				r += `${He} has a `;
+				if (child.vaginaPiercing) {
+					r += `simple row of studs `;
+				} else {
+					r += `row of big rings `;
 				}
+				r += `down ${his} labia. `;
 			}
 
-			r += accessories.vaginal(child);
+			return r;
+		}
 
-			if (child.ovaImplant !== 0) {
-				switch (child.ovaImplant) {
-					case "fertility":
-						r += `${His} ovaries have a pair of implants attached to them to encourage ovulation${child.preg < -1 ? `, not that it does ${him} any good` : ``}. `;
-						break;
-					case "sympathy":
-						r += `${His} ovaries have a pair of linked implants attached to them so that when one releases an egg the other does so as well. `;
-						break;
-					case "asexual":
-						r += `One of ${his} ovaries has been replaced with a fabricated sperm sack designed to fertilize any eggs ${he} makes. `;
-						break;
-				}
+		piercings.vagina = vagina;
+	}
+
+	function shoulders(child) {
+		let
+			r = ``;
+
+		if (child.shoulders < -1) {
+			r += `${His} shoulders and chest are very narrow and `;
+			if (child.boobs > 2000) {
+				r += `feminine, forcing ${his} pressed-together tits to spread far beyond ${his} sides. `;
+			} else {
+				r += `feminine. `;
+			}
+		} else if (child.shoulders < 0) {
+			r += `${His} shoulders and chest are quite `;
+			if (child.boobs > 1200) {
+				r += `feminine, causing a lot of cleavage and pressing ${his} boobs outward beyond ${his} sides. `;
+			} else {
+				r += `feminine. `;
 			}
-
-			if (!child.dick && !child.balls && child.vagina < 0 && arcology.FSRestart > 60) {
-				r += `Society looks fondly on ${his} complete inability to reproduce. `;
+		} else if (child.shoulders > 1) {
+			r += `${His} shoulders and chest are very `;
+			if (child.boobs > 600) {
+				r += `broad, making ${his} boobs look a lot smaller than they actually are. `;
+			} else {
+				r += `broad. `;
+			}
+		} else if (child.shoulders > 0) {
+			r += `${His} shoulders and chest are fairly `;
+			if (child.boobs > 600) {
+				r += `broad, making ${his} tits look smaller than they actually are. `;
+			} else {
+				r += `broad. `;
+			}
+		} else {
+			r += `${His} shoulders and chest are `;
+			if (child.boobs > 800) {
+				r += `feminine, flattering ${his} breasts. `;
+			} else {
+				r += `feminine. `;
 			}
+		}
 
-			switch (child.pubicHStyle) {
-				case "hairless":
-					r += `${He}'s naturally smooth and hairless. `;
-					break;
-				case "bald":
-					r += `${He} is no longer able to grow pubic hair leaving ${him} hairless and smooth. `;
-					break;
-				case "waxed":
-					r += `${He}'s waxed and smooth. `;
-					break;
-				case "in a strip":
-					r += `${His} ${child.pubicHColor} pubic hair is waxed into a narrow strip above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
-					break;
-				case "neat":
-					r += `${His} ${child.pubicHColor} pubic hair is waxed into a neat patch above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
-					break;
-				case "bushy in the front and neat in the rear":
-					r += `${His} ${child.pubicHColor} pubic hair forms a natural bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
-					break;
-				case "bushy":
-					r += `${His} ${child.pubicHColor} pubic hair forms a natural bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
-					break;
-				case "very bushy":
-					r += `${His} ${child.pubicHColor} pubic hair forms a dense bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`} that trails up to ${his} navel. `;
-					break;
-				default:
-					if (child.physicalAge < pubertyAge - 2) {
-						r += `${He} is too sexually immature to have pubic hair. `;
-					} else if (child.physicalAge < pubertyAge - 1) {
-						r += `${He} has a few wisps of pubic hair. `;
-					} else if (child.physicalAge < pubertyAge) {
-						r += `${He} is on the verge of puberty and has a small patch of ${child.pubicHColor} pubic hair above ${his} ${child.dick > 0 ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
-					}
+		if (child.shoulders > child.hips) {
+			r += `They're wider than ${his} hips, `;
+			if (child.boobs > 2000 * (child.shoulders - child.hips)) {
+				r += `but ${his} massive breasts make it hard to discern. `;
+			} else if (arcology.FSGenderRadicalist !== "unset") {
+				r += `giving ${him} a somewhat mannish appearance. `;
+			} else if (arcology.FSGenderFundamentalist !== "unset") {
+				r += `giving ${him} an <span class="red">ugly, mannish appearance.</span> `;
+			} else {
+				r += `giving ${him} an <span class="red">unattractive, somewhat mannish, appearance.</span> `;
 			}
+		}
 
-			r += App.Desc.brand(child, "pubic mound");
+		return r;
+	}
 
-			if (!child.dick) {
-				if (child.clit > 0) {
-					if (child.foreskin === 0) {
-						if (child.clit === 1) {
-							if (child.devotion > 50) {
-								r += `${His} clit is quite large and visibly hard. `;
-							} else {
-								r += `${His} clit is quite large. `;
-							}
-							r += `${His} lack of hood makes it even more prominent. `;
-						} else if (child.clit === 2) {
-							if (child.devotion > 50) {
-								r += `${His} clit is huge and visibly erect. `;
-							} else {
-								r += `${His} clit is huge. `;
-							}
-							r += `Lack of hood combined with its size means ${he} can't wear any clothes without being constantly stimulated. `;
-						} else if (child.clit === 3) {
-							if (child.devotion > 50) {
-								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
-							} else {
-								r += `${His} clit is enormous, almost a pseudophallus. `;
-							}
-						} else if (child.clit === 4) {
-							if (child.devotion > 50) {
-								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
-							} else {
-								r += `${His} clit has reached the size of an average penis. `;
-							}
-						} else {
-							if (child.devotion > 50) {
-								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
-							} else {
-								r += `${His} clit is massive, having reached the size of a large penis. `;
-							}
-						}
-					} else if (child.foreskin === 1) {
-						if (child.clit === 1) {
-							if (child.devotion > 50) {
-								r += `${His} clit is quite large and visibly hard. `;
-							} else {
-								r += `${His} clit is quite large. `;
-							}
-							r += `${His} clitoral hood is stretched thin trying to cover it. `;
-						} else if (child.clit === 2) {
-							if (child.devotion > 50) {
-								r += `${His} clit is huge and visibly erect. `;
-							} else {
-								r += `${His} clit is huge. `;
-							}
-							r += `${His} small hood is no longer able to cover it completely and large part of ${his} clitoris is always exposed. `;
-						} else if (child.clit === 3) {
-							if (child.devotion > 50) {
-								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
-							} else {
-								r += `${His} clit is enormous, almost a pseudophallus. `;
-							}
-							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
-						} else if (child.clit === 4) {
-							if (child.devotion > 50) {
-								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
-							} else {
-								r += `${His} clit has reached the size of an average penis. `;
-							}
-							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
-						}
-					} else if (child.foreskin === 2) {
-						if (child.clit === 1) {
-							if (child.devotion > 50) {
-								r += `${His} clit is quite large and visibly hard. `;
-							} else {
-								r += `${His} clit is quite large. `;
-							}
-							r += `It is completely covered by its hood. `;
-						} else if (child.clit === 2) {
-							if (child.devotion > 50) {
-								r += `${His} clit is huge and visibly erect. `;
-							} else {
-								r += `${His} clit is huge. `;
-							}
-							r += `Its hood is stretched thin trying to cover it. `;
-						} else if (child.clit === 3) {
-							if (child.devotion > 50) {
-								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
-							} else {
-								r += `${His} clit is enormous, almost a pseudophallus. `;
-							}
-							r += `It's large enough that the hood can cover only half of it. `;
-						} else if (child.clit === 4) {
-							if (child.devotion > 50) {
-								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
-							} else {
-								r += `${His} clit has reached the size of an average penis. `;
-							}
-							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
-						} else {
-							if (child.devotion > 50) {
-								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
-							} else {
-								r += `${His} clit is massive, having reached the size of a large penis. `;
-							}
-							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
-						}
-					} else if (child.foreskin === 3) {
-						if (child.clit === 1) {
-							if (child.devotion > 50) {
-								r += `${His} clit is quite large and visibly hard. `;
-							} else {
-								r += `${His} clit is quite large. `;
-							}
-							r += `The hood covering it is quite large making stimulation difficult. `;
-						} else if (child.clit === 2) {
-							if (child.devotion > 50) {
-								r += `${His} clit is huge and visibly erect. `;
-							} else {
-								r += `${His} clit is huge. `;
-							}
-							r += `${His} large hood completely covers it. `;
-						} else if (child.clit === 3) {
-							if (child.devotion > 50) {
-								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
-							} else {
-								r += `${His} clit is enormous, almost a pseudophallus. `;
-							}
-							r += `${His} large hood covers all but the tip of ${his} clit even when aroused. `;
-						} else if (child.clit === 4) {
-							if (child.devotion > 50) {
-								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
-							} else {
-								r += `${His} clit has reached the size of an average penis. `;
-							}
-							r += `Even ${his} large hood can't cover it, leaving over half of the clit exposed. `;
-						} else {
-							if (child.devotion > 50) {
-								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
-							} else {
-								r += `${His} clit is massive, having reached the size of a large penis. `;
-							}
-							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
-						}
-					} else {
-						if (child.clit === 1) {
-							if (child.devotion > 50) {
-								r += `${His} clit is quite large and visibly hard. `;
-							} else {
-								r += `${His} clit is quite large. `;
-							}
-							r += `${His} large thick hood covering it makes any stimulation difficult. `;
-						} else if (child.clit === 2) {
-							if (child.devotion > 50) {
-								r += `${His} clit is huge and visibly erect. `;
-							} else {
-								r += `${His} clit is huge. `;
-							}
-							r += `${His} large thick hood covering it makes any stimulation difficult. `;
-						} else if (child.clit === 3) {
-							if (child.devotion > 50) {
-								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
-							} else {
-								r += `${His} clit is enormous, almost a pseudophallus. `;
-							}
-							r += `Matching its size is the thick hood covering it. `;
-						} else if (child.clit === 4) {
-							if (child.devotion > 50) {
-								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
-							} else {
-								r += `${His} clit has reached the size of an average penis. `;
-							}
-							r += `${His} large hood covering over half of it adds to its penis-like appearance. `;
-						} else {
-							if (child.devotion > 50) {
-								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect, since lack of erectile tissues means it can never reach full erection. `;
-							} else {
-								r += `${His} clit is massive, having reached the size of a large penis. `;
-							}
-							r += `Not even its large hood can contain it, leaving over half of it exposed. `;
-						}
+	function skin(child) {
+		let
+			r = ``;
+
+		if (V.seeNationality) {
+			if (child.nationality === 0) {
+				r += `Ethnically, ${he}'s `;
+			} else if (child.nationality === "slave") {
+				r += `${He}'s been chattel long enough that slavery is effectively ${his} nationality; ethnically, ${he}'s `;
+			} else if (child.nationality === "Stateless") {
+				r += `${He} has spent so much time in the Free Cities that their statelessness is effectively ${his} nationality; ethnically, ${he}'s `;
+			} else if (child.nationality === "Zimbabwean" && child.race === "white") {
+				r += `${He}'s originally <span class="tan">Rhodesian;</span> ethnically, ${he}'s `;
+			} else if (child.nationality === "Vatican") {
+				r += `${He}'s originally <span class="tan">from Vatican City;</span> ethnically, ${he}'s `;
+			} else {
+				r += `${He}'s originally <span class="tan">${child.nationality};</span> ethnically, ${he}'s `;
+			}
+			r += `<span class="tan">${child.race},</span> and ${his} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
+
+			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}.` : ``}`;
+
+			if (child.race !== child.origRace) {
+				if (V.saleDescription) {
+					if (PC.skill.medicine >= 100) {
+						r += `Thanks to your medical experience, you can easily tell that ${he} was originally ${child.origRace}, but surgically modified. `;
+					} else if (PC.skill.medicine >= 50) {
+						r += `Oddly enough, ${he} appears to have a number of ${child.origRace} features. `;
+					} else if (PC.skill.slaving >= 50) {
+						r += `Thanks to your experience in buying and selling slaves, you can easily tell that ${he} is not naturally ${child.race}. `;
+					} else if (jsRandom(0, 100) < PC.skill.medicine) {
+						r += `${His} features seem slightly off. `;
 					}
+				} else {
+					r += `${He} has received plastic surgery to appear ${child.race}; ${he} is originally ${child.origRace}. `;
 				}
 			}
+		} else if (V.seeRace) {
+			r += `Ethnically, ${he}'s <span class=tan>${child.race},</span> and ${his} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
 
-			if (V.showBodyMods) {
-				r += piercings.vagina(child);
-				r += piercings.clit(child);
-				r += tats.vagina(child);
-			}
+			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}. ` : ``}`;
 
-			if (child.rules.release.masturbation === 1) {
-				if ((child.aphrodisiacs > 0 || child.inflationType === "aphrodisiac") && child.drugs !== "priapism agent") {
-					if (child.aphrodisiacs > 1 || (child.inflationType === "aphrodisiac" && child.inflation > 1)) {
-						if (child.dick !== 0 && child.hormoneBalance >= 100 && !hasAnyArms(child)) {
-							r += `The extreme dose of aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && child.balls > 0 && child.ballType === "sterile" && !hasAnyArms(child)) {
-							r += `The extreme dose of aphrodisiacs combined with the chemical castration that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} limp dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && !child.balls && !hasAnyArms(child)) {
-							r += `The extreme dose of aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} limp dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && child.hormoneBalance >= 100) {
-							r += `The extreme dose of aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && !child.balls) {
-							r += `The extreme dose of aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && !canAchieveErection(child)) {
-							r += `The extreme dose of aphrodisiacs combined with ${his} inability to become erect have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0) {
-							r += `The extreme dose of aphrodisiacs has ${his} cock painfully erect and precum drips from its head. `;
-						}
-					} else {
-						if (child.dick !== 0 && child.hormoneBalance >= 100 && isAmputee(child)) {
-							r += `The aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && child.balls > 0 && child.ballType === "sterile" && isAmputee(child)) {
-							r += `The aphrodisiacs combined with the chemical castration that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && !child.balls && isAmputee(child)) {
-							r += `The aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && child.hormoneBalance >= 100) {
-							r += `The aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} sexually frustrated; ${he}'s touching ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously rubbing ${his} ass against whatever's next to ${him}` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						} else if (child.dick !== 0 && !child.balls) {
-							r += `The aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s touching ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously rubbing ${his} ass against whatever's next to ${him}` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
-						}
+			if (child.race !== child.origRace) {
+				if (V.saleDescription) {
+					if (PC.skill.medicine >= 100) {
+						r += `Thanks to your medical experience, you can easily tell that ${he} was originally ${child.origRace}, but surgically modified. `;
+					} else if (PC.skill.medicine >= 50) {
+						r += `Oddly enough, ${he} appears to have a number of ${child.origRace} features. `;
+					} else if (PC.skill.slaving >= 50) {
+						r += `Thanks to your experience in buying and selling slaves, you can easily tell that ${he} is not naturally ${child.race}. `;
+					} else if (jsRandom(0, 100) < PC.skill.medicine) {
+						r += `${His} features seem slightly off. `;
 					}
+				} else {
+					r += `${He} has received plastic surgery to appear ${child.race}; ${he} is originally ${child.origRace}. `;
 				}
 			}
+		} else {
+			r += `${His} skin is ${child.skin}${child.markings === "freckles" ? ` and lightly freckled${skinToneLevel(child.skin) > 5 && skinToneLevel(child.skin < 10) && child.hColor === "red" ? `, an attractive combination` : ``}` : child.markings === "heavily freckled" ? `and heavily freckled${skinToneLevel(child.skin > 5) && skinToneLevel(child.skin) < 10 && child.hColor === "red" ? `, an attractive combination` : ``}. ` : `. `}`;
 
-			if (child.vagina === -1) {
-				r += `${V.seeDicks < 100 && child.anus > 0 ? `Since ${he} lacks a vagina, ${he} takes it up ${V.seeRace ? `${his} ${child.race}` : `the`} ass instead.` : ``}`;
-			} else if (child.skill.vaginal >= 100) {
-				r += `${He} is a <span class="aquamarine">vanilla sex master.</span> `;
-			} else if (child.skill.vaginal > 60) {
-				r += `${He} is a <span class="aquamarine">vanilla sex expert.</span> `;
-			} else if (child.skill.vaginal > 30) {
-				r += `${He} is <span class="aquamarine">skilled at vanilla sex.</span> `;
-			} else if (child.skill.vaginal > 10) {
-				r += `${He} has <span class="aquamarine">basic knowledge about vanilla sex.</span> `;
-			} else {
-				r += `${He} is unskilled at vaginal sex. `;
-			}
+			r += `${child.skin === "sun tanned" || child.skin === "spray tanned" ? `${His} skin has been tanned ${child.skin === "sun tanned" ? `to a natural, healthy-looking tone` : `with obvious, garish-looking makeup`}.` : ``}`;
 		}
 
 		return r;
 	}
 
-	function waist(child) {
-		let
-			r = ``,
-			belly;
+	function tats() {
+		function anus(child) {
+			let
+				r = ``;
 
-		if (child.belly >= 1500) {
-			belly = bellyAdjective(child);
+			if (child.anusTat !== 0) {
+				switch (child.anusTat) {
+					case "bleached":
+						r += `${His} anus is bleached. `;
+						break;
+					case "tribal patterns":
+						r += `${His} anus is bleached. It is tattooed with a tribal pattern that changes interestingly when ${he} relaxes or tightens ${his} sphincter. `;
+						break;
+					case "flowers":
+						r += `${He} has a huge blooming flower tattooed right over ${his} anus. `;
+						break;
+					case "counting":
+						if (child.counter.anal === 0) {
+							r += `${He} has a dashed line tattooed around ${his} anus as a guideline for where ${his} anal count will be inscribed. `;
+						} else if (child.counter.anal < 1000) {
+							r += `${He} has fine rings tattooed around ${his} anus, one for each hundred cocks. `;
+						} else {
+							r += `${He} has thick and fine rings tattooed around ${his} anus, for each thousand and hundred cocks. `;
+						}
+						break;
+					case "advertisements":
+						if (child.vagina > -1) {
+							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Second Pussy.' `;
+						} else {
+							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Spit First.' `;
+						}
+						break;
+					case "rude words":
+						if (child.vagina > -1) {
+							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Fucktoy's Favorite Fuckhole.' `;
+						} else {
+							r += `${He} has a ring of text tattooed around ${his} anus which reads 'Sissy Slut's Sodomy Slit.' `;
+						}
+						break;
+					case "degradation":
+						r += `${His} anus is bleached. It is tattooed with gothic script in a ring around ${his} hole, reading '${WrittenMaster(child)} Made Me An Anal Slut.' `;
+						break;
+					case "bovine patterns":
+						r += `${His} anus is tattooed to mimic the puffy, dark appearance of a cow's. `;
+						break;
+					case "sacrilege":
+						r += `${He} has a ring of Aramaic text tattooed around ${his} anus, which translates to horrible blasphemy. `;
+						break;
+					case "sacrament":
+						r += `${He} has a ring of Aramaic text tattooed around ${his} anus, which translates to a comforting blessing. `;
+						break;
+					case "possessive":
+						r += `${He} has a ring of numbers around ${his} anus, detailing the date ${he} was enslaved by you. `;
+						break;
+					case "paternalist":
+						r += `${His} anus is bleached. It is tattooed with text in a ring around ${his} hole, reading '${WrittenMaster(child)} Helped Me Love Anal.' `;
+						break;
+					case "Asian art":
+						r += `${His} anus is bleached. `;
+						break;
+					default:
+						r += `${child.anusTat}`;
+						break;
+				}
+			}
+
+			r += App.Desc.brand(child, "anus");
+			r += App.Desc.brand(child, "asshole");
+
+			return r;
 		}
 
-		r += `${He} has `;
+		tats.anus = anus;
 
-		if (child.waist > 95) {
-			r += `a badly <span class="red">masculine waist</span> that ruins ${his} figure${child.weight > 30 ? ` and greatly exaggerates how fat ${he} is` : ` despite how thin ${he} is`}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} thick waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+		function arms(child) {
+			let
+				r = ``;
+
+			if (child.armsTat !== 0) {
+				switch (child.armsTat) {
+					case "tribal patterns":
+						r += `${His} tribal tattoos run down ${his} arms. `;
+						break;
+					case "flowers":
+						r += `${His} floral tattoos run down ${his} arms to end in a pretty bloom on the back of each hand. `;
+						break;
+					case "counting":
+						if (child.counter.oral === 0) {
+							r += `There are horizontal lines tattooed around ${his} forearms, creating a blank space to permanently tally future sexual exploits. `;
+						} else if (child.counter.oral < 500) {
+							r += `Tiny dick, pussy, and anus symbols are tattooed on ${his} forearms, one for each organ ${he}'s manually pleasured. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							r += `Tiny dick, pussy, and anus symbols are tattooed all over both ${his} arms, one for each organ ${he}'s manually pleasured. `;
 						}
-					}
-				} else if (child.belly < 300000) {
-					r += `${His} ${belly} belly is hidden by ${his} thick waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly can be seen around ${his} thick waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} thick waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
+						break;
+					case "advertisements":
+						r += `${His} right arm is tattooed with a price list for use if ${he}'s whoring, and ${his} left with a simple tourist guide for use if ${he}'s serving the public. `;
+						break;
+					case "rude words":
+						r += `${His} arms have helpful instructions on how to restrain ${him} for rape, including indications of the best anchor points at ${his} wrists. `;
+						break;
+					case "degradation":
+						if (child.dick > 0) {
+							if (child.vagina > -1) {
+								if (child.boobs > 600) {
+									r += `'Boobs Pussy Cock Asshole' is tattooed on ${his} left arm, and 'Suck Fuck Hurt Rape' is tattooed on ${his} right. `;
+								} else {
+									r += `'Half Pussy & Half Cock' is tattooed on ${his} left arm, and 'All Whore' is tattooed on ${his} right. `;
+								}
+							} else if (child.boobs > 600) {
+								r += `'I didn't use to have boobs' is tattooed on ${his} left arm, and 'I didn't always take it up the ass' is tattooed on ${his} right. `;
+							} else {
+								r += `'I promise to cum buckets' is tattooed on ${his} left arm, and 'If you fuck my butt' is tattooed on ${his} right. `;
+							}
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							if (child.boobs > 800 && child.lactation > 0) {
+								r += `'Grade AAA Milker' is tattooed on ${his} left arm, and 'Grade AAA Breeder' is tattooed on ${his} right. `;
+							} else if (child.visualAge < 15) {
+								r += `'Teach me how to suck cock' is tattooed on ${his} left arm, and 'Teach me how to take dick' is tattooed on ${his} right. `;
+							} else {
+								r += `'There are many sex slaves like me' is tattooed on ${his} left arm, and 'But this one is ${WrittenMaster(child)}'s' is tattooed on ${his} right. `;
+							}
 						}
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges around ${his} thick waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
+						break;
+					case "Asian art":
+						r += `Tattoos of fierce dragons wind around both ${his} arms. `;
+						break;
+					case "scenes":
+						r += `${His} lewd tattoos cover ${his} arms; they include lots of little vignettes of sex, with dates to show when ${he} was first fucked like that. `;
+						break;
+					case "bovine pattern":
+						r += `Tattoos of cow-like spots cover ${his} arms, but stop short of each of ${his} elbows. `;
+						break;
+					case "sacrilege":
+						r += `Tattoos of swirling flames run down ${his} arms. `;
+						break;
+					case "sacrament":
+						r += `Tattoos of swirling thorns run down ${his} arms, culminating in a stylized depiction of a bloody nail on the back of each hand. `;
+						break;
+					case "possessive":
+						r += `${His} arm tattoos depict notable moments during ${his} enslavement by you, culminating in a stylized rendition of your first initial on ${his} left hand and your second on the right. `;
+						break;
+					case "paternalist":
+						if (child.dick > 0) {
+							if (child.vagina > -1) {
+								if (child.boobs > 600) {
+									r += `'Boobs Pussy Cock Asshole' is tattooed on ${his} left arm, and 'Caress Pleasure Stroke Stretch' is tattooed on ${his} right. `;
+								} else {
+									r += `'Half Pussy & Half Cock' is tattooed on ${his} left arm, and 'All Loved' is tattooed on ${his} right. `;
+								}
+							} else if (child.boobs > 600) {
+								r += `'I didn't use to have boobs' is tattooed on ${his} left arm, and 'And now I do!' is tattooed on ${his} right. `;
+							} else {
+								r += `'I promise to cum buckets' is tattooed on ${his} left arm, and 'If you treat me right' is tattooed on ${his} right. `;
+							}
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							if (child.boobs > 800 && child.lactation > 0) {
+								r += `'Please drink' is tattooed on ${his} left arm, and 'All my milk' is tattooed on ${his} right. `;
+							} else if (child.visualAge < 15) {
+								r += `'Please teach me how to suck cock' is tattooed on ${his} left arm, and 'Please teach me how to fuck' is tattooed on ${his} right. `;
+							} else {
+								r += `'There are many sex slaves like me' is tattooed on ${his} left arm, and 'But ${WrittenMaster(child)} loves me' is tattooed on ${his} right. `;
+							}
 						}
-					}
+						break;
+					default:
+						r += `${child.armsTat}`;
+						break;
 				}
 			}
-		} else if (child.waist > 40) {
-			r += `a broad, <span class="red">ugly waist</span> that makes ${him} look mannish${child.weight > 30 ? ` and exaggerates how fat ${he} is` : ` despite how thin ${he} is`}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} chunky waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+
+			r += App.Desc.brand(child, "upper arm");
+			r += App.Desc.brand(child, "lower arm");
+			r += App.Desc.brand(child, "hand");
+			r += App.Desc.brand(child, "wrist");
+
+			return r;
+		}
+
+		tats.arms = arms;
+
+		function back(child) {
+			let
+				r = ``;
+
+			if (child.backTat !== 0) {
+				switch (child.backTat) {
+					case "tribal pattern":
+						r += `${He} has a totem of ${his} spirit animal tattooed across ${his} back. `;
+						break;
+					case "flowers":
+						r += `${His} back is covered in hundreds of beautiful flower tattoos; one could spend half an hour examining them all. `;
+						break;
+					case "counting":
+						r += `${His} back is tattooed with tick marks to count the days of ${his} sexual `;
+						if (child.weekAcquired === 0) {
+							r += `enslavement to you. There are a lot of them. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							if (((V.week - child.weekAcquired) * 7) + jsRandom(-3, 3)) {
+								r += `slavery here. There are only a few. `;
+							} else {
+								r += `slavery here: ${weeksOwned} of them. `;
+							}
 						}
-					}
-				} else if (child.belly < 150000) {
-					r += `${His} ${belly} belly is hidden by ${his} chunky waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly can be seen around ${his} chunky waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} chunky waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges around ${his} chunky waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				}
-			}
-		} else if (child.waist > 10) {
-			r += `an <span class="red">unattractive waist</span> that conceals ${his} girlish figure${child.weight > 30 ? ` and accentuates how fat ${he} is` : ` despite how thin ${he} is`}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						break;
+					case "advertisements":
+						r += `${He} has an ad for the arcology itself tattooed across ${his} back. `;
+						break;
+					case "rude words":
+						r += `'Sex Slave' is tattooed across ${his} back; the tattoo uses the broad space to make each letter ${V.showInches === 2 ? `six inches` : `fifteen centimeters`} tall, so that ${his} identity can be read from hundreds of ${V.showInches === 2 ? `yards` : `meters`} off. `;
+						break;
+					case "degradation":
+						r += `${He} has `;
+						if (child.dick > 0) {
+							if (child.vagina > -1) {
+								if (child.boobs > 600) {
+									r += `'Futa Slave'`;
+								} else {
+									r += `'Hermaphrodite'`;
+								}
+							} else if (child.boobs > 600) {
+								r += `'Shemale Slave'`;
+							} else {
+								r += `'Dickgirl Slave'`;
+							}
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							if (child.boobs > 800 && child.lactation > 0) {
+								r += `'Slave Cow'`;
+							} else if (child.visualAge < 15) {
+								r += `'Slave Girl'`;
+							} else {
+								r += `'Sex Slave'`;
+							}
 						}
-					}
-				} else if (child.belly < 10000) {
-					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
-				} else if (child.belly < 200000) {
-					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
-				} else if (child.belly < 300000) {
-					r += `${His} ${belly} belly can be seen around ${his} waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				}
-			}
-		} else if (child.waist >= -10) {
-			r += `an average waist for a ${boy}${child.weight > 30 ? `, though it looks broader since ${he}'s fat` : child.weight < -30 ? `, though it looks narrower since ${he}'s thin` : ``}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						r += `tattooed across ${his} back in gothic script. `;
+						break;
+					case "Asian art":
+						r += `An Asian dragon is tattooed in a circle across ${his} back; the dragon has subtle features that, according to traditional meanings, relate it to ${his} personality. `;
+						break;
+					case "scenes":
+						if (child.vagina === -1) {
+							r += `A line-art rendition of ${child.slaveName} ${himself} cumming copiously while riding a dick is tattooed across ${his} entire back. `;
+						} else if (child.lactation > 0) {
+							r += `A line-art rendition of ${child.slaveName} ${himself} nursing a pair of ${his} fellow slaves is tattooed across ${his} entire back. `;
+						} else if (child.skill.vaginal >= 100) {
+							r += `A line-art rendition of ${child.slaveName} ${himself} performing reverse cowgirl and spreading ${his} pussy is tattooed across ${his} entire back. `;
+						} else if (PC.vagina !== -1) {
+							r += `A line-art rendition of ${child.slaveName} ${himself} eating pussy is tattooed across ${his} entire back. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							r += `A line-art rendition of ${child.slaveName} ${himself} deepthroating a cock is tattooed across ${his} entire back. `;
 						}
-					}
-				} else if (child.belly < 10000) {
-					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
-				} else if (child.belly < 200000) {
-					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
-				} else if (child.belly < 300000) {
-					r += `${His} ${belly} belly can be seen around ${his} waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
+						break;
+					case "bovine patterns":
+						r += `${His} back is tattooed to resemble the dappled flank of a cow. `;
+						break;
+					case "sacrilege":
+						r += `${He} has a pair of blackened wings tattooed across ${his} entire back. `;
+						break;
+					case "sacrament":
+						r += `${He} has a pair of pure white wings tattooed across ${his} entire back. `;
+						break;
+					case "possessive":
+						r += `An abridged and stylized version of ${his} slave contract is tattooed across ${his} entire back. `;
+						break;
+					case "paternalist":
+						r += `${He} has your name and the location of your penthouse tattooed on ${his} upper back, so kind citizens can return ${him} to you if ${he} wanders off. `;
+						break;
+					default:
+						r += `${child.backTat}`;
 				}
 			}
-		} else if (child.waist >= -40) {
-			r += `a nice <span class="pink">feminine waist</span> that gives ${him} a girlish figure${child.weight > 30 ? ` despite ${his} extra weight` : child.weight < -30 ? ` and accentuates how thin ${he} is` : ``}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+
+			r += App.Desc.brand(child, "back");
+
+			return r;
+		}
+
+		tats.back = back;
+
+		function boobs(child) {
+			let
+				r = ``;
+
+			if (child.boobsTat !== 0) {
+				switch (child.boobsTat) {
+					case "tribal patterns":
+						r += `${His} chest and breasts are tattooed with tribal patterns that focus attention on ${his} nipples. `;
+						break;
+					case "flowers":
+						r += `${His} chest is tattooed with a pattern of flowering vines that delicately outlines ${his} breasts. `;
+						break;
+					case "counting":
+						if (child.counter.mammary === 0) {
+							r += `There is a horizontal line tattooed across ${his} middle chest for symbols counting ${his} mammary encounters to be inscribed under, once ${he} has some. `;
+						} else if (child.counter.mammary < 500) {
+							r += `Tiny dick, lips, breast, and even pussy symbols are tattooed all over ${his} cleavage, one for each of ${his} mammary encounters. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							r += `Tiny dick, lips, breast, and even pussy symbols cover ${his} breasts, cleavage, and sides, one for each of ${his} mammary encounters. `;
 						}
-					}
-				} else if (child.belly < 10000) {
-					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
-				} else if (child.belly < 100000) {
-					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
-				} else if (child.belly < 300000) {
-					r += `${His} ${belly} belly can be seen around ${his} waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
+						break;
+					case "advertisements":
+						r += `'Fuck Me!' is tattooed across ${his} chest in such large letters that the word is visible a long way off. `;
+						break;
+					case "rude words":
+						r += `'Fuckslave' is tattooed across ${his} chest in such large letters that the word is visible a long way off. `;
+						break;
+					case "degradation":
+						r += `'${WrittenMaster(child)}'s' is tattooed across the top of ${his} right breast; 'Bitch' is tattooed across the top of ${his} left. `;
+						break;
+					case "Asian art":
+						r += `An octopus is tattooed on ${his} upper chest; its tentacles reach down to envelop ${his} breasts, their tips reaching for but not quite reaching each nipple. `;
+						break;
+					case "scenes":
+						r += `${His} chest is tattooed with lewd scenes; each of ${his} breasts shows a phallus receiving a titfuck while each of ${his} collarbones shows a ${woman} deepthroating a large phallus. `;
+						break;
+					case "bovine patterns":
+						r += `${His} chest is tattooed to look like a Holstein cow's, with ${his} udders left bare to draw attention to them. `;
+						break;
+					case "sacrilege":
+						r += `Each of ${his} breasts is tattooed with a depiction of a pentagram, with ${his} nipples forming the center. `;
+						break;
+					case "sacrament":
+						r += `Each of ${his} breasts is tattooed with a depiction of a crucifix, with ${his} nipples forming the center. `;
+						break;
+					case "possessive":
+						r += `Your personal symbol is tattooed above ${his} left breast, '${PlayerName()}' above ${his} right, leaving the rest of ${his} chest and breasts bare. `;
+						break;
+					case "paternalist":
+						r += `'${WrittenMaster(child)}'s' is tattooed across the top of ${his} right breast; 'Darling' is tattooed across the top of ${his} left. `;
+						break;
+					default:
+						r += `${child.boobsTat}`;
+						break;
 				}
 			}
-		} else if (child.waist >= -95) {
-			r += `a hot <span class="pink">wasp waist</span> that gives ${him} an hourglass figure${child.weight > 30 ? ` despite ${his} extra weight` : child.weight < -30 ? ` further accentuated by how thin ${he} is` : ``}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} narrow waist and continues ${child.belly >= 1000000 ? `quite the distance` : `over half a ${V.showInches === 2 ? `yard` : `meter`}`} farther to either side. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+
+			return r;
+		}
+
+		tats.boobs = boobs;
+
+		function butt(child) {
+			let
+				r = ``;
+
+			if (child.buttTat !== 0) {
+				switch (child.buttTat) {
+					case "tribal patterns":
+						r += `${His} buttocks and hips are tattooed with tribal patterns that emphasize ${his} womanly curves. `;
+						break;
+					case "flowers":
+						r += `${His} hips are tattooed with a cute floral design. `;
+						break;
+					case "counting":
+						if (child.counter.anal === 0) {
+							r += `There is a horizontal line tattooed across the tops of ${his} buttocks for symbols counting ${his} anal exploits to be inscribed under, once ${he} has some. `;
+						} else if (child.counter.anal < 500) {
+							r += `Tiny dick symbols are tattooed all over the top of ${his} buttocks, one for every time ${he}'s been assfucked. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							r += `Tiny dick symbols are tattooed all over ${his} entire buttocks, attesting to long anal slavery. `;
 						}
-					}
-				} else if (child.belly < 5000) {
-					r += `From behind, ${his} narrow figure hides ${his} ${belly} belly. `;
-				} else if (child.belly < 80000) {
-					r += `From behind, ${his} narrow figure barely hides ${his} ${belly} belly. `;
-				} else if (child.belly < 100000) {
-					r += `${His} ${belly} belly can be seen around ${his} narrow waist. `;
-				} else if (child.belly < 450000) {
-					r += `${His} ${belly} belly lewdly extends past ${his} narrow waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges to either side of ${his} narrow waist and continues for nearly half a ${V.showInches === 2 ? `yard` : `meter`} in both directions. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline barely visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				}
-			}
-		} else {
-			r += `an <span class="pink">absurdly narrow waist</span> that gives ${him} a cartoonishly hourglass figure${child.weight > 30 ? ` made even more ludicrous by ${his} extra weight` : child.weight < -30 ? ` made even more ludicrous by how thin ${he} is` : ``}. `;
-			if (child.belly >= 1500) {
-				if (child.belly >= 750000) {
-					r += `${His} ${belly} belly grotesquely bulges around ${his} narrow waist and continues ${child.belly >= 1000000 ? `quite the distance` : `over half a ${V.showInches === 2 ? `yard` : `meter`}`} farther to either side. `;
-					if (child.preg > 3) {
-						if (child.belly > child.pregAdaptation * 1000) {
-							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						break;
+					case "advertisements":
+						r += `'Shove' is tattooed across ${his} left buttock; 'It In' is tattooed across ${his} right. `;
+						break;
+					case "rude words":
+						r += `${child.vagina > 0 ? `'No. 2'` : `'No. 1'`} is tattooed across ${his} left buttock; 'Fuckhole' is tattooed across ${his} right. `;
+						break;
+					case "degradation":
+						r += `'Treat it' is tattooed across ${his} left buttock; 'Like a Pussy' is tattooed across ${his} right. `;
+						break;
+					case "Asian art":
+						r += `Each of ${his} buttocks bears a tattoo of a coiled dragon, advancing meaningfully towards ${his} anus. `;
+						break;
+					case "scenes":
+						if (child.dick > 0 && child.balls > 0) {
+							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a smiling shemale offering ${his} anus, while each of ${his} thighs shows a rear view of a shemale simultaneously being sodomized and sodomizing. `;
+						} else if (child.dick > 0) {
+							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a gelding, legs together to conceal ${his} cock and display ${his} anus, while each of ${his} thighs shows a gelding being double penetrated in ${his} gaping anus. `;
 						} else {
-							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+							r += `${His} buttocks are tattooed with lewd scenes; each of ${his} buttocks shows a ${woman} being sodomized while each of ${his} thighs shows a ${woman} being gangbanged in all ${his} holes. `;
 						}
-					}
-				} else if (child.belly < 2000) {
-					r += `From behind, ${his} narrow figure hides ${his} ${belly} belly. `;
-				} else if (child.belly < 5000) {
-					r += `From behind, ${his} narrow figure barely hides ${his} ${belly} belly. `;
-				} else if (child.belly < 8000) {
-					r += `${His} ${belly} belly can be seen around ${his} narrow waist. `;
-				} else if (child.belly < 15000) {
-					r += `${His} ${belly} belly lewdly extends past ${his} narrow waist. `;
-				} else if (child.belly < 45000) {
-					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
-				} else if (child.belly < 600000) {
-					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
-					}
-				} else if (child.belly < 750000) {
-					r += `${His} ${belly} belly lewdly bulges to either side of ${his} narrow waist and continues for nearly half a ${V.showInches === 2 ? `yard` : `meter`} in both directions. `;
-					if (child.belly > child.pregAdaptation * 1000) {
-						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline barely visible from behind. `;
-					} else {
-						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						break;
+					case "bovine patterns":
+						r += `${His} buttocks are tattooed with large black splotches like those of a Holstein cow. `;
+						break;
+					case "sacrilege":
+						r += `'It's not a sin' is tattooed across ${his} left buttock; ${child.vagina > -1 ? `'If I don't enjoy it'` : `'I'm a girl'`} is tattooed across ${his} right. `;
+						break;
+					case "sacrament":
+						r += `'This is my penance' is tattooed across ${his} left buttock; ${child.vagina > -1 ? `'Make me suffer.'` : `'As a slave.'`} is tattooed across ${his} right. `;
+						break;
+					case "possessive":
+						r += `'${PC.slaveName} made me their' is tattooed across ${his} left buttock; with '${desc}' tattooed across ${his} right. `;
+						break;
+					case "paternalist":
+						r += `'Treat it' is tattooed across ${his} left buttock; 'Gently' is tattooed across ${his} right. `;
+						break;
+					default:
+						r += `${child.buttTat}`;
+						break;
+				}
+			}
+
+			r += App.Desc.brand(child, "buttock");
+
+			return r;
+		}
+
+		tats.butt = butt;
+
+		function dick(child) {
+			let
+				r = ``;
+
+			if (!child.fuckdoll) {
+				if (child.dick !== 0 && child.dickTat !== 0) {
+					switch (child.dickTat) {
+						case "tribal patterns":
+							r += `${His} cock is tattooed with tribal patterns. `;
+							break;
+						case "flowers":
+							r += `${His} cock is tattooed with a vine that wraps around its shaft. `;
+							break;
+						case "counting":
+							if (child.counter.penetrative === 0) {
+								r += `There is a horizontal line tattooed around the base of ${his} dick for symbols counting ${his} penetrative exploits to be inscribed under, once ${he} has some. `;
+							} else if (child.counter.penetrative < 500) {
+								r += `Tiny anus, pussy and mouth symbols are tattooed all over ${his} dick, recounting ${his} penetrative exploits. `;
+							} else {
+								r += `Tiny anus, pussy and mouth symbols are tattooed all over ${his} dick, recounting ${his} penetrative exploits. ${He} has so many that they radiate out across ${his} crotch, too. `;
+							}
+							break;
+						case "advertisements":
+							r += `${His} cock reads 'Sissy Slut.' `;
+							break;
+						case "rude words":
+							r += `${His} cock reads 'Bitchstick.' `;
+							break;
+						case "degradation":
+							if (child.anus === 0) {
+								r += `${His} cock reads '100% Virgin Anus.' `;
+							} else {
+								r += `${His} cock reads 'Comes When Assraped.' `;
+							}
+							break;
+						case "Asian art":
+							r += `${His} cock has an Asian dragon rushing down each side to the tip. `;
+							break;
+						case "bovine patterns":
+							r += `${His} cock is tattooed to make it look a little like a bulls'. `;
+							break;
+						case "sacrilege":
+							r += `${His} cock is covered in tiny words, each derived from a sacrilegious text. `;
+							break;
+						case "sacrament":
+							r += `${His} cock is covered in tiny words, each derived from a sacred scripture. `;
+							break;
+						case "possessive":
+							r += `${His} cock has an identification barcode tattooed on its side. `;
+							break;
+						case "paternalist":
+							if (child.anus === 0) {
+								r += `${His} cock reads 'Still an Ass Virgin.' `;
+							} else {
+								r += `${His} cock reads 'Comes When Stroked.' `;
+							}
+							break;
+						default:
+							r += `${child.dickTat}`;
 					}
 				}
 			}
-		}
-
-		return r;
-	}
-
-	// instantiation
-	piercings();
-	tats();
-	accessories();
 
-	/* 000-250-006 */
-	if (V.seeImages) {
-		if (V.imageChoice === 1) {
-			r += `<div class="imageRef lrgVector"><div class="mask">&nbsp;</div>${SlaveArt(child, 3, 0)}</div> `;
-		} else {
-			r += `<div class="imageRef lrgRender"><div class="mask">&nbsp;</div>${SlaveArt(child, 3, 0)}</div> `;
+			return r;
 		}
-	}
-	/* 000-250-006 */
-
-	r += `&nbsp;&nbsp;&nbsp;&nbsp; `;
 
-	r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `;
+		tats.dick = dick;
 
-	if (child.custom.label) {
-		r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `;
-	}
+		function lips(child) {
+			let
+				r = ``;
 
-	r += ` is `;
+			if (child.lipsTat !== 0) {
+				switch (child.lipsTat) {
+					case "tribal patterns":
+						r += `${His} face is tattooed with tribal patterns that make ${him} seem mysterious and exotic. `;
+						break;
+					case "flowers":
+						r += `${His} minimal facial tattoos are limited to a cute flower on each cheek. `;
+						break;
+					case "counting":
+						if (child.counter.oral === 0) {
+							r += `There is a horizontal line tattooed across the ${his} cheeks for symbols counting ${his} oral totals to be inscribed under, once ${he} has some. `;
+						} else if (child.counter.oral < 500) {
+							r += `Tiny dick, pussy, and anus symbols are tattooed all over ${his} cheeks, one for every thing ${he}'s sucked. `;
+						} else {
+							r += `Tiny dick, pussy, and anus symbols are tattooed all over ${his} face, forehead, and neck, one for every thing ${he}'s sucked. `;
+						}
+						break;
+					case "advertisements":
+						r += `${His} facial tattoos include 'Facefuck Me' across ${his} forehead, 'Cock' to the left of ${his} mouth, and 'Sucker' to the right of it. `;
+						break;
+					case "rude words":
+						r += `${His} facial tattoos include 'Sex Slave' across ${his} forehead, 'Face' to the left of ${his} mouth, and 'Pussy' to the right of it. `;
+						break;
+					case "degradation":
+						r += `'${desc}' is tattooed across ${his} forehead. `;
+						break;
+					case "Asian art":
+						r += `${He} has a blossoming cherry tree tattooed on one temple; its pink petals are dappled across ${his} cheeks. `;
+						break;
+					case "bovine patterns":
+						r += `${His} face is subtly tattooed to give ${him} a somewhat bovine appearance. `;
+						break;
+					case "permanent makeup":
+						if (child.makeup !== 0) {
+							r += `${His} normal makeup is difficult to distinguish from the underlying tattoo. `;
+						}
+						break;
+					case "sacrilege":
+						r += `${His} face is subtly tattooed to give ${him} a decidedly demonic appearance. `;
+						break;
+					case "sacrament":
+						r += `${His} face is subtly tattooed to give ${him} a decidedly angelic appearance. `;
+						break;
+					case "possessive":
+						r += `'Property of ${PlayerName()}' is tattooed across ${his} forehead. `;
+						break;
+					case "paternalist":
+						r += `'Beloved ${desc}' is tattooed across one of ${his} cheeks. `;
+						break;
+					default:
+						r += `${child.lipsTat}`;
+						break;
+				}
+			}
 
-	if (child.devotion < -95) {
-		r += `a <span class="devotion hateful">hate-filled,</span> `;
-	} else if (child.devotion < -50) {
-		r += `a <span class="devotion hateful">hateful,</span> `;
-	} else if (child.devotion < -20) {
-		r += `a <span class="devotion resistant">reluctant,</span> `;
-	} else if (child.devotion <= 20) {
-		r += `a <span class="devotion ambivalent">hesitant,</span> `;
-	} else if (child.devotion <= 50) {
-		r += `an <span class="devotion accept">accepting,</span> `;
-	} else if (child.devotion <= 95) {
-		r += `a <span class="devotion devoted">devoted,</span> `;
-	} else {
-		r += `a <span class="devotion worship">worshipful,</span> `;
-	}
+			r += App.Desc.brand(child, "lips");
 
-	if (child.trust < -95) {
-		r += `<span class="trust extremely-terrified">abjectly terrified</span> `;
-	} else if (child.devotion < -50) {
-		r += `<span class="trust terrified">terrified</span> `;
-	} else if (child.devotion < -20) {
-		r += `<span class="trust frightened">frightened</span> `;
-	} else if (child.devotion <= 20) {
-		r += `<span class="trust fearful">fearful</span> `;
-	} else if (child.devotion <= 50) {
-		if (child.devotion < -20) {
-			r += `<span class="defiant careful">careful</span> `;
-		} else {
-			r += `<span class="trust careful">careful</span> `;
-		}
-	} else if (child.devotion <= 95) {
-		if (child.devotion < -20) {
-			r += `<span class="defiant bold">bold</span> `;
-		} else {
-			r += `<span class="trust trusting">trusting</span> `;
-		}
-	} else {
-		if (child.devotion < -20) {
-			r += `<span class="defiant full">defiant</span> `;
-		} else {
-			r += `<span class="trust prof-trusting">profoundly trusting</span> `;
+			return r;
 		}
-	}
 
-	r += `<strong><span class="coral">${SlaveTitle(child)}.</span></strong> `;
+		tats.lips = lips;
 
-	r += App.Desc.ageAndHealth(child);
+		function shoulders(child) {
+			let
+				r = ``;
 
-	if (!V.saleDescription) {
-		if (V.clinic && V.clinicUpgradeScanner) {
-			if (child.chem > 15) {
-				r += `${V.clinicNameCaps}'s scanners score long term carcinogenic buildup in ${his} body at <span class="cyan">${Math.ceil(child.chem/10)}.</span> `;
-			} else {
-				r += `${V.clinicNameCaps}'s scanners confirm that ${he} has good prospects for long term health. `;
+			if (child.shouldersTat !== 0) {
+				switch (child.shouldersTat) {
+					case "tribal patterns":
+						r += `Tribal tattoos encircle both ${his} shoulders in swirling patterns. `;
+						break;
+					case "flowers":
+						r += `A gorgeous flower tattoo covers each shoulder. `;
+						break;
+					case "counting":
+						r += `A '¤' tattoo counting ${his} earnings and acquirements cover ${his} shoulders. `;
+						break;
+					case "advertisements":
+						if (child.vagina < 0) {
+							r += `'Two Hole Whore' is tattooed on each of ${his} shoulders. `;
+						} else {
+							r += `'Three Hole Whore' is tattooed on each of ${his} shoulders. `;
+						}
+						break;
+					case "rude words":
+						r += `'Dickholster' is tattooed on ${his} left shoulder, and 'Fuckmeat' is tattooed on ${his} right. `;
+						break;
+					case "degradation":
+						r += `'Hurt Me' is tattooed on ${his} left shoulder, and 'Rape Me' on ${his} right. `;
+						break;
+					case "Asian art":
+						r += `Beautiful, colorful tattoos cover ${his} upper body: a line of wind-whipped waves lashing against mountains runs across ${his} collarbone and around both shoulders. `;
+						break;
+					case "scenes":
+						if (child.vagina < 0) {
+							r += `A stylized rendition of a dick plunging into an open mouth is tattooed on ${his} left shoulder, and a similar image of a dick entering an anus on ${his} right. `;
+						} else {
+							r += `A stylized rendition of a dick going into a pussy is tattooed on ${his} left shoulder, and a similar image of a dick entering an anus on ${his} right. `;
+						}
+						break;
+					case "bovine patterns":
+						r += `${His} shoulders are flecked with tattoos of bovine blotches. `;
+						break;
+					case "sacrilege":
+						r += `Tattoos depicting demonic nude figures adorn ${his} shoulders. `;
+						break;
+					case "sacrament":
+						r += `Tattoos depicting saintly nude figures adorn ${his} shoulders. `;
+						break;
+					case "possessive":
+						r += `A rendition of your face inside a heart is tattooed onto ${his} left shoulder, and the words 'I love my ${WrittenMaster(child)}' inside an identical heart are tattooed on ${his} right. `;
+						break;
+					case "paternalist":
+						r += `'Love Me' is tattooed on ${his} left shoulder, and 'Teach Me' on ${his} right. `;
+						break;
+				}
 			}
-		}
 
-		if (V.showSexualHistory && V.ui !== "start") {
-			let weeksOwned = V.week - child.weekAcquired;
+			r += App.Desc.brand(child, "shoulder");
 
-			r += `${He} was born in ${arcology.name} ${weeksOwned} week${weeksOwned !== 1 ? `s` : ``} ago`;
+			return r;
+		}
 
-			let oral = child.counter.oral,
-				vaginal = child.counter.vaginal,
-				anal = child.counter.oral,
-				mammary = child.counter.mammary,
-				penetrative = child.counter.penetrative,
-				total = oral + vaginal + anal + mammary + penetrative;
+		tats.shoulders = shoulders;
 
-			if (total > 0) {
-				r += ` and has been fucked about ${total} times, including `;
-				if ((vaginal + anal + mammary + penetrative) > 0) {
-					if (vaginal > 0) {
-						r += `${vaginal} vanilla, `;
-					}
-					if (anal > 0) {
-						r += `${anal} anal, `;
-					}
-					if (mammary > 0) {
-						r += `${mammary} mammary `;
-					}
-					if (penetrative > 0) {
-						r += `${penetrative} penetrating, `;
-					}
-					r += ` and `;
-				}
-				r += `${oral} oral sexual encounters. `;
-			} else {
-				if (weeksOwned >= 1) {
-					r += ` and `;
-				} else {
-					r += `. ${He} `;
+		function stamp(child) {
+			let
+				r = ``;
+
+			if (child.stampTat !== 0) {
+				switch (child.stampTat) {
+					case "tribal patterns":
+						r += `${He} has a tribal-patterned tramp stamp. `;
+						break;
+					case "flowers":
+						r += `${He} has a floral-patterned tramp stamp. `;
+						break;
+					case "counting":
+						if (child.anus === 0) {
+							r += `${He} has the dashed outline of a cock tattooed across ${his} lower back. `;
+						} else {
+							r += `${He} has the silhouette of the largest cock ${he}'s ever had up ${his} anus tattooed across ${his} lower back. `;
+						}
+						break;
+					case "advertisements":
+						r += `${He} has a tramp stamp which reads 'Fuck my ass!' `;
+						break;
+					case "rude words":
+						r += `${He} has a tramp stamp which reads 'Rear Entrance,' with an arrow pointing downward. `;
+						break;
+					case "degradation":
+						r += `${He} has a tramp stamp formed from gothic lettering that reads 'Anal Whore.' `;
+						break;
+					case "Asian art":
+						r += `A traditional Asian household scene is tattooed on ${his} lower back, showing a rendition of ${child.slaveName}, dressed in rich silks, having sex with a ${PC.title ? `gentleman` : `lady`}. The slave and the ${PC.title ? `gentleman` : `lady`} are kissing passionately as ${PC.title ? `he` : `she`} `;
+						if (child.vagina < 0) {
+							r += `penetrates the child's anus. `;
+						} else if (child.bellyPreg >= 1500 || child.bellyImplant >= 1500) {
+							r += `embraces the child's ${child.pregKnown ? `pregnant` : `rounded`} belly. `;
+						} else {
+							r += `penetrates the child's vagina. `;
+						}
+						break;
+					case "scenes":
+						r += `${He} has a tramp stamp which shows a cock entering an anus, recognizably ${hers}. `;
+						break;
+					case "bovine patterns":
+						r += `${He} has an identifying barcode tattooed across ${his} lower back. `;
+						break;
+					case "sacrilege":
+						r += `${He} has a tramp stamp which reads 'Fuck my ass and be damned.' `;
+						break;
+					case "sacrament":
+						r += `${He} has a tramp stamp which reads 'Fuck my ass and be blessed.' `;
+						break;
+					case "possessive":
+						r += `${He} has a tramp stamp which reads '${PC.slaveName}'s $desc.' `;
+						break;
+					case "paternalist":
+						r += `${He} has a tramp stamp which reads 'Fuck me slowly' with an arrow pointing downward. `;
+						break;
+					default:
+						r += `${child.stampTat}`;
+						break;
 				}
 
-				r += `has had little or no sexual experience `;
-				if (child.weekAcquired !== 0) {
-					r += `as your slave `;
-				} else {
-					r += `in your new arcology `;
-				}
-				r += `yet. `;
+				r += App.Desc.brand(child, "lower back");
 			}
 
-			let sortedCounts = [];
-			sortedCounts.push(
-				{type: "oral", value: oral},
-				{type: "vaginal", value: vaginal},
-				{type: "anal", value: anal},
-				{type: "mammary", value: mammary},
-				{type: "penetrative", value: penetrative}
-			);
-			sortedCounts = sortedCounts.sort(function(a, b) {	// sorts the counts from largest to smallest
-				return b.value - a.value;
-			});
-
-			if (sortedCounts[0].type === "oral") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s sucked something off `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
-				}
-			} else if (sortedCounts[0].type === "vaginal") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${his} pussy has been fucked `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
-				}
-			} else if (sortedCounts[0].type === "anal") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s been buttfucked `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
-				}
-			} else if (sortedCounts[0].type === "mammary") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s put ${his} tits to work `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
-				}
-			} else if (sortedCounts[0].type === "penetrative") {
-				if (((weeksOwned * 112) / oral) < 4) {
-					r += `Remarkably, this means that ${he}'s pounded a hole `;
-					if (((weeksOwned * 112) / oral) < 1) {
-						r += `more than once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 1.5) {
-						r += `about once every hour `;
-					} else if (((weeksOwned * 112) / oral) < 2.5) {
-						r += `about once every two hours `;
-					} else if (((weeksOwned * 112) / oral) < 3.5) {
-						r += `about once every three hours `;
-					} else {
-						r += `about once every four hours `;
-					}
-					r += ` ${he}'s spent awake. `;
-				}
-			}
+			return r;
 		}
 
-		r += App.Desc.eyes(child);
+		tats.stamp = stamp;
 
-		if (child.fetish === "mindbroken") {
-			r += `However, <span class="coral">${his} mind is fundamentally broken;</span> everything ${he} experiences will quickly be forgotten. `;
-		}
+		function vagina(child) {
+			let
+				r = ``;
 
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} is still <span class="red">arrogant</span> at heart, but does ${his} best to hide it out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} is <span class="red">arrogant</span> and seems to think slavery beneath ${him}. `;
-				} else if (child.devotion <= 20) {
-					r += `Despite being well broken, ${he} seems to retain hints of <span class="red">arrogance.</span> `;
-				} else {
-					r += `${He} is <span class="red">bitchy</span> and insults you every chance ${he} gets. `;
-				}
-				break;
-			case "bitchy":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} is still <span class="red">bitchy</span> at times, but does ${his} best to keep quiet out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} is <span class="red">bitchy</span> and constantly tries to get a word in edgewise. `;
-				} else if (child.devotion <= 20) {
-					r += `Since ${he} is well broken, ${he} tries to confine ${his} <span class="red">bitchy</span> remarks to your other slaves. `;
-				} else {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and resists it as best ${he} can. `;
-				}
-				break;
-			case "liberated":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but usually keeps quiet out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and rarely misses a chance to complain about it. `;
-				} else if (child.devotion <= 20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but has learned to keep it to ${himself}. `;
-				} else {
-					r += `${He} is <span class="red">devoutly religious,</span> `;
+			if (child.vaginaTat !== 0) {
+				switch (child.vaginaTat) {
+					case "tribal patterns":
+						r += `${His} abdomen is tattooed with tribal patterns that draw the eye down toward ${his} ${child.dick ? `cock` : child.vagina === -1 ? `featureless crotch` : `vagina`}. `;
+						break;
+					case "flowers":
+						r += `${His} abdomen bears a tasteful tattoo of a ${child.dick ? `lily with a large stamen` : `blooming flower`}. `;
+						break;
+					case "counting":
+						if (child.counter.vaginal === 0) {
+							r += `${His} abdomen reads 'count begins other side, sorry.' `;
+						} else if (child.counter.vaginal < 500) {
+							r += `Tiny dick symbols are tattooed all over ${his} abdomen, one for every time ${he}'s been fucked. `;
+						} else {
+							r += `Tiny dick symbols are tattooed all over ${his} abdomen, one for every time ${he}'s been fucked. There are so many that they spread up to ${his} breasts and around ${his} sides. `;
+						}
+						break;
+					case "advertisements":
+						r += `${His} abdomen reads ${child.vagina < 0 ? `'Rear Entrance Other Side.'` : `'Insert Cock' with an arrow pointing downward.`} `;
+						break;
+					case "rude words":
+						r += `${His} abdomen reads ${child.vagina < 0 ? `'Useless, Rape Ass Instead' with an arrow pointing downward` : `'Fucktoy'`}. `;
+						break;
+					case "degradation":
+						r += `${His} abdomen is tattooed with ${child.dick ? `a downward-pointing arrow which reads 'Bounces When Buttfucked.'` : `gothic script that reads '${PC.dick ? PC.vagina ? `Futa` : `Cock` : `Cunt`} Pleaser.'`} `;
+						break;
+					case "Asian art":
+						r += `${He} has formal Asian characters tattooed across ${his} abdomen. To those who do not know the language, they look elegant, but roughly translated, they read `;
+						if (child.dick > 0 && canAchieveErection(child)) {
+							r += `'dick girl slut.' `;
+						} else if (child.dick > 0) {
+							r += `'limp dick slut.' `;
+						} else if (child.pregKnown && child.bellyPreg >= 100) {
+							r += `'pregnant cow.' `;
+						} else if (child.physicalAge < 13) {
+							r += `'horny little bitch.' `;
+						} else {
+							r += `'sex slave.' `;
+						}
+						break;
+					case "scenes":
+						r += `${His} abdomen is tattooed with lewd scenes. It entices with a depiction of ${child.dick ? child.balls ? `sodomy of a shemale` : `sodomy of a gelding` : child.vagina === -1 ? `sodomy of a null` : `loving intercourse`}. `;
+						break;
+					case "bovine patterns":
+						r += `${His} abdomen is tattooed in a Holstein cow pattern. `;
+						break;
+					case "sacrilege":
+						r += `${His} abdomen is tattooed with a variety of heretical symbols. `;
+						break;
+					case "sacrament":
+						r += `${His} abdomen is tattooed with a variety of religious symbols. `;
+						break;
+					case "possessive":
+						r += `${His} abdomen is tattooed with `;
+						if (child.dick > 0 && canAchieveErection(child)) {
+							r += `'Dick girl slave `;
+						} else if (child.dick > 0) {
+							r += `'Limp dick slave `;
+						} else if (child.counter.births > 5) {
+							r += `'Breeder slave `;
+						} else if (child.actualAge < 13) {
+							r += `'loli slave `;	// TODO: not sure about this
+						} else {
+							r += `'Sex slave `;
+						}
+						r += `of ${WrittenMaster(child)} ${PC.slaveName}.' `;
+						break;
+					case "paternalist":
+						r += `${His} abdomen is tattooed with a downward-pointing arrow which reads 'Let's come together.' `;
+						break;
+					default:
+						r += `${child.vaginaTat}`;
+						break;
 				}
-				break;
-			case "devout":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `and uses ${his} faith as a wellspring of resistance. `;
-				} else if (child.devotion < -20) {
-					r += `and uses ${his} faith as a place of refuge. `;
-				} else if (child.devotion <= 20) {
-					r += `and uses ${his} faith as a private place within ${himself}. `;
-				} else {
-					r += `but has learned to keep ${his} faith private. `;
+			}
+
+			return r;
+		}
+
+		tats.vagina = vagina;
+	}
+
+	function upperFace(child) {
+		let r = ``;
+
+		if (!child.fuckdoll) {
+			if (hasAnyProstheticEyes(child)) {
+				r += `${He} has ${App.Desc.eyesType(slave)}. `;
+			}
+
+			if (child.eyewear === "corrective glasses" || child.eyewear === "blurring glasses" || child.eyewear === "glasses") {
+				r += `${He}'s wearing a pair of `;
+				switch (child.clothes) {
+					case "a ball gown":
+					case "a slave gown":
+						r += `nice frameless glasses,`;
+						break;
+					case "a schoolgirl outfit":
+						r += `horn-rimmed glasses to improve ${his} schoolgirl look,`;
+						break;
+					default:
+						r += `simple wire-frame glasses,`;
+						break;
 				}
-				break;
-			case "odd":
-				r += `${He} behaves <span class="red">oddly,</span> saying and doing random things. `;
-				break;
-			case "hates men":
-				r += `${He} <span class="red">strongly dislikes</span> being around `;
-				if (child.attrXY >= 85 && child.energy >= 40) {
-					r += `men; since ${he} loves the dick, ${he}'s forced to put up with them. `;
-				} else if (child.attrXY >= 65 && child.energy >= 40) {
-					r += `men; since ${he} likes the dick, ${he} reluctantly puts up with them. `;
+
+				if (getWorstVision(child) >= 2) {
+					if (child.eyewear === "blurring glasses") {
+						r += ` which are designed to blur ${his} vision, making ${him} clumsy. `;
+					} else {
+						r += ` which are just for show. `;
+					}
+				} else if (getWorstVision(child) >= 1) {
+					if (child.eyewear === "corrective glasses") {
+						r += ` which correct ${his} vision. `;
+					} else {
+						r += ` which do nothing to help ${his} <span class="yellow">nearsightedness</span> and consequent clumsiness. `;
+					}
 				} else {
-					r += `men. `;
+					r += ` which, since ${he} is <span class="red">blind,</span> are just for show. ${He} moves carefully as to not bump into things. `;
 				}
-				break;
-			case "hates women":
-				r += `${He} <span class="red">strongly dislikes</span> being around `;
-				if (child.attrXX >= 85 && child.energy >= 40) {
-					r += `women; since ${he} loves pussy, ${he}'s forced to put up with them. `;
-				} else if (child.attrXX >= 65 && child.energy >= 40) {
-					r += `women; since ${he} likes pussy, ${he} reluctantly puts up with them. `;
+			} else {
+				if (getWorstVision(child) >= 2) {
+					if (child.eyewear === "blurring contacts") {
+						r += `${He}'s wearing contact lenses designed to blur ${his} vision, making ${him} clumsy. `;
+					}
+				} else if (getWorstVision(child) >= 2) {
+					if (child.eyewear === "corrective contacts") {
+						r += `${He}'s wearing contact lenses to correct ${his} <span class="yellow">nearsightedness.</span> `;
+					} else {
+						r += `${He}'s <span class="yellow">nearsighted,</span> and a bit clumsy as a result. `;
+					}
 				} else {
-					r += `women. `;
+					r += `${He} is <span class="red">blind,</span> and moves very carefully as a result. `;
 				}
-				break;
-			case "anorexic":
-				r += `${He} suffers from <span class="red">anorexia.</span> `;
-				break;
-			case "gluttonous":
-				r += `${He} <span class="red">tends to overeat</span> whenever ${he} can, reacting to the rigors of sexual slavery with overeating. `;
-				break;
-		}
+			}
 
-		switch (child.behavioralQuirk) {
-			case "confident":
-				r += `${He}'s <span class="green">confident,</span> and believes that ${he} has something of value to offer, even as a child. `;
-				break;
-			case "cutting":
-				r += `${He} often has a witty or <span class="green">cutting</span> remark ready, but knows when to keep them to ${himself}. `;
-				break;
-			case "funny":
-				r += `${He}'s <span class="green">funny,</span> often providing a little comic relief. `;
-				break;
-			case "adores men":
-				r += `${He} <span class="green">adores women,</span> and loves spending time with them. `;
-				break;
-			case "adores women":
-				r += `${He} <span class="green">adores men,</span> and loves spending time with them. `;
-				break;
-			case "fitness":
-				r += `${He}'s a <span class="green">fitness fanatic,</span> and almost gets off to a hard workout. `;
-				break;
-			case "insecure":
-				r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `;
-				break;
-			case "sinful":
-				if (arcology.FSChattelRelionist === "unset") {
-					r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `;
-				} else {
-					r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `;
+			if (child.earwear === "hearing aids" || child.earwear === "muffling ear plugs" || child.earwear === "deafening ear plugs") {
+				r += `In ${his} ears, ${he} wears `;
+				if (child.earwear === "hearing aids") {
+					r += `a pair of hearing aids, `;
+					if (child.hears > -1) {
+						r += `which do little to correct ${his} already adequate hearing. `;
+					} else if (child.hears === -1) {
+						r += `which are used to correct ${his} <span class="yellow">hearing impairment.</span> `;
+					} else {
+						r += `which, due to ${his} <span class="red">deafness,</span> are useless. `;
+					}
+				} else if (child.earwear === "muffling ear plugs") {
+					r += `a pair of small foam ear plugs, `;
+					if (child.hears > -1) {
+						r += `which noticeably <span class="yellow">muffle ${his} hearing.</span> `;
+					} else if (child.hears === -1) {
+						r += `which are pointless, as ${he} is already <span class="yellow">hard of hearing.</span> `;
+					} else {
+						r += `which are pointless, as ${he} is totally <span class="red">deaf.</span> `;
+					}
+				} else if (child.earwear === "deafening ear plugs") {
+					r += `a pair of large silicone ear plugs, `;
+					if (child.hears > -1) {
+						r += `which <span class="red">nullify ${his} sense of hearing.</span> `;
+					} else if (child.hears === -1) {
+						r += `which impair ${his} hearing to the point of <span class="red">deafness.</span> `;
+					} else {
+						r += `which are pointless, as ${he} is already <span class="red">deaf.</span> `;
+					}
 				}
-				break;
-			case "advocate":
-				r += `${He}'s an <span class="green">advocate</span> for slavery, and can articulate what it's done for ${him}. `;
-				break;
+			} else {
+				if (child.hears === -1) {
+					r += `${He}'s <span class="yellow">hard of hearing,</span> and a bit nervous as a result. `;
+				} else if (child.hears < -1) {
+					r += `${He} is <span class="red">deaf,</span> and overly paranoid as a result. `;
+				}
+			}
+		} else {
+			r += `${His} face is featurelessly obscured by the Fuckdoll suit from the top of ${his} head down to ${his} face hole. `;
 		}
 
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `${He} <span class="red">hates</span> oral sex and tries to avoid it. `;
-				break;
-			case "hates anal":
-				r += `${He} <span class="red">hates</span> anal sex and tries to avoid it. `;
-				break;
-			case "hates penetration":
-				r += `${He} <span class="red">hates</span> penetration and tries to avoid it. `;
-				break;
-			case "repressed":
-				r += `${He} is <span class="red">sexually repressed,</span> retaining a fundamental distaste for sex from ${his} upbringing. `;
-				break;
-			case "idealistic":
-				r += `${He} is <span class="red">sexually idealistic,</span> retaining a belief that sex should be based on love and consent. `;
-				break;
-			case "shamefast":
-				r += `${He} is <span class="red">shamefast,</span> suffering crippling anxiety when naked. `;
-				break;
-			case "apathetic":
-				r += `${He} is <span class="red">sexually apathetic,</span> often slipping into inertness during sex. `;
-				break;
-			case "crude":
-				r += `${He} is <span class="red">sexually crude,</span> and has little sense of what partners find disgusting during sex. `;
-				break;
-			case "judgemental":
-				r += `${He} is <span class="red">sexually judgemental,</span> and often denigrates ${his} sexual partners' performance. `;
-				break;
-			case "cum addict":
-				r += `${He}'s a <span class="yellow">cum addict:</span> ${he} has a deep psychological addiction to ${PC.dick ? `semen` : PC.dick && PC.vagina !== 0 ? ` and ` : PC.vagina !== 0 ? `pussyjuice` : ``} and becomes anxious if ${he} goes for a few hours without drinking any. `;
-				break;
-			case "anal addict":
-				r += `${He}'s an <span class="yellow">anal addict:</span> ${he} has a deep psychological need to be fucked in the ass and becomes anxious if ${he} goes for a few hours without anal. `;
-				break;
-			case "attention whore":
-				r += `${He}'s an <span class="yellow">attention whore:</span> shocking and titillating spectators is more important to ${him} than the actual pleasure of sex. `;
-				break;
-			case "breast growth":
-				r += `${He} has a <span class="yellow">breast growth obsession:</span> ${he}'s nearly incapable of believing that ${his} breasts are big enough. `;
-				break;
-			case "abusive":
-				r += `${He}'s sexually <span class="yellow">abusive:</span> ${he} prefers taking sexual pleasure by force to having it offered to ${him}. `;
-				break;
-			case "malicious":
-				r += `${He}'s sexually <span class="yellow">malicious:</span> ${he} gets off on others' anguish. `;
-				break;
-			case "self hating":
-				r += `${He}'s filled with <span class="yellow">self hatred,</span> and is disturbingly willing to comply with things that might hurt ${him}. `;
-				break;
-			case "neglectful":
-				r += `${He}'s sexually <span class="yellow">self neglectful,</span> and often shows no interest in getting off ${himself}. `;
-				break;
-			case "breeder":
-				r += `${He}'s <span class="yellow">obsessed with being bred</span> to the point of fetishizing pregnancy itself as much as any act that leads to it. `;
-				break;
-		}
+		return r;
+	}
 
-		switch (child.sexualQuirk) {
-			case "gagfuck queen":
-				r += `${He}'s a <span class="green">gagfuck queen:</span> ${he}'s able to safely take a rough facefuck. `;
-				break;
-			case "painal queen":
-				r += `${He}'s a <span class="green">painal queen:</span> ${he} knows exactly how much ${he} can take without getting hurt. `;
-				break;
-			case "strugglefuck queen":
-				r += `${He}'s a <span class="green">strugglefuck queen:</span> ${he} can gauge exactly how much resistance ${his} partners want. `;
-				break;
-			case "tease":
-				r += `${He}'s a <span class="green">tease,</span> and often displays a little flash of ${himself} followed by a blush. `;
-				break;
-			case "romantic":
-				r += `${He}'s a <span class="green">romantic,</span> and persists in innocent pleasure in the closeness of sex. `;
-				break;
-			case "perverted":
-				r += `${He}'s <span class="green">perverted,</span> and enjoys breaking sexual boundaries. `;
-				break;
-			case "caring":
-				r += `${He}'s <span class="green">caring,</span> and enjoys bringing partners pleasure more than getting off ${himself}. `;
-				break;
-			case "unflinching":
-				r += `${He}'s <span class="green">unflinching,</span> willing to do anything, even by the standards of sex slaves. `;
-				break;
-			case "size queen":
-				r += `${He}'s <span class="green">a size queen;</span> preferring big cock is almost ${his} trademark. `;
-				break;
-		}
+	function vagina(child) {
+		let
+			r = ``,
+			pubertyAge = Math.min(child.pubertyAgeXX, child.pubertyAgeXY);
 
-		if (child.fetishKnown) {
-			switch (child.fetish) {
-				case "submissive":
-					if (child.sexualFlaw === "apathetic") {
-						r += `This sexual apathy plays into ${his} preference for <span class="lightcoral">submission.</span> `;
-					} else if (child.behavioralFlaw === "arrogant") {
-						r += `${His} arrogance is really just a thin shell to protect ${his} true need to <span class="lightcoral">submit.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s an extreme <span class="lightcoral">submissive,</span> and relishes the strictures of slavery. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He}'s a confirmed <span class="lightcoral">submissive,</span> and enjoys the strictures of slavery. `;
+		if (child.dick > 0) {
+			if (child.vagina > -1) {
+				r += `${His} `;
+				if (child.genes === "XX") {
+					r += `beautifully natural `;
+				} else if (child.ovaries === 1) {
+					r += `finely crafted `;
+				} else {
+					r += `artificial `;
+				}
+				r += `vagina is located beneath the base of ${his} penis, `;
+				if (child.scrotum > 3 && child.balls <= child.scrotum) {
+					r += `though it is almost completely hidden by ${his} hanging ballsack. `;
+				} else if (child.scrotum > 1 && child.balls > 0) {
+					r += `its upper part concealed by ${his} balls. `;
+				} else if (canAchieveErection(child)) {
+					r += `and merges seamlessly into ${his} shaft. `;
+				} else {
+					if (child.dick > 3) {
+						r += `though it is almost completely hidden by ${his} soft cockmeat. `;
 					} else {
-						r += `${He} has <span class="lightcoral">submissive</span> tendencies, and likes the strictures of slavery. `;
+						r += `which acts as a soft little dickclit for it. `;
 					}
+				}
+
+				if (child.clit === 0) {
+					r += `The base of ${his} cock is located where the clitoris would be on a normal woman. `;
+				}
+			}
+		}
+
+		if (child.vagina > -1) {
+			switch (child.vagina) {
+				case 10:
+					r += `${His} pussy has been completely ruined from hundreds of births. One could fit their arm into it with minimal effort and ${he} can barely get off from vaginal sex now. ${His} pussy is abyssal, `;
 					break;
-				case "cumslut":
-					if (child.sexualFlaw === "hates oral") {
-						r += `${He}'s torn between ${his} <span class="lightcoral">love of semen</span> and ${his} dislike of having cocks in ${his} mouth. `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a <span class="lightcoral">cumslut,</span> and loves giving blowjobs and receiving facials. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">prefers giving oral,</span> and enjoys sucking dick and receiving facials. `;
+				case 3:
+					r += `${His} pussy is loose, `;
+					break;
+				case 2:
+					r += `${His} pussy is reasonably tight, `;
+					break;
+				case 1:
+					r += `${His} pussy is tight and appealing, `;
+					break;
+				case 0:
+					r += `${He} is a <span class="lime">virgin.</span> ${His} pussy is fresh, `;
+					break;
+				default:
+					r += `${His} pussy is utterly cavernous, `;
+					break;
+			}
+
+			if (child.labia === 0) {
+				r += ``;
+			} else if (child.labia === 1) {
+				r += ``;
+			} else if (child.labia === 2) {
+				r += ``;
+			} else {
+				r += ``;
+			}
+
+			if (V.seeRace) {
+				switch (child.race) {
+					case "white":
+						r += `pink pussylips. `;
+						break;
+					case "asian":
+						r += `dark ${child.race} pussylips. `;
+						break;
+					case "middle eastern":
+						r += `dark ${child.race} pussylips. `;
+						break;
+					case "latina":
+						r += `dark ${child.race} pussylips. `;
+						break;
+					case "black":
+						r += `dark ${child.race} pussylips. `;
+						break;
+					default:
+						r += `${child.skin} pussylips. `;
+						break;
+				}
+			} else {
+				r += `${child.skin} pussylips. `;
+			}
+
+			if (child.vagina > -1) {
+				if (child.vaginaLube === 0) {
+					if (child.vagina > 0 && !child.chastityVagina) {
+						r += `${He} produces very little natural wetness, so ${he} is required to keep ${himself} artificially lubricated for anyone who wishes to use ${his} cunt. `;
 					} else {
-						r += `${He} has an <span class="lightcoral">oral fixation,</span> and likes giving blowjobs and receiving facials. `;
+						r += `${He} produces very little natural wetness. `;
 					}
-					break;
-				case "humiliation":
-					if (child.behavioralFlaw === "bitchy") {
-						r += `${His} bitchiness is really just an expression of ${his} deep need to be <span class="lightcoral">humiliated</span> ${himself}. `;
-					} else if (child.sexualFlaw === "shamefast") {
-						r += `${His} shame is genuine, and it is with real self-loathing that ${he} <span class="lightcoral">gets off on humiliation.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a slut for <span class="lightcoral">humiliation,</span> and gets off on having others see ${his} enslavement. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} enjoys <span class="lightcoral">humiliating</span> sex. `;
+
+					if (child.prostate !== 0) {
+						if (child.dick === 0) {
+							r += `In stark contrast, however, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, so despite ${his} dryness, ${he} squirts ${child.balls ? `semen` : `fluid`} when ${he} orgasms. `;
+							if (child.prostate > 2) {
+								r += `With the implant embedded in it, that squirt is more like a blast; ${he} will soak ${himself} and anyone near ${him}. `;
+							}
+						}
+					}
+				} else if (child.vaginaLube < 2) {
+					if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiacs") {
+						r += `The aphrodisiacs have them${child.aphrodisiacs > 1 || child.inflationType === "aphrodisiac" && child.inflation >= 2 ? ` sopping` : ``} wet. `;
+					} else if (child.energy > 95) {
+						r += `As a nympho, ${he}'s almost constantly wet. `;
+					} else if (child.fetishStrength > 60 && child.fetishKnown) {
+						r += `Judging by how wet ${he} is, ${he}'s probably fantasizing about`;
+
+						switch (child.fetish) {
+							case "buttslut":
+								r += `being buttfucked. `;
+								break;
+							case "cumslut":
+								r += `being facefucked. `;
+								break;
+							case "humiliation":
+								r += `being humiliated. `;
+								break;
+							case "submissive":
+								r += `submission. `;
+								break;
+							case "dom":
+								r += `dominating someone. `;
+								break;
+							case "sadist":
+								r += `hurting someone. `;
+								break;
+							case "masochist":
+								r += `pain. `;
+								break;
+							case "pregnancy":
+								r += `getting pregnant. `;
+								break;
+							case "boobs":
+								r += `boobs. `;
+								break;
+							default:
+								r += `getting fucked. `;
+								break;
+						}
+					} else if (child.devotion > 50) {
+						r += `As a devoted sex slave, ${he} has no trouble keeping ${himself} wet for ${his} ${WrittenMaster(child)}. `;
+					} else if (child.devotion > 20) {
+						r += `As an obedient sex slave, ${he} does ${his} best to keep ${himself} wet for ${his} ${WrittenMaster(child)}. `;
+					}
+
+					if (child.prostate !== 0) {
+						if (child.dick === 0) {
+							r += `Bizarrely, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, ${child.balls ? `which in combination with ${his} testicles make ${his} squirt copious amounts of fluids and semen with each orgasm` : `so ${he} squirts copiously when ${he} orgasms`}. `;
+							if (child.prostate > 2) {
+								r += `With the implant embedded in it; that gush is more like a flood. Changes of clothes are a must with ${him}, as ${he} can and will soak both you, ${himself} and what ${he} is getting fucked over. `;
+							}
+						}
+					}
+				} else {
+					if (child.aphrodisiacs > 0 || (V.saleDescription && V.gingering === "vasodilator") || child.inflationType === "aphrodisiac") {
+						r += `The combination of the aphrodisiacs and ${his} natural tendency to produce a lot of female lubricant is having a drastic effect. ${His} cunt is absolutely beribboned with femcum, and ${he} smells strongly of wet, clean pussy. `;
+					} else if (child.energy > 95) {
+						r += `${He} has a naturally wet cunt, and in combination with ${his} nymphomania, it's soaking. ${He} smells of good clean female arousal. `;
+					} else if (child.fetishStrength > 60 && child.fetishKnown) {
+						r += `${His} naturally wet cunt is almost dripping female lubricant, and ${he} smells of good clean female arousal. ${He}'s probably fantasizing about `;
+
+						switch (child.fetish) {
+							case "buttslut":
+								r += `being buttfucked. `;
+								break;
+							case "cumslut":
+								r += `being facefucked. `;
+								break;
+							case "humiliation":
+								r += `being humiliated. `;
+								break;
+							case "submissive":
+								r += `submission. `;
+								break;
+							case "dom":
+								r += `dominating someone. `;
+								break;
+							case "sadist":
+								r += `hurting someone. `;
+								break;
+							case "masochist":
+								r += `pain. `;
+								break;
+							case "pregnancy":
+								if (child.pregKnown) {
+									r += `growing rounder. `;
+								} else {
+									r += `getting pregnant. `;
+								}
+								break;
+							case "boobs":
+								r += `boobs. `;
+								break;
+							default:
+								r += `getting fucked. `;
+								break;
+						}
+					} else if (child.devotion > 50) {
+						r += `${His} cunt is almost always soaking wet, but being near you has ${his} almost dripping. `;
+					} else if (child.devotion > 20) {
+						r += `${His} cunt is almost always soaking wet, and being near you isn't affecting that. `;
 					} else {
-						r += `${He} likes <span class="lightcoral">embarrassing</span> sex. `;
+						r += `${His} cunt is almost always soaking wet, regardless of ${his} feelings. `;
+					}
+
+					if (child.prostate !== 0) {
+						if (child.dick === 0) {
+							r += `Bizarrely, ${he}'s been given a functional prostate gland. It's attached to ${his} urethra, of course, ${child.balls ? `which in combination with ${his} testicles make ${his} squirt unreasonable volume of fluids and semen with each orgasm` : `meaning that when ${he} orgasms, ${he} squirts an unreasonable volume of fluid`}. `;
+							if (child.prostate > 2) {
+								r += `With the implant embedded in it; that gush is insane. Everything around ${him} is at risk of being splashed. Changes of clothes are a must with ${him}, as are supplies to mop up afterwards. `;
+							}
+						}
 					}
+				}
+			}
+
+			r += accessories.vaginal(child);
+
+			if (child.ovaImplant !== 0) {
+				switch (child.ovaImplant) {
+					case "fertility":
+						r += `${His} ovaries have a pair of implants attached to them to encourage ovulation${child.preg < -1 ? `, not that it does ${him} any good` : ``}. `;
+						break;
+					case "sympathy":
+						r += `${His} ovaries have a pair of linked implants attached to them so that when one releases an egg the other does so as well. `;
+						break;
+					case "asexual":
+						r += `One of ${his} ovaries has been replaced with a fabricated sperm sack designed to fertilize any eggs ${he} makes. `;
+						break;
+				}
+			}
+
+			if (!child.dick && !child.balls && child.vagina < 0 && arcology.FSRestart > 60) {
+				r += `Society looks fondly on ${his} complete inability to reproduce. `;
+			}
+
+			switch (child.pubicHStyle) {
+				case "hairless":
+					r += `${He}'s naturally smooth and hairless. `;
+					break;
+				case "bald":
+					r += `${He} is no longer able to grow pubic hair leaving ${him} hairless and smooth. `;
 					break;
-				case "buttslut":
-					if (child.sexualFlaw === "hates anal") {
-						r += `${His} hatred is just pretense to cover ${his} shame about how much ${he} really loves getting <span class="lightcoral">fucked in the butt.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a <span class="lightcoral">buttslut,</span> happy to have anyone put anything up ${his} ass. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">prefers anal.</span> `;
-					} else {
-						r += `${He} has an <span class="lightcoral">anal fixation.</span> `;
-					}
+				case "waxed":
+					r += `${He}'s waxed and smooth. `;
 					break;
-				case "boobs":
-					if (child.fetishStrength > 95) {
-						r += `${He} <span class="lightcoral">prefers mammary intercourse</span> to any other kind of sex, and readily climaxes to nipple stimulation. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} enjoys <span class="lightcoral">breast play,</span> and is rapidly aroused by nipple stimulation. `;
-					} else {
-						r += `${He} <span class="lightcoral">really likes boobs,</span> ${hers} and others. `;
-					}
+				case "in a strip":
+					r += `${His} ${child.pubicHColor} pubic hair is waxed into a narrow strip above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
 					break;
-				case "pregnancy":
-					if (child.fetishStrength > 95) {
-						r += `${He} has a <span class="lightcoral">pregnancy fetish,</span> and finds anything related to reproduction sexy. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} has an <span class="lightcoral">impregnation fantasy,</span> and enjoys bareback sex. `;
-					} else {
-						r += `${He} has a recurring <span class="lightcoral">impregnation fantasy.</span> `;
-					}
+				case "neat":
+					r += `${His} ${child.pubicHColor} pubic hair is waxed into a neat patch above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
 					break;
-				case "dom":
-					if (child.sexualFlaw === "apathetic") {
-						r += `${He} is at war with ${himself}, since ${his} habitual apathy during sex barely masks a desire to <span class="lightcoral">dominate.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He} is a <span class="lightcoral">complete dom;</span> with other slaves this is expressed as a strong preference to top, and with ${his} betters ${he}'s an almost competitive lover. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} likes to take an active, powerful role in sex; with other slaves this is expressed as <span class="lightcoral">dominance,</span> and with ${his} betters ${he}'s a very energetic lover. `;
-					} else {
-						r += `${He} prefers to take a <span class="lightcoral">dominant</span> sexual role. `;
-					}
+				case "bushy in the front and neat in the rear":
+					r += `${His} ${child.pubicHColor} pubic hair forms a natural bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
 					break;
-				case "sadist":
-					if (child.fetishStrength > 95) {
-						r += `${He} is an <span class="lightcoral">aggressive sadist;</span> ${he}'s constantly plotting to control, abuse, and hurt other slaves. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} has <span class="lightcoral">sadistic tendencies;</span> ${he} enjoys watching other slaves in pain, but truly loves causing pain ${himself}. `;
-					} else {
-						r += `${He} gets off on <span class="lightcoral">the suffering of others;</span> ${he} enjoys watching other slaves in pain. `;
-					}
+				case "bushy":
+					r += `${His} ${child.pubicHColor} pubic hair forms a natural bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
 					break;
-				case "masochist":
-					if (child.fetishStrength > 95) {
-						r += `${He} is a <span class="lightcoral">pain slut.</span> `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">gets off on pain,</span> showing strong masochistic tendencies. `;
-					} else {
-						r += `${He} <span class="lightcoral">doesn't mind pain,</span> and shows some masochistic tendencies. `;
-					}
+				case "very bushy":
+					r += `${His} ${child.pubicHColor} pubic hair forms a dense bush above ${his} ${child.dick ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`} that trails up to ${his} navel. `;
 					break;
 				default:
-					r += `${His} sexual tastes are <span class="pink">quite normal.</span> `;
-					break;
+					if (child.physicalAge < pubertyAge - 2) {
+						r += `${He} is too sexually immature to have pubic hair. `;
+					} else if (child.physicalAge < pubertyAge - 1) {
+						r += `${He} has a few wisps of pubic hair. `;
+					} else if (child.physicalAge < pubertyAge) {
+						r += `${He} is on the verge of puberty and has a small patch of ${child.pubicHColor} pubic hair above ${his} ${child.dick > 0 ? `cock` : child.vagina === -1 ? `smoothness` : `pussy`}. `;
+					}
 			}
-		} else {
-			r += `${His} fetishes, if any, are not known to you. `;
-		}
 
-		if (child.attrKnown) {
-			if (child.energy > 95) {
-				r += `${He}'s a <span class="green">nymphomaniac.</span> `;
-			} else if (child.energy > 80) {
-				r += `${He}'s a <span class="green">sex addict.</span> `;
-			} else if (child.energy > 60) {
-				r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
-			} else if (child.energy > 40) {
-				r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
-			} else if (child.energy > 20) {
-				r += `${He} has a <span class="red">weak sex drive.</span> `;
-			} else {
-				r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
-			}
+			r += App.Desc.brand(child, "pubic mound");
 
-			if (child.attrXY <= 5) {
-				if (child.attrXX <= 5) {
-					r += `${He}'s a <span class="green">nymphomaniac.</span> `;
-				} else {
-					r += `${He}'s a <span class="green">sex addict.</span> `;
-					if (child.attrXX <= 15) {
-						r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
-					} else if (child.attrXX <= 35) {
-						r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
-					} else if (child.attrXX <= 65) {
-						r += `${He} has a <span class="red">weak sex drive.</span> `;
-					} else if (child.attrXX <= 85) {
-						r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
-					} else if (child.attrXX <= 95) {
-						r += `${He} <span class="red">finds both men's and women's intimate areas quite repulsive,</span> an unfortunate state of affairs! `;
-					} else {
-						r += `${He} <span class="red">finds men sexually disgusting,</span> `;
-					}
-				}
-			} else if (child.attrXY <= 15) {
-				r += `${He} <span class="red">considers men's bodies a turnoff,</span> `;
-				if (child.attrXX <= 5) {
-					r += `and is <span class="red">actually disgusted by women's.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `and <span class="red">feels the same about women's.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `and is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and ${he} is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 35) {
-				r += `${He} is <span class="red">finds most men unattractive,</span> `;
-				if (child.attrXX <= 5) {
-					r += `and is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `and is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `and is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and ${he} is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 65) {
-				r += `${He}'s indifferent to sex with men, `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">actually unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and feels the same about women, too. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 85) {
-				r += `${He} <span class="green">finds men attractive,</span> `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `but is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `and <span class="green">likes women too.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `but <span class="green">likes women even more.</span> `;
-				} else {
-					r += `but is really <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 95) {
-				r += `${He} <span class="green">is aroused by most men,</span> `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `but is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `and <span class="green">likes women too.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `and <span class="green">thinks most women are hot,</span> too. `;
-				} else {
-					r += `but is most <span class="green">passionate about women.</span> `;
-				}
-			} else {
-				r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
-				if (child.attrXX > 95) {
-					r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
-				} else {
-					r += `${He}'s <span class="green">passionate about men,</span> `;
-					if (child.attrXX <= 5) {
-						r += `${He}'s <span class="green">passionate about men,</span> `;
-					} else if (child.attrXX <= 15) {
-						r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-					} else if (child.attrXX <= 35) {
-						r += `but is <span class="red">turned off by women.</span> `;
-					} else if (child.attrXX <= 65) {
-						r += `but is <span class="red">unenthusiastic about women.</span> `;
-					} else if (child.attrXX <= 85) {
-						r += `but is indifferent to women. `;
-					} else if (child.attrXX <= 95) {
-						r += `but also <span class="green">likes women,</span> too. `;
+			if (!child.dick) {
+				if (child.clit > 0) {
+					if (child.foreskin === 0) {
+						if (child.clit === 1) {
+							if (child.devotion > 50) {
+								r += `${His} clit is quite large and visibly hard. `;
+							} else {
+								r += `${His} clit is quite large. `;
+							}
+							r += `${His} lack of hood makes it even more prominent. `;
+						} else if (child.clit === 2) {
+							if (child.devotion > 50) {
+								r += `${His} clit is huge and visibly erect. `;
+							} else {
+								r += `${His} clit is huge. `;
+							}
+							r += `Lack of hood combined with its size means ${he} can't wear any clothes without being constantly stimulated. `;
+						} else if (child.clit === 3) {
+							if (child.devotion > 50) {
+								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
+							} else {
+								r += `${His} clit is enormous, almost a pseudophallus. `;
+							}
+						} else if (child.clit === 4) {
+							if (child.devotion > 50) {
+								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
+							} else {
+								r += `${His} clit has reached the size of an average penis. `;
+							}
+						} else {
+							if (child.devotion > 50) {
+								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
+							} else {
+								r += `${His} clit is massive, having reached the size of a large penis. `;
+							}
+						}
+					} else if (child.foreskin === 1) {
+						if (child.clit === 1) {
+							if (child.devotion > 50) {
+								r += `${His} clit is quite large and visibly hard. `;
+							} else {
+								r += `${His} clit is quite large. `;
+							}
+							r += `${His} clitoral hood is stretched thin trying to cover it. `;
+						} else if (child.clit === 2) {
+							if (child.devotion > 50) {
+								r += `${His} clit is huge and visibly erect. `;
+							} else {
+								r += `${His} clit is huge. `;
+							}
+							r += `${His} small hood is no longer able to cover it completely and large part of ${his} clitoris is always exposed. `;
+						} else if (child.clit === 3) {
+							if (child.devotion > 50) {
+								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
+							} else {
+								r += `${His} clit is enormous, almost a pseudophallus. `;
+							}
+							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
+						} else if (child.clit === 4) {
+							if (child.devotion > 50) {
+								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
+							} else {
+								r += `${His} clit has reached the size of an average penis. `;
+							}
+							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
+						}
+					} else if (child.foreskin === 2) {
+						if (child.clit === 1) {
+							if (child.devotion > 50) {
+								r += `${His} clit is quite large and visibly hard. `;
+							} else {
+								r += `${His} clit is quite large. `;
+							}
+							r += `It is completely covered by its hood. `;
+						} else if (child.clit === 2) {
+							if (child.devotion > 50) {
+								r += `${His} clit is huge and visibly erect. `;
+							} else {
+								r += `${His} clit is huge. `;
+							}
+							r += `Its hood is stretched thin trying to cover it. `;
+						} else if (child.clit === 3) {
+							if (child.devotion > 50) {
+								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
+							} else {
+								r += `${His} clit is enormous, almost a pseudophallus. `;
+							}
+							r += `It's large enough that the hood can cover only half of it. `;
+						} else if (child.clit === 4) {
+							if (child.devotion > 50) {
+								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
+							} else {
+								r += `${His} clit has reached the size of an average penis. `;
+							}
+							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
+						} else {
+							if (child.devotion > 50) {
+								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
+							} else {
+								r += `${His} clit is massive, having reached the size of a large penis. `;
+							}
+							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
+						}
+					} else if (child.foreskin === 3) {
+						if (child.clit === 1) {
+							if (child.devotion > 50) {
+								r += `${His} clit is quite large and visibly hard. `;
+							} else {
+								r += `${His} clit is quite large. `;
+							}
+							r += `The hood covering it is quite large making stimulation difficult. `;
+						} else if (child.clit === 2) {
+							if (child.devotion > 50) {
+								r += `${His} clit is huge and visibly erect. `;
+							} else {
+								r += `${His} clit is huge. `;
+							}
+							r += `${His} large hood completely covers it. `;
+						} else if (child.clit === 3) {
+							if (child.devotion > 50) {
+								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
+							} else {
+								r += `${His} clit is enormous, almost a pseudophallus. `;
+							}
+							r += `${His} large hood covers all but the tip of ${his} clit even when aroused. `;
+						} else if (child.clit === 4) {
+							if (child.devotion > 50) {
+								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
+							} else {
+								r += `${His} clit has reached the size of an average penis. `;
+							}
+							r += `Even ${his} large hood can't cover it, leaving over half of the clit exposed. `;
+						} else {
+							if (child.devotion > 50) {
+								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect since lack of erectile tissues means it can never become fully erect. `;
+							} else {
+								r += `${His} clit is massive, having reached the size of a large penis. `;
+							}
+							r += `${His} hood can no longer contain it and has slid back causing ${his} clitoris to be always exposed. `;
+						}
 					} else {
-						r += `but also <span class="green">thinks most women are hot,</span> too. `;
+						if (child.clit === 1) {
+							if (child.devotion > 50) {
+								r += `${His} clit is quite large and visibly hard. `;
+							} else {
+								r += `${His} clit is quite large. `;
+							}
+							r += `${His} large thick hood covering it makes any stimulation difficult. `;
+						} else if (child.clit === 2) {
+							if (child.devotion > 50) {
+								r += `${His} clit is huge and visibly erect. `;
+							} else {
+								r += `${His} clit is huge. `;
+							}
+							r += `${His} large thick hood covering it makes any stimulation difficult. `;
+						} else if (child.clit === 3) {
+							if (child.devotion > 50) {
+								r += `${His} clit is enormous, and since it's erect with arousal, it juts out proudly. `;
+							} else {
+								r += `${His} clit is enormous, almost a pseudophallus. `;
+							}
+							r += `Matching its size is the thick hood covering it. `;
+						} else if (child.clit === 4) {
+							if (child.devotion > 50) {
+								r += `${His} clit has reached the size of an average penis, it stands at attention but due to lack of erectile tissues it can't reach the same hardness a penis would. `;
+							} else {
+								r += `${His} clit has reached the size of an average penis. `;
+							}
+							r += `${His} large hood covering over half of it adds to its penis-like appearance. `;
+						} else {
+							if (child.devotion > 50) {
+								r += `${His} clit is massive, having reached the size of a large penis. It is semi-erect, since lack of erectile tissues means it can never reach full erection. `;
+							} else {
+								r += `${His} clit is massive, having reached the size of a large penis. `;
+							}
+							r += `Not even its large hood can contain it, leaving over half of it exposed. `;
+						}
 					}
 				}
 			}
-		} else {
-			r += `You do not understand ${his} sexuality very well. `;
-		}
-
-		if (!V.saleDescription && !V.eventDescription) {
-			if (canSee(child) && child.attrKnown) {
-				if (child.attrXX > 85 && PC.boobs >= 300) {
-					r += `${His} attraction to women is obvious: ${he} can't seem to stop staring at your breasts. `;
-				} else if (child.attrXY > 85 && PC.dick) {
-					r += `${His} attraction to men is obvious: ${he} can't seem to stop glancing down at your package. `;
-				} else if (child.attrXY > 85 && PC.boobs < 300 && PC.title === 1) {
-					r += `${His} attraction to men is obvious: ${he} can't seem to stop checking out your broad chest. `;
-				}
-			}
-		}
-
-		switch (child.behavioralFlaw) {
-			case "arrogant":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} is still <span class="red">arrogant</span> at heart, but does ${his} best to hide it out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} is <span class="red">arrogant</span> and seems to think slavery beneath ${him}. `;
-				} else if (child.devotion <= 20) {
-					r += `Despite being well broken, ${he} seems to retain hints of <span class="red">arrogance.</span> `;
-				} else {
-					r += `${He} is <span class="red">bitchy</span> and insults you every chance ${he} gets. `;
-				}
-				break;
-			case "bitchy":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} is still <span class="red">bitchy</span> at times, but does ${his} best to keep quiet out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} is <span class="red">bitchy</span> and constantly tries to get a word in edgewise. `;
-				} else if (child.devotion <= 20) {
-					r += `Since ${he} is well broken, ${he} tries to confine ${his} <span class="red">bitchy</span> remarks to your other slaves. `;
-				} else {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and resists it as best ${he} can. `;
-				}
-				break;
-			case "liberated":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but usually keeps quiet out of fear. `;
-				} else if (child.devotion < -20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and rarely misses a chance to complain about it. `;
-				} else if (child.devotion <= 20) {
-					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but has learned to keep it to ${himself}. `;
-				} else {
-					r += `${He} is <span class="red">devoutly religious,</span> `;
-				}
-				break;
-			case "devout":
-				if (child.devotion < -20 && child.trust >= -20) {
-					r += `and uses ${his} faith as a wellspring of resistance. `;
-				} else if (child.devotion < -20) {
-					r += `and uses ${his} faith as a place of refuge. `;
-				} else if (child.devotion <= 20) {
-					r += `and uses ${his} faith as a private place within ${himself}. `;
-				} else {
-					r += `but has learned to keep ${his} faith private. `;
-				}
-				break;
-			case "odd":
-				r += `${He} behaves <span class="red">oddly,</span> saying and doing random things. `;
-				break;
-			case "hates men":
-				r += `${He} <span class="red">strongly dislikes</span> being around `;
-				if (child.attrXY >= 85 && child.energy >= 40) {
-					r += `men; since ${he} loves the dick, ${he}'s forced to put up with them. `;
-				} else if (child.attrXY >= 65 && child.energy >= 40) {
-					r += `men; since ${he} likes the dick, ${he} reluctantly puts up with them. `;
-				} else {
-					r += `men. `;
-				}
-				break;
-			case "hates women":
-				r += `${He} <span class="red">strongly dislikes</span> being around `;
-				if (child.attrXX >= 85 && child.energy >= 40) {
-					r += `women; since ${he} loves pussy, ${he}'s forced to put up with them. `;
-				} else if (child.attrXX >= 65 && child.energy >= 40) {
-					r += `women; since ${he} likes pussy, ${he} reluctantly puts up with them. `;
-				} else {
-					r += `women. `;
-				}
-				break;
-			case "anorexic":
-				r += `${He} suffers from <span class="red">anorexia.</span> `;
-				break;
-			case "gluttonous":
-				r += `${He} <span class="red">tends to overeat</span> whenever ${he} can, reacting to the rigors of sexual slavery with overeating. `;
-				break;
-		}
 
-		switch (child.behavioralQuirk) {
-			case "confident":
-				r += `${He}'s <span class="green">confident,</span> and believes that ${he} has something of value to offer, even as a child. `;
-				break;
-			case "cutting":
-				r += `${He} often has a witty or <span class="green">cutting</span> remark ready, but knows when to keep them to ${himself}. `;
-				break;
-			case "funny":
-				r += `${He}'s <span class="green">funny,</span> often providing a little comic relief. `;
-				break;
-			case "adores men":
-				r += `${He} <span class="green">adores women,</span> and loves spending time with them. `;
-				break;
-			case "adores women":
-				r += `${He} <span class="green">adores men,</span> and loves spending time with them. `;
-				break;
-			case "fitness":
-				r += `${He}'s a <span class="green">fitness fanatic,</span> and almost gets off to a hard workout. `;
-				break;
-			case "insecure":
-				r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `;
-				break;
-			case "sinful":
-				if (arcology.FSChattelRelionist === "unset") {
-					r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `;
-				} else {
-					r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `;
+			if (V.showBodyMods) {
+				r += piercings.vagina(child);
+				r += piercings.clit(child);
+				r += tats.vagina(child);
+			}
+
+			if (child.rules.release.masturbation === 1) {
+				if ((child.aphrodisiacs > 0 || child.inflationType === "aphrodisiac") && child.drugs !== "priapism agent") {
+					if (child.aphrodisiacs > 1 || (child.inflationType === "aphrodisiac" && child.inflation > 1)) {
+						if (child.dick !== 0 && child.hormoneBalance >= 100 && !hasAnyArms(child)) {
+							r += `The extreme dose of aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && child.balls > 0 && child.ballType === "sterile" && !hasAnyArms(child)) {
+							r += `The extreme dose of aphrodisiacs combined with the chemical castration that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} limp dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && !child.balls && !hasAnyArms(child)) {
+							r += `The extreme dose of aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} limp dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && child.hormoneBalance >= 100) {
+							r += `The extreme dose of aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && !child.balls) {
+							r += `The extreme dose of aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && !canAchieveErection(child)) {
+							r += `The extreme dose of aphrodisiacs combined with ${his} inability to become erect have ${him} in a state of extreme sexual frustration; ${he}'s rubbing ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0) {
+							r += `The extreme dose of aphrodisiacs has ${his} cock painfully erect and precum drips from its head. `;
+						}
+					} else {
+						if (child.dick !== 0 && child.hormoneBalance >= 100 && isAmputee(child)) {
+							r += `The aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && child.balls > 0 && child.ballType === "sterile" && isAmputee(child)) {
+							r += `The aphrodisiacs combined with the chemical castration that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && !child.balls && isAmputee(child)) {
+							r += `The aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s ${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` unconsciously humping ${his} ass against whatever's next to ${him} for anal stimulation and` : ``} humping ${his} dick against whatever ${he} can manage to mount without limbs. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && child.hormoneBalance >= 100) {
+							r += `The aphrodisiacs combined with the hormones that keep ${him} flaccid have ${him} sexually frustrated; ${he}'s touching ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously rubbing ${his} ass against whatever's next to ${him}` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						} else if (child.dick !== 0 && !child.balls) {
+							r += `The aphrodisiacs combined with the lack of balls that keeps ${him} flaccid have ${him} sexually frustrated; ${he}'s touching ${his} limp dick distractedly${(child.fetish === "buttslut" || child.sexualFlaw !== "hates anal") && child.counter.anal > 9 ? ` and unconsciously rubbing ${his} ass against whatever's next to ${him}` : ``}. ${child.inflationType === "aphrodisiac" ? `${His} efforts force ${his} distended middle to jiggle around, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. ` : ``}`;
+						}
+					}
 				}
-				break;
-			case "advocate":
-				r += `${He}'s an <span class="green">advocate</span> for slavery, and can articulate what it's done for ${him}. `;
-				break;
-		}
+			}
 
-		switch (child.sexualFlaw) {
-			case "hates oral":
-				r += `${He} <span class="red">hates</span> oral sex and tries to avoid it. `;
-				break;
-			case "hates anal":
-				r += `${He} <span class="red">hates</span> anal sex and tries to avoid it. `;
-				break;
-			case "hates penetration":
-				r += `${He} <span class="red">hates</span> penetration and tries to avoid it. `;
-				break;
-			case "repressed":
-				r += `${He} is <span class="red">sexually repressed,</span> retaining a fundamental distaste for sex from ${his} upbringing. `;
-				break;
-			case "idealistic":
-				r += `${He} is <span class="red">sexually idealistic,</span> retaining a belief that sex should be based on love and consent. `;
-				break;
-			case "shamefast":
-				r += `${He} is <span class="red">shamefast,</span> suffering crippling anxiety when naked. `;
-				break;
-			case "apathetic":
-				r += `${He} is <span class="red">sexually apathetic,</span> often slipping into inertness during sex. `;
-				break;
-			case "crude":
-				r += `${He} is <span class="red">sexually crude,</span> and has little sense of what partners find disgusting during sex. `;
-				break;
-			case "judgemental":
-				r += `${He} is <span class="red">sexually judgemental,</span> and often denigrates ${his} sexual partners' performance. `;
-				break;
-			case "cum addict":
-				r += `${He}'s a <span class="yellow">cum addict:</span> ${he} has a deep psychological addiction to ${PC.dick ? `semen` : PC.dick && PC.vagina !== 0 ? ` and ` : PC.vagina !== 0 ? `pussyjuice` : ``} and becomes anxious if ${he} goes for a few hours without drinking any. `;
-				break;
-			case "anal addict":
-				r += `${He}'s an <span class="yellow">anal addict:</span> ${he} has a deep psychological need to be fucked in the ass and becomes anxious if ${he} goes for a few hours without anal. `;
-				break;
-			case "attention whore":
-				r += `${He}'s an <span class="yellow">attention whore:</span> shocking and titillating spectators is more important to ${him} than the actual pleasure of sex. `;
-				break;
-			case "breast growth":
-				r += `${He} has a <span class="yellow">breast growth obsession:</span> ${he}'s nearly incapable of believing that ${his} breasts are big enough. `;
-				break;
-			case "abusive":
-				r += `${He}'s sexually <span class="yellow">abusive:</span> ${he} prefers taking sexual pleasure by force to having it offered to ${him}. `;
-				break;
-			case "malicious":
-				r += `${He}'s sexually <span class="yellow">malicious:</span> ${he} gets off on others' anguish. `;
-				break;
-			case "self hating":
-				r += `${He}'s filled with <span class="yellow">self hatred,</span> and is disturbingly willing to comply with things that might hurt ${him}. `;
-				break;
-			case "neglectful":
-				r += `${He}'s sexually <span class="yellow">self neglectful,</span> and often shows no interest in getting off ${himself}. `;
-				break;
-			case "breeder":
-				r += `${He}'s <span class="yellow">obsessed with being bred</span> to the point of fetishizing pregnancy itself as much as any act that leads to it. `;
-				break;
+			if (child.vagina === -1) {
+				r += `${V.seeDicks < 100 && child.anus > 0 ? `Since ${he} lacks a vagina, ${he} takes it up ${V.seeRace ? `${his} ${child.race}` : `the`} ass instead.` : ``}`;
+			} else if (child.skill.vaginal >= 100) {
+				r += `${He} is a <span class="aquamarine">vanilla sex master.</span> `;
+			} else if (child.skill.vaginal > 60) {
+				r += `${He} is a <span class="aquamarine">vanilla sex expert.</span> `;
+			} else if (child.skill.vaginal > 30) {
+				r += `${He} is <span class="aquamarine">skilled at vanilla sex.</span> `;
+			} else if (child.skill.vaginal > 10) {
+				r += `${He} has <span class="aquamarine">basic knowledge about vanilla sex.</span> `;
+			} else {
+				r += `${He} is unskilled at vaginal sex. `;
+			}
 		}
 
-		switch (child.sexualQuirk) {
-			case "gagfuck queen":
-				r += `${He}'s a <span class="green">gagfuck queen:</span> ${he}'s able to safely take a rough facefuck. `;
-				break;
-			case "painal queen":
-				r += `${He}'s a <span class="green">painal queen:</span> ${he} knows exactly how much ${he} can take without getting hurt. `;
-				break;
-			case "strugglefuck queen":
-				r += `${He}'s a <span class="green">strugglefuck queen:</span> ${he} can gauge exactly how much resistance ${his} partners want. `;
-				break;
-			case "tease":
-				r += `${He}'s a <span class="green">tease,</span> and often displays a little flash of ${himself} followed by a blush. `;
-				break;
-			case "romantic":
-				r += `${He}'s a <span class="green">romantic,</span> and persists in innocent pleasure in the closeness of sex. `;
-				break;
-			case "perverted":
-				r += `${He}'s <span class="green">perverted,</span> and enjoys breaking sexual boundaries. `;
-				break;
-			case "caring":
-				r += `${He}'s <span class="green">caring,</span> and enjoys bringing partners pleasure more than getting off ${himself}. `;
-				break;
-			case "unflinching":
-				r += `${He}'s <span class="green">unflinching,</span> willing to do anything, even by the standards of sex slaves. `;
-				break;
-			case "size queen":
-				r += `${He}'s <span class="green">a size queen;</span> preferring big cock is almost ${his} trademark. `;
-				break;
+		return r;
+	}
+
+	function waist(child) {
+		let
+			r = ``,
+			belly;
+
+		if (child.belly >= 1500) {
+			belly = bellyAdjective(child);
 		}
 
-		if (child.fetishKnown) {
-			switch (child.fetish) {
-				case "submissive":
-					if (child.sexualFlaw === "apathetic") {
-						r += `This sexual apathy plays into ${his} preference for <span class="lightcoral">submission.</span> `;
-					} else if (child.behavioralFlaw === "arrogant") {
-						r += `${His} arrogance is really just a thin shell to protect ${his} true need to <span class="lightcoral">submit.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s an extreme <span class="lightcoral">submissive,</span> and relishes the strictures of slavery. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He}'s a confirmed <span class="lightcoral">submissive,</span> and enjoys the strictures of slavery. `;
-					} else {
-						r += `${He} has <span class="lightcoral">submissive</span> tendencies, and likes the strictures of slavery. `;
-					}
-					break;
-				case "cumslut":
-					if (child.sexualFlaw === "hates oral") {
-						r += `${He}'s torn between ${his} <span class="lightcoral">love of semen</span> and ${his} dislike of having cocks in ${his} mouth. `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a <span class="lightcoral">cumslut,</span> and loves giving blowjobs and receiving facials. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">prefers giving oral,</span> and enjoys sucking dick and receiving facials. `;
-					} else {
-						r += `${He} has an <span class="lightcoral">oral fixation,</span> and likes giving blowjobs and receiving facials. `;
+		r += `${He} has `;
+
+		if (child.waist > 95) {
+			r += `a badly <span class="red">masculine waist</span> that ruins ${his} figure${child.weight > 30 ? ` and greatly exaggerates how fat ${he} is` : ` despite how thin ${he} is`}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} thick waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
 					}
-					break;
-				case "humiliation":
-					if (child.behavioralFlaw === "bitchy") {
-						r += `${His} bitchiness is really just an expression of ${his} deep need to be <span class="lightcoral">humiliated</span> ${himself}. `;
-					} else if (child.sexualFlaw === "shamefast") {
-						r += `${His} shame is genuine, and it is with real self-loathing that ${he} <span class="lightcoral">gets off on humiliation.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a slut for <span class="lightcoral">humiliation,</span> and gets off on having others see ${his} enslavement. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} enjoys <span class="lightcoral">humiliating</span> sex. `;
-					} else {
-						r += `${He} likes <span class="lightcoral">embarrassing</span> sex. `;
+				} else if (child.belly < 300000) {
+					r += `${His} ${belly} belly is hidden by ${his} thick waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly can be seen around ${his} thick waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} thick waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
 					}
-					break;
-				case "buttslut":
-					if (child.sexualFlaw === "hates anal") {
-						r += `${His} hatred is just pretense to cover ${his} shame about how much ${he} really loves getting <span class="lightcoral">fucked in the butt.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He}'s a <span class="lightcoral">buttslut,</span> happy to have anyone put anything up ${his} ass. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">prefers anal.</span> `;
-					} else {
-						r += `${He} has an <span class="lightcoral">anal fixation.</span> `;
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges around ${his} thick waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
 					}
-					break;
-				case "boobs":
-					if (child.fetishStrength > 95) {
-						r += `${He} <span class="lightcoral">prefers mammary intercourse</span> to any other kind of sex, and readily climaxes to nipple stimulation. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} enjoys <span class="lightcoral">breast play,</span> and is rapidly aroused by nipple stimulation. `;
-					} else {
-						r += `${He} <span class="lightcoral">really likes boobs,</span> ${hers} and others. `;
+				}
+			}
+		} else if (child.waist > 40) {
+			r += `a broad, <span class="red">ugly waist</span> that makes ${him} look mannish${child.weight > 30 ? ` and exaggerates how fat ${he} is` : ` despite how thin ${he} is`}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} chunky waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
 					}
-					break;
-				case "pregnancy":
-					if (child.fetishStrength > 95) {
-						r += `${He} has a <span class="lightcoral">pregnancy fetish,</span> and finds anything related to reproduction sexy. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} has an <span class="lightcoral">impregnation fantasy,</span> and enjoys bareback sex. `;
+				} else if (child.belly < 150000) {
+					r += `${His} ${belly} belly is hidden by ${his} chunky waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly can be seen around ${his} chunky waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} chunky waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `${He} has a recurring <span class="lightcoral">impregnation fantasy.</span> `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
-					break;
-				case "dom":
-					if (child.sexualFlaw === "apathetic") {
-						r += `${He} is at war with ${himself}, since ${his} habitual apathy during sex barely masks a desire to <span class="lightcoral">dominate.</span> `;
-					} else if (child.fetishStrength > 95) {
-						r += `${He} is a <span class="lightcoral">complete dom;</span> with other slaves this is expressed as a strong preference to top, and with ${his} betters ${he}'s an almost competitive lover. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} likes to take an active, powerful role in sex; with other slaves this is expressed as <span class="lightcoral">dominance,</span> and with ${his} betters ${he}'s a very energetic lover. `;
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges around ${his} chunky waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `${He} prefers to take a <span class="lightcoral">dominant</span> sexual role. `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
-					break;
-				case "sadist":
-					if (child.fetishStrength > 95) {
-						r += `${He} is an <span class="lightcoral">aggressive sadist;</span> ${he}'s constantly plotting to control, abuse, and hurt other slaves. `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} has <span class="lightcoral">sadistic tendencies;</span> ${he} enjoys watching other slaves in pain, but truly loves causing pain ${himself}. `;
+				}
+			}
+		} else if (child.waist > 10) {
+			r += `an <span class="red">unattractive waist</span> that conceals ${his} girlish figure${child.weight > 30 ? ` and accentuates how fat ${he} is` : ` despite how thin ${he} is`}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
+					}
+				} else if (child.belly < 10000) {
+					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
+				} else if (child.belly < 200000) {
+					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
+				} else if (child.belly < 300000) {
+					r += `${His} ${belly} belly can be seen around ${his} waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `${He} gets off on <span class="lightcoral">the suffering of others;</span> ${he} enjoys watching other slaves in pain. `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
-					break;
-				case "masochist":
-					if (child.fetishStrength > 95) {
-						r += `${He} is a <span class="lightcoral">pain slut.</span> `;
-					} else if (child.fetishStrength > 60) {
-						r += `${He} <span class="lightcoral">gets off on pain,</span> showing strong masochistic tendencies. `;
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `${He} <span class="lightcoral">doesn't mind pain,</span> and shows some masochistic tendencies. `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
-					break;
-				default:
-					r += `${His} sexual tastes are <span class="pink">quite normal.</span> `;
-					break;
-			}
-		} else {
-			r += `${His} fetishes, if any, are not known to you. `;
-		}
-
-		if (child.attrKnown) {
-			if (child.energy > 95) {
-				r += `${He}'s a <span class="green">nymphomaniac.</span> `;
-			} else if (child.energy > 80) {
-				r += `${He}'s a <span class="green">sex addict.</span> `;
-			} else if (child.energy > 60) {
-				r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
-			} else if (child.energy > 40) {
-				r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
-			} else if (child.energy > 20) {
-				r += `${He} has a <span class="red">weak sex drive.</span> `;
-			} else {
-				r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
+				}
 			}
-
-			if (child.attrXY <= 5) {
-				if (child.attrXX <= 5) {
-					r += `${He}'s a <span class="green">nymphomaniac.</span> `;
-				} else {
-					r += `${He}'s a <span class="green">sex addict.</span> `;
-					if (child.attrXX <= 15) {
-						r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
-					} else if (child.attrXX <= 35) {
-						r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
-					} else if (child.attrXX <= 65) {
-						r += `${He} has a <span class="red">weak sex drive.</span> `;
-					} else if (child.attrXX <= 85) {
-						r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
-					} else if (child.attrXX <= 95) {
-						r += `${He} <span class="red">finds both men's and women's intimate areas quite repulsive,</span> an unfortunate state of affairs! `;
+		} else if (child.waist >= -10) {
+			r += `an average waist for a ${boy}${child.weight > 30 ? `, though it looks broader since ${he}'s fat` : child.weight < -30 ? `, though it looks narrower since ${he}'s thin` : ``}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
+					}
+				} else if (child.belly < 10000) {
+					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
+				} else if (child.belly < 200000) {
+					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
+				} else if (child.belly < 300000) {
+					r += `${His} ${belly} belly can be seen around ${his} waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `${He} <span class="red">finds men sexually disgusting,</span> `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
 				}
-			} else if (child.attrXY <= 15) {
-				r += `${He} <span class="red">considers men's bodies a turnoff,</span> `;
-				if (child.attrXX <= 5) {
-					r += `and is <span class="red">actually disgusted by women's.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `and <span class="red">feels the same about women's.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `and is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and ${he} is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 35) {
-				r += `${He} is <span class="red">finds most men unattractive,</span> `;
-				if (child.attrXX <= 5) {
-					r += `and is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `and is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `and is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and ${he} is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 65) {
-				r += `${He}'s indifferent to sex with men, `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">actually unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `and feels the same about women, too. `;
-				} else if (child.attrXX <= 85) {
-					r += `but <span class="green">is attracted to women.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `<span class="green">strongly preferring women.</span> `;
-				} else {
-					r += `but is <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 85) {
-				r += `${He} <span class="green">finds men attractive,</span> `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `but is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `and <span class="green">likes women too.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `but <span class="green">likes women even more.</span> `;
-				} else {
-					r += `but is really <span class="green">passionate about women.</span> `;
-				}
-			} else if (child.attrXY <= 95) {
-				r += `${He} <span class="green">is aroused by most men,</span> `;
-				if (child.attrXX <= 5) {
-					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-				} else if (child.attrXX <= 15) {
-					r += `but is <span class="red">turned off by women.</span> `;
-				} else if (child.attrXX <= 35) {
-					r += `but is <span class="red">unenthusiastic about women.</span> `;
-				} else if (child.attrXX <= 65) {
-					r += `but is indifferent to women. `;
-				} else if (child.attrXX <= 85) {
-					r += `and <span class="green">likes women too.</span> `;
-				} else if (child.attrXX <= 95) {
-					r += `and <span class="green">thinks most women are hot,</span> too. `;
-				} else {
-					r += `but is most <span class="green">passionate about women.</span> `;
-				}
-			} else {
-				r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
-				if (child.attrXX > 95) {
-					r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
-				} else {
-					r += `${He}'s <span class="green">passionate about men,</span> `;
-					if (child.attrXX <= 5) {
-						r += `${He}'s <span class="green">passionate about men,</span> `;
-					} else if (child.attrXX <= 15) {
-						r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
-					} else if (child.attrXX <= 35) {
-						r += `but is <span class="red">turned off by women.</span> `;
-					} else if (child.attrXX <= 65) {
-						r += `but is <span class="red">unenthusiastic about women.</span> `;
-					} else if (child.attrXX <= 85) {
-						r += `but is indifferent to women. `;
-					} else if (child.attrXX <= 95) {
-						r += `but also <span class="green">likes women,</span> too. `;
+			}
+		} else if (child.waist >= -40) {
+			r += `a nice <span class="pink">feminine waist</span> that gives ${him} a girlish figure${child.weight > 30 ? ` despite ${his} extra weight` : child.weight < -30 ? ` and accentuates how thin ${he} is` : ``}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} waist. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
+					}
+				} else if (child.belly < 10000) {
+					r += `From behind, ${his} figure hides ${his} ${belly} belly. `;
+				} else if (child.belly < 100000) {
+					r += `From behind, ${his} figure barely hides ${his} ${belly} belly. `;
+				} else if (child.belly < 300000) {
+					r += `${His} ${belly} belly can be seen around ${his} waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly can clearly be seen around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
 					} else {
-						r += `but also <span class="green">thinks most women are hot,</span> too. `;
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges around ${his} waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline only visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
 					}
 				}
 			}
-		} else {
-			r += `You do not understand ${his} sexuality very well. `;
-		}
-	}
-
-	if (!V.saleDescription && !V.eventDescription) {
-		if (canSee(child) && child.attrKnown) {
-			if (child.attrXX > 85 && PC.boobs >= 300) {
-				r += `${His} attraction to women is obvious: ${he} can't seem to stop staring at your breasts. `;
-			} else if (child.attrXY > 85 && PC.dick) {
-				r += `${His} attraction to men is obvious: ${he} can't seem to stop glancing down at your package. `;
-			} else if (child.attrXY > 85 && PC.boobs < 300 && PC.title === 1) {
-				r += `${His} attraction to men is obvious: ${he} can't seem to stop checking out your broad chest. `;
-			}
-		}
-	}
-
-	r += App.Desc.brand(child, "cheek");
-	r += App.Desc.brand(child, "ear");
-	r += App.Desc.brand(child, "neck");
-
-	r += App.Desc.family(child) + ' ';
-
-	if (child.relationship >= 3 && totalRelatives(child) > 0) {
-		const lover = getSlave(child.relationshipTarget);
-		if (jsDef(lover)) {
-			const relTerm = relativeTerm($activeSlave, _lover);
-			if (relTerm !== null) {
-				r += `${He} is in an <span class="lightgreen">incestuous relationship with ${his} ${relTerm}, ${SlaveFullName(lover)}.</span> `;
-			}
-		}
-	} else if (child.relationship <= -2) {
-		const relTerm = relativeTerm($activeSlave, $PC);
-		if (relTerm !== null) {
-			r += `${He} is in an <span class="lightgreen">incestuous relationship with ${his} ${relTerm}, you.</span> `;
-		}
-	}
-
-	if (child.rivalry) {
-		let lcd = V.slaveIndices[child.rivalryTarget];
-		if (jsDef(lcd)) {
-			r += `${He} `;
-			if (child.rivalry <= 1) {
-				r += `<span class="lightsalmon">dislikes</span> ${SlaveFullName(slaves[Lcd])}. `;
-			} else if (child.rivalry <= 2) {
-				r += `is ${SlaveFullName(slaves[Lcd])}>>'s <span class="lightsalmon">rival.</span> `;
-			} else {
-				r += `<span class="lightsalmon">bitterly hates</span> ${SlaveFullName(slaves[Lcd])}>>. `;
-			}
-		}
-	}
-	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp; `;
-	// TODO: rework this subsection
-
-	/*	for possible future inclusion
-	if (child.prestige > 0) {
-		if (child.prestigeDesc) {
-			r += `${child.prestigeDesc} `;
-		}
-		if (child.prestige > 2) {
-			r += `It is extremely prestigious to own ${him}. `;
-		} else if (child.prestige > 1) {
-			r += `It is quite prestigious to own ${him}. `;
-		} else {
-			r += `It is fairly prestigious to own ${him}. `;
-		}
-	}
-
-	if (child.pornPrestige > 0) {
-		if (child.pornPrestigeDesc) {
-			r += `${child.pornPrestigeDesc} `;
-		}
-	}
-
-	if (child.prestige > 0 || child.pornPrestige > 0) {
-		if (child.pornPrestige > 2) {
-			r += `As such, ${he} tends to gain a following wherever ${he} goes. `;
-		} else if (child.pornPrestige > 1) {
-			r += `As such, ${he} is recognized often. `;
-		} else {
-			r += `As such, ${he} is recognized occasionally. `;
-		}
-	}
-
-	if (child.prestige > 0 || child.pornPrestige > 1) {
-		if (child.markings === "birthmark") {
-			r += `${He} has a large, liver-colored birthmark, but since ${he}'s well known, this uniqueness adds to ${his} beauty rather than detracting from it. `;
-		}
-	}
-	*/
-
-	// TODO: rewrite this to sound more natural
-	if (child.skill.whoring <= 10) {
-		if (child.skill.entertainment <= 10) {
-			if (child.skill.entertainment <= 0) {
-				r += ``;
-			} else {
-				r += `${He} is somewhat entertaining. `;
-			}
-		} else if (child.skill.entertainment <= 30) {
-			r += `${He} is <span class=aquamarine>reasonably entertaining.</span> `;
-		} else if (child.skill.entertainment <= 60) {
-			r += `${He} is a <span class=aquamarine>skilled entertainer.</span> `;
-		} else if (child.skill.entertainment < 100) {
-			r += `${He} is an <span class=aquamarine>expert entertainer.</span> `;
-		} else {
-			r += `${He} is a <span class=aquamarine>master of entertainment.</span> `;
-		}
-	} else {
-		if (child.skill.entertainment <= 10) {
-			if (child.skill.entertainment <= 0) {
-				r += ``;
-			} else {
-				r += `${He} is somewhat entertaining and `;
+		} else if (child.waist >= -95) {
+			r += `a hot <span class="pink">wasp waist</span> that gives ${him} an hourglass figure${child.weight > 30 ? ` despite ${his} extra weight` : child.weight < -30 ? ` further accentuated by how thin ${he} is` : ``}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} narrow waist and continues ${child.belly >= 1000000 ? `quite the distance` : `over half a ${V.showInches === 2 ? `yard` : `meter`}`} farther to either side. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
+					}
+				} else if (child.belly < 5000) {
+					r += `From behind, ${his} narrow figure hides ${his} ${belly} belly. `;
+				} else if (child.belly < 80000) {
+					r += `From behind, ${his} narrow figure barely hides ${his} ${belly} belly. `;
+				} else if (child.belly < 100000) {
+					r += `${His} ${belly} belly can be seen around ${his} narrow waist. `;
+				} else if (child.belly < 450000) {
+					r += `${His} ${belly} belly lewdly extends past ${his} narrow waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges to either side of ${his} narrow waist and continues for nearly half a ${V.showInches === 2 ? `yard` : `meter`} in both directions. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline barely visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				}
 			}
-		} else if (child.skill.entertainment <= 30) {
-			r += `${He} is <span class=aquamarine>reasonably entertaining</span> and `;
-		} else if (child.skill.entertainment <= 60) {
-			r += `${He} is a <span class=aquamarine>skilled entertainer</span> and `;
-		} else if (child.skill.entertainment < 100) {
-			r += `${He} is an <span class=aquamarine>expert entertainer</span> and `;
-		} else {
-			r += `${He} is a <span class=aquamarine>master of entertainment</span> and `;
-		}
-	}
-	if (child.skill.whoring <= 10) {
-		if (child.skill.whoring <= 0) {
-			r += ``;
 		} else {
-			r += `${He} has very little experience in selling ${his} body. `;
-		}
-	} else if (child.skill.whoring <= 30) {
-		if (child.skill.entertainment <= 10) {
-			r += `${He} `;
-		}
-		r += `has <span class=aquamarine>basic experience as a prostitute.</span> `;
-	} else if (child.skill.whoring <= 60) {
-		if (child.skill.entertainment <= 10) {
-			r += `${He} is `;
-		}
-		r += `a <span class=aquamarine>skilled streetwalker.</span> `;
-	} else if (child.skill.whoring < 100) {
-		if (child.skill.entertainment <= 10) {
-			r += `${He} is `;
-		}
-		r += `an <span class=aquamarine>expert working ${boy}.</span> `;
-	} else {
-		if (child.skill.entertainment <= 10) {
-			r += `${He} is `;
-		}
-		r += `a <span class=aquamarine>masterful whore.</span> `;
-	}
-
-	if (child.custom.desc !== "" && jsDef(child.custom.desc)) {
-		r += `${child.custom.desc} `;
-	}
-
-	if (arcology.FSGenderFundamentalistLawBeauty > 0 || arcology.FSGenderRadicalistLawBeauty > 0 || arcology.FSSlimnessEnthusiastLaw > 0 || arcology.FSHedonisticDecadenceLaw2 > 0 || arcology.FSRestartSMR > 0) {
-		r += `${His} body is a perfect example of `;
-		if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) {
-			if (genderLawPass(child)) {
-				r += `the fashionable feminine ideal. `;
-			}
-		} else if (arcology.FSSlimnessEnthusiastLaw) {
-			if (slimPass(child)) {
-				r += `the fashionable flat ideal. `;
-			}
-		} else if (arcology.FSHedonisticDecadenceLaw2) {
-			if (child.boobs >= 2000 && child.butt >= 5 && child.weight > 95) {
-				r += `the fashionable plump body. `;
+			r += `an <span class="pink">absurdly narrow waist</span> that gives ${him} a cartoonishly hourglass figure${child.weight > 30 ? ` made even more ludicrous by ${his} extra weight` : child.weight < -30 ? ` made even more ludicrous by how thin ${he} is` : ``}. `;
+			if (child.belly >= 1500) {
+				if (child.belly >= 750000) {
+					r += `${His} ${belly} belly grotesquely bulges around ${his} narrow waist and continues ${child.belly >= 1000000 ? `quite the distance` : `over half a ${V.showInches === 2 ? `yard` : `meter`}`} farther to either side. `;
+					if (child.preg > 3) {
+						if (child.belly > child.pregAdaptation * 1000) {
+							r += `${His} waist is horribly distended by ${his} bursting womb in a last ditch effort to find more room for ${his} children, leaving ${his} original waistline barely visible from behind. `;
+						} else {
+							r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+						}
+					}
+				} else if (child.belly < 2000) {
+					r += `From behind, ${his} narrow figure hides ${his} ${belly} belly. `;
+				} else if (child.belly < 5000) {
+					r += `From behind, ${his} narrow figure barely hides ${his} ${belly} belly. `;
+				} else if (child.belly < 8000) {
+					r += `${His} ${belly} belly can be seen around ${his} narrow waist. `;
+				} else if (child.belly < 15000) {
+					r += `${His} ${belly} belly lewdly extends past ${his} narrow waist. `;
+				} else if (child.belly < 45000) {
+					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
+				} else if (child.belly < 600000) {
+					r += `${His} ${belly} belly lewdly distends far to either side of ${his} narrow waist. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is swollen wider than usual by ${his} crowded womb in its search for more room, leaving ${his} original waistline only visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				} else if (child.belly < 750000) {
+					r += `${His} ${belly} belly lewdly bulges to either side of ${his} narrow waist and continues for nearly half a ${V.showInches === 2 ? `yard` : `meter`} in both directions. `;
+					if (child.belly > child.pregAdaptation * 1000) {
+						r += `${His} waist is greatly distended by ${his} overfilled womb in its desperate search for more room, leaving ${his} original waistline barely visible from behind. `;
+					} else {
+						r += `However, ${his} body is so adapted to pregnancy that ${his} womb rests forward enough to preserve the shape of ${his} waistline. `;
+					}
+				}
 			}
 		}
-		if (arcology.FSRestartSMR > 0 && arcology.FSRestart > 80 && !child.dick && !child.balls && !child.ovaries && !child.mpreg && child.vagina < 0) {
-			r += `a subhuman who accepted their place in society. `;
-		}
-	}
 
-	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+		return r;
+	}
 
-	r += App.Desc.limbs(child);
+	// instantiation
+	piercings();
+	tats();
+	accessories();
 
-	if (V.showClothing && !V.saleDescription) {
-		r += `${child.slaveName} is `;
-		if (child.clothes === "choosing her own clothes") {
-			r += `allowed to choose ${his} own clothes, but hasn't made a selection yet, `;
+	/* 000-250-006 */
+	if (V.seeImages) {
+		if (V.imageChoice === 1) {
+			r += `<div class="imageRef lrgVector"><div class="mask">&nbsp;</div>${SlaveArt(child, 3, 0)}</div> `;
 		} else {
-			r += `wearing ${child.clothes}, `;
-		}
-
-		switch (child.clothes) {
-			case "a slave gown":
-				r += `a gorgeous affair ${!hasAnyLegs(child) ? `cleavage and a short skirt. ` : `with cuts that offer tantalizing glimpses of delicate flesh and ${footwear(child)}`}`;
-				break;
-			case "a ball gown":
-				r += `a majestically grand silken dress for formal ${!hasAnyLegs(child) ? `back. ` : `occasions, stockings, and ${footwear(child)}`}`;
-				break;
-			case "a mini dress":
-				r += `a body hugging strapless number that shows as much skin as it ${!hasAnyLegs(child) ? `everything. ` : `covers, paired with ${footwear(child)}`}`;
-				break;
-			case "a schoolgirl outfit":
-				r += `which includes a tight white ${!hasAnyLegs(child) ? `pattern. ` : `blouse, a short plaid skirt, and ${footwear(child)}`}`;
-				break;
-			case "a sweater":
-			case "a t-shirt":
-			case "a tank-top":
-			case "an oversized t-shirt":
-				r += `which only covers ${his} ${!hasAnyLegs(child) ? `breasts. ` : `torso, and ${footwear(child)}`}`;
-				break;
-			default:
-				r += `so ${his} nude body is on display. ${!hasAnyLegs(child) ? `In fact, ${he}'s devoid of even legs. ` : `${He} is wearing ${footwear(child)}`}`;
-				break;
+			r += `<div class="imageRef lrgRender"><div class="mask">&nbsp;</div>${SlaveArt(child, 3, 0)}</div> `;
 		}
 	}
+	/* 000-250-006 */
 
-	if (V.showBodyMods) {
-		r += clothingCorset(child);
-	}
+	r += `&nbsp;&nbsp;&nbsp;&nbsp; `;
 
-	if (V.showClothing && !V.saleDescription) {
-		r += `${He}`;
-	} else {
-		r += `${child.slaveName}`;
+	r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `;
+
+	if (child.custom.label) {
+		r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `;
 	}
-	let averageHeight = Height.mean(child);
 
 	r += ` is `;
 
-	// TODO: should these numbers be tweaked to account for smaller body sizes?
-	if (child.height <= averageHeight + 5 && child.height >= averageHeight - 5) {
-		r += `an average height`;
-		if (child.physicalAge < 16) {
-			r += ` for ${his} age`;
-		}
-	} else if (child.height < averageHeight - 15) {
-		r += `petite`;
-		if (child.physicalAge < 16) {
-			r += ` for ${his} age`;
-		}
-	} else if (child.height < averageHeight - 5) {
-		r += `short`;
-		if (child.physicalAge < 16) {
-			r += ` for ${his} age`;
-		}
-	} else if (child.height > averageHeight + 15) {
-		r += `very tall`;
-		if (child.physicalAge < 16) {
-			r += ` for ${his} age`;
-		}
-	} else if (child.height > averageHeight + 5) {
-		r += `tall`;
-		if (child.physicalAge < 16) {
-			r += ` for ${his} age`;
-		}
-	}
-	if (V.showHeightCMs) {
-		r += ` at ${heightToEitherUnit(child.height)},`;
+	if (child.devotion < -95) {
+		r += `a <span class="devotion hateful">hate-filled,</span> `;
+	} else if (child.devotion < -50) {
+		r += `a <span class="devotion hateful">hateful,</span> `;
+	} else if (child.devotion < -20) {
+		r += `a <span class="devotion resistant">reluctant,</span> `;
+	} else if (child.devotion <= 20) {
+		r += `a <span class="devotion ambivalent">hesitant,</span> `;
+	} else if (child.devotion <= 50) {
+		r += `an <span class="devotion accept">accepting,</span> `;
+	} else if (child.devotion <= 95) {
+		r += `a <span class="devotion devoted">devoted,</span> `;
+	} else {
+		r += `a <span class="devotion worship">worshipful,</span> `;
 	}
 
-	r += ` and `;
-
-	if (child.weight > 190) {
-		if (arcology.FSHedonisticDecadence !== "unset") {
-			r += `${jsEither("perfectly curvy", "perfectly plush")}. `;
-		} else {
-			r += `<span class="red">${jsEither("dangerously fat", "dangerously overweight", "extremely obese")}.</span> `;
-		}
-	} else if (child.weight > 160) {
-		if (arcology.FSHedonisticDecadence !== "unset") {
-			r += `${jsEither("spectacularly curvy", "spectacularly plush")}. `;
-		} else {
-			r += `<span class="red">${jsEither("extremely fat", "extremely overweight")}.</span> `;
-		}
-	} else if (child.weight > 130) {
-		if (arcology.FSHedonisticDecadence !== "unset") {
-			r += `${jsEither("amazingly curvy", "amazingly plush")}. `;
-		} else {
-			r += `<span class="red">${jsEither("very overweight", "obese", "very fat")}.</span> `;
-		}
-	} else if (child.weight > 95) {
-		if (child.hips > 1) {
-			r += `${"extremely curvy", "extremely plush"}, but ${his} huge hips make the extra weight attractive on ${him}. `;
-		} else if (arcology.FSHedonisticDecadence !== "unset") {
-			r += `${jsEither("extremely curvy", "extremely plush")}. `;
-		} else {
-			r += `<span class="red">${jsEither("carrying a lot of extra weight", "fat", "overweight")}.</span> `;
-		}
-	} else if (child.weight > 30) {
-		if (child.hips > 1) {
-			r += `${jsEither("quite curvy", "very plush")}, but ${his} motherly hips make the extra weight attractive on ${him}. `;
-		} else if (arcology.FSHedonisticDecadence !== "unset") {
-			r += `${jsEither("quite curvy", "very plush")}. `;
+	if (child.trust < -95) {
+		r += `<span class="trust extremely-terrified">abjectly terrified</span> `;
+	} else if (child.devotion < -50) {
+		r += `<span class="trust terrified">terrified</span> `;
+	} else if (child.devotion < -20) {
+		r += `<span class="trust frightened">frightened</span> `;
+	} else if (child.devotion <= 20) {
+		r += `<span class="trust fearful">fearful</span> `;
+	} else if (child.devotion <= 50) {
+		if (child.devotion < -20) {
+			r += `<span class="defiant careful">careful</span> `;
 		} else {
-			r += `<span class="red">${jsEither("carrying extra weight", "chubby")}.</span> `;
+			r += `<span class="trust careful">careful</span> `;
 		}
-	} else if (child.weight > 10) {
-		r += `${jsEither("nicely plush", "pleasingly curvy")}. `;
-	} else if (child.weight >= -10) {
-		r += `${jsEither("a healthy weight", "an attractive weight")}. `;
-	} else if (child.weight >= -30) {
-		r += `${jsEither("appealingly skinny", "pleasingly thin")}. `;
-	} else if (child.weight >= -95) {
-		if (child.hips > 1) {
-			r += `${jsEither("quite skinny", "very thin")}, but ${his} wide hips make the gap between ${his} thighs very noticeable. `;
-		} else if (child.hips < -1) {
-			r += `${jsEither("quite skinny", "very thin")}, but ${his} trim hips make ${him} look like a model. `;
+	} else if (child.devotion <= 95) {
+		if (child.devotion < -20) {
+			r += `<span class="defiant bold">bold</span> `;
 		} else {
-			r += `<span class="red">${"rail thin", "too skinny", "underweight"}.</span> `;
+			r += `<span class="trust trusting">trusting</span> `;
 		}
 	} else {
-		r += `<span class="red">${"dangerously skinny", "emaciated"}.</span> `;
-	}
-
-	if (child.hips > 2) {
-		r += `${His} hips are unrealistically wide; it is obvious they have been artificially widened. `;
-	}
-
-	r += waist(child);
-
-	if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderFundamentalistLawBeauty > 0) {
-		if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhyscialIdealistStrongFat === 0) {
-			if (child.weight > 130) {
-				r += `${He} is much too fat for the fashionable feminine ideal. `;
-			} else if (child.weight > 30) {
-				r += `${He} is too fat for the fashionable feminine ideal. `;
-			} else if (child.weight < -30) {
-				r += `${He} is too skinny for the fashionable feminine ideal. `;
-			}
-		} else {
-			if (child.weight > 130) {
-				r += `${He} is much too fat for the fashionable feminine ideal. `;
-			} else if (child.weight < -30) {
-				r += `${He} is too skinny for the fashionable feminine ideal. `;
-			}
-		}
-	} else if (arcology.FSSlimnessEnthusiastLaw === 1) {
-		if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhyscialIdealistStrongFat === 0) {
-			if (child.weight > 30) {
-				r += `${He} is much too fat for the fashionable feminine ideal. `;
-			} else if (child.weight > 10) {
-				r += `${He} is too fat for the fashionable feminine ideal. `;
-			}
+		if (child.devotion < -20) {
+			r += `<span class="defiant full">defiant</span> `;
 		} else {
-			if (child.weight > 60) {
-				r += `${He} is much too fat for the fashionable feminine ideal. `;
-			} else if (child.weight > 30) {
-				r += `${He} is too fat for the fashionable feminine ideal. `;
-			}
-		}
-	} else if (arcology.FSHedonisticDecadenceLaw2) {
-		if (child.weight <= 95) {
-			r += `${He} is too thin for the fashionable feminine ideal. `;
-		} else if (child.weight <= 10) {
-			r += `${He} is much too thin for the fashionable feminine ideal. `;
+			r += `<span class="trust prof-trusting">profoundly trusting</span> `;
 		}
 	}
 
-	if (canWalk(child)) {
-		if (child.weight > (170 + child.muscles / 5) && child.physicalAge >= 18) {
-			r += `${He} is so fat that it is difficult for ${him} to move. `;
-			if (child.muscles > 95) {
-				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
-			} else if (child.muscles > 30) {
-				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
-			} else if (child.muscles > 5) {
-				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
-			} else {
-				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
-			}
-		} else if (child.weight > (110 + child.muscles / 20) && child.physicalAge <= 3) {
-			r += `${He} is so fat that it is difficult for ${him} to move. `;
-			if (child.muscles > 95) {
-				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
-			} else if (child.muscles > 30) {
-				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
-			} else if (child.muscles > 5) {
-				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
-			} else {
-				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
-			}
-		} else if (child.weight > (140 + child.muscles / 15) && child.physicalAge <= 12) {
-			r += `${He} is so fat that it is difficult for ${him} to move. `;
-			if (child.muscles > 95) {
-				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
-			} else if (child.muscles > 30) {
-				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
-			} else if (child.muscles > 5) {
-				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
-			} else {
-				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
-			}
-		} else if (child.weight > (165 + child.muscles / 10 && child.physicalAge < 18)) {
-			r += `${He} is so fat that it is difficult for ${him} to move. `;
-			if (child.muscles > 95) {
-				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
-			} else if (child.muscles > 30) {
-				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
-			} else if (child.muscles > 5) {
-				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
+	r += `<strong><span class="coral">${SlaveTitle(child)}.</span></strong> `;
+
+	r += App.Desc.ageAndHealth(child);
+
+	if (!V.saleDescription) {
+		if (V.clinic && V.clinicUpgradeScanner) {
+			if (child.chem > 15) {
+				r += `${V.clinicNameCaps}'s scanners score long term carcinogenic buildup in ${his} body at <span class="cyan">${Math.ceil(child.chem/10)}.</span> `;
 			} else {
-				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
+				r += `${V.clinicNameCaps}'s scanners confirm that ${he} has good prospects for long term health. `;
 			}
 		}
-	}
 
-	r += heightImplant(child);
+		if (V.showSexualHistory && V.ui !== "start") {
+			let weeksOwned = V.week - child.weekAcquired;
 
-	r += `${He} is `;
-	if (child.muscles > 95) {
-		r += `<span class="pink">extremely muscular,</span> with defined pecs, powerful glutes, and massive traps`;
-		if (child.weight > 95) {
-			r += ` hidden beneath a layer of fat`;
-		}
-		r += `. `;
-	} else if (child.muscles > 50) {
-		r += `<span class="pink">quite muscular,</span> with ripped abs, strong shoulders, and defined lats`;
-		if (child.weight > 95) {
-			r += ` hidden beneath a layer of fat`;
-		}
-		r += `. `;
-	} else if (child.muscles > 30) {
-		r += `<span class="pink">well built,</span> yet feminine with defined abs and strong shapely muscles`;
-		if (child.weight > 95) {
-			r += ` hidden beneath a layer of fat`;
+			r += `${He} was born in ${arcology.name} ${weeksOwned} week${weeksOwned !== 1 ? `s` : ``} ago`;
+
+			let oral = child.counter.oral,
+				vaginal = child.counter.vaginal,
+				anal = child.counter.oral,
+				mammary = child.counter.mammary,
+				penetrative = child.counter.penetrative,
+				total = oral + vaginal + anal + mammary + penetrative;
+
+			if (total > 0) {
+				r += ` and has been fucked about ${total} times, including `;
+				if ((vaginal + anal + mammary + penetrative) > 0) {
+					if (vaginal > 0) {
+						r += `${vaginal} vanilla, `;
+					}
+					if (anal > 0) {
+						r += `${anal} anal, `;
+					}
+					if (mammary > 0) {
+						r += `${mammary} mammary `;
+					}
+					if (penetrative > 0) {
+						r += `${penetrative} penetrating, `;
+					}
+					r += ` and `;
+				}
+				r += `${oral} oral sexual encounters. `;
+			} else {
+				if (weeksOwned >= 1) {
+					r += ` and `;
+				} else {
+					r += `. ${He} `;
+				}
+
+				r += `has had little or no sexual experience `;
+				if (child.weekAcquired !== 0) {
+					r += `as your slave `;
+				} else {
+					r += `in your new arcology `;
+				}
+				r += `yet. `;
+			}
+
+			let sortedCounts = [];
+			sortedCounts.push(
+				{type: "oral", value: oral},
+				{type: "vaginal", value: vaginal},
+				{type: "anal", value: anal},
+				{type: "mammary", value: mammary},
+				{type: "penetrative", value: penetrative}
+			);
+			sortedCounts = sortedCounts.sort(function(a, b) {	// sorts the counts from largest to smallest
+				return b.value - a.value;
+			});
+
+			if (sortedCounts[0].type === "oral") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s sucked something off `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "vaginal") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${his} pussy has been fucked `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "anal") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s been buttfucked `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "mammary") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s put ${his} tits to work `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "penetrative") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s pounded a hole `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			}
 		}
-		r += `. `;
-	} else if (child.muscles > 5) {
-		r += `<span class="pink">well built,</span> yet feminine, with just-visible muscles`;
-		if (child.weight > 30) {
-			r += ` hidden beneath a layer of fat`;
+
+		r += App.Desc.eyes(child);
+
+		if (child.fetish === "mindbroken") {
+			r += `However, <span class="coral">${his} mind is fundamentally broken;</span> everything ${he} experiences will quickly be forgotten. `;
 		}
-		r += `. `;
-	} else if (child.muscles >= -5) {
-		r += `<span class="pink">soft and feminine,</span> with no visible muscles. `;
-	} else if (child.muscles >= -30) {
-		r += `<span class="pink">rather weak,</span> with barely any muscles. `;
-	} else if (child.muscles >= -95) {
-		r += `<span class="pink">very weak;</span> ${he} struggles with day-to-day tasks. `;
-	} else {
-		r += `<span class="red">frail;</span> ${he} can barely hold ${himself} up. `;
-	}
 
-	if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty + arcology.FSSlimnessEnthusiastLaw > 0 && arcology.FSPhysicalIdealist === "unset" && !arcology.FSHedonisticDecadenceStrongFat) {
-		if (arcology.FSPhysicalIdealistLaw > 0 && child.muscles > 50) {
-			r += `${He} is entirely too muscular for the fashionable feminine ideal. `;
-		} else if (child.muscles > 30) {
-			r += `${He} is entirely too muscular for the fashionable feminine ideal. `;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} is still <span class="red">arrogant</span> at heart, but does ${his} best to hide it out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} is <span class="red">arrogant</span> and seems to think slavery beneath ${him}. `;
+				} else if (child.devotion <= 20) {
+					r += `Despite being well broken, ${he} seems to retain hints of <span class="red">arrogance.</span> `;
+				} else {
+					r += `${He} is <span class="red">bitchy</span> and insults you every chance ${he} gets. `;
+				}
+				break;
+			case "bitchy":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} is still <span class="red">bitchy</span> at times, but does ${his} best to keep quiet out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} is <span class="red">bitchy</span> and constantly tries to get a word in edgewise. `;
+				} else if (child.devotion <= 20) {
+					r += `Since ${he} is well broken, ${he} tries to confine ${his} <span class="red">bitchy</span> remarks to your other slaves. `;
+				} else {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and resists it as best ${he} can. `;
+				}
+				break;
+			case "liberated":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but usually keeps quiet out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and rarely misses a chance to complain about it. `;
+				} else if (child.devotion <= 20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but has learned to keep it to ${himself}. `;
+				} else {
+					r += `${He} is <span class="red">devoutly religious,</span> `;
+				}
+				break;
+			case "devout":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `and uses ${his} faith as a wellspring of resistance. `;
+				} else if (child.devotion < -20) {
+					r += `and uses ${his} faith as a place of refuge. `;
+				} else if (child.devotion <= 20) {
+					r += `and uses ${his} faith as a private place within ${himself}. `;
+				} else {
+					r += `but has learned to keep ${his} faith private. `;
+				}
+				break;
+			case "odd":
+				r += `${He} behaves <span class="red">oddly,</span> saying and doing random things. `;
+				break;
+			case "hates men":
+				r += `${He} <span class="red">strongly dislikes</span> being around `;
+				if (child.attrXY >= 85 && child.energy >= 40) {
+					r += `men; since ${he} loves the dick, ${he}'s forced to put up with them. `;
+				} else if (child.attrXY >= 65 && child.energy >= 40) {
+					r += `men; since ${he} likes the dick, ${he} reluctantly puts up with them. `;
+				} else {
+					r += `men. `;
+				}
+				break;
+			case "hates women":
+				r += `${He} <span class="red">strongly dislikes</span> being around `;
+				if (child.attrXX >= 85 && child.energy >= 40) {
+					r += `women; since ${he} loves pussy, ${he}'s forced to put up with them. `;
+				} else if (child.attrXX >= 65 && child.energy >= 40) {
+					r += `women; since ${he} likes pussy, ${he} reluctantly puts up with them. `;
+				} else {
+					r += `women. `;
+				}
+				break;
+			case "anorexic":
+				r += `${He} suffers from <span class="red">anorexia.</span> `;
+				break;
+			case "gluttonous":
+				r += `${He} <span class="red">tends to overeat</span> whenever ${he} can, reacting to the rigors of sexual slavery with overeating. `;
+				break;
 		}
-	}
 
-	if (hasAnyArms(child)) {
-		let s = "s";
-		let a = "";
-		if (!hasBothArms(child)) {
-			s = "";
-			a = "a ";
-		}
-		if (child.weight > 190) {
-			r += `${He} has ${a}hugely thick arm${s} with sagging fat rolls and `;
-		} else if (child.weight > 160) {
-			r += `${He} has ${a}thick arm${s} with drooping fat folds and `;
-		} else if (child.weight > 130) {
-			r += `${He} has ${a}plump arm${s} with `;
-		} else if (child.weight > 97) {
-			r += `${He} has ${a}chubby arm${s} with `;
-		} else {
-			r += `${He} has ${a}normal arm${s} with `;
+		switch (child.behavioralQuirk) {
+			case "confident":
+				r += `${He}'s <span class="green">confident,</span> and believes that ${he} has something of value to offer, even as a child. `;
+				break;
+			case "cutting":
+				r += `${He} often has a witty or <span class="green">cutting</span> remark ready, but knows when to keep them to ${himself}. `;
+				break;
+			case "funny":
+				r += `${He}'s <span class="green">funny,</span> often providing a little comic relief. `;
+				break;
+			case "adores men":
+				r += `${He} <span class="green">adores women,</span> and loves spending time with them. `;
+				break;
+			case "adores women":
+				r += `${He} <span class="green">adores men,</span> and loves spending time with them. `;
+				break;
+			case "fitness":
+				r += `${He}'s a <span class="green">fitness fanatic,</span> and almost gets off to a hard workout. `;
+				break;
+			case "insecure":
+				r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `;
+				break;
+			case "sinful":
+				if (arcology.FSChattelRelionist === "unset") {
+					r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `;
+				} else {
+					r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `;
+				}
+				break;
+			case "advocate":
+				r += `${He}'s an <span class="green">advocate</span> for slavery, and can articulate what it's done for ${him}. `;
+				break;
 		}
 
-	if (child.muscles > 95) {
-		r += `huge muscles`;
-		if (child.weight > 95) {
-			r += ` hidden beneath ${his} soft flesh`;
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `${He} <span class="red">hates</span> oral sex and tries to avoid it. `;
+				break;
+			case "hates anal":
+				r += `${He} <span class="red">hates</span> anal sex and tries to avoid it. `;
+				break;
+			case "hates penetration":
+				r += `${He} <span class="red">hates</span> penetration and tries to avoid it. `;
+				break;
+			case "repressed":
+				r += `${He} is <span class="red">sexually repressed,</span> retaining a fundamental distaste for sex from ${his} upbringing. `;
+				break;
+			case "idealistic":
+				r += `${He} is <span class="red">sexually idealistic,</span> retaining a belief that sex should be based on love and consent. `;
+				break;
+			case "shamefast":
+				r += `${He} is <span class="red">shamefast,</span> suffering crippling anxiety when naked. `;
+				break;
+			case "apathetic":
+				r += `${He} is <span class="red">sexually apathetic,</span> often slipping into inertness during sex. `;
+				break;
+			case "crude":
+				r += `${He} is <span class="red">sexually crude,</span> and has little sense of what partners find disgusting during sex. `;
+				break;
+			case "judgemental":
+				r += `${He} is <span class="red">sexually judgemental,</span> and often denigrates ${his} sexual partners' performance. `;
+				break;
+			case "cum addict":
+				r += `${He}'s a <span class="yellow">cum addict:</span> ${he} has a deep psychological addiction to ${PC.dick ? `semen` : PC.dick && PC.vagina !== 0 ? ` and ` : PC.vagina !== 0 ? `pussyjuice` : ``} and becomes anxious if ${he} goes for a few hours without drinking any. `;
+				break;
+			case "anal addict":
+				r += `${He}'s an <span class="yellow">anal addict:</span> ${he} has a deep psychological need to be fucked in the ass and becomes anxious if ${he} goes for a few hours without anal. `;
+				break;
+			case "attention whore":
+				r += `${He}'s an <span class="yellow">attention whore:</span> shocking and titillating spectators is more important to ${him} than the actual pleasure of sex. `;
+				break;
+			case "breast growth":
+				r += `${He} has a <span class="yellow">breast growth obsession:</span> ${he}'s nearly incapable of believing that ${his} breasts are big enough. `;
+				break;
+			case "abusive":
+				r += `${He}'s sexually <span class="yellow">abusive:</span> ${he} prefers taking sexual pleasure by force to having it offered to ${him}. `;
+				break;
+			case "malicious":
+				r += `${He}'s sexually <span class="yellow">malicious:</span> ${he} gets off on others' anguish. `;
+				break;
+			case "self hating":
+				r += `${He}'s filled with <span class="yellow">self hatred,</span> and is disturbingly willing to comply with things that might hurt ${him}. `;
+				break;
+			case "neglectful":
+				r += `${He}'s sexually <span class="yellow">self neglectful,</span> and often shows no interest in getting off ${himself}. `;
+				break;
+			case "breeder":
+				r += `${He}'s <span class="yellow">obsessed with being bred</span> to the point of fetishizing pregnancy itself as much as any act that leads to it. `;
+				break;
 		}
-		r += `. `;
-	} else if (child.muscles > 30) {
-		r += `obvious muscles`;
-		if (child.weight > 95) {
-			r += ` hidden beneath ${his} soft flesh`;
+
+		switch (child.sexualQuirk) {
+			case "gagfuck queen":
+				r += `${He}'s a <span class="green">gagfuck queen:</span> ${he}'s able to safely take a rough facefuck. `;
+				break;
+			case "painal queen":
+				r += `${He}'s a <span class="green">painal queen:</span> ${he} knows exactly how much ${he} can take without getting hurt. `;
+				break;
+			case "strugglefuck queen":
+				r += `${He}'s a <span class="green">strugglefuck queen:</span> ${he} can gauge exactly how much resistance ${his} partners want. `;
+				break;
+			case "tease":
+				r += `${He}'s a <span class="green">tease,</span> and often displays a little flash of ${himself} followed by a blush. `;
+				break;
+			case "romantic":
+				r += `${He}'s a <span class="green">romantic,</span> and persists in innocent pleasure in the closeness of sex. `;
+				break;
+			case "perverted":
+				r += `${He}'s <span class="green">perverted,</span> and enjoys breaking sexual boundaries. `;
+				break;
+			case "caring":
+				r += `${He}'s <span class="green">caring,</span> and enjoys bringing partners pleasure more than getting off ${himself}. `;
+				break;
+			case "unflinching":
+				r += `${He}'s <span class="green">unflinching,</span> willing to do anything, even by the standards of sex slaves. `;
+				break;
+			case "size queen":
+				r += `${He}'s <span class="green">a size queen;</span> preferring big cock is almost ${his} trademark. `;
+				break;
 		}
-		r += `. `;
-	} else if (child.muscles > 5) {
-		r += `toned muscles`;
-		if (child.weight > 30) {
-				r += ` hidden beneath ${his} soft flesh`;
+
+		if (child.fetishKnown) {
+			switch (child.fetish) {
+				case "submissive":
+					if (child.sexualFlaw === "apathetic") {
+						r += `This sexual apathy plays into ${his} preference for <span class="lightcoral">submission.</span> `;
+					} else if (child.behavioralFlaw === "arrogant") {
+						r += `${His} arrogance is really just a thin shell to protect ${his} true need to <span class="lightcoral">submit.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s an extreme <span class="lightcoral">submissive,</span> and relishes the strictures of slavery. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He}'s a confirmed <span class="lightcoral">submissive,</span> and enjoys the strictures of slavery. `;
+					} else {
+						r += `${He} has <span class="lightcoral">submissive</span> tendencies, and likes the strictures of slavery. `;
+					}
+					break;
+				case "cumslut":
+					if (child.sexualFlaw === "hates oral") {
+						r += `${He}'s torn between ${his} <span class="lightcoral">love of semen</span> and ${his} dislike of having cocks in ${his} mouth. `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a <span class="lightcoral">cumslut,</span> and loves giving blowjobs and receiving facials. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">prefers giving oral,</span> and enjoys sucking dick and receiving facials. `;
+					} else {
+						r += `${He} has an <span class="lightcoral">oral fixation,</span> and likes giving blowjobs and receiving facials. `;
+					}
+					break;
+				case "humiliation":
+					if (child.behavioralFlaw === "bitchy") {
+						r += `${His} bitchiness is really just an expression of ${his} deep need to be <span class="lightcoral">humiliated</span> ${himself}. `;
+					} else if (child.sexualFlaw === "shamefast") {
+						r += `${His} shame is genuine, and it is with real self-loathing that ${he} <span class="lightcoral">gets off on humiliation.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a slut for <span class="lightcoral">humiliation,</span> and gets off on having others see ${his} enslavement. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} enjoys <span class="lightcoral">humiliating</span> sex. `;
+					} else {
+						r += `${He} likes <span class="lightcoral">embarrassing</span> sex. `;
+					}
+					break;
+				case "buttslut":
+					if (child.sexualFlaw === "hates anal") {
+						r += `${His} hatred is just pretense to cover ${his} shame about how much ${he} really loves getting <span class="lightcoral">fucked in the butt.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a <span class="lightcoral">buttslut,</span> happy to have anyone put anything up ${his} ass. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">prefers anal.</span> `;
+					} else {
+						r += `${He} has an <span class="lightcoral">anal fixation.</span> `;
+					}
+					break;
+				case "boobs":
+					if (child.fetishStrength > 95) {
+						r += `${He} <span class="lightcoral">prefers mammary intercourse</span> to any other kind of sex, and readily climaxes to nipple stimulation. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} enjoys <span class="lightcoral">breast play,</span> and is rapidly aroused by nipple stimulation. `;
+					} else {
+						r += `${He} <span class="lightcoral">really likes boobs,</span> ${hers} and others. `;
+					}
+					break;
+				case "pregnancy":
+					if (child.fetishStrength > 95) {
+						r += `${He} has a <span class="lightcoral">pregnancy fetish,</span> and finds anything related to reproduction sexy. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} has an <span class="lightcoral">impregnation fantasy,</span> and enjoys bareback sex. `;
+					} else {
+						r += `${He} has a recurring <span class="lightcoral">impregnation fantasy.</span> `;
+					}
+					break;
+				case "dom":
+					if (child.sexualFlaw === "apathetic") {
+						r += `${He} is at war with ${himself}, since ${his} habitual apathy during sex barely masks a desire to <span class="lightcoral">dominate.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He} is a <span class="lightcoral">complete dom;</span> with other slaves this is expressed as a strong preference to top, and with ${his} betters ${he}'s an almost competitive lover. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} likes to take an active, powerful role in sex; with other slaves this is expressed as <span class="lightcoral">dominance,</span> and with ${his} betters ${he}'s a very energetic lover. `;
+					} else {
+						r += `${He} prefers to take a <span class="lightcoral">dominant</span> sexual role. `;
+					}
+					break;
+				case "sadist":
+					if (child.fetishStrength > 95) {
+						r += `${He} is an <span class="lightcoral">aggressive sadist;</span> ${he}'s constantly plotting to control, abuse, and hurt other slaves. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} has <span class="lightcoral">sadistic tendencies;</span> ${he} enjoys watching other slaves in pain, but truly loves causing pain ${himself}. `;
+					} else {
+						r += `${He} gets off on <span class="lightcoral">the suffering of others;</span> ${he} enjoys watching other slaves in pain. `;
+					}
+					break;
+				case "masochist":
+					if (child.fetishStrength > 95) {
+						r += `${He} is a <span class="lightcoral">pain slut.</span> `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">gets off on pain,</span> showing strong masochistic tendencies. `;
+					} else {
+						r += `${He} <span class="lightcoral">doesn't mind pain,</span> and shows some masochistic tendencies. `;
+					}
+					break;
+				default:
+					r += `${His} sexual tastes are <span class="pink">quite normal.</span> `;
+					break;
 			}
-			r += `. `;
-		} else {
-			r += `little muscle to them. `;
-		}
-	}
-
-	if (child.skill.combat > 0) {
-		r += `${He} is <span class="aquamarine"skilled at combat:</span> ${he} is comfortable with the use of modern firearms and edges weapons, and ${his} limbs `;
-		if (getLimbCount(child, 105) > 1) {
-			r += `would be deadly weapons even if they weren't full of deadly weapons already`;
-		} else if (!isAmputee(child)) {
-			r += `would be deadly weapons if ${he} had any`;
-		} else {
-			r += `are deadly weapons`;
-		}
-		r += `. `;
-	}
-
-	if (child.counter.pitKills > 0) {
-		r += `${child.counter.pitKills} slaves have died by ${his} hand in pit fights. `;
-	}
-
-	if (child.corsetPiercing > 0) {
-		r += piercings.corset(child);
-	}
-
-	if (hasAnyLegs(child)) {
-		let s = "s";
-		let a = "";
-		if (!hasBothLegs(child)) {
-			s = "";
-			a = "a ";
-		}
-
-		if (child.weight > 190) {
-			r += `${He} has ${hasBothLegs(child) ? `` : `an `}extremely fat leg${s} with ${hasBothLegs(child) ? `` : `an `}immense soft, rather uneven thigh${s} and `;
-		} else if (child.weight > 160) {
-			r += `${He} has ${a}very fat leg${s} with ${a}massively thick, soft, somewhat uneven thigh${s} and `;
-		} else if (child.weight > 130) {
-			r += `${He} has ${a}fat leg${s} with ${a}hugely thick, soft thigh${s} and `;
-		} else if (child.weight > 97) {
-			r += `${He} has ${a}fat leg${s} with ${a}thick, soft thigh${s} and `;
-		} else if (child.weight > 95) {
-			r += `${He} has ${a}normal leg${s} with ${a}thick, soft thigh${s} and `;
 		} else {
-			r += `${He} has ${a}relatively normal leg${s} and thigh${s} with `;
+			r += `${His} fetishes, if any, are not known to you. `;
 		}
 
-		if (child.muscles > 95) {
-			r += `huge muscles`;
-			if (child.weight > 95) {
-				r += ` hidden beneath ${his} soft flab`;
-			}
-			r += `. `;
-		} else if (child.muscles > 30) {
-			r += `obvious muscles`;
-			if (child.weight > 95) {
-				r += ` hidden beneath ${his} soft flab`;
+		if (child.attrKnown) {
+			if (child.energy > 95) {
+				r += `${He}'s a <span class="green">nymphomaniac.</span> `;
+			} else if (child.energy > 80) {
+				r += `${He}'s a <span class="green">sex addict.</span> `;
+			} else if (child.energy > 60) {
+				r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
+			} else if (child.energy > 40) {
+				r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
+			} else if (child.energy > 20) {
+				r += `${He} has a <span class="red">weak sex drive.</span> `;
+			} else {
+				r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
 			}
-			r += `. `;
-		} else if (child.muscles > 5) {
-			r += `toned muscles`;
-			if (child.weight > 30) {
-				r += ` hidden beneath ${his} soft flab`;
+
+			if (child.attrXY <= 5) {
+				if (child.attrXX <= 5) {
+					r += `${He}'s a <span class="green">nymphomaniac.</span> `;
+				} else {
+					r += `${He}'s a <span class="green">sex addict.</span> `;
+					if (child.attrXX <= 15) {
+						r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
+					} else if (child.attrXX <= 35) {
+						r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
+					} else if (child.attrXX <= 65) {
+						r += `${He} has a <span class="red">weak sex drive.</span> `;
+					} else if (child.attrXX <= 85) {
+						r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
+					} else if (child.attrXX <= 95) {
+						r += `${He} <span class="red">finds both men's and women's intimate areas quite repulsive,</span> an unfortunate state of affairs! `;
+					} else {
+						r += `${He} <span class="red">finds men sexually disgusting,</span> `;
+					}
+				}
+			} else if (child.attrXY <= 15) {
+				r += `${He} <span class="red">considers men's bodies a turnoff,</span> `;
+				if (child.attrXX <= 5) {
+					r += `and is <span class="red">actually disgusted by women's.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `and <span class="red">feels the same about women's.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `and is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and ${he} is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 35) {
+				r += `${He} is <span class="red">finds most men unattractive,</span> `;
+				if (child.attrXX <= 5) {
+					r += `and is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `and is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `and is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and ${he} is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 65) {
+				r += `${He}'s indifferent to sex with men, `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">actually unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and feels the same about women, too. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 85) {
+				r += `${He} <span class="green">finds men attractive,</span> `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `but is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `and <span class="green">likes women too.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `but <span class="green">likes women even more.</span> `;
+				} else {
+					r += `but is really <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 95) {
+				r += `${He} <span class="green">is aroused by most men,</span> `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `but is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `and <span class="green">likes women too.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `and <span class="green">thinks most women are hot,</span> too. `;
+				} else {
+					r += `but is most <span class="green">passionate about women.</span> `;
+				}
+			} else {
+				r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
+				if (child.attrXX > 95) {
+					r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
+				} else {
+					r += `${He}'s <span class="green">passionate about men,</span> `;
+					if (child.attrXX <= 5) {
+						r += `${He}'s <span class="green">passionate about men,</span> `;
+					} else if (child.attrXX <= 15) {
+						r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+					} else if (child.attrXX <= 35) {
+						r += `but is <span class="red">turned off by women.</span> `;
+					} else if (child.attrXX <= 65) {
+						r += `but is <span class="red">unenthusiastic about women.</span> `;
+					} else if (child.attrXX <= 85) {
+						r += `but is indifferent to women. `;
+					} else if (child.attrXX <= 95) {
+						r += `but also <span class="green">likes women,</span> too. `;
+					} else {
+						r += `but also <span class="green">thinks most women are hot,</span> too. `;
+					}
+				}
 			}
-			r += `. `;
 		} else {
-			r += `barely any muscle in them. `;
+			r += `You do not understand ${his} sexuality very well. `;
 		}
-	}
-
-	r += heel(child);
 
-	r += App.Desc.brand(child, "feet");
-	r += App.Desc.brand(child, "calf");
-	r += App.Desc.brand(child, "ankle");
-	r += App.Desc.brand(child, "extra");
-
-	r += skin(child);
-
-	if (V.saleDescription) {
-		r += accent(child);
-	}
-
-	if (child.markings === "birthmark" && !child.prestige && child.pornPrestige < 2) {
-		r += `${He} has a large, liver-colored birthmark, detracting from ${his} beauty. `;
-	}
-	if (child.skin === "sun tanned") {
-		if (App.Utils.hasNonassignmentSex(child)) {
-			if (child.fetishKnown && child.fetishStrength > 60) {
-				r += `${His} tan is slightly uneven, since ${he} enjoys`;
-				switch (child.fetish) {
-					case "buttslut":
-						r += `letting other tanned slaves share a tanning bed with ${him} so they can sodomize ${him} while ${he} tans. `;
-						break;
-					case "cumslut":
-						r += `letting other tanned slaves share a tanning bed with ${him} so they get oral from ${him} while ${he} tans. `;
-						break;
-					case "sadist":
-						r += `forcing inferior slaves into the tanning beds with ${him} so ${he} can sodomize them while ${he} tans. `;
-						break;
-					case "dom":
-						r += `bringing other slaves into the tanning beds with ${him} so ${he} can fuck them while ${he} tans. `;
-						break;
-					case "masochist":
-					case "submissive":
-						r += `letting other slaves into the tanning beds with ${him} so they can fuck ${him} while ${he} tans. `;
-						break;
-					case "boobs":
-						r += `bringing other slaves into the tanning beds with ${him} so ${he} can tittyfuck them while ${he} tans. `;
-						break;
-					case "pregnancy":
-						if (Math.random() * 100 < V.seeDicks) {
-							r += `letting slaves with dicks into the tanning beds with ${him} so they can cum inside ${him} while ${he} tans. `;
-						}
-						break;
-					default:
-						r += `bringing other slaves into the tanning beds with ${him} to have sex while ${he} tans. `;
-						break;
+		if (!V.saleDescription && !V.eventDescription) {
+			if (canSee(child) && child.attrKnown) {
+				if (child.attrXX > 85 && PC.boobs >= 300) {
+					r += `${His} attraction to women is obvious: ${he} can't seem to stop staring at your breasts. `;
+				} else if (child.attrXY > 85 && PC.dick) {
+					r += `${His} attraction to men is obvious: ${he} can't seem to stop glancing down at your package. `;
+				} else if (child.attrXY > 85 && PC.boobs < 300 && PC.title === 1) {
+					r += `${His} attraction to men is obvious: ${he} can't seem to stop checking out your broad chest. `;
 				}
 			}
 		}
-	}
 
-	if (V.showClothing && !V.saleDescription) {
-		r += ears(child);
-		r += upperFace(child);
-		r += hair(child);
-	} else {
-		r += `${His} hair is ${child.hColor}`;
-		if (child.hColor !== child.eyebrowHColor) {
-			r += `, with ${child.eyebrowHColor} eyebrows`;
-		}
-		r += `. `;
-		if (child.hColor === "red" && child.hLength >= 10) {
-			if (child.markings === "freckles" || (child.markings === "heavily freckled")) {
-				if (skinToneLevel(child.skin) > 5 && skinToneLevel(child) < 10) {
-					r += `It goes perfectly with ${his} ${child.skin} skin and freckles. `;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} is still <span class="red">arrogant</span> at heart, but does ${his} best to hide it out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} is <span class="red">arrogant</span> and seems to think slavery beneath ${him}. `;
+				} else if (child.devotion <= 20) {
+					r += `Despite being well broken, ${he} seems to retain hints of <span class="red">arrogance.</span> `;
+				} else {
+					r += `${He} is <span class="red">bitchy</span> and insults you every chance ${he} gets. `;
 				}
-			}
+				break;
+			case "bitchy":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} is still <span class="red">bitchy</span> at times, but does ${his} best to keep quiet out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} is <span class="red">bitchy</span> and constantly tries to get a word in edgewise. `;
+				} else if (child.devotion <= 20) {
+					r += `Since ${he} is well broken, ${he} tries to confine ${his} <span class="red">bitchy</span> remarks to your other slaves. `;
+				} else {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and resists it as best ${he} can. `;
+				}
+				break;
+			case "liberated":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but usually keeps quiet out of fear. `;
+				} else if (child.devotion < -20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> and rarely misses a chance to complain about it. `;
+				} else if (child.devotion <= 20) {
+					r += `${He} strongly believes that <span class="red">slavery is wrong,</span> but has learned to keep it to ${himself}. `;
+				} else {
+					r += `${He} is <span class="red">devoutly religious,</span> `;
+				}
+				break;
+			case "devout":
+				if (child.devotion < -20 && child.trust >= -20) {
+					r += `and uses ${his} faith as a wellspring of resistance. `;
+				} else if (child.devotion < -20) {
+					r += `and uses ${his} faith as a place of refuge. `;
+				} else if (child.devotion <= 20) {
+					r += `and uses ${his} faith as a private place within ${himself}. `;
+				} else {
+					r += `but has learned to keep ${his} faith private. `;
+				}
+				break;
+			case "odd":
+				r += `${He} behaves <span class="red">oddly,</span> saying and doing random things. `;
+				break;
+			case "hates men":
+				r += `${He} <span class="red">strongly dislikes</span> being around `;
+				if (child.attrXY >= 85 && child.energy >= 40) {
+					r += `men; since ${he} loves the dick, ${he}'s forced to put up with them. `;
+				} else if (child.attrXY >= 65 && child.energy >= 40) {
+					r += `men; since ${he} likes the dick, ${he} reluctantly puts up with them. `;
+				} else {
+					r += `men. `;
+				}
+				break;
+			case "hates women":
+				r += `${He} <span class="red">strongly dislikes</span> being around `;
+				if (child.attrXX >= 85 && child.energy >= 40) {
+					r += `women; since ${he} loves pussy, ${he}'s forced to put up with them. `;
+				} else if (child.attrXX >= 65 && child.energy >= 40) {
+					r += `women; since ${he} likes pussy, ${he} reluctantly puts up with them. `;
+				} else {
+					r += `women. `;
+				}
+				break;
+			case "anorexic":
+				r += `${He} suffers from <span class="red">anorexia.</span> `;
+				break;
+			case "gluttonous":
+				r += `${He} <span class="red">tends to overeat</span> whenever ${he} can, reacting to the rigors of sexual slavery with overeating. `;
+				break;
 		}
-	}
 
-	let pubertyAge = Math.max(child.pubertyAgeXX, child.pubertyAgeXY);
-	if (child.physicalAge < pubertyAge - 2) {
-		r += `${He} is too sexually immature to have armpit hair. `;
-	} else if (child.underArmHStyle === "hairless") {
-		r += `${His} armpits are perfectly smooth and naturally hairless. `;
-	} else if (child.underArmHStyle === "bald") {
-		r += `${His} armpits no longer grow hair, leaving them smooth and hairless. `;
-	} else if (child.underArmHStyle === "waxed") {
-		r += `${His} armpits are waxed and smooth. `;
-	} else if (child.physicalAge < pubertyAge - 1) {
-		r += `${He} has a few ${child.underArmHColor} wisps of armpit hair. `;
-	} else if (child.physicalAge < pubertyAge) {
-		r += `${He} is on the verge of puberty and has a small patch of ${child.underArmHColor} armpit hair. `;
-	} else if (child.underArmHStyle === "shaved") {
-		r += `${His} armpits appear hairless, but closer inspection reveals light, ${child.underArmHColor} stubble. `;
-	} else if (child.underArmHStyle === "neat") {
-		r += `${His} armpit hair is neatly trimmed `;
-		if (!hasAnyArms(child)) {
-			r += `since it is always in full view`;
-		} else {
-			r += ` to not be visible unless ${he} lifts ${his} arms`;
-		}
-		r += `. `;
-	} else if (child.underArmHStyle === "bushy") {
-		r += `${His} ${child.underArmHColor} armpit hair has been allowed to grow freely`;
-		if (!hasAnyArms(child)) {
-			r += ` creating two bushy patches under where ${his} arms used to be`;
-		} else {
-			r += ` and can be seen poking out from under ${his} arms at all times`;
+		switch (child.behavioralQuirk) {
+			case "confident":
+				r += `${He}'s <span class="green">confident,</span> and believes that ${he} has something of value to offer, even as a child. `;
+				break;
+			case "cutting":
+				r += `${He} often has a witty or <span class="green">cutting</span> remark ready, but knows when to keep them to ${himself}. `;
+				break;
+			case "funny":
+				r += `${He}'s <span class="green">funny,</span> often providing a little comic relief. `;
+				break;
+			case "adores men":
+				r += `${He} <span class="green">adores women,</span> and loves spending time with them. `;
+				break;
+			case "adores women":
+				r += `${He} <span class="green">adores men,</span> and loves spending time with them. `;
+				break;
+			case "fitness":
+				r += `${He}'s a <span class="green">fitness fanatic,</span> and almost gets off to a hard workout. `;
+				break;
+			case "insecure":
+				r += `${He}'s <span class="green">insecure,</span> defining ${his} self worth by how much others want to fuck ${him}. `;
+				break;
+			case "sinful":
+				if (arcology.FSChattelRelionist === "unset") {
+					r += `${He}'s delightfully <span class="green">sinful,</span> taking real pleasure in breaking cultural mores. `;
+				} else {
+					r += `${He}'s a devout Chattel Religionist, and is aggressively <span class="green">sinful</span> against old world faiths. ${He} is enthusiastic about slutty religious clothing, and excited by intentional sacrilege like openly using old world religious icons as sex toys or having orgies on altars. `;
+				}
+				break;
+			case "advocate":
+				r += `${He}'s an <span class="green">advocate</span> for slavery, and can articulate what it's done for ${him}. `;
+				break;
 		}
-		r += `. `;
-	}
 
-	if (!child.voice) {
-		r += `${He} is <span class="pink">completely silent,</span> which is understandable, since ${he}'s mute. `;
-	} else {
-		if (child.lips > 95) {
-			r += `${He} is <span class="pink">effectively mute,</span> since ${his} lips are so large that ${he} can no longer speak intelligibly. ${He} can still `;
-			if (child.devotion > 50) {
-				r += `moan`;
-			} else if (child.devotion > 20) {
-				r += `whimper`;
-			} else {
-				r += `scream`;
-			}
-			r += ` through them, though. `;
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `${He} <span class="red">hates</span> oral sex and tries to avoid it. `;
+				break;
+			case "hates anal":
+				r += `${He} <span class="red">hates</span> anal sex and tries to avoid it. `;
+				break;
+			case "hates penetration":
+				r += `${He} <span class="red">hates</span> penetration and tries to avoid it. `;
+				break;
+			case "repressed":
+				r += `${He} is <span class="red">sexually repressed,</span> retaining a fundamental distaste for sex from ${his} upbringing. `;
+				break;
+			case "idealistic":
+				r += `${He} is <span class="red">sexually idealistic,</span> retaining a belief that sex should be based on love and consent. `;
+				break;
+			case "shamefast":
+				r += `${He} is <span class="red">shamefast,</span> suffering crippling anxiety when naked. `;
+				break;
+			case "apathetic":
+				r += `${He} is <span class="red">sexually apathetic,</span> often slipping into inertness during sex. `;
+				break;
+			case "crude":
+				r += `${He} is <span class="red">sexually crude,</span> and has little sense of what partners find disgusting during sex. `;
+				break;
+			case "judgemental":
+				r += `${He} is <span class="red">sexually judgemental,</span> and often denigrates ${his} sexual partners' performance. `;
+				break;
+			case "cum addict":
+				r += `${He}'s a <span class="yellow">cum addict:</span> ${he} has a deep psychological addiction to ${PC.dick ? `semen` : PC.dick && PC.vagina !== 0 ? ` and ` : PC.vagina !== 0 ? `pussyjuice` : ``} and becomes anxious if ${he} goes for a few hours without drinking any. `;
+				break;
+			case "anal addict":
+				r += `${He}'s an <span class="yellow">anal addict:</span> ${he} has a deep psychological need to be fucked in the ass and becomes anxious if ${he} goes for a few hours without anal. `;
+				break;
+			case "attention whore":
+				r += `${He}'s an <span class="yellow">attention whore:</span> shocking and titillating spectators is more important to ${him} than the actual pleasure of sex. `;
+				break;
+			case "breast growth":
+				r += `${He} has a <span class="yellow">breast growth obsession:</span> ${he}'s nearly incapable of believing that ${his} breasts are big enough. `;
+				break;
+			case "abusive":
+				r += `${He}'s sexually <span class="yellow">abusive:</span> ${he} prefers taking sexual pleasure by force to having it offered to ${him}. `;
+				break;
+			case "malicious":
+				r += `${He}'s sexually <span class="yellow">malicious:</span> ${he} gets off on others' anguish. `;
+				break;
+			case "self hating":
+				r += `${He}'s filled with <span class="yellow">self hatred,</span> and is disturbingly willing to comply with things that might hurt ${him}. `;
+				break;
+			case "neglectful":
+				r += `${He}'s sexually <span class="yellow">self neglectful,</span> and often shows no interest in getting off ${himself}. `;
+				break;
+			case "breeder":
+				r += `${He}'s <span class="yellow">obsessed with being bred</span> to the point of fetishizing pregnancy itself as much as any act that leads to it. `;
+				break;
 		}
-	}
 
-	if (V.showBodyMods) {
-		r += piercings.ears(child);
-		r += piercings.nose(child);
-		r += piercings.eyebrows(child);
-		if (child.custom.tattoo !== "" && jsDef(child.custom.tattoo)) {
-			r += `${child.custom.tattoo}`;
+		switch (child.sexualQuirk) {
+			case "gagfuck queen":
+				r += `${He}'s a <span class="green">gagfuck queen:</span> ${he}'s able to safely take a rough facefuck. `;
+				break;
+			case "painal queen":
+				r += `${He}'s a <span class="green">painal queen:</span> ${he} knows exactly how much ${he} can take without getting hurt. `;
+				break;
+			case "strugglefuck queen":
+				r += `${He}'s a <span class="green">strugglefuck queen:</span> ${he} can gauge exactly how much resistance ${his} partners want. `;
+				break;
+			case "tease":
+				r += `${He}'s a <span class="green">tease,</span> and often displays a little flash of ${himself} followed by a blush. `;
+				break;
+			case "romantic":
+				r += `${He}'s a <span class="green">romantic,</span> and persists in innocent pleasure in the closeness of sex. `;
+				break;
+			case "perverted":
+				r += `${He}'s <span class="green">perverted,</span> and enjoys breaking sexual boundaries. `;
+				break;
+			case "caring":
+				r += `${He}'s <span class="green">caring,</span> and enjoys bringing partners pleasure more than getting off ${himself}. `;
+				break;
+			case "unflinching":
+				r += `${He}'s <span class="green">unflinching,</span> willing to do anything, even by the standards of sex slaves. `;
+				break;
+			case "size queen":
+				r += `${He}'s <span class="green">a size queen;</span> preferring big cock is almost ${his} trademark. `;
+				break;
 		}
-	}
-
-	r += face(child);
-	r += mouth(child);
 
-	if (V.showClothing && !V.saleDescription) {
-		r += collar(child);
-		if (child.relationship > 4) { // TODO: will children be able to get married?
-			if (hasLeftArm(child)) {
-				r += `${He} has a simple gold band on the little finger of ${his} left hand. `;
-			} else if (hasRightArm(child)) {
-				r += `${He} has a simple gold band on the little finger of ${his} right hand. `;
-			} else {
-				r += `${He} has a simple gold band on a length of chain around ${his} neck. `;
-			}
-		} else if (child.relationship === -3) {
-			if (hasLeftArm(child)) {
-				r += `${He} has a simple steel band on the little finger of ${his} left hand. `;
-			} else if (hasRightArm(child)) {
-				r += `${He} has a simple steel band on the little finger of ${his} right hand. `;
-			} else {
-				r += `${He} has a simple steel band on a length of cord around ${his} neck. `;
+		if (child.fetishKnown) {
+			switch (child.fetish) {
+				case "submissive":
+					if (child.sexualFlaw === "apathetic") {
+						r += `This sexual apathy plays into ${his} preference for <span class="lightcoral">submission.</span> `;
+					} else if (child.behavioralFlaw === "arrogant") {
+						r += `${His} arrogance is really just a thin shell to protect ${his} true need to <span class="lightcoral">submit.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s an extreme <span class="lightcoral">submissive,</span> and relishes the strictures of slavery. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He}'s a confirmed <span class="lightcoral">submissive,</span> and enjoys the strictures of slavery. `;
+					} else {
+						r += `${He} has <span class="lightcoral">submissive</span> tendencies, and likes the strictures of slavery. `;
+					}
+					break;
+				case "cumslut":
+					if (child.sexualFlaw === "hates oral") {
+						r += `${He}'s torn between ${his} <span class="lightcoral">love of semen</span> and ${his} dislike of having cocks in ${his} mouth. `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a <span class="lightcoral">cumslut,</span> and loves giving blowjobs and receiving facials. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">prefers giving oral,</span> and enjoys sucking dick and receiving facials. `;
+					} else {
+						r += `${He} has an <span class="lightcoral">oral fixation,</span> and likes giving blowjobs and receiving facials. `;
+					}
+					break;
+				case "humiliation":
+					if (child.behavioralFlaw === "bitchy") {
+						r += `${His} bitchiness is really just an expression of ${his} deep need to be <span class="lightcoral">humiliated</span> ${himself}. `;
+					} else if (child.sexualFlaw === "shamefast") {
+						r += `${His} shame is genuine, and it is with real self-loathing that ${he} <span class="lightcoral">gets off on humiliation.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a slut for <span class="lightcoral">humiliation,</span> and gets off on having others see ${his} enslavement. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} enjoys <span class="lightcoral">humiliating</span> sex. `;
+					} else {
+						r += `${He} likes <span class="lightcoral">embarrassing</span> sex. `;
+					}
+					break;
+				case "buttslut":
+					if (child.sexualFlaw === "hates anal") {
+						r += `${His} hatred is just pretense to cover ${his} shame about how much ${he} really loves getting <span class="lightcoral">fucked in the butt.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He}'s a <span class="lightcoral">buttslut,</span> happy to have anyone put anything up ${his} ass. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">prefers anal.</span> `;
+					} else {
+						r += `${He} has an <span class="lightcoral">anal fixation.</span> `;
+					}
+					break;
+				case "boobs":
+					if (child.fetishStrength > 95) {
+						r += `${He} <span class="lightcoral">prefers mammary intercourse</span> to any other kind of sex, and readily climaxes to nipple stimulation. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} enjoys <span class="lightcoral">breast play,</span> and is rapidly aroused by nipple stimulation. `;
+					} else {
+						r += `${He} <span class="lightcoral">really likes boobs,</span> ${hers} and others. `;
+					}
+					break;
+				case "pregnancy":
+					if (child.fetishStrength > 95) {
+						r += `${He} has a <span class="lightcoral">pregnancy fetish,</span> and finds anything related to reproduction sexy. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} has an <span class="lightcoral">impregnation fantasy,</span> and enjoys bareback sex. `;
+					} else {
+						r += `${He} has a recurring <span class="lightcoral">impregnation fantasy.</span> `;
+					}
+					break;
+				case "dom":
+					if (child.sexualFlaw === "apathetic") {
+						r += `${He} is at war with ${himself}, since ${his} habitual apathy during sex barely masks a desire to <span class="lightcoral">dominate.</span> `;
+					} else if (child.fetishStrength > 95) {
+						r += `${He} is a <span class="lightcoral">complete dom;</span> with other slaves this is expressed as a strong preference to top, and with ${his} betters ${he}'s an almost competitive lover. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} likes to take an active, powerful role in sex; with other slaves this is expressed as <span class="lightcoral">dominance,</span> and with ${his} betters ${he}'s a very energetic lover. `;
+					} else {
+						r += `${He} prefers to take a <span class="lightcoral">dominant</span> sexual role. `;
+					}
+					break;
+				case "sadist":
+					if (child.fetishStrength > 95) {
+						r += `${He} is an <span class="lightcoral">aggressive sadist;</span> ${he}'s constantly plotting to control, abuse, and hurt other slaves. `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} has <span class="lightcoral">sadistic tendencies;</span> ${he} enjoys watching other slaves in pain, but truly loves causing pain ${himself}. `;
+					} else {
+						r += `${He} gets off on <span class="lightcoral">the suffering of others;</span> ${he} enjoys watching other slaves in pain. `;
+					}
+					break;
+				case "masochist":
+					if (child.fetishStrength > 95) {
+						r += `${He} is a <span class="lightcoral">pain slut.</span> `;
+					} else if (child.fetishStrength > 60) {
+						r += `${He} <span class="lightcoral">gets off on pain,</span> showing strong masochistic tendencies. `;
+					} else {
+						r += `${He} <span class="lightcoral">doesn't mind pain,</span> and shows some masochistic tendencies. `;
+					}
+					break;
+				default:
+					r += `${His} sexual tastes are <span class="pink">quite normal.</span> `;
+					break;
 			}
+		} else {
+			r += `${His} fetishes, if any, are not known to you. `;
 		}
-	}
-
-	r += nails(child);
-	if (V.showBodyMods) {
-		r += tats.back(child);
-		r += tats.shoulders(child);
-		r += tats.arms(child);
-	}
-
-	if (child.minorInjury !== 0 && child.minorInjury !== "sore ass") {
-		r += `${He} is sporting a <span class="red">${child.minorInjury},</span> covered by makeup. `;
-	}
-
-	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-
-	r += App.Desc.boobs(child);
-	r += App.Desc.boobsExtra(child);
-	if (V.showBodyMods) {
-		r += tats.boobs(child);
-	}
-	r += App.Desc.brand(child, "chest");
-	r += App.Desc.brand(child, "breast");
-	r += shoulders(child);
-	r += App.Desc.nipples(child);
-	if (V.showBodyMods) {
-		r += piercings.nipples(child);
-	}
-	r += App.Desc.areola(child);
-
-	if (child.inflation > 0) {
-		V.activeSlave = child;
-		r += `<<BellyInflationDescription>> `; // TODO:
-	} else if (child.bellyImplant >= 2000) {
-		V.activeSlave = child;
-		r += `<<BellyImplantDescription>> `; // TODO:
-	} else {
-		V.activeSlave = child;
-		r += `<<BellyDescription>> `; // TODO:
-	}
-	r += butt(child);
-
-	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-
-	r += crotch(child);
-	r += dick(child);
-	r += vagina(child);
-	r += anus(child);
 
-	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-
-	switch (child.drugs) {
-		case "super fertility drugs":
-			if (isFertile(child) && !child.preg) {
-				r += `${He} is constantly dripping sexual fluids and ${his} breasts and belly are slightly swollen. The super fertility drugs have ${him} ready to be impregnated. `;
-			}
-			break;
-		case "fertility drugs":
-			if (isFertile(child) && !child.preg) {
-				r += `${He} smells of sexual fluids and ${his} breasts are slightly swollen. The fertility drugs have ${him} ready to be impregnated. `;
-			}
-			break;
-		case "intensive breast injections":
-		case "hyper breast injections":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} tits uncomfortably` : `squirms under the unfamiliar weight on ${his} chest`}. The ${child.drugs === "hyper breast injections" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully stretching ${his} breasts as the mammary and adipose tissue underneath grows explosively. `;
-			break;
-		case "nipple enhancers":
-				r += `${He} ${hasAnyArms(child) ? `massages ${his} nipples uncomfortably` : `squirms in respose to the discomfort in ${his} nipples`}. The A-HGH must be having an effect, painfully causing ${his} body to expand ${his} nipples. `;
-				break;
-		case "intensive butt injections":
-		case "hyper butt injections":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} butt uncomfortably` : `squirms under the unfamiliar weight on ${his} backside`}. The ${child.drugs === "hyper butt injections" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully stretching ${his} buttocks as the muscular and adipose tissue underneath grows explosively. `;
-			break;
-		case "intensive penis enhancement":
-		case "hyper penis enhancement":
-			`${He} ${hasAnyArms(child) ? `massages ${his} ${child.dick > 0 ? `dick` : `clit`} uncomfortably` : `squirms under the unfamiliar weight in ${his} ${child.dick > 0 ? `dick` : `clit`}`}. The ${child.drugs === "hyper penis enhancement" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully lengthening and thickening ${his} ${child.dick > 0 ? `dick` : `clit`}. `;
-			break;
-		case "intensive testicle enhancement":
-		case "hyper testicle enhancement":
-			r += `${He} ${hasAnyArms(child) ? `${He} massages ${his} balls uncomfortably` : `${He} squirms under the unfamiliar pressure in ${his} balls`} as `;
-			if (child.drugs === "hyper testicle enhancement") {
-				if (child.balls < 20) {
-					r += ` as cum drools from the tip of ${his} dick. `;
-				} else if (child.balls >= 50) {
-					r += ` as a thick cascade of cum pours from the tip of ${his} cock. `;
-				} else if (child.balls >= 37) {
-					r += ` as cum freely flows from the tip of ${his} cock, pooling under ${him}. `;
-				} else if (child.balls >= 20) {
-					r += ` as precum pools under ${him}. `;
-				}
-				r += `The HA-HGH must be having an effect, painfully expanding ${his} testicles. `;
-			} else {
-				r += `a bead of cum forms on tip of ${his} dick. The A-HGH must be having an effect, painfully expanding ${his} testicles. `;
-			}
-			break;
-		case "female hormone injections":
-		case "male hormore injections":
-			r += `${He} looks very ill, likely a side effect of the extreme hormone injections. `;
-			break;
-		case "appetite suppresors":
-			r += `Despite how little ${he} has been eating lately, ${his} stomach barely growls at all. `;
-			break;
-		case "penis atrophiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} dick uncomfortably` : `squirms in respose to the discomfort in ${his} dick`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} dick. `;
-			break;
-		case "testicle atropiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} balls uncomfortably` : `squirms in respose to the discomfort in ${his} balls`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} balls. `;
-			break;
-		case "clitoris atrophiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} clit uncomfortably` : `squirms in respose to the discomfort in ${his} clit`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} clit. `;
-			break;
-		case "labia atrophiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} pussy uncomfortably` : `squirms in respose to the discomfort in ${his} pussy`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} pussy. `;
-			break;
-		case "nipple atrophiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} nipples uncomfortably` : `squirms in respose to the discomfort in ${his} nipples`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} nipples. `;
-			break;
-		case "lip atrophiers":
-			r += `${He} ${hasAnyArms(child) ? `massages ${his} lips uncomfortably` : `licks ${his} lips uncomfortably`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} lips. `;
-			break;
-		case "breast redistributors":
-		case "butt redistributors":
-			r += `${He} ${hasAnyArms(child) ? `pinches at the fat building on ${his} belly and lets off a sigh` : `squirms under the added weight building on ${his} belly`}. The RDST-D must be having an effect, encouraging ${his} body to redistribute ${his} ${child.drugs === "breast redistributors" ? `breasts'` : `buttocks'`} adipose tissue to ${his} middle. `;
-			break;
-		case "sag-B-gone":
-			r += `${His} breasts are shiny from the layer of anti-sag cream rubbed onto them. They might be a little perkier, or not. `;
-			break;
-	}
+		if (child.attrKnown) {
+			if (child.energy > 95) {
+				r += `${He}'s a <span class="green">nymphomaniac.</span> `;
+			} else if (child.energy > 80) {
+				r += `${He}'s a <span class="green">sex addict.</span> `;
+			} else if (child.energy > 60) {
+				r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
+			} else if (child.energy > 40) {
+				r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
+			} else if (child.energy > 20) {
+				r += `${He} has a <span class="red">weak sex drive.</span> `;
+			} else {
+				r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
+			}
 
-	if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiacs") {
-		if (child.inflationType === "aphrodisiacs") {
-			r += `${He}'s literally full of`;
-			if (isAmputee(child)) {
-				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
-			} else if (child.chastityVagina) {
-				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
-			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
-				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} `;
-				if (child.anus === 0) {
-					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
+			if (child.attrXY <= 5) {
+				if (child.attrXX <= 5) {
+					r += `${He}'s a <span class="green">nymphomaniac.</span> `;
 				} else {
-					r += `uses `;
-					if (child.anus > 2) {
-						r += `${his} entire hand, formed into a beak shape,`;
-					} else if (child.anus > 1) {
-						r += `two fingers`;
+					r += `${He}'s a <span class="green">sex addict.</span> `;
+					if (child.attrXX <= 15) {
+						r += `${He} has a <span class="green">powerful appetite for sex.</span> `;
+					} else if (child.attrXX <= 35) {
+						r += `${He} has a <span class="yellow">healthy sex drive.</span> `;
+					} else if (child.attrXX <= 65) {
+						r += `${He} has a <span class="red">weak sex drive.</span> `;
+					} else if (child.attrXX <= 85) {
+						r += `${He}'s <span class="red">frigid,</span> with little interest in sex. `;
+					} else if (child.attrXX <= 95) {
+						r += `${He} <span class="red">finds both men's and women's intimate areas quite repulsive,</span> an unfortunate state of affairs! `;
 					} else {
-						r += `a finger`;
+						r += `${He} <span class="red">finds men sexually disgusting,</span> `;
 					}
-					r += ` to fuck ${his} own ass. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
 				}
-			} else if (child.rules.release.masturbation === 1) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
-			} else if (child.dick !== 0) {
-				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if (child.vagina === -1) {
-				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} asshole, desperately hoping you'll fuck ${his} only real source of relief. `;
+			} else if (child.attrXY <= 15) {
+				r += `${He} <span class="red">considers men's bodies a turnoff,</span> `;
+				if (child.attrXX <= 5) {
+					r += `and is <span class="red">actually disgusted by women's.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `and <span class="red">feels the same about women's.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `and is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and ${he} is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 35) {
+				r += `${He} is <span class="red">finds most men unattractive,</span> `;
+				if (child.attrXX <= 5) {
+					r += `and is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `and is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `and is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and ${he} is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 65) {
+				r += `${He}'s indifferent to sex with men, `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">actually unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `and feels the same about women, too. `;
+				} else if (child.attrXX <= 85) {
+					r += `but <span class="green">is attracted to women.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `<span class="green">strongly preferring women.</span> `;
+				} else {
+					r += `but is <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 85) {
+				r += `${He} <span class="green">finds men attractive,</span> `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `but is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `and <span class="green">likes women too.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `but <span class="green">likes women even more.</span> `;
+				} else {
+					r += `but is really <span class="green">passionate about women.</span> `;
+				}
+			} else if (child.attrXY <= 95) {
+				r += `${He} <span class="green">is aroused by most men,</span> `;
+				if (child.attrXX <= 5) {
+					r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+				} else if (child.attrXX <= 15) {
+					r += `but is <span class="red">turned off by women.</span> `;
+				} else if (child.attrXX <= 35) {
+					r += `but is <span class="red">unenthusiastic about women.</span> `;
+				} else if (child.attrXX <= 65) {
+					r += `but is indifferent to women. `;
+				} else if (child.attrXX <= 85) {
+					r += `and <span class="green">likes women too.</span> `;
+				} else if (child.attrXX <= 95) {
+					r += `and <span class="green">thinks most women are hot,</span> too. `;
+				} else {
+					r += `but is most <span class="green">passionate about women.</span> `;
+				}
 			} else {
-				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} pussy, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. `;
-			}
-		} else if (child.aphrodisiacs > 1) {
-			r += `${He}'s swimming in`;
-			if (isAmputee(child)) {
-				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
-			} else if (child.chastityVagina) {
-				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
-				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he}`;
-				if (child.anus === 0) {
-					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. `;
+				r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
+				if (child.attrXX > 95) {
+					r += `${He}'s <span class="green">omnisexual,</span> and is passionately attracted to nearly everyone. `;
 				} else {
-					r += `uses `;
-					if (child.anus > 2) {
-						r += `${his} entire hand, formed into a beak shape,`;
-					} else if (child.anus > 1) {
-						r += `two fingers`;
+					r += `${He}'s <span class="green">passionate about men,</span> `;
+					if (child.attrXX <= 5) {
+						r += `${He}'s <span class="green">passionate about men,</span> `;
+					} else if (child.attrXX <= 15) {
+						r += `but is <span class="red">disgusted by the idea of intimacy with a woman.</span> `;
+					} else if (child.attrXX <= 35) {
+						r += `but is <span class="red">turned off by women.</span> `;
+					} else if (child.attrXX <= 65) {
+						r += `but is <span class="red">unenthusiastic about women.</span> `;
+					} else if (child.attrXX <= 85) {
+						r += `but is indifferent to women. `;
+					} else if (child.attrXX <= 95) {
+						r += `but also <span class="green">likes women,</span> too. `;
 					} else {
-						r += `a finger`;
+						r += `but also <span class="green">thinks most women are hot,</span> too. `;
 					}
-					r += ` to fuck ${his} own ass. `;
 				}
-			} else if (child.rules.release.masturbation === 1) {
-				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
-			} else if (child.dick !== 0) {
-				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if (child.vagina === -1) {
-				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} asshole, desperately hoping you'll fuck ${his} only real source of relief. `;
-			} else {
-				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} pussy, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. `;
 			}
 		} else {
-			if (isAmputee(child)) {
-				r += `${He}'s on aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with sexual frustration. `;
-			} else if (child.chastityVagina) {
-				r += `${He}'s on aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with sexual frustration. `;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
-				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft with one hand while the other pinches a nipple. `;
-			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
-				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft and pussy with one hand while the other pinches a nipple. `;
-			} else if (child.rules.release.masturbation === 1) {
-				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} pussy with one hand while the other pinches a nipple. `;
-			} else if (child.dick !== 0 && canPenetrate(child)) {
-				r += `${He}'s on aphrodisiacs and is not allowed to masturbate, so as ${he} obeys your commands ${he} shifts ${his} weight uncomfortably. ${His} erect dick sways as ${he} does. `;
-			} else {
-				r += `${He}'s on aphrodisiacs and is not allowed to masturbate, so as ${he} obeys your commands ${he} shifts ${his} weight uncomfortably. `;
-			}
+			r += `You do not understand ${his} sexuality very well. `;
 		}
 	}
 
-	if (child.addict > 0 && child.addict < 3) {
-		r += `${He} is a new <span class="cyan">aphrodisiac addict.</span> `;
-	} else if (child.addict > 0 && child.addict < 10) {
-		r += `${He} is a confirmed <span class="cyan">aphrodisiac addict.</span> `;
-	} else if (child.addict > 0) {
-		r += `${He} is completely <span class="cyan">dependent on aphrodisiacs,</span> and it is unlikely you will ever be able to wean ${him} off them. `;
+	if (!V.saleDescription && !V.eventDescription) {
+		if (canSee(child) && child.attrKnown) {
+			if (child.attrXX > 85 && PC.boobs >= 300) {
+				r += `${His} attraction to women is obvious: ${he} can't seem to stop staring at your breasts. `;
+			} else if (child.attrXY > 85 && PC.dick) {
+				r += `${His} attraction to men is obvious: ${he} can't seem to stop glancing down at your package. `;
+			} else if (child.attrXY > 85 && PC.boobs < 300 && PC.title === 1) {
+				r += `${His} attraction to men is obvious: ${he} can't seem to stop checking out your broad chest. `;
+			}
+		}
 	}
 
-	V.saleDescription = 0, V.applyLaw = 0;
-
-	return r;
-};
-
-/* UTILITY */
-
-/**
- * Displays a list of the children in the Nursery
- * @returns {string}
- */
-App.Facilities.Nursery.childList = function() {
-	"use strict";
-	const
-		cribs = V.cribs;
+	r += App.Desc.brand(child, "cheek");
+	r += App.Desc.brand(child, "ear");
+	r += App.Desc.brand(child, "neck");
 
-	let
-		r = ``;
+	r += App.Desc.family(child) + ' ';
 
-	for (let i = 0; i < cribs.length; i++) {
-		r += `<hr style="margin:0">`;
-		const
-			child = cribs[i],
-			weeksOwned = V.week - child.weekAcquired,
-			weeksLeft = (V.targetAgeNursery * 52) - weeksOwned,
-			he = child.genes === "XX" ? `she` : `he`,
-			him = child.genes === "XX" ? `her` : 'him',
-			He = capFirstChar(he);
-
-		if (child.actualAge < 3) {
-			r += App.UI.passageLink(`${SlaveFullName(child)}`, "Infant Interact", `$activeChild = $cribs[${i}]`);	// FIXME: figure out why "V.activeChild = child" doesn't work
-			r += App.Facilities.Nursery.InfantSummary(child);
-		} else {
-			r += App.UI.passageLink(`${SlaveFullName(child)}`, "Child Interact", `$activeChild = $cribs[${i}]`);
-			r += App.Facilities.Nursery.ChildSummary(child);
+	if (child.relationship >= 3 && totalRelatives(child) > 0) {
+		const lover = getSlave(child.relationshipTarget);
+		if (jsDef(lover)) {
+			const relTerm = relativeTerm($activeSlave, _lover);
+			if (relTerm !== null) {
+				r += `${He} is in an <span class="lightgreen">incestuous relationship with ${his} ${relTerm}, ${SlaveFullName(lover)}.</span> `;
+			}
+		}
+	} else if (child.relationship <= -2) {
+		const relTerm = relativeTerm($activeSlave, $PC);
+		if (relTerm !== null) {
+			r += `${He} is in an <span class="lightgreen">incestuous relationship with ${his} ${relTerm}, you.</span> `;
 		}
+	}
 
-		if (child.actualAge >= 18) {
-			V.nurseryOldID = child.ID;
-			if (child.targetLocation === "freedom") {
-				V.freedSlaves.push(cribs[i]);
+	if (child.rivalry) {
+		let lcd = V.slaveIndices[child.rivalryTarget];
+		if (jsDef(lcd)) {
+			r += `${He} `;
+			if (child.rivalry <= 1) {
+				r += `<span class="lightsalmon">dislikes</span> ${SlaveFullName(slaves[Lcd])}. `;
+			} else if (child.rivalry <= 2) {
+				r += `is ${SlaveFullName(slaves[Lcd])}>>'s <span class="lightsalmon">rival.</span> `;
+			} else {
+				r += `<span class="lightsalmon">bitterly hates</span> ${SlaveFullName(slaves[Lcd])}>>. `;
 			}
-			V.readySlave = cribs.pluck([i], [i]);
-			r += `<<goto "Nursery Retrieval Workaround">>`;
-			return r;
 		}
+	}
+	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp; `;
+	// TODO: rework this subsection
 
-		if (child.growTime <= 0 || child.actualAge >= V.targetAgeNursery) {
-			r += `<br>`;
-			r += `${He} is ready to leave ${V.nurseryName} and ${child.targetLocation === "slavery" ? `join your ménage` : `become a free citizen`}. `;
-			r += `<<link ${child.targetLocation === "slavery" ? `"Introduce ${him} to life as a slave"` : `"Set ${him} free"`} "Nursery Retrieval Workaround">>`;	// FIXME: figure out why App.UI.passageLink doesn't work here
-			V.readySlave = cribs.pluck([i], [i]);
-			r += `<</link>>`;
+	/*	for possible future inclusion
+	if (child.prestige > 0) {
+		if (child.prestigeDesc) {
+			r += `${child.prestigeDesc} `;
+		}
+		if (child.prestige > 2) {
+			r += `It is extremely prestigious to own ${him}. `;
+		} else if (child.prestige > 1) {
+			r += `It is quite prestigious to own ${him}. `;
 		} else {
-			r += `<br>`;
-			r += `${He} is to continue staying in ${V.nurseryName} for another ${years(weeksLeft)}.
-				${He} is destined for ${child.targetLocation} once ${he} is of age. `;
+			r += `It is fairly prestigious to own ${him}. `;
 		}
 	}
 
-	return r;
-};
-
-/**
- * Converts the infant object into a new child object
- * @param {object} child
- */
-App.Facilities.Nursery.infantToChild = function infantToChild(child) {
-	child.abortionTat = -1,
-	child.accent = 0,
-	child.addict = 0,
-	child.ageImplant = 0,
-	child.arm = {
-		left: new App.Entity.LimbState(),
-		right: new App.Entity.LimbState()
-	},
-	child.leg = {
-		left: new App.Entity.LimbState(),
-		right: new App.Entity.LimbState()
-	},
-	child.analArea = 0,
-	child.anus = 0,
-	child.anusPiercing = 0,
-	child.anusTat = 0,
-	child.aphrodisiacs = 0,
-	child.areolae = 0,
-	child.areolaePiercing = 0,
-	child.areolaeShape = "circle",
-	child.armAccessory = "none",
-	child.armsTat = 0,
-	child.attrKnown = 0,
-	child.attrXX = 0,
-	child.attrXY = 0,
-	child.backAccessory = "none",
-	child.backTat = 0,
-	child.bald = 0,
-	child.balls = 0,
-	child.behavioralFlaw = "none",
-	child.belly = 0,
-	child.bellyAccessory = "none",
-	child.bellyFluid = 0,
-	child.bellyImplant = -1,
-	child.bellyPreg = 0,
-	child.bellySag = 0,
-	child.bellySagPreg = 0,
-	child.bellyTat = 0,
-	child.bodySwap = 0,
-	child.boobShape = "normal",
-	child.boobs = jsRandom(200, 500),
-	child.boobsImplant = 0,
-	child.boobsImplantType = "none",
-	child.boobsTat = 0,
-	child.brand = {},
-	child.breastMesh = 0,
-	child.breedingMark = 0,
-	child.butt = jsRandom(0, 3),
-	child.buttImplant = 0,
-	child.buttImplantType = "none",
-	child.buttTat = 0,
-	child.buttplug = "none",
-	child.buttplugAttachment = "none",
-	child.canRecruit = 0,
-	child.chastityAnus = 0,
-	child.chastityPenis = 0,
-	child.chastityVagina = 0,
-	child.chem = 0,
-	child.childsFathered = 0,
-	child.childsKnockedUp = 0,
-	child.choosesOwnClothes = 0,
-	child.clit = jsRandom(0, 2),
-	child.clitPiercing = 0,
-	child.clone = 0,
-	child.clothes = "no clothing",
-	child.collar = "none",
-	child.corsetPiercing = 0,
-	child.counter = {
-		PCChildrenFathered: 0,
-		PCKnockedUp: 0,
-		anal: 0,
-		births: 0,
-		birthsTotal: 0,
-		cum: 0,
-		laborCount: 0,
-		mammary: 0,
-		milk: 0,
-		oral: 0,
-		penetrative: 0,
-		pitKills: 0,
-		publicUse: 0,
-		slavesFathered: 0,
-		slavesKnockedUp: 0,
-		vaginal: 0
-	},
-	child.curatives = 0,
-	child.custom = {
-		desc: "",
-		hairVector: "",
-		image: null,
-		label: "",
-		tattoo: "",
-		title: "",
-		titleLisp: ""
-	},
-	child.daughters = 0,
-	child.devotion = 40,	// TODO:
-	child.dick = 0,
-	child.dickAccessory = "none",
-	child.dickPiercing = 0,
-	child.dickTat = 0,
-	child.diet = "healthy",
-	child.dietCum = 0,
-	child.dietMilk = 0,
-	child.drugs = "no drugs",
-	child.earImplant = 0,
-	child.earPiercing = 0,
-	child.earShape = "normal",
-	child.earT = "none",
-	child.earTColor = "hairless",
-	child.earwear = "none",
-	child.electrolarynx = 0,
-	child.energy = 0,
-	child.eyebrowFullness = "natural",
-	child.eyebrowHStyle = "natural",
-	child.eyebrowPiercing = 0,
-	child.eyewear = "none",
-	child.faceImplant = 0,
-	child.fertKnown = 1,
-	child.fertPeak = 0,
-	child.fetishKnown = 0,
-	child.fetishStrength = 0,
-	child.foreskin = 0,
-	child.geneMods = {
-		NCS: 0,
-		rapidCellGrowth: 0
-	},
-	child.geneticQuirks = {
-		albinism: 0,
-		androgyny: 0,
-		dwarfism: 0,
-		fertility: 0,
-		gigantism: 0,
-		gigantomastia: 0,
-		heterochromia: 0,
-		hyperFertility: 0,
-		mGain: 0,
-		mLoss: 0,
-		macromastia: 0,
-		pFace: 0,
-		rearLipedema: 0,
-		superfetation: 0,
-		uFace: 0,
-		wGain: 0,
-		wLoss: 0,
-		wellHung: 0
-	},
-	child.genetics = {},
-	child.hLength = jsRandom(30, 70),
-	child.hStyle = "long",
-	child.haircuts = 0,
-	child.headAccessory = "none",
-	child.health = {};
-	setHealth(child, jsRandom(80, 100), 0, 0, 0, 0);
-	child.hears = 0,
-	child.heels = 0,
-	child.height = jsRandom(85, 105),
-	child.hips = 0,
-	child.hormoneBalance = 0,
-	child.hormones = 0,
-	child.horn = "none",
-	child.hornColor = "none",
-	child.induce = 0,
-	child.induceLactation = 0,
-	child.intelligence = 100,
-	child.intelligenceImplant = 0,
-	child.labia = jsRandom(0, 2),
-	child.labor = 0,
-	child.lactation = 0,
-	child.lactationAdaptation = 0,
-	child.lactationDuration = 0,
-	child.rules = new App.Entity.RuleState(),
-	child.rules.lactation = "none",
-	child.legAccessory = "none",
-	child.legsTat = 0,
-	child.lips = jsRandom(10, 30),
-	child.lipsImplant = 0,
-	child.lipsPiercing = 0,
-	child.lipsTat = 0,
-	child.rules.living = "normal",
-	child.makeup = 0,
-	child.markings = "none",
-	child.minorInjury = 0,
-	child.mpreg = 0,
-	child.muscles = jsRandom(-10, 10),
-	child.nails = 0,
-	child.navelPiercing = 0,
-	child.need = 0,
-	child.nipples = "cute",
-	child.nipplesAccessory = "none",
-	child.nipplesPiercing = 0,
-	child.nosePiercing = 0,
-	child.oldDevotion = 0,	// TODO:
-	child.oldTrust = 0,		// TODO:
-	child.onDiet = 0,
-	child.origRace = child.race,
-	child.eye = new App.Entity.EyeState(),
-	child.eye.origColor = child.eyeColor,
-	child.origHColor = child.hColor,
-	child.origSkin = child.skin,
-	child.ovaries = child.genes === "XX" ? 1 : 0,
-	child.ovaryAge = child.actualAge,
-	/* eslint-disable camelcase */
-	child.override_Arm_H_Color = 0,
-	child.override_Brow_H_Color = 0,
-	child.override_Eye_Color = 0,
-	child.override_H_Color = 0,
-	child.override_Pubic_H_Color = 0,
-	child.override_Race = 0,
-	child.override_Skin = 0,
-	/* eslint-enable camelcase */
-	child.physicalAge = child.actualAge,
-	child.porn = new App.Entity.SlavePornPerformanceState(),
-	child.pregAdaptation = 50,
-	child.pregControl = "none",
-	child.pregData = {
-		drugsEffect: 1,
-		fetusRate: [1, 1, 1, 0.64, 0.6513, 0.6459, 0.644, 0.6393, 0.58, 0.51],
-		fetusSize: [1, 3, 16, 25.6, 51, 60, 67.5, 71.6, 129.5, 130],
-		fetusWeek: [0, 9, 20, 20, 40, 52, 64, 80, 384, 99999],
-		minLiveBirth: 32,
-		normalBirth: 40,
-		normalOvaMax: 1,
-		normalOvaMin: 1,
-		sizeType: 0,
-		type: "human"
-	},
-	child.pregKnown = 0,
-	child.pregSource = 0,
-	child.pregType = 0,
-	child.pregWeek = 0,
-	child.premature = 0,
-	child.prematureBirth = 0,
-	child.prestige = 0,
-	child.prostate = 0,
-	child.pubertyAgeXX = 10,
-	child.pubertyAgeXY = 12,
-	child.pubertyXX = 1,
-	child.pubicHColor = "black",
-	child.pubicHStyle = "bushy",
-	child.readyOva = 0,
-	child.rearAccessory = "none",
-	child.relationship = 0,
-	child.rules.relationship = "restrictive",	// TODO:
-	child.relationshipTarget = 0,
-	child.rules.release = new App.Entity.ReleaseRulesState(),	// TODO:
-	child.rivalry = 0,
-	child.rivalryTarget = 0,
-	child.rudeTitle = 0,
-	child.scars = 0,
-	child.scrotum = 0,
-	child.shoes = "none",
-	child.shoulders = 0,
-	child.shouldersTat = 0,
-	child.sisters = 0,
-	child.skill = {
-		DJ: 0,
-		anal: 0,
-		attendant: 0,
-		bodyguard: 0,
-		combat: 0,
-		entertainer: 0,
-		entertainment: 0,
-		farmer: 0,
-		headGirl: 0,
-		madam: 0,
-		matron: 0,
-		milkmaid: 0,
-		nurse: 0,
-		oral: 0,
-		recruiter: 0,
-		servant: 0,
-		stewardess: 0,
-		teacher: 0,
-		vaginal: 0,
-		wardeness: 0,
-		whore: 0,
-		whoring: 8
-	},
-	child.smells = 0,
-	child.rules.speech = "restrictive",	// TODO:
-	child.stampTat = 0,
-	child.rules.punishment = "situational",	// TODO:
-	child.rules.reward = "situational",	// TODO:
-	child.tail = "none",
-	child.tailColor = "none",
-	child.tailShape = "none",
-	child.tastes = 0,
-	child.teeth = "baby",
-	child.tonguePiercing = 0,
-	child.training = 0,
-	child.trust = 0,	// TODO:
-	child.underArmHStyle = "natural",
-	child.vagina = child.genes === "XX" ? 0 : -1,
-	child.vaginaLube = 0,
-	child.vaginaPiercing = 0,
-	child.vaginaTat = 0,
-	child.vaginalAccessory = "none",
-	child.vaginalAttachment = "none",
-	child.vaginalAttachments = "none",
-	child.vasectomy = 0,
-	child.visualAge = child.actualAge,
-	child.voice = 1,
-	child.voiceImplant = 0,
-	child.waist = 0,
-	child.weeksLeft = 0,
-	child.weight = jsRandom(-10, 10),
-	child.womb = [],
-	child.wombImplant = "none";
-	resetEyeColor(child, "both");
-	generatePronouns(child);
-
-	return child;
-};
-
-/**
- * Allows the player to name the infant
- * FIXME: Does not currently work
- * @param {object} child
- * @returns {string}
- */
-App.Facilities.Nursery.nameChild = function nameChild(child) {
-	const
-		PC = V.PC,
-		arcology = V.arcologies[0],
-		girl = child.genes === "XX" ? "girl" : "boy";
-
-	let
-		r = ``,
-		father = 0,
-		mother = 0;
-
-	if (child.father === -1 && child.mother === -1) {
-		father = PC;
-		mother = PC;
-	} else {
-		if (child.father === -1) {
-			father = PC;
-			mother = getSlave(child.mother);
-		} else if (child.mother === -1) {
-			father = getSlave(child.father);
-			mother = PC;
-		} else {
-			father = getSlave(child.father);
-			mother = getSlave(child.mother);
+	if (child.pornPrestige > 0) {
+		if (child.pornPrestigeDesc) {
+			r += `${child.pornPrestigeDesc} `;
 		}
 	}
 
-	function newChildName(child) {
-		const
-			V = State.variable;
-
-		child.birthName = generateName(child.nationality, child.race, child.genes === "XY");
-
-		if (child.genes === "XY" && !V.allowMaleSlaveNames && isMaleName(child.birthName, child.nationality, child.race)) {
-			child.slaveName = generateName(child.nationality, child.race, false);
+	if (child.prestige > 0 || child.pornPrestige > 0) {
+		if (child.pornPrestige > 2) {
+			r += `As such, ${he} tends to gain a following wherever ${he} goes. `;
+		} else if (child.pornPrestige > 1) {
+			r += `As such, ${he} is recognized often. `;
 		} else {
-			child.slaveName = child.birthName;
+			r += `As such, ${he} is recognized occasionally. `;
 		}
 	}
 
-	function parentNames(parent, child) {
-		const
-			slaves = V.slaves;
-
-		let
-			currentSlaveNames = slaves.map(s => s.slaveName),
-			continentNationality;
-
-		child.slaveName = generateName(parent.nationality, parent.race, parent.genes === "XY", sn => !currentSlaveNames.includes(sn));
+	if (child.prestige > 0 || child.pornPrestige > 1) {
+		if (child.markings === "birthmark") {
+			r += `${He} has a large, liver-colored birthmark, but since ${he}'s well known, this uniqueness adds to ${his} beauty rather than detracting from it. `;
+		}
+	}
+	*/
 
-		if (!child.slaveName) {
-			for (let i = 0; i < 10; i++) {
-				continentNationality = hashChoice(V.nationalities);
-				child.slaveName = generateName(continentNationality, child.race, child.genes === "XY", sn => !currentSlaveNames.includes(sn));
+	// TODO: rewrite this to sound more natural
+	if (child.skill.whoring <= 10) {
+		if (child.skill.entertainment <= 10) {
+			if (child.skill.entertainment <= 0) {
+				r += ``;
+			} else {
+				r += `${He} is somewhat entertaining. `;
 			}
+		} else if (child.skill.entertainment <= 30) {
+			r += `${He} is <span class=aquamarine>reasonably entertaining.</span> `;
+		} else if (child.skill.entertainment <= 60) {
+			r += `${He} is a <span class=aquamarine>skilled entertainer.</span> `;
+		} else if (child.skill.entertainment < 100) {
+			r += `${He} is an <span class=aquamarine>expert entertainer.</span> `;
+		} else {
+			r += `${He} is a <span class=aquamarine>master of entertainment.</span> `;
 		}
-		if (!child.slaveName) {
-			child.slaveName = generateName(parent.nationality, parent.race, parent.genes === "XY");
+	} else {
+		if (child.skill.entertainment <= 10) {
+			if (child.skill.entertainment <= 0) {
+				r += ``;
+			} else {
+				r += `${He} is somewhat entertaining and `;
+			}
+		} else if (child.skill.entertainment <= 30) {
+			r += `${He} is <span class=aquamarine>reasonably entertaining</span> and `;
+		} else if (child.skill.entertainment <= 60) {
+			r += `${He} is a <span class=aquamarine>skilled entertainer</span> and `;
+		} else if (child.skill.entertainment < 100) {
+			r += `${He} is an <span class=aquamarine>expert entertainer</span> and `;
+		} else {
+			r += `${He} is a <span class=aquamarine>master of entertainment</span> and `;
 		}
 	}
-
-	r += `You can name the new child, if you so desire. `;
-
-	r += `<br><<textbox "${child.slaveName}" ${child.slaveName}>>`;
-	r += App.UI.passageLink("Commit name", "Nursery Workaround", `${child.birthName = child.slaveName}, ${App.UI.replace("#naming", `You instruct ${V.assistant.name} to register the new ${girl} as "${child.slaveName}" in the slave registry.`)}`);
-	r += `<br>`;
-	r += App.UI.passageLink(`Have your PA assign ${him} a random name`, "Nursery Workaround", `${App.UI.replace("#naming", `${newChildName(child)}<br>${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.`)}`);
-
-	if (arcology.FSPastoralist !== "unset") {
-		if (child.lactation > 0) {
-			r += `<br>
-			<<link "Have your PA assign ${him} a random cow name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.cowSlaveNames.random();
-			child.birthName = child.slaveName;
-			r += `${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-			<</link>>`;
+	if (child.skill.whoring <= 10) {
+		if (child.skill.whoring <= 0) {
+			r += ``;
+		} else {
+			r += `${He} has very little experience in selling ${his} body. `;
 		}
-	}
-	if (arcology.FSChattelReligionist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a random devotional name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.chattelReligionistSlaveNames.random();
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	}
-	if (arcology.FSRomanRevivalist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a random Roman name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.romanSlaveNames.random();
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	} else if (arcology.FSAztecRevivalist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a random Aztec name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.aztecSlaveNames.random();
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	} else if (arcology.FSEgyptianRevivalist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a random ancient Egyptian name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.ancientEgyptianSlaveNames.random();
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	} else if (arcology.FSEdoRevivalist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a random feudal Japanese name">>
-			<<replace "#naming">>`;
-			child.slaveName = setup.edoSlaveNames.random();
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	}
-	if (arcology.FSDegradationist !== "unset") {
-		r += `<br>
-		<<link "Have your PA assign ${him} a degrading name">>
-			<<replace "#naming">>`;
-			DegradingName(child);
-			child.birthName = child.slaveName;
-			`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
-			<</replace>>
-		<</link>>`;
-	}
-	if (mother !== PC && mother !== 0) {
-		App.Utils.setLocalPronouns(mother, 2);
-		if (jsDef(V.Concubine) && mother.ID === V.Concubine.ID) {
-			r += `<br>
-			<<link "Permit your Concubine to name _his2 daughter">>
-				<<replace "#naming">>`;
-					parentNames(mother, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${mother.slaveName} picks a name ${he2} thinks you might find attractive; from now on ${his2} daughter will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
-		} else if (mother.relationship === -3 && mother.devotion >= -20) {
-			r += `<br>
-			<<link "Permit your wife to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(mother, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${mother.slaveName} picks a name suitable for your daughter; from now on ${he2} will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
-		} else if (jsDef(V.Bodyguard) && mother.ID === V.Bodyguard.ID) {
-			r += `<br>
-			<<link "Permit your bodyguard to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(mother, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${mother.slaveName} decides on "${child.slaveName}" for ${his2} daughter. ${He2} hopes you'll find it fitting ${his} station.
-				<</replace>>
-			<</link>>`;
-		} else if (jsDef(V.Headgirl) && mother.ID === V.Headgirl.ID) {
-			r += `<br>
-			<<link "Permit your Head Girl to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(mother, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${mother.slaveName} decides on "${child.slaveName}" for ${his2} daughter, and hopes it will be a name your other slaves will learn to respect.
-				<</replace>>
-			<</link>>`;
-		} else if (mother.devotion > 50 && mother.trust > 50) {
-			r += `<br>
-			<<link "Permit ${his} devoted mother to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(mother, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${mother.slaveName} picks a name ${he2} hopes you'll like; from now on ${his2} daughter will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
+	} else if (child.skill.whoring <= 30) {
+		if (child.skill.entertainment <= 10) {
+			r += `${He} `;
 		}
-	}
-	if (father !== PC && father !== 0 && father !== mother) {
-		App.Utils.setLocalPronouns(father, 2);
-		if (jsDef(V.Concubine) && father.ID === V.Concubine.ID) {
-			r += `<br>
-			<<link "Permit your Concubine to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(father, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${father.slaveName} picks a name ${he2} thinks you might find attractive; from now on ${his2} daughter will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
-		} else if (father.relationship === -3 && father.devotion >= -20) {
-			r += `<br>
-			<<link "Permit your wife to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(father, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${father.slaveName} picks a name suitable for your daughter; from now on ${he} will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
-		} else if (jsDef(V.Bodyguard) && father.ID === V.Bodyguard.ID) {
-			r += `<br>
-			<<link "Permit your bodyguard to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(father, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${father.slaveName} decides on "${child.slaveName}" for ${his2} daughter. ${He2} hopes you'll find it fitting ${his} station.
-				<</replace>>
-			<</link>>`;
-		} else if (jsDef(V.Headgirl) && father.ID === V.Headgirl.ID) {
-			r += `<br>
-			<<link "Permit your Head Girl to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(father, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${father.slaveName} decides on "${child.slaveName}" for ${his2} daughter, and hopes it will be a name your other slaves will learn to respect.
-				<</replace>>
-			<</link>>`;
-		} else if (father.devotion > 50 && father.trust > 50) {
-			r += `<br>
-			<<link "Permit ${his} devoted father to name ${his2} daughter">>
-				<<replace "#naming">>`;
-					parentNames(father, child);
-					child.birthName = child.slaveName;
-					`After some careful consideration, ${father.slaveName} picks a name ${he2} hopes you'll like; from now on ${his2} daughter will be known as "${child.slaveName}".
-				<</replace>>
-			<</link>>`;
+		r += `has <span class=aquamarine>basic experience as a prostitute.</span> `;
+	} else if (child.skill.whoring <= 60) {
+		if (child.skill.entertainment <= 10) {
+			r += `${He} is `;
 		}
+		r += `a <span class=aquamarine>skilled streetwalker.</span> `;
+	} else if (child.skill.whoring < 100) {
+		if (child.skill.entertainment <= 10) {
+			r += `${He} is `;
+		}
+		r += `an <span class=aquamarine>expert working ${boy}.</span> `;
+	} else {
+		if (child.skill.entertainment <= 10) {
+			r += `${He} is `;
+		}
+		r += `a <span class=aquamarine>masterful whore.</span> `;
 	}
 
-	return r;
-};
-
-/**
- * Adds an infant to a the cribs
- * @param {App.Entity.InfantState} child
- */
-App.Facilities.Nursery.newChild = function newChild(child) {
-	child.ID = generateSlaveID();
-
-	child.actualAge = 0;
-	child.birthWeek = 0;
-
-	if (child.override_Race !== 1) {
-		child.origRace = child.race;
-	}
-
-	if (child.override_H_Color !== 1) {
-		child.hColor = getGeneticHairColor(child);
-	}
-	if (child.override_Arm_H_Color !== 1) {
-		child.underArmHColor = getGeneticHairColor(child);
-	}
-	if (child.override_Pubic_H_Color !== 1) {
-		child.pubicHColor = getGeneticHairColor(child);
-	}
-	if (child.override_Brow_H_Color !== 1) {
-		child.eyebrowHColor = getGeneticHairColor(child);
-	}
-	if (child.override_Skin !== 1) {
-		child.origSkin = getGeneticSkinColor(child);
-	}
-	/* eslint-disable camelcase*/
-	child.override_Race = 0;
-	child.override_H_Color = 0;
-	child.override_Arm_H_Color = 0;
-	child.override_Pubic_H_Color = 0;
-	child.override_Brow_H_Color = 0;
-	child.override_Skin = 0;
-	child.override_Eye_Color = 0;
-	/* eslint-enable */
-
-	child.arm = {
-		left: new App.Entity.LimbState(),
-		right: new App.Entity.LimbState()
-	};
-	child.leg = {
-		left: new App.Entity.LimbState(),
-		right: new App.Entity.LimbState()
-	};
-
-	if (V.surnamesForbidden === 1) {
-		child.childSurname = 0;
-	}
-
-	if (child.clone !== 0) {
-		child.canRecruit = 0;
+	if (child.custom.desc !== "" && jsDef(child.custom.desc)) {
+		r += `${child.custom.desc} `;
 	}
-	generatePronouns(child);
-	child.origin = `$He was born and raised in your arcology. `;
-	child.targetLocation = "slavery";
-	child.growTime = V.targetAgeNursery * 52;
-	V.cribs.push(child);
-	V.cribsIndices = App.Facilities.Nursery.cribsToIndices();
-	V.nurseryBabies++;
-};
-
-/**
- * @param {App.Entity.ChildState[]} [cribs]
- * @returns {Object.<number, number>}
- */
-App.Facilities.Nursery.cribsToIndices = function cribsToIndices(cribs = V.cribs) {
-	return cribs.reduce((acc, child, i) => { acc[child.ID] = i; return acc; }, {});
-};
-
-/**
- * Returns index in the children array for the given ID
- * @param {number} ID child's ID
- * @returns {number}
- */
-App.Facilities.Nursery.childIndexForID = function childIndexForID(id) {
-	return V.cribsIndices[id];
-};
-
-/**
- * Removes the child using the child's ID
- * @param {number} index
- * @returns {Array}
- */
-App.Facilities.Nursery.removeChild = function removeChild(index) {
-	return V.cribs.deleteAt(index);
-};
-
-/**
- * Displays a list of slaves with children eligible for the Nursery
- * FIXME: Does not currently work
- * @returns {string}
- */
-App.Facilities.Nursery.nurserySort = function nurserySort() {
-	"use strict";
-	const
-		PC = V.PC,
-		SL = V.slaves.length,
-		arcology = V.arcologies[0];
-
-	let
-		r = ``,
-		eligibility = 0,
-		sortNurseryList = V.sortNurseryList || "Unsorted",
-		childrenReservedNursery = false,	// TODO: rename this to avoid confusion
-		reservedChildrenNursery = FetusGlobalReserveCount("nursery");
-
-		r += `<br><i>Sorting:</i> <b><span id="qlNurserySort">${sortNurseryList}</span>.</b> `;
-		r += `${App.UI.passageLink("Sort by Name", "Nursery", `${sortNurseryList = "Name"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byName()}`)} | `;
-		r += `${App.UI.passageLink("Sort by Reserved Nursery Spots", "Nursery", `${sortNurseryList = "Reserved Nursery Spots"}, ${App.UI.replace(`#qlNurserySort`), sortNurseryList}, ${byReservedSpots()}`)} | `;
-		r += `${App.UI.passageLink("Sort by Pregnancy Week", "Nursery", `${sortNurseryList = "Pregnancy Week"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byPregnancyWeek()}`)} | `;
-		r += `${App.UI.passageLink("Sort by Number of Children", "Nursery", `${sortNurseryList = "Number of Children"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byPregnancyCount()}`)}`;
-		r += `<br>`;
-
-		r += `<div id="qlNursery">`;
-
-		for (let i = 0; i < SL; i++) {
-			const slave = V.slaves[i];
-
-			App.Utils.setLocalPronouns(slave);
-
-			if (slave.preg > 0 && !slave.broodmother && slave.pregKnown && slave.eggType === "human") {
-				if (slave.assignment !== Job.DAIRY && V.dairyPregSetting <= 0) {
-					const
-						slaveID = "slave-" + slave.ID,
-						WL = slave.womb.length,
-						reservedNursery = WombReserveCount(slave, "nursery"),
-						reservedIncubator = WombReserveCount(slave, "incubator"),
-						pregWeek = slave.pregWeek,
-						slaveName = SlaveFullName(slave);
-
-					r += `<div class="possible" @id="${slaveID}" @data-preg-count="${WL}" @data-reserved-spots="${reservedNursery}" @data-preg-week="${pregWeek}" @data-name="${slaveName}">`;
-
-					r += `${App.UI.passageLink(`${slaveName}`, "Long Slave Description", `${V.activeSlave = slave}, ${V.nextLink = passage()}`)} is ${pregWeek} weeks pregnant with `;
-
-					switch (slave.pregSource) {
-						case 0:
-							r += `someone's${slave.preg <= 5 ? `, though it is too early to tell whose,` : ``}`;
-							break;
-						case -1:
-							r += `your`;
-							break;
-						case -2:
-							r += `a citizen's`;
-							break;
-						case -3:
-							r += `your Master's`;
-							break;
-						case -4:
-							r += `another arcology owner's`;
-							break;
-						case -5:
-							r += `your client's`;
-							break;
-						case -6:
-							r += `the Societal Elite's`;
-							break;
-						case -7:
-							r += `the lab's`;
-							break;
-						case -9:
-							r += `the Futanari Sister's`;
-							break;
-						default:
-							if (slave.preg <= 5) {
-								r += `someone's, though it is too early to tell whose,`;
-							} else {
-								let t = V.slaveIndices[slave.pregSource];
-								if (jsDef(t)) {
-									r += `${V.slaves[t].slaveName}'s`;
-								}
-							}
-							break;
-					}
-					r += ` ${WL > 1 ? `babies` : `baby`}. `;
-
-					if (reservedNursery > 0) {
-						childrenReservedNursery = true;
-						if (WL === 1) {
-							r += `${His} child will be placed in ${V.nurseryName}. `;
-						} else if (reservedNursery < WL) {
-							r += `${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `;
-						} else if (WL === 2) {
-							r += `Both of ${his} children will be placed in ${V.nurseryName}. `;
-						} else {
-							r += `All ${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `;
-						}
-
-						if ((reservedIncubator + reservedNursery < WL) && (reservedChildrenNursery < V.freeCribs)) {
-							r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-							r += App.UI.passageLink("Keep another child", "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
-							if (reservedNursery > 0) {
-								r += ` | ${App.UI.passageLink("Keep one less child", "Nursery", `${WombCleanGenericReserve(slave, "nursery", 1)}`)}`;
-							}
-							if (reservedNursery > 1) {
-								r += ` | ${App.UI.passageLink(`Keep none of ${his} children`, "Nursery", `${WombCleanGenericReserve(slave, "nursery", 9999)}`)}`;
-							}
-							if (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs) {
-								r += ` | ${App.UI.passageLink(`Keep the rest of ${his} children`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 9999)}`)}`;
-							}
-						} else if (reservedNursery === WL || reservedChildrenNursery === V.freeCribs || reservedIncubator + reservedNursery === WL) {
-							r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-							r += App.UI.passageLink("Keep one less child", "Nursery", `${WombCleanGenericReserve(slave, "nursery", 1)}`);
-							if (reservedNursery > 1) {
-								r += ` | ${App.UI.passageLink(`Keep none of ${his} children`, "Nursery", `${WombCleanGenericReserve(slave, "nursery", 9999)}`)}`;
-							}
-						}
-					} else if (reservedChildrenNursery < V.freeCribs && V.freeCribs > WL) {
-						if (WL - reservedIncubator === 0) {
-							r += `<i>${His} children are already reserved for ${V.incubatorName}</i>`;
-							r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-							r += App.UI.passageLink(`Keep ${his} child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
-						} else {
-							r += `You have ${V.freeCribs === 1 ? `an ` : ``}<span class="lime">available room${V.freeCribs > 1 ? `s` : ``}.</span> `;
-							r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-							r += App.UI.passageLink(`Keep ${WL > 1 ? `a` : `the`} child`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
-							if (WL > 1 && (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs)) {
-								r += ` | ${App.UI.passageLink(`Keep all of ${his} children`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 9999)}`)}`;
-							}
-						}
-					} else if (reservedChildrenNursery === V.freeCribs) {
-						r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-						r += `You have <span class="red">no room for ${his} offspring.</span> `;
-					}
 
-					eligibility = 1;
-					r += `</div>`;
-				}
+	if (arcology.FSGenderFundamentalistLawBeauty > 0 || arcology.FSGenderRadicalistLawBeauty > 0 || arcology.FSSlimnessEnthusiastLaw > 0 || arcology.FSHedonisticDecadenceLaw2 > 0 || arcology.FSRestartSMR > 0) {
+		r += `${His} body is a perfect example of `;
+		if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty > 0) {
+			if (genderLawPass(child)) {
+				r += `the fashionable feminine ideal. `;
+			}
+		} else if (arcology.FSSlimnessEnthusiastLaw) {
+			if (slimPass(child)) {
+				r += `the fashionable flat ideal. `;
+			}
+		} else if (arcology.FSHedonisticDecadenceLaw2) {
+			if (child.boobs >= 2000 && child.butt >= 5 && child.weight > 95) {
+				r += `the fashionable plump body. `;
 			}
 		}
+		if (arcology.FSRestartSMR > 0 && arcology.FSRestart > 80 && !child.dick && !child.balls && !child.ovaries && !child.mpreg && child.vagina < 0) {
+			r += `a subhuman who accepted their place in society. `;
+		}
+	}
 
-		r += `</div>`;
+	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
 
-		$('div#qlNursery').ready(byPreviousSort);
+	r += App.Desc.limbs(child);
 
-		if (!eligibility) {
-			r += `<br>`;
-			r += `<i>You have no pregnant slave bearing eligile children</i>`;
+	if (V.showClothing && !V.saleDescription) {
+		r += `${child.slaveName} is `;
+		if (child.clothes === "choosing her own clothes") {
+			r += `allowed to choose ${his} own clothes, but hasn't made a selection yet, `;
+		} else {
+			r += `wearing ${child.clothes}, `;
 		}
 
-		if (PC.pregKnown && (arcology.FSRestart === "unset" || V.eugenicsFullControl || (PC.pregSource !== -1 && PC.pregSource !== -6))) {
-			const
-				WL = PC.womb.length;
+		switch (child.clothes) {
+			case "a slave gown":
+				r += `a gorgeous affair ${!hasAnyLegs(child) ? `cleavage and a short skirt. ` : `with cuts that offer tantalizing glimpses of delicate flesh and ${footwear(child)}`}`;
+				break;
+			case "a ball gown":
+				r += `a majestically grand silken dress for formal ${!hasAnyLegs(child) ? `back. ` : `occasions, stockings, and ${footwear(child)}`}`;
+				break;
+			case "a mini dress":
+				r += `a body hugging strapless number that shows as much skin as it ${!hasAnyLegs(child) ? `everything. ` : `covers, paired with ${footwear(child)}`}`;
+				break;
+			case "a schoolgirl outfit":
+				r += `which includes a tight white ${!hasAnyLegs(child) ? `pattern. ` : `blouse, a short plaid skirt, and ${footwear(child)}`}`;
+				break;
+			case "a sweater":
+			case "a t-shirt":
+			case "a tank-top":
+			case "an oversized t-shirt":
+				r += `which only covers ${his} ${!hasAnyLegs(child) ? `breasts. ` : `torso, and ${footwear(child)}`}`;
+				break;
+			default:
+				r += `so ${his} nude body is on display. ${!hasAnyLegs(child) ? `In fact, ${he}'s devoid of even legs. ` : `${He} is wearing ${footwear(child)}`}`;
+				break;
+		}
+	}
 
-			let
-				reservedIncubator = WombReserveCount(PC, "incubator"),
-				reservedNursery = WombReserveCount(PC, "nursery");
-
-			r += `<br><b><span class="pink">You're pregnant</span></b> and going to have ${WL === 1 ? `a baby. ` : pregNumberName(WL, 1)} `;
-
-			if (reservedNursery > 0) {
-				childrenReservedNursery = 1;
-				if (WL === 1) {
-					r += `Your child will be placed in ${V.nurseryName}.`;
-				} else if (reservedNursery < WL) {
-					r += `${reservedNursery} of your children will be placed in ${V.nurseryName}.`;
-				} else if (WL === 2) {
-					r += `Both of your children will be placed in ${V.nurseryName}.`;
-				} else {
-					r += `All ${reservedNursery} of your children will be placed in ${V.nurseryName}.`;
-				}
+	if (V.showBodyMods) {
+		r += clothingCorset(child);
+	}
 
-				if (reservedNursery < WL && reservedChildrenNursery < V.freeCribs && reservedNursery - reservedIncubator > 0) {
-					r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-					r += App.UI.passageLink("Keep another child", "Nursery", `${reservedNursery += 1}, ${reservedChildrenNursery += 1}`);
-					if (reservedNursery > 0) {
-						r += ` | ${App.UI.passageLink("Keep one less child", "Nursery", `${reservedNursery -= 1}, ${reservedChildrenNursery -= 1}`)}`;
-					}
+	if (V.showClothing && !V.saleDescription) {
+		r += `${He}`;
+	} else {
+		r += `${child.slaveName}`;
+	}
+	let averageHeight = Height.mean(child);
 
-					if (reservedNursery > 1) {
-						r += ` | ${App.UI.passageLink("Keep none of your children", "Nursery", `${reservedChildrenNursery -= reservedNursery}, ${reservedChildrenNursery = 0}`)}`;
-					}
+	r += ` is `;
 
-					if (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs) {
-						r += ` | ${App.UI.passageLink("Keep the rest of your children", "Nursery", `${reservedChildrenNursery += (WL - reservedNursery)}, ${reservedNursery += (WL - reservedNursery)}`)}`;
-					}
-				} else if (reservedNursery === WL || reservedChildrenNursery === V.freeCribs || reservedNursery - reservedIncubator >= 0) {
-					r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-					r += App.UI.passageLink("Keep one less child", "Nursery", `${reservedNursery -= 1}, ${reservedChildrenNursery -= 1}`);
-					if (reservedNursery > 1) {
-						r += App.UI.passageLink("Keep none of your children", "Nursery", `${reservedChildrenNursery -= reservedNursery}, ${reservedNursery = 0}`);
-					}
-				}
-			} else if (reservedChildrenNursery < V.freeCribs) {
-				if (WL - reservedIncubator === 0) {
-					r += `<i>Your child${WL > 1 ? `ren are` : ` is`} already reserved for ${V.incubatorName}</i>`;
-					r += App.UI.passageLink(`Keep your child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${reservedNursery += WL}, ${reservedIncubator = 0}`);
-				} else {
-					r += `You have ${V.freeCribs === 1 ? `an ` : ``}<span class="lime">available room${V.freeCribs > 1 ? `s` : ``}. `;
-					r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-					r += App.UI.passageLink(`Keep ${WL > 1 ? `a` : `your`} child`, "Nursery", `${reservedNursery += 1}, ${reservedChildrenNursery += 1}`);
-					if (WL > 1 && (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs)) {
-						r += ` | ${App.UI.passageLink("Keep all of your children", "Nursery", `${reservedChildrenNursery += WL}, ${reservedNursery += WL}`)}`;
-					}
-				}
-			} else if (reservedChildrenNursery === V.freeCribs) {
-				r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
-				r += `You have <span class="red">no room for your offspring.</span> `;
-			}
+	// TODO: should these numbers be tweaked to account for smaller body sizes?
+	if (child.height <= averageHeight + 5 && child.height >= averageHeight - 5) {
+		r += `an average height`;
+		if (child.physicalAge < 16) {
+			r += ` for ${his} age`;
 		}
-
-		if (reservedChildrenNursery || childrenReservedNursery) {
-			r += `<br>`;
-			r += App.UI.passageLink("Clear all reserved children", "Nursery", `${V.slaves.forEach(WombCleanGenericReserve(slave, "nursery", 9999))}, ${WombCleanGenericReserve(PC, "nursery", 9999)}`);
+	} else if (child.height < averageHeight - 15) {
+		r += `petite`;
+		if (child.physicalAge < 16) {
+			r += ` for ${his} age`;
 		}
-
-		function byName() {
-			let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
-			sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-name');
-			$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	} else if (child.height < averageHeight - 5) {
+		r += `short`;
+		if (child.physicalAge < 16) {
+			r += ` for ${his} age`;
 		}
-
-		function byReservedSpots() {
-			let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
-			sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-reserved-spots');
-			$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	} else if (child.height > averageHeight + 15) {
+		r += `very tall`;
+		if (child.physicalAge < 16) {
+			r += ` for ${his} age`;
 		}
-
-		function byPregnancyWeek() {
-			let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
-			sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-preg-week');
-			$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	} else if (child.height > averageHeight + 5) {
+		r += `tall`;
+		if (child.physicalAge < 16) {
+			r += ` for ${his} age`;
 		}
+	}
+	if (V.showHeightCMs) {
+		r += ` at ${heightToEitherUnit(child.height)},`;
+	}
 
-		function byPregnancyCount() {
-			let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
-			sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-preg-count');
-			$(sortedNurseryPossibles).appendTo($('#qlNursery'));
-		}
+	r += ` and `;
 
-		function byPreviousSort() {
-			let sort = V.sortNurseryList;
-			if (sort !== 'unsorted') {
-				if (sort === 'Name') {
-					sortNurseryPossiblesByName();
-				} else if (sort === 'Reserved Nursery Spots') {
-					sortNurseryPossiblesByReservedSpots();
-				} else if (sort === 'Pregnancy Week') {
-					sortNurseryPossiblesByPregnancyWeek();
-				} else if (sort === 'Number of Children') {
-					sortNurseryPossiblesByPregnancyCount();
-				}
-			}
+	if (child.weight > 190) {
+		if (arcology.FSHedonisticDecadence !== "unset") {
+			r += `${jsEither("perfectly curvy", "perfectly plush")}. `;
+		} else {
+			r += `<span class="red">${jsEither("dangerously fat", "dangerously overweight", "extremely obese")}.</span> `;
 		}
-
-	return r;
-};
-
-/* CLASSES */
-
-/**
- * Contains a list of the properties the infant object has
- * May need another look-over
- */
-App.Facilities.Nursery.InfantState = class InfantState {
-	constructor() {
-		/** Child's current name */
-		this.slaveName = "blank";
-		/** Child's current surname
-		 * @type {string|number} */
-		this.slaveSurname = 0;
-		this.genes = "XX";
-		this.pronoun = App.Data.Pronouns.Kind.female;
-		/** game week child was acquired.
-		 *
-		 * _0: Obtained prior to game start / at game start_ */
-		this.weekAcquired = 0;
-		this.father = 0;
-		this.mother = 0;
-		this.daughters = 0;
-		this.sisters = 0;
-		/** week she was born (int between 0-51) */
-		this.birthWeek = jsRandom(0, 51);
-		/** How old she really is. */
-		this.actualAge = 18;
-		/** child's race */
-		this.race = "white";
-		/**
-		 * child markings
-		 * * "beauty mark"
-		 * * "birthmark"
-		 * * "freckles"
-		 * * "heavily freckled"
-		 */
-		this.markings = "none";
-		/** eye color */
-		this.eyeColor = "brown";
-		/** hair color */
-		this.hColor = "brown";
-		/** pubic hair color */
-		this.pubicHColor = "brown";
-		/** armpit hair style */
-		this.underArmHColor = "brown";
-		/** eyebrowHColor*/
-		this.eyebrowHColor = "brown";
-		/** skin color */
-		this.skin = "light";
-		/** pubic hair style */
-		this.pubicHStyle = "neat";
-		/** armpit hair style */
-		this.underArmHStyle = "neat";
-		/**
-		 * face attractiveness
-		 *
-		 * * -96 - : very ugly
-		 * * -95 - -41: ugly
-		 * * -40 - -11: unattractive
-		 * * -10 - 10: attractive
-		 * * 11 - 40: very pretty
-		 * * 41 - 95: gorgeous
-		 * * 96+: mind blowing
-		 */
-		this.face = 0;
-		/**
-		 * accepts string (will be treated as "normal")
-		 * * "normal"
-		 * * "masculine"
-		 * * "androgynous"
-		 * * "cute"
-		 * * "sensual"
-		 * * "exotic"
-		 */
-		this.faceShape = "normal";
-		/**
-		 * child intelligence
-		 * * -100 - -96: borderline retarded
-		 * * -95 - -51: very slow
-		 * * -50 - -16: slow
-		 * * -15 - 15: average
-		 * * 16 - 50: smart
-		 * * 51 - 95: very smart
-		 * * 96 - 100: brilliant
-		 */
-		this.intelligence = 0;
-		/**
-		 * * "none"
-		 * * "mindbroken"
-		 * * "submissive"
-		 * * "cumslut"
-		 * * "humiliation"
-		 * * "buttslut"
-		 * * "boobs"
-		 * * "sadist"
-		 * * "masochist"
-		 * * "dom"
-		 * * "pregnancy"
-		 */
-		this.fetish = "none";
-		/**
-		 * * "none"
-		 * * "arrogant": clings to her dignity, thinks slavery is beneath her
-		 * * "bitchy": can 't keep her opinions to herself
-		 * * "odd": says and does odd things
-		 * * "hates men": hates men
-		 * * "hates women": hates women
-		 * * "gluttonous": likes eating, gains weight
-		 * * "anorexic": dislikes eating and being forced to eat, loses weight
-		 * * "devout": resistance through religious faith
-		 * * "liberated": believes slavery is wrong
-		 */
-		this.behavioralFlaw = "none";
-		/**
-		 * * "none"
-		 * * "hates oral": hates oral sex
-		 * * "hates anal": hates anal sex
-		 * * "hates penetration": dislikes penetrative sex
-		 * * "shamefast": nervous when naked
-		 * * "idealistic": believes sex should be based on love and consent
-		 * * "repressed": dislikes sex
-		 * * "apathetic": inert during sex
-		 * * "crude": sexually crude and has little sense of what partners find disgusting during sex
-		 * * "judgemental": sexually judgemental and often judges her sexual partners' performance
-		 * * "neglectful": disregards herself in sex
-		 * * "cum addict": addicted to cum
-		 * * "anal addict": addicted to anal
-		 * * "attention whore": addicted to being the center of attention
-		 * * "breast growth": addicted to her own breasts
-		 * * "abusive": sexually abusive
-		 * * "malicious": loves causing pain and suffering
-		 * * "self hating": hates herself
-		 * * "breeder": addicted to being pregnant
-		 */
-		this.sexualFlaw = "none";
-		/** 0: does not have; 1: carrier; 2: active
-		 * * heterochromia is an exception. String = active
-		 */
-		this.geneticQuirks = {
-			/** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */
-			macromastia: 0,
-			/** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced.
-			 *
-			 * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
-			gigantomastia: 0,
-			/** is prone to having twins, shorter pregnancy recovery rate */
-			fertility: 0,
-			/** is prone to having multiples, even shorter pregnancy recovery rate
-			 *
-			 * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */
-			hyperFertility: 0,
-			/** pregnancy does not block ovulation, child can become pregnant even while pregnant */
-			superfetation: 0,
-			/** is abnormally tall. gigantism + dwarfism - is very average*/
-			gigantism: 0,
-			/** is abnormally short. gigantism + dwarfism - is very average*/
-			dwarfism: 0,
-			/** has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
-			pFace: 0,
-			/** has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
-			uFace: 0,
-			/** has pale skin, white hair and red eyes */
-			albinism: 0,
-			/** may have mismatched eyes */
-			heterochromia: 0,
-			/** ass never stops growing. Increased growth rate, reduced shrink rate. */
-			rearLipedema: 0,
-			/** has (or will have) a huge dong */
-			wellHung: 0,
-			/** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
-			wGain: 0,
-			/** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
-			wLoss: 0,
-			/** body attempts to normalize to an androgynous state */
-			androgyny: 0,
-			/** child can only ever birth girls */
-			girlsOnly: 0
-		};
-		/** how many weeks until the child is ready for release */
-		this.growTime = 156;
-	}
-};
-
-/**
- * Contains a list of properties the child object has
- * Will need to be pared down
- */
-App.Facilities.Nursery.ChildState = class ChildState {
-	constructor() {
-		/** Child's current name */
-		this.slaveName = "blank";
-		/** Child's current surname
-		 * @type {string|number} */
-		this.slaveSurname = 0;
-		/** Child's original name */
-		this.birthName = "blank";
-		/** Child's original surname
-		* @type {string|number} */
-		this.birthSurname = 0;
-		/** Slave sex ("XX", "XY") */
-		this.genes = "XX";
-		/** @type {number} */
-		this.pronoun = App.Data.Pronouns.Kind.female;
-		/** Game week slave was acquired.
-		*
-		* _0: Obtained prior to game start / at game start_ */
-		this.weekAcquired = 0;
-		/** Child's origin
-		* @type {string|number} */
-		this.origin = "$He was born and raised in your arcology.";
-		/** Career prior to enslavement
-		* @type {string|number} */
-		this.career = 0;
-		/** Child's ID */
-		this.ID = 0;
-		/**
-		 * TODO:
-		 * Child's relationship
-		 * * -3: married to you
-		 * * -2: emotionally bound to you
-		 * * -1: emotional slut
-		 * * 0: none
-		 * * 1: friends with relationshipTarget
-		 * * 2: best friends with relationshipTarget
-		 * * 3: friends with benefits with relationshipTarget
-		 * * 4: lover with relationshipTarget
-		 * * 5: relationshipTarget 's slave wife
-		 */
-		this.relationship = 0;
-		/** Target of relationship (ID) */
-		this.relationshipTarget = 0;
-		/**
-		* Child's rivalry
-		* * 0: none
-		* * 1: dislikes rivalryTarget
-		* * 2: rival of rivalryTarget
-		* * 3: bitterly hates rivalryTarget
-		*/
-		this.rivalry = 0;
-		/** Target of rival (ID) */
-		this.rivalryTarget = 0;
-		/** Slave will serve subTarget (ID) */
-		this.subTarget = 0;
-		this.father = 0;
-		this.mother = 0;
-		this.daughters = 0;
-		this.sisters = 0;
-		this.canRecruit = 0;
-		/**
-		* can slave choose own assignment
-		*
-		* 0: no; 1: yes */
-		this.choosesOwnAssignment = 0;
-		/** Child's assignment
-		 * TODO:
-		*/
-		this.assignment = Job.REST;
-		/** How far along slave is with being trained (skills, flaws, quirks)
-		 * TODO:
-		*/
-		this.training = 0;
-		/** Week she was born (int between 0-51) */
-		this.birthWeek = jsRandom(0, 51);
-		/** How old she really is. */
-		this.actualAge = 18;
-		/** How old her body looks. */
-		this.visualAge = 18;
-		/** How old her body is. */
-		this.physicalAge = 18;
-		/** How old her ovaries are. (used to trick menopause) */
-		this.ovaryAge = 18;
-		/** Has had facial surgery to reduce age. 0: no, 1: yes */
-		this.ageImplant = 0;
-		this.health = {
-			/**
-			* Child's health
-			* * -90 - : On the edge of death
-			* * -90 - -51: Extremely unhealthy
-			* * -50 - -21: Unhealthy
-			* * -20 -  20: Healthy
-			* * 21  -  50: Very healthy
-			* * 50  -  90: Extremely healthy
-			* * 90  -  : Unnaturally healthy
-			*/
-			condition: 0,
-			/** Child's short term health damage */
-			shortDamage: 0,
-			/** Child's long term health damage */
-			longDamage: 0,
-			/**
-			* Child's current illness status
-			* * 0 : Not ill
-			* * 1 : A little under the weather
-			* * 2 : Minor illness
-			* * 3 : Ill
-			* * 4 : serious illness
-			* * 5 : dangerous illness
-			*/
-			illness: 0,
-			/**
-			* Child's current level of exhaustion
-			* * 0  - 50 : Perfectly fine
-			* * 50 - 80 : tired
-			* * 80 - 100 : exhausted
-			*/
-			tired: 0,
-			/** Child's combined health (condition - short - long) */
-			health: 0
+	} else if (child.weight > 160) {
+		if (arcology.FSHedonisticDecadence !== "unset") {
+			r += `${jsEither("spectacularly curvy", "spectacularly plush")}. `;
+		} else {
+			r += `<span class="red">${jsEither("extremely fat", "extremely overweight")}.</span> `;
 		}
-		/**
-		* slave has a minor injury ("black eye", "bruise", "split lip")
-		* @type {number | string}
-		*/
-		this.minorInjury = 0;
-		/**
-		* slave 's trust.
-		* * -96-: abjectly terrified
-		* * -95 - -51: terrified
-		* * -50 - -21: frightened
-		* * -20 - 20: fearful
-		* * 21 - 50: careful
-		* * 51 - 95: trusting
-		* * 96+: profoundly trusting
-		*/
-		this.trust = 0;
-		/** Used to calculate trust loss/gain */
-		this.oldTrust = 0;
-		/**
-		* slave 's devotion
-		* * -96 - : hate-filled
-		* * -95 - -51: hateful
-		* * -50 - -21: reluctant
-		* * -20 - 20: careful
-		* * 21 - 50: accepting
-		* * 51 - 95: devoted
-		* * 96+: worshipful */
-		this.devotion = 0;
-		/** Used to calculate devotion loss/gain */
-		this.oldDevotion = 0;
-		/**
-			* slave 's weight
-			* * 191+: dangerously obese
-			* * 190 - 161: super obese
-			* * 160 - 131: obese
-			* * 130 - 96: fat
-			* * 95 - 31: overweight
-			* * 30 - 11: curvy
-			* * 10 - -10: neither too fat nor too skinny
-			* * -11 - -30: thin
-			* * -31 - -95: very thin
-			* * -96 - : emaciated
-			*/
-		this.weight = 0;
-		/**
-		* slave 's muscles
-		* * 96+ : extremely muscular
-		* * 31 - 95: muscular
-		* * 6 - 30: toned
-		* * -5 - 5: none
-		* * -30 - -6: weak
-		* * -95 - -31: very weak
-		* * -96- : frail
-		*/
-		this.muscles = 0;
-		/**
-		* Child's height in cm
-		* * < 150: petite
-		* * 150 - 159: short
-		* * 160 - 169: average
-		* * 170 - 185: tall
-		* * 186+ : very tall
-		*/
-		this.height = 170;
-		/** Slave has height implant
-		* -1: -10 cm, 0: none, 1: +10 cm */
-		this.heightImplant = 0;
-		/** Child's nationality */
-		this.nationality = "slave";
-		/** Child's race */
-		this.race = "white";
-		/** Child's original race */
-		this.origRace = "white";
-		/**
-		* slave markings
-		* * "beauty mark"
-		* * "birthmark"
-		* * "freckles"
-		* * "heavily freckled"
-		*/
-		this.markings = "none";
-		/**
-		 * Eyes of the slave.
-		 * @type {App.Entity.EyeState}
-		 */
-		this.eye = new App.Entity.EyeState();
-		/** "none", "glasses", "blurring glasses", "corrective glasses", "blurring contacts", "corrective contacts" */
-		this.eyewear = "none";
-		/** Slave hearing
-		*
-		* -2: deaf; -1: hard of hearing; 0: normal */
-		this.hears = 0;
-		/** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs" */
-		this.earwear = "none";
-		/** Is there an inner ear implant device
-		* 0: no; 1: yes */
-		this.earImplant = 0;
-		/** The shape of their outer ears
-			* "none", "damaged", "normal", "pointy", "elven", "ushi" */
-		this.earShape = "normal";
-		/** Type of kemonomimi ears if any
-			* "neko", "inu", "kit", "tanuki", "usagi" */
-		this.earT = "none";
-		/** Kemonomimi ear color
-			* "hairless" */
-		this.earTColor = "hairless";
-		/** Sense of smell
-		0 - yes, -1 - no */
-		this.smells = 0;
-		/** Sense of taste
-		0 - yes, -1 - no */
-		this.tastes = 0;
-		/** Horn type if any
-			* "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */
-		this.horn = "none";
-		/** Horn color */
-		this.hornColor = "none";
-		/** Type of tail installed
-			* "none", "mod", "combat", "sex"*/
-		this.tail = "none";
-		/**
-			* Does she have a tail interface installed
-			* * 0: no
-			* * 1: yes
-			*/
-		this.PTail = 0;
-		/** The current shape of their modular tail
-			* "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma" */
-		this.tailShape = "none";
-		/** Tail color */
-		this.tailColor = "none";
-		/** Child's original hair color, defaults to their initial hair color. */
-		this.origHColor = "brown";
-		/** Hair color */
-		this.hColor = "brown";
-		/** Pubic hair color */
-		this.pubicHColor = "brown";
-		/** Armpit hair style */
-		this.underArmHColor = "brown";
-		/** eyebrowHColor*/
-		this.eyebrowHColor = "brown";
-		/** Child's original skin color. */
-		this.origSkin = "light";
-		/** Skin color */
-		this.skin = "light";
-		/**
-		* hair length
-		* * 150: calf-length
-		* * 149-100: ass-length
-		* * 99-30: long
-		* * 29-10: shoulder-length
-		* * 9-0: short
-		*/
-		this.hLength = 60;
-		/**
-		* eyebrow thickness
-		* * "pencil-thin"
-		* * "thin"
-		* * "threaded"
-		* * "natural"
-		* * "tapered"
-		* * "thick"
-		* * "bushy"
-		*/
-		this.eyebrowFullness = "natural";
-		/** Hair style */
-		this.hStyle = "short";
-		/** Pubic hair style */
-		this.pubicHStyle = "neat";
-		/** Armpit hair style */
-		this.underArmHStyle = "neat";
-		/** EyebrowHStyle */
-		this.eyebrowHStyle = "natural";
-		/**
-		* slave waist
-		* * 96+: masculine
-		* * 95 - 41: ugly
-		* * 40 - 11: unattractive
-		* * 10 - -10: average
-		* * -11 - -40: feminine
-		* * -40 - -95: hourglass
-		* * -96-: absurd
-		*/
-		this.waist = 0;
-		/** Series of rings up the back that can be tied together. 0: no, 1: yes */
-		this.corsetPiercing = 0;
-		/**
-			* What level of prosthetic interface she has installed
-			* * 0: no interface
-			* * 1: basic interface
-			* * 2: advanced interface
-			*/
-		this.PLimb = 0;
-		/*
-		 * legs of the slave
-		 * * type:0: no leg
-		 * * type:1: has leg
-		 * * 2: simple prosthetic
-		 * * 3: artificial leg - Sex
-		 * * 4: artificial leg - Beauty
-		 * * 5: artificial leg - Combat
-		 * * 6: swiss army leg
-		 */
-		this.leg = {
-			left: new App.Entity.LimbState(),
-			right: new App.Entity.LimbState()
-		};
-		/**
-		 * arms of the slave
-		 * * type:0: no arm
-		 * * type:1: has arm
-		 * * 2: simple prosthetic
-		 * * 3: artificial arm - Sex
-		 * * 4: artificial arm - Beauty
-		 * * 5: artificial arm - Combat
-		 * * 6: swiss army arm
-		 */
-		this.arm = {
-			left: new App.Entity.LimbState(),
-			right: new App.Entity.LimbState()
-		};
-		/** Are heels clipped
-		*
-		* 0: no, 1: yes */
-		this.heels = 0;
-		/** Slave voice
-		*
-		* 0: mute, 1: deep, 2: feminine, 3: high, girly */
-		this.voice = 2;
-		/** Has voice implant
-		*
-		* 0: no; 1: yes, high; -1: yes, low */
-		this.voiceImplant = 0;
-		/** Has cybernetic voicebox
-		*
-		* 0: no; 1: yes */
-		this.electrolarynx = 0;
-		/**
-		* slave accent
-		* * 0: none
-		* * 1: attractive
-		* * 2: heavy
-		* * 3: does not speak language
-		*/
-		this.accent = 0;
-		/**
-		* shoulder width
-		* * -2: very narrow
-		* * -1: narrow
-		* * 0: feminine
-		* * 1: broad
-		* * 2: very broad
-		*/
-		this.shoulders = 0;
-		/**
-		* has shoulder implant
-		*
-		* * -1: shoulders -1
-		* * 0: none
-		* * 1: shoulders +1
-		*/
-		this.shouldersImplant = 0;
-		/**
-			*  slave boob size (in cc)
-			* * 0-299	- flat;
-			* * 300-399   - A-cup;
-			* * 400-499   - B-cup
-			* * 500-649   - C-cup
-			* * 650-799   - D-cup
-			* * 800-999   - DD-cup
-			* * 1000-1199 - F-cup
-			* * 1200-1399 - G-cup
-			* * 1400-1599 - H-cup
-			* * 1600-1799 - I-cup
-			* * 1800-2049 - J-cup
-			* * 2050-2299 - K-cup
-			* * 2300-2599 - L-cup
-			* * 2600-2899 - M-cup
-			* * 2900-3249 - N-cup
-			* * 3250-3599 - O-cup
-			* * 3600-3949 - P-cup
-			* * 3950-4299 - Q-cup
-			* * 4300-4699 - R-cup
-			* * 4700-5099 - S-cup
-			* * 5100-5499 - T-cup
-			* * 5500-6499 - U-cup
-			* * 6500-6999 - V-cup
-			* * 7000-7499 - X-cup
-			* * 7500-7999 - Y-cup
-			* * 8000-8499 - Z-cup
-			* * 8500-14999 - obscenely massive
-			* * 15000-24999 - arm filling
-			* * 25000-39999 - figure dominating
-			* * 40000-54999 - beanbag sized
-			* * 55000-69999 - door jamming
-			* * 70000-89999 - hall clearing
-			* * 90000-100000 - hall jamming
-			*/
-		this.boobs = 0;
-		/** Breast engorgement from unmilked tits */
-		this.boobsMilk = 0;
-		/**
-		*  slave implant size
-		* * 0: no implants;
-		* * 1-199: small implants;
-		* * 200-399: normal implants;
-		* * 400-599: large implants;
-		* * 600+: boobsImplant size fillable implants
-		*/
-		this.boobsImplant = 0;
-		/**
-		 * Implant type
-		 * * "none"
-		 * * "normal"
-		 * * "string"
-		 * * "fillable"
-		 * * "advanced fillable"
-		 * * "hyper fillable"
-		 */
-		this.boobsImplantType = "none";
-		/**
-		* breast shape
-		* * "normal"
-		* * "perky"
-		* * "saggy"
-		* * "torpedo-shaped"
-		* * "downward-facing"
-		* * "wide-set"
-		*/
-		this.boobShape = "normal";
-		/**
-		* nipple shape
-		* * "huge"
-		* * "puffy"
-		* * "inverted"
-		* * "tiny"
-		* * "cute"
-		* * "partially inverted"
-		* * "fuckable"
-		*/
-		this.nipples = "cute";
-		/**
-		* nipple are pierced
-		* @default 0
-		* 0: none; 1: yes; 2: heavily */
-		this.nipplesPiercing = 0;
-		/** What accessory, if any, or on her nipples */
-		this.nipplesAccessory = "none";
-		/** Slave areolae
-			*
-			* 0: normal; 1: large; 2: unusually wide; 3: huge, 4: massive */
-		this.areolae = 0;
-		/** Edge of areolae are pierced
-		* @default 0
-		* 0: none; 1: yes; 2: heavy */
-		this.areolaePiercing = 0;
-		/** Slave areolae shape ("heart"; "star"; "circle") */
-		this.areolaeShape = "circle";
-		/**
-		* boobs tattoo
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string | number}
-		*/
-		this.boobsTat = 0;
-		/** Slave lactation
-		*
-		* 0: none; 1: natural; 2: implant */
-		this.lactation = 0;
-		/** How many more weeks until lactation dries up
-		*
-		* usually 2 as interactions and lact. implant reset it to 2 */
-		this.lactationDuration = 0;
-		/**
-		* odds of inducing lactation
-		*
-		* begins trying on breast play if over 10 */
-		this.induceLactation = 0;
-		/** 0: 10: not used to producing milk(no bonuses);
-		* 11: 50: used to producing milk;
-		* 51: 100: heavily adapted to producing milk(big bonus) */
-		this.lactationAdaptation = 0;
-		/**
-		*  hip size
-		* * -2: very narrow
-		* * -1: narrow
-		* * 0: normal
-		* * 1: wide hips
-		* * 2: very wide hips
-		* * 3: inhumanly wide hips
-		*/
-		this.hips = 0;
-		/** Slave has hip implant
-		*
-		* -1: hips -1; 0: none; 1: hips +1 */
-		this.hipsImplant = 0;
-		/**
-		*  butt size
-		* * 0	: flat
-		* * 1	: small
-		* * 2   : plump *
-		* * 3	: big bubble butt
-		* * 4	: huge
-		* * 5	: enormous
-		* * 6	: gigantic
-		* * 7	: ridiculous
-		* * 8 - 10: immense
-		* * 11 - 20: inhuman
-		*
-		* _* Descriptions vary for just how big 2 is, as such, it may be better to just go with 3_
-		*/
-		this.butt = 0;
-		/**
-		* butt implant type and size
-		*
-		* * 0: none
-		* * 1: butt implant
-		* * 2: big butt implant
-		* * 3: fillable butt implants
-		* * 5 - 8: advanced fillable implants
-		* * 9+: hyper fillable implants
-		*/
-		this.buttImplant = 0;
-		/**
-		 * Implant type
-		 * * "none"
-		 * * "normal"
-		 * * "string"
-		 * * "fillable"
-		 * * "advanced fillable"
-		 * * "hyper fillable"
-		 */
-		this.buttImplantType = "none";
-		/**
-		* butt tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.buttTat = 0;
-		/**
-		* face attractiveness
-		*
-		* * -96 - : very ugly
-		* * -95 - -41: ugly
-		* * -40 - -11: unattractive
-		* * -10 - 10: attractive
-		* * 11 - 40: very pretty
-		* * 41 - 95: gorgeous
-		* * 96+: mind blowing
-		*/
-		this.face = 0;
-		/**
-		* facial surgery degree
-		*
-		* * 0 - 14: none
-		* * 15 - 34: Subtle Improvements
-		* * 35 - 64: Noticeable Work
-		* * 65 - 99: Heavily Reworked
-		* * 100: Uncanny Valley
-		*/
-		this.faceImplant = 0;
-		/**
-		* accepts string (will be treated as "normal")
-		* * "normal"
-		* * "masculine"
-		* * "androgynous"
-		* * "cute"
-		* * "sensual"
-		* * "exotic"
-		*/
-		this.faceShape = "normal";
-		/**
-		* lip size (0 - 100)
-		* * 0 - 10: thin
-		* * 11 - 20: normal
-		* * 21 - 40: pretty
-		* * 41 - 70: plush
-		* * 71 - 95: huge(lisps)
-		* * 96 - 100: facepussy(mute)
-		*/
-		this.lips = 15;
-		/**
-		* how large her lip implants are
-		* @see lips
-		*/
-		this.lipsImplant = 0;
-		/**
-		* lips pierced
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.lipsPiercing = 0;
-		/**
-		* lip tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "permanent makeup"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.lipsTat = 0;
-		/**
-		* teeth type
-		* * "normal"
-		* * "crooked"
-		* * "straightening braces"
-		* * "cosmetic braces"
-		* * "removable"
-		* * "pointy"
-		* * "baby"
-		* * "mixed"
-		*/
-		this.teeth = "normal";
-		/**
-		* has tongue piercing
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.tonguePiercing = 0;
-		/**
-		* vagina type
-		* * -1: no vagina
-		* * 0: virgin
-		* * 1: tight
-		* * 2: reasonably tight
-		* * 3: loose
-		* * 4: cavernous
-		* * 10: ruined
-		*/
-		this.vagina = 0;
-		/** How wet she is
-		*
-		* 0: dry; 1: wet; 2: soaking wet */
-		this.vaginaLube = 0;
-		/** Has vagina piercing
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.vaginaPiercing = 0;
-		/**
-		* vagina tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.vaginaTat = 0;
-		/**
-		* pregnancy time or state.See Pregnancy Control section for more.
-		* * -3: sterilized
-		* * -2: sterile
-		* * -1: contraceptives
-		* * 0: fertile
-		* * 1 - 10: pregnant, not showing
-		* * 11 - 20: showing
-		* * 21 - 30: pregnant
-		* * 30 - 35: very pregnant
-		*/
-		this.preg = -1;
-		/**
-			* accepts ID See Pregnancy Control section for more.
-			*
-			* Who sired her pregnancy
-			* * -9: a futanari sister
-			* * -8: an animal
-			* * -7: designer baby
-			* * -6: a member of the Societal Elite
-			* * -5: one of your clients
-			* * -4: another arcology owner
-			* * -3: your former Master
-			* * -2: citizen of your arcology
-			* * -1: you
-			* * 0: Unidentifiable
-			*/
-		this.pregSource = 0;
-		/**
-		* Number of children.
-		*
-		* **Warning!** Should be not changed after initial impregnation setup.
-		* See Pregnancy Control section for more.
-		*/
-		this.pregType = 0;
-		/**
-		* Number of ready to be impregnated ova (override normal cases),
-		*
-		* For delayed impregnations with multiples.Used onetime on next call of the SetPregType
-		* widget. After SetPregType use it to override .pregType, it set back to 0 automatically.
-		*/
-		this.pregAdaptation = 50;
-		/**
-		* Ovary implant type.
-		*
-		* * 0: no implants
-		* * "fertility": higher chance of twins (or more)
-		* * "sympathy": doubles eggs released
-		* * "asexual": self-fertilizing
-		*/
-		this.ovaImplant = 0;
-		/**
-		* Womb focused enhancements.
-		*
-		* * "none"
-		* * "restraint": Provides structural support for extremely oversized pregnancies
-		*/
-		this.wombImplant = "none";
-		/**
-			* Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period
-			*
-			* * 0: no
-			* * 1: yes
-			*/
-		this.fertKnown = 0;
-		/**
-			* Menstrual cycle control variable.
-			*
-			* * 0: Danger week
-			* * 1+: safe week
-			*/
-		this.fertPeak = 0;
-		/**
-			* has the slave been turned into a broodmother
-			*
-			* * 0: no
-			* * 1: standard 1 birth / week
-			* * 2: black market 12 births / week
-			* * 3: black market upgrade for implant firmware, to allow change weekly number
-			* of ova in range of 1 to 12 in remote surgery block. (broodmotherFetuses change
-			* through remote surgery). (future usage)
-			*/
-		this.broodmother = 0;
-		/**
-			* count of ova that broodmother implant force to release.
-			*
-			* Should be set with "broodmother" property together. If broodmother === 0 has no meaning.
-			*/
-		this.broodmotherFetuses = 0;
-		/**
-		* If broodmother implant set to pause it 's work.
-		*
-		* 1: implant on pause !1: working.
-		*
-		* If broodmother birth her last baby and her implant is on pause, she will be in contraception like state.
-		*/
-		this.broodmotherOnHold = 0;
-		/**
-		* Number of weeks left until last baby will be birthed.
-		*
-		* Mainly informative only. Updated automatically at birth process based on remaining fetuses. 0 - 37
-		*/
-		this.broodmotherCountDown = 0;
-		/**
-		* variable used to set off the birth events
-		*
-		* 1: birth this week; 0: not time yet */
-		this.labor = 0;
-		/**
-		* may accept strings, use at own risk
-		*
-		* * "none"
-		* * "a small empathy belly"
-		* * "a medium empathy belly"
-		* * "a large empathy belly"
-		* * "a huge empathy belly"
-		* * "a corset"
-		* * "an extreme corset"
-		*/
-		this.bellyAccessory = "none";
-		/**
-		* labia type
-		* * 0: minimal
-		* * 1: big
-		* * 2: huge
-		* * 3: huge dangling
-		*/
-		this.labia = 0;
-		/**
-		* clit size
-		* * 0: normal
-		* * 1: large
-		* * 2: huge
-		* * 3: enormous
-		* * 4: penis-like
-		* * 5: like a massive penis
-		*/
-		this.clit = 0;
-		/**
-		* is clit pierced
-		* * 0: no
-		* * 1: yes
-		* * 2: heavy
-		* * 3: smart
-		*/
-		this.clitPiercing = 0;
-		/**
-		* smart piercing setting
-		* * "off"
-		* * "none"
-		* * "all"
-		* * "no default setting"
-		* * "women"
-		* * "men"
-		* * "vanilla"
-		* * "oral"
-		* * "anal"
-		* * "boobs"
-		* * "submissive"
-		* * "humiliation"
-		* * "pregnancy"
-		* * "dom"
-		* * "masochist"
-		* * "sadist"
-		*/
-		this.clitSetting = "vanilla";
-		/** 0: circumcised; 1+:uncut, also affects foreskin size */
-		this.foreskin = 0;
-		/**
-		* anus size
-		* * 0: virgin
-		* * 1: tight
-		* * 2: loose
-		* * 3: very loose
-		* * 4: gaping
-		*/
-		this.anus = 0;
-		/**
-		* dick size
-		* * 0: none
-		* * 1: tiny
-		* * 2: little
-		* * 3: normal
-		* * 4: big
-		* * 5: huge
-		* * 6: gigantic
-		* * 7: massive/gigantic
-		* * 8: truly imposing/titanic
-		* * 9: monstrous/absurd
-		* * 10: awe-inspiring/inhuman
-		* * 11+: hypertrophied
-		*/
-		this.dick = 0;
-		/** Used to calculate size of area around anus. */
-		this.analArea = 1;
-		/**
-		* is dick pierced
-		* * 0: no
-		* * 1: yes
-		* * 2: heavy
-		*/
-		this.dickPiercing = 0;
-		/**
-		* dick tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.dickTat = 0;
-		/**
-		* does the slave have a prostate?
-		* * 0: no
-		* * 1: normal
-		* * 2: hyperstimulated +20%
-		* * 3: modified hyperstimulated +50%
-		*/
-		this.prostate = 0;
-		/**
-		* ball size
-		* * 0: none
-		* * 1: vestigial
-		* * 2: small
-		* * 3: average
-		* * 4: large
-		* * 5: massive
-		* * 6: huge
-		* * 7: giant
-		* * 8: enormous
-		* * 9: monstrous
-		* * 10: inhuman
-		* * 11+: hypertrophied
-		*/
-		this.balls = 0;
-		/**
-			* scrotum size
-			*
-			* function relative to .balls
-			*
-			* *If .balls > 0 and .scrotum === 0, balls are internal*
-			*/
-		this.scrotum = 0;
-		/** Has ovaries
-		*
-		* 0: no; 1: yes */
-		this.ovaries = 0;
-		/** Has anus piercing
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.anusPiercing = 0;
-		/**
-		* anus tattoo
-		*
-		* takes one of the following strings or 0
-		* * "bleached"
-		* * "tribal patterns"
-		* * "flowers"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.anusTat = 0;
-		/**
-		* has makeup
-		* * 0: none
-		* * 1: minimal
-		* * 2: expensive, luxurious
-		* * 3: color-coordinated with hair
-		* * 4: heavy
-		* * 5: neon
-		* * 6: color-coordinated neon
-		* * 7: metallic
-		* * 8: color-coordinated metallic
-		*/
-		this.makeup = 0;
-		/**
-		* nail type
-		* * 0: neatly clipped
-		* * 1: long and elegant
-		* * 2: color-coordinated with hair
-		* * 3: sharp and claw-like
-		* * 4: bright and glittery
-		* * 5: very long and garish
-		* * 6: neon
-		* * 7: color-coordinated neon
-		* * 8: metallic
-		* * 9: color-coordinated metallic
-		*/
-		this.nails = 0;
-		/**
-			* brand
-			*
-			* @type {Object.<string, string>} */
-		this.brand = {};
-		/** Has pierced ears
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.earPiercing = 0;
-		/** Has pierced nose
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.nosePiercing = 0;
-		/** Has eyebrow piercing
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.eyebrowPiercing = 0;
-		/** Has navel piercing
-		*
-		* 0: no; 1: yes; 2: heavy */
-		this.navelPiercing = 0;
-		/**
-		* shoulder tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.shouldersTat = 0;
-		/**
-		* arm tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.armsTat = 0;
-		/**
-		* leg tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		*  @type {string|number} */
-		this.legsTat = 0;
-		/**
-		* back tattoo
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.backTat = 0;
-		/**
-		* tramp stamp
-		*
-		* takes one of the following strings or 0
-		* * "tribal patterns"
-		* * "flowers"
-		* * "scenes"
-		* * "Asian art"
-		* * "degradation"
-		* * "counting"
-		* * "advertisements"
-		* * "rude words"
-		* * "bovine patterns"
-		* * "sacrament"
-		* * "Sacrilege"
-		* * "Possessive"
-		* * "Paternalist"
-		* @type {string|number} */
-		this.stampTat = 0;
-		/** rules */
-		this.rules = new App.Entity.RuleState();
-		/** Follows rules or is exempt from them
-		*
-		* 0: exempt; 1: obeys */
-		this.useRulesAssistant = 1;
-		/**
-		* * "healthy"
-		* * "restricted"
-		* * "muscle building"
-		* * "fattening"
-		* * "slimming"
-		* * "XX"
-		* * "XY"
-		* * "XXY"
-		* * "cum production"
-		* * "cleansing"
-		* * "fertility"
-		*/
-		this.diet = "healthy";
-		/** How much of her diet is cum
-		*
-		* 0: none; 1: supplemented; 2: nearly entirely */
-		this.dietCum = 0;
-		/** How much of her diet is milk
-		*
-		* 0: none; 1: supplemented; 2: nearly entirely */
-		this.dietMilk = 0;
-		/**
-		* * -2: heavy male hormones
-		* * -1: male hormones
-		* * 0: none
-		* * 1: female hormones
-		* * 2: heavy female hormones
-		*/
-		this.hormones = 0;
-		/**
-		* * "no drugs"
-		* * "breast injections"
-		* * "butt injections"
-		* * "lip injections"
-		* * "fertility drugs"
-		* * "penis enhancement"
-		* * "testicle enhancement"
-		* * "psychosuppressants"
-		* * "steroids"
-		* * "hormone enhancers"
-		* * "hormone blockers"
-		* * "super fertility drugs"
-		* * "hyper breast injections"
-		* * "hyper butt injections"
-		* * "hyper penis enhancement"
-		* * "hyper testicle enhancement"
-		* * "female hormone injections"
-		* * "male hormone injections"
-		* * "anti-aging cream"
-		* * "appetite suppressors"
-		* * "penis atrophiers"
-		* * "testicle atrophiers"
-		* * "clitoris atrophiers"
-		* * "labia atrophiers"
-		* * "nipple atrophiers"
-		* * "nipple enhancers"
-		* * "lip atrophiers"
-		* * "breast redistributors"
-		* * "butt redistributors"
-		* * "sag-B-gone"
-		* * "growth stimulants"
-		*/
-		this.drugs = "no drugs";
-		/**
-		 * * "none"
-		 * * "preventatives"
-		 * * "curatives"
-		 */
-		this.curatives = "none";
-		/** If greater than 10 triggers side effects from drug use. */
-		this.chem = 0;
-		/**
-		 * * "none"
-		 * * applied
-		 * * "extreme"
-		 * * "anaphrodisiacs"
-		 */
-		this.aphrodisiacs = "none";
-		/**
-		 * TODO:
-		* how addict to aphrodisiacs slave is
-		* * 0: not
-		* * 1-2: new addict
-		* * 3-9: confirmed addict
-		* * 10+: dependent
-		*/
-		this.addict = 0;
-		/** 0: no; 1: yes */
-		this.choosesOwnClothes = 0;
-		/**
-			* may accept strings, use at own risk
-			*
-			* * "choosing her own clothes"
-			* * "no clothing"
-			* * "a ball gown"
-			* * "a mini dress"
-			* * "an oversized t-shirt"
-			* * "a schoolgirl outfit"
-			* * "a slave gown"
-			* * "a sweater"
-			* * "a t-shirt"
-			*/
-		this.clothes = "no clothing";
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "ancient Egyptian"
-			* * "cruel retirement counter"
-			* * "uncomfortable leather"
-			* * "tight steel"
-			* * "shock punishment"
-			* * "dildo gag"
-			* * "heavy gold"
-			* * "pretty jewelry"
-			* * "nice retirement counter"
-			* * "bell collar"
-			* * "leather with cowbell"
-			* * "bowtie"
-			* * "neck corset"
-			* * "stylish leather"
-			* * "satin choker"
-			* * "preg biometrics"
-			* * "massive dildo gag"
-			* * "silk ribbon"
-			* * "ball gag"
-			* * "bit gag"
-			* * "ring gag"
-			* * "porcelain mask"
-			*/
-		this.collar = "none";
-		/**
-		* may accept strings, use at own risk
-		* * "none"
-		* * "heels"
-		* * "pumps"
-		* * "extreme heels"
-		* * "boots"
-		* * "flats"
-		*/
-		this.shoes = "none";
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "bullet vibrator"
-			* * "smart bullet vibrator"
-			* * "dildo"
-			* * "large dildo"
-			* * "huge dildo"
-			* * "long dildo"
-			* * "long, large dildo"
-			* * "long, huge dildo"
-			*/
-		this.vaginalAccessory = "none";
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "vibrator"
-			*/
-		this.vaginalAttachment = "none";
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "sock"
-			* * "vibrator"
-			*/
-		this.dickAccessory = "none";
-		/**
-			* whether the slave has a chastity device on their anus
-			* 0 - no
-			* 1 - yes
-			*/
-		this.chastityAnus = 0;
-		/**
-			* whether the slave has a chastity device on their penis
-			* 0 - no
-			* 1 - yes
-			*/
-		this.chastityPenis = 0;
-		/**
-			* whether the slave has a chastity device on their vagina
-			* 0 - no
-			* 1 - yes
-			*/
-		this.chastityVagina = 0;
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "hand gloves"
-			* * "elbow gloves"
-			*/
-		this.armAccessory = "none";
-		/**
-			* may accept strings, use at own risk
-			* * "none"
-			* * "short stockings"
-			* * "long stockings"
-			*/
-		this.legAccessory = "none";
-		/**
-		* may accept strings, use at own risk
-		* * "none"
-		* * "plug"
-		* * "large plug"
-		* * "huge plug"
-		* * "long plug"
-		* * "long, large plug"
-		* * "long, huge plug"
-		*/
-		this.buttplug = "none";
-		/**
-		* Does the slave have an attachment on their buttplug
-		*
-		*  may accept strings, use at own risk
-		* * "none"
-		* * "tail"
-		* * "fox tail"
-		* * "cat tail"
-		* * "cow tail"
-		*/
-		this.buttplugAttachment = "none";
-		/**
-		* slave intelligence
-		* * -100 - -96: borderline retarded
-		* * -95 - -51: very slow
-		* * -50 - -16: slow
-		* * -15 - 15: average
-		* * 16 - 50: smart
-		* * 51 - 95: very smart
-		* * 96 - 100: brilliant
-		*/
-		this.intelligence = 0;
-		/**
-		* Degree of slave 's education
-		* * 0: uneducated
-		* * 1+: partial education (not really used)
-		* * 15+: educated
-		* * 30: well educated
-		*/
-		this.intelligenceImplant = 0;
-		/**
-		* sex drive
-		* * 0 - 20: no sex drive
-		* * 21 - 40: poor sex drive
-		* * 41 - 60: average sex drive
-		* * 61 - 80: good sex drive
-		* * 81 - 95: powerful sex drive
-		* * 96+: nymphomaniac
-		*/
-		this.energy = 50;
-		/**
-			* The amount of sex the slave had with customers for certain jobs during a week
-			*/
-		this.sexAmount = 0;
-		/**
-			* The 'quality' of the sex a slave had with customers. High quality means they fetch a higher price for their services
-			*/
-		this.sexQuality = 0;
-		/**
-			* how badly she needs sex.
-			*
-			*  0: sated
-			*/
-		this.need = 0;
-		/**
-		* attraction to women
-		* * 0 - 5: disgusted by women
-		* * 6 - 15: turned off by women
-		* * 15 - 35: not attracted to women
-		* * 36 - 65: indifferent to women
-		* * 66 - 85: attracted to women
-		* * 86 - 95: aroused by women
-		* * 96+: passionate about women
-		*
-		* *if both attrXX and attrXY > 95, slave will be omnisexual*
-		*
-		* *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac*
-		*/
-		this.attrXX = 0;
-		/**
-			* attraction to men
-			* * 0 - 5: disgusted by men
-			* * 6 - 15: turned off by men
-			* * 15 - 35: not attracted to men
-			* * 36 - 65: indifferent to men
-			* * 66 - 85: attracted to men
-			* * 86 - 95: aroused by men
-			* * 96+: passionate about men
-			*
-			* *if both attrXX and attrXY > 95, slave will be omnisexual*
-			*
-			* *if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac*
-			*/
-		this.attrXY = 0;
-		/** 0: no; 1: yes */
-		this.attrKnown = 0;
-		/**
-		* * "none"
-		* * "mindbroken"
-		* * "submissive"
-		* * "cumslut"
-		* * "humiliation"
-		* * "buttslut"
-		* * "boobs"
-		* * "sadist"
-		* * "masochist"
-		* * "dom"
-		* * "pregnancy"
-		*/
-		this.fetish = "none";
-		/** How strong her fetish is (10-100)
-		*
-		* 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */
-		this.fetishStrength = 70;
-		/** Is fetish known to player
-		*
-		* 0: no; 1: yes */
-		this.fetishKnown = 0;
-		/**
-		* * "none"
-		* * "arrogant": clings to her dignity, thinks slavery is beneath her
-		* * "bitchy": can 't keep her opinions to herself
-		* * "odd": says and does odd things
-		* * "hates men": hates men
-		* * "hates women": hates women
-		* * "gluttonous": likes eating, gains weight
-		* * "anorexic": dislikes eating and being forced to eat, loses weight
-		* * "devout": resistance through religious faith
-		* * "liberated": believes slavery is wrong
-		*/
-		this.behavioralFlaw = "none";
-		/**
-		* * "none"
-		* * "confident": believes she has value as a slave
-		* * "cutting": often has as witty or cunning remark ready, knows when to say it
-		* * "funny": is funny
-		* * "fitness": loves working out
-		* * "adores women": likes spending time with women
-		* * "adores men": likes spending time with men
-		* * "insecure": defines herself on the thoughts of others
-		* * "sinful": breaks cultural norms
-		* * "advocate": advocates slavery
-		*/
-		this.behavioralQuirk = "none";
-		/**
-		* * "none"
-		* * "hates oral": hates oral sex
-		* * "hates anal": hates anal sex
-		* * "hates penetration": dislikes penetrative sex
-		* * "shamefast": nervous when naked
-		* * "idealistic": believes sex should be based on love and consent
-		* * "repressed": dislikes sex
-		* * "apathetic": inert during sex
-		* * "crude": sexually crude and has little sense of what partners find disgusting during sex
-		* * "judgemental": sexually judgemental and often judges her sexual partners' performance
-		* * "neglectful": disregards herself in sex
-		* * "cum addict": addicted to cum
-		* * "anal addict": addicted to anal
-		* * "attention whore": addicted to being the center of attention
-		* * "breast growth": addicted to her own breasts
-		* * "abusive": sexually abusive
-		* * "malicious": loves causing pain and suffering
-		* * "self hating": hates herself
-		* * "breeder": addicted to being pregnant
-		*/
-		this.sexualFlaw = "none";
-		/**
-		* * "none"
-		* * "gagfuck queen": can take a facefucking
-		* * "painal queen": knows how far she can go without getting hurt
-		* * "strugglefuck queen": knows how much resistance her partners want
-		* * "tease": is a tease
-		* * "romantic": enjoys the closeness of sex
-		* * "perverted": enjoys breaking sexual boundaries
-		* * "caring": enjoys bring her partners to orgasm
-		* * "unflinching": willing to do anything
-		* * "size queen": prefers big cocks
-		*/
-		this.sexualQuirk = "none";
-		/** 0: does not have; 1: carrier; 2: active
-			* * heterochromia is an exception. String = active
-			*/
-		this.geneticQuirks = {
-			/** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */
-			macromastia: 0,
-			/** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced.
-			*
-			* **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
-			gigantomastia: 0,
-			/** Is prone to having twins, shorter pregnancy recovery rate */
-			fertility: 0,
-			/** Is prone to having multiples, even shorter pregnancy recovery rate
-			*
-			* **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */
-			hyperFertility: 0,
-			/** Pregnancy does not block ovulation, slave can become pregnant even while pregnant */
-			superfetation: 0,
-			/** Is abnormally tall. gigantism + dwarfism - is very average*/
-			gigantism: 0,
-			/** Is abnormally short. gigantism + dwarfism - is very average*/
-			dwarfism: 0,
-			/** Has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
-			pFace: 0,
-			/** Has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
-			uFace: 0,
-			/** Has pale skin, white hair and red eyes */
-			albinism: 0,
-			/** May have mismatched eyes */
-			heterochromia: 0,
-			/** Ass never stops growing. Increased growth rate, reduced shrink rate. */
-			rearLipedema: 0,
-			/** Has (or will have) a huge dong */
-			wellHung: 0,
-			/** Constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
-			wGain: 0,
-			/** Constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
-			wLoss: 0,
-			/** Body attempts to normalize to an androgynous state */
-			androgyny: 0,
-			/** Constantly gains muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss aplified, passively lose muscle unless building */
-			mGain: 0,
-			/** Constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss aplified, passively lose muscle unless building */
-			mLoss: 0,
-			/** Slave can only ever birth girls */
-			girlsOnly: 0
-		};
-		/** Counts various acts slave participated in */
-		this.counter = new App.Entity.ChildActionsCountersState();
-		/** Values provided by players */
-		this.custom = new App.Entity.ChildCustomAddonsState();
-		/** Does this slave refer to you rudely?
-		*
-		* 0: not being rude; 1: insists on calling you a rude title */
-		this.rudeTitle = 0;
-		/** @type {string[]} */
-		this.currentRules = [];
-		/**
-		* Child has a tattoo that is only recognizable when she has a big belly.
-		* * "a heart"
-		* * "a star"
-		* * "a butterfly"
-		* @type {string|number} */
-		this.bellyTat = 0;
-		/**
-			* Child has a series of tattoos to denote how many abortions she has had.
-			* * -1: no tattoo
-			* *  0: assigned to have tattoo, may not have one yet
-			* * 1+: number of abortion tattoos she has
-			*/
-		this.abortionTat = -1;
-		/**
-			* Child has a series of tattoos to denote how many times she has given birth.
-			* * -1: no tattoo
-			* *  0: assigned to have tattoo, may not have one yet
-			* * 1+: number of birth tattoos she has
-			*/
-		this.birthsTat = -1;
-		/** Child will give birth this week.
-		*
-		* 1: true; 0: false */
-		this.induce = 0;
-		/** Male slave has an anal womb and can get pregnant.
-		*
-		* 1: true; 0: false */
-		this.mpreg = 0;
-		/** How much fluid is distending the slave.
-		*
-		* 1: 2L; 2: 4L; 3: 8L */
-		this.inflation = 0;
-		/**
-		* What kind of fluid is in the slave.
-		* * "none"
-		* * "water"
-		* * "cum"
-		* * "milk"
-		* * "food"
-		* * "aphrodisiac"
-		* * "curative"
-		* * "tightener"
-		* * "urine"
-		*/
-		this.inflationType = "none";
-		/**
-		* How she is being filled.
-		* * 0: not
-		* * 1: oral
-		* * 2: anal
-		* * 3: orally by another slave
-		*/
-		this.inflationMethod = 0;
-		/** If inflationMethod === 3, ID of the slave filling her with milk. */
-		this.milkSource = 0;
-		/** If inflationMethod 3, ID of the slave filling her with cum. */
-		this.cumSource = 0;
-		/** Child's internals have ruptured. Used with poor health and overinflation.
-		*
-		* 1: true; 0: false */
-		this.burst = 0;
-		/** Do you and the slave know she is pregnant.
-		*
-		* 0: no; 1: yes */
-		this.pregKnown = 0;
-		/** How long she has been pregnant
-		*
-		* used in place of .preg when pregnancy speed up and slow down are used on a slave
-		*
-		* if negative, designates postpartum. */
-		this.pregWeek = 0;
-		/**
-			* how big their belly is in CCs
-			*
-			* ||thresholds:|
-			* |-|-|
-			* 100	| bloated
-			* 1500   | early pregnancy
-			* 5000   | obviously pregnant
-			* 10000  | very pregnant
-			* 15000  | full term
-			* 30000  | full term twins
-			* 45000  | full term triplets
-			* 60000  | full term quads
-			* 75000  | full term quints
-			* 90000  | full term sextuplets
-			* 105000 | full term septuplets
-			* 120000 | full term octuplets
-			* 150000 | oversized pregnancy
-			* 300000 | hyperpreg state 1
-			* 450000 | hyperpreg state 2
-			* 600000 | hyperpreg state 3
-			* 750000 | hyperpreg state 4
-			*/
-		this.belly = 0;
-		/**
-			* how big their belly is in CCs (pregnancy only)
-			*
-			* ||thresholds|
-			* |-|-|
-			* 100	| bloated
-			* 1500   | early pregnancy
-			* 5000   | obviously pregnant
-			* 10000  | very pregnant
-			* 15000  | full term
-			* 30000  | full term twins
-			* 45000  | full term triplets
-			* 60000  | full term quads
-			* 75000  | full term quints
-			* 90000  | full term sextuplets
-			* 105000 | full term septuplets
-			* 120000 | full term octuplets
-			* 150000 | oversized pregnancy (9+ babies)
-			* 300000 | hyperpreg state 1 (20+ babies)
-			* 450000 | hyperpreg state 2 (30+ babies)
-			* 600000 | hyperpreg state 3 (40+ babies)
-			* 750000 | hyperpreg state 4 (50+ babies)
-			*/
-		this.bellyPreg = 0;
-		/**
-		* how big their belly is in CCs (fluid distension only)
-		*
-		* ||thresholds|
-		* |-|-|
-		* 100   | bloated
-		* 2000  | clearly bloated (2 L)
-		* 5000  | very full (~1 gal)
-		* 10000 | full to bursting (~2 gal)
-		*/
-		this.bellyFluid = 0;
-		/**
-			* Does the slave have a fillable abdominal implant.
-			* * -1: no
-			* * 0+: yes
-			* * 2000+: Early pregnancy
-			* * 4000+: looks pregnant
-			* * 8000+: looks full term
-			* * 16000+: hyperpregnant 1
-			* * 32000+: hyperpregnant 2
-			*/
-		this.bellyImplant = -1;
-		/** How saggy her belly is after being distended for too long.
-		*
-		* 1+ changes belly description */
-		this.bellySag = 0;
-		/** How saggy her belly is from being too pregnant.
-		*
-		* 1+ changes belly description and overrides/coincides with bellySag */
-		this.bellySagPreg = 0;
-		/**
-		* Has the slave 's belly implant been filled this week. Causes health damage for overfilling.
-		*
-		* 0: no pain; 1: will experience pain; 2: cannot be filled this week */
-		this.bellyPain = 0;
-		/** Does the slave have a cervical implant that slowly feeds cum from being fucked into a fillable implant.
-		*
-		* 0: no; 1: vaginal version only; 2: anal version only; 3: both vaginal and anal */
-		this.cervixImplant = 0;
-		/** Target .physicalAge for female puberty to occur. */
-		this.pubertyAgeXX = 13;
-		/** Has the slave gone through female puberty.
-		*
-		* 0: no; 1: yes */
-		this.pubertyXX = 0;
-		/** Target .physicalAge for male puberty to occur. */
-		this.pubertyAgeXY = 13;
-		/** Has the slave gone through male puberty.
-		*
-		* 0: no; 1: yes */
-		this.pubertyXY = 0;
-		/**
-		* not fully implemented.
-		* * 0: no scars
-		* * 1: light scarring
-		* * 2: heavy scarring
-		* * 3: fresh scarring
-		* * 4: burns
-		* * 5: menacing scar
-		* * 6: exotic scar
-		*/
-		this.scars = 0;
-		/**
-		* In a eugenics society, this slave is a designated breeder.
-		*
-		* 1: yes; 0: no */
-		this.breedingMark = 0;
-		/**  Is the Head Girl permitted to fuck this slave pregnant.
-		*
-		* 0: no; 1: yes */
-		this.HGExclude = 0;
-		/**
-		* What species of sperm she produces.
-		* * "human"
-		* * "sterile"
-		* * "dog"
-		* * "pig"
-		* * "horse"
-		* * "cow"
-		*/
-		this.ballType = "human";
-		/**
-		* What species of ovum she produces.
-		* * "human"
-		* * "dog"
-		* * "pig"
-		* * "horse"
-		* * "cow"
-		*/
-		this.eggType = "human";
-		/** Eugenics variable. Is the slave allowed to choose to wear chastity.
-		*
-		* 0: no; 1: yes */
-		this.choosesOwnChastity = 0;
-		/**
-		* Is she on gestation altering drugs?
-		* * "none"
-		* * "slow gestation"
-		* * "speed up"
-		* * "labor suppressors"
-		*/
-		this.pregControl = "none";
-		/**
-			* Array that holds a slaves fitted prosthetics. Objects are used to ensure easier expansion later (tattoos for limbs and similar).
-			*
-			* Elements of the array should be objects.
-			* * .id: ID of the prosthetic, see setup.prostheticIDs
-			* @type {Array.<{id:string}>} */
-		this.readyProsthetics = [];
-		/**  */
-		this.ageAdjust = 0;
-		/** Child has undergone hair removal surgery
-		*
-		* 0: no; 1: yes */
-		this.bald = 0;
-		/** Child is in original body.
-			*
-			* 0: yes; 1+: number of swaps (increases upkeep each time) */
-		this.bodySwap = 0;
-		/** Who, if relevant, the body belonged to. */
-		this.origBodyOwner = "";
-		/** Who, if relevant, the body belonged to. */
-		this.origBodyOwnerID = 0;
-		/** Cause of slave death. */
-		this.death = "";
-		/**
-			* Child's current hormonal balance, directs saHormones changes
-			*
-			* ||thresholds|
-			* |-|-|
-			* -500 - -400 | overwhelmingly masculine
-			* -399 - -300 | extremely masculine
-			* -299 - -200 | heavily masculine
-			* -199 - -100 | very masculine
-			* -99 - -21 | masculine
-			* -20 - 20 | neutral
-			* 21 - 99 | feminine
-			* 100 - 199 | very feminine
-			* 200 - 299 | heavily feminine
-			* 300 - 399 | extremely feminine
-			* 400 - 500 | overwhelmingly feminine
-			*/
-		this.hormoneBalance = 0;
-		/** Whether a slave is permitted to eat Hedonistic Decadence's specialized slave food.
-		*
-		* 0: no; 1: yes */
-		this.onDiet = 0;
-		/** Does the slave have the breast shape maintaining mesh implant.
-		*
-		* 0: no; 1: yes */
-		this.breastMesh = 0;
-		/** Used to denote a slave giving birth prematurely.
-		*
-		* 0: no; 1: yes */
-		this.prematureBirth = 0;
-		/** Was the slave born prematurely?
-		*
-		* 0: no; 1: yes */
-		this.premature = 0;
-		/** Has the slave had a vasectomy?
-		*
-		* 0: no; 1: yes */
-		this.vasectomy = 0;
-		/** Is the Child's hair under constant maintenance?
-		*
-		* 0: no; 1: yes */
-		this.haircuts = 0;
-		/** Used to tell if the slave is from this game or a previous.
-		*
-		* 0: no; 1: yes */
-		this.newGamePlus = 0;
-		/** Her skills */
-		this.skill = new App.Entity.ChildSkillsState();
-		/** Whether she was put in the incubator at birth
-		*
-		* 0: no; 1: yes, comforting; 2: yes, terrifying */
-		this.tankBaby = 0;
-		/** */
-		this.clone = 0;
-		/**  */
-		this.geneMods = {
-			/** Does slave have induced NCS?
-			*
-			* 0: no; 1: yes */
-			NCS: 0,
-			/** Has the slave undergone the elasticity (plasticity) treatment?
-			*
-			* 0: no; 1: yes */
-			rapidCellGrowth: 0
-		};
-		/* eslint-disable camelcase*/
-		this.NCSyouthening = 0;
-		this.override_Race = 0;
-		this.override_Skin = 0;
-		this.override_Eye_Color = 0;
-		this.override_H_Color = 0;
-		this.override_Pubic_H_Color = 0;
-		this.override_Arm_H_Color = 0;
-		this.override_Brow_H_Color = 0;
-		/** Erratic weight gain
-		*
-		* 0: stable; 1: gaining; -1: losing */
-		this.weightDirection = 0;
-		/** @type {{skin:string, eyeColor:string, hColor:string}} */
-		this.albinismOverride = null;
-		/* eslint-enable */
-		/** Amount of cash paid to acquire the slave
-		*
-		* accepts negative numbers, 0, or 1.
-		* 1: unknown price; 0: free; negative: amount paid */
-		this.slaveCost = 0;
-		/** Amount of cash you have spent because of this slave
-		*
-		* accepts negative numbers or 0 */
-		this.lifetimeCashExpenses = 0;
-		/** Total amount of cash you have earned because of this slave
-		*
-		* accepts positive numbers or 0 */
-		this.lifetimeCashIncome = 0;
-		/**  Amount of cash you have earned because of this slave last week
-		*
-		* accepts positive numbers or 0 */
-		this.lastWeeksCashIncome = 0;
-		/** Not currently used, will work similarly to the cash variables above */
-		this.lifetimeRepExpenses = 0;
-		/** Not currently used, will work similarly to the cash variables above */
-		this.lifetimeRepIncome = 0;
-		/** Not currently used, will work similarly to the cash variables above */
-		this.lastWeeksRepIncome = 0;
-		/** Not currently used, will work similarly to the cash variables above */
-		this.lastWeeksRepExpenses = 0;
+	} else if (child.weight > 130) {
+		if (arcology.FSHedonisticDecadence !== "unset") {
+			r += `${jsEither("amazingly curvy", "amazingly plush")}. `;
+		} else {
+			r += `<span class="red">${jsEither("very overweight", "obese", "very fat")}.</span> `;
+		}
+	} else if (child.weight > 95) {
+		if (child.hips > 1) {
+			r += `${"extremely curvy", "extremely plush"}, but ${his} huge hips make the extra weight attractive on ${him}. `;
+		} else if (arcology.FSHedonisticDecadence !== "unset") {
+			r += `${jsEither("extremely curvy", "extremely plush")}. `;
+		} else {
+			r += `<span class="red">${jsEither("carrying a lot of extra weight", "fat", "overweight")}.</span> `;
+		}
+	} else if (child.weight > 30) {
+		if (child.hips > 1) {
+			r += `${jsEither("quite curvy", "very plush")}, but ${his} motherly hips make the extra weight attractive on ${him}. `;
+		} else if (arcology.FSHedonisticDecadence !== "unset") {
+			r += `${jsEither("quite curvy", "very plush")}. `;
+		} else {
+			r += `<span class="red">${jsEither("carrying extra weight", "chubby")}.</span> `;
+		}
+	} else if (child.weight > 10) {
+		r += `${jsEither("nicely plush", "pleasingly curvy")}. `;
+	} else if (child.weight >= -10) {
+		r += `${jsEither("a healthy weight", "an attractive weight")}. `;
+	} else if (child.weight >= -30) {
+		r += `${jsEither("appealingly skinny", "pleasingly thin")}. `;
+	} else if (child.weight >= -95) {
+		if (child.hips > 1) {
+			r += `${jsEither("quite skinny", "very thin")}, but ${his} wide hips make the gap between ${his} thighs very noticeable. `;
+		} else if (child.hips < -1) {
+			r += `${jsEither("quite skinny", "very thin")}, but ${his} trim hips make ${him} look like a model. `;
+		} else {
+			r += `<span class="red">${"rail thin", "too skinny", "underweight"}.</span> `;
+		}
+	} else {
+		r += `<span class="red">${"dangerously skinny", "emaciated"}.</span> `;
 	}
-};
-
-/* REPORTS */
 
-/**
- * Details week-to-week changes in children in the Nursery
- * @returns {string}
- */
-App.Facilities.Nursery.childrenReport = function childrenReport() {
-	"use strict";
-
-	const
-		Matron = V.Matron,
-		NL = App.Entity.facilities.nursery.employeesIDs().size,
-		CL = V.cribs.length;
-
-	let
-		r = ``;
+	if (child.hips > 2) {
+		r += `${His} hips are unrealistically wide; it is obvious they have been artificially widened. `;
+	}
 
-	for (let i = 0; i < CL; i++) {
-		const
-			child = V.cribs[i];
-			// {
-			// he, him, his, He, His
-			// } = getPronouns(child);
+	r += waist(child);
 
-		let
-			he,
-			his,
-			him,
-			He,
-			His;
-
-		// FIXME: get pronoun system to work with child objects
-		if (child.genes === "XX") {
-			he = "she",
-			him = "her",
-			his = "her";
+	if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderFundamentalistLawBeauty > 0) {
+		if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhyscialIdealistStrongFat === 0) {
+			if (child.weight > 130) {
+				r += `${He} is much too fat for the fashionable feminine ideal. `;
+			} else if (child.weight > 30) {
+				r += `${He} is too fat for the fashionable feminine ideal. `;
+			} else if (child.weight < -30) {
+				r += `${He} is too skinny for the fashionable feminine ideal. `;
+			}
 		} else {
-			he = "he",
-			him = "him",
-			his = "his";
+			if (child.weight > 130) {
+				r += `${He} is much too fat for the fashionable feminine ideal. `;
+			} else if (child.weight < -30) {
+				r += `${He} is too skinny for the fashionable feminine ideal. `;
+			}
 		}
-		He = capFirstChar(he), His = capFirstChar(his);
-
-		if (child.growTime > 0) {
-			r += `<br><span class="pink">${child.slaveName}</span> is growing steadily. ${He} will be ready for release in about ${years(child.growTime)}. `;
+	} else if (arcology.FSSlimnessEnthusiastLaw === 1) {
+		if (arcology.FSHedonisticDecadence === "unset" && arcology.FSPhyscialIdealistStrongFat === 0) {
+			if (child.weight > 30) {
+				r += `${He} is much too fat for the fashionable feminine ideal. `;
+			} else if (child.weight > 10) {
+				r += `${He} is too fat for the fashionable feminine ideal. `;
+			}
 		} else {
-			r += `<span class="pink">${child.slaveName}</span> is <span class="lime">ready for release.</span> ${He} will be removed from ${V.nurseryName} upon your approach.`;
+			if (child.weight > 60) {
+				r += `${He} is much too fat for the fashionable feminine ideal. `;
+			} else if (child.weight > 30) {
+				r += `${He} is too fat for the fashionable feminine ideal. `;
+			}
 		}
+	} else if (arcology.FSHedonisticDecadenceLaw2) {
+		if (child.weight <= 95) {
+			r += `${He} is too thin for the fashionable feminine ideal. `;
+		} else if (child.weight <= 10) {
+			r += `${He} is much too thin for the fashionable feminine ideal. `;
+		}
+	}
 
-		// TODO: add Matron and nanny effects
-		if (child.actualAge >= 3) {
-			if (Matron || NL) {
-				let
-					chance = jsRandom(1, 100);
-
-				if (jsDef(Matron)) {
-					if (Matron.fetish !== "none") {
-						if (chance > 90) {
-							if (child.fetish === "none") {
-								// TODO: clean up the following blocks
-								r += `${child.slaveName} has taken a few cues from ${Matron.slaveName}, and `;
-								switch (child.fetish) {
-									case "submissive":
-										r += `is now a submissive`;
-										break;
-									case "cumslut":
-										r += `is now a cumslut`;
-										break;
-									case "humiliation":
-										r += `now has a fetish for humiliation`;
-										break;
-									case "buttslut":
-										r += `is now a buttslut`;
-										break;
-									case "boobs":
-										r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
-										break;
-									case "sadist":
-										r += `now gets off on causing pain`;
-										break;
-									case "masochist":
-										r += `now gets off on pain`;
-										break;
-									case "dom":
-										r += `is now very sexually dominant`;
-										break;
-									case "pregnancy":
-										r += `has developed a facination for all things pregnancy-related`;
-										break;
-								}
-								r += `. `;
-								child.fetish = Matron.fetish;
-							} else {
-								if (chance > 95) {
-									r += `${Matron.slaveName} has rubbed off on ${child.slaveName}, in more ways than one. ${He} `;
-									switch (child.fetish) {
-										case "submissive":
-											r += `is now a submissive`;
-											break;
-										case "cumslut":
-											r += `is now a cumslut`;
-											break;
-										case "humiliation":
-											r += `now has a fetish for humiliation`;
-											break;
-										case "buttslut":
-											r += `is now a buttslut`;
-											break;
-										case "boobs":
-											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
-											break;
-										case "sadist":
-											r += `now gets off on causing pain`;
-											break;
-										case "masochist":
-											r += `now gets off on pain`;
-											break;
-										case "dom":
-											r += `is now very sexually dominant`;
-											break;
-										case "pregnancy":
-											r += `has developed a facination for all things pregnancy-related`;
-											break;
-									}
-									r += `. `;
-									child.fetish = Matron.fetish;
-								}
-							}
-						}
-					}
-				}
-
-				if (NL > 0) {
-					for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.nursery)) {
-						if (slave.fetish !== "none") {
-							if (chance > 85) {
-								if (child.fetish === "none") {
-									r += `${slave.slaveName} has left quite an impression on ${child.slaveName}, and ${he} `;
-									switch (child.fetish) {
-										case "submissive":
-											r += `is now a submissive`;
-											break;
-										case "cumslut":
-											r += `is now a cumslut`;
-											break;
-										case "humiliation":
-											r += `now has a fetish for humiliation`;
-											break;
-										case "buttslut":
-											r += `is now a buttslut`;
-											break;
-										case "boobs":
-											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
-											break;
-										case "sadist":
-											r += `now gets off on causing pain`;
-											break;
-										case "masochist":
-											r += `now gets off on pain`;
-											break;
-										case "dom":
-											r += `is now very sexually dominant`;
-											break;
-										case "pregnancy":
-											r += `has developed a facination for all things pregnancy-related`;
-											break;
-									}
-									r += `. `;
-									child.fetish = slave.fetish;
-								} else {
-									if (chance > 90) {
-										r += `${child.slaveName} seems to have taken to ${slave.slaveName}'s example, and `;
-										switch (child.fetish) {
-										case "submissive":
-											r += `is now a submissive`;
-											break;
-										case "cumslut":
-											r += `is now a cumslut`;
-											break;
-										case "humiliation":
-											r += `now has a fetish for humiliation`;
-											break;
-										case "buttslut":
-											r += `is now a buttslut`;
-											break;
-										case "boobs":
-											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
-											break;
-										case "sadist":
-											r += `now gets off on causing pain`;
-											break;
-										case "masochist":
-											r += `now gets off on pain`;
-											break;
-										case "dom":
-											r += `is now very sexually dominant`;
-											break;
-										case "pregnancy":
-											r += `has developed a facination for all things pregnancy-related`;
-											break;
-									}
-									r += `. `;
-										child.fetish = slave.fetish;
-									}
-								}
-							}
-						}
-					}
-				}
-
-				// TODO: add education system
-				if (jsDef(Matron) && Matron) {
-					const {
-						// eslint-disable-next-line no-unused-vars
-						he2, him2, his2, hers2, himself2, boy2, He2, His2
-					} = getPronouns(Matron).appendSuffix('2');
-
-					if (Matron.intelligence + Matron.intelligenceImplant > 65) {
-						r += `${Matron.slaveName} is so intelligent and well-educated that ${he2} is able to teach ${CL > 1 ? `the children` : `${child.slaveName}`} very effectively, and so ${CL > 1 ? child.slaveName : `${he}`} gradually grows smarter. `;	// TODO: not happy with this
-						child.intelligenceImplant += 3;	// TODO: should this raise intelligence instead?
-					} else if (Matron.intelligenceImplant > 30) {
-						r += `${Matron.slaveName}'s education makes up for the fact that ${CL > 1 ? child.slaveName : `${he}`} isn't the brightest and allows ${him2} to teach ${CL > 1 ? `the children` : `${child.slaveName}`} quite effectively, and so ${CL > 1 ? child.slaveName : `${he}`} grows a bit smarter. `;	// TODO:
-						child.intelligenceImplant += 2;
-					} else if (Matron.intelligence > 50) {
-						r += `Though ${Matron.slaveName} has had little to no formal education, ${his2} natural brilliance allows ${him2} to teach ${CL > 1 ? `the children` : `${child.slaveName}`} quite effectively, and so ${CL > 1 ? child.slaveName : `${he}`} grows a bit smarter. `;	// TODO:
-						child.intelligenceImplant += 2;
-					} else {
-						r += `${Matron.slaveName} isn't the brightest, and isn't as effective at teaching as ${he2} otherwise could be. ${He2} is only somewhat effective at teaching ${CL > 1 ? `the children` : `${child.slaveName}`}, and so ${CL > 1 ? child.slaveName : `${he}`} grows just a little bit smarter. `;	// TODO:
-						child.intelligenceImplant++;
-					}
-				}
-
-				if (NL > 0) {
-					let
-						averageIntelligence = 0,
-						averageIntelligenceImplant = 0;
-
-					const nannies = App.Entity.facilities.nursery.employees();
-					for (const nanny of nannies) {
-						averageIntelligence += nanny.intelligence;
-						averageIntelligenceImplant += nanny.intelligenceImplant;
-					}
-
-					const firstNanny = nannies[0];
-
-					averageIntelligence = averageIntelligence / NL;
-					averageIntelligenceImplant = averageIntelligenceImplant / NL;
-
-					if (averageIntelligence + averageIntelligenceImplant > 65) {
-						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very intelligent and well educated and are able to teach ${CL > 1 ? `the children` : child.slaveName} very effectively. `;
-						child.intelligenceImplant += 3;
-					} else if (averageIntelligence > 50) {
-						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very intelligent and able to teach ${CL > 1 ? `the children` : child.slaveName} quite effectively. `;
-						child.intelligenceImplant += 2;
-					} else if (averageIntelligenceImplant > 25) {
-						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very well educated and able to teach ${CL > 1 ? `the children` : child.slaveName} quite effectively. `;
-						child.intelligenceImplant += 2;
-					} else if (averageIntelligenceImplant > 15) {
-						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} well educated and able to teach ${CL > 1 ? `the children` : child.slaveName} fairly effectively. `;
-						child.intelligenceImplant++;
-					}
-				}
-
-				// TODO: add fitness system
-				if (jsDef(Matron) && Matron) {
-					// TODO:
-				}
-
-				if (NL > 0) {
-					// TODO:
-				}
+	if (canWalk(child)) {
+		if (child.weight > (170 + child.muscles / 5) && child.physicalAge >= 18) {
+			r += `${He} is so fat that it is difficult for ${him} to move. `;
+			if (child.muscles > 95) {
+				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
+			} else if (child.muscles > 30) {
+				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
+			} else if (child.muscles > 5) {
+				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
+			} else {
+				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
 			}
-
-			// TODO: add friend / rivalry system
-			// TODO: add relations to friend system
-			for (let j = 0; j < CL; j++) {
-				const
-					c = V.cribs[j];
-
-				let
-					friend = 0,
-					rival = 0,
-					chance = jsRandom(1, 100);
-
-				if (c.actualAge >= 3) {
-					if (c.fetish === child.fetish) {
-						r += ``; // TODO:
-						friend++;
-					}
-
-					if (c.sexualQuirk === child.sexualQuirk || c.behavioralQuirk === child.behavioralQuirk) {
-						r += ``; // TODO:
-						friend++;
-					}
-
-					if (c.fetish === "sadist" || c.fetish === "dom") {
-						r += ``; // TODO:
-						rival++;
-					} else if (child.fetish === "sadist" || child.fetish === "dom") {
-						r += ``; // TODO:
-						rival++;
-					}
-
-					if (friend) {
-						if (rival) {
-							if (friend > rival) {
-								if (chance > 75) {
-									r += ``;	// TODO:
-									child.relationship = 1, child.relationshipTarget = c.ID;
-									c.relationship = 1, c.relationshipTarget = child.ID;
-								}
-							}
-						} else {
-							if (chance > 60) {
-								r += ``;	// TODO:
-								child.relationship = 1, child.relationshipTarget = c.ID;
-								c.relationship = 1, c.relationshipTarget = child.ID;
-							}
-						}
-					}
-
-					if (rival) {
-						if (friend) {
-							if (rival > friend) {
-								if (chance > 75) {
-									r += ``;	// TODO:
-								}
-							}
-						} else {
-							if (chance > 60) {
-								r += ``;	// TODO:
-							}
-						}
-					}
-				}
+		} else if (child.weight > (110 + child.muscles / 20) && child.physicalAge <= 3) {
+			r += `${He} is so fat that it is difficult for ${him} to move. `;
+			if (child.muscles > 95) {
+				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
+			} else if (child.muscles > 30) {
+				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
+			} else if (child.muscles > 5) {
+				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
+			} else {
+				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
 			}
-
-			// TODO: rework these entirely
-			if (Matron || NL) {
-				if (V.nurseryWeight) {
-					const firstNanny = NL > 0 ? App.Entity.facilities.nursery.employees()[0] : null;
-					r += `<br>`;
-					if (V.nurseryWeightSetting === 1) {
-						if (child.weight < 200) {
-							child.weight += 5;
-						}
-						r += `${He} is being fed an excessive amount of food, causing <span class="red">rapid weight gain.</span> `;
-					} else if (V.nurseryWeightSetting === 2) {
-						if (child.weight > 10) {
-							child.weight--;
-							r += `${Matron ? Matron.slaveName : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is overweight and <span class="green">decreases the amount of food ${he} eats.</span> `;
-						} else if (child.weight <= -10) {
-							child.weight++;
-							r += `${Matron ? Matron.slaveName : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is underweight and <span class="green">increases the amount of food ${he} eats.</span> `;
-						} else {
-							r += `${He} is <span class="lime">currently a healthy weight;</span> efforts will be made to maintain it. `;
-						}
-					} else if (V.nurseryWeightSetting === 0) {
-						if (child.weight > -20) {
-							r += `${His} developing body <span class="red">quickly sheds its gained weight.</span> `;
-							child.weight -= 40;
-						}
-					}
-				} else {
-					if (child.weight > -20) {
-						child.weight -= 40;
-						r += `${His} developing body <span class="red">quickly sheds its gained weight.</span>`;
-					}
-				}
-
-				// TODO: rewrite these
-				if (V.nurseryMuscles) {
-					r += `${He} is being given anabolic steroids causing <span class="green">rapid muscle development.</span> `;	// TODO: not happy with this
-					if (V.nurseryMusclesSetting === 2) {
-						if (child.muscles < 100) {
-							child.muscles += 5;
-						}
-						r += `${Matron ? Matron : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is overly muscular and <span class="green">decreases ${his} steroid dosage.</span> `;
-					} else if (V.nurseryMusclesSetting === 1) {
-						if (child.muscles > 10) {
-							child.muscles--;
-							r += `${Matron ? Matron : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is weak and <span class="green">increases ${his} steroid dosage.</span> `;
-						} else if (child.muscles < -10) {
-							child.muscles++;
-							r += `${He} has <span class="lime">a healthy musculature;</span> efforts will be made to maintain it. `;
-						} else {
-							r += `${His} developing body <span class="red">quickly loses its gained muscle.</span> `;
-						}
-					} else if (V.nurseryMusclesSetting === 0) {
-						if (child.muscles > -100) {
-							child.muscles -= 40;
-							r += `${His} developing body <span class="red">quickly loses its gained muscle.</span> `;
-						}
-					}
-				}
+		} else if (child.weight > (140 + child.muscles / 15) && child.physicalAge <= 12) {
+			r += `${He} is so fat that it is difficult for ${him} to move. `;
+			if (child.muscles > 95) {
+				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
+			} else if (child.muscles > 30) {
+				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
+			} else if (child.muscles > 5) {
+				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
+			} else {
+				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
+			}
+		} else if (child.weight > (165 + child.muscles / 10 && child.physicalAge < 18)) {
+			r += `${He} is so fat that it is difficult for ${him} to move. `;
+			if (child.muscles > 95) {
+				r += `However, ${he} is so powerfully built that ${he} can manage it with effort, though ${he} often has to stop for breaks. `;
+			} else if (child.muscles > 30) {
+				r += `${He} can barely manage to get to ${his} feet unaided, and usually walks alongside objects to help relieve the weight. `;
+			} else if (child.muscles > 5) {
+				r += `${He} requires assistance to get to ${his} feet, and tends to lean on things to help relieve the weight. Much furniture has met an early demise thanks to this habit. `;
+			} else {
+				r += `${He} cannot get to ${his} feet unaided, and tries to stay seated as much as ${he} can. `;
 			}
-		} else {
-			// TODO:
 		}
-		r += `<br>`;
 	}
 
-	return r;
-};
-
-/**
- * Creates a full report of the Nursery
- * @returns {string}
- */
-// TODO: refactor this
-App.Facilities.Nursery.nurseryReport = function nurseryReport() {
-	"use strict";
-
-	let r = ``;
-
-	const
-		Matron = getSlave(V.Matron.ID),
-		arcology = V.arcologies[0];
+	r += heightImplant(child);
 
-	let
-		NL = App.Utils.jobForAssignment(Job.NURSERY).employeesIDs().size,
-		healthBonus = 0,
-		trustBonus = 0,
-		idleBonus = 0,
-		devBonus = 0;
-
-	if (V.nurseryDecoration !== "standard") {
-		devBonus = 1;
+	r += `${He} is `;
+	if (child.muscles > 95) {
+		r += `<span class="pink">extremely muscular,</span> with defined pecs, powerful glutes, and massive traps`;
+		if (child.weight > 95) {
+			r += ` hidden beneath a layer of fat`;
+		}
+		r += `. `;
+	} else if (child.muscles > 50) {
+		r += `<span class="pink">quite muscular,</span> with ripped abs, strong shoulders, and defined lats`;
+		if (child.weight > 95) {
+			r += ` hidden beneath a layer of fat`;
+		}
+		r += `. `;
+	} else if (child.muscles > 30) {
+		r += `<span class="pink">well built,</span> yet feminine with defined abs and strong shapely muscles`;
+		if (child.weight > 95) {
+			r += ` hidden beneath a layer of fat`;
+		}
+		r += `. `;
+	} else if (child.muscles > 5) {
+		r += `<span class="pink">well built,</span> yet feminine, with just-visible muscles`;
+		if (child.weight > 30) {
+			r += ` hidden beneath a layer of fat`;
+		}
+		r += `. `;
+	} else if (child.muscles >= -5) {
+		r += `<span class="pink">soft and feminine,</span> with no visible muscles. `;
+	} else if (child.muscles >= -30) {
+		r += `<span class="pink">rather weak,</span> with barely any muscles. `;
+	} else if (child.muscles >= -95) {
+		r += `<span class="pink">very weak;</span> ${he} struggles with day-to-day tasks. `;
+	} else {
+		r += `<span class="red">frail;</span> ${he} can barely hold ${himself} up. `;
 	}
 
-	if (Matron) {
-		const
-			{
-				he, him, his, himself, He, His
-			} = getPronouns(Matron);
+	if (arcology.FSGenderFundamentalistLawBeauty + arcology.FSGenderRadicalistLawBeauty + arcology.FSSlimnessEnthusiastLaw > 0 && arcology.FSPhysicalIdealist === "unset" && !arcology.FSHedonisticDecadenceStrongFat) {
+		if (arcology.FSPhysicalIdealistLaw > 0 && child.muscles > 50) {
+			r += `${He} is entirely too muscular for the fashionable feminine ideal. `;
+		} else if (child.muscles > 30) {
+			r += `${He} is entirely too muscular for the fashionable feminine ideal. `;
+		}
+	}
 
-		if (Matron.health.condition < 100) {
-			improveCondition(Matron, 20);
+	if (hasAnyArms(child)) {
+		let s = "s";
+		let a = "";
+		if (!hasBothArms(child)) {
+			s = "";
+			a = "a ";
 		}
-		if (Matron.devotion <= 60) {
-			Matron.devotion++;
+		if (child.weight > 190) {
+			r += `${He} has ${a}hugely thick arm${s} with sagging fat rolls and `;
+		} else if (child.weight > 160) {
+			r += `${He} has ${a}thick arm${s} with drooping fat folds and `;
+		} else if (child.weight > 130) {
+			r += `${He} has ${a}plump arm${s} with `;
+		} else if (child.weight > 97) {
+			r += `${He} has ${a}chubby arm${s} with `;
+		} else {
+			r += `${He} has ${a}normal arm${s} with `;
 		}
-		if (Matron.trust <= 60) {
-			Matron.trust++;
+
+	if (child.muscles > 95) {
+		r += `huge muscles`;
+		if (child.weight > 95) {
+			r += ` hidden beneath ${his} soft flesh`;
 		}
-		if (Matron.rules.living !== "luxurious") {
-			Matron.rules.living = "luxurious";
+		r += `. `;
+	} else if (child.muscles > 30) {
+		r += `obvious muscles`;
+		if (child.weight > 95) {
+			r += ` hidden beneath ${his} soft flesh`;
 		}
-
-		let FLsFetish = 0;
-		/*
-		if (Matron.fetishStrength <= 95) {
-			if (Matron.fetish !== "caring") {
-				if (fetishChangeChance(Matron) > jsRandom(0, 100)) {
-					FLsFetish = 1, Matron.fetishKnown = 1, Matron.fetish = "caring";
-				}
-			} else if (!Matron.fetishKnown) {
-				FLsFetish = 1, Matron.fetishKnown = 1;
-			} else {
-				FLsFetish = 2, Matron.fetishStrength += 4;
+		r += `. `;
+	} else if (child.muscles > 5) {
+		r += `toned muscles`;
+		if (child.weight > 30) {
+				r += ` hidden beneath ${his} soft flesh`;
 			}
+			r += `. `;
+		} else {
+			r += `little muscle to them. `;
 		}
-		*/
-		if (Matron.fetish === "none" || Matron.fetish === "caring") {
-			devBonus++;
-		}
-
-		Matron.devotion += devBonus;
+	}
 
-		if (V.Matron !== Matron) {
-			V.Matron = Matron;
+	if (child.skill.combat > 0) {
+		r += `${He} is <span class="aquamarine"skilled at combat:</span> ${he} is comfortable with the use of modern firearms and edges weapons, and ${his} limbs `;
+		if (getLimbCount(child, 105) > 1) {
+			r += `would be deadly weapons even if they weren't full of deadly weapons already`;
+		} else if (!isAmputee(child)) {
+			r += `would be deadly weapons if ${he} had any`;
+		} else {
+			r += `are deadly weapons`;
 		}
+		r += `. `;
+	}
 
-		r += `&nbsp;&nbsp;&nbsp;&nbsp;${SlaveFullName(Matron)} is serving as ${V.nurseryName} matron. `;
+	if (child.counter.pitKills > 0) {
+		r += `${child.counter.pitKills} slaves have died by ${his} hand in pit fights. `;
+	}
 
-		if (Matron.relationship === -3 && Matron.devotion > 50) {
-			r += `${He} tries ${his} best to ${V.nurseryChildren ? `properly take care of and raise the children` : `look after ${V.nurseryName} and keep it tidy and running smoothly`}. `;
-		}
+	if (child.corsetPiercing > 0) {
+		r += piercings.corset(child);
+	}
 
-		if (FLsFetish === 1) {
-			r += `${He} ${V.nurseryChildren ? `seems to have a real soft spot for children, and enjoys working with the child${V.nurseryChildren > 1 ? `ren` : ``} in ${V.nurseryName} and raising ${V.nurseryChildren > 1 ? `them` : V.cribs[0].genes === "XX" ? `her` : `him`} to be ${V.nurseryChildren > 1 ? `good slaves` : `a good slave`}` : ``/* TODO: */}. ${He} finds real satisfaction in helping your slaves find sexual gratification, and <span class="lightsalmon">becomes more caring.</span> `;
-		} else if (FLsFetish === 2) {
-			r += `Every new slave in the nursery is a new person ${he} gets to connect with and serve. Sexually. <span class='lightsalmon'>${He} becomes more caring.</span>`;	// TODO:
+	if (hasAnyLegs(child)) {
+		let s = "s";
+		let a = "";
+		if (!hasBothLegs(child)) {
+			s = "";
+			a = "a ";
 		}
 
-		// TODO:
-		if (setup.matronCareers.includes(Matron.career)) {
-			r += `${He} has experience with childcare from ${his} life before ${he} was a slave, making ${him} better at properly raising children, and giving ${him} a better chance of softening flaws into beneficial quirks. `;
-			idleBonus++;
-		} else if (Matron.skill.matron >= V.masteredXP) {
-			r += `${He} has experience with childcare from working for you, making ${him} better at properly raising children, and giving ${him} a better chance of softening flaws into beneficial quirks. `;
-			idleBonus++;
+		if (child.weight > 190) {
+			r += `${He} has ${hasBothLegs(child) ? `` : `an `}extremely fat leg${s} with ${hasBothLegs(child) ? `` : `an `}immense soft, rather uneven thigh${s} and `;
+		} else if (child.weight > 160) {
+			r += `${He} has ${a}very fat leg${s} with ${a}massively thick, soft, somewhat uneven thigh${s} and `;
+		} else if (child.weight > 130) {
+			r += `${He} has ${a}fat leg${s} with ${a}hugely thick, soft thigh${s} and `;
+		} else if (child.weight > 97) {
+			r += `${He} has ${a}fat leg${s} with ${a}thick, soft thigh${s} and `;
+		} else if (child.weight > 95) {
+			r += `${He} has ${a}normal leg${s} with ${a}thick, soft thigh${s} and `;
 		} else {
-			Matron.skill.matron += jsRandom(1, (Matron.intelligence + 4) * 2);
+			r += `${He} has ${a}relatively normal leg${s} and thigh${s} with `;
 		}
 
-		// TODO:
-		if (Matron.fetish === "none") {
-			r += `${Matron.slaveName} respects the slaves working in the nursery, allowing them to care for the children more effectively. `;
-			idleBonus++;
-		} else if (Matron.fetish === "dom") {
-			r += `${Matron.slaveName} enjoys being able to have control over the nannies. `;
-			idleBonus++;
-		} else if (Matron.fetishKnown) {
-			r += `${Matron.slaveName} can't keep ${his} hands to ${himself}, preventing the slaves in the nursery from relaxing completely. `;
+		if (child.muscles > 95) {
+			r += `huge muscles`;
+			if (child.weight > 95) {
+				r += ` hidden beneath ${his} soft flab`;
+			}
+			r += `. `;
+		} else if (child.muscles > 30) {
+			r += `obvious muscles`;
+			if (child.weight > 95) {
+				r += ` hidden beneath ${his} soft flab`;
+			}
+			r += `. `;
+		} else if (child.muscles > 5) {
+			r += `toned muscles`;
+			if (child.weight > 30) {
+				r += ` hidden beneath ${his} soft flab`;
+			}
+			r += `. `;
+		} else {
+			r += `barely any muscle in them. `;
 		}
+	}
 
-		// TODO:
-		if (Matron.visualAge > 35) {
-			r += `${His} apparent maturity encourages the slaves in the nursery to relax and pour out their troubles to ${him}. `;
-		}
+	r += heel(child);
 
-		// TODO:
-		if (Matron.intelligence > 0) {
-			r += `${He}'s so intelligent ${he} can suss out the cause of slaves' emotional issues and counsel them effectively. `;
-		}
+	r += App.Desc.brand(child, "feet");
+	r += App.Desc.brand(child, "calf");
+	r += App.Desc.brand(child, "ankle");
+	r += App.Desc.brand(child, "extra");
 
-		// TODO: write more
+	r += skin(child);
 
-		if (NL < V.nursery) {
-			let seed = jsRandom(1, 10) + ((V.nursery - NL) * (jsRandom(150, 170) + (idleBonus * 10)));
-			cashX(seed, "nursery", Matron);
-			r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;Since ${he} doesn't have enough children to occupy all ${his} time, ${V.nurseryName} takes in citizens' children on a contract basis and ${he} cares for them too, earning <span class='yellowgreen'>${cashFormat(seed)}.</span> `;
-		}
+	if (V.saleDescription) {
+		r += accent(child);
+	}
 
-		if (arcology.FSRepopulationFocus > 0 && V.nurseryBabies > 0) {
-			r += `Society <span class='green'>loves</span> the way you are raising more children for ${arcology.name}. `;
-			FSChange("Repopulationist", 2);
+	if (child.markings === "birthmark" && !child.prestige && child.pornPrestige < 2) {
+		r += `${He} has a large, liver-colored birthmark, detracting from ${his} beauty. `;
+	}
+	if (child.skin === "sun tanned") {
+		if (App.Utils.hasNonassignmentSex(child)) {
+			if (child.fetishKnown && child.fetishStrength > 60) {
+				r += `${His} tan is slightly uneven, since ${he} enjoys`;
+				switch (child.fetish) {
+					case "buttslut":
+						r += `letting other tanned slaves share a tanning bed with ${him} so they can sodomize ${him} while ${he} tans. `;
+						break;
+					case "cumslut":
+						r += `letting other tanned slaves share a tanning bed with ${him} so they get oral from ${him} while ${he} tans. `;
+						break;
+					case "sadist":
+						r += `forcing inferior slaves into the tanning beds with ${him} so ${he} can sodomize them while ${he} tans. `;
+						break;
+					case "dom":
+						r += `bringing other slaves into the tanning beds with ${him} so ${he} can fuck them while ${he} tans. `;
+						break;
+					case "masochist":
+					case "submissive":
+						r += `letting other slaves into the tanning beds with ${him} so they can fuck ${him} while ${he} tans. `;
+						break;
+					case "boobs":
+						r += `bringing other slaves into the tanning beds with ${him} so ${he} can tittyfuck them while ${he} tans. `;
+						break;
+					case "pregnancy":
+						if (Math.random() * 100 < V.seeDicks) {
+							r += `letting slaves with dicks into the tanning beds with ${him} so they can cum inside ${him} while ${he} tans. `;
+						}
+						break;
+					default:
+						r += `bringing other slaves into the tanning beds with ${him} to have sex while ${he} tans. `;
+						break;
+				}
+			}
 		}
+	}
 
-		if (NL > 0) {
-			r += `<br><br>`;
+	if (V.showClothing && !V.saleDescription) {
+		r += ears(child);
+		r += upperFace(child);
+		r += hair(child);
+	} else {
+		r += `${His} hair is ${child.hColor}`;
+		if (child.hColor !== child.eyebrowHColor) {
+			r += `, with ${child.eyebrowHColor} eyebrows`;
+		}
+		r += `. `;
+		if (child.hColor === "red" && child.hLength >= 10) {
+			if (child.markings === "freckles" || (child.markings === "heavily freckled")) {
+				if (skinToneLevel(child.skin) > 5 && skinToneLevel(child) < 10) {
+					r += `It goes perfectly with ${his} ${child.skin} skin and freckles. `;
+				}
+			}
 		}
 	}
 
-	if (NL > 0) {
-		r += `&nbsp;&nbsp;&nbsp;&nbsp;<strong>${NL > 1 ? `There are ${NL} slaves` : `There is one slave`} working in ${V.nurseryName}.</strong> `;
-		if (arcology.FSRepopulationFocus > 0 && V.nurseryBabies > 0) {
-			r += `Society <span class="green">approves</span> of your bringing more children into this world. `;
-		} else if (arcology.FSGenderFundamentalist > 0) {
-			r += `Society <span class="green">approves</span> of your assigning slaves to a traditionally feminine role. `;
+	let pubertyAge = Math.max(child.pubertyAgeXX, child.pubertyAgeXY);
+	if (child.physicalAge < pubertyAge - 2) {
+		r += `${He} is too sexually immature to have armpit hair. `;
+	} else if (child.underArmHStyle === "hairless") {
+		r += `${His} armpits are perfectly smooth and naturally hairless. `;
+	} else if (child.underArmHStyle === "bald") {
+		r += `${His} armpits no longer grow hair, leaving them smooth and hairless. `;
+	} else if (child.underArmHStyle === "waxed") {
+		r += `${His} armpits are waxed and smooth. `;
+	} else if (child.physicalAge < pubertyAge - 1) {
+		r += `${He} has a few ${child.underArmHColor} wisps of armpit hair. `;
+	} else if (child.physicalAge < pubertyAge) {
+		r += `${He} is on the verge of puberty and has a small patch of ${child.underArmHColor} armpit hair. `;
+	} else if (child.underArmHStyle === "shaved") {
+		r += `${His} armpits appear hairless, but closer inspection reveals light, ${child.underArmHColor} stubble. `;
+	} else if (child.underArmHStyle === "neat") {
+		r += `${His} armpit hair is neatly trimmed `;
+		if (!hasAnyArms(child)) {
+			r += `since it is always in full view`;
+		} else {
+			r += ` to not be visible unless ${he} lifts ${his} arms`;
+		}
+		r += `. `;
+	} else if (child.underArmHStyle === "bushy") {
+		r += `${His} ${child.underArmHColor} armpit hair has been allowed to grow freely`;
+		if (!hasAnyArms(child)) {
+			r += ` creating two bushy patches under where ${his} arms used to be`;
+		} else {
+			r += ` and can be seen poking out from under ${his} arms at all times`;
 		}
+		r += `. `;
 	}
 
-	if (Matron) {
-		V.i = V.slaveIndices[Matron.ID];
-		if (V.showEWD) {
-			// TODO: all this
-			r += `<br><br>`;
-			/* 000-250-006 */
-			if (V.seeImages && V.seeReportImages) {
-				r += `<div class="imageRef medImg">${SlaveArt(Matron, 2, 0)}</div>`;
+	if (!child.voice) {
+		r += `${He} is <span class="pink">completely silent,</span> which is understandable, since ${he}'s mute. `;
+	} else {
+		if (child.lips > 95) {
+			r += `${He} is <span class="pink">effectively mute,</span> since ${his} lips are so large that ${he} can no longer speak intelligibly. ${He} can still `;
+			if (child.devotion > 50) {
+				r += `moan`;
+			} else if (child.devotion > 20) {
+				r += `whimper`;
+			} else {
+				r += `scream`;
 			}
-			/* 000-250-006 */
-			r += `<strong><u><span class="pink">${SlaveFullName(Matron)}</span></u></strong> is serving as the Matron in ${V.nurseryName}.`;
-			r += `${App.SlaveAssignment.choosesOwnClothes(Matron)}`;
-			r += `<<include "SA rules">>`;
-			r += `<<include "SA diet">>`;
-			r += `<<include "SA long term effects">>`;
-			r += `${App.SlaveAssignment.drugs(Matron)}`;
-			r += `<<include "SA relationships">>`;
-			r += `<<include "SA rivalries">>`;
-			r += `<br><<include "SA devotion">>`;
-		} else {
-			r += `<<silently>>
-			${App.SlaveAssignment.choosesOwnClothes(Matron)};
-			<<include "SA rules">>
-			<<include "SA diet">>
-			<<include "SA long term effects">>
-			${App.SlaveAssignment.drugs(Matron)};
-			<<include "SA relationships">>
-			<<include "SA rivalries">>
-			<<include "SA devotion">>
-			<</silently>>`;
+			r += ` through them, though. `;
 		}
 	}
 
-	for (const slave of App.Utils.sortedEmployees(App.Utils.jobForAssignment(Job.NURSERY))) {
-		V.i = V.slaveIndices[slave.ID];
-
-		slave.devotion += devBonus, slave.trust += trustBonus;
-		improveCondition(slave, healthBonus);
-
-		// TODO: rework these
-		if (slave.devotion < 60 && slave.trust < 60) {
-			slave.devotion++, slave.trust++;
-		} else if (slave.devotion < 40) {
-			slave.devotion += 10;
-		} else if (slave.trust < 40) {
-			slave.trust += 10;
-		}
-
-		// TODO: rework this
-		if (V.nurseryUpgrade === 1 && slave.health.condition < 20) {
-			improveCondition(slave, 3);
-		}
-
-		// TODO:
-		switch (V.nurseryDecoration) {
-			case "Repopulationist":
-				slave.rules.living = "luxurious";
-				break;
-			case "Degradationist":
-				slave.rules.living = "spare";
-				break;
-			default:
-				slave.rules.living = "normal";
-				break;
+	if (V.showBodyMods) {
+		r += piercings.ears(child);
+		r += piercings.nose(child);
+		r += piercings.eyebrows(child);
+		if (child.custom.tattoo !== "" && jsDef(child.custom.tattoo)) {
+			r += `${child.custom.tattoo}`;
 		}
+	}
 
-		// TODO:
-		if (V.showEWD) {
-			const
-				He = slave.genes === "XX" ? `She` : `He`;
+	r += face(child);
+	r += mouth(child);
 
-			r += `<br><br>`;
-			/* 000-250-006 */
-			if (V.seeImages && V.seeReportImages) {
-				r += `<div class="imageRef smlImg">${SlaveArt(slave, 0, 0)}</div>`;
+	if (V.showClothing && !V.saleDescription) {
+		r += collar(child);
+		if (child.relationship > 4) { // TODO: will children be able to get married?
+			if (hasLeftArm(child)) {
+				r += `${He} has a simple gold band on the little finger of ${his} left hand. `;
+			} else if (hasRightArm(child)) {
+				r += `${He} has a simple gold band on the little finger of ${his} right hand. `;
+			} else {
+				r += `${He} has a simple gold band on a length of chain around ${his} neck. `;
 			}
-			/* 000-250-006 */
-			r += `<strong><u><span class="pink">${SlaveFullName(slave)}</span></u></strong>`;
-			if (slave.choosesOwnAssignment === 2) {
-				r += `${choosesOwnJob(slave)}`;
+		} else if (child.relationship === -3) {
+			if (hasLeftArm(child)) {
+				r += `${He} has a simple steel band on the little finger of ${his} left hand. `;
+			} else if (hasRightArm(child)) {
+				r += `${He} has a simple steel band on the little finger of ${his} right hand. `;
 			} else {
-				r += ` is working in ${V.nurseryName}. `;
+				r += `${He} has a simple steel band on a length of cord around ${his} neck. `;
 			}
-			// TODO: clean this mess up
-			r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;${He} ${App.SlaveAssignment.nanny(slave)}<br>&nbsp;&nbsp;&nbsp;`;
-			r += `${App.SlaveAssignment.choosesOwnClothes(slave)} ${saRules(slave)}`;
-			r += `<<include "SA diet">>`;					// TODO:
-			r += `<<include "SA long term effects">>`;		// TODO:
-			r += `${App.SlaveAssignment.drugs(slave)}`;						// TODO:
-			r += `<<include "SA relationships">>`;			// TODO:
-			r += `<<include "SA rivalries">>`;				// TODO:
-			r += `<br><<include "SA devotion">>`;			// TODO:
-		} else {
-			r += `<<silently>>`;
-			r += `${choosesOwnJob(slave)} ${App.SlaveAssignment.nanny(slave)} ${App.SlaveAssignment.choosesOwnClothes(slave)} ${saRules(slave)}`;
-			r += `<<include "SA diet">>`;
-			r += `<<include "SA long term effects">>`;
-			r += `${App.SlaveAssignment.drugs(slave)}`;
-			r += `<<include "SA relationships">>`;
-			r += `<<include "SA rivalries">>`;
-			r += `<<include "SA devotion">>`;
-			r += `<</silently>>`;
 		}
 	}
 
-	if (NL > 0 || Matron) {
-		r += `<br><br>`;
+	r += nails(child);
+	if (V.showBodyMods) {
+		r += tats.back(child);
+		r += tats.shoulders(child);
+		r += tats.arms(child);
 	}
 
-	function choosesOwnJob(slave) {
-		let r = ``;
-
-		if (V.universalRulesAssignsSelfFacility && slave.devotion > 50 && canWalk(slave) && canSee(slave) && slave.sexualQuirk === "caring" && V.nurseryNannies > NL) {
-			slave.choosesOwnAssignmentText += ` enjoys taking care of children, so ${he} decides to work in ${V.nurseryName}. `;
-			r = slave.choosesOwnAssignmentText;
-			assignJob(slave, Job.NURSERY);
-		}
-
-		return r;
+	if (child.minorInjury !== 0 && child.minorInjury !== "sore ass") {
+		r += `${He} is sporting a <span class="red">${child.minorInjury},</span> covered by makeup. `;
 	}
 
-	// function diet(slave) {
-	// 	let r = ``;
-
-	// 	return r;
-	// }
-
-	// function longTermEffects(slave) {
-	// 	let r = ``;
+	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
 
-	// 	return r;
-	// }
+	r += App.Desc.boobs(child);
+	r += App.Desc.boobsExtra(child);
+	if (V.showBodyMods) {
+		r += tats.boobs(child);
+	}
+	r += App.Desc.brand(child, "chest");
+	r += App.Desc.brand(child, "breast");
+	r += shoulders(child);
+	r += App.Desc.nipples(child);
+	if (V.showBodyMods) {
+		r += piercings.nipples(child);
+	}
+	r += App.Desc.areola(child);
 
-	// function drugs(slave) {
-	// 	let r = ``;
+	if (child.inflation > 0) {
+		V.activeSlave = child;
+		r += `<<BellyInflationDescription>> `; // TODO:
+	} else if (child.bellyImplant >= 2000) {
+		V.activeSlave = child;
+		r += `<<BellyImplantDescription>> `; // TODO:
+	} else {
+		V.activeSlave = child;
+		r += `<<BellyDescription>> `; // TODO:
+	}
+	r += butt(child);
 
-	// 	return r;
-	// }
+	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
 
-	// function relationships(slave) {
-	// 	let r = ``;
+	r += crotch(child);
+	r += dick(child);
+	r += vagina(child);
+	r += anus(child);
 
-	// 	return r;
-	// }
+	r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
 
-	// function rivalries(slave) {
-	// 	let r = ``;
+	switch (child.drugs) {
+		case "super fertility drugs":
+			if (isFertile(child) && !child.preg) {
+				r += `${He} is constantly dripping sexual fluids and ${his} breasts and belly are slightly swollen. The super fertility drugs have ${him} ready to be impregnated. `;
+			}
+			break;
+		case "fertility drugs":
+			if (isFertile(child) && !child.preg) {
+				r += `${He} smells of sexual fluids and ${his} breasts are slightly swollen. The fertility drugs have ${him} ready to be impregnated. `;
+			}
+			break;
+		case "intensive breast injections":
+		case "hyper breast injections":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} tits uncomfortably` : `squirms under the unfamiliar weight on ${his} chest`}. The ${child.drugs === "hyper breast injections" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully stretching ${his} breasts as the mammary and adipose tissue underneath grows explosively. `;
+			break;
+		case "nipple enhancers":
+				r += `${He} ${hasAnyArms(child) ? `massages ${his} nipples uncomfortably` : `squirms in respose to the discomfort in ${his} nipples`}. The A-HGH must be having an effect, painfully causing ${his} body to expand ${his} nipples. `;
+				break;
+		case "intensive butt injections":
+		case "hyper butt injections":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} butt uncomfortably` : `squirms under the unfamiliar weight on ${his} backside`}. The ${child.drugs === "hyper butt injections" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully stretching ${his} buttocks as the muscular and adipose tissue underneath grows explosively. `;
+			break;
+		case "intensive penis enhancement":
+		case "hyper penis enhancement":
+			`${He} ${hasAnyArms(child) ? `massages ${his} ${child.dick > 0 ? `dick` : `clit`} uncomfortably` : `squirms under the unfamiliar weight in ${his} ${child.dick > 0 ? `dick` : `clit`}`}. The ${child.drugs === "hyper penis enhancement" ? `HA-HGH` : `A-HGH`} must be having an effect, painfully lengthening and thickening ${his} ${child.dick > 0 ? `dick` : `clit`}. `;
+			break;
+		case "intensive testicle enhancement":
+		case "hyper testicle enhancement":
+			r += `${He} ${hasAnyArms(child) ? `${He} massages ${his} balls uncomfortably` : `${He} squirms under the unfamiliar pressure in ${his} balls`} as `;
+			if (child.drugs === "hyper testicle enhancement") {
+				if (child.balls < 20) {
+					r += ` as cum drools from the tip of ${his} dick. `;
+				} else if (child.balls >= 50) {
+					r += ` as a thick cascade of cum pours from the tip of ${his} cock. `;
+				} else if (child.balls >= 37) {
+					r += ` as cum freely flows from the tip of ${his} cock, pooling under ${him}. `;
+				} else if (child.balls >= 20) {
+					r += ` as precum pools under ${him}. `;
+				}
+				r += `The HA-HGH must be having an effect, painfully expanding ${his} testicles. `;
+			} else {
+				r += `a bead of cum forms on tip of ${his} dick. The A-HGH must be having an effect, painfully expanding ${his} testicles. `;
+			}
+			break;
+		case "female hormone injections":
+		case "male hormore injections":
+			r += `${He} looks very ill, likely a side effect of the extreme hormone injections. `;
+			break;
+		case "appetite suppresors":
+			r += `Despite how little ${he} has been eating lately, ${his} stomach barely growls at all. `;
+			break;
+		case "penis atrophiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} dick uncomfortably` : `squirms in respose to the discomfort in ${his} dick`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} dick. `;
+			break;
+		case "testicle atropiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} balls uncomfortably` : `squirms in respose to the discomfort in ${his} balls`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} balls. `;
+			break;
+		case "clitoris atrophiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} clit uncomfortably` : `squirms in respose to the discomfort in ${his} clit`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} clit. `;
+			break;
+		case "labia atrophiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} pussy uncomfortably` : `squirms in respose to the discomfort in ${his} pussy`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} pussy. `;
+			break;
+		case "nipple atrophiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} nipples uncomfortably` : `squirms in respose to the discomfort in ${his} nipples`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} nipples. `;
+			break;
+		case "lip atrophiers":
+			r += `${He} ${hasAnyArms(child) ? `massages ${his} lips uncomfortably` : `licks ${his} lips uncomfortably`}. The A-TRPH must be having an effect, painfully causing ${his} body to atrophy ${his} lips. `;
+			break;
+		case "breast redistributors":
+		case "butt redistributors":
+			r += `${He} ${hasAnyArms(child) ? `pinches at the fat building on ${his} belly and lets off a sigh` : `squirms under the added weight building on ${his} belly`}. The RDST-D must be having an effect, encouraging ${his} body to redistribute ${his} ${child.drugs === "breast redistributors" ? `breasts'` : `buttocks'`} adipose tissue to ${his} middle. `;
+			break;
+		case "sag-B-gone":
+			r += `${His} breasts are shiny from the layer of anti-sag cream rubbed onto them. They might be a little perkier, or not. `;
+			break;
+	}
 
-	// 	return r;
-	// }
+	if (child.aphrodisiacs > 0 || child.inflationType === "aphrodisiacs") {
+		if (child.inflationType === "aphrodisiacs") {
+			r += `${He}'s literally full of`;
+			if (isAmputee(child)) {
+				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
+			} else if (child.chastityVagina) {
+				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
+			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
+				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} `;
+				if (child.anus === 0) {
+					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
+				} else {
+					r += `uses `;
+					if (child.anus > 2) {
+						r += `${his} entire hand, formed into a beak shape,`;
+					} else if (child.anus > 1) {
+						r += `two fingers`;
+					} else {
+						r += `a finger`;
+					}
+					r += ` to fuck ${his} own ass. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
+				}
+			} else if (child.rules.release.masturbation === 1) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
+			} else if (child.dick !== 0) {
+				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
+			} else if (child.vagina === -1) {
+				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} asshole, desperately hoping you'll fuck ${his} only real source of relief. `;
+			} else {
+				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} pussy, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. `;
+			}
+		} else if (child.aphrodisiacs > 1) {
+			r += `${He}'s swimming in`;
+			if (isAmputee(child)) {
+				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
+			} else if (child.chastityVagina) {
+				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
+			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
+				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he}`;
+				if (child.anus === 0) {
+					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. `;
+				} else {
+					r += `uses `;
+					if (child.anus > 2) {
+						r += `${his} entire hand, formed into a beak shape,`;
+					} else if (child.anus > 1) {
+						r += `two fingers`;
+					} else {
+						r += `a finger`;
+					}
+					r += ` to fuck ${his} own ass. `;
+				}
+			} else if (child.rules.release.masturbation === 1) {
+				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
+			} else if (child.dick !== 0) {
+				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
+			} else if (child.vagina === -1) {
+				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} asshole, desperately hoping you'll fuck ${his} only real source of relief. `;
+			} else {
+				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} pussy, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. `;
+			}
+		} else {
+			if (isAmputee(child)) {
+				r += `${He}'s on aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with sexual frustration. `;
+			} else if (child.chastityVagina) {
+				r += `${He}'s on aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with sexual frustration. `;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
+				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft with one hand while the other pinches a nipple. `;
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
+				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft and pussy with one hand while the other pinches a nipple. `;
+			} else if (child.rules.release.masturbation === 1) {
+				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} pussy with one hand while the other pinches a nipple. `;
+			} else if (child.dick !== 0 && canPenetrate(child)) {
+				r += `${He}'s on aphrodisiacs and is not allowed to masturbate, so as ${he} obeys your commands ${he} shifts ${his} weight uncomfortably. ${His} erect dick sways as ${he} does. `;
+			} else {
+				r += `${He}'s on aphrodisiacs and is not allowed to masturbate, so as ${he} obeys your commands ${he} shifts ${his} weight uncomfortably. `;
+			}
+		}
+	}
 
-	// function devotion(slave) {
-	// 	let r = ``;
+	if (child.addict > 0 && child.addict < 3) {
+		r += `${He} is a new <span class="cyan">aphrodisiac addict.</span> `;
+	} else if (child.addict > 0 && child.addict < 10) {
+		r += `${He} is a confirmed <span class="cyan">aphrodisiac addict.</span> `;
+	} else if (child.addict > 0) {
+		r += `${He} is completely <span class="cyan">dependent on aphrodisiacs,</span> and it is unlikely you will ever be able to wean ${him} off them. `;
+	}
 
-	// 	return r;
-	// }
+	V.saleDescription = 0, V.applyLaw = 0;
 
 	return r;
 };
diff --git a/src/facilities/nursery/widgets/infants/InfantState.js b/src/facilities/nursery/widgets/infants/InfantState.js
new file mode 100644
index 00000000000..a15b44a7fda
--- /dev/null
+++ b/src/facilities/nursery/widgets/infants/InfantState.js
@@ -0,0 +1,180 @@
+/**
+ * Contains a list of the properties the infant object has
+ * May need another look-over
+ */
+App.Facilities.Nursery.InfantState = class InfantState {
+	constructor() {
+		/** Child's current name */
+		this.slaveName = "blank";
+		/** Child's current surname
+		 * @type {string|number} */
+		this.slaveSurname = 0;
+		this.genes = "XX";
+		this.pronoun = App.Data.Pronouns.Kind.female;
+		/** game week child was acquired.
+		 *
+		 * _0: Obtained prior to game start / at game start_ */
+		this.weekAcquired = 0;
+		this.father = 0;
+		this.mother = 0;
+		this.daughters = 0;
+		this.sisters = 0;
+		/** week she was born (int between 0-51) */
+		this.birthWeek = jsRandom(0, 51);
+		/** How old she really is. */
+		this.actualAge = 18;
+		/** child's race */
+		this.race = "white";
+		/**
+		 * child markings
+		 * * "beauty mark"
+		 * * "birthmark"
+		 * * "freckles"
+		 * * "heavily freckled"
+		 */
+		this.markings = "none";
+		/** eye color */
+		this.eyeColor = "brown";
+		/** hair color */
+		this.hColor = "brown";
+		/** pubic hair color */
+		this.pubicHColor = "brown";
+		/** armpit hair style */
+		this.underArmHColor = "brown";
+		/** eyebrowHColor*/
+		this.eyebrowHColor = "brown";
+		/** skin color */
+		this.skin = "light";
+		/** pubic hair style */
+		this.pubicHStyle = "neat";
+		/** armpit hair style */
+		this.underArmHStyle = "neat";
+		/**
+		 * face attractiveness
+		 *
+		 * * -96 - : very ugly
+		 * * -95 - -41: ugly
+		 * * -40 - -11: unattractive
+		 * * -10 - 10: attractive
+		 * * 11 - 40: very pretty
+		 * * 41 - 95: gorgeous
+		 * * 96+: mind blowing
+		 */
+		this.face = 0;
+		/**
+		 * accepts string (will be treated as "normal")
+		 * * "normal"
+		 * * "masculine"
+		 * * "androgynous"
+		 * * "cute"
+		 * * "sensual"
+		 * * "exotic"
+		 */
+		this.faceShape = "normal";
+		/**
+		 * child intelligence
+		 * * -100 - -96: borderline retarded
+		 * * -95 - -51: very slow
+		 * * -50 - -16: slow
+		 * * -15 - 15: average
+		 * * 16 - 50: smart
+		 * * 51 - 95: very smart
+		 * * 96 - 100: brilliant
+		 */
+		this.intelligence = 0;
+		/**
+		 * * "none"
+		 * * "mindbroken"
+		 * * "submissive"
+		 * * "cumslut"
+		 * * "humiliation"
+		 * * "buttslut"
+		 * * "boobs"
+		 * * "sadist"
+		 * * "masochist"
+		 * * "dom"
+		 * * "pregnancy"
+		 */
+		this.fetish = "none";
+		/**
+		 * * "none"
+		 * * "arrogant": clings to her dignity, thinks slavery is beneath her
+		 * * "bitchy": can 't keep her opinions to herself
+		 * * "odd": says and does odd things
+		 * * "hates men": hates men
+		 * * "hates women": hates women
+		 * * "gluttonous": likes eating, gains weight
+		 * * "anorexic": dislikes eating and being forced to eat, loses weight
+		 * * "devout": resistance through religious faith
+		 * * "liberated": believes slavery is wrong
+		 */
+		this.behavioralFlaw = "none";
+		/**
+		 * * "none"
+		 * * "hates oral": hates oral sex
+		 * * "hates anal": hates anal sex
+		 * * "hates penetration": dislikes penetrative sex
+		 * * "shamefast": nervous when naked
+		 * * "idealistic": believes sex should be based on love and consent
+		 * * "repressed": dislikes sex
+		 * * "apathetic": inert during sex
+		 * * "crude": sexually crude and has little sense of what partners find disgusting during sex
+		 * * "judgemental": sexually judgemental and often judges her sexual partners' performance
+		 * * "neglectful": disregards herself in sex
+		 * * "cum addict": addicted to cum
+		 * * "anal addict": addicted to anal
+		 * * "attention whore": addicted to being the center of attention
+		 * * "breast growth": addicted to her own breasts
+		 * * "abusive": sexually abusive
+		 * * "malicious": loves causing pain and suffering
+		 * * "self hating": hates herself
+		 * * "breeder": addicted to being pregnant
+		 */
+		this.sexualFlaw = "none";
+		/** 0: does not have; 1: carrier; 2: active
+		 * * heterochromia is an exception. String = active
+		 */
+		this.geneticQuirks = {
+			/** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */
+			macromastia: 0,
+			/** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced.
+			 *
+			 * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */
+			gigantomastia: 0,
+			/** is prone to having twins, shorter pregnancy recovery rate */
+			fertility: 0,
+			/** is prone to having multiples, even shorter pregnancy recovery rate
+			 *
+			 * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */
+			hyperFertility: 0,
+			/** pregnancy does not block ovulation, child can become pregnant even while pregnant */
+			superfetation: 0,
+			/** is abnormally tall. gigantism + dwarfism - is very average*/
+			gigantism: 0,
+			/** is abnormally short. gigantism + dwarfism - is very average*/
+			dwarfism: 0,
+			/** has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
+			pFace: 0,
+			/** has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */
+			uFace: 0,
+			/** has pale skin, white hair and red eyes */
+			albinism: 0,
+			/** may have mismatched eyes */
+			heterochromia: 0,
+			/** ass never stops growing. Increased growth rate, reduced shrink rate. */
+			rearLipedema: 0,
+			/** has (or will have) a huge dong */
+			wellHung: 0,
+			/** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */
+			wGain: 0,
+			/** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */
+			wLoss: 0,
+			/** body attempts to normalize to an androgynous state */
+			androgyny: 0,
+			/** child can only ever birth girls */
+			girlsOnly: 0
+		};
+		/** how many weeks until the child is ready for release */
+		this.growTime = 156;
+	}
+};
diff --git a/src/facilities/nursery/widgets/infants/infantSummary.js b/src/facilities/nursery/widgets/infants/infantSummary.js
new file mode 100644
index 00000000000..2919db2d859
--- /dev/null
+++ b/src/facilities/nursery/widgets/infants/infantSummary.js
@@ -0,0 +1,1779 @@
+/**
+ * Displays a summary of the infant
+ * @param {App.Entity.InfantState} child
+ * @returns {string}
+ */
+App.Facilities.Nursery.InfantSummary = function(child) {
+	"use strict";
+	const
+		weeksOwned = V.week - child.weekAcquired;
+
+	let
+		r = ``;
+
+	function InfantSummaryUncached(child) {
+		/** @type {App.UI.SlaveSummary.AbbreviationState} */
+		const abbreviate = V.UI.slaveSummary.abbreviation;
+		if (abbreviate.health === 1) {
+			// shortHealth(child);
+		} else if (abbreviate.health === 2) {
+			// longHealth(child);
+		}
+		if (abbreviate.nationality + abbreviate.genitalia + abbreviate.physicals + abbreviate.skills + abbreviate.mental !== 0) {
+			r += `<br> `;
+			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+				r += "&nbsp;&nbsp;&nbsp;&nbsp;";
+			}
+		}
+		if (child.actualAge > 0) {
+			if (child.actualAge > 1) {
+				V.desc = `toddler`;
+			} else {
+				V.desc = `baby`;
+			}
+		} else {
+			if (weeksOwned <= 1) {
+				V.desc = `newborn`;
+			} else {
+				V.desc = `baby`;
+			}
+		}
+		const firstLetter = V.desc.substring(0, 1).toUpperCase();
+		V.desc = firstLetter + V.desc.substring(1);
+		r += `<strong><span class="coral">${V.desc}${abbreviate.physicals === 2? '.' : ''}</span></strong> `;
+		if (V.seeRace) {
+			r += `<span class="tan">`;
+			if (abbreviate.race === 1) {
+				shortRace(child);
+			} else if (abbreviate.race === 2) {
+				longRace(child);
+			}
+			r += `</span> `;
+		}
+		if (abbreviate.nationality === 1) {
+			shortNationality(child);
+		} else if (abbreviate.nationality === 2) {
+			longNationality(child);
+		}
+		if (abbreviate.physicals === 1) {
+			shortSkin(child);
+		} else {
+			r += `<span class="pink">${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)} skin.</span> `;
+		}
+		if (abbreviate.physicals === 1) {
+			shortAge(child);
+			shortFace(child);
+			r += `</span> `;
+		} else if (abbreviate.physicals === 2) {
+			longAge(child);
+			longFace(child);
+			r += `</span> `;
+		}
+		r += `<br>`;
+		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+			r += "&nbsp;&nbsp;&nbsp;&nbsp;";
+		}
+		if (abbreviate.skills === 1) {
+			shortIntelligence(child);
+			shortPrestige(child);
+			shortPornPrestige(child);
+		} else if (abbreviate.skills === 2) {
+			longIntelligence(child);
+			longPrestige(child);
+			longPornPrestige(child);
+		}
+		if (abbreviate.mental === 1) {
+			shortBehaviorFlaw(child);
+			shortSexFlaw(child);
+		} else if (abbreviate.mental === 2) {
+			longBehaviorFlaw(child);
+			longSexFlaw(child);
+		}
+		if ((child.relationship !== 0) || (abbreviate.clothes === 2) || (abbreviate.rulesets === 2)) {
+			r += `<br> `;
+			if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+				r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			}
+		}
+		if (abbreviate.mental === 1) {
+			r += `<span class="lightgreen">`;
+			shortExtendedFamily(child);
+			r += `</span> `;
+			shortRival(child);
+		} else if (abbreviate.mental === 2) {
+			longExtendedFamily(child);
+			longRival(child);
+		}
+		r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+		if (abbreviate.origins === 2 && child.origin !== 0) {
+			origins(child);
+		}
+		return r;
+	}
+
+	// /**	TODO: add health to infants
+	//  * @param {App.Entity.InfantState} child
+	//  */
+	// function shortHealth(child) {
+	// 	if (child.health.condition < -20) {
+	// 		r += `<strong><span class="red">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+	// 	} else if (child.health.condition <= 20) {
+	// 		r += `<strong><span class="yellow">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+	// 	} else if (child.health.condition > 20) {
+	// 		r += `<strong><span class="green">H ${V.summaryStats ? `[${child.health.condition}]` : ''}</span></strong> `;
+	// 	}
+	// 	r += " ";
+	// }
+
+	// /**
+	//  * @param {App.Entity.InfantState} child
+	//  */
+	// function longHealth(child) {
+	// 	if (child.health.condition < -90) {
+	// 		r += `<span class="red">On the edge of death ${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else if (child.health.condition < -50) {
+	// 		r += `<span class="red">Extremely unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else if (child.health.condition < -20) {
+	// 		r += `<span class="red">Unhealthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else if (child.health.condition <= 20) {
+	// 		r += `<span class="yellow">Healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else if (child.health.condition <= 50) {
+	// 		r += `<span class="green">Very healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else if (child.health.condition <= 90) {
+	// 		r += `<span class="green">Extremely healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	} else {
+	// 		r += `<span class="green">Unnaturally healthy${V.summaryStats ? `[${child.health.condition}]` : ''}.</span> `;
+	// 	}
+	// 	r += " ";
+	// }
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortRace(child) {
+		switch (child.race) {
+			case "white":
+				r += `C`;
+				break;
+			case "asian":
+				r += `A`;
+				break;
+			case "indo-aryan":
+				r += `I`;
+				break;
+			case "latina":
+				r += `L`;
+				break;
+			case "middle eastern":
+				r += `ME`;
+				break;
+			case "black":
+				r += `B`;
+				break;
+			case "pacific islander":
+				r += `PI`;
+				break;
+			case "malay":
+				r += `M`;
+				break;
+			case "amerindian":
+				r += `AI`;
+				break;
+			case "semitic":
+				r += `S`;
+				break;
+			case "southern european":
+				r += `SE`;
+				break;
+			case "mixed race":
+				r += `MR`;
+				break;
+			default:
+				r += `${child.race.charAt(0).toUpperCase() + child.race.charAt(1) + child.race.charAt(2)}`;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longRace(child) {
+		switch (child.race) {
+			case "white":
+				r += `Caucasian. `;
+				break;
+			case "asian":
+				r += `Asian. `;
+				break;
+			case "indo-aryan":
+				r += `Indo-aryan. `;
+				break;
+			case "latina":
+				r += `Latina. `;
+				break;
+			case "middle eastern":
+				r += `Middle Eastern. `;
+				break;
+			case "black":
+				r += `Black. `;
+				break;
+			case "pacific islander":
+				r += `Pacific Islander. `;
+				break;
+			case "malay":
+				r += `Malay. `;
+				break;
+			case "amerindian":
+				r += `Amerindian. `;
+				break;
+			case "semitic":
+				r += `Semitic. `;
+				break;
+			case "southern european":
+				r += `Southern European. `;
+				break;
+			case "mixed race":
+				r += `Mixed race. `;
+				break;
+			default:
+				r += `${child.race.charAt(0).toUpperCase() + child.race.slice(1)}. `;
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortNationality(child) {
+		r += `<span class="tan">`;
+		switch (child.nationality) {
+			case "Afghan":
+				r += `Afg`;
+				break;
+			case "Albanian":
+				r += `Alb`;
+				break;
+			case "Algerian":
+				r += `Alg`;
+				break;
+			case "American":
+				r += `USA`;
+				break;
+			case "Andorran":
+				r += `And`;
+				break;
+			case "Angolan":
+				r += `Ang`;
+				break;
+			case "Antiguan":
+				r += `AB`;
+				break;
+			case "Argentinian":
+				r += `Arg`;
+				break;
+			case "Armenian":
+				r += `Arm`;
+				break;
+			case "Aruban":
+				r += `Aru`;
+				break;
+			case "Australian":
+				r += `Aus`;
+				break;
+			case "Austrian":
+				r += `Aut`;
+				break;
+			case "Azerbaijani":
+				r += `Aze`;
+				break;
+			case "Bahamian":
+				r += `Bah`;
+				break;
+			case "Bahraini":
+				r += `Bah`;
+				break;
+			case "Bangladeshi":
+				r += `Bgd`;
+				break;
+			case "Barbadian":
+				r += `Bar`;
+				break;
+			case "Belarusian":
+				r += `Ber`;
+				break;
+			case "Belgian":
+				r += `Bel`;
+				break;
+			case "Belizean":
+				r += `Blz`;
+				break;
+			case "Beninese":
+				r += `Ben`;
+				break;
+			case "Bermudian":
+				r += `Bmd`;
+				break;
+			case "Bhutanese":
+				r += `Bhu`;
+				break;
+			case "Bissau-Guinean":
+				r += `GB`;
+				break;
+			case "Bolivian":
+				r += `Bol`;
+				break;
+			case "Bosnian":
+				r += `Bos`;
+				break;
+			case "Brazilian":
+				r += `Bra`;
+				break;
+			case "British":
+				r += `UK`;
+				break;
+			case "Bruneian":
+				r += `Bru`;
+				break;
+			case "Bulgarian":
+				r += `Bul`;
+				break;
+			case "Burkinabé":
+				r += `BF`;
+				break;
+			case "Burmese":
+				r += `Bur`;
+				break;
+			case "Burundian":
+				r += `Bnd`;
+				break;
+			case "Cambodian":
+				r += `Kam`;
+				break;
+			case "Cameroonian":
+				r += `Cam`;
+				break;
+			case "Canadian":
+				r += `Can`;
+				break;
+			case "Cape Verdean":
+				r += `CV`;
+				break;
+			case "Catalan":
+				r += `Cat`;
+				break;
+			case "Central African":
+				r += `CAR`;
+				break;
+			case "Chadian":
+				r += `Cha`;
+				break;
+			case "Chilean":
+				r += `Chl`;
+				break;
+			case "Chinese":
+				r += `Chi`;
+				break;
+			case "Colombian":
+				r += `Col`;
+				break;
+			case "Comorian":
+				r += `Com`;
+				break;
+			case "Congolese":
+				r += `RC`;
+				break;
+			case "a Cook Islander":
+				r += `CI`;
+				break;
+			case "Costa Rican":
+				r += `CR`;
+				break;
+			case "Croatian":
+				r += `Cro`;
+				break;
+			case "Cuban":
+				r += `Cub`;
+				break;
+			case "Curaçaoan":
+				r += `Cur`;
+				break;
+			case "Cypriot":
+				r += `Cyp`;
+				break;
+			case "Czech":
+				r += `Cze`;
+				break;
+			case "Danish":
+				r += `Den`;
+				break;
+			case "Djiboutian":
+				r += `Dji`;
+				break;
+			case "Dominican":
+				r += `DR`;
+				break;
+			case "Dominiquais":
+				r += `Dom`;
+				break;
+			case "Dutch":
+				r += `Nld`;
+				break;
+			case "East Timorese":
+				r += `ET`;
+				break;
+			case "Ecuadorian":
+				r += `Ecu`;
+				break;
+			case "Egyptian":
+				r += `Egy`;
+				break;
+			case "Emirati":
+				r += `UAE`;
+				break;
+			case "Equatoguinean":
+				r += `EG`;
+				break;
+			case "Eritrean":
+				r += `Eri`;
+				break;
+			case "Estonian":
+				r += `Est`;
+				break;
+			case "Ethiopian":
+				r += `Eth`;
+				break;
+			case "Fijian":
+				r += `Fij`;
+				break;
+			case "Filipina":
+				r += `Phl`;
+				break;
+			case "Finnish":
+				r += `Fin`;
+				break;
+			case "French":
+				r += `Fra`;
+				break;
+			case "French Guianan":
+				r += `FG`;
+				break;
+			case "French Polynesian":
+				r += `FP`;
+				break;
+			case "Gabonese":
+				r += `Gab`;
+				break;
+			case "Gambian":
+				r += `Gam`;
+				break;
+			case "Georgian":
+				r += `Geo`;
+				break;
+			case "German":
+				r += `Ger`;
+				break;
+			case "Ghanan":
+				r += `Gha`;
+				break;
+			case "Greek":
+				r += `Gre`;
+				break;
+			case "Greenlandic":
+				r += `Grn`;
+				break;
+			case "Grenadian":
+				r += `Gda`;
+				break;
+			case "Guamanian":
+				r += `Gua`;
+				break;
+			case "Guatemalan":
+				r += `Gtm`;
+				break;
+			case "Guinean":
+				r += `Gui`;
+				break;
+			case "Guyanese":
+				r += `Guy`;
+				break;
+			case "Haitian":
+				r += `Hai`;
+				break;
+			case "Honduran":
+				r += `Hon`;
+				break;
+			case "Hungarian":
+				r += `Hun`;
+				break;
+			case "I-Kiribati":
+				r += `Kir`;
+				break;
+			case "Icelandic":
+				r += `Ice`;
+				break;
+			case "Indian":
+				r += `Ind`;
+				break;
+			case "Indonesian":
+				r += `Idn`;
+				break;
+			case "Iranian":
+				r += `Irn`;
+				break;
+			case "Iraqi":
+				r += `Irq`;
+				break;
+			case "Irish":
+				r += `Irl`;
+				break;
+			case "Israeli":
+				r += `Isr`;
+				break;
+			case "Italian":
+				r += `Ita`;
+				break;
+			case "Ivorian":
+				r += `IC`;
+				break;
+			case "Jamaican":
+				r += `Jam`;
+				break;
+			case "Japanese":
+				r += `Jpn`;
+				break;
+			case "Jordanian":
+				r += `Jor`;
+				break;
+			case "Kazakh":
+				r += `Kaz`;
+				break;
+			case "Kenyan":
+				r += `Ken`;
+				break;
+			case "Kittitian":
+				r += `SKN`;
+				break;
+			case "Korean":
+				r += `Kor`;
+				break;
+			case "Kosovan":
+				r += `Kos`;
+				break;
+			case "Kurdish":
+				r += `Kur`;
+				break;
+			case "Kuwaiti":
+				r += `Kuw`;
+				break;
+			case "Kyrgyz":
+				r += `Kyr`;
+				break;
+			case "Laotian":
+				r += `Lao`;
+				break;
+			case "Latvian":
+				r += `Lat`;
+				break;
+			case "Lebanese":
+				r += `Lbn`;
+				break;
+			case "Liberian":
+				r += `Lib`;
+				break;
+			case "Libyan":
+				r += `Lby`;
+				break;
+			case "a Liechtensteiner":
+				r += `Lie`;
+				break;
+			case "Lithuanian":
+				r += `Lit`;
+				break;
+			case "Luxembourgian":
+				r += `Lux`;
+				break;
+			case "Macedonian":
+				r += `Mac`;
+				break;
+			case "Malagasy":
+				r += `Mad`;
+				break;
+			case "Malawian":
+				r += `Mwi`;
+				break;
+			case "Malaysian":
+				r += `Mys`;
+				break;
+			case "Maldivian":
+				r += `Mdv`;
+				break;
+			case "Malian":
+				r += `Mal`;
+				break;
+			case "Maltese":
+				r += `Mlt`;
+				break;
+			case "Marshallese":
+				r += `MI`;
+				break;
+			case "Mauritanian":
+				r += `Mta`;
+				break;
+			case "Mauritian":
+				r += `Mts`;
+				break;
+			case "Mexican":
+				r += `Mex`;
+				break;
+			case "Micronesian":
+				r += `FSM`;
+				break;
+			case "Moldovan":
+				r += `Mol`;
+				break;
+			case "Monégasque":
+				r += `Mnc`;
+				break;
+			case "Mongolian":
+				r += `Mon`;
+				break;
+			case "Montenegrin":
+				r += `Mng`;
+				break;
+			case "Moroccan":
+				r += `Mor`;
+				break;
+			case "Mosotho":
+				r += `Les`;
+				break;
+			case "Motswana":
+				r += `Bot`;
+				break;
+			case "Mozambican":
+				r += `Moz`;
+				break;
+			case "Namibian":
+				r += `Nam`;
+				break;
+			case "Nauruan":
+				r += `Nau`;
+				break;
+			case "Nepalese":
+				r += `Npl`;
+				break;
+			case "New Caledonian":
+				r += `NC`;
+				break;
+			case "a New Zealander":
+				r += `NZ`;
+				break;
+			case "Ni-Vanuatu":
+				r += `Van`;
+				break;
+			case "Nicaraguan":
+				r += `Nic`;
+				break;
+			case "Nigerian":
+				r += `Nga`;
+				break;
+			case "Nigerien":
+				r += `Ngr`;
+				break;
+			case "Niuean":
+				r += `Niu`;
+				break;
+			case "Norwegian":
+				r += `Nor`;
+				break;
+			case "Omani":
+				r += `Omn`;
+				break;
+			case "Pakistani":
+				r += `Pak`;
+				break;
+			case "Palauan":
+				r += `Plu`;
+				break;
+			case "Palestinian":
+				r += `Pal`;
+				break;
+			case "Panamanian":
+				r += `Pan`;
+				break;
+			case "Papua New Guinean":
+				r += `PNG`;
+				break;
+			case "Paraguayan":
+				r += `Par`;
+				break;
+			case "Peruvian":
+				r += `Per`;
+				break;
+			case "Polish":
+				r += `Pol`;
+				break;
+			case "Portuguese":
+				r += `Por`;
+				break;
+			case "Puerto Rican":
+				r += `PR`;
+				break;
+			case "Qatari":
+				r += `Qat`;
+				break;
+			case "Romanian":
+				r += `Rom`;
+				break;
+			case "Russian":
+				r += `Rus`;
+				break;
+			case "Rwandan":
+				r += `Rwa`;
+				break;
+			case "Sahrawi":
+				r += `Sah`;
+				break;
+			case "Saint Lucian":
+				r += `SL`;
+				break;
+			case "Salvadoran":
+				r += `ES`;
+				break;
+			case "Sammarinese":
+				r += `SM`;
+				break;
+			case "Samoan":
+				r += `Sam`;
+				break;
+			case "São Toméan":
+				r += `STP`;
+				break;
+			case "Saudi":
+				r += `Sau`;
+				break;
+			case "Scottish":
+				r += `Sco`;
+				break;
+			case "Senegalese":
+				r += `Sen`;
+				break;
+			case "Serbian":
+				r += `Srb`;
+				break;
+			case "Seychellois":
+				r += `Sey`;
+				break;
+			case "Sierra Leonean":
+				r += `Sie`;
+				break;
+			case "Singaporean":
+				r += `Sng`;
+				break;
+			case "Slovak":
+				r += `Svk`;
+				break;
+			case "Slovene":
+				r += `Svn`;
+				break;
+			case "a Solomon Islander":
+				r += `SI`;
+				break;
+			case "Somali":
+				r += `Som`;
+				break;
+			case "South African":
+				r += `RSA`;
+				break;
+			case "South Sudanese":
+				r += `SS`;
+				break;
+			case "Spanish":
+				r += `Spa`;
+				break;
+			case "Sri Lankan":
+				r += `Sri`;
+				break;
+			case "Sudanese":
+				r += `Sud`;
+				break;
+			case "Surinamese":
+				r += `Sur`;
+				break;
+			case "Swazi":
+				r += `Swa`;
+				break;
+			case "Swedish":
+				r += `Swe`;
+				break;
+			case "Swiss":
+				r += `Swi`;
+				break;
+			case "Syrian":
+				r += `Syr`;
+				break;
+			case "Taiwanese":
+				r += `Tai`;
+				break;
+			case "Tajik":
+				r += `Taj`;
+				break;
+			case "Tanzanian":
+				r += `Tza`;
+				break;
+			case "Thai":
+				r += `Tha`;
+				break;
+			case "Tibetan":
+				r += `Tib`;
+				break;
+			case "Togolese":
+				r += `Tog`;
+				break;
+			case "Tongan":
+				r += `Ton`;
+				break;
+			case "Trinidadian":
+				r += `TT`;
+				break;
+			case "Tunisian":
+				r += `Tun`;
+				break;
+			case "Turkish":
+				r += `Tur`;
+				break;
+			case "Turkmen":
+				r += `Tkm`;
+				break;
+			case "Tuvaluan":
+				r += `Tuv`;
+				break;
+			case "Ugandan":
+				r += `Uga`;
+				break;
+			case "Ukrainian":
+				r += `Ukr`;
+				break;
+			case "Uruguayan":
+				r += `Uru`;
+				break;
+			case "Uzbek":
+				r += `Uzb`;
+				break;
+			case "Vatican":
+				r += `VC`;
+				break;
+			case "Venezuelan":
+				r += `Ven`;
+				break;
+			case "Vietnamese":
+				r += `Vnm`;
+				break;
+			case "Vincentian":
+				r += `SVG`;
+				break;
+			case "Yemeni":
+				r += `Yem`;
+				break;
+			case "Zairian":
+				r += `DRC`;
+				break;
+			case "Zambian":
+				r += `Zam`;
+				break;
+			case "Zimbabwean":
+				if (child.race === "white") {
+					r += `Rho`;
+				} else {
+					r += `Zwe`;
+				}
+				break;
+			case "Ancient Chinese Revivalist":
+				r += `Chi Rev`;
+				break;
+			case "Ancient Egyptian Revivalist":
+				r += `Egy Rev`;
+				break;
+			case "Arabian Revivalist":
+				r += `Ara Rev`;
+				break;
+			case "Aztec Revivalist":
+				r += `Azt Rev`;
+				break;
+			case "Edo Revivalist":
+				r += `Edo Rev`;
+				break;
+			case "Roman Revivalist":
+				r += `Rom Rev`;
+				break;
+			case "":
+			case "none":
+			case "child":
+			case "Stateless":
+				r += `None`;
+				break;
+			default:
+				r += `${child.nationality.charAt(0) + child.nationality.charAt(1) + child.nationality.charAt(2)}`;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longNationality(child) {
+		r += `<span class="tan">`;
+		switch (child.nationality) {
+			case "a Cook Islander":
+				r += `Cook Islander. `;
+				break;
+			case "a Liechtensteiner":
+				r += `Liechtensteiner. `;
+				break;
+			case "a New Zealander":
+				r += `New Zealander. `;
+				break;
+			case "a Solomon Islander":
+				r += `Solomon Islander. `;
+				break;
+			case "Zimbabwean":
+				if (child.race === "white") {
+					r += `Rhodesian. `;
+				} else {
+					r += `${child.nationality}. `;
+				}
+				break;
+			case "child":
+			case "none":
+			case "":
+			case "Stateless":
+				r += `Stateless. `;
+				break;
+			default:
+				r += `${child.nationality}. `;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortSkin(child) {
+		r += `<span class="pink">`;
+		switch (child.skin) {
+			case "pure white":
+				r += `P. Whi`;
+				break;
+			case "extremely fair":
+				r += `E. Fai`;
+				break;
+			case "very fair":
+				r += `V. Fai`;
+				break;
+			case "extremely pale":
+				r += `E. Pal`;
+				break;
+			case "very pale":
+				r += `V. Pal`;
+				break;
+			case "light brown":
+				r += `L. Br`;
+				break;
+			case "dark brown":
+				r += `D. Br`;
+				break;
+			case "light olive":
+				r += `L. Oli`;
+				break;
+			case "dark olive":
+				r += `D. Oli`;
+				break;
+			case "light beige":
+				r += `L. Bei`;
+				break;
+			case "dark beige":
+				r += `D. Bei`;
+				break;
+			case "tan":
+				r += `Tan`;
+				break;
+			case "bronze":
+				r += `Bron`;
+				break;
+			case "ebony":
+				r += `Ebon`;
+				break;
+			case "pure black":
+				r += `P. Bla`;
+				break;
+			case "dark":
+			case "fair":
+			case "pale":
+				r += `${child.skin.charAt(0).toUpperCase() + child.skin.slice(1)}`;
+				break;
+			default:
+				r += `${child.skin.charAt(0).toUpperCase() + child.skin.charAt(1) + child.skin.charAt(2)}`;
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortAge(child) {
+		r += `<span class="pink">`;
+		if (V.showAgeDetail === 1) {
+			if (child.actualAge > 0) {
+				r += `${capFirstChar(num(child.actualAge))}yrs. `;
+			} else {
+				if (weeksOwned > 4) {
+					r += `${capFirstChar(num(Math.trunc(weeksOwned / 4)))}mos. `;
+				} else {
+					if (weeksOwned <= 1) {
+						r += `Nwbrn. `;
+					} else {
+						r += `${capFirstChar(num(weeksOwned))}wks. `;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortFace(child) {
+		if (child.face < -95) {
+			r += `<span class="red">Face---${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face < -40) {
+			r += `<span class="red">Face--${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face < -10) {
+			r += `<span class="red">Face-${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face <= 10) {
+			r += `Face${V.summaryStats ? `[${child.face}]` : ''}`;
+		} else if (child.face <= 40) {
+			r += `<span class="pink">Face+${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else if (child.face <= 95) {
+			r += `<span class="pink">Face++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		} else {
+			r += `<span class="pink">Face+++${V.summaryStats ? `[${child.face}]` : ''}</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longAge(child) {
+		r += `<span class="pink">`;
+		if (V.showAgeDetail) {
+			if (child.actualAge > 0) {
+				r += `${capFirstChar(num(child.actualAge))}-year-old `;
+				if (child.actualAge > 1) {
+					r += `toddler. `;
+				} else {
+					r += `baby. `;
+				}
+			} else {
+				if (weeksOwned > 4) {
+					r += `${capFirstChar(num(Math.trunc(weeksOwned / 4)))} months old. `;
+				} else {
+					if (weeksOwned <= 1) {
+						r += `Newborn. `;
+					} else {
+						r += `${capFirstChar(num(weeksOwned))} weeks old. `;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longFace(child) {
+		r += `Likely to have a `;
+		if (child.face < -95) {
+			r += `<span class="red">very ugly${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		} else if (child.face < -40) {
+			r += `<span class="red">ugly${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		} else if (child.face < -10) {
+			r += `<span class="red">unattractive${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		} else if (child.face <= 10) {
+			r += `Average${V.summaryStats ? `[${child.face}]`: ''}`;
+		} else if (child.face <= 40) {
+			r += `<span class="pink">attractive${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		} else if (child.face <= 95) {
+			r += `<span class="pink">beautiful${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		} else {
+			r += `<span class="pink">very beautiful${V.summaryStats ? `[${child.face}]`: ''}</span>`;
+		}
+		r += `, ${child.faceShape} face. `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortIntelligence(child) {
+		let intelligence = child.intelligence;
+		if (child.hasOwnProperty("intelligenceImplant")) {
+			intelligence += child.intelligenceImplant;
+		}
+		if (child.fetish === "mindbroken") {
+			return;
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 30) {
+			if (intelligence >= 130) {
+				r += `<span class="deepskyblue">I++++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I(e+)${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---(e+)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		} else if (child.hasOwnProperty("intelligenceImplant") && child.intelligenceImplant >= 15) {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I(e)${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---(e)${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		} else {
+			if (intelligence > 95) {
+				r += `<span class="deepskyblue">I+++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 50) {
+				r += `<span class="deepskyblue">I++${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence > 15) {
+				r += `<span class="deepskyblue">I+${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -15) {
+				r += `I${V.summaryStats ? `[${intelligence}]` : ''}`;
+			} else if (intelligence >= -50) {
+				r += `<span class="orangered">I-${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else if (intelligence >= -95) {
+				r += `<span class="orangered">I--${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			} else {
+				r += `<span class="orangered">I---${V.summaryStats ? `[${intelligence}]` : ''}</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortPrestige(child) {
+		if (child.prestige > 0) {
+			r += `<span class="green">`;
+			if (child.prestige > 2) {
+				r += `Prest++`;
+			} else if (child.prestige === 2) {
+				r += `Prest+`;
+			} else if (child.prestige === 1) {
+				r += `Prest`;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortPornPrestige(child) {
+		if (child.pornPrestige > 0) {
+			r += `<span class="green">`;
+			if (child.pornPrestige > 2) {
+				r += `PPrest++`;
+			} else if (child.pornPrestige === 2) {
+				r += `PPrest+`;
+			} else if (child.pornPrestige === 1) {
+				r += `PPrest`;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longIntelligence(child) {
+		let intelligence = child.intelligence;
+		if (child.hasOwnProperty("intelligenceImplant")) {
+			intelligence += child.intelligenceImplant;
+		}
+		if (child.intelligence > 95) {
+			r += `<span class="deepskyblue">Likely to be brilliant${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		} else if (intelligence > 50) {
+			r += `<span class="deepskyblue">Likely to be very smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		} else if (intelligence > 15) {
+			r += `<span class="deepskyblue">Likely to be smart${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		} else if (intelligence >= -15) {
+			r += `Average intelligence${V.summaryStats ? `[${intelligence}]` : ''}. `;
+		} else if (intelligence >= -50) {
+			r += `<span class="orangered">Likely to be slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		} else if (intelligence >= -95) {
+			r += `<span class="orangered">Likely to be very slow${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		} else {
+			r += `<span class="orangered">Likely to be moronic${V.summaryStats ? `[${intelligence}]` : ''}.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longPrestige(child) {
+		if (child.prestige > 0) {
+			r += `<span class="green">`;
+			if (child.prestige > 2) {
+				r += `Extremely prestigious. `;
+			} else if (child.prestige === 2) {
+				r += `Very prestigious. `;
+			} else if (child.prestige === 1) {
+				r += `Prestigious. `;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longPornPrestige(child) {
+		if (child.pornPrestige > 0) {
+			r += `<span class="green">`;
+			if (child.pornPrestige > 2) {
+				r += `Porn star. `;
+			} else if (child.pornPrestige === 2) {
+				r += `Porn slut. `;
+			} else if (child.pornPrestige === 1) {
+				r += `Porn amateur. `;
+			}
+			r += `</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortBehaviorFlaw(child) {
+		r += `<span class="red">`;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				r += `Arrog`;
+				break;
+			case "bitchy":
+				r += `Bitchy`;
+				break;
+			case "odd":
+				r += `Odd`;
+				break;
+			case "hates men":
+				r += `Men-`;
+				break;
+			case "hates women":
+				r += `Women-`;
+				break;
+			case "gluttonous":
+				r += `Glut`;
+				break;
+			case "anorexic":
+				r += `Ano`;
+				break;
+			case "devout":
+				r += `Dev`;
+				break;
+			case "liberated":
+				r += `Lib`;
+				break;
+			default:
+				child.behavioralFlaw = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortSexFlaw(child) {
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `<span class="red">Oral-</span> `;
+				break;
+			case "hates anal":
+				r += `<span class="red">Anal-</span> `;
+				break;
+			case "hates penetration":
+				r += `<span class="red">Fuck-</span> `;
+				break;
+			case "shamefast":
+				r += `<span class="red">Shame</span> `;
+				break;
+			case "idealistic":
+				r += `<span class="red">Ideal</span> `;
+				break;
+			case "repressed":
+				r += `<span class="red">Repre</span> `;
+				break;
+			case "apathetic":
+				r += `<span class="red">Apath</span> `;
+				break;
+			case "crude":
+				r += `<span class="red">Crude</span> `;
+				break;
+			case "judgemental":
+				r += `<span class="red">Judge</span> `;
+				break;
+			case "cum addict":
+				r += `<span class="yellow">CumAdd</span> `;
+				break;
+			case "anal addict":
+				r += `<span class="yellow">AnalAdd</span> `;
+				break;
+			case "attention whore":
+				r += `<span class="yellow">Attention</span> `;
+				break;
+			case "breast growth":
+				r += `<span class="yellow">BoobObsess</span> `;
+				break;
+			case "abusive":
+				r += `<span class="yellow">Abusive</span> `;
+				break;
+			case "malicious":
+				r += `<span class="yellow">Malice</span> `;
+				break;
+			case "self hating":
+				r += `<span class="yellow">SelfHatr</span> `;
+				break;
+			case "neglectful":
+				r += `<span class="yellow">SelfNeglect</span> `;
+				break;
+			case "breeder":
+				r += `<span class="yellow">BreedObsess</span> `;
+				break;
+			default:
+				child.sexualFlaw = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longBehaviorFlaw(child) {
+		r += `<span class="red">`;
+		switch (child.behavioralFlaw) {
+			case "arrogant":
+				r += `Arrogant. `;
+				break;
+			case "bitchy":
+				r += `Bitchy. `;
+				break;
+			case "odd":
+				r += `Odd. `;
+				break;
+			case "hates men":
+				r += `Hates men. `;
+				break;
+			case "hates women":
+				r += `Hates women. `;
+				break;
+			case "gluttonous":
+				r += `Stress eater. `;
+				break;
+			case "anorexic":
+				r += `Anorexic. `;
+				break;
+			case "devout":
+				r += `Devoutly religious. `;
+				break;
+			case "liberated":
+				r += `Mentally liberated. `;
+				break;
+			default:
+				child.behavioralFlaw = "none";
+				break;
+		}
+		r += `</span> `;
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longSexFlaw(child) {
+		switch (child.sexualFlaw) {
+			case "hates oral":
+				r += `<span class="red">Hates oral.</span> `;
+				break;
+			case "hates anal":
+				r += `<span class="red">Hates anal.</span> `;
+				break;
+			case "hates penetration":
+				r += `<span class="red">Hates penetration.</span> `;
+				break;
+			case "shamefast":
+				r += `<span class="red">Shamefast.</span> `;
+				break;
+			case "idealistic":
+				r += `<span class="red">Sexually idealistic.</span> `;
+				break;
+			case "repressed":
+				r += `<span class="red">Sexually repressed.</span> `;
+				break;
+			case "apathetic":
+				r += `<span class="red">Sexually apathetic.</span> `;
+				break;
+			case "crude":
+				r += `<span class="red">Sexually crude.</span> `;
+				break;
+			case "judgemental":
+				r += `<span class="red">Sexually judgemental.</span> `;
+				break;
+			case "cum addict":
+				r += `<span class="yellow">Cum addict.</span> `;
+				break;
+			case "anal addict":
+				r += `<span class="yellow">Anal addict.</span> `;
+				break;
+			case "attention whore":
+				r += `<span class="yellow">Attention whore.</span> `;
+				break;
+			case "breast growth":
+				r += `<span class="yellow">Breast obsession.</span> `;
+				break;
+			case "abusive":
+				r += `<span class="yellow">Sexually abusive.</span> `;
+				break;
+			case "malicious":
+				r += `<span class="yellow">Sexually malicious.</span> `;
+				break;
+			case "self hating":
+				r += `<span class="yellow">Self hatred.</span> `;
+				break;
+			case "neglectful":
+				r += `<span class="yellow">Self neglectful.</span> `;
+				break;
+			case "breeder":
+				r += `<span class="yellow">Breeding obsession.</span> `;
+				break;
+			default:
+				child.sexualFlaw = "none";
+				break;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortExtendedFamily(child) {
+		let handled = 0;
+		if (child.mother > 0) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.mother;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.mother === -1) {
+			r += `Your daughter`;
+			if (child.relationship < -1) {
+				res += ` & ${PCrelationshipTerm(child)}`;
+				handled = 1;
+			}
+			r += " ";
+		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.mother].fullName}'s daughter `;
+		}
+		if (child.father > 0 && child.father !== child.mother) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.father;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.father === -1 && child.mother !== -1) {
+			r += `Your daughter`;
+			if (child.relationship < -1) {
+				res += ` & ${PCrelationshipTerm(child)}`;
+				handled = 1;
+			}
+			r += " ";
+		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.father].fullName}'s daughter`;
+		}
+		if (child.daughters === 1) {
+			let _ssj = V.slaves.findIndex(function(s) {
+				return s.mother === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s mother`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+			_ssj = V.slaves.findIndex(function(s) {
+				return s.father === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s father`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID && handled !== 1) {
+					const friendShipShort = relationshipTermShort(child);
+					r += ` & ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.daughters > 1) {
+			r += `multiple daughters `;
+		}
+		if (child.sisters === 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return areSisters(s, child) > 0;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s sister`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTermShort(child);
+					r += `& ${friendShipShort}`;
+					handled = 1;
+				}
+			}
+			r += " ";
+		} else if (child.sisters > 1) {
+			r += `multiple sisters `;
+		}
+		if (child.relationship > 0 && handled !== 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.relationshipTarget;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s`;
+				const friendShipShort = relationshipTermShort(child);
+				r += ` ${friendShipShort}`;
+			}
+		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
+			r += `Your wife`;
+		} else if (child.relationship === -2) {
+			r += `E Bonded`;
+		} else if (child.relationship === -1) {
+			r += `E Slut`;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function shortRival(child) {
+		if (child.rivalry !== 0) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.rivalryTarget;
+			});
+			if (_ssj !== -1) {
+				r += `<span class="lightsalmon">`;
+				if (child.rivalry <= 1) {
+					r += `Disl ${SlaveFullName(V.slaves[_ssj])}`;
+				} else if (child.rivalry <= 2) {
+					r += `${SlaveFullName(V.slaves[_ssj])}'s rival`;
+				} else {
+					r += `Hates ${SlaveFullName(V.slaves[_ssj])}`;
+				}
+				r += `</span> `;
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longExtendedFamily(child) {
+		let handled = 0;
+		if (child.mother > 0) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.mother;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.mother === -1) {
+			r += `Your `;
+
+			if (child.relationship < -1) {
+				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
+				handled = 1;
+			} else {
+				r += `<span class="lightgreen">daughter.</span> `;
+			}
+		} else if (child.mother in V.missingTable && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.mother].fullName}'s <span class="lightgreen">daughter.</span> `;
+		}
+		if (child.father > 0 && child.father !== child.mother) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.father;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">daughter`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.father === -1 && child.father !== child.mother) {
+			r += `Your `;
+			if (child.relationship < -1) {
+				r += `<span class="lightgreen">daughter and ${PCrelationshipTerm(child)}.</span> `;
+				handled = 1;
+			} else {
+				r += `<span class="lightgreen">daughter.</span> `;
+			}
+		} else if (child.father in V.missingTable && child.father !== child.mother && V.showMissingSlavesSD && V.showMissingSlaves) {
+			r += `${V.missingTable[child.father].fullName}'s <span class="lightgreen">daughter.</span> `;
+		}
+		if (child.daughters === 1) {
+			let _ssj = V.slaves.findIndex(function(s) {
+				return s.mother === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">mother`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+			_ssj = V.slaves.findIndex(function(s) {
+				return s.father === child.ID;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">father`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.daughters > 1) {
+			if (child.daughters > 10) {
+				r += `<span class="lightgreen">Has tons of daughters.</span> `;
+			} else if (child.daughters > 5) {
+				r += `<span class="lightgreen">Has many daughters.</span> `;
+			} else {
+				r += `<span class="lightgreen">Has several daughters.</span> `;
+			}
+		}
+		if (child.sisters === 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return areSisters(s, child) > 0;
+			});
+			if (_ssj !== -1) {
+				r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightgreen">sister`;
+				if (child.relationshipTarget === V.slaves[_ssj].ID) {
+					const friendShipShort = relationshipTerm(child);
+					r += ` and ${friendShipShort}`;
+					handled = 1;
+				}
+				r += `.</span> `;
+			}
+		} else if (child.sisters > 1) {
+			if (child.sisters > 10) {
+				r += `<span class="lightgreen">One of many sisters.</span> `;
+			} else if (child.sisters > 5) {
+				r += `<span class="lightgreen">Has many sisters.</span> `;
+			} else {
+				r += `<span class="lightgreen">Has several sisters.</span> `;
+			}
+		}
+		if (child.relationship > 0 && handled !== 1) {
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.relationshipTarget;
+			});
+			if (_ssj !== -1) {
+				const friendship = relationshipTerm(child);
+				r += `${SlaveFullName(V.slaves[_ssj])}'s `;
+				r += `<span class="lightgreen">${friendship}.</span> `;
+			}
+		} else if (child.relationship === -3 && child.mother !== -1 && child.father !== -1) {
+			r += `<span class="lightgreen">Your wife.</span> `;
+		} else if (child.relationship === -2) {
+			r += `<span class="lightgreen">Emotionally bonded to you.</span> `;
+		} else if (child.relationship === -1) {
+			r += `<span class="lightgreen">Emotional slut.</span> `;
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function longRival(child) {
+		if (child.rivalry !== 0) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+			const _ssj = V.slaves.findIndex(function(s) {
+				return s.ID === child.rivalryTarget;
+			});
+			if (_ssj !== -1) {
+				if (child.rivalry <= 1) {
+					r += `<span class="lightsalmon">Dislikes</span> ${SlaveFullName(V.slaves[_ssj])}. `;
+				} else if (child.rivalry <= 2) {
+					r += `${SlaveFullName(V.slaves[_ssj])}'s <span class="lightsalmon">rival.</span> `;
+				} else {
+					r += `<span class="lightsalmon">Hates</span> ${SlaveFullName(V.slaves[_ssj])}. `;
+				}
+			}
+			r += " ";
+		}
+	}
+
+	/**
+	 * @param {App.Entity.InfantState} child
+	 */
+	function origins(child) {
+		r += `<br> `;
+		if (V.seeImages !== 1 || V.seeSummaryImages !== 1 || V.imageChoice === 1) {
+			r += `&nbsp;&nbsp;&nbsp;&nbsp;`;
+		}
+		r += `<span class="gray">${child.origin}</span> `;
+	}
+
+	return InfantSummaryUncached(child);
+};
diff --git a/src/facilities/nursery/widgets/infants/longInfantDescription.js b/src/facilities/nursery/widgets/infants/longInfantDescription.js
new file mode 100644
index 00000000000..6cb5e1c801c
--- /dev/null
+++ b/src/facilities/nursery/widgets/infants/longInfantDescription.js
@@ -0,0 +1,253 @@
+/**
+ * Displays a detailed description of the infant
+ * @param {App.Entity.InfantState} child
+ * @returns {string}
+ */
+App.Facilities.Nursery.LongInfantDescription = function(child) {
+	"use strict";
+	const
+		PC = V.PC,
+		arcology = V.arcologies[0],
+		weeksOwned = V.week - child.weekAcquired;
+
+	let
+		r = ``,
+		age,
+		title,
+		father = 0,
+		fatherPC = 0,
+		mother = 0,
+		motherPC = 0;
+
+	const
+		{
+			he, him, his, He, His
+		} = getPronouns(child);
+
+	if (child.father === -1 && child.mother === -1) {
+		father = PC;
+		fatherPC = 1;
+		mother = PC;
+		motherPC = 1;
+	} else {
+		if (child.father === -1) {
+			father = PC;
+			fatherPC = 1;
+			mother = getSlave(child.mother);
+		} else if (child.mother === -1) {
+			father = getSlave(child.father);
+			mother = PC;
+			motherPC = 1;
+		} else {
+			if (child.father > 0) { /* Fathered by a current slave */
+				father = getSlave(child.father);
+			} else if (child.father < 0) { /* Fathered by a missing slave */
+				father = -1;
+			}
+			if (child.father > 0) { /* Mothered by a current slave */
+				mother = getSlave(child.mother);
+			} else if (child.mother < 0) { /* Mothered by a missing slave */
+				mother = -1;
+			}
+		}
+	}
+
+	// TODO: add infant art here
+
+	r += `&nbsp;&nbsp;&nbsp;&nbsp; `;
+
+	r += `<span id="childName"><strong><span class="pink">${SlaveFullName(child)}</span></strong></span> `;
+
+	if (jsDef(child.custom)) {
+		if (child.custom.label) {
+			r += ` (<strong><span class="yellow">${child.custom.label}</span></strong>) `;
+		}
+	}
+
+	if (child.actualAge > 0) {
+		age = `${num(child.actualAge)}-year-old`;
+		if (child.actualAge > 1) {
+			title = `toddler`;
+		} else {
+			title = `baby`;
+		}
+	} else {
+		if (weeksOwned > 4) {
+			age = `${num(Math.trunc(weeksOwned / 4))}-month-old`;
+			title = `baby`;
+		} else {
+			if (weeksOwned <= 1) {
+				age = ``;
+				title = `newborn`;
+			} else {
+				age = `${num(weeksOwned)}-week-old`;
+				title = `baby`;
+			}
+		}
+	}
+
+	r += ` is a ${age} <strong><span class="coral">${title}.</span></strong> ${He} was born in ${arcology.name} ${weeksOwned > 4 ? weeksOwned < 9 ? `about a month` : `${num(weeksOwned)} months` : weeksOwned <= 1 ? `last week` : `${num(weeksOwned)} weeks`}${weeksOwned > 1 ? ` ago` : ``}`;
+
+	if (jsDef(child.counter)) {
+		const
+			oral = child.counter.oral,
+			vaginal = child.counter.vaginal,
+			anal = child.counter.oral,
+			mammary = child.counter.mammary,
+			penetrative = child.counter.penetrative,
+			total = oral + vaginal + anal + mammary + penetrative;
+
+		if (total > 0) {
+			r += ` and has been fucked about ${num(total)} times, including `;
+			if ((vaginal + anal + mammary + penetrative) > 0) {
+				if (vaginal > 0) {
+					r += `${num(vaginal)} vanilla, `;
+				}
+				if (anal > 0) {
+					r += `${num(anal)} anal, `;
+				}
+				if (mammary > 0) {
+					r += `${num(mammary)} mammary `;
+				}
+				if (penetrative > 0) {
+					r += `${num(penetrative)} penetrating, `;
+				}
+				r += ` and `;
+			}
+			r += `${num(oral)} oral sexual encounters. `;
+		} else {
+			if (weeksOwned >= 1) {
+				r += ` and `;
+			} else {
+				r += `. ${He} `;
+			}
+
+			r += `has had little or no sexual experience `;
+			if (child.weekAcquired !== 0) {
+				r += `as your slave `;
+			} else {
+				r += `in your new arcology `;
+			}
+			r += `yet. `;
+
+			let sortedCounts = [];
+			sortedCounts.push(
+				{type: "oral", value: oral},
+				{type: "vaginal", value: vaginal},
+				{type: "anal", value: anal},
+				{type: "mammary", value: mammary},
+				{type: "penetrative", value: penetrative}
+			);
+			sortedCounts = sortedCounts.sort(function(a, b) {	// sorts the counts from largest to smallest
+				return b.value - a.value;
+			});
+
+			if (sortedCounts[0].type === "oral") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s sucked something off `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "vaginal") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${his} pussy has been fucked `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "anal") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s been buttfucked `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "mammary") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s put ${his} tits to work `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			} else if (sortedCounts[0].type === "penetrative") {
+				if (((weeksOwned * 112) / oral) < 4) {
+					r += `Remarkably, this means that ${he}'s pounded a hole `;
+					if (((weeksOwned * 112) / oral) < 1) {
+						r += `more than once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 1.5) {
+						r += `about once every hour `;
+					} else if (((weeksOwned * 112) / oral) < 2.5) {
+						r += `about once every two hours `;
+					} else if (((weeksOwned * 112) / oral) < 3.5) {
+						r += `about once every three hours `;
+					} else {
+						r += `about once every four hours `;
+					}
+					r += ` ${he}'s spent awake. `;
+				}
+			}
+		}
+	} else {
+		r += `. `;
+	}
+
+	r += App.Desc.family(child) + ' ';
+
+	if (father && fatherPC) {
+		if (child.eyeColor === PC.eye.origColor) {
+			r += `${He} has your ${child.eyeColor} eyes, `;
+		} else if (mother) {
+			r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `;
+		}
+	} else {
+		if (father && child.eyeColor === father.eyeColor) {
+			r += `${He} has ${his} father ${father.slaveName}'s ${child.eyeColor} eyes, `;
+		} else if (mother) {
+			r += `${He} has ${his} mother ${mother.slaveName}'s ${child.eyeColor} eyes, `;
+		} else {
+			r += `${He} has ${child.eyeColor} eyes, `;
+		}
+	}
+	r += ` and ${he} will most likely have ${child.hColor} hair when ${he}'s older. `;
+
+	r += `${He} ${V.seeRace ? `is ${child.race} and ${child.nationality}, and` : ``} has ${child.skin} skin. `;
+
+	return r;
+};
diff --git a/src/facilities/nursery/widgets/reports/childrenReport.js b/src/facilities/nursery/widgets/reports/childrenReport.js
new file mode 100644
index 00000000000..83a407e7524
--- /dev/null
+++ b/src/facilities/nursery/widgets/reports/childrenReport.js
@@ -0,0 +1,402 @@
+/**
+ * Details week-to-week changes in children in the Nursery
+ * @returns {string}
+ */
+App.Facilities.Nursery.childrenReport = function childrenReport() {
+	"use strict";
+
+	const
+		Matron = V.Matron,
+		NL = App.Entity.facilities.nursery.employeesIDs().size,
+		CL = V.cribs.length;
+
+	let
+		r = ``;
+
+	for (let i = 0; i < CL; i++) {
+		const
+			child = V.cribs[i];
+			// {
+			// he, him, his, He, His
+			// } = getPronouns(child);
+
+		let
+			he,
+			his,
+			him,
+			He,
+			His;
+
+		// FIXME: get pronoun system to work with child objects
+		if (child.genes === "XX") {
+			he = "she",
+			him = "her",
+			his = "her";
+		} else {
+			he = "he",
+			him = "him",
+			his = "his";
+		}
+		He = capFirstChar(he), His = capFirstChar(his);
+
+		if (child.growTime > 0) {
+			r += `<br><span class="pink">${child.slaveName}</span> is growing steadily. ${He} will be ready for release in about ${years(child.growTime)}. `;
+		} else {
+			r += `<span class="pink">${child.slaveName}</span> is <span class="lime">ready for release.</span> ${He} will be removed from ${V.nurseryName} upon your approach.`;
+		}
+
+		// TODO: add Matron and nanny effects
+		if (child.actualAge >= 3) {
+			if (Matron || NL) {
+				let
+					chance = jsRandom(1, 100);
+
+				if (jsDef(Matron)) {
+					if (Matron.fetish !== "none") {
+						if (chance > 90) {
+							if (child.fetish === "none") {
+								// TODO: clean up the following blocks
+								r += `${child.slaveName} has taken a few cues from ${Matron.slaveName}, and `;
+								switch (child.fetish) {
+									case "submissive":
+										r += `is now a submissive`;
+										break;
+									case "cumslut":
+										r += `is now a cumslut`;
+										break;
+									case "humiliation":
+										r += `now has a fetish for humiliation`;
+										break;
+									case "buttslut":
+										r += `is now a buttslut`;
+										break;
+									case "boobs":
+										r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
+										break;
+									case "sadist":
+										r += `now gets off on causing pain`;
+										break;
+									case "masochist":
+										r += `now gets off on pain`;
+										break;
+									case "dom":
+										r += `is now very sexually dominant`;
+										break;
+									case "pregnancy":
+										r += `has developed a facination for all things pregnancy-related`;
+										break;
+								}
+								r += `. `;
+								child.fetish = Matron.fetish;
+							} else {
+								if (chance > 95) {
+									r += `${Matron.slaveName} has rubbed off on ${child.slaveName}, in more ways than one. ${He} `;
+									switch (child.fetish) {
+										case "submissive":
+											r += `is now a submissive`;
+											break;
+										case "cumslut":
+											r += `is now a cumslut`;
+											break;
+										case "humiliation":
+											r += `now has a fetish for humiliation`;
+											break;
+										case "buttslut":
+											r += `is now a buttslut`;
+											break;
+										case "boobs":
+											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
+											break;
+										case "sadist":
+											r += `now gets off on causing pain`;
+											break;
+										case "masochist":
+											r += `now gets off on pain`;
+											break;
+										case "dom":
+											r += `is now very sexually dominant`;
+											break;
+										case "pregnancy":
+											r += `has developed a facination for all things pregnancy-related`;
+											break;
+									}
+									r += `. `;
+									child.fetish = Matron.fetish;
+								}
+							}
+						}
+					}
+				}
+
+				if (NL > 0) {
+					for (const slave of App.Utils.sortedEmployees(App.Entity.facilities.nursery)) {
+						if (slave.fetish !== "none") {
+							if (chance > 85) {
+								if (child.fetish === "none") {
+									r += `${slave.slaveName} has left quite an impression on ${child.slaveName}, and ${he} `;
+									switch (child.fetish) {
+										case "submissive":
+											r += `is now a submissive`;
+											break;
+										case "cumslut":
+											r += `is now a cumslut`;
+											break;
+										case "humiliation":
+											r += `now has a fetish for humiliation`;
+											break;
+										case "buttslut":
+											r += `is now a buttslut`;
+											break;
+										case "boobs":
+											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
+											break;
+										case "sadist":
+											r += `now gets off on causing pain`;
+											break;
+										case "masochist":
+											r += `now gets off on pain`;
+											break;
+										case "dom":
+											r += `is now very sexually dominant`;
+											break;
+										case "pregnancy":
+											r += `has developed a facination for all things pregnancy-related`;
+											break;
+									}
+									r += `. `;
+									child.fetish = slave.fetish;
+								} else {
+									if (chance > 90) {
+										r += `${child.slaveName} seems to have taken to ${slave.slaveName}'s example, and `;
+										switch (child.fetish) {
+										case "submissive":
+											r += `is now a submissive`;
+											break;
+										case "cumslut":
+											r += `is now a cumslut`;
+											break;
+										case "humiliation":
+											r += `now has a fetish for humiliation`;
+											break;
+										case "buttslut":
+											r += `is now a buttslut`;
+											break;
+										case "boobs":
+											r += `now has a fetish for boobs and breastplay`;	// TODO: not happy with this wording
+											break;
+										case "sadist":
+											r += `now gets off on causing pain`;
+											break;
+										case "masochist":
+											r += `now gets off on pain`;
+											break;
+										case "dom":
+											r += `is now very sexually dominant`;
+											break;
+										case "pregnancy":
+											r += `has developed a facination for all things pregnancy-related`;
+											break;
+									}
+									r += `. `;
+										child.fetish = slave.fetish;
+									}
+								}
+							}
+						}
+					}
+				}
+
+				// TODO: add education system
+				if (jsDef(Matron) && Matron) {
+					const {
+						// eslint-disable-next-line no-unused-vars
+						he2, him2, his2, hers2, himself2, boy2, He2, His2
+					} = getPronouns(Matron).appendSuffix('2');
+
+					if (Matron.intelligence + Matron.intelligenceImplant > 65) {
+						r += `${Matron.slaveName} is so intelligent and well-educated that ${he2} is able to teach ${CL > 1 ? `the children` : `${child.slaveName}`} very effectively, and so ${CL > 1 ? child.slaveName : `${he}`} gradually grows smarter. `;	// TODO: not happy with this
+						child.intelligenceImplant += 3;	// TODO: should this raise intelligence instead?
+					} else if (Matron.intelligenceImplant > 30) {
+						r += `${Matron.slaveName}'s education makes up for the fact that ${CL > 1 ? child.slaveName : `${he}`} isn't the brightest and allows ${him2} to teach ${CL > 1 ? `the children` : `${child.slaveName}`} quite effectively, and so ${CL > 1 ? child.slaveName : `${he}`} grows a bit smarter. `;	// TODO:
+						child.intelligenceImplant += 2;
+					} else if (Matron.intelligence > 50) {
+						r += `Though ${Matron.slaveName} has had little to no formal education, ${his2} natural brilliance allows ${him2} to teach ${CL > 1 ? `the children` : `${child.slaveName}`} quite effectively, and so ${CL > 1 ? child.slaveName : `${he}`} grows a bit smarter. `;	// TODO:
+						child.intelligenceImplant += 2;
+					} else {
+						r += `${Matron.slaveName} isn't the brightest, and isn't as effective at teaching as ${he2} otherwise could be. ${He2} is only somewhat effective at teaching ${CL > 1 ? `the children` : `${child.slaveName}`}, and so ${CL > 1 ? child.slaveName : `${he}`} grows just a little bit smarter. `;	// TODO:
+						child.intelligenceImplant++;
+					}
+				}
+
+				if (NL > 0) {
+					let
+						averageIntelligence = 0,
+						averageIntelligenceImplant = 0;
+
+					const nannies = App.Entity.facilities.nursery.employees();
+					for (const nanny of nannies) {
+						averageIntelligence += nanny.intelligence;
+						averageIntelligenceImplant += nanny.intelligenceImplant;
+					}
+
+					const firstNanny = nannies[0];
+
+					averageIntelligence = averageIntelligence / NL;
+					averageIntelligenceImplant = averageIntelligenceImplant / NL;
+
+					if (averageIntelligence + averageIntelligenceImplant > 65) {
+						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very intelligent and well educated and are able to teach ${CL > 1 ? `the children` : child.slaveName} very effectively. `;
+						child.intelligenceImplant += 3;
+					} else if (averageIntelligence > 50) {
+						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very intelligent and able to teach ${CL > 1 ? `the children` : child.slaveName} quite effectively. `;
+						child.intelligenceImplant += 2;
+					} else if (averageIntelligenceImplant > 25) {
+						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} very well educated and able to teach ${CL > 1 ? `the children` : child.slaveName} quite effectively. `;
+						child.intelligenceImplant += 2;
+					} else if (averageIntelligenceImplant > 15) {
+						r += `${NL > 1 ? `The nannies are mostly` : `${firstNanny.slaveName} is`} well educated and able to teach ${CL > 1 ? `the children` : child.slaveName} fairly effectively. `;
+						child.intelligenceImplant++;
+					}
+				}
+
+				// TODO: add fitness system
+				if (jsDef(Matron) && Matron) {
+					// TODO:
+				}
+
+				if (NL > 0) {
+					// TODO:
+				}
+			}
+
+			// TODO: add friend / rivalry system
+			// TODO: add relations to friend system
+			for (let j = 0; j < CL; j++) {
+				const
+					c = V.cribs[j];
+
+				let
+					friend = 0,
+					rival = 0,
+					chance = jsRandom(1, 100);
+
+				if (c.actualAge >= 3) {
+					if (c.fetish === child.fetish) {
+						r += ``; // TODO:
+						friend++;
+					}
+
+					if (c.sexualQuirk === child.sexualQuirk || c.behavioralQuirk === child.behavioralQuirk) {
+						r += ``; // TODO:
+						friend++;
+					}
+
+					if (c.fetish === "sadist" || c.fetish === "dom") {
+						r += ``; // TODO:
+						rival++;
+					} else if (child.fetish === "sadist" || child.fetish === "dom") {
+						r += ``; // TODO:
+						rival++;
+					}
+
+					if (friend) {
+						if (rival) {
+							if (friend > rival) {
+								if (chance > 75) {
+									r += ``;	// TODO:
+									child.relationship = 1, child.relationshipTarget = c.ID;
+									c.relationship = 1, c.relationshipTarget = child.ID;
+								}
+							}
+						} else {
+							if (chance > 60) {
+								r += ``;	// TODO:
+								child.relationship = 1, child.relationshipTarget = c.ID;
+								c.relationship = 1, c.relationshipTarget = child.ID;
+							}
+						}
+					}
+
+					if (rival) {
+						if (friend) {
+							if (rival > friend) {
+								if (chance > 75) {
+									r += ``;	// TODO:
+								}
+							}
+						} else {
+							if (chance > 60) {
+								r += ``;	// TODO:
+							}
+						}
+					}
+				}
+			}
+
+			// TODO: rework these entirely
+			if (Matron || NL) {
+				if (V.nurseryWeight) {
+					const firstNanny = NL > 0 ? App.Entity.facilities.nursery.employees()[0] : null;
+					r += `<br>`;
+					if (V.nurseryWeightSetting === 1) {
+						if (child.weight < 200) {
+							child.weight += 5;
+						}
+						r += `${He} is being fed an excessive amount of food, causing <span class="red">rapid weight gain.</span> `;
+					} else if (V.nurseryWeightSetting === 2) {
+						if (child.weight > 10) {
+							child.weight--;
+							r += `${Matron ? Matron.slaveName : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is overweight and <span class="green">decreases the amount of food ${he} eats.</span> `;
+						} else if (child.weight <= -10) {
+							child.weight++;
+							r += `${Matron ? Matron.slaveName : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is underweight and <span class="green">increases the amount of food ${he} eats.</span> `;
+						} else {
+							r += `${He} is <span class="lime">currently a healthy weight;</span> efforts will be made to maintain it. `;
+						}
+					} else if (V.nurseryWeightSetting === 0) {
+						if (child.weight > -20) {
+							r += `${His} developing body <span class="red">quickly sheds its gained weight.</span> `;
+							child.weight -= 40;
+						}
+					}
+				} else {
+					if (child.weight > -20) {
+						child.weight -= 40;
+						r += `${His} developing body <span class="red">quickly sheds its gained weight.</span>`;
+					}
+				}
+
+				// TODO: rewrite these
+				if (V.nurseryMuscles) {
+					r += `${He} is being given anabolic steroids causing <span class="green">rapid muscle development.</span> `;	// TODO: not happy with this
+					if (V.nurseryMusclesSetting === 2) {
+						if (child.muscles < 100) {
+							child.muscles += 5;
+						}
+						r += `${Matron ? Matron : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is overly muscular and <span class="green">decreases ${his} steroid dosage.</span> `;
+					} else if (V.nurseryMusclesSetting === 1) {
+						if (child.muscles > 10) {
+							child.muscles--;
+							r += `${Matron ? Matron : NL > 1 ? `A nanny` : firstNanny.slaveName} notices ${he} is weak and <span class="green">increases ${his} steroid dosage.</span> `;
+						} else if (child.muscles < -10) {
+							child.muscles++;
+							r += `${He} has <span class="lime">a healthy musculature;</span> efforts will be made to maintain it. `;
+						} else {
+							r += `${His} developing body <span class="red">quickly loses its gained muscle.</span> `;
+						}
+					} else if (V.nurseryMusclesSetting === 0) {
+						if (child.muscles > -100) {
+							child.muscles -= 40;
+							r += `${His} developing body <span class="red">quickly loses its gained muscle.</span> `;
+						}
+					}
+				}
+			}
+		} else {
+			// TODO:
+		}
+		r += `<br>`;
+	}
+
+	return r;
+};
diff --git a/src/facilities/nursery/widgets/reports/nurseryReport.js b/src/facilities/nursery/widgets/reports/nurseryReport.js
new file mode 100644
index 00000000000..2321cc480a3
--- /dev/null
+++ b/src/facilities/nursery/widgets/reports/nurseryReport.js
@@ -0,0 +1,298 @@
+/**
+ * Creates a full report of the Nursery
+ * @returns {string}
+ */
+// TODO: refactor this
+App.Facilities.Nursery.nurseryReport = function nurseryReport() {
+	"use strict";
+
+	let r = ``;
+
+	const
+		Matron = getSlave(V.Matron.ID),
+		arcology = V.arcologies[0];
+
+	let
+		NL = App.Utils.jobForAssignment(Job.NURSERY).employeesIDs().size,
+		healthBonus = 0,
+		trustBonus = 0,
+		idleBonus = 0,
+		devBonus = 0;
+
+	if (V.nurseryDecoration !== "standard") {
+		devBonus = 1;
+	}
+
+	if (Matron) {
+		const
+			{
+				he, him, his, himself, He, His
+			} = getPronouns(Matron);
+
+		if (Matron.health.condition < 100) {
+			improveCondition(Matron, 20);
+		}
+		if (Matron.devotion <= 60) {
+			Matron.devotion++;
+		}
+		if (Matron.trust <= 60) {
+			Matron.trust++;
+		}
+		if (Matron.rules.living !== "luxurious") {
+			Matron.rules.living = "luxurious";
+		}
+
+		let FLsFetish = 0;
+		/*
+		if (Matron.fetishStrength <= 95) {
+			if (Matron.fetish !== "caring") {
+				if (fetishChangeChance(Matron) > jsRandom(0, 100)) {
+					FLsFetish = 1, Matron.fetishKnown = 1, Matron.fetish = "caring";
+				}
+			} else if (!Matron.fetishKnown) {
+				FLsFetish = 1, Matron.fetishKnown = 1;
+			} else {
+				FLsFetish = 2, Matron.fetishStrength += 4;
+			}
+		}
+		*/
+		if (Matron.fetish === "none" || Matron.fetish === "caring") {
+			devBonus++;
+		}
+
+		Matron.devotion += devBonus;
+
+		if (V.Matron !== Matron) {
+			V.Matron = Matron;
+		}
+
+		r += `&nbsp;&nbsp;&nbsp;&nbsp;${SlaveFullName(Matron)} is serving as ${V.nurseryName} matron. `;
+
+		if (Matron.relationship === -3 && Matron.devotion > 50) {
+			r += `${He} tries ${his} best to ${V.nurseryChildren ? `properly take care of and raise the children` : `look after ${V.nurseryName} and keep it tidy and running smoothly`}. `;
+		}
+
+		if (FLsFetish === 1) {
+			r += `${He} ${V.nurseryChildren ? `seems to have a real soft spot for children, and enjoys working with the child${V.nurseryChildren > 1 ? `ren` : ``} in ${V.nurseryName} and raising ${V.nurseryChildren > 1 ? `them` : V.cribs[0].genes === "XX" ? `her` : `him`} to be ${V.nurseryChildren > 1 ? `good slaves` : `a good slave`}` : ``/* TODO: */}. ${He} finds real satisfaction in helping your slaves find sexual gratification, and <span class="lightsalmon">becomes more caring.</span> `;
+		} else if (FLsFetish === 2) {
+			r += `Every new slave in the nursery is a new person ${he} gets to connect with and serve. Sexually. <span class='lightsalmon'>${He} becomes more caring.</span>`;	// TODO:
+		}
+
+		// TODO:
+		if (setup.matronCareers.includes(Matron.career)) {
+			r += `${He} has experience with childcare from ${his} life before ${he} was a slave, making ${him} better at properly raising children, and giving ${him} a better chance of softening flaws into beneficial quirks. `;
+			idleBonus++;
+		} else if (Matron.skill.matron >= V.masteredXP) {
+			r += `${He} has experience with childcare from working for you, making ${him} better at properly raising children, and giving ${him} a better chance of softening flaws into beneficial quirks. `;
+			idleBonus++;
+		} else {
+			Matron.skill.matron += jsRandom(1, (Matron.intelligence + 4) * 2);
+		}
+
+		// TODO:
+		if (Matron.fetish === "none") {
+			r += `${Matron.slaveName} respects the slaves working in the nursery, allowing them to care for the children more effectively. `;
+			idleBonus++;
+		} else if (Matron.fetish === "dom") {
+			r += `${Matron.slaveName} enjoys being able to have control over the nannies. `;
+			idleBonus++;
+		} else if (Matron.fetishKnown) {
+			r += `${Matron.slaveName} can't keep ${his} hands to ${himself}, preventing the slaves in the nursery from relaxing completely. `;
+		}
+
+		// TODO:
+		if (Matron.visualAge > 35) {
+			r += `${His} apparent maturity encourages the slaves in the nursery to relax and pour out their troubles to ${him}. `;
+		}
+
+		// TODO:
+		if (Matron.intelligence > 0) {
+			r += `${He}'s so intelligent ${he} can suss out the cause of slaves' emotional issues and counsel them effectively. `;
+		}
+
+		// TODO: write more
+
+		if (NL < V.nursery) {
+			let seed = jsRandom(1, 10) + ((V.nursery - NL) * (jsRandom(150, 170) + (idleBonus * 10)));
+			cashX(seed, "nursery", Matron);
+			r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;Since ${he} doesn't have enough children to occupy all ${his} time, ${V.nurseryName} takes in citizens' children on a contract basis and ${he} cares for them too, earning <span class='yellowgreen'>${cashFormat(seed)}.</span> `;
+		}
+
+		if (arcology.FSRepopulationFocus > 0 && V.nurseryBabies > 0) {
+			r += `Society <span class='green'>loves</span> the way you are raising more children for ${arcology.name}. `;
+			FSChange("Repopulationist", 2);
+		}
+
+		if (NL > 0) {
+			r += `<br><br>`;
+		}
+	}
+
+	if (NL > 0) {
+		r += `&nbsp;&nbsp;&nbsp;&nbsp;<strong>${NL > 1 ? `There are ${NL} slaves` : `There is one slave`} working in ${V.nurseryName}.</strong> `;
+		if (arcology.FSRepopulationFocus > 0 && V.nurseryBabies > 0) {
+			r += `Society <span class="green">approves</span> of your bringing more children into this world. `;
+		} else if (arcology.FSGenderFundamentalist > 0) {
+			r += `Society <span class="green">approves</span> of your assigning slaves to a traditionally feminine role. `;
+		}
+	}
+
+	if (Matron) {
+		V.i = V.slaveIndices[Matron.ID];
+		if (V.showEWD) {
+			// TODO: all this
+			r += `<br><br>`;
+			/* 000-250-006 */
+			if (V.seeImages && V.seeReportImages) {
+				r += `<div class="imageRef medImg">${SlaveArt(Matron, 2, 0)}</div>`;
+			}
+			/* 000-250-006 */
+			r += `<strong><u><span class="pink">${SlaveFullName(Matron)}</span></u></strong> is serving as the Matron in ${V.nurseryName}.`;
+			r += `${App.SlaveAssignment.choosesOwnClothes(Matron)}`;
+			r += `<<include "SA rules">>`;
+			r += `<<include "SA diet">>`;
+			r += `<<include "SA long term effects">>`;
+			r += `${App.SlaveAssignment.drugs(Matron)}`;
+			r += `<<include "SA relationships">>`;
+			r += `<<include "SA rivalries">>`;
+			r += `<br><<include "SA devotion">>`;
+		} else {
+			r += `<<silently>>
+			${App.SlaveAssignment.choosesOwnClothes(Matron)};
+			<<include "SA rules">>
+			<<include "SA diet">>
+			<<include "SA long term effects">>
+			${App.SlaveAssignment.drugs(Matron)};
+			<<include "SA relationships">>
+			<<include "SA rivalries">>
+			<<include "SA devotion">>
+			<</silently>>`;
+		}
+	}
+
+	for (const slave of App.Utils.sortedEmployees(App.Utils.jobForAssignment(Job.NURSERY))) {
+		V.i = V.slaveIndices[slave.ID];
+
+		slave.devotion += devBonus, slave.trust += trustBonus;
+		improveCondition(slave, healthBonus);
+
+		// TODO: rework these
+		if (slave.devotion < 60 && slave.trust < 60) {
+			slave.devotion++, slave.trust++;
+		} else if (slave.devotion < 40) {
+			slave.devotion += 10;
+		} else if (slave.trust < 40) {
+			slave.trust += 10;
+		}
+
+		// TODO: rework this
+		if (V.nurseryUpgrade === 1 && slave.health.condition < 20) {
+			improveCondition(slave, 3);
+		}
+
+		// TODO:
+		switch (V.nurseryDecoration) {
+			case "Repopulationist":
+				slave.rules.living = "luxurious";
+				break;
+			case "Degradationist":
+				slave.rules.living = "spare";
+				break;
+			default:
+				slave.rules.living = "normal";
+				break;
+		}
+
+		// TODO:
+		if (V.showEWD) {
+			const
+				He = slave.genes === "XX" ? `She` : `He`;
+
+			r += `<br><br>`;
+			/* 000-250-006 */
+			if (V.seeImages && V.seeReportImages) {
+				r += `<div class="imageRef smlImg">${SlaveArt(slave, 0, 0)}</div>`;
+			}
+			/* 000-250-006 */
+			r += `<strong><u><span class="pink">${SlaveFullName(slave)}</span></u></strong>`;
+			if (slave.choosesOwnAssignment === 2) {
+				r += `${choosesOwnJob(slave)}`;
+			} else {
+				r += ` is working in ${V.nurseryName}. `;
+			}
+			// TODO: clean this mess up
+			r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;${He} ${App.SlaveAssignment.nanny(slave)}<br>&nbsp;&nbsp;&nbsp;`;
+			r += `${App.SlaveAssignment.choosesOwnClothes(slave)} ${saRules(slave)}`;
+			r += `<<include "SA diet">>`;					// TODO:
+			r += `<<include "SA long term effects">>`;		// TODO:
+			r += `${App.SlaveAssignment.drugs(slave)}`;						// TODO:
+			r += `<<include "SA relationships">>`;			// TODO:
+			r += `<<include "SA rivalries">>`;				// TODO:
+			r += `<br><<include "SA devotion">>`;			// TODO:
+		} else {
+			r += `<<silently>>`;
+			r += `${choosesOwnJob(slave)} ${App.SlaveAssignment.nanny(slave)} ${App.SlaveAssignment.choosesOwnClothes(slave)} ${saRules(slave)}`;
+			r += `<<include "SA diet">>`;
+			r += `<<include "SA long term effects">>`;
+			r += `${App.SlaveAssignment.drugs(slave)}`;
+			r += `<<include "SA relationships">>`;
+			r += `<<include "SA rivalries">>`;
+			r += `<<include "SA devotion">>`;
+			r += `<</silently>>`;
+		}
+	}
+
+	if (NL > 0 || Matron) {
+		r += `<br><br>`;
+	}
+
+	function choosesOwnJob(slave) {
+		let r = ``;
+
+		if (V.universalRulesAssignsSelfFacility && slave.devotion > 50 && canWalk(slave) && canSee(slave) && slave.sexualQuirk === "caring" && V.nurseryNannies > NL) {
+			slave.choosesOwnAssignmentText += ` enjoys taking care of children, so ${he} decides to work in ${V.nurseryName}. `;
+			r = slave.choosesOwnAssignmentText;
+			assignJob(slave, Job.NURSERY);
+		}
+
+		return r;
+	}
+
+	// function diet(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	// function longTermEffects(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	// function drugs(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	// function relationships(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	// function rivalries(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	// function devotion(slave) {
+	// 	let r = ``;
+
+	// 	return r;
+	// }
+
+	return r;
+};
diff --git a/src/facilities/nursery/widgets/utils/nurseryUtils.js b/src/facilities/nursery/widgets/utils/nurseryUtils.js
new file mode 100644
index 00000000000..99b68f0091d
--- /dev/null
+++ b/src/facilities/nursery/widgets/utils/nurseryUtils.js
@@ -0,0 +1,970 @@
+/**
+ * Displays a list of the children in the Nursery
+ * @returns {string}
+ */
+App.Facilities.Nursery.childList = function () {
+	"use strict";
+	const
+		cribs = V.cribs;
+
+	let
+		r = ``;
+
+	for (let i = 0; i < cribs.length; i++) {
+		r += `<hr style="margin:0">`;
+		const
+			child = cribs[i],
+			weeksOwned = V.week - child.weekAcquired,
+			weeksLeft = (V.targetAgeNursery * 52) - weeksOwned,
+			he = child.genes === "XX" ? `she` : `he`,
+			him = child.genes === "XX" ? `her` : 'him',
+			He = capFirstChar(he);
+
+		if (child.actualAge < 3) {
+			r += App.UI.passageLink(`${SlaveFullName(child)}`, "Infant Interact", `$activeChild = $cribs[${i}]`);	// FIXME: figure out why "V.activeChild = child" doesn't work
+			r += App.Facilities.Nursery.InfantSummary(child);
+		} else {
+			r += App.UI.passageLink(`${SlaveFullName(child)}`, "Child Interact", `$activeChild = $cribs[${i}]`);
+			r += App.Facilities.Nursery.ChildSummary(child);
+		}
+
+		if (child.actualAge >= 18) {
+			V.nurseryOldID = child.ID;
+			if (child.targetLocation === "freedom") {
+				V.freedSlaves.push(cribs[i]);
+			}
+			V.readySlave = cribs.pluck([i], [i]);
+			r += `<<goto "Nursery Retrieval Workaround">>`;
+			return r;
+		}
+
+		if (child.growTime <= 0 || child.actualAge >= V.targetAgeNursery) {
+			r += `<br>`;
+			r += `${He} is ready to leave ${V.nurseryName} and ${child.targetLocation === "slavery" ? `join your ménage` : `become a free citizen`}. `;
+			r += `<<link ${child.targetLocation === "slavery" ? `"Introduce ${him} to life as a slave"` : `"Set ${him} free"`} "Nursery Retrieval Workaround">>`;	// FIXME: figure out why App.UI.passageLink doesn't work here
+			V.readySlave = cribs.pluck([i], [i]);
+			r += `<</link>>`;
+		} else {
+			r += `<br>`;
+			r += `${He} is to continue staying in ${V.nurseryName} for another ${years(weeksLeft)}.
+				${He} is destined for ${child.targetLocation} once ${he} is of age. `;
+		}
+	}
+
+	return r;
+};
+
+/**
+ * Converts the infant object into a new child object
+ * @param {object} child
+ */
+App.Facilities.Nursery.infantToChild = function infantToChild(child) {
+	child.abortionTat = -1,
+		child.accent = 0,
+		child.addict = 0,
+		child.ageImplant = 0,
+		child.arm = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		},
+		child.leg = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		},
+		child.analArea = 0,
+		child.anus = 0,
+		child.anusPiercing = 0,
+		child.anusTat = 0,
+		child.aphrodisiacs = 0,
+		child.areolae = 0,
+		child.areolaePiercing = 0,
+		child.areolaeShape = "circle",
+		child.armAccessory = "none",
+		child.armsTat = 0,
+		child.attrKnown = 0,
+		child.attrXX = 0,
+		child.attrXY = 0,
+		child.backAccessory = "none",
+		child.backTat = 0,
+		child.bald = 0,
+		child.balls = 0,
+		child.behavioralFlaw = "none",
+		child.belly = 0,
+		child.bellyAccessory = "none",
+		child.bellyFluid = 0,
+		child.bellyImplant = -1,
+		child.bellyPreg = 0,
+		child.bellySag = 0,
+		child.bellySagPreg = 0,
+		child.bellyTat = 0,
+		child.bodySwap = 0,
+		child.boobShape = "normal",
+		child.boobs = jsRandom(200, 500),
+		child.boobsImplant = 0,
+		child.boobsImplantType = "none",
+		child.boobsTat = 0,
+		child.brand = {},
+		child.breastMesh = 0,
+		child.breedingMark = 0,
+		child.butt = jsRandom(0, 3),
+		child.buttImplant = 0,
+		child.buttImplantType = "none",
+		child.buttTat = 0,
+		child.buttplug = "none",
+		child.buttplugAttachment = "none",
+		child.canRecruit = 0,
+		child.chastityAnus = 0,
+		child.chastityPenis = 0,
+		child.chastityVagina = 0,
+		child.chem = 0,
+		child.childsFathered = 0,
+		child.childsKnockedUp = 0,
+		child.choosesOwnClothes = 0,
+		child.clit = jsRandom(0, 2),
+		child.clitPiercing = 0,
+		child.clone = 0,
+		child.clothes = "no clothing",
+		child.collar = "none",
+		child.corsetPiercing = 0,
+		child.counter = {
+			PCChildrenFathered: 0,
+			PCKnockedUp: 0,
+			anal: 0,
+			births: 0,
+			birthsTotal: 0,
+			cum: 0,
+			laborCount: 0,
+			mammary: 0,
+			milk: 0,
+			oral: 0,
+			penetrative: 0,
+			pitKills: 0,
+			publicUse: 0,
+			slavesFathered: 0,
+			slavesKnockedUp: 0,
+			vaginal: 0
+		},
+		child.curatives = 0,
+		child.custom = {
+			desc: "",
+			hairVector: "",
+			image: null,
+			label: "",
+			tattoo: "",
+			title: "",
+			titleLisp: ""
+		},
+		child.daughters = 0,
+		child.devotion = 40,	// TODO:
+		child.dick = 0,
+		child.dickAccessory = "none",
+		child.dickPiercing = 0,
+		child.dickTat = 0,
+		child.diet = "healthy",
+		child.dietCum = 0,
+		child.dietMilk = 0,
+		child.drugs = "no drugs",
+		child.earImplant = 0,
+		child.earPiercing = 0,
+		child.earShape = "normal",
+		child.earT = "none",
+		child.earTColor = "hairless",
+		child.earwear = "none",
+		child.electrolarynx = 0,
+		child.energy = 0,
+		child.eyebrowFullness = "natural",
+		child.eyebrowHStyle = "natural",
+		child.eyebrowPiercing = 0,
+		child.eyewear = "none",
+		child.faceImplant = 0,
+		child.fertKnown = 1,
+		child.fertPeak = 0,
+		child.fetishKnown = 0,
+		child.fetishStrength = 0,
+		child.foreskin = 0,
+		child.geneMods = {
+			NCS: 0,
+			rapidCellGrowth: 0
+		},
+		child.geneticQuirks = {
+			albinism: 0,
+			androgyny: 0,
+			dwarfism: 0,
+			fertility: 0,
+			gigantism: 0,
+			gigantomastia: 0,
+			heterochromia: 0,
+			hyperFertility: 0,
+			mGain: 0,
+			mLoss: 0,
+			macromastia: 0,
+			pFace: 0,
+			rearLipedema: 0,
+			superfetation: 0,
+			uFace: 0,
+			wGain: 0,
+			wLoss: 0,
+			wellHung: 0
+		},
+		child.genetics = {},
+		child.hLength = jsRandom(30, 70),
+		child.hStyle = "long",
+		child.haircuts = 0,
+		child.headAccessory = "none",
+		child.health = {};
+	setHealth(child, jsRandom(80, 100), 0, 0, 0, 0);
+	child.hears = 0,
+		child.heels = 0,
+		child.height = jsRandom(85, 105),
+		child.hips = 0,
+		child.hormoneBalance = 0,
+		child.hormones = 0,
+		child.horn = "none",
+		child.hornColor = "none",
+		child.induce = 0,
+		child.induceLactation = 0,
+		child.intelligence = 100,
+		child.intelligenceImplant = 0,
+		child.labia = jsRandom(0, 2),
+		child.labor = 0,
+		child.lactation = 0,
+		child.lactationAdaptation = 0,
+		child.lactationDuration = 0,
+		child.rules = new App.Entity.RuleState(),
+		child.rules.lactation = "none",
+		child.legAccessory = "none",
+		child.legsTat = 0,
+		child.lips = jsRandom(10, 30),
+		child.lipsImplant = 0,
+		child.lipsPiercing = 0,
+		child.lipsTat = 0,
+		child.rules.living = "normal",
+		child.makeup = 0,
+		child.markings = "none",
+		child.minorInjury = 0,
+		child.mpreg = 0,
+		child.muscles = jsRandom(-10, 10),
+		child.nails = 0,
+		child.navelPiercing = 0,
+		child.need = 0,
+		child.nipples = "cute",
+		child.nipplesAccessory = "none",
+		child.nipplesPiercing = 0,
+		child.nosePiercing = 0,
+		child.oldDevotion = 0,	// TODO:
+		child.oldTrust = 0,		// TODO:
+		child.onDiet = 0,
+		child.origRace = child.race,
+		child.eye = new App.Entity.EyeState(),
+		child.eye.origColor = child.eyeColor,
+		child.origHColor = child.hColor,
+		child.origSkin = child.skin,
+		child.ovaries = child.genes === "XX" ? 1 : 0,
+		child.ovaryAge = child.actualAge,
+		/* eslint-disable camelcase */
+		child.override_Arm_H_Color = 0,
+		child.override_Brow_H_Color = 0,
+		child.override_Eye_Color = 0,
+		child.override_H_Color = 0,
+		child.override_Pubic_H_Color = 0,
+		child.override_Race = 0,
+		child.override_Skin = 0,
+		/* eslint-enable camelcase */
+		child.physicalAge = child.actualAge,
+		child.porn = new App.Entity.SlavePornPerformanceState(),
+		child.pregAdaptation = 50,
+		child.pregControl = "none",
+		child.pregData = {
+			drugsEffect: 1,
+			fetusRate: [1, 1, 1, 0.64, 0.6513, 0.6459, 0.644, 0.6393, 0.58, 0.51],
+			fetusSize: [1, 3, 16, 25.6, 51, 60, 67.5, 71.6, 129.5, 130],
+			fetusWeek: [0, 9, 20, 20, 40, 52, 64, 80, 384, 99999],
+			minLiveBirth: 32,
+			normalBirth: 40,
+			normalOvaMax: 1,
+			normalOvaMin: 1,
+			sizeType: 0,
+			type: "human"
+		},
+		child.pregKnown = 0,
+		child.pregSource = 0,
+		child.pregType = 0,
+		child.pregWeek = 0,
+		child.premature = 0,
+		child.prematureBirth = 0,
+		child.prestige = 0,
+		child.prostate = 0,
+		child.pubertyAgeXX = 10,
+		child.pubertyAgeXY = 12,
+		child.pubertyXX = 1,
+		child.pubicHColor = "black",
+		child.pubicHStyle = "bushy",
+		child.readyOva = 0,
+		child.rearAccessory = "none",
+		child.relationship = 0,
+		child.rules.relationship = "restrictive",	// TODO:
+		child.relationshipTarget = 0,
+		child.rules.release = new App.Entity.ReleaseRulesState(),	// TODO:
+		child.rivalry = 0,
+		child.rivalryTarget = 0,
+		child.rudeTitle = 0,
+		child.scars = 0,
+		child.scrotum = 0,
+		child.shoes = "none",
+		child.shoulders = 0,
+		child.shouldersTat = 0,
+		child.sisters = 0,
+		child.skill = {
+			DJ: 0,
+			anal: 0,
+			attendant: 0,
+			bodyguard: 0,
+			combat: 0,
+			entertainer: 0,
+			entertainment: 0,
+			farmer: 0,
+			headGirl: 0,
+			madam: 0,
+			matron: 0,
+			milkmaid: 0,
+			nurse: 0,
+			oral: 0,
+			recruiter: 0,
+			servant: 0,
+			stewardess: 0,
+			teacher: 0,
+			vaginal: 0,
+			wardeness: 0,
+			whore: 0,
+			whoring: 8
+		},
+		child.smells = 0,
+		child.rules.speech = "restrictive",	// TODO:
+		child.stampTat = 0,
+		child.rules.punishment = "situational",	// TODO:
+		child.rules.reward = "situational",	// TODO:
+		child.tail = "none",
+		child.tailColor = "none",
+		child.tailShape = "none",
+		child.tastes = 0,
+		child.teeth = "baby",
+		child.tonguePiercing = 0,
+		child.training = 0,
+		child.trust = 0,	// TODO:
+		child.underArmHStyle = "natural",
+		child.vagina = child.genes === "XX" ? 0 : -1,
+		child.vaginaLube = 0,
+		child.vaginaPiercing = 0,
+		child.vaginaTat = 0,
+		child.vaginalAccessory = "none",
+		child.vaginalAttachment = "none",
+		child.vaginalAttachments = "none",
+		child.vasectomy = 0,
+		child.visualAge = child.actualAge,
+		child.voice = 1,
+		child.voiceImplant = 0,
+		child.waist = 0,
+		child.weeksLeft = 0,
+		child.weight = jsRandom(-10, 10),
+		child.womb = [],
+		child.wombImplant = "none";
+	resetEyeColor(child, "both");
+	generatePronouns(child);
+
+	return child;
+};
+
+/**
+ * Allows the player to name the infant
+ * FIXME: Does not currently work
+ * @param {object} child
+ * @returns {string}
+ */
+App.Facilities.Nursery.nameChild = function nameChild(child) {
+	const
+		PC = V.PC,
+		arcology = V.arcologies[0],
+		girl = child.genes === "XX" ? "girl" : "boy";
+
+	let
+		r = ``,
+		father = 0,
+		mother = 0;
+
+	if (child.father === -1 && child.mother === -1) {
+		father = PC;
+		mother = PC;
+	} else {
+		if (child.father === -1) {
+			father = PC;
+			mother = getSlave(child.mother);
+		} else if (child.mother === -1) {
+			father = getSlave(child.father);
+			mother = PC;
+		} else {
+			father = getSlave(child.father);
+			mother = getSlave(child.mother);
+		}
+	}
+
+	function newChildName(child) {
+		const
+			V = State.variable;
+
+		child.birthName = generateName(child.nationality, child.race, child.genes === "XY");
+
+		if (child.genes === "XY" && !V.allowMaleSlaveNames && isMaleName(child.birthName, child.nationality, child.race)) {
+			child.slaveName = generateName(child.nationality, child.race, false);
+		} else {
+			child.slaveName = child.birthName;
+		}
+	}
+
+	function parentNames(parent, child) {
+		const
+			slaves = V.slaves;
+
+		let
+			currentSlaveNames = slaves.map(s => s.slaveName),
+			continentNationality;
+
+		child.slaveName = generateName(parent.nationality, parent.race, parent.genes === "XY", sn => !currentSlaveNames.includes(sn));
+
+		if (!child.slaveName) {
+			for (let i = 0; i < 10; i++) {
+				continentNationality = hashChoice(V.nationalities);
+				child.slaveName = generateName(continentNationality, child.race, child.genes === "XY", sn => !currentSlaveNames.includes(sn));
+			}
+		}
+		if (!child.slaveName) {
+			child.slaveName = generateName(parent.nationality, parent.race, parent.genes === "XY");
+		}
+	}
+
+	r += `You can name the new child, if you so desire. `;
+
+	r += `<br><<textbox "${child.slaveName}" ${child.slaveName}>>`;
+	r += App.UI.passageLink("Commit name", "Nursery Workaround", `${child.birthName = child.slaveName}, ${App.UI.replace("#naming", `You instruct ${V.assistant.name} to register the new ${girl} as "${child.slaveName}" in the slave registry.`)}`);
+	r += `<br>`;
+	r += App.UI.passageLink(`Have your PA assign ${him} a random name`, "Nursery Workaround", `${App.UI.replace("#naming", `${newChildName(child)}<br>${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.`)}`);
+
+	if (arcology.FSPastoralist !== "unset") {
+		if (child.lactation > 0) {
+			r += `<br>
+			<<link "Have your PA assign ${him} a random cow name">>
+			<<replace "#naming">>`;
+			child.slaveName = setup.cowSlaveNames.random();
+			child.birthName = child.slaveName;
+			r += `${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+			<</link>>`;
+		}
+	}
+	if (arcology.FSChattelReligionist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a random devotional name">>
+			<<replace "#naming">>`;
+		child.slaveName = setup.chattelReligionistSlaveNames.random();
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	}
+	if (arcology.FSRomanRevivalist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a random Roman name">>
+			<<replace "#naming">>`;
+		child.slaveName = setup.romanSlaveNames.random();
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	} else if (arcology.FSAztecRevivalist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a random Aztec name">>
+			<<replace "#naming">>`;
+		child.slaveName = setup.aztecSlaveNames.random();
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	} else if (arcology.FSEgyptianRevivalist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a random ancient Egyptian name">>
+			<<replace "#naming">>`;
+		child.slaveName = setup.ancientEgyptianSlaveNames.random();
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	} else if (arcology.FSEdoRevivalist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a random feudal Japanese name">>
+			<<replace "#naming">>`;
+		child.slaveName = setup.edoSlaveNames.random();
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	}
+	if (arcology.FSDegradationist !== "unset") {
+		r += `<br>
+		<<link "Have your PA assign ${him} a degrading name">>
+			<<replace "#naming">>`;
+		DegradingName(child);
+		child.birthName = child.slaveName;
+		`${V.assistant.name} registers the new ${girl} as "${child.slaveName}" in your registry.
+			<</replace>>
+		<</link>>`;
+	}
+	if (mother !== PC && mother !== 0) {
+		App.Utils.setLocalPronouns(mother, 2);
+		if (jsDef(V.Concubine) && mother.ID === V.Concubine.ID) {
+			r += `<br>
+			<<link "Permit your Concubine to name _his2 daughter">>
+				<<replace "#naming">>`;
+			parentNames(mother, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${mother.slaveName} picks a name ${he2} thinks you might find attractive; from now on ${his2} daughter will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		} else if (mother.relationship === -3 && mother.devotion >= -20) {
+			r += `<br>
+			<<link "Permit your wife to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(mother, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${mother.slaveName} picks a name suitable for your daughter; from now on ${he2} will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		} else if (jsDef(V.Bodyguard) && mother.ID === V.Bodyguard.ID) {
+			r += `<br>
+			<<link "Permit your bodyguard to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(mother, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${mother.slaveName} decides on "${child.slaveName}" for ${his2} daughter. ${He2} hopes you'll find it fitting ${his} station.
+				<</replace>>
+			<</link>>`;
+		} else if (jsDef(V.Headgirl) && mother.ID === V.Headgirl.ID) {
+			r += `<br>
+			<<link "Permit your Head Girl to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(mother, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${mother.slaveName} decides on "${child.slaveName}" for ${his2} daughter, and hopes it will be a name your other slaves will learn to respect.
+				<</replace>>
+			<</link>>`;
+		} else if (mother.devotion > 50 && mother.trust > 50) {
+			r += `<br>
+			<<link "Permit ${his} devoted mother to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(mother, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${mother.slaveName} picks a name ${he2} hopes you'll like; from now on ${his2} daughter will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		}
+	}
+	if (father !== PC && father !== 0 && father !== mother) {
+		App.Utils.setLocalPronouns(father, 2);
+		if (jsDef(V.Concubine) && father.ID === V.Concubine.ID) {
+			r += `<br>
+			<<link "Permit your Concubine to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(father, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${father.slaveName} picks a name ${he2} thinks you might find attractive; from now on ${his2} daughter will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		} else if (father.relationship === -3 && father.devotion >= -20) {
+			r += `<br>
+			<<link "Permit your wife to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(father, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${father.slaveName} picks a name suitable for your daughter; from now on ${he} will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		} else if (jsDef(V.Bodyguard) && father.ID === V.Bodyguard.ID) {
+			r += `<br>
+			<<link "Permit your bodyguard to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(father, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${father.slaveName} decides on "${child.slaveName}" for ${his2} daughter. ${He2} hopes you'll find it fitting ${his} station.
+				<</replace>>
+			<</link>>`;
+		} else if (jsDef(V.Headgirl) && father.ID === V.Headgirl.ID) {
+			r += `<br>
+			<<link "Permit your Head Girl to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(father, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${father.slaveName} decides on "${child.slaveName}" for ${his2} daughter, and hopes it will be a name your other slaves will learn to respect.
+				<</replace>>
+			<</link>>`;
+		} else if (father.devotion > 50 && father.trust > 50) {
+			r += `<br>
+			<<link "Permit ${his} devoted father to name ${his2} daughter">>
+				<<replace "#naming">>`;
+			parentNames(father, child);
+			child.birthName = child.slaveName;
+			`After some careful consideration, ${father.slaveName} picks a name ${he2} hopes you'll like; from now on ${his2} daughter will be known as "${child.slaveName}".
+				<</replace>>
+			<</link>>`;
+		}
+	}
+
+	return r;
+};
+
+/**
+ * Adds an infant to a the cribs
+ * @param {App.Entity.InfantState} child
+ */
+App.Facilities.Nursery.newChild = function newChild(child) {
+	child.ID = generateSlaveID();
+
+	child.actualAge = 0;
+	child.birthWeek = 0;
+
+	if (child.override_Race !== 1) {
+		child.origRace = child.race;
+	}
+
+	if (child.override_H_Color !== 1) {
+		child.hColor = getGeneticHairColor(child);
+	}
+	if (child.override_Arm_H_Color !== 1) {
+		child.underArmHColor = getGeneticHairColor(child);
+	}
+	if (child.override_Pubic_H_Color !== 1) {
+		child.pubicHColor = getGeneticHairColor(child);
+	}
+	if (child.override_Brow_H_Color !== 1) {
+		child.eyebrowHColor = getGeneticHairColor(child);
+	}
+	if (child.override_Skin !== 1) {
+		child.origSkin = getGeneticSkinColor(child);
+	}
+	/* eslint-disable camelcase*/
+	child.override_Race = 0;
+	child.override_H_Color = 0;
+	child.override_Arm_H_Color = 0;
+	child.override_Pubic_H_Color = 0;
+	child.override_Brow_H_Color = 0;
+	child.override_Skin = 0;
+	child.override_Eye_Color = 0;
+	/* eslint-enable */
+
+	child.arm = {
+		left: new App.Entity.LimbState(),
+		right: new App.Entity.LimbState()
+	};
+	child.leg = {
+		left: new App.Entity.LimbState(),
+		right: new App.Entity.LimbState()
+	};
+
+	if (V.surnamesForbidden === 1) {
+		child.childSurname = 0;
+	}
+
+	if (child.clone !== 0) {
+		child.canRecruit = 0;
+	}
+	generatePronouns(child);
+	child.origin = `$He was born and raised in your arcology. `;
+	child.targetLocation = "slavery";
+	child.growTime = V.targetAgeNursery * 52;
+	V.cribs.push(child);
+	V.cribsIndices = App.Facilities.Nursery.cribsToIndices();
+	V.nurseryBabies++;
+};
+
+/**
+ * @param {App.Entity.ChildState[]} [cribs]
+ * @returns {Object.<number, number>}
+ */
+App.Facilities.Nursery.cribsToIndices = function cribsToIndices(cribs = V.cribs) {
+	return cribs.reduce((acc, child, i) => { acc[child.ID] = i; return acc; }, {});
+};
+
+/**
+ * Returns index in the children array for the given ID
+ * @param {number} ID child's ID
+ * @returns {number}
+ */
+App.Facilities.Nursery.childIndexForID = function childIndexForID(id) {
+	return V.cribsIndices[id];
+};
+
+/**
+ * Removes the child using the child's ID
+ * @param {number} index
+ * @returns {Array}
+ */
+App.Facilities.Nursery.removeChild = function removeChild(index) {
+	return V.cribs.deleteAt(index);
+};
+
+/**
+ * Displays a list of slaves with children eligible for the Nursery
+ * FIXME: Does not currently work
+ * @returns {string}
+ */
+App.Facilities.Nursery.nurserySort = function nurserySort() {
+	"use strict";
+	const
+		PC = V.PC,
+		SL = V.slaves.length,
+		arcology = V.arcologies[0];
+
+	let
+		r = ``,
+		eligibility = 0,
+		sortNurseryList = V.sortNurseryList || "Unsorted",
+		childrenReservedNursery = false,	// TODO: rename this to avoid confusion
+		reservedChildrenNursery = FetusGlobalReserveCount("nursery");
+
+	r += `<br><i>Sorting:</i> <b><span id="qlNurserySort">${sortNurseryList}</span>.</b> `;
+	r += `${App.UI.passageLink("Sort by Name", "Nursery", `${sortNurseryList = "Name"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byName()}`)} | `;
+	r += `${App.UI.passageLink("Sort by Reserved Nursery Spots", "Nursery", `${sortNurseryList = "Reserved Nursery Spots"}, ${App.UI.replace(`#qlNurserySort`), sortNurseryList}, ${byReservedSpots()}`)} | `;
+	r += `${App.UI.passageLink("Sort by Pregnancy Week", "Nursery", `${sortNurseryList = "Pregnancy Week"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byPregnancyWeek()}`)} | `;
+	r += `${App.UI.passageLink("Sort by Number of Children", "Nursery", `${sortNurseryList = "Number of Children"}, ${App.UI.replace(`#qlNurserySort`, sortNurseryList)}, ${byPregnancyCount()}`)}`;
+	r += `<br>`;
+
+	r += `<div id="qlNursery">`;
+
+	for (let i = 0; i < SL; i++) {
+		const slave = V.slaves[i];
+
+		App.Utils.setLocalPronouns(slave);
+
+		if (slave.preg > 0 && !slave.broodmother && slave.pregKnown && slave.eggType === "human") {
+			if (slave.assignment !== Job.DAIRY && V.dairyPregSetting <= 0) {
+				const
+					slaveID = "slave-" + slave.ID,
+					WL = slave.womb.length,
+					reservedNursery = WombReserveCount(slave, "nursery"),
+					reservedIncubator = WombReserveCount(slave, "incubator"),
+					pregWeek = slave.pregWeek,
+					slaveName = SlaveFullName(slave);
+
+				r += `<div class="possible" @id="${slaveID}" @data-preg-count="${WL}" @data-reserved-spots="${reservedNursery}" @data-preg-week="${pregWeek}" @data-name="${slaveName}">`;
+
+				r += `${App.UI.passageLink(`${slaveName}`, "Long Slave Description", `${V.activeSlave = slave}, ${V.nextLink = passage()}`)} is ${pregWeek} weeks pregnant with `;
+
+				switch (slave.pregSource) {
+					case 0:
+						r += `someone's${slave.preg <= 5 ? `, though it is too early to tell whose,` : ``}`;
+						break;
+					case -1:
+						r += `your`;
+						break;
+					case -2:
+						r += `a citizen's`;
+						break;
+					case -3:
+						r += `your Master's`;
+						break;
+					case -4:
+						r += `another arcology owner's`;
+						break;
+					case -5:
+						r += `your client's`;
+						break;
+					case -6:
+						r += `the Societal Elite's`;
+						break;
+					case -7:
+						r += `the lab's`;
+						break;
+					case -9:
+						r += `the Futanari Sister's`;
+						break;
+					default:
+						if (slave.preg <= 5) {
+							r += `someone's, though it is too early to tell whose,`;
+						} else {
+							let t = V.slaveIndices[slave.pregSource];
+							if (jsDef(t)) {
+								r += `${V.slaves[t].slaveName}'s`;
+							}
+						}
+						break;
+				}
+				r += ` ${WL > 1 ? `babies` : `baby`}. `;
+
+				if (reservedNursery > 0) {
+					childrenReservedNursery = true;
+					if (WL === 1) {
+						r += `${His} child will be placed in ${V.nurseryName}. `;
+					} else if (reservedNursery < WL) {
+						r += `${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `;
+					} else if (WL === 2) {
+						r += `Both of ${his} children will be placed in ${V.nurseryName}. `;
+					} else {
+						r += `All ${reservedNursery} of ${his} children will be placed in ${V.nurseryName}. `;
+					}
+
+					if ((reservedIncubator + reservedNursery < WL) && (reservedChildrenNursery < V.freeCribs)) {
+						r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+						r += App.UI.passageLink("Keep another child", "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
+						if (reservedNursery > 0) {
+							r += ` | ${App.UI.passageLink("Keep one less child", "Nursery", `${WombCleanGenericReserve(slave, "nursery", 1)}`)}`;
+						}
+						if (reservedNursery > 1) {
+							r += ` | ${App.UI.passageLink(`Keep none of ${his} children`, "Nursery", `${WombCleanGenericReserve(slave, "nursery", 9999)}`)}`;
+						}
+						if (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs) {
+							r += ` | ${App.UI.passageLink(`Keep the rest of ${his} children`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 9999)}`)}`;
+						}
+					} else if (reservedNursery === WL || reservedChildrenNursery === V.freeCribs || reservedIncubator + reservedNursery === WL) {
+						r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+						r += App.UI.passageLink("Keep one less child", "Nursery", `${WombCleanGenericReserve(slave, "nursery", 1)}`);
+						if (reservedNursery > 1) {
+							r += ` | ${App.UI.passageLink(`Keep none of ${his} children`, "Nursery", `${WombCleanGenericReserve(slave, "nursery", 9999)}`)}`;
+						}
+					}
+				} else if (reservedChildrenNursery < V.freeCribs && V.freeCribs > WL) {
+					if (WL - reservedIncubator === 0) {
+						r += `<i>${His} children are already reserved for ${V.incubatorName}</i>`;
+						r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+						r += App.UI.passageLink(`Keep ${his} child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
+					} else {
+						r += `You have ${V.freeCribs === 1 ? `an ` : ``}<span class="lime">available room${V.freeCribs > 1 ? `s` : ``}.</span> `;
+						r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+						r += App.UI.passageLink(`Keep ${WL > 1 ? `a` : `the`} child`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 1)}`);
+						if (WL > 1 && (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs)) {
+							r += ` | ${App.UI.passageLink(`Keep all of ${his} children`, "Nursery", `${WombAddToGenericReserve(slave, "nursery", 9999)}`)}`;
+						}
+					}
+				} else if (reservedChildrenNursery === V.freeCribs) {
+					r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+					r += `You have <span class="red">no room for ${his} offspring.</span> `;
+				}
+
+				eligibility = 1;
+				r += `</div>`;
+			}
+		}
+	}
+
+	r += `</div>`;
+
+	$('div#qlNursery').ready(byPreviousSort);
+
+	if (!eligibility) {
+		r += `<br>`;
+		r += `<i>You have no pregnant slave bearing eligile children</i>`;
+	}
+
+	if (PC.pregKnown && (arcology.FSRestart === "unset" || V.eugenicsFullControl || (PC.pregSource !== -1 && PC.pregSource !== -6))) {
+		const
+			WL = PC.womb.length;
+
+		let
+			reservedIncubator = WombReserveCount(PC, "incubator"),
+			reservedNursery = WombReserveCount(PC, "nursery");
+
+		r += `<br><b><span class="pink">You're pregnant</span></b> and going to have ${WL === 1 ? `a baby. ` : pregNumberName(WL, 1)} `;
+
+		if (reservedNursery > 0) {
+			childrenReservedNursery = 1;
+			if (WL === 1) {
+				r += `Your child will be placed in ${V.nurseryName}.`;
+			} else if (reservedNursery < WL) {
+				r += `${reservedNursery} of your children will be placed in ${V.nurseryName}.`;
+			} else if (WL === 2) {
+				r += `Both of your children will be placed in ${V.nurseryName}.`;
+			} else {
+				r += `All ${reservedNursery} of your children will be placed in ${V.nurseryName}.`;
+			}
+
+			if (reservedNursery < WL && reservedChildrenNursery < V.freeCribs && reservedNursery - reservedIncubator > 0) {
+				r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+				r += App.UI.passageLink("Keep another child", "Nursery", `${reservedNursery += 1}, ${reservedChildrenNursery += 1}`);
+				if (reservedNursery > 0) {
+					r += ` | ${App.UI.passageLink("Keep one less child", "Nursery", `${reservedNursery -= 1}, ${reservedChildrenNursery -= 1}`)}`;
+				}
+
+				if (reservedNursery > 1) {
+					r += ` | ${App.UI.passageLink("Keep none of your children", "Nursery", `${reservedChildrenNursery -= reservedNursery}, ${reservedChildrenNursery = 0}`)}`;
+				}
+
+				if (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs) {
+					r += ` | ${App.UI.passageLink("Keep the rest of your children", "Nursery", `${reservedChildrenNursery += (WL - reservedNursery)}, ${reservedNursery += (WL - reservedNursery)}`)}`;
+				}
+			} else if (reservedNursery === WL || reservedChildrenNursery === V.freeCribs || reservedNursery - reservedIncubator >= 0) {
+				r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+				r += App.UI.passageLink("Keep one less child", "Nursery", `${reservedNursery -= 1}, ${reservedChildrenNursery -= 1}`);
+				if (reservedNursery > 1) {
+					r += App.UI.passageLink("Keep none of your children", "Nursery", `${reservedChildrenNursery -= reservedNursery}, ${reservedNursery = 0}`);
+				}
+			}
+		} else if (reservedChildrenNursery < V.freeCribs) {
+			if (WL - reservedIncubator === 0) {
+				r += `<i>Your child${WL > 1 ? `ren are` : ` is`} already reserved for ${V.incubatorName}</i>`;
+				r += App.UI.passageLink(`Keep your child${WL > 1 ? `ren` : ``} here instead`, "Nursery", `${reservedNursery += WL}, ${reservedIncubator = 0}`);
+			} else {
+				r += `You have ${V.freeCribs === 1 ? `an ` : ``}<span class="lime">available room${V.freeCribs > 1 ? `s` : ``}. `;
+				r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+				r += App.UI.passageLink(`Keep ${WL > 1 ? `a` : `your`} child`, "Nursery", `${reservedNursery += 1}, ${reservedChildrenNursery += 1}`);
+				if (WL > 1 && (reservedChildrenNursery + WL - reservedNursery <= V.freeCribs)) {
+					r += ` | ${App.UI.passageLink("Keep all of your children", "Nursery", `${reservedChildrenNursery += WL}, ${reservedNursery += WL}`)}`;
+				}
+			}
+		} else if (reservedChildrenNursery === V.freeCribs) {
+			r += `<br>&nbsp;&nbsp;&nbsp;&nbsp;`;
+			r += `You have <span class="red">no room for your offspring.</span> `;
+		}
+	}
+
+	if (reservedChildrenNursery || childrenReservedNursery) {
+		r += `<br>`;
+		r += App.UI.passageLink("Clear all reserved children", "Nursery", `${V.slaves.forEach(WombCleanGenericReserve(slave, "nursery", 9999))}, ${WombCleanGenericReserve(PC, "nursery", 9999)}`);
+	}
+
+	function byName() {
+		let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
+		sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-name');
+		$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	}
+
+	function byReservedSpots() {
+		let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
+		sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-reserved-spots');
+		$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	}
+
+	function byPregnancyWeek() {
+		let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
+		sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-preg-week');
+		$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	}
+
+	function byPregnancyCount() {
+		let sortedNurseryPossibles = $('#qlNursery div.possible').detach();
+		sortedNurseryPossibles = sortDomObjects(sortedNurseryPossibles, 'data-preg-count');
+		$(sortedNurseryPossibles).appendTo($('#qlNursery'));
+	}
+
+	function byPreviousSort() {
+		let sort = V.sortNurseryList;
+		if (sort !== 'unsorted') {
+			if (sort === 'Name') {
+				sortNurseryPossiblesByName();
+			} else if (sort === 'Reserved Nursery Spots') {
+				sortNurseryPossiblesByReservedSpots();
+			} else if (sort === 'Pregnancy Week') {
+				sortNurseryPossiblesByPregnancyWeek();
+			} else if (sort === 'Number of Children') {
+				sortNurseryPossiblesByPregnancyCount();
+			}
+		}
+	}
+
+	return r;
+};
-- 
GitLab