diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js
index 908e3ccaac6729a1efdfe770f48065d8c4710558..8681ba47b06a9d11037626e6e3b210cab798b90c 100644
--- a/src/002-config/fc-version.js
+++ b/src/002-config/fc-version.js
@@ -1,7 +1,7 @@
 App.Version = {
 	base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed.
-	pmod: "3.0.0",
-	release: 1056,
+	pmod: "3.1.0",
+	release: 1057,
 };
 
 /* Use release as save version */
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 23543775e38054dbf290692486686ddaab716ce8..69d0deda1847ef4af15c90cf86d920ee650f9d3f 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -197,9 +197,6 @@ You should have received a copy of the GNU General Public License along with thi
 		<<set $slaves[_i].lastWeeksRepIncome = 0>>
 	<</for>>
 	<<set $slavesOriginal = []>> /* not used by pregmod */
-	<<if ndef $PC.markings>>
-		<<set $PC.markings = "none">>
-	<</if>>
 <<else>>
 	<<set $slaves = []>>
 	<<set $slavesOriginal = []>> /* not used by pregmod */
@@ -220,7 +217,7 @@ You should have received a copy of the GNU General Public License along with thi
 
 <<if $saveImported == 0>> /* new game (not NG+) */
 
-	<<initPC>>
+	<<set $PC = basePlayer()>>
 	<<set $freshPC = 0>>
 	<<set $cheater = 0>>
 	<<setupLastWeeksCash>>
@@ -397,7 +394,7 @@ You should have received a copy of the GNU General Public License along with thi
 		<<set _cash = Math.clamp(1000*Math.trunc(_cash/100000), 5000, 1000000)>>
 		<<run cashX((_cash-$cash), "personalBusiness")>> /*"-cash" to clean out the current value of cash and then completely replace it with the new value for NG+ start. */
 		<<if $retainCareer == 0>>
-			<<set $PC.career = "arcology owner", $PC.trading = 100, $PC.warfare = 100, $PC.hacking = 100, $PC.slaving = 100, $PC.engineering = 100, $PC.medicine = 100>>
+			<<set $PC.career = "arcology owner", $PC.skill.trading = 100, $PC.skill.warfare = 100, $PC.skill.hacking = 100, $PC.skill.slaving = 100, $PC.skill.engineering = 100, $PC.skill.medicine = 100>>
 		<</if>>
 		<<if $PC.mother > 0>>
 			<<set $PC.mother += _NGPOffset>>
@@ -422,7 +419,7 @@ You should have received a copy of the GNU General Public License along with thi
 			<</for>>
 		<</if>>
 	<<else>>
-		<<initPC>>
+		<<set $PC = basePlayer()>>
 		<<set $cheater = 0>>
 		<<set $cash = 0>>
 		<<run cashX(10000, "personalBusiness")>>
@@ -1492,10 +1489,6 @@ You should have received a copy of the GNU General Public License along with thi
 <<set $UterineRestraintMesh = 0>>
 <<set $PGHack = 0>>
 
-<<if ndef $PC.hacking>>
-	<<set $PC.hacking = 0>>
-<</if>>
-
 <<set $diversePronouns = 0>>
 
 /* Security Expansion */
diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1fe4a41abd4cf6d8dd65d2c81664460a258d3f6
--- /dev/null
+++ b/src/player/js/PlayerState.js
@@ -0,0 +1,1979 @@
+/**
+ * Encapsulates the full description of a player state. Serializable by the SugarCube state
+ * management.
+ */
+
+/**
+ * Encapsulates your skills. Used inside of the
+ * App.Entity.PlayerState class.
+ * @ref App.Entity.PlayerState
+ */
+App.Entity.PlayerSkillsState = class {
+	constructor() { //migrate
+		/** exclusive variables */
+		/** Your skill in trading. */
+		this.trading = 0;
+		/** Your skill in warfare. */
+		this.warfare = 0;
+		/** Your skill in slaving. */
+		this.slaving = 0;
+		/** Your skill in engineering. */
+		this.engineering = 0;
+		/** Your skill in medicine. */
+		this.medicine = 0;
+		/** Your skill in hacking. */
+		this.hacking = 0;
+		/** Your skill in taking huge loads. */
+		this.cumTap = 0;
+	}
+};
+
+App.Entity.PlayerActionsCountersState = class {
+	constructor() { //migrate
+		/** exclusive variables */
+		/** how many children you've carried for the SE */
+		this.birthElite = 0;
+		/** how many children you've carried for your former master (servant start only) */
+		this.birthMaster = 0;
+		/** how many slave babies you've had */
+		this.birthDegenerate = 0;
+		/** how many whoring babies you've had */
+		this.birthClient = 0;
+		/** untracked births */
+		this.birthArcOwner = 0;
+		/** how many children you've had by sex with citizens (not whoring) */
+		this.birthCitizen = 0;
+		/** how many times you've giving birth to your own selfcest babies */
+		this.birthFutaSis = 0;
+		/** how many units of your cum are stored away for artificially inseminating slaves */
+		this.birthSelf = 0;
+		/** how many designer babies you've produced */
+		this.birthLab = 0;
+		/** how many children you've had with the Sisters */
+		this.birthOther = 0;
+		/** how many children you've carried for other arc owners */
+		this.storedCum = 0;
+		/** shared variables */
+		/** amount of milk given */
+		this.milk = 0;
+		/** amount of cum given */
+		this.cum = 0;
+		/** number of births as your slave */
+		this.birthsTotal = 0;
+		this.laborCount = 0;
+		/** How many slaves you have sired. */
+		this.slavesFathered = 0;
+		/** How many slaves you have knocked up. */
+		this.slavesKnockedUp = 0;
+	}
+};
+
+/**
+ * Encapsulates various custom properties, set by users
+ */
+App.Entity.PlayerCustomAddonsState = class PlayerCustomAddonsState {
+	constructor() {
+		/** adds a custom tattoo */
+		this.tattoo = "";
+	}
+};
+
+/**
+ * To ensure that all new eyes contain expected attributes
+ */
+App.Entity.PlayerEyeState = class PlayerEyeState {
+	constructor() {
+		this.left = new App.Entity.PlayerIndividualEyeState();
+		this.right = new App.Entity.PlayerIndividualEyeState();
+		/**
+		 * original eye color
+		 */
+		this.origColor = "blue";
+	}
+};
+
+App.Entity.PlayerIndividualEyeState = class PlayerIndividualEyeState {
+	constructor() {
+		/**
+		 * type of eye
+		 * * 1: normal
+		 * * 2: glass
+		 * * 3: cybernetic
+		 */
+		this.type = 1;
+		/**
+		 * vision of eye
+		 * * 1: normal
+		 * * 2: impaired
+		 * * 3: blind
+		 */
+		this.vision = 2;
+		/**
+		 * current eye color
+		 */
+		this.iris = "blue";
+		/**
+		 * pupil shape
+		 */
+		this.pupil = "circular";
+		/**
+		 * sclera color
+		 */
+		this.sclera = "white";
+	}
+};
+
+App.Entity.PlayerRelationshipsState = class PlayerRelationshipsState {
+	// in the future this will be used to determine who will be used to sate player lust
+	constructor() { //migrate
+		/** player's wives */
+		this.marriage = [];
+		/** player's lovers */
+		this.lovers = [];
+		/** player's friends with benefits */
+		this.FWBs = [];
+		/** player's best friends */
+		this.BFFs = [];
+		/** player's friends */
+		this.friends = [];
+		/** slaves player likes */
+		this.likes = [];
+		/** slaves player dislikes */
+		this.dislikes = [];
+		/** slaves player hates */
+		this.hates = [];
+		/** slaves player slaves */
+		this.loathes = [];
+		/**
+		 *  player's emotional obsession
+		 * * -2: emotionally bound to you
+		 * * -1: emotional slut
+		 * * 0: none
+		 * * (ID): target of obsession
+		 */
+		this.obsession = 0;
+	}
+};
+
+
+App.Entity.PlayerPornPerformanceState = class {
+	constructor() {
+		/** what porn you are known for */
+		this.fameType = "none";
+		/** what aspect of you is being focused on for porn */
+		this.focus = "none";
+		this.fame = {
+			/** generic porn fame */
+			general: 0,
+			/** Fuckdoll porn fame */
+			fuckdoll: 0,
+			/** rape porn fame */
+			rape: 0,
+			/** preggo porn fame */
+			preggo: 0,
+			/** BBW porn fame */
+			BBW: 0,
+			/** weight gain porn fame */
+			gainer: 0,
+			/** well hung porn fame */
+			stud: 0,
+			/** underage porn fame */
+			loli: 0,
+			/** gagfuck queen porn fame */
+			deepThroat: 0,
+			/** strugglefuck queen porn fame */
+			struggleFuck: 0,
+			/** painal queen porn fame */
+			painal: 0,
+			/** tease porn fame */
+			tease: 0,
+			/** romantic porn fame */
+			romantic: 0,
+			/** pervert porn fame */
+			pervert: 0,
+			/** caring porn fame */
+			caring: 0,
+			/** unflinching porn fame */
+			unflinching: 0,
+			/** size queen porn fame */
+			sizeQueen: 0,
+			/** neglectful porn fame */
+			neglectful: 0,
+			/** cum addict porn fame */
+			cumAddict: 0,
+			/** anal addict porn fame */
+			analAddict: 0,
+			/** attention whore porn fame */
+			attentionWhore: 0,
+			/** breast growth porn fame */
+			breastGrowth: 0,
+			/** abusive porn fame */
+			abusive: 0,
+			/** malicious porn fame */
+			malicious: 0,
+			/** self hating porn fame */
+			selfHating: 0,
+			/** breeder porn fame */
+			breeder: 0,
+			/** submissive porn fame */
+			sub: 0,
+			/** cumslut porn fame */
+			cumSlut: 0,
+			/** buttslut porn fame */
+			anal: 0,
+			/** humiliation porn fame */
+			humiliation: 0,
+			/** boob porn fame */
+			boobs: 0,
+			/** dom porn fame */
+			dom: 0,
+			/** sadist porn fame */
+			sadist: 0,
+			/** masochist porn fame */
+			masochist: 0,
+			/** pregnancy porn fame*/
+			pregnancy: 0
+		};
+	}
+};
+
+App.Entity.PlayerState = class PlayerState {
+	constructor() {
+		/** Player's current name */
+		this.slaveName = "Anonymous"; //migrate
+		/** Player's current surname
+		 * @type {string|number} */
+		this.slaveSurname = 0; //migrate
+		/** Player's original name */
+		this.birthName = "Anonymous"; //migrate
+		/** Player's original surname
+		 * @type {string|number} */
+		this.birthSurname = 0; //migrate
+		/** Player sex ("XX", "XY") */
+		this.genes = "XY";
+		// exclusive major player variables here
+		/** your title's gender
+		 *
+		 * 0: female; 1: male */
+		this.title = 1;
+		/**
+		 * How strong/are there rumors about you doing unsavory things with your slaves
+		 * * 0 - 10: occasional whispers
+		 * * 11	- 25: minor rumors
+		 * * 26	- 50: rumors
+		 * * 51	- 75: bad rumors
+		 * * 70	- 100: severe rumors
+		 * * 101+: life ruining rumors
+		 */
+		this.degeneracy = 0;
+		/** your favorite refreshment
+		 * @type {string} */
+		this.refreshment = "cigar";
+		/**
+		 * * The method of consumption of .refreshment
+		 * * 0: smoked
+		 * * 1: drank
+		 * * 2: eaten
+		 * * 3: snorted
+		 * * 4: injected
+		 * * 5: popped
+		 * * 6: orally dissolved
+		 */
+		this.refreshmentType = 0;
+		/** @type {number} */
+		this.pronoun = App.Data.Pronouns.Kind.male;
+		/**
+		 * * career prior to becoming owner
+		 * * "wealth"
+		 * * "capitalist"
+		 * * "mercenary"
+		 * * "slaver"
+		 * * "engineer"
+		 * * "medicine"
+		 * * "celebrity"
+		 * * "escort"
+		 * * "servant"
+		 * * "gang"
+		 * * "BlackHat"
+		 * * "arcology owner"
+		 */
+		this.career = "capitalist";
+		/**
+		 * * how player became owner
+		 * * "wealth"
+		 * * "diligence"
+		 * * "force"
+		 * * "social engineering"
+		 * * "luck"
+		 */
+		this.rumor = "wealth";
+		/** Player's ID */
+		this.ID = -1;
+		/** your ability to function normally in day to day affairs
+		 *
+		 * 0: normal, 1: hindered, 2: unable */
+		this.physicalImpairment = 0;
+		/** Player's prestige */
+		this.prestige = 0;
+		/** reason for prestige
+		 * @type {string|number} */
+		this.prestigeDesc = 0;
+		this.relationships = new App.Entity.PlayerRelationshipsState();
+		this.father = 0;
+		this.mother = 0;
+		this.daughters = 0;
+		this.sisters = 0;
+		/** week you was born (int between 0-51) */
+		this.birthWeek = jsRandom(0, 51);
+		/** How old you really are. */
+		this.actualAge = 35;
+		/** How old your body looks. */
+		this.visualAge = 35;
+		/** How old your body is. */
+		this.physicalAge = 35;
+		/** How old your ovaries are. (used to trick menopause) */
+		this.ovaryAge = 35;
+		/** has had facial surgery to reduce age. 0: no, 1: yes */
+		this.ageImplant = 0;
+		/**
+		 * your 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
+		 */
+		this.health = 100;
+		/**
+		 * you have a minor injury ("black eye", "bruise", "split lip")
+		 * @type {number | string}
+		 */
+		this.minorInjury = 0;
+		/**
+		 * you have a major injury (will replace the injured PC global)
+		 * @type {number | string}
+		 */
+		this.majorInjury = 0;
+		/**
+		 * you have a life-changing injury/malaise
+		 * @type {number | string}
+		 */
+		this.criticalDamage = 0;
+		/**
+		 * your 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;
+		/**
+		 * your musculature
+		 * * 96+ : extremely muscular
+		 * * 31 - 95: muscular
+		 * * 6 - 30: toned
+		 * * -5 - 5: none
+		 * * -30 - -6: weak
+		 * * -95 - -31: very weak
+		 * * -96- : frail
+		 */
+		this.muscles = 30; //migrate
+		/**
+		 * your height in cm
+		 * * < 150: petite
+		 * * 150 - 159: short
+		 * * 160 - 169: average
+		 * * 170 - 185: tall
+		 * * 186+ : very tall
+		 */
+		this.height = 185;
+		/** you have height implant
+		 * -1: -10 cm, 0: none, 1: +10 cm */
+		this.heightImplant = 0;
+		/** your nationality */
+		this.nationality = "Stateless";
+		/** your race */
+		this.race = "white";
+		/** your original race */
+		this.origRace = "white";
+		/**
+		 * your markings
+		 * * "beauty mark"
+		 * * "birthmark"
+		 * * "freckles"
+		 * * "heavily freckled"
+		 */
+		this.markings = "none";
+		/** "none", "glasses", "corrective glasses", "corrective contacts" */
+		this.eyewear = "none";
+		/**
+		 * your eyes
+		 */
+		this.eye = new App.Entity.PlayerEyeState(); //migrate
+		/** your 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 your outer ears
+		 * "none", "damaged", "normal", "pointy", "elven", "ushi" */
+		this.earShape = "normal";
+		/** type of kemonomimi ears if any
+		 * "neko", "inu", "kit", "tanuki" */
+		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";
+		/**
+		 * Do you have a tail interface installed
+		 * * 0: no
+		 * * 1: yes
+		 */
+		this.PTail = 0;
+		/** the current shape of your modular tail
+		 * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi" */
+		this.tailShape = "none";
+		/** tail color */
+		this.tailColor = "none";
+		/** yout original hair color, defaults to your initial hair color. */
+		this.origHColor = "blonde";
+		/** hair color */
+		this.hColor = "blonde";
+		/** pubic hair color */
+		this.pubicHColor = "blonde";
+		/** armpit hair style */
+		this.underArmHColor = "blonde";
+		/**  eyebrowHColor*/
+		this.eyebrowHColor = "blonde";
+		/** your 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 = 2; //migrate
+		/**
+		 * eyebrow thickness
+		 * * "pencil-thin"
+		 * * "thin"
+		 * * "threaded"
+		 * * "natural"
+		 * * "tapered"
+		 * * "thick"
+		 * * "bushy"
+		 */
+		this.eyebrowFullness = "natural";
+		/** hair style */
+		this.hStyle = "neat";
+		/** pubic hair style */
+		this.pubicHStyle = "hairless";
+		/** armpit hair style */
+		this.underArmHStyle = "hairless";
+		/** 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; //migrate
+		/** series of rings up the back that can be tied together. 0: no, 1: yes */
+		this.corsetPiercing = 0;
+		/**
+		 * What level of prosthetic interface you have installed
+		 * * 0: no interface
+		 * * 1: basic interface
+		 * * 2: advanced interface
+		 */
+		this.PLimb = 0;
+		/**
+		 * your legs
+		 */
+		this.leg = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		};
+		/**
+		 * your arms
+		 */
+		this.arm = {
+			left: new App.Entity.LimbState(),
+			right: new App.Entity.LimbState()
+		};
+		/** are your heels clipped
+		 *
+		 * 0: no, 1: yes */
+		this.heels = 0;
+		/** your voice
+		 *
+		 * 0: mute, 1: deep, 2: feminine, 3: high, girly */
+		this.voice = 1; //migrate
+		/** has voice implant
+		 *
+		 * 0: no; 1: yes, high; -1: yes, low */
+		this.voiceImplant = 0;
+		/** have cybernetic voicebox
+		 *
+		 * 0: no; 1: yes */
+		this.electrolarynx = 0;
+		/**
+		 * your 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; //migrate
+		/**
+		 * have shoulder implant
+		 *
+		 * * -1: shoulders -1
+		 * * 0: none
+		 * * 1: shoulders +1
+		 */
+		this.shouldersImplant = 0;
+		/**
+		 *  your 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 UPDATE!
+		 * * 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; //migrate
+		/** breast engorgement from unmilked tits */
+		this.boobsMilk = 0;
+		/**
+		 *  your 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; //migrate
+		/** Implants type. 0: normal/none; 1: string */
+		this.boobsImplantType = 0;
+		/**
+		 * breast shape
+		 * * "normal"
+		 * * "perky"
+		 * * "saggy"
+		 * * "torpedo-shaped"
+		 * * "downward-facing"
+		 * * "wide-set"
+		 */
+		this.boobShape = "perky";
+		/**
+		 * 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, are on your 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;
+		/** your 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;
+		/** your 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; //migrate
+		/** you have 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; //migrate
+		/**
+		 * 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; //migrate
+		/** butt implant type
+		 *
+		 * 0: normal/none; 1: string */
+		this.buttImplantType = 0;
+		/**
+		 * 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 = 100;
+		/**
+		 * 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; //migrate
+		/**
+		 * 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";
+		/**
+		 * have 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 = -1; //migrate
+		/** have has your vagina improved
+		 *
+		 * 0: no; 1: yes; */
+		this.newVag = 0;
+		/** exclusive variable
+		 * how wet you are
+		 *
+		 * 0: dry; 1: wet; 2: soaking wet */
+		this.vaginaLube = 0; //migrate
+		/** have 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 = 0;
+		/**
+		 * accepts ID See Pregnancy Control section for more.
+		 *
+		 * Who sired your 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.readyOva = 0;
+		/** exclusive variable
+		 * (uncommon in events)($PC.preg >= 28)
+		 * how you act when heavily pregnant
+		 * * 0 - no change
+		 * * 1 - submissive and motherly
+		 * * 2 - aggressive and dominant
+		 */
+		this.pregMood = 0;
+		/**
+		 * How adapted you are to being pregnant (allows for larger, safer pregnancies)
+		 */
+		this.pregAdaptation = 50; //migrate
+		/**
+		 * 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;
+		/**
+		 * are you 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"
+		 * * "a support band"
+		 */
+		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;
+		/** 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 = 4; //migrate
+		/** 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 = 1; //migrate
+		/**
+		 * 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 = 4; //migrate
+		/** Exclusive variable
+		 * ball size booster
+		 * * 0: none
+		 */
+		this.ballsImplant = 0; //migrate
+		/**
+		 * scrotum size
+		 *
+		 * function relative to .ballSize
+		 *
+		 * *If .balls > 0 and .scrotum === 0, balls are internal*
+		 */
+		this.scrotum = 4; //migrate
+		/** has ovaries
+		 *
+		 * 0: no; 1: yes */
+		this.ovaries = 0; //migrate
+		/** 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;
+		/**
+		 * * "healthy"
+		 * * "restricted"
+		 * * "muscle building"
+		 * * "fattening"
+		 * * "slimming"
+		 * * "XX"
+		 * * "XY"
+		 * * "XXY"
+		 * * "cum production"
+		 * * "cleansing"
+		 * * "fertility"
+		 */
+		this.diet = "healthy";
+		/**
+		 * * -2: heavy male hormones
+		 * * -1: male hormones
+		 * * 0: none
+		 * * 1: female hormones
+		 * * 2: heavy female hormones
+		 */
+		this.hormones = 0;
+		/** compatibility */
+		this.drugs = "no drugs";
+		/** 0: none; 1: preventatives; 2: curatives */
+		this.curatives = 0;
+		/** if greater than 10 triggers side effects from drug use. */
+		this.chem = 0;
+		/** 0: none; 1: standard; 2: powerful */
+		this.aphrodisiacs = 0;
+		/**
+		 * how addict to aphrodisiacs slave is
+		 * * 0: not
+		 * * 1-2: new addict
+		 * * 3-9: confirmed addict
+		 * * 10+: dependent
+		 */
+		this.addict = 0;
+		/**
+		 * may accept strings, use at own risk
+		 *
+		 * * "a nice maid outfit"
+		 * * "a slutty outfit"
+		 * * "nice business attire"
+		 * * "no clothing"
+		 */
+		this.clothes = "nice business attire"; //migrate
+		/**
+		 * may accept strings, use at own risk
+		 * * "none"
+		 */
+		this.collar = "none";
+		/**
+		 * may accept strings, use at own risk
+		 * * "none"
+		 * * "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";
+		/**
+		 * Do you have an attachment on your buttplug
+		 *
+		 *  may accept strings, use at own risk
+		 * * "none"
+		 * * "tail"
+		 * * "fox tail"
+		 * * "cat tail"
+		 * * "cow tail"
+		 */
+		this.buttplugAttachment = "none";
+		/**
+		 * your 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 = 100;
+		/**
+		 * Degree of your education
+		 * * -15+: miseducated (you appear to be dumber than you really are)
+		 * * 0: uneducated
+		 * * 1+: partial education (not really used)
+		 * * 15+: educated
+		 * * 30: well educated
+		 */
+		this.intelligenceImplant = 30; //migrate
+		/**
+		 * how much fucking you can do in a week
+		 */
+		this.sexualEnergy = 4; //migrate this into the following two variables somehow
+		/**
+		 * 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 = 80;
+		/**
+		 * how badly you need sex. Will be how much sex you can have a week
+		 *
+		 *  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, you will be omnisexual*
+		 *
+		 * *if energy > 95 and either attrXX or attrXY > 95, you will be nymphomaniac*
+		 */
+		this.attrXX = 100;
+		/**
+		 * 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, you will be omnisexual*
+		 *
+		 * *if energy > 95 and either attrXX or attrXY > 95, you will be nymphomaniac*
+		 */
+		this.attrXY = 100;
+		/**
+		 * * "none"
+		 * * "mindbroken"
+		 * * "submissive"
+		 * * "cumslut"
+		 * * "humiliation"
+		 * * "buttslut"
+		 * * "boobs"
+		 * * "sadist"
+		 * * "masochist"
+		 * * "dom"
+		 * * "pregnancy"
+		 */
+		this.fetish = "none";
+		/** how strong your fetish is (10-100)
+		 *
+		 * 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */
+		this.fetishStrength = 70;
+		/**
+		 * * "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 amplified, passively lose muscle unless building */
+			mGain: 0,
+			/** constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */
+			mLoss: 0,
+			/** slave can only ever birth girls */
+			girlsOnly: 0
+		};
+		/** Counts various thing you have done in */
+		this.counter = new App.Entity.PlayerActionsCountersState();
+		/** Values provided by players */
+		this.custom = new App.Entity.PlayerCustomAddonsState();
+		/**
+		 * You have a tattoo that is only recognizable when you have a big belly.
+		 * * "a heart"
+		 * * "a star"
+		 * * "a butterfly"
+		 * @type {string|number} */
+		this.bellyTat = 0;
+		/**
+		 * You have a series of tattoos to denote how many abortions you've had.
+		 * * -1: no tattoo
+		 * *  0: assigned to have tattoo, may not have one yet
+		 * * 1+: number of abortion tattoos she has
+		 */
+		this.abortionTat = -1;
+		/**
+		 * You have a series of tattoos to denote how many times you've 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;
+		/** You will give birth this week.
+		 *
+		 * 1: true; 0: false */
+		this.induce = 0;
+		/** You have an anal womb and can get pregnant.
+		 *
+		 * 1: true; 0: false */
+		this.mpreg = 0;
+		/** How much fluid is distending your middle.
+		 *
+		 * 1: 2L; 2: 4L; 3: 8L */
+		this.inflation = 0;
+		/**
+		 * What kind of fluid is in you.
+		 * * "none"
+		 * * "water"
+		 * * "cum"
+		 * * "milk"
+		 * * "food"
+		 * * "aphrodisiac"
+		 * * "curative"
+		 * * "tightener"
+		 * * "urine"
+		 */
+		this.inflationType = "none";
+		/**
+		 * How you are being filled.
+		 * * 0: not
+		 * * 1: oral
+		 * * 2: anal
+		 * * 3: orally by another slave
+		 */
+		this.inflationMethod = 0;
+		/** If inflationMethod === 3, ID of the slave filling you with milk. */
+		this.milkSource = 0;
+		/** If inflationMethod 3, ID of the slave filling you with cum. */
+		this.cumSource = 0;
+		/** Your internals have ruptured. Used with poor health and overinflation.
+		 *
+		 * 1: true; 0: false */
+		this.burst = 0;
+		/** Do you know you are pregnant.
+		 *
+		 * 0: no; 1: yes */
+		this.pregKnown = 0;
+		/** How long you have been pregnant
+		 *
+		 * used in place of .preg when pregnancy speed up and slow down are used
+		 *
+		 * if negative, designates postpartum. */
+		this.pregWeek = 0;
+		/**
+		 * how big your 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 your 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 your 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;
+		/**
+		 * Do you 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 your belly is after being distended for too long.
+		 *
+		 * 1+ changes belly description */
+		this.bellySag = 0;
+		/** How saggy your belly is from being too pregnant.
+		 *
+		 * 1+ changes belly description and overrides/coincides with bellySag */
+		this.bellySagPreg = 0;
+		/**
+		 * Has the your 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;
+		/** Do you 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;
+		/** Have you gone through female puberty.
+		 *
+		 * 0: no; 1: yes */
+		this.pubertyXX = 1;
+		/** Target .physicalAge for male puberty to occur. */
+		this.pubertyAgeXY = 13;
+		/** Have you slave gone through male puberty.
+		 *
+		 * 0: no; 1: yes */
+		this.pubertyXY = 1;
+		/**
+		 * scar
+		 * Sub-object:
+		 * the body part in question, such as back or left hand
+		 * the key of that part is the type of scar they can have and the value is how serious it is, from 0 up
+		 * @type {Object.Object} */
+		this.scar = {};
+		/**
+		 * In a eugenics society, you are a designated breeder.
+		 *
+		 * 1: yes; 0: no */
+		this.breedingMark = 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";
+		/**  */
+		this.ageAdjust = 0;
+		/** You are bald
+		 *
+		 * 0: no; 1: yes */
+		this.bald = 0;
+		/** You are in your 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;
+		/**
+		 * Slave'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;
+		/** Do you have the breast shape maintaining mesh implant.
+		 *
+		 * 0: no; 1: yes */
+		this.breastMesh = 0;
+		/** Used to denote you are giving birth prematurely.
+		 *
+		 * 0: no; 1: yes */
+		this.prematureBirth = 0;
+		/** Were you born prematurely?
+		 *
+		 * 0: no; 1: yes */
+		this.premature = 0;
+		/** Have you had had a vasectomy?
+		 *
+		 * 0: no; 1: yes */
+		this.vasectomy = 0;
+		/** Your skills */
+		this.skill = new App.Entity.PlayerSkillsState();
+		/** 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 = {
+			/** Do you have induced NCS?
+			 *
+			 * 0: no; 1: yes */
+			NCS: 0,
+			/** Have you undergone the elasticity (plasticity) treatment?
+			 *
+			 * 0: no; 1: yes */
+			rapidCellGrowth: 0
+		};
+		/** erratic weight gain
+		 *
+		 * 0: stable; 1: gaining; -1: losing */
+		this.weightDirection = 0;
+		// exclusive minor player variables (probably) here
+		/** Number of your children reserved for the incubator
+		 * int */
+		this.reservedChildren = 0;
+		/** Number of your children reserved for the nursery
+		 * int */
+		this.reservedChildrenNursery = 0;
+		/** are you on fertility supplements
+		 *
+		 * 0: no; 1: yes */
+		this.fertDrugs = 0;
+		/** have you been drugged with fertility drugs
+		 *
+		 * 0: no; 1+: how many weeks they will remain in your system */
+		this.forcedFertDrugs = 0;
+		/** Are you taking pills to fuck more slaves each week?
+		 *
+		 * 0: no; 1: yes */
+		this.staminaPills = 0;
+	}
+
+	/** Creates an object suitable for setting nested attributes as it would be a SlaveState
+	 * @returns {object} Object containing all the attributes
+	 * that are complex objects in the SlaveState class
+	 */
+	static makeSkeleton() {
+		return {
+			arm: {left: {}, right: {}},
+			leg: {left: {}, right: {}},
+			eye: {left: {}, right: {}},
+			readyProsthetics: [], // yes, not an object, but needed for hero slaves
+			counter: {},
+			brand: {},
+			scar: {},
+			skill: {},
+			custom: {},
+		};
+	}
+};
+
+/**
+ * @callback playerOperation
+ * @param {App.Entity.PlayerState} s
+ * @returns {void}
+ */
+
+/**
+ * @callback slaveTestCallback
+ * @param {App.Entity.PlayerState} PC
+ * @returns {boolean}
+ */
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index a0dc8d3c482476e2e434f451e4d186d3c27b0899..3fb26a9fd6e014ab93044c895c1012b4270b31f3 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -1,12 +1,5 @@
 :: pregmod widgets [nobr widget]
 
-<<widget "initPC">>
-	<<set $PC = {name: "Anonymous", surname: 0, title: 1, ID: -1, genes: "XY", pronoun: "he", possessive: "him", object: "his", dick: 1, vagina: 0, preg: 0, pregType: 0, pregWeek: 0, pregKnown: 0, fertKnown: 0, fertPeak: 0, belly: 0, bellyPreg: 0, mpreg: 0, pregSource: 0, pregMood: 0, labor: 0, births: 0, boobsBonus: 0, degeneracy: 0, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, lactation: 0, lactationDuration: 0, career: "capitalist", rumor: "wealth", birthWeek: random(0,51), age: 2, sexualEnergy: 4, refreshment: "cigar", refreshmentType: 0, trading: 0, warfare: 0, slaving: 0, engineering: 0, medicine: 0, hacking: 0, cumTap: 0, race: "white", origRace: "white", skin: "light", origSkin: "light", markings: "none", eyeColor: "blue", origEye: "blue", pupil: "circular", sclerae: "white", hColor: "blonde", origHColor: "blonde", nationality: "Stateless", father: 0, mother: 0, sisters: 0, daughters: 0, birthElite: 0, birthMaster: 0, birthDegenerate: 0, birthClient: 0, birthOther: 0, birthArcOwner: 0, birthCitizen: 0, birthSelf: 0, birthLab: 0, birthFutaSis: 0, slavesFathered: 0, slavesKnockedUp: 0, intelligence: 100, face: 100, faceShape: "normal", actualAge: 35, physicalAge: 35, visualAge: 35, boobsImplant: 0, butt: 0, buttImplant: 0, balls: 0, ballsImplant: 0, ageImplant: 0, newVag: 0, reservedChildren: 0, reservedChildrenNursery: 0, fertDrugs: 0, forcedFertDrugs: 0, staminaPills: 0, ovaryAge: 35, eggType: "human", ballType: "human", storedCum: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", fetish: "none", pubicHStyle: "hairless", underArmHStyle: "hairless", geneticQuirks: {macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, heterochromia: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, mGain: 0, mLoss: 0, androgyny: 0, girlsOnly: 0}}>>
-
-	<<set WombInit($PC)>>
-
-<</widget>>
-
 <<widget "PMODinit">>
 
 <<set $args[0].geneticQuirks = Object.assign({macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, heterochromia: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, mGain: 0, mLoss: 0, androgyny: 0, girlsOnly: 0}, $args[0].geneticQuirks)>>
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 02dd56c109cba55faca48b8fea57ed16c710897a..9ae2db9a848d33b290ba24c0b887bdf4654b5a0e 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -536,7 +536,8 @@
 			<<set $PC.genes = "XX">>
 		<</if>>
 	<</if>>
-<<elseif $releaseID == 1057>> /* player object converter */
+
+	/* player object converter */
 	<<set _newPC = basePlayer()>>
 	<<set _newPC.slaveName = $PC.name>>
 	<<set _newPC.slaveSurname = $PC.surname>>
@@ -694,19 +695,32 @@
 	<<set _newPC.reservedChildren = $PC.reservedChildren>>
 	<<set _newPC.reservedChildrenNursery = $PC.reservedChildrenNursery>>
 	<<set _newPC.geneticQuirks = clone($PC.geneticQuirks)>>
-	/*muscles*/
-	/*eyes*/
-	/*hLength*/
-	/*waist*/
-	/*voice*/
-	/*shoulders*/
-	/*hips*/
-	/*lips*/
-	/*anus*/
-	/*clothes*/
-	/*education*/
+	<<if $arcologies[0].FSPhysicalIdealist != "unset">>
+		<<set _newPC.muscles = 100>>
+	<<elseif PC.title == 1>>
+		<<set _newPC.muscles = 50>>
+	<<else>>
+		<<set _newPC.muscles = 30>>
+	<</if>>
+	<<if PC.title == 0>>
+		<<set _newPC.hLength = 15>>
+		<<set _newPC.waist = -20>>
+		<<set _newPC.voice = 2>>
+		<<set _newPC.shoulders = -1>>
+		<<set _newPC.hips = 1>>
+	<</if>>
+	<<if $PC.career == "escort">>
+		<<set _newPC.anus = 1>>
+		<<set _newPC.clothes = "a slutty outfit">>
+		<<set _newPC.education = 15>>
+	<<elseif $PC.career == "servant">>
+		<<set _newPC.clothes = "a nice maid outfit">>
+		<<set _newPC.education = 0>>
+	<</if>>
 
 	<<set WombInit(_newPC)>>
+	
+	<<set $PC = clone(_newPC)>>
 <</if>>
 
 <<if ndef $PCWounded>>
@@ -3719,6 +3733,12 @@ Setting missing slave variables:
 	<</if>>
 <</if>>
 
+<<if $releaseID < 1057>>
+	<<if _Slave.relatioship == -3>>
+		<<set $PC.relationships.wives.push(_Slave.ID)>>
+	<</if>>
+<</if>>
+
 <<set $slaves[_bci] = _Slave>>
 <</for>>