diff --git a/src/cheats/PCCheatMenu.tw b/src/cheats/PCCheatMenu.tw
index 2080a5037f90d368b9981ac8519bc4fec0223a5d..8b5cddb2caee8a0f822c829ce6890d6d58e622ea 100644
--- a/src/cheats/PCCheatMenu.tw
+++ b/src/cheats/PCCheatMenu.tw
@@ -1,338 +1,14 @@
 :: PCCheatMenu [nobr]
 
 <<set $nextButton = "Apply", $nextLink = "PCCheatMenuCheatDatatypeCleanup", $encyclopedia = "Design Your Master">>
-<<set $tempSlave = clone($PC)>>
 
-''Cheat Editing Player Character'' <<link "[Cancel]" "Manage Personal Affairs">><<unset $tempSlave, $customEvalCode>><</link>>
+''Cheat Editing Player Character''
+<<link "[Cancel]" "Manage Personal Affairs">>
+	<<unset $tempSlave, $customEvalCode>>
+	<<set $PC = clone($backupSlave)>>
+<</link>>
 
-<br><br>
-
-Title: ''<<if $tempSlave.title == 1>>Master<<else>>Mistress<</if>>''
-<br><<radiobutton "$tempSlave.title" 1>> Master
-	<<radiobutton "$tempSlave.title" 0>> Mistress
-<br>
-Sex: ''$tempSlave.genes''
-<br><<radiobutton "$tempSlave.genes" "XY">> XY
-	<<radiobutton "$tempSlave.genes" "XX">> XX
-<br>''Name'': <<textbox "$tempSlave.slaveName" $tempSlave.slaveName>>
-<br>''Birth Name'': <<textbox "$tempSlave.birthName" $tempSlave.birthName>>
-<br>''Surname'': <<textbox "$tempSlave.slaveSurname" $tempSlave.slaveSurname>>
-<br>''Birth Surname'': <<textbox "$tempSlave.birthSurname" $tempSlave.birthSurname>>
-<br>''Custom Title'': <<textbox "$tempSlave.custom.title" $tempSlave.custom.title>>
-
-<br>Nationality: ''$tempSlave.nationality''.
-<<textbox "$tempSlave.nationality" $tempSlave.nationality>>
-
-<br>Career: ''$tempSlave.career''.
-<br><<radiobutton "$tempSlave.career" "wealth">> Wealth
-	<<radiobutton "$tempSlave.career" "capitalist">> Capitalist
-	<<radiobutton "$tempSlave.career" "mercenary">> Mercenary
-	<<radiobutton "$tempSlave.career" "slaver">> Slaver
-	<<radiobutton "$tempSlave.career" "engineer">> Engineer
-	<<radiobutton "$tempSlave.career" "medicine">> Medicine
-	<<radiobutton "$tempSlave.career" "celebrity">> Celebrity
-	<<radiobutton "$tempSlave.career" "escort">> Escort
-	<<radiobutton "$tempSlave.career" "servant">> Servant
-	<<radiobutton "$tempSlave.career" "gang">> Gang
-	<<radiobutton "$tempSlave.career" "BlackHat">> BlackHat
-
-<br>Method of acquiring the arcology: ''$tempSlave.rumor''.
-<br><<radiobutton "$tempSlave.rumor" "wealth">> Wealth
-	<<radiobutton "$tempSlave.rumor" "diligence">> Diligence
-	<<radiobutton "$tempSlave.rumor" "force">> Force
-	<<radiobutton "$tempSlave.rumor" "social engineering">> Social Engineering
-	<<radiobutton "$tempSlave.rumor" "luck">> Luck
-
-<br>Preferred refreshment: <<textbox "$tempSlave.refreshment" $tempSlave.refreshment>>
-<br><<radiobutton "$tempSlave.refreshment" "cigar">> Cigar
-	<<radiobutton "$tempSlave.refreshment" "whiskey">> Whiskey
-
-<br>Preferred method of consumption: <<print App.Data.player.refreshmentType[$tempSlave.refreshmentType]>>
-<br>
-<<for _i = 0; _i < App.Data.player.refreshmentType.length; _i++>>
-	<<radiobutton "$tempSlave.refreshmentType" _i>> <<print App.Data.player.refreshmentType[_i]>>
-<</for>>
-<br>
-
-<br>''Skin'': <<textbox "$tempSlave.skin" $tempSlave.skin>>
-<br>''Genetic Skin'': <<textbox "$tempSlave.origSkin" $tempSlave.origSkin>>
-<br>''Race'': <<textbox "$tempSlave.race" $tempSlave.race>>
-<br>''Genetic Race'': <<textbox "$tempSlave.origRace" $tempSlave.origRace>>
-<br>''Eye Color'': <<textbox "$tempSlave.eye.right.iris" $tempSlave.eye.right.iris>>
-<br>''Genetic Eye Color'': <<textbox "$tempSlave.eye.origColor" $tempSlave.eye.origColor>>
-<br>''Pupil Shape'': <<textbox "$tempSlave.eye.right.pupil" $tempSlave.eye.right.pupil>>
-<br>''Sclera Color'': <<textbox "$tempSlave.eye.right.sclera" $tempSlave.eye.right.sclera>>
-<br>''Hair Color'': <<textbox "$tempSlave.hColor" $tempSlave.hColor>>
-<br>''Genetic Hair Color'': <<textbox "$tempSlave.origHColor" $tempSlave.origHColor>>
-<br>
-<br>''Boobs'': <<textbox "$tempSlave.boobs" $tempSlave.boobs>> //100: masculine chest (if title = 1) or flat chested (if title = 0)(WIP), 300+: A cup, 400+: B cup, 500+: C cup, 650+: D cup, 800+: DD cup, 1000+: F cup, 1200+: G cup, 1400+: H cup//
-<br>''Boobs Implant'': <<textbox "$tempSlave.boobsImplant" $tempSlave.boobsImplant>> //do you have breast implants - size in CCs//
-<br>''Lactation'': <<textbox "$tempSlave.lactation" $tempSlave.lactation>> //are you lactating - 0: no, 1: yes//
-<br>
-<br>''Butt Size'': <<textbox "$tempSlave.butt" $tempSlave.butt>> //2: normal, 3: big, 4: huge, 5: enormous//
-<br>''Butt Implant'': <<textbox "$tempSlave.buttImplant" $tempSlave.buttImplant>> //do you have butt implants - 0: no, 1+: yes//
-<br>
-<br>''Vagina'': <<textbox "$tempSlave.vagina" $tempSlave.vagina>>
-<br>''New Vagina'': <<textbox "$tempSlave.newVag" $tempSlave.newVag>> //0: no, 1: yes//
-<br>
-<br>''Dick'': <<textbox "$tempSlave.dick" $tempSlave.dick>>
-<br>''Balls Size'': <<textbox "$tempSlave.balls" $tempSlave.balls>> //3: normal, 5: big, 9: huge, 14: enormous, 30: monstrous//
-<br>''Balls Implant'': <<textbox "$tempSlave.ballsImplant" $tempSlave.ballsImplant>> //0: none, 1+ yes//
-
-<br><br>
-__Age__
-<br>''Actual Age'': <<textbox "$tempSlave.actualAge" $tempSlave.actualAge>>
-<br>''Physical Age'': <<textbox "$tempSlave.physicalAge" $tempSlave.physicalAge>>
-<br>''Visual Age'': <<textbox "$tempSlave.visualAge" $tempSlave.visualAge>>
-<br>''Ovary Age'': <<textbox "$tempSlave.ovaryAge" $tempSlave.ovaryAge>>
-<br>''Age Implant'': <<textbox "$tempSlave.ageImplant" $tempSlave.ageImplant>> //0: no surgery, 1: age altering surgery//
-<br>''Player Aging'': <<textbox "$playerAging" $playerAging>> //0: no aging, 1: no aging, but birthdays, 2: aging//
-
-<br><br>
-__Pregnancy__
-<br>''Pregnancy Length'': <<textbox "$tempSlave.preg" $tempSlave.preg>> //how far along your pregnancy is (pregMood kicks in at 24+ weeks) - -2: infertile, -1: contraceptives, 0: not pregnant, 1 - 42: pregnant, 43+: giving birth//
-<br>''Fetus Count'': <<textbox "$tempSlave.pregType" $tempSlave.pregType>> //how many you're having (1-8)//
-<br>''PregSource'': <<textbox "$tempSlave.pregSource" $tempSlave.pregSource>> //who knocked you up - 0: unknown, -1: self-impreg, -2: citizen, -3: former Master, -4: male arc owner, -5: client, -6: Societal Elite, -7: designer baby, -9: Futanari Sister//
-<br>''PregMood'': <<textbox "$tempSlave.pregMood" $tempSlave.pregMood>> //how you act when heavily pregnant - 0: no change, 1: submissive and motherly, 2: aggressive and dominant//
-
-<br><br>
-''Skills:''
-<br>
-<br>Trading:
-''<<if $tempSlave.skill.trading >= 100>>
-	You are a master at economics and trading.
-<<elseif $tempSlave.skill.trading >= 80>>
-	You are an expert at economics and trading.
-<<elseif $tempSlave.skill.trading >= 60>>
-	You are skilled in economics and trading.
-<<elseif $tempSlave.skill.trading >= 40>>
-	You know some things about economics and trading.
-<<elseif $tempSlave.skill.trading >= 20>>
-	You are a beginner in economics.
-<<elseif $tempSlave.skill.trading >= 0>>
-	You know only the basics of trading.
-<<elseif $tempSlave.skill.trading >= -20>>
-	You know how to haggle a little.
-<<elseif $tempSlave.skill.trading >= -40>>
-	You know how to shop around.
-<<elseif $tempSlave.skill.trading >= -60>>
-	You know not to pay sticker price.
-<<elseif $tempSlave.skill.trading >= -80>>
-	People always give you discounts, but you never save any money.
-<<else>>
-	They said it was a bear market, so where are the bears?
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.trading" 100>> Economics master
-<<radiobutton "$tempSlave.skill.trading" 90>> Economics expert
-<<radiobutton "$tempSlave.skill.trading" 70>> Skilled in economics
-<<radiobutton "$tempSlave.skill.trading" 50>> Amateur economist
-<<radiobutton "$tempSlave.skill.trading" 30>> Economics beginner
-<<radiobutton "$tempSlave.skill.trading" 0>> Basic trader
-<<radiobutton "$tempSlave.skill.trading" -10>> Haggler
-<<radiobutton "$tempSlave.skill.trading" -30>> Shopper
-<<radiobutton "$tempSlave.skill.trading" -50>> Weak saver
-<<radiobutton "$tempSlave.skill.trading" -70>> Money sieve
-<<radiobutton "$tempSlave.skill.trading" -90>> What's a trading?
-<br>
-<br>Warfare:
-''<<if $tempSlave.skill.warfare >= 100>>
-	You are a master of warfare.
-<<elseif $tempSlave.skill.warfare >= 80>>
-	You are an expert at tactics and strategy.
-<<elseif $tempSlave.skill.warfare >= 60>>
-	You are skilled in combat.
-<<elseif $tempSlave.skill.warfare >= 40>>
-	You know some things about combat.
-<<elseif $tempSlave.skill.warfare >= 20>>
-	You are a beginner in tactics and strategy.
-<<elseif $tempSlave.skill.warfare >= 0>>
-	You know only the basics of fighting.
-<<elseif $tempSlave.skill.warfare >= -20>>
-	You know how to hold a gun.
-<<elseif $tempSlave.skill.warfare >= -40>>
-	You know how to stab with a knife.
-<<elseif $tempSlave.skill.warfare >= -60>>
-	Go for the throat?
-<<elseif $tempSlave.skill.warfare >= -80>>
-	Just kick them in the balls, right?
-<<else>>
-	People like you are usually the first raped in a war.
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.warfare" 100>> Warfare master
-<<radiobutton "$tempSlave.skill.warfare" 90>> Warfare expert
-<<radiobutton "$tempSlave.skill.warfare" 70>> Skilled in warfare
-<<radiobutton "$tempSlave.skill.warfare" 50>> Amateur combatant
-<<radiobutton "$tempSlave.skill.warfare" 30>> Combat beginner
-<<radiobutton "$tempSlave.skill.warfare" 0>> Basic fighter
-<<radiobutton "$tempSlave.skill.warfare" -10>> Gun haver
-<<radiobutton "$tempSlave.skill.warfare" -30>> Knife holder
-<<radiobutton "$tempSlave.skill.warfare" -50>> Throat puncher
-<<radiobutton "$tempSlave.skill.warfare" -70>> Groin kicker?
-<<radiobutton "$tempSlave.skill.warfare" -90>> Most likely to be raped
-<br>
-<br>Slaving:
-''<<if $tempSlave.skill.slaving >= 100>>
-	You are a master slaver.
-<<elseif $tempSlave.skill.slaving >= 80>>
-	You are an expert at enslaving.
-<<elseif $tempSlave.skill.slaving >= 60>>
-	You are skilled in slaving.
-<<elseif $tempSlave.skill.slaving >= 40>>
-	You know some things about getting slaves.
-<<elseif $tempSlave.skill.slaving >= 20>>
-	You are a beginner in slaving.
-<<elseif $tempSlave.skill.slaving >= 0>>
-	You know only the basics of slaving.
-<<elseif $tempSlave.skill.slaving >= -20>>
-	You know how to avoid becoming a slave.
-<<elseif $tempSlave.skill.slaving >= -40>>
-	You know to read contracts before you sign them.
-<<elseif $tempSlave.skill.slaving >= -60>>
-	You know to be careful.
-<<elseif $tempSlave.skill.slaving >= -80>>
-	You know better than to trust anyone.
-<<else>>
-	It would be easy to enslave you.
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.slaving" 100>> Master slaver
-<<radiobutton "$tempSlave.skill.slaving" 90>> Expert slaver
-<<radiobutton "$tempSlave.skill.slaving" 70>> Skilled in slaving
-<<radiobutton "$tempSlave.skill.slaving" 50>> Amateur slaver
-<<radiobutton "$tempSlave.skill.slaving" 30>> Slaving beginner
-<<radiobutton "$tempSlave.skill.slaving" 0>> Basic slaver
-<<radiobutton "$tempSlave.skill.slaving" -10>> Can't make me a slave
-<<radiobutton "$tempSlave.skill.slaving" -30>> Can read contracts
-<<radiobutton "$tempSlave.skill.slaving" -50>> Careful now
-<<radiobutton "$tempSlave.skill.slaving" -70>> Don't trust that guy
-<<radiobutton "$tempSlave.skill.slaving" -90>> Potential slave
-<br>
-<br>Engineering:
-''<<if $tempSlave.skill.engineering >= 100>>
-	You are a master engineer.
-<<elseif $tempSlave.skill.engineering >= 80>>
-	You are an expert at engineering.
-<<elseif $tempSlave.skill.engineering >= 60>>
-	You are skilled in engineering.
-<<elseif $tempSlave.skill.engineering >= 40>>
-	You know some things about engineering.
-<<elseif $tempSlave.skill.engineering >= 20>>
-	You are a beginner in engineering.
-<<elseif $tempSlave.skill.engineering >= 0>>
-	You know only the basics of engineering.
-<<elseif $tempSlave.skill.engineering >= -20>>
-	You can build a gingerbread house that doesn't collapse.
-<<elseif $tempSlave.skill.engineering >= -40>>
-	You can tie a tight knot, does that count?
-<<elseif $tempSlave.skill.engineering >= -60>>
-	Glue is your friend; lots of it.
-<<elseif $tempSlave.skill.engineering >= -80>>
-	You know better than to even try to build something.
-<<else>>
-	You can cook; that's sort of like building something, right?
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.engineering" 100>> Master engineer
-<<radiobutton "$tempSlave.skill.engineering" 90>> Expert engineer
-<<radiobutton "$tempSlave.skill.engineering" 70>> Skilled in engineering
-<<radiobutton "$tempSlave.skill.engineering" 50>> Amateur engineer
-<<radiobutton "$tempSlave.skill.engineering" 30>> Engineering beginner
-<<radiobutton "$tempSlave.skill.engineering" 0>> Basic engineer
-<<radiobutton "$tempSlave.skill.engineering" -10>> Gingerbread house
-<<radiobutton "$tempSlave.skill.engineering" -30>> Knot tyer
-<<radiobutton "$tempSlave.skill.engineering" -50>> You can use glue
-<<radiobutton "$tempSlave.skill.engineering" -70>> You aren't handy
-<<radiobutton "$tempSlave.skill.engineering" -90>> My hovercraft is full of eels
-<br>
-<br>Medicine:
-''<<if $tempSlave.skill.medicine >= 100>>
-	You are a master surgeon.
-<<elseif $tempSlave.skill.medicine >= 80>>
-	You are an expert at medicine and surgery.
-<<elseif $tempSlave.skill.medicine >= 60>>
-	You are skilled in surgery.
-<<elseif $tempSlave.skill.medicine >= 40>>
-	You know some things about medicine.
-<<elseif $tempSlave.skill.medicine >= 20>>
-	You are a beginner in medicine.
-<<elseif $tempSlave.skill.medicine >= 0>>
-	You know the basics of treating injuries.
-<<elseif $tempSlave.skill.medicine >= -20>>
-	You can stop a wound from getting infected.
-<<elseif $tempSlave.skill.medicine >= -40>>
-	Gauze is your friend. Just keep wrapping.
-<<elseif $tempSlave.skill.medicine >= -60>>
-	You know how to apply a band-aid.
-<<elseif $tempSlave.skill.medicine >= -80>>
-	Cure-alls are wonderful. Why aren't they sold in stores, though?
-<<else>>
-	Alcohol makes pain go away, right?
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.medicine" 100>> Master surgeon
-<<radiobutton "$tempSlave.skill.medicine" 90>> Expert surgeon
-<<radiobutton "$tempSlave.skill.medicine" 70>> Skilled in medicine
-<<radiobutton "$tempSlave.skill.medicine" 50>> Amateur surgeon
-<<radiobutton "$tempSlave.skill.medicine" 30>> Medical beginner
-<<radiobutton "$tempSlave.skill.medicine" 0>> Basic medic
-<<radiobutton "$tempSlave.skill.medicine" -10>> Can treat wounds
-<<radiobutton "$tempSlave.skill.medicine" -30>> First-aid kit user
-<<radiobutton "$tempSlave.skill.medicine" -50>> Band-aid applier
-<<radiobutton "$tempSlave.skill.medicine" -70>> MEDIC!
-<<radiobutton "$tempSlave.skill.medicine" -90>> Give me another beer
-<br>
-<br>Hacking:
-''<<if $tempSlave.skill.hacking >= 100>>
-	You are a master of hacking.
-<<elseif $tempSlave.skill.hacking >= 80>>
-	You are an expert at hacking.
-<<elseif $tempSlave.skill.hacking >= 60>>
-	You are skilled in hacking.
-<<elseif $tempSlave.skill.hacking >= 40>>
-	You know some things about hacking.
-<<elseif $tempSlave.skill.hacking >= 20>>
-	You are a beginner in hacking.
-<<elseif $tempSlave.skill.hacking >= 0>>
-	You know only the basics of hacking.
-<<elseif $tempSlave.skill.hacking >= -20>>
-	You know how to click a mouse.
-<<elseif $tempSlave.skill.hacking >= -40>>
-	Enter does something?
-<<elseif $tempSlave.skill.hacking >= -60>>
-	Where is the "any" key?
-<<elseif $tempSlave.skill.hacking >= -80>>
-	You can push the power button, good job.
-<<else>>
-	This black box thingy is magical.
-<</if>>''
-<br>
-<<radiobutton "$tempSlave.skill.hacking" 100>> Master hacker
-<<radiobutton "$tempSlave.skill.hacking" 90>> Expert hacker
-<<radiobutton "$tempSlave.skill.hacking" 70>> Skilled hacker
-<<radiobutton "$tempSlave.skill.hacking" 50>> Amateur hacker
-<<radiobutton "$tempSlave.skill.hacking" 30>> Hacking beginner
-<<radiobutton "$tempSlave.skill.hacking" 0>> Basic hacker
-<<radiobutton "$tempSlave.skill.hacking" -10>> Mouse clicker
-<<radiobutton "$tempSlave.skill.hacking" -30>> You can press Enter
-<<radiobutton "$tempSlave.skill.hacking" -50>> Where's the "any" key?
-<<radiobutton "$tempSlave.skill.hacking" -70>> Main screen turn on?
-<<radiobutton "$tempSlave.skill.hacking" -90>> Ooh, cool glowy thingy!
-
-<br>
-<br>Your mother ID:
-<<textbox "$tempSlave.mother" $tempSlave.mother>>
-<br>Your father ID:
-<<textbox "$tempSlave.father" $tempSlave.father>>
-
-<br>
-<br>''Sexual Energy'': <<textbox "$tempSlave.sexualEnergy" $tempSlave.sexualEnergy>>
-<br>''Cum Tap'': <<textbox "$tempSlave.skill.cumTap" $tempSlave.skill.cumTap>>
-<br>''Stored Cum'': <<textbox "$tempSlave.counter.storedCum" $tempSlave.counter.storedCum>>
-<br>''Fertility Drugs'': <<textbox "$tempSlave.fertDrugs" $tempSlave.fertDrugs>> //0: no, 1: yes//
-<br>''Forced Fertility Drugs'': <<textbox "$tempSlave.forcedFertDrugs" $tempSlave.forcedFertDrugs>> //time left in body system//
-<br>''Stamina Pills'': <<textbox "$tempSlave.staminaPills" $tempSlave.staminaPills>> //0: no, 1: yes//
+<<includeDOM App.UI.Player.design()>>
 
 <br><br>Custom Cheat:
 <br><<textarea "$customEvalCode" "">>
diff --git a/src/cheats/PCCheatMenuCheatDatatypeCleanup.tw b/src/cheats/PCCheatMenuCheatDatatypeCleanup.tw
index 2d5b64ae8023dbb82b5c4f71e859cf27500d56de..46c8957c0af46ff4ddff3f5de80ff90374072133 100644
--- a/src/cheats/PCCheatMenuCheatDatatypeCleanup.tw
+++ b/src/cheats/PCCheatMenuCheatDatatypeCleanup.tw
@@ -1,80 +1,17 @@
 :: PCCheatMenuCheatDatatypeCleanup [nobr]
 
 <<set $nextButton = "Continue", $nextLink = "Manage Personal Affairs">>
-/* Cancel Option Check */
-<<if $tempSlave == "unset">>
-	<<unset $tempSlave>>
-	<<goto "Manage Personal Affairs">>
-<</if>>
 
 <<if $customEvalCode>>
 	<<if $customEvalCode.charAt(0) != "(" || $nextLink == ")">> /* second condition is only there for sanityCheck */
 		<<set $customEvalCode = "(" + $customEvalCode + ")">>
 	<</if>>
 	<<if typeof eval($customEvalCode) === "function">>
-		<<run (eval($customEvalCode))($tempSlave)>>
+		<<run (eval($customEvalCode))($PC)>>
 	<</if>>
 <</if>>
-<<unset $customEvalCode>>
-
-<<set $tempSlave.preg = Number($tempSlave.preg) || 0>>
-<<set $tempSlave.pregSource = Number($tempSlave.pregSource) || 0>>
-<<set $tempSlave.pregType = Number($tempSlave.pregType) || 0>>
-<<set WombInit($tempSlave)>> /* just to make sure */
-<<set $tempSlave.womb.length = 0>> /* simple way to delete all fetuses */
-<<set WombImpregnate($tempSlave, $tempSlave.pregType, $tempSlave.pregSource, $tempSlave.preg)>> /* recreates fetuses */
-<<if $tempSlave.preg > 0>>
-	<<set $tempSlave.belly = WombGetVolume($tempSlave)>>
-	<<set $tempSlave.pregWeek = $tempSlave.preg>>
-<<else>>
-	<<set $tempSlave.belly = 0>>
-	<<set $tempSlave.pregWeek = 0>>
-<</if>>
+<<unset $customEvalCode, $backupSlave>>
 
-<<if $tempSlave.boobs < 300>>
-	<<set $tempSlave.boobs = 100>>
-	<<set $tempSlave.boobsImplant = 0>>
-<</if>>
-<<if $tempSlave.boobsImplant > $tempSlave.boobs>>
-	<<set $tempSlave.boobsImplant = $tempSlave.boobs>>
-<</if>>
-<<if $tempSlave.butt < 2>>
-	<<set $tempSlave.butt = 2>>
-	<<set $tempSlave.buttImplant = 0>>
-<</if>>
-<<if $tempSlave.buttImplant > $tempSlave.butt>>
-	<<set $tempSlave.buttImplant = $tempSlave.butt>>
-<</if>>
-<<if $tempSlave.dick == 0>>
-	<<set $tempSlave.balls = 0>>
-	<<set $tempSlave.ballsImplant = 0>>
-	<<set $tempSlave.scrotum = 0>>
-	<<set $tempSlave.prostate = 0>>
-<</if>>
-<<if $tempSlave.ballsImplant > $tempSlave.balls>>
-	<<set $tempSlave.ballsImplant = $tempSlave.balls>>
-<</if>>
-<<if $tempSlave.vagina == -1>>
-	<<set $tempSlave.newVag = 0>>
-	<<set $tempSlave.ovaries = 0>>
-	<<set $tempSlave.vaginaLube = 0>>
-<</if>>
-<<if $tempSlave.lactation > 0 && $tempSlave.lactationDuration == 0>>
-	<<set $tempSlave.lactationDuration = 2>>
-<<elseif $tempSlave.lactation == 0 && $tempSlave.lactationDuration > 0>>
-	<<set $tempSlave.lactationDuration = 0>>
-<</if>>
-<<set $tempSlave.eye.left.iris = $tempSlave.eye.right.iris>>
-<<set $tempSlave.eye.left.pupil = $tempSlave.eye.right.pupil>>
-<<set $tempSlave.eye.left.sclera = $tempSlave.eye.right.sclera>>
+<<run App.Entity.Utils.PCCheatCleanup()>>
 
 You perform the dark rituals, pray to the dark gods, and sell your soul for the power to reshape your body and life at will. What a cheater!
-
-<<set $PC = clone($tempSlave)>>
-<<run ibc.recalculate_coeff_id(-1)>>
-<<run PCDatatypeCleanup()>>
-<<set $upgradeMultiplierArcology = upgradeMultiplier('engineering')>>
-<<set $upgradeMultiplierMedicine = upgradeMultiplier('medicine')>>
-<<set $upgradeMultiplierTrade = upgradeMultiplier('trading')>>
-<<set $HackingSkillMultiplier = upgradeMultiplier('hacking')>>
-<<unset $tempSlave>>
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index 4b5f082552b82abc20fbb4ac0c4e709a31eb6067..89659896077c38ff0ae7ff92c64300cd63c95a55 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -2479,3 +2479,60 @@ App.Update.neighborArcologyCheatDatatypeCleanup = function() {
 		V.arcologies[_i].rival = Number(V.arcologies[_i].rival) || 0;
 	}
 };
+
+App.Entity.Utils.PCCheatCleanup = function() {
+	V.PC.preg = Number(V.PC.preg) || 0;
+	V.PC.pregSource = Number(V.PC.pregSource) || 0;
+	V.PC.pregType = Number(V.PC.pregType) || 0;
+	WombInit(V.PC); // just to make sure
+	V.PC.womb.length = 0; // simple way to delete all fetuses
+	WombImpregnate(V.PC, V.PC.pregType, V.PC.pregSource, V.PC.preg);// recreates fetuses
+	if (V.PC.preg > 0) {
+		V.PC.belly = WombGetVolume(V.PC);
+		V.PC.pregWeek = V.PC.preg;
+	} else {
+		V.PC.belly = 0;
+		V.PC.pregWeek = 0;
+	}
+
+	if (V.PC.boobs < 300) {
+		V.PC.boobs = 100;
+		V.PC.boobsImplant = 0;
+	}
+	if (V.PC.boobsImplant > V.PC.boobs) {
+		V.PC.boobsImplant = V.PC.boobs;
+	}
+	if (V.PC.butt < 2) {
+		V.PC.butt = 2;
+		V.PC.buttImplant = 0;
+	}
+	if (V.PC.buttImplant > V.PC.butt) {
+		V.PC.buttImplant = V.PC.butt;
+	}
+	if (V.PC.dick === 0) {
+		V.PC.balls = 0;
+		V.PC.ballsImplant = 0;
+		V.PC.scrotum = 0;
+		V.PC.prostate = 0;
+	}
+	if (V.PC.ballsImplant > V.PC.balls) {
+		V.PC.ballsImplant = V.PC.balls;
+	}
+	if (V.PC.vagina === -1) {
+		V.PC.newVag = 0;
+		V.PC.ovaries = 0;
+		V.PC.vaginaLube = 0;
+	}
+	if (V.PC.lactation > 0 && V.PC.lactationDuration === 0) {
+		V.PC.lactationDuration = 2;
+	} else if (V.PC.lactation === 0 && V.PC.lactationDuration > 0) {
+		V.PC.lactationDuration = 0;
+	}
+
+	ibc.recalculate_coeff_id(-1);
+	PCDatatypeCleanup();
+	V.upgradeMultiplierArcology = upgradeMultiplier('engineering');
+	V.upgradeMultiplierMedicine = upgradeMultiplier('medicine');
+	V.upgradeMultiplierTrade = upgradeMultiplier('trading');
+	V.HackingSkillMultiplier = upgradeMultiplier('hacking');
+};
diff --git a/src/events/intro/introSummary.js b/src/events/intro/introSummary.js
index 8a091bfd4e8c52090a230a82d7847982b0f6778b..ca397aefc6761114a304decd765d5684140b09d0 100644
--- a/src/events/intro/introSummary.js
+++ b/src/events/intro/introSummary.js
@@ -45,7 +45,7 @@ App.Intro.summary = function() {
 		{
 			title: "Player Character",
 			id: "player",
-			get node() { return playerContent(); }
+			get node() { return App.UI.Player.design(); }
 		},
 		{
 			title: "UI",
@@ -605,434 +605,6 @@ App.Intro.summary = function() {
 		return el;
 	}
 
-	function playerContent() {
-		const el = new DocumentFragment();
-		let options = new App.UI.OptionsGroup();
-		let option;
-		let r;
-		let linkArray;
-
-		if (V.freshPC === 1 || V.saveImported === 0) {
-			options.addOption("You are a", "title", V.PC)
-				.addValue("Masculine Master", 1, () => V.PC.genes = "XY").addValue("Feminine Mistress", 0, () => V.PC.genes = "XX");
-
-			App.Intro.PCNames(options);
-
-			V.PC.physicalAge = V.PC.actualAge;
-			V.PC.visualAge = V.PC.actualAge;
-			options.addOption("You are", "actualAge", V.PC).showTextBox()
-				.addRange(25, 35, "<", "Surprisingly young").addRange(40, 50, "<", "Entering middle age")
-				.addRange(55, 65, "<", "Well into middle age").addRange(70, 65, ">=", "Old");
-
-			options.addOption(`Your birthday was <strong>${V.PC.birthWeek}</strong> weeks ago.`, "birthWeek", V.PC).showTextBox();
-
-			options.addOption("Player aging is", "playerAging")
-				.addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off()
-				.addComment("This option cannot be changed during the game.");
-
-			if (V.PC.customTitle) {
-				options.addOption("Custom title", "customTitle", V.PC).showTextBox()
-					.addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; });
-
-				options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox()
-					.addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.');
-			} else {
-				options.addOption("Custom title", "customTitle", V.PC)
-					.addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather');
-			}
-
-			App.Intro.pcAppearance(options);
-
-			options.addOption("Your face is", "faceShape", V.PC)
-				.addValueList([
-					["Normal", "normal"],
-					["Androgynous", "androgynous"],
-					["Masculine", "masculine"],
-					["Cute", "cute"],
-					["Sensual", "sensual"],
-					["Exotic", "exotic"]
-				]);
-
-			App.Intro.refreshmentChoice(options);
-
-			option = options.addOption("Before you came to the Free Cities, you were a", "career", V.PC);
-			if (V.PC.career === "arcology owner") {
-				option.addValue("Arcology owner", "arcology owner");
-			} else {
-				option.addValueList([
-					["Member of the idle wealthy", "wealth"],
-					["Business leader", "capitalist"],
-					["Mercenary", "mercenary"],
-					["Slaver", "slaver"],
-					["Engineer", "engineer"],
-					["Doctor", "medicine"],
-					["Hacker", "BlackHat"],
-					["Minor celebrity", "celebrity"],
-					["Escort", "escort"],
-					["Servant", "servant"],
-					["Gang leader", "gang"]]
-				);
-				if (V.secExpEnabled > 0) {
-					switch (V.PC.career) {
-						case "capitalist":
-							option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`);
-							break;
-						case "mercenary":
-							option.addComment(`<div><span class="green">Easier to maintain security</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
-							break;
-						case "slaver":
-							option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
-							break;
-						case "engineer":
-							option.addComment(`<div><span class="yellowgreen">construction and upgrade of facilities will be cheaper.</span></div>`);
-							break;
-						case "medicine":
-							option.addComment(`<div><span class="yellowgreen">Drug upgrades will be cheaper.</span></div>`);
-							break;
-						case "celebrity":
-							option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`);
-							break;
-						case "escort":
-							option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
-							break;
-						case "servant":
-							option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
-							break;
-						case "gang":
-							option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
-							break;
-						case "BlackHat":
-							option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
-							break;
-						default:
-							option.addComment(`<div><span class="red">Harder to maintain authority,</span> but <span class="yellowgreen">the propaganda hub's upgrades will be cheaper.</span></div>`);
-					}
-				}
-			}
-
-			options.addOption("It is rumored that you acquired your arcology through", "rumor", V.PC)
-				.addValueList([
-					["Wealth", "wealth"],
-					["Hard work", "diligence"],
-					["Force", "force"],
-					["Social engineering", "social engineering"],
-					["Blind luck", "luck"]
-				]);
-
-			el.append(options.render());
-
-			App.UI.DOM.appendNewElement("h2", el, "Sexuality");
-			options = new App.UI.OptionsGroup();
-
-			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
-				State.temporary.vaginaPenis = 2;
-			} else if (V.PC.vagina !== -1) {
-				State.temporary.vaginaPenis = 1;
-			} else {
-				State.temporary.vaginaPenis = 0;
-			}
-
-			option = options.addOption("You have a", "vaginaPenis", State.temporary)
-				.addValue("Penis", 0, () => {
-					V.PC.preg = 0;
-					V.PC.pregType = 0;
-					V.PC.dick = 4;
-					V.PC.balls = 3;
-					V.PC.scrotum = 3;
-					V.PC.prostate = 1;
-					V.PC.vagina = -1;
-					V.PC.ovaries = 0;
-				}).addValue("Vagina", 1, () => {
-					V.PC.dick = 0;
-					V.PC.balls = 0;
-					V.PC.scrotum = 0;
-					V.PC.prostate = 0;
-					V.PC.vagina = 1;
-					V.PC.ovaries = 1;
-				}).addValue("Penis and Vagina", 2, () => {
-					V.PC.dick = 4;
-					V.PC.balls = 3;
-					V.PC.scrotum = 3;
-					V.PC.prostate = 1;
-					V.PC.vagina = 1;
-					V.PC.ovaries = 1;
-				});
-			if (State.temporary.vaginaPenis === 0) {
-				option.addComment("Standard sex scenes; easiest reputation maintenance.");
-			} else if (State.temporary.vaginaPenis === 1) {
-				option.addComment("Sex scene variations; most difficult reputation maintenance.");
-			} else {
-				option.addComment("Sex scene variations; more difficult reputation maintenance; some unique opportunities, especially with breasts.");
-			}
-
-			if (V.PC.vagina !== -1) {
-				option = options.addOption("You are", "preg", V.PC)
-					.addValue("Taking contraceptives", -1, () => { V.PC.pregType = 0; V.PC.labor = 0; })
-					.addValue("Not taking contraceptives", 0, () => { V.PC.pregType = 0; V.PC.labor = 0; })
-					.addRange(16, 37, "<=", "Pregnant").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; })
-					.addRange(40, 42, "<=", "Ready to drop").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; })
-					.addRange(43, 42, ">", "Ready to drop with octuplets").addCallback(() => { V.PC.pregType = 8; V.PC.labor = 1; });
-				if (V.PC.preg === -1) {
-					option.addComment("You can't get pregnant, however there will be a slight increase to living expenses.");
-				}
-
-				if (V.PC.counter.birthsTotal > 0) {
-					options.addOption("").addComment(`You have given birth to <strong>${V.PC.counter.birthsTotal}</strong> babies.`);
-				}
-
-				option = options.addOption("Hormone effects", "pregMood", V.PC)
-					.addValueList([
-						["None", 0],
-						["Caring and motherly", 1],
-						["Aggressive and domineering", 2]
-					]);
-				if (V.PC.pregMood === 1) {
-					option.addComment("Sex scene alterations; slaves will trust you more, but may try to take advantage of your mercy.");
-				} else if (V.PC.pregMood === 2) {
-					option.addComment("Sex scene alterations; slaves will fear you more, but will become more submissive to you.");
-				}
-			}
-
-			if (V.PC.title === 1 && V.PC.boobs <= 100) {
-				option = options.addOption("Your chest is", "boobs", V.PC).addValue("Manly", 100, () => V.PC.boobsImplant = 0);
-			} else {
-				option = options.addOption("Your breasts are", "boobs", V.PC).addValue("Flat", 100, () => V.PC.boobsImplant = 0);
-			}
-			option.addValueList([
-				["C-cups", 500],
-				["DD-cups", 900],
-				["F-cups", 1100],
-				["G-cups", 1300]
-			]);
-
-			if (V.PC.boobs >= 500) {
-				options.addOption("Your breasts are", "boobsImplant", V.PC)
-					.addValueList([
-						["All natural", 0],
-						["Fake", 400]
-					]);
-			}
-
-			el.append(options.render());
-		} else {
-			r = [];
-			r.push(`You are a`);
-			if (V.PC.title === 1) {
-				r.push(`masculine <strong>Master</strong>`);
-			} else {
-				r.push(`feminine ''Mistress'`);
-			}
-			r.push(`and everyone that matters calls you	${PlayerName()}.`);
-
-			r.push(`You are ${V.PC.actualAge} years old which is`);
-			if (V.PC.actualAge >= 65) {
-				r.push(`<strong>old</strong>.`);
-			} else if (V.PC.actualAge >= 50) {
-				r.push(`<strong>well into middle age</strong>.`);
-			} else if (V.PC.actualAge >= 35) {
-				r.push(`<strong>entering middle age</strong>.`);
-			} else {
-				r.push(`<strong>surprisingly young</strong>.`);
-			}
-			App.Events.addNode(el, r, "p");
-
-			r = [];
-
-			r.push(`You are a ${V.PC.nationality} ${V.PC.race} with`);
-			if (V.PC.markings === "heavily freckled") {
-				r.push(`heavily freckled`);
-			} else if (V.PC.markings === "freckles") {
-				r.push(`lightly freckled`);
-			} else {
-				r.push(`clear`);
-			}
-			r.push(`${V.PC.skin} skin, ${V.PC.hColor} hair and ${App.Desc.eyesColor(V.PC)}. You have a ${V.PC.faceShape} face.`);
-			App.Events.addNode(el, r, "p");
-			options = new App.UI.OptionsGroup();
-			options.addOption("Player aging is", "playerAging")
-				.addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off()
-				.addComment("This option cannot be changed during the game.");
-
-			if (V.PC.customTitle) {
-				options.addOption("Custom title", "customTitle", V.PC).showTextBox()
-					.addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; });
-
-				options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox()
-					.addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.');
-			} else {
-				options.addOption("Custom title", "customTitle", V.PC)
-					.addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather');
-			}
-
-			App.Intro.refreshmentChoice(options);
-
-			el.append(options.render());
-
-			r = [];
-			switch (V.PC.career) {
-				case "wealth":
-					r.push(`Prior to being an arcology owner, you were a member of the idle wealthy.`);
-					break;
-				case "capitalist":
-					r.push(`Prior to being an arcology owner, you were a business leader.`);
-					break;
-				case "mercenary":
-					r.push(`Prior to being an arcology owner, you were a mercenary.`);
-					break;
-				case "slaver":
-					r.push(`Prior to being an arcology owner, you were a slaver.`);
-					break;
-				case "engineer":
-					r.push(`Prior to being an arcology owner, you were an engineer.`);
-					break;
-				case "medicine":
-					r.push(`Prior to being an arcology owner, you were a surgeon.`);
-					break;
-				case "celebrity":
-					r.push(`Prior to being an arcology owner, you were a minor celebrity.`);
-					break;
-				case "BlackHat":
-					r.push(`Prior to being an arcology owner, you specialized in cracking databases and making mockeries of cyber security.`);
-					break;
-				case "arcology owner":
-					r.push(`Being an arcology owner defines your life now.`);
-					break;
-				case "escort":
-					r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`);
-					break;
-				case "servant":
-					r.push(`Prior to being an arcology owner, you served a well-off`);
-					if (V.PC.counter.birthMaster >= 2) {
-						r.push(`master and bore him several children.`);
-					} else {
-						r.push(`master.`);
-					}
-					break;
-				case "gang":
-					r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`);
-					break;
-			}
-
-			r.push(`Word in the arcology is you acquired it through`);
-			switch (V.PC.rumor) {
-				case "wealth":
-					r.push(`a rather ridiculous amount of money.`);
-					break;
-				case "diligence":
-					r.push(`sheer effort.`);
-					break;
-				case "force":
-					r.push(`brutal force.`);
-					break;
-				case "social engineering":
-					r.push(`clever social manipulation.`);
-					break;
-				case "luck":
-					r.push(`blind luck.`);
-					break;
-			}
-			App.Events.addNode(el, r, "p");
-
-			r = [];
-			r.push(`You have a`);
-			if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
-				r.push(`penis and vagina`);
-			} else if (V.PC.dick !== 0) {
-				r.push(`penis.`);
-			} else if (V.PC.vagina !== -1) {
-				r.push(`vagina`);
-			}
-			if (V.PC.vagina !== -1) {
-				r.push(`and are`);
-				if (V.PC.pregWeek < 0) {
-					r.push(`recovering from your last pregnancy.`);
-				} else if (V.PC.preg === -2) {
-					r.push(`infertile.`);
-				} else if (V.PC.preg === -1) {
-					r.push(`taking contraceptives.`);
-				} else if (V.PC.preg === 0) {
-					r.push(`fertile.`);
-				} else if (V.PC.preg > 37) {
-					r.push(`extremely pregnant.`);
-				} else if (V.PC.preg > 0) {
-					r.push(`pregnant.`);
-				}
-
-				linkArray = [];
-				if (V.PC.preg > 20 || V.PC.counter.birthsTotal > 0) {
-					if (V.PC.pregMood === 1) {
-						r.push(`You tend to be caring and motherly when you're pregnant.`);
-						linkArray.push(noChange(), aggressive());
-					} else if (V.PC.pregMood === 0) {
-						r.push(`Pregnancy doesn't really affect your mood.`);
-						linkArray.push(motherly(), aggressive());
-					} else {
-						r.push(`You tend to be very demanding and aggressive when you're pregnant.`);
-						linkArray.push(noChange(), motherly());
-					}
-				} else {
-					if (V.PC.pregMood === 1) {
-						r.push(`You tend to be caring and motherly when you're hormonal.`);
-						linkArray.push(noChange(), aggressive());
-					} else if (V.PC.pregMood === 0) {
-						r.push(`Your mood isn't tied to your hormones.`);
-						linkArray.push(motherly(), aggressive());
-					} else {
-						r.push(`You tend to be very demanding and aggressive when you're hormonal.`);
-						linkArray.push(noChange(), motherly());
-					}
-				}
-
-				r.push(App.UI.DOM.generateLinksStrip(linkArray));
-				if (V.PC.counter.birthsTotal > 0) {
-					r.push(`You have given birth to ${V.PC.counter.birthsTotal} babies.`);
-				}
-			}
-
-			if (V.PC.boobs >= 300) {
-				r.push(`You have a`);
-				if (V.PC.title > 0) {
-					r.push(`masculine`);
-				} else {
-					r.push(`feminine`);
-				}
-				r.push(`body with`);
-				if (V.PC.boobs >= 1400) {
-					r.push(`giant${(V.PC.boobsImplant !== 0) ? `, fake` : ``} cow tits.`);
-				} else if (V.PC.boobs >= 1200) {
-					r.push(`huge`);
-					if (V.PC.boobsImplant !== 0) {
-						r.push(`fake`);
-					}
-					r.push(`breasts.`);
-				} else if (V.PC.boobs >= 1000) {
-					r.push(`big`);
-					if (V.PC.boobsImplant !== 0) {
-						r.push(`fake`);
-					}
-					r.push(`breasts.`);
-				} else if (V.PC.boobs >= 800) {
-					r.push(`noticeable breasts.`);
-				} else if (V.PC.boobs >= 650) {
-					r.push(`unremarkable breasts.`);
-				} else if (V.PC.boobs >= 500) {
-					r.push(`average breasts.`);
-				} else {
-					r.push(`small breasts.`);
-				}
-			} else {
-				if (V.PC.title > 0) {
-					r.push(`You have a manly chest.`);
-				} else {
-					r.push(`You are flat as a board.`);
-				}
-			}
-			App.Events.addNode(el, r, "p");
-		}
-
-		return el;
-	}
-
 	function interfaceContent() {
 		const el = new DocumentFragment();
 		let options = new App.UI.OptionsGroup();
@@ -1060,31 +632,4 @@ App.Intro.summary = function() {
 		el.append(App.UI.artOptions());
 		return el;
 	}
-
-	function noChange() {
-		return App.UI.DOM.link(
-			"Change to no change",
-			() => { V.PC.pregMood = 0; },
-			[],
-			"Intro Summary"
-		);
-	}
-
-	function motherly() {
-		return App.UI.DOM.link(
-			"Change to motherly",
-			() => { V.PC.pregMood = 1; },
-			[],
-			"Intro Summary"
-		);
-	}
-
-	function aggressive() {
-		return App.UI.DOM.link(
-			"Change to aggressive",
-			() => { V.PC.pregMood = 2; },
-			[],
-			"Intro Summary"
-		);
-	}
 };
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 74f7d86f2799b8caabb11ee1700a72063f46982a..9468771f11d8d28f54d940a53e64aed7166bc039 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -1,4 +1,6 @@
-App.Intro.pcAppearance = function(options) {
+App.UI.Player = {};
+
+App.UI.Player.appearance = function(options) {
 	options.addOption("Your nationality is", "nationality", V.PC).showTextBox()
 		.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))
 		.addComment("For best result capitalize it.");
@@ -6,24 +8,39 @@ App.Intro.pcAppearance = function(options) {
 	options.addOption("Your race is", "race", V.PC).showTextBox()
 		.addValueList(Array.from(setup.filterRaces, (k => [k, k.toLowerCase()])));
 
+	if (V.cheatMode) {
+		options.addOption("Your race is", "origRace", V.PC).showTextBox()
+			.addValueList(Array.from(setup.filterRaces, (k => [k, k.toLowerCase()])));
+	}
+
 	options.addOption("Your skin tone is", "skin", V.PC).showTextBox()
 		.addValueList(makeAList(setup.naturalSkins));
 
+	if (V.cheatMode) {
+		options.addOption("Your genetic skin tone is", "origSkin", V.PC).showTextBox()
+			.addValueList(makeAList(setup.naturalSkins));
+	}
+
 	options.addOption("Your body", "markings", V.PC)
 		.addValueList([["Is clear of blemishes", "none"], ["Has light freckling", "freckles"], ["Has heavy freckling", "heavily freckled"]]);
 
-	options.addOption("Your eyes are", "origColor", V.PC.eye).showTextBox()
+	options.addOption("Your genetic eye color is", "origColor", V.PC.eye).showTextBox()
 		.addValueList(makeAList(App.Medicine.Modification.eyeColor.map(color => color.value)));
 
-	options.addOption("Your hair is", "hColor", V.PC).showTextBox()
-		.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)));
+	if (V.cheatMode) {
+		options.addOption("Your original hair is", "origHColor", V.PC).showTextBox()
+			.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)));
+	} else {
+		options.addOption("Your hair is", "hColor", V.PC).showTextBox()
+			.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)));
+	}
 
 	function makeAList(iterable) {
 		return Array.from(iterable, (k => [capFirstChar(k), k]));
 	}
 };
 
-App.Intro.refreshmentChoice = function(options) {
+App.UI.Player.refreshmentChoice = function(options) {
 	options.addOption("Your preferred refreshment is", "refreshment", V.PC).showTextBox()
 		.addValue("Cigars", "cigar", () => { V.PC.refreshmentType = 0; })
 		.addValue("Whiskey", "whiskey", () => { V.PC.refreshmentType = 1; });
@@ -42,18 +59,820 @@ App.Intro.refreshmentChoice = function(options) {
 	option.addComment(comment);
 };
 
-App.Intro.PCNames = function(options) {
-	let option;
+App.UI.Player.names = function(options) {
 	options.addOption(`Everyone calls you <b>${PlayerName()}.</b>`);
 	options.addOption("Your given name is", "slaveName", V.PC).showTextBox();
 
+	if (V.cheatMode) {
+		options.addOption("Birth Name", "birthName", V.PC).showTextBox();
+	}
+
 	if (V.PC.slaveSurname === 0) {
-		option = options.addOption("And no surname", "slaveSurname", V.PC)
+		options.addOption("And no surname", "slaveSurname", V.PC)
 			.addValue("Add a surname", "Anon")
 			.addComment("Surnames cannot be changed during the game outside of special circumstances.");
 	} else {
-		option = options.addOption("And your surname is", "slaveSurname", V.PC).showTextBox()
+		options.addOption("And your surname is", "slaveSurname", V.PC).showTextBox()
 			.addValue("Go by a single name", 0)
 			.addComment("Surnames cannot be changed during the game outside of special circumstances.");
+		if (V.cheatMode) {
+			options.addOption("Birth Surname", "birthSurname", V.PC).showTextBox();
+		}
+	}
+};
+
+App.UI.Player.design = function() {
+	const el = new DocumentFragment();
+	let options = new App.UI.OptionsGroup();
+	let option;
+	let r;
+	let linkArray;
+	const allowEdits = (V.freshPC === 1 || V.saveImported === 0 || V.cheatMode);
+
+	// Title / age
+	if (allowEdits) {
+		options.addOption("You are a", "title", V.PC)
+			.addValue("Masculine Master", 1, () => V.PC.genes = "XY").addValue("Feminine Mistress", 0, () => V.PC.genes = "XX");
+
+		App.UI.Player.names(options);
+
+		V.PC.physicalAge = V.PC.actualAge;
+		V.PC.visualAge = V.PC.actualAge;
+		if (V.cheatMode) {
+			options.addOption("Actual Age", "actualAge", V.PC).showTextBox();
+			options.addOption("Physical Age", "physicalAge", V.PC).showTextBox();
+			options.addOption("Visual Age", "visualAge", V.PC).showTextBox();
+			options.addOption("Ovary Age", "ovaryAge", V.PC).showTextBox();
+			options.addOption("Age Implant", "ageImplant", V.PC).addValue("Age altering surgery", 1).on().addValue("No surgery", 0).off();
+		} else {
+			options.addOption("You are", "actualAge", V.PC).showTextBox()
+				.addRange(25, 35, "<", "Surprisingly young").addRange(40, 50, "<", "Entering middle age")
+				.addRange(55, 65, "<", "Well into middle age").addRange(70, 65, ">=", "Old");
+
+			options.addOption(`Your birthday was <strong>${V.PC.birthWeek}</strong> weeks ago.`, "birthWeek", V.PC).showTextBox();
+		}
+	} else {
+		r = [];
+		r.push(`You are a`);
+		if (V.PC.title === 1) {
+			r.push(`masculine <strong>Master</strong>`);
+		} else {
+			r.push(`feminine ''Mistress'`);
+		}
+		r.push(`and everyone that matters calls you	${PlayerName()}.`);
+
+		r.push(`You are ${V.PC.actualAge} years old which is`);
+		if (V.PC.actualAge >= 65) {
+			r.push(`<strong>old</strong>.`);
+		} else if (V.PC.actualAge >= 50) {
+			r.push(`<strong>well into middle age</strong>.`);
+		} else if (V.PC.actualAge >= 35) {
+			r.push(`<strong>entering middle age</strong>.`);
+		} else {
+			r.push(`<strong>surprisingly young</strong>.`);
+		}
+		App.Events.addNode(el, r, "p");
+	}
+
+	option = options.addOption("Player aging is", "playerAging")
+		.addValue("Enabled", 2).on().addValue("Celebrate birthdays, but don't age.", 1).neutral().addValue("Disabled", 0).off();
+	if (!V.cheatMode) {
+		option.addComment("This option cannot be changed during the game.");
+	}
+
+	if (V.PC.customTitle) {
+		options.addOption("Custom title", "customTitle", V.PC).showTextBox()
+			.addValue("Reset to default", "", () => { delete V.PC.customTitle; delete V.PC.customTitleLisp; });
+
+		options.addOption("Lisped custom title", "customTitleLisp", V.PC).showTextBox()
+			.addComment('If using a custom title, select Master or Mistress to set the gender of your title. Make sure to replace your "s"s with "th"s to have working lisps in your lisped title.');
+	} else {
+		options.addOption("Custom title", "customTitle", V.PC)
+			.addValue("Set custom title", "Master", () => V.PC.customTitleLisp = 'Mather');
+	}
+
+	// Appearance
+	if (allowEdits) {
+		App.UI.Player.appearance(options);
+
+		options.addOption("Your face is", "faceShape", V.PC)
+			.addValueList([
+				["Normal", "normal"],
+				["Androgynous", "androgynous"],
+				["Masculine", "masculine"],
+				["Cute", "cute"],
+				["Sensual", "sensual"],
+				["Exotic", "exotic"]
+			]);
+	} else {
+		r = [];
+
+		r.push(`You are a ${V.PC.nationality} ${V.PC.race} with`);
+		if (V.PC.markings === "heavily freckled") {
+			r.push(`heavily freckled`);
+		} else if (V.PC.markings === "freckles") {
+			r.push(`lightly freckled`);
+		} else {
+			r.push(`clear`);
+		}
+		r.push(`${V.PC.skin} skin, ${V.PC.hColor} hair and ${App.Desc.eyesColor(V.PC)}. You have a ${V.PC.faceShape} face.`);
+		App.Events.addNode(el, r, "p");
+	}
+
+	// Refresh
+	App.UI.Player.refreshmentChoice(options);
+
+	// History
+	if (allowEdits) {
+		option = options.addOption("Before you came to the Free Cities, you were a", "career", V.PC);
+		if (V.PC.career === "arcology owner") {
+			option.addValue("Arcology owner", "arcology owner");
+		} else {
+			option.addValueList([
+				["Member of the idle wealthy", "wealth"],
+				["Business leader", "capitalist"],
+				["Mercenary", "mercenary"],
+				["Slaver", "slaver"],
+				["Engineer", "engineer"],
+				["Doctor", "medicine"],
+				["Hacker", "BlackHat"],
+				["Minor celebrity", "celebrity"],
+				["Escort", "escort"],
+				["Servant", "servant"],
+				["Gang leader", "gang"]]
+			);
+			if (V.secExpEnabled > 0) {
+				switch (V.PC.career) {
+					case "capitalist":
+						option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`);
+						break;
+					case "mercenary":
+						option.addComment(`<div><span class="green">Easier to maintain security</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
+						break;
+					case "slaver":
+						option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
+						break;
+					case "engineer":
+						option.addComment(`<div><span class="yellowgreen">construction and upgrade of facilities will be cheaper.</span></div>`);
+						break;
+					case "medicine":
+						option.addComment(`<div><span class="yellowgreen">Drug upgrades will be cheaper.</span></div>`);
+						break;
+					case "celebrity":
+						option.addComment(`<div><span class="yellowgreen">The propaganda hub's upgrades will be cheaper.</span></div>`);
+						break;
+					case "escort":
+						option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
+						break;
+					case "servant":
+						option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
+						break;
+					case "gang":
+						option.addComment(`<div><span class="green">Easier to maintain authority</span> and <span class="yellowgreen">the security HQ's upgrades will be cheaper.</span></div>`);
+						break;
+					case "BlackHat":
+						option.addComment(`<div><span class="red">Harder to maintain authority.</span></div>`);
+						break;
+					default:
+						option.addComment(`<div><span class="red">Harder to maintain authority,</span> but <span class="yellowgreen">the propaganda hub's upgrades will be cheaper.</span></div>`);
+				}
+			}
+		}
+
+		options.addOption("It is rumored that you acquired your arcology through", "rumor", V.PC)
+			.addValueList([
+				["Wealth", "wealth"],
+				["Hard work", "diligence"],
+				["Force", "force"],
+				["Social engineering", "social engineering"],
+				["Blind luck", "luck"]
+			]);
+
+		el.append(options.render());
+	} else {
+		r = [];
+		switch (V.PC.career) {
+			case "wealth":
+				r.push(`Prior to being an arcology owner, you were a member of the idle wealthy.`);
+				break;
+			case "capitalist":
+				r.push(`Prior to being an arcology owner, you were a business leader.`);
+				break;
+			case "mercenary":
+				r.push(`Prior to being an arcology owner, you were a mercenary.`);
+				break;
+			case "slaver":
+				r.push(`Prior to being an arcology owner, you were a slaver.`);
+				break;
+			case "engineer":
+				r.push(`Prior to being an arcology owner, you were an engineer.`);
+				break;
+			case "medicine":
+				r.push(`Prior to being an arcology owner, you were a surgeon.`);
+				break;
+			case "celebrity":
+				r.push(`Prior to being an arcology owner, you were a minor celebrity.`);
+				break;
+			case "BlackHat":
+				r.push(`Prior to being an arcology owner, you specialized in cracking databases and making mockeries of cyber security.`);
+				break;
+			case "arcology owner":
+				r.push(`Being an arcology owner defines your life now.`);
+				break;
+			case "escort":
+				r.push(`Prior to being an arcology owner, you knew how to survive off your looks and body.`);
+				break;
+			case "servant":
+				r.push(`Prior to being an arcology owner, you served a well-off`);
+				if (V.PC.counter.birthMaster >= 2) {
+					r.push(`master and bore him several children.`);
+				} else {
+					r.push(`master.`);
+				}
+				break;
+			case "gang":
+				r.push(`Prior to being an arcology owner, you were the leader of a ruthless gang.`);
+				break;
+		}
+
+		r.push(`Word in the arcology is you acquired it through`);
+		switch (V.PC.rumor) {
+			case "wealth":
+				r.push(`a rather ridiculous amount of money.`);
+				break;
+			case "diligence":
+				r.push(`sheer effort.`);
+				break;
+			case "force":
+				r.push(`brutal force.`);
+				break;
+			case "social engineering":
+				r.push(`clever social manipulation.`);
+				break;
+			case "luck":
+				r.push(`blind luck.`);
+				break;
+		}
+		App.Events.addNode(el, r, "p");
+	}
+
+	// Sexuality
+	App.UI.DOM.appendNewElement("h2", el, "Sexuality");
+
+	if (allowEdits) {
+		options = new App.UI.OptionsGroup();
+
+		if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
+			State.temporary.vaginaPenis = 2;
+		} else if (V.PC.vagina !== -1) {
+			State.temporary.vaginaPenis = 1;
+		} else {
+			State.temporary.vaginaPenis = 0;
+		}
+
+		option = options.addOption("You have a", "vaginaPenis", State.temporary)
+			.addValue("Penis", 0, () => {
+				V.PC.preg = 0;
+				V.PC.pregType = 0;
+				V.PC.dick = 4;
+				V.PC.balls = 3;
+				V.PC.scrotum = 3;
+				V.PC.prostate = 1;
+				V.PC.vagina = -1;
+				V.PC.ovaries = 0;
+			}).addValue("Vagina", 1, () => {
+				V.PC.dick = 0;
+				V.PC.balls = 0;
+				V.PC.scrotum = 0;
+				V.PC.prostate = 0;
+				V.PC.vagina = 1;
+				V.PC.ovaries = 1;
+			}).addValue("Penis and Vagina", 2, () => {
+				V.PC.dick = 4;
+				V.PC.balls = 3;
+				V.PC.scrotum = 3;
+				V.PC.prostate = 1;
+				V.PC.vagina = 1;
+				V.PC.ovaries = 1;
+			});
+		if (State.temporary.vaginaPenis === 0) {
+			option.addComment("Standard sex scenes; easiest reputation maintenance.");
+		} else if (State.temporary.vaginaPenis === 1) {
+			option.addComment("Sex scene variations; most difficult reputation maintenance.");
+		} else {
+			option.addComment("Sex scene variations; more difficult reputation maintenance; some unique opportunities, especially with breasts.");
+		}
+
+		if (V.cheatMode) {
+			options.addOption("Vagina", "vagina", V.PC).showTextBox();
+			options.addOption("New vagina", "newVag", V.PC).showTextBox();
+			options.addOption("Dick", "dick", V.PC).showTextBox();
+			options.addOption("Balls", "balls", V.PC).addValueList([
+				["Normal", 3],
+				["Big", 5],
+				["Huge", 9],
+				["Monstrous", 30]
+			])
+				.showTextBox();
+			options.addOption("Balls implant", "ballsImplant", V.PC).showTextBox();
+		}
+
+		if (V.PC.vagina !== -1) {
+			option = options.addOption("You are", "preg", V.PC)
+				.addValue("Taking contraceptives", -1, () => { V.PC.pregType = 0; V.PC.labor = 0; })
+				.addValue("Not taking contraceptives", 0, () => { V.PC.pregType = 0; V.PC.labor = 0; })
+				.addRange(16, 37, "<=", "Pregnant").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; })
+				.addRange(40, 42, "<=", "Ready to drop").addCallback(() => { V.PC.pregType = 1; V.PC.labor = 0; })
+				.addRange(43, 42, ">", "Ready to drop with octuplets").addCallback(() => { V.PC.pregType = 8; V.PC.labor = 1; });
+			if (V.cheatMode) {
+				option.showTextBox();
+				option.addComment(`how far along your pregnancy is (pregMood kicks in at 24+ weeks) - -2: infertile, -1: contraceptives, 0: not pregnant, 1 - 42: pregnant, 43+: giving birth`);
+			}
+			if (V.PC.preg === -1) {
+				option.addComment("You can't get pregnant, however there will be a slight increase to living expenses.");
+			}
+
+			if (V.PC.counter.birthsTotal > 0) {
+				options.addOption("").addComment(`You have given birth to <strong>${V.PC.counter.birthsTotal}</strong> babies.`);
+			}
+
+			option = options.addOption("Hormone effects", "pregMood", V.PC)
+				.addValueList([
+					["None", 0],
+					["Caring and motherly", 1],
+					["Aggressive and domineering", 2]
+				]);
+			if (V.PC.pregMood === 1) {
+				option.addComment("Sex scene alterations; slaves will trust you more, but may try to take advantage of your mercy.");
+			} else if (V.PC.pregMood === 2) {
+				option.addComment("Sex scene alterations; slaves will fear you more, but will become more submissive to you.");
+			}
+
+			if (V.cheatMode) {
+				option = options.addOption("Fetus Count", "pregType", V.PC).showTextBox().addComment(`how many you're having (1-8)`);
+				option = options.addOption("Pregnancy Source", "pregSource", V.PC)
+					.addValueList([
+						["Unknown", 0],
+						["Self-impregnation", -1],
+						["Citizen", -2],
+						["Former Master", -3],
+						["Male arc owner", -4],
+						["Client", -5],
+						["Societal Elite", -6],
+						["Designer baby", -7],
+						["Futanari Sister", -9],
+					])
+					.showTextBox();
+			}
+		}
+
+		if (V.PC.title === 1 && V.PC.boobs <= 100) {
+			option = options.addOption("Your chest is", "boobs", V.PC).addValue("Manly", 100, () => V.PC.boobsImplant = 0);
+		} else {
+			option = options.addOption("Your breasts are", "boobs", V.PC).addValue("Flat", 100, () => V.PC.boobsImplant = 0);
+		}
+		option.addValueList([
+			["C-cups", 500],
+			["DD-cups", 900],
+			["F-cups", 1100],
+			["G-cups", 1300]
+		]);
+		option.showTextBox("CCs");
+
+		if (V.PC.boobs >= 500) {
+			options.addOption("Your breasts are", "boobsImplant", V.PC)
+				.addValueList([
+					["All natural", 0],
+					["Fake", 400]
+				])
+				.showTextBox("CCs");
+		}
+
+		if (V.cheatMode) {
+			if (V.PC.boobs >= 500) {
+				options.addOption("Your breasts are", "lactation", V.PC)
+					.addValueList([
+						["Lactating", 1],
+						["Not Lactating", 0]
+					]);
+			}
+		}
+
+		options.addOption("Your butt size", "butt", V.PC)
+			.addValueList([
+				["Normal", 2],
+				["Big", 3],
+				["Huge", 4],
+				["Enormous", 5],
+			])
+			.showTextBox();
+
+		options.addOption("Your butt is", "buttImplant", V.PC)
+			.addValueList([
+				["All natural", 0],
+				["Fake", 1]
+			])
+			.showTextBox("CCs");
+
+
+		options.addOption("You are genetically", "genes", V.PC)
+			.addValue("XY").addValue("XX");
+
+		el.append(options.render());
+	} else {
+		r = [];
+		r.push(`You have a`);
+		if (V.PC.vagina !== -1 && V.PC.dick !== 0) {
+			r.push(`penis and vagina`);
+		} else if (V.PC.dick !== 0) {
+			r.push(`penis.`);
+		} else if (V.PC.vagina !== -1) {
+			r.push(`vagina`);
+		}
+		if (V.PC.vagina !== -1) {
+			r.push(`and are`);
+			if (V.PC.pregWeek < 0) {
+				r.push(`recovering from your last pregnancy.`);
+			} else if (V.PC.preg === -2) {
+				r.push(`infertile.`);
+			} else if (V.PC.preg === -1) {
+				r.push(`taking contraceptives.`);
+			} else if (V.PC.preg === 0) {
+				r.push(`fertile.`);
+			} else if (V.PC.preg > 37) {
+				r.push(`extremely pregnant.`);
+			} else if (V.PC.preg > 0) {
+				r.push(`pregnant.`);
+			}
+
+			linkArray = [];
+			if (V.PC.preg > 20 || V.PC.counter.birthsTotal > 0) {
+				if (V.PC.pregMood === 1) {
+					r.push(`You tend to be caring and motherly when you're pregnant.`);
+					linkArray.push(noChange(), aggressive());
+				} else if (V.PC.pregMood === 0) {
+					r.push(`Pregnancy doesn't really affect your mood.`);
+					linkArray.push(motherly(), aggressive());
+				} else {
+					r.push(`You tend to be very demanding and aggressive when you're pregnant.`);
+					linkArray.push(noChange(), motherly());
+				}
+			} else {
+				if (V.PC.pregMood === 1) {
+					r.push(`You tend to be caring and motherly when you're hormonal.`);
+					linkArray.push(noChange(), aggressive());
+				} else if (V.PC.pregMood === 0) {
+					r.push(`Your mood isn't tied to your hormones.`);
+					linkArray.push(motherly(), aggressive());
+				} else {
+					r.push(`You tend to be very demanding and aggressive when you're hormonal.`);
+					linkArray.push(noChange(), motherly());
+				}
+			}
+
+			r.push(App.UI.DOM.generateLinksStrip(linkArray));
+			if (V.PC.counter.birthsTotal > 0) {
+				r.push(`You have given birth to ${V.PC.counter.birthsTotal} babies.`);
+			}
+		}
+
+		if (V.PC.boobs >= 300) {
+			r.push(`You have a`);
+			if (V.PC.title > 0) {
+				r.push(`masculine`);
+			} else {
+				r.push(`feminine`);
+			}
+			r.push(`body with`);
+			if (V.PC.boobs >= 1400) {
+				r.push(`giant${(V.PC.boobsImplant !== 0) ? `, fake` : ``} cow tits.`);
+			} else if (V.PC.boobs >= 1200) {
+				r.push(`huge`);
+				if (V.PC.boobsImplant !== 0) {
+					r.push(`fake`);
+				}
+				r.push(`breasts.`);
+			} else if (V.PC.boobs >= 1000) {
+				r.push(`big`);
+				if (V.PC.boobsImplant !== 0) {
+					r.push(`fake`);
+				}
+				r.push(`breasts.`);
+			} else if (V.PC.boobs >= 800) {
+				r.push(`noticeable breasts.`);
+			} else if (V.PC.boobs >= 650) {
+				r.push(`unremarkable breasts.`);
+			} else if (V.PC.boobs >= 500) {
+				r.push(`average breasts.`);
+			} else {
+				r.push(`small breasts.`);
+			}
+		} else {
+			if (V.PC.title > 0) {
+				r.push(`You have a manly chest.`);
+			} else {
+				r.push(`You are flat as a board.`);
+			}
+		}
+		App.Events.addNode(el, r, "p");
+	}
+
+
+	if (V.cheatMode) {
+		// Skills
+		App.UI.DOM.appendNewElement("h2", el, "Skills");
+		options = new App.UI.OptionsGroup();
+		options.addOption(`Trading: ${tradingDescription()}`, "trading", V.PC.skill).addValueList([
+			["Economics master", 100],
+			["Economics expert", 90],
+			["Skilled in economics", 70],
+			["Amateur economist", 50],
+			["Economics beginner", 30],
+			["Basic trader", 0],
+			["Haggler", -10],
+			["Shopper", -30],
+			["Weak saver", -50],
+			["Money sieve", -70],
+			["What's a trading?", -90],
+		]).showTextBox();
+
+		options.addOption(`Warfare: ${warfareDescription()}`, "warfare", V.PC.skill).addValueList([
+			["Warfare master", 100],
+			["Warfare expert", 90],
+			["Skilled in warfare", 70],
+			["Amateur combatant", 50],
+			["Combat beginner", 30],
+			["Basic fighter", 0],
+			["Gun haver", -10],
+			["Knife holder", -30],
+			["Throat puncher", -50],
+			["Groin kicker?", -70],
+			["Most likely to be raped", -90]
+		]).showTextBox();
+
+		options.addOption(`Slaving: ${slavingDescription()}`, "slaving", V.PC.skill).addValueList([
+			["Master slaver", 100],
+			["Expert slaver", 90],
+			["Skilled in slaving", 70],
+			["Amateur slaver", 50],
+			["Slaving beginner", 30],
+			["Basic slaver", 0],
+			["Can't make me a slave", -10],
+			["Can read contracts", -30],
+			["Careful now", -50],
+			["Don't trust that guy", -70],
+			["Potential slave", -90]
+		]).showTextBox();
+
+		options.addOption(`Engineering: ${engineeringDescription()}`, "engineering", V.PC.skill).addValueList([
+			["Master engineer", 100],
+			["Expert engineer", 90],
+			["Skilled in engineering", 70],
+			["Amateur engineer", 50],
+			["Engineering beginner", 30],
+			["Basic engineer", 0],
+			["Gingerbread house", -10],
+			["Knot tyer", -30],
+			["You can use glue", -50],
+			["You aren't handy", -70],
+			["My hovercraft is full of eels", -90]
+		]).showTextBox();
+
+		options.addOption(`Medicine: ${medicineDescription()}`, "medicine", V.PC.skill).addValueList([
+			["Master surgeon", 100],
+			["Expert surgeon", 90],
+			["Skilled in medicine", 70],
+			["Amateur surgeon", 50],
+			["Medical beginner", 30],
+			["Basic medic", 0],
+			["Can treat wounds", -10],
+			["First-aid kit user", -30],
+			["Band-aid applier", -50],
+			["MEDIC!", -70],
+			["Give me another beer", -90]
+		]).showTextBox();
+
+		options.addOption(`Hacking: ${hackingDescription()}`, "hacking", V.PC.skill).addValueList([
+			["Master hacker", 100],
+			["Expert hacker", 90],
+			["Skilled hacker", 70],
+			["Amateur hacker", 50],
+			["Hacking beginner", 30],
+			["Basic hacker", 0],
+			["Mouse clicker", -10],
+			["You can press Enter", -30],
+			[`Where's the "any" key?`, -50],
+			["Main screen turn on?", -70],
+			["Ooh, cool glowy thingy!", -90]
+		]).showTextBox();
+
+		el.append(options.render());
+
+		// Family
+		App.UI.DOM.appendNewElement("h2", el, "Family");
+		options = new App.UI.OptionsGroup();
+		options.addOption(`Your mother ID`, "mother", V.PC).showTextBox();
+		options.addOption(`Your father ID`, "father", V.PC).showTextBox();
+		el.append(options.render());
+
+		// Potential
+		App.UI.DOM.appendNewElement("h2", el, "Misc");
+		options = new App.UI.OptionsGroup();
+		options.addOption(`Sexual Energy`, "sexualEnergy", V.PC).showTextBox();
+		options.addOption(`Cum Tap`, "cumTap", V.PC.skill).showTextBox();
+		options.addOption(`Stored Cum`, "storedCum", V.PC.counter).showTextBox();
+		options.addOption(`Fertility Drugs`, "fertDrugs", V.PC)
+			.addValue("Yes", 1).on()
+			.addValue("No", 0).off();
+		options.addOption(`Forced Fertility Drugs`, "forcedFertDrugs", V.PC).showTextBox();
+		options.addOption(`Stamina Pills`, "staminaPills", V.PC)
+			.addValue("Yes", 1).on()
+			.addValue("No", 0).off();
+		el.append(options.render());
+	}
+
+	return el;
+
+	function noChange() {
+		return App.UI.DOM.link(
+			"Change to no change",
+			() => { V.PC.pregMood = 0; },
+			[],
+			"Intro Summary"
+		);
+	}
+
+	function motherly() {
+		return App.UI.DOM.link(
+			"Change to motherly",
+			() => { V.PC.pregMood = 1; },
+			[],
+			"Intro Summary"
+		);
+	}
+
+	function aggressive() {
+		return App.UI.DOM.link(
+			"Change to aggressive",
+			() => { V.PC.pregMood = 2; },
+			[],
+			"Intro Summary"
+		);
+	}
+
+	function tradingDescription() {
+		if (V.PC.skill.trading >= 100) {
+			return `You are a master at economics and trading.`;
+		} else if (V.PC.skill.trading >= 80) {
+			return `You are an expert at economics and trading.`;
+		} else if (V.PC.skill.trading >= 60) {
+			return `You are skilled in economics and trading.`;
+		} else if (V.PC.skill.trading >= 40) {
+			return `You know some things about economics and trading.`;
+		} else if (V.PC.skill.trading >= 20) {
+			return `You are a beginner in economics.`;
+		} else if (V.PC.skill.trading >= 0) {
+			return `You know only the basics of trading.`;
+		} else if (V.PC.skill.trading >= -20) {
+			return `You know how to haggle a little.`;
+		} else if (V.PC.skill.trading >= -40) {
+			return `You know how to shop around.`;
+		} else if (V.PC.skill.trading >= -60) {
+			return `You know not to pay sticker price.`;
+		} else if (V.PC.skill.trading >= -80) {
+			return 	`People always give you discounts, but you never save any money.`;
+		} else {
+			return `They said it was a bear market, so where are the bears?`;
+		}
+	}
+
+	function warfareDescription() {
+		if (V.PC.skill.warfare >= 100) {
+			return `You are a master of warfare.`;
+		} else if (V.PC.skill.warfare >= 80) {
+			return `You are an expert at tactics and strategy.`;
+		} else if (V.PC.skill.warfare >= 60) {
+			return `You are skilled in combat.`;
+		} else if (V.PC.skill.warfare >= 40) {
+			return `You know some things about combat.`;
+		} else if (V.PC.skill.warfare >= 20) {
+			return `You are a beginner in tactics and strategy.`;
+		} else if (V.PC.skill.warfare >= 0) {
+			return `You know only the basics of fighting.`;
+		} else if (V.PC.skill.warfare >= -20) {
+			return `You know how to hold a gun.`;
+		} else if (V.PC.skill.warfare >= -40) {
+			return `You know how to stab with a knife.`;
+		} else if (V.PC.skill.warfare >= -60) {
+			return `Go for the throat?`;
+		} else if (V.PC.skill.warfare >= -80) {
+			return `Just kick them in the balls, right?`;
+		} else {
+			return `People like you are usually the first raped in a war.`;
+		}
+	}
+
+	function slavingDescription() {
+		if (V.PC.skill.slaving >= 100) {
+			return `You are a master slaver.`;
+		} else if (V.PC.skill.slaving >= 80) {
+			return `You are an expert at enslaving.`;
+		} else if (V.PC.skill.slaving >= 60) {
+			return `You are skilled in slaving.`;
+		} else if (V.PC.skill.slaving >= 40) {
+			return `You know some things about getting slaves.`;
+		} else if (V.PC.skill.slaving >= 20) {
+			return `You are a beginner in slaving.`;
+		} else if (V.PC.skill.slaving >= 0) {
+			return `You know only the basics of slaving.`;
+		} else if (V.PC.skill.slaving >= -20) {
+			return `You know how to avoid becoming a slave.`;
+		} else if (V.PC.skill.slaving >= -40) {
+			return `You know to read contracts before you sign them.`;
+		} else if (V.PC.skill.slaving >= -60) {
+			return `You know to be careful.`;
+		} else if (V.PC.skill.slaving >= -80) {
+			return `You know better than to trust anyone.`;
+		} else {
+			return `It would be easy to enslave you.`;
+		}
+	}
+
+	function engineeringDescription() {
+		if (V.PC.skill.engineering >= 100) {
+			return `You are a master engineer.`;
+		} else if (V.PC.skill.engineering >= 80) {
+			return `You are an expert at engineering.`;
+		} else if (V.PC.skill.engineering >= 60) {
+			return `You are skilled in engineering.`;
+		} else if (V.PC.skill.engineering >= 40) {
+			return `You know some things about engineering.`;
+		} else if (V.PC.skill.engineering >= 20) {
+			return `You are a beginner in engineering.`;
+		} else if (V.PC.skill.engineering >= 0) {
+			return `You know only the basics of engineering.`;
+		} else if (V.PC.skill.engineering >= -20) {
+			return `You can build a gingerbread house that doesn't collapse.`;
+		} else if (V.PC.skill.engineering >= -40) {
+			return `You can tie a tight knot, does that count?`;
+		} else if (V.PC.skill.engineering >= -60) {
+			return `Glue is your friend; lots of it.`;
+		} else if (V.PC.skill.engineering >= -80) {
+			return `You know better than to even try to build something.`;
+		} else {
+			return `You can cook; that's sort of like building something, right?`;
+		}
+	}
+
+	function medicineDescription() {
+		if (V.PC.skill.medicine >= 100) {
+			return `You are a master surgeon.`;
+		} else if (V.PC.skill.medicine >= 80) {
+			return `You are an expert at medicine and surgery.`;
+		} else if (V.PC.skill.medicine >= 60) {
+			return `You are skilled in surgery.`;
+		} else if (V.PC.skill.medicine >= 40) {
+			return `You know some things about medicine.`;
+		} else if (V.PC.skill.medicine >= 20) {
+			return `You are a beginner in medicine.`;
+		} else if (V.PC.skill.medicine >= 0) {
+			return `You know the basics of treating injuries.`;
+		} else if (V.PC.skill.medicine >= -20) {
+			return `You can stop a wound from getting infected.`;
+		} else if (V.PC.skill.medicine >= -40) {
+			return `Gauze is your friend. Just keep wrapping.`;
+		} else if (V.PC.skill.medicine >= -60) {
+			return `You know how to apply a band-aid.`;
+		} else if (V.PC.skill.medicine >= -80) {
+			return `Cure-alls are wonderful. Why aren't they sold in stores, though?`;
+		} else {
+			return `Alcohol makes pain go away, right?`;
+		}
+	}
+
+	function hackingDescription() {
+		if (V.PC.skill.hacking >= 100) {
+			return `You are a master of hacking.`;
+		} else if (V.PC.skill.hacking >= 80) {
+			return `You are an expert at hacking.`;
+		} else if (V.PC.skill.hacking >= 60) {
+			return `You are skilled in hacking.`;
+		} else if (V.PC.skill.hacking >= 40) {
+			return `You know some things about hacking.`;
+		} else if (V.PC.skill.hacking >= 20) {
+			return `You are a beginner in hacking.`;
+		} else if (V.PC.skill.hacking >= 0) {
+			return `You know only the basics of hacking.`;
+		} else if (V.PC.skill.hacking >= -20) {
+			return `You know how to click a mouse.`;
+		} else if (V.PC.skill.hacking >= -40) {
+			return `Enter does something?`;
+		} else if (V.PC.skill.hacking >= -60) {
+			return `Where is the "any" key?`;
+		} else if (V.PC.skill.hacking >= -80) {
+			return `You can push the power button, good job.`;
+		} else {
+			return `This black box thingy is magical.`;
+		}
 	}
 };
diff --git a/src/events/intro/pcAppearanceIntro.tw b/src/events/intro/pcAppearanceIntro.tw
index 3c9e22e1a7c2e1dad0f27aeb1c15faaf32ce1c61..3854ab1ddaba89663f214985123f95b35b00ad02 100644
--- a/src/events/intro/pcAppearanceIntro.tw
+++ b/src/events/intro/pcAppearanceIntro.tw
@@ -7,7 +7,7 @@
 	</div>
 </p>
 <<set _options = new App.UI.OptionsGroup()>>
-<<run App.Intro.pcAppearance(_options)>>
+<<run App.UI.Player.appearance(_options)>>
 <<includeDOM _options.render()>>
 
 <p>
diff --git a/src/events/intro/pcBodyIntro.js b/src/events/intro/pcBodyIntro.js
index 9be66507771b9aa167c32bd44fc1ecf4bba2b646..f22df55907db368a7b9cf8cda7ceb257ba3a63f5 100644
--- a/src/events/intro/pcBodyIntro.js
+++ b/src/events/intro/pcBodyIntro.js
@@ -150,8 +150,8 @@ App.Intro.PCBodyIntro = function() {
 
 		App.UI.DOM.appendNewElement("div", el, `What is your name and alternate indulgence?`, ["intro", "question"]);
 
-		App.Intro.PCNames(options);
-		App.Intro.refreshmentChoice(options);
+		App.UI.Player.names(options);
+		App.UI.Player.refreshmentChoice(options);
 
 		el.append(options.render());
 
diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw
index 91c652644efba7938f41f55555e20a6acfaae30f..fb27d0d6a64b42d2849a66064f2f1098474d4c3f 100644
--- a/src/pregmod/managePersonalAffairs.tw
+++ b/src/pregmod/managePersonalAffairs.tw
@@ -5,7 +5,7 @@
 <<set _ML = $marrying.length>>
 
 <<if $cheatMode == 1>>
-	<div class="cheat-menu">[[Cheat Edit Player|PCCheatMenu][$cheater = 1]]</div>
+	<div class="cheat-menu">[[Cheat Edit Player|PCCheatMenu][$cheater = 1, $backupSlave = clone($PC)]]</div>
 <</if>>
 
 <h1>Personal Affairs</h1>