diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..7f329418dbcf47d5eb67d057f07b664de83b496b
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,29 @@
+# Build and run an FC Docker container
+# $ docker build -t fc .
+# $ docker run -d --rm -p 8080:80 fc
+# Access with brownser at http://localhost:8080
+
+# Compile
+FROM ubuntu
+ENV DEBIAN_FRONTEND=noninteractive
+ENV TZ=America/New_York
+RUN apt update
+RUN apt install -y git
+WORKDIR /opt
+RUN git clone https://gitgud.io/pregmodfan/fc-pregmod.git
+WORKDIR /opt/fc-pregmod
+RUN chmod +x devTools/tweeGo/tweego_nix*
+RUN bash ./compile.sh
+
+# Install the 3d renders hosted on mega.nz
+RUN apt install -y megatools unzip
+WORKDIR /tmp
+RUN megadl --path=renders.zip https://mega.nz/#!upoAlBaZ!EbZ5wCixxZxBhMN_ireJTXt0SIPOywO2JW9XzTIPhe0
+RUN unzip renders.zip
+RUN cp -r 'Free Cities v 0.10.4 renders'/resources /opt/fc-pregmod/bin/
+
+# Serve with nginx
+FROM nginx
+COPY --from=0 /opt/fc-pregmod/bin /usr/share/nginx/html
+WORKDIR /usr/share/nginx/html
+RUN mv FC_pregmod.html index.html
diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index ae3c8f9efb2a65dd092c3192a8db45b2399a3512..77854e982ad0a54bd4b81558fee78ffe1129e132 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -1040,8 +1040,7 @@ App.Data.resetOnNGPlus = {
 	Bodyguard: 0,
 	/** @type {FC.SlaveStateOrZero} */
 	Madam: 0,
-	/** @type {FC.SlaveStateOrZero} */
-	DJ: 0,
+	djID: 0,
 	/** @type {FC.SlaveStateOrZero} */
 	Milkmaid: 0,
 	milkmaidImpregnates: 0,
diff --git a/js/003-data/miscDataNames.js b/js/003-data/miscDataNames.js
index dca8ed645e39c51273d3e2041e963f7a22b1fda6..17141f7cd0716c68ac55377e79ba629f2c799ca5 100644
--- a/js/003-data/miscDataNames.js
+++ b/js/003-data/miscDataNames.js
@@ -50,7 +50,7 @@ App.Data.misc.arubanSlaveNames = ["Aafke", "Aaghie", "Aaltje", "Abigail", "Ada",
 App.Data.misc.arubanMaleNames = ["Aalbert", "Aarend", "Aart", "Adriaan", "Adriaen", "Aelbert", "Aidan", "Andre", "Andreas", "Andrew", "Andries", "Annuar", "Anthonij", "Anthonius", "Anthony", "Anton", "Ariaantje", "Arjen", "Arnold", "Arte", "Aubrey", "Augustyn", "Austin", "Baltus", "Barent", "Barthold", "Bastiaan", "Bill", "Bram", "Brandon", "Brian", "Bryan", "Carl", "Caspar", "Christiaan", "Christoffel", "Claas", "Clemens", "Conrad", "Constantijn", "Coos", "Cor", "Cornelis", "Cornelius", "Daam", "Daendels", "Damil", "Daniel", "David", "Davy", "Diderik", "Diederik", "Dionijs", "Dirck", "Dirk", "Dolf", "Dorus", "Dries", "Duncan", "Dwight", "Dylan", "Dyllan", "Eargenell", "Eduard", "Edward", "Edwin", "Eelke", "Egbert", "Elvis", "Emanuel", "Emile", "Epke", "Eric", "Ericko", "Erik", "Erixon", "Esmar", "Faas", "Feddison", "Felipe", "Fiderd", "Fijtge", "Floris", "Francois", "Franklin", "Frans", "Freddy", "Frederek", "Freek", "Frem", "Geerard", "Geerd", "Geert", "George", "Gerard", "Gerolt", "Geronimo", "Gerrit", "Gervaas", "Giel", "Gijsbert", "Gino", "Giovanni", "Govert", "Gregor", "Gregorio", "Gysbert", "Hannes", "Harlen", "Harman", "Hendrick", "Hendrik", "Hendrikus", "Hubrecht", "Huib", "Huijbert", "Huybert", "Huyck", "Huygen", "Ireneus", "Irving", "Izaak", "Jaap", "Jacobus", "Jakob", "Jan", "Jantje", "Japie", "Jason", "Javier", "Jayme", "Jeamirr", "Jean-Marc", "Jean-Pierre", "Jean", "Jeanmarc", "Jeanpierre", "Jefferson", "Jeffrey", "Jemal", "Jeroen", "Jesus", "Joannes", "Jochem", "Joel", "Johan", "Johannes", "Johnatan", "Jonathan", "Joop", "Joost", "Jordy", "Joren", "Jorgen", "Joris", "Jos", "Joshua", "Juan", "Junior", "Justice", "Karel", "Keven", "Kevin", "Kim", "Kimball", "Klaas", "Kobie", "Koenrad", "Krelis", "Laurens", "Leendert", "Leo", "Leroy", "Lieb", "Lieuwe", "Liomar", "Lionel", "Lodewijk", "Lucien", "Lukas", "Lusger", "Maarten", "Maartje", "Mannus", "Manuel", "Marc", "Marcel", "Marco", "Marinus", "Mark", "Marlon", "Marthinus", "Martijn", "Martin", "Mathys", "Matthew", "Matthys", "Menno", "Mertijn", "Mewis", "Michael", "Miguel", "Mikel", "Mitchel", "Nathan", "Neeltje", "Nickenson", "Nicolaes", "Niek", "Niels", "Nigel", "Nijs", "Nikolaas", "Nys", "Okkert", "Paulus", "Peter", "Pierre", "Piet", "Pieter", "Pouw", "Priit", "Quincy", "Raymond", "Reignier", "Reimond", "Rembrandt", "Rensy", "Renze", "Riaan", "Richard", "Ricky", "Rijkaard", "Rijkerd", "Rip", "Robbert", "Roeland", "Roelof", "Roger", "Rogier", "Rombert", "Ronald", "Ruben", "Rutger", "Rutgert", "Rykaard", "Samuel", "Sander", "Sean", "Sebastiaan", "Shakyll", "Shane", "Sijthoff", "Snouck", "Staaf", "Staats", "Stephanus", "Steven", "Stoffel", "Stuart", "Surae", "Sylvester", "Theric", "Theunis", "Thijs", "Thomas", "Tiebout", "Tobias", "Toff", "Toon", "Tryntje", "Tymen", "Uys", "Vaast", "Valentijn", "Victor", "Walter", "Wilhelmus", "Willem-Jan", "Willem", "William", "Wim", "Wouter", "Wuill", "Youri", "Zaithyel"];
 App.Data.misc.arubanSlaveSurnames = ["Abath", "Abdul", "Albertsz", "Albertus", "Alvarez", "Antersijn", "Arias", "Balinge", "Barradas", "Baten", "Bekhof", "Bennet", "Bennett", "Bermudez", "Berry", "Biermanns", "Bislick", "Bislik", "Bisslik", "Boekhoudt", "Bolton", "Breell", "Breinburg", "Brown", "Bruges", "Bruin", "Burgos", "Cabarcas", "Canword", "Cecilia", "Celaire", "Chow", "Croes", "Daniel", "Dankerlui", "Danso", "de Veer", "de Windt", "Diaz", "Didder", "Dirksz", "Donata", "Dorothal", "Dreischor", "Dubero", "Duncan", "Ecury", "Elisabeth", "Eman", "Emerencia", "Escalona", "Evangelista", "Evertz", "Fang", "Faro", "Farrell", "Felix", "Fingal", "Flanders", "Flemming", "Fradl", "Frank", "Geerman", "Giel", "Goeloe", "Gomez", "Gómez", "Gouveia", "Gross", "Groters", "Helder", "Henriquez", "Hernandez", "Herrlein", "Heyden", "Hincapié", "Hodge", "Hoevertsz", "Holloway", "Homoet", "Howell", "Irausquin", "Jackson", "Janssen", "John", "Juddan", "Julsing", "Jurriens", "Kaarsbaan", "Kock", "Koolman", "Krosendijk", "Krozendijk", "Kwidama", "Lacle", "Laclé", "Lampe", "Le Grand", "Lee", "Leeuwe", "Leijdekkers", "Lejuez", "Lentink", "Leslie", "Lispier", "Loermans", "Loopstok", "Lopez", "Lourens", "Luitjes", "Maduro", "Malmaceda", "Mansur", "Marchena", "Martha", "Martijn", "Martinus", "Marugg", "Mata", "Melis", "Mendoza", "Millerson", "Montilla", "Mulder", "Neagoy", "Nedd", "Nicolaas", "Nunes", "Oduber", "Oehlers", "Offringa", "Pablo", "Paul", "Pereira", "Peterson", "Pieternella", "Pieterz", "Pimentel", "Pina", "Piter", "Polo", "Ponson", "Postma", "Ras", "Rasmijn", "Raven", "Refunjol", "Renfro", "Reyes", "Reynierse", "Richmon", "Ridderstap", "Rodriguez", "Roodzant", "Rosaria", "Rua", "Ruiz", "Samson", "Santos", "Sarman", "Scaroni", "Schreuders", "Semeleer", "Seraus", "Sheppard", "Smit", "Smith", "Sousa", "Steenbakkers", "Stewart", "Stock", "Tai", "Taylor", "Thomas", "Thuis", "Tiel", "Trejo", "Tromp", "Ulacio", "van Aanholt", "van den Berg", "van der Berg", "van der Biezen", "van der Horn", "van der Linde", "van der Linden", "van der Sloot", "van der Velden", "van Hoek", "van Putten", "van Vilet", "Vega", "Vegas", "Verhoeks", "Vieira", "Vilchez", "Villar", "Vis", "Visser", "Vlinder", "Vrolijk", "Vrolyk", "Wanga", "Wauban", "Wegereef", "Werleman", "Wernet", "Wester", "Wever", "Wijshijer", "Yrausquin", "Zimmerman"];
 
-App.Data.misc.australianSlaveNames = ["Aaliyah", "Abbey", "Abbie", "Abby", "Abigail", "Ada", "Addison", "Adelaide", "Adele", "Adeline", "Agatha", "Agnes", "Aisha", "Alana", "Alberta", "Alda", "Aletha", "Alexandra", "Alexandria", "Alexis", "Alice", "Alison", "Alodie", "Althea", "Alycia", "Alyssa", "Amanda", "Amber", "Amelia", "Amelie", "Amethyst", "Amy", "Anastasia", "Andrea", "Angela", "Angelina", "Ann-Maree", "Ann", "Anna", "Annabel", "Annabelle", "Annaleise", "Anne", "Anneliisa", "Annelisa", "Annette", "Annie", "Anthea", "Araminta", "Arden", "Aria", "Ariana", "Arlen", "Asha", "Ashlea", "Ashlee", "Ashleigh", "Ashley", "Aslea", "Astrid", "Aubree", "Aubrey", "Audra", "Audrey", "Aurelia", "Aurora", "Ava", "Avena", "Avery", "Avril", "Ayla", "Azaria", "Bambi", "Barbara", "Beatrice", "Beatrix", "Belinda", "Bella", "Benita", "Bernadette", "Bertha", "Beryl", "Bethany", "Beverly", "Billie", "Binny", "Bliss", "Bonnie", "Brdiget", "Bree", "Bridey", "Bridget", "Bridgette-Rose", "Bridgette", "Brilliana", "Britannia", "Brittany", "Brittni", "Brody", "Bronwyn", "Brooke", "Caitlin", "Caitlyn", "Camilla", "Camille", "Candice", "Caris", "Carlene", "Carly", "Carmel", "Carol", "Carole", "Caroline", "Carolyn", "Carrol", "Casey", "Cassandra", "Cassi", "Cassidy", "Cassie", "Catherine", "Cathrine", "Cathy", "Cecily", "Celestine", "Chanel", "Chantelle", "Charlene", "Charli", "Charlie", "Charlotte", "Charmaine", "Chelsea", "Cheryl", "Chloe", "Christine", "Christy", "Cicely", "Cinderella", "Claire", "Clara", "Clare", "Clarissa", "Claudia", "Clemency", "Clementine", "Codie", "Connie", "Constance", "Courtney", "Crispina", "Cynthia", "Dahlia", "Daisy", "Dana", "Dani", "Danielle", "Danna", "Daphne", "Darla", "Davina", "Dayanna", "Debbie", "Deedee", "Della", "Delsie", "Delta", "Denise", "Dennae", "Diana", "Diane", "Donna", "Doreen", "Doris", "Dorothy", "Eden", "Edith", "Edna", "Edwina", "Eglantine", "Elda", "Eleanor", "Elena", "Eliana", "Elise", "Eliza", "Elizabeth", "Ella", "Ellen", "Ellery", "Ellie", "Elodie", "Eloise", "Elouise", "Elsie", "Elyse", "Emeline", "Emery", "Emilia", "Emilie", "Emily", "Emma", "Erica", "Erin", "Ernestine", "Esma", "Essie", "Estella", "Ethel", "Eugenie", "Eva", "Eve", "Eveline", "Evelyn", "Evie", "Faith", "Felicity", "Fiona", "Flora", "Florence", "Frances", "Francesca", "Frankie", "Freya", "Friday", "Frideswide", "Gabriella", "Gael", "Gail", "Gemma", "Genevieve", "Georgia", "Georgie", "Georgina", "Geraldine", "Gillian", "Giulia", "Gladys", "Gloria", "Gloriana", "Grace", "Hailey", "Hanna", "Hannah", "Harlow", "Harper", "Harriet", "Hayley", "Hazel", "Heidi", "Helen", "Henrietta", "Hereswith", "Hester", "Holly", "Honor", "Hyacinth", "Ida", "Iggy", "Imogen", "Indiana", "Ineke", "Iona", "Irene", "Isabel", "Isabella", "Isabelle", "Isla", "Ivy", "Jacinta", "Jackie", "Jacqueline", "Jacquetta", "Jade", "Jamie", "Jan", "Jana", "Jane", "Janelle", "Janet", "Janice", "Janine", "Jasmine", "Jaye-Leanne", "Jaye", "Jazmyn", "Jean", "Jemima", "Jemma", "Jene", "Jenna", "Jennifer", "Jennine", "Jenny", "Jesinta", "Jess", "Jessamine", "Jessamy", "Jessamyn", "Jessica", "Jessie", "Jill", "Jilly", "Joan", "Joanna", "Joanne", "Jocelyn", "Jodi", "Jodie", "Johanna", "Jolene", "Joselyn", "Josephine", "Joy", "Juanita", "Judith", "Judy", "Julia", "Juliana", "Julie", "June", "Justine", "Kahili", "Kailey", "Kaitlyn", "Karen", "Karli", "Kate", "Kath", "Katherine", "Kathryn", "Katie", "Katrina", "Kay", "Kayla", "Kelly", "Kelsey", "Kendall", "Kerry", "Kerryn", "Ketrina", "Kim", "Kimberley", "Kirste", "Kirsten", "Kirstin", "Kirsty", "Krishna", "Kristal", "Kristen", "Krystal", "KVIIIlyn", "Kylie", "Kym", "Lacey", "Lara", "Laura", "Laureen", "Lauren", "Lauryn", "Lavinia", "Layla", "Leah", "Leanne", "Lee", "Lena", "Lenka", "Leslie", "Leticia", "Lexi", "Lilian", "Lillian", "Lilly", "Lily", "Linda", "Linden", "Lindsay", "Lindsey", "Lindy", "Linnea", "Lisa", "Liz", "Lola", "Lorraine", "Lou-Anne", "Louisa", "Louise", "Lucia", "Lucretia", "Lucy", "Luna", "Lydia", "Lyndl", "Lynn", "Lynsey", "Mackenzie", "Maddison", "Madeleine", "Madeline", "Madison", "Maia", "Maree", "Margaret", "Margot", "Mariam", "Marianne", "Marie", "Marilyn", "Martha", "Mary", "Maryam", "Matilda", "Maude", "Mavis", "Maxine", "May", "Maya", "Megan", "Melanie", "Melinda", "Melissa", "Melody", "Mia", "Michelle", "Mikayla", "Mila", "Mildred", "Milla", "Millicent", "Millie", "Miranda", "Molly", "Monica", "Monika", "Monique", "Morgan", "Myfanwy", "Myfawny", "Myra", "Nadine", "Nalishebo", "Narelle", "Natalie", "Natasha", "Nathalie", "Nellie", "Nicky", "Nicola", "Nicole-Rita", "Nicole", "Nigella", "Nikki", "Nina", "Nora", "Norma", "Nova", "Olive", "Olivia", "Ophelia", "Orpha", "Page", "Paige", "Pam", "Pamela", "Pania", "Patience", "Patricia", "Paula", "Pauline", "Penelope", "Petronilla", "Petula", "Peyton", "Philippa", "Phoebe", "Phyllis", "Piper", "Pippa", "Polyxena", "Poppy", "Portia", "Posy", "Priscilla", "Prue", "Queenie", "Quentin", "Rachael", "Rachel", "Radclyffe", "Radha", "Raelene", "Rebecca", "Rebel", "Regina", "Rekha", "Renae", "Renee", "Renera", "Revelle", "Rhiannon", "Rhoda", "Rhonda", "Ria", "Riley", "Rita", "Roberta", "Robin", "Robyn", "Roma", "Rosamond", "Rose", "Rosemary", "Rosie", "Rowan", "Rowena", "Ruby", "Ruth", "Sabine", "Sabrina", "Sadie", "Sally", "Salviann", "Samantha", "Sandy", "Sara", "Sarah-Jane", "Sarah", "Sarita", "Savannah", "Scarlett", "Scherri-Lee", "Scherri", "Selma", "Shanina", "Shannon", "Sharon", "Sheila", "Shelby", "Shenevelle", "Shirley", "Shivaune", "Shona", "Sibyl", "Sienna", "Simone", "Siobhan", "Skye-Jilly", "Skye", "Smanatha", "Sofia", "Sophia", "Sophie", "Sophronia", "Stefane", "Stella", "Steph", "Stephanie", "Sue", "Summer", "Susan", "Suzanne", "Sybil", "Tabitha", "Tabrett", "Tahlia", "Tal", "Tallulah", "Tamsyn", "Tania", "Tanya", "Tara", "Tasha", "Tayla", "Taylah", "Taylor", "Tegan", "Teresa", "Terri", "Tess", "Thea", "Thelma", "Theresa", "Thomasin", "Thomasina", "Tiah", "Toni-Jene", "Toni", "Tony", "Tracey", "Tracy", "Tricia", "Trudie", "Unity", "Valerie", "Valli", "Vanessa", "Vera", "Vicki", "Victoria", "Vinnette", "Viola", "Violet", "Virginia", "Viva", "Vivian", "Voni", "Wanda", "Warburg", "Wendy", "Whitney", "Willa", "Willemtgen", "Willow", "Winfred", "Winifred", "Yasmin", "Yvonne", "Zahra", "Zara", "Zoe", "Zoey"];
+App.Data.misc.australianSlaveNames = ["Aaliyah", "Abbey", "Abbie", "Abby", "Abigail", "Ada", "Addison", "Adelaide", "Adele", "Adeline", "Agatha", "Agnes", "Aisha", "Alana", "Alberta", "Alda", "Aletha", "Alexandra", "Alexandria", "Alexis", "Alice", "Alison", "Alodie", "Althea", "Alycia", "Alyssa", "Amanda", "Amber", "Amelia", "Amelie", "Amethyst", "Amy", "Anastasia", "Andrea", "Angela", "Angelina", "Ann-Maree", "Ann", "Anna", "Annabel", "Annabelle", "Annaleise", "Anne", "Anneliisa", "Annelisa", "Annette", "Annie", "Anthea", "Araminta", "Arden", "Aria", "Ariana", "Arlen", "Asha", "Ashlea", "Ashlee", "Ashleigh", "Ashley", "Aslea", "Astrid", "Aubree", "Aubrey", "Audra", "Audrey", "Aurelia", "Aurora", "Ava", "Avena", "Avery", "Avril", "Ayla", "Azaria", "Bambi", "Barbara", "Beatrice", "Beatrix", "Belinda", "Bella", "Benita", "Bernadette", "Bertha", "Beryl", "Bethany", "Beverly", "Billie", "Binny", "Bliss", "Bonnie", "Bridget", "Bree", "Bridey", "Bridget", "Bridgette-Rose", "Bridgette", "Brilliana", "Britannia", "Brittany", "Brittni", "Brody", "Bronwyn", "Brooke", "Caitlin", "Caitlyn", "Camilla", "Camille", "Candice", "Caris", "Carlene", "Carly", "Carmel", "Carol", "Carole", "Caroline", "Carolyn", "Carrol", "Casey", "Cassandra", "Cassi", "Cassidy", "Cassie", "Catherine", "Cathrine", "Cathy", "Cecily", "Celestine", "Chanel", "Chantelle", "Charlene", "Charli", "Charlie", "Charlotte", "Charmaine", "Chelsea", "Cheryl", "Chloe", "Christine", "Christy", "Cicely", "Cinderella", "Claire", "Clara", "Clare", "Clarissa", "Claudia", "Clemency", "Clementine", "Codie", "Connie", "Constance", "Courtney", "Crispina", "Cynthia", "Dahlia", "Daisy", "Dana", "Dani", "Danielle", "Danna", "Daphne", "Darla", "Davina", "Dayanna", "Debbie", "Deedee", "Della", "Delsie", "Delta", "Denise", "Dennae", "Diana", "Diane", "Donna", "Doreen", "Doris", "Dorothy", "Eden", "Edith", "Edna", "Edwina", "Eglantine", "Elda", "Eleanor", "Elena", "Eliana", "Elise", "Eliza", "Elizabeth", "Ella", "Ellen", "Ellery", "Ellie", "Elodie", "Eloise", "Elouise", "Elsie", "Elyse", "Emeline", "Emery", "Emilia", "Emilie", "Emily", "Emma", "Erica", "Erin", "Ernestine", "Esma", "Essie", "Estella", "Ethel", "Eugenie", "Eva", "Eve", "Eveline", "Evelyn", "Evie", "Faith", "Felicity", "Fiona", "Flora", "Florence", "Frances", "Francesca", "Frankie", "Freya", "Friday", "Frideswide", "Gabriella", "Gael", "Gail", "Gemma", "Genevieve", "Georgia", "Georgie", "Georgina", "Geraldine", "Gillian", "Giulia", "Gladys", "Gloria", "Gloriana", "Grace", "Hailey", "Hanna", "Hannah", "Harlow", "Harper", "Harriet", "Hayley", "Hazel", "Heidi", "Helen", "Henrietta", "Hereswith", "Hester", "Holly", "Honor", "Hyacinth", "Ida", "Iggy", "Imogen", "Indiana", "Ineke", "Iona", "Irene", "Isabel", "Isabella", "Isabelle", "Isla", "Ivy", "Jacinta", "Jackie", "Jacqueline", "Jacquetta", "Jade", "Jamie", "Jan", "Jana", "Jane", "Janelle", "Janet", "Janice", "Janine", "Jasmine", "Jaye-Leanne", "Jaye", "Jazmyn", "Jean", "Jemima", "Jemma", "Jene", "Jenna", "Jennifer", "Jennine", "Jenny", "Jesinta", "Jess", "Jessamine", "Jessamy", "Jessamyn", "Jessica", "Jessie", "Jill", "Jilly", "Joan", "Joanna", "Joanne", "Jocelyn", "Jodi", "Jodie", "Johanna", "Jolene", "Joselyn", "Josephine", "Joy", "Juanita", "Judith", "Judy", "Julia", "Juliana", "Julie", "June", "Justine", "Kahili", "Kailey", "Kaitlyn", "Karen", "Karli", "Kate", "Kath", "Katherine", "Kathryn", "Katie", "Katrina", "Kay", "Kayla", "Kelly", "Kelsey", "Kendall", "Kerry", "Kerryn", "Ketrina", "Kim", "Kimberley", "Kirste", "Kirsten", "Kirstin", "Kirsty", "Krishna", "Kristal", "Kristen", "Krystal", "KVIIIlyn", "Kylie", "Kym", "Lacey", "Lara", "Laura", "Laureen", "Lauren", "Lauryn", "Lavinia", "Layla", "Leah", "Leanne", "Lee", "Lena", "Lenka", "Leslie", "Leticia", "Lexi", "Lilian", "Lillian", "Lilly", "Lily", "Linda", "Linden", "Lindsay", "Lindsey", "Lindy", "Linnea", "Lisa", "Liz", "Lola", "Lorraine", "Lou-Anne", "Louisa", "Louise", "Lucia", "Lucretia", "Lucy", "Luna", "Lydia", "Lyndl", "Lynn", "Lynsey", "Mackenzie", "Maddison", "Madeleine", "Madeline", "Madison", "Maia", "Maree", "Margaret", "Margot", "Mariam", "Marianne", "Marie", "Marilyn", "Martha", "Mary", "Maryam", "Matilda", "Maude", "Mavis", "Maxine", "May", "Maya", "Megan", "Melanie", "Melinda", "Melissa", "Melody", "Mia", "Michelle", "Mikayla", "Mila", "Mildred", "Milla", "Millicent", "Millie", "Miranda", "Molly", "Monica", "Monika", "Monique", "Morgan", "Myfanwy", "Myfawny", "Myra", "Nadine", "Nalishebo", "Narelle", "Natalie", "Natasha", "Nathalie", "Nellie", "Nicky", "Nicola", "Nicole-Rita", "Nicole", "Nigella", "Nikki", "Nina", "Nora", "Norma", "Nova", "Olive", "Olivia", "Ophelia", "Orpha", "Page", "Paige", "Pam", "Pamela", "Pania", "Patience", "Patricia", "Paula", "Pauline", "Penelope", "Petronilla", "Petula", "Peyton", "Philippa", "Phoebe", "Phyllis", "Piper", "Pippa", "Polyxena", "Poppy", "Portia", "Posy", "Priscilla", "Prue", "Queenie", "Quentin", "Rachael", "Rachel", "Radclyffe", "Radha", "Raelene", "Rebecca", "Rebel", "Regina", "Rekha", "Renae", "Renee", "Renera", "Revelle", "Rhiannon", "Rhoda", "Rhonda", "Ria", "Riley", "Rita", "Roberta", "Robin", "Robyn", "Roma", "Rosamond", "Rose", "Rosemary", "Rosie", "Rowan", "Rowena", "Ruby", "Ruth", "Sabine", "Sabrina", "Sadie", "Sally", "Salviann", "Samantha", "Sandy", "Sara", "Sarah-Jane", "Sarah", "Sarita", "Savannah", "Scarlett", "Scherri-Lee", "Scherri", "Selma", "Shanina", "Shannon", "Sharon", "Sheila", "Shelby", "Shenevelle", "Shirley", "Shivaune", "Shona", "Sibyl", "Sienna", "Simone", "Siobhan", "Skye-Jilly", "Skye", "Smanatha", "Sofia", "Sophia", "Sophie", "Sophronia", "Stefane", "Stella", "Steph", "Stephanie", "Sue", "Summer", "Susan", "Suzanne", "Sybil", "Tabitha", "Tabrett", "Tahlia", "Tal", "Tallulah", "Tamsyn", "Tania", "Tanya", "Tara", "Tasha", "Tayla", "Taylah", "Taylor", "Tegan", "Teresa", "Terri", "Tess", "Thea", "Thelma", "Theresa", "Thomasin", "Thomasina", "Tiah", "Toni-Jene", "Toni", "Tony", "Tracey", "Tracy", "Tricia", "Trudie", "Unity", "Valerie", "Valli", "Vanessa", "Vera", "Vicki", "Victoria", "Vinnette", "Viola", "Violet", "Virginia", "Viva", "Vivian", "Voni", "Wanda", "Warburg", "Wendy", "Whitney", "Willa", "Willemtgen", "Willow", "Winfred", "Winifred", "Yasmin", "Yvonne", "Zahra", "Zara", "Zoe", "Zoey"];
 App.Data.misc.australianMaleNames = ["Aaron", "Abel", "Adam", "Adger", "Adolph", "Adrian", "Aidan", "Aiden", "Alan", "Albert", "Albon", "Alec", "Alex", "Alexander", "Alfred", "Ali", "Alistair", "Alistaire", "Allan", "Allen", "Alvin", "Ambrose", "Amias", "Amyas", "Andrew", "Angus", "Anselm", "Anthony", "Antony", "Archer", "Archibald", "Archie", "Arlo", "Arron", "Arthur", "Ashley", "Ashton", "Asley", "Aubrey", "Augustine", "Austin", "Aylmer", "Baden", "Badgett", "Bailey", "Bardulph", "Barnaby", "Barnard", "Barry", "Bartholomew", "Barton", "Basil", "Beau", "Ben", "Benedict", "Benjamin", "Benn", "Bernard", "Bert", "Blair", "Blake", "Bob", "Bodhi", "Boniface", "Brad", "Bradley", "Brandon", "Braxton", "Brayden", "Brendan", "Brent", "Brenton", "Brett", "Brian", "Brock", "Bruce", "Bruno", "Bryan", "Bryant", "Bryce", "Burl", "Caleb", "Callum", "Cameron", "Carl", "Carlo", "Carter", "Casper", "Cecil", "Cedric", "Charles", "Charlie", "Chase", "Chester", "Chris", "Christian", "Christopher", "Claes", "Clarence", "Claude", "Clement", "Cleve", "Clifford", "Clint", "Clive", "Clyde", "Cody", "Colin", "Collis", "Connor", "Cooper", "Corey", "Craig", "Crispin", "Curtis", "Cyril", "D'Arcy", "Dale", "Dalton", "Damian", "Damien", "Dan", "Dane", "Daniel", "Danny", "Darcy", "Darren", "Darryl", "Daryl", "David", "Dean", "Deane", "Declan", "Denis", "Dennis", "Denver", "Derek", "Dermot", "Dermott", "Des", "Desmond", "Dick", "Dickie", "Dirk", "Dmitri", "Dominic", "Don", "Donald", "Doug", "Douglas", "Dudley", "Duke", "Duncan", "Dylan", "Eamon", "Earl", "Edmund", "Edward", "Edwin", "Eli", "Elijah", "Ellery", "Elliot", "Elton", "Emmet", "Emmett", "Eric", "Ernest", "Essex", "Ethan", "Ethelred", "Eugene", "Everard", "Fabian", "Fabrice", "Felix", "Finn", "Florian", "Flynn", "Frances", "Francis", "Frank", "Frederic", "Frederick", "Gabriel", "Gamaliel", "Gareth", "Garrick", "Gary", "Gavin", "Geoff", "Geoffrey", "George", "Gerald", "Gerard", "Giles", "Glanard", "Glenn", "Godfrey", "Gordon", "Graeme", "Graham", "Grant", "Gregory", "Grimbald", "Gus", "Guy", "Hadrian", "Hamish", "Hampton", "Harley", "Harold", "Harrison", "Harry", "Harvey", "Hayden", "Heath", "Hector", "Henry", "Herbert", "Hiram", "Horace", "Howard", "Hubert", "Hudson", "Hugh", "Hugo", "Humphrey", "Hunter", "Iain", "Ian", "Ignatius", "Irving", "Isaac", "Isaiah", "Ivan", "Ivor", "Jack", "Jackson", "Jacob", "Jagan", "Jake", "James", "Jamie", "Jared", "Jarrod", "Jason", "Jasper", "Jaxon", "Jaxson", "Jay", "Jayden", "Jeff", "Jennings", "Jeremy", "Jeren", "Jesse", "Jett", "Jim", "Jimmy", "Joab", "Joe", "Joel", "Joey", "John", "Jon", "Jonathan", "Jonathon", "Jordan", "Joseph", "Josh", "Joshua", "Jude", "Julian", "Justin", "Kai", "Kane", "Karl", "Keith", "Kelvin", "Ken", "Kenneth", "Kenrick", "Kent", "Kerry", "Kevin", "Kieran", "Kieren", "Kim", "Kirk", "Kit", "Koby", "Kurt", "Ky", "Kyle", "Kynan", "L-bert", "L-nard", "L-vin", "Lachlan", "Lambert", "Latimer", "Laurence", "Lawrence", "Lee", "Legh", "Leith", "Leo", "Leon", "Leonard", "Leopold", "Les", "Leslie", "Lester", "Levi", "Levill", "Lewis", "Liam", "Lincoln", "Lindsay", "Linus", "Lionel", "Lloyd", "Logan", "Louis", "Luca", "Lucas", "Lucian", "Lucien", "Luke", "Mack", "Malcolm", "Marcus", "Mark", "Marmaduke", "Martin", "Mason", "Mathew", "Matt", "Matthew", "Maurice", "Max", "Maximilian", "Maximillian", "Maxwell", "Mel", "Melton", "Melville", "Mervyn", "Michael", "Mick", "Mickey", "Milton", "Mitch", "Mitchell", "Mortimer", "Murray", "Nate", "Nathan", "Nathaniel", "Ned", "Neil", "Neville", "Nicholas", "Nick", "Niel", "Nigel", "Nixon", "Noah", "Nobby", "Noel", "Norman", "Norvelle", "Norville", "Nyles", "Oliver", "Orlando", "Oscar", "Oswald", "Owen", "Page", "Paige", "Patrick", "Paul", "Pelham", "Percival", "Percy", "Peregrine", "Peter", "Phil", "Philip", "Phillip", "Phoenix", "Pip", "Quantrill", "Quentin", "Quintin", "Raleigh", "Ralph", "Ramon", "Randolph", "Ray", "Raymond", "Redevers", "Redvers", "Reece", "Regan", "Reginald", "Rene", "Rex", "Rhys", "Richard", "Rick", "Riley", "Rob", "Robert", "Roberto", "Robin", "Rodney", "Roger", "Rohan", "Roland", "Rolf", "Rollo", "Ron", "Ronald", "Ross", "Rowan", "Rowland", "Roy", "Rufus", "Rupert", "Russell", "Ryan", "Ryder", "Sam", "Samuel", "Scot", "Scott", "Sean", "Sebastian", "Seebaer", "Seth", "Shane", "Shannon", "Shaun", "Shem", "Sidney", "Sigismund", "Simon", "Slade", "Sonny", "Spencer", "Stanlee", "Stanley", "Stephen", "Steve", "Steven", "Stewart", "Stockton", "Stockwell", "Stuart", "Sylvester", "Tarquin", "Tate", "Terence", "Terry", "Thaddeus", "Theodore", "Theophilus", "Thomas", "Thorpe", "Tim", "Timothy", "Tobias", "Toby", "Todd", "Tom", "Tommy", "Tony", "Travis", "Trent", "Trevor", "Tristan", "Troy", "Tyler", "Tyson", "Urban", "Uriah", "Uvedale", "Valentine", "Vaughan", "Vernon", "Victor", "Vince", "Vincent", "Vivian", "Walter", "Warren", "Warwick", "Wayne", "Wilf", "Wilfred", "Wilfrid", "Willard", "Willem", "Willi", "William", "Winford", "Winston", "Wulfram", "Wulpher", "Xavier", "Yancy", "Zac", "Zachary"];
 App.Data.misc.australianSlaveSurnames = ["Abbott", "Adams", "Adamson", "Agostini", "Alderson", "Alexander", "Allen", "Allpass", "Alozie", "Anderson", "Andrew", "Andrews", "Annear", "Armstrong", "Arnold", "Assange", "Ayris", "Azalea", "Bailey", "Baines", "Baker", "Ball", "Balmain", "Bannister", "Banting", "Barber", "Barker", "Barnes", "Barret", "Barrett", "Batman", "Batten", "Bayet", "Beahan", "Beck", "Bell", "Bennett", "Bergen", "Bessell", "Bethell", "Bianca", "Biggs", "Bingle", "Bird", "Birkinhead", "Birmingham", "Bishop", "Black", "Blair", "Bliss", "Blundell", "Blyth", "Boegman", "Book", "Bostock", "Boundy", "Bowe", "Bowen", "Bowron", "Boyd", "Boyle", "Braid", "Breeds", "Breen", "Brimacombe", "Brisley", "Britnell", "Britton", "Broadrick", "Brooks", "Brown", "Brownbill", "Browne", "Browning", "Brunow", "Bryce", "Bucat", "Buck", "Buckman", "Bull", "Bullock", "Bundey", "Burdeu", "Burgess", "Burke", "Burns", "Burr", "Burt", "Busby", "Bushell", "Butcher", "Butler", "Byrne", "Byrnes", "Cadell", "Cahill", "Cail", "Caines", "Cains", "Cairns", "Callus", "Calvert", "Cameron", "Campbell", "Capobianco", "Capp", "Carey", "Carré", "Carroll", "Carter", "Cartwright", "Cave", "Cawood", "Cazzulimi", "Chamberlain", "Chan", "Chapman", "Chen", "Cherry", "Cheyenne", "Cilmi", "Clanton", "Clare", "Clark", "Clarke", "Clarkson", "Clemens", "Cole", "Coleman", "Colling", "Collins", "Connell", "Cook", "Cooke", "Cooper", "Cornish", "Coward", "Cowe", "Cox", "Crawford", "Creighton", "Cribbon", "Crowe", "Crowley", "Crwoley", "Csortan", "Curnow", "Curry", "Curtis", "Daams", "Dalle", "Darling", "Davidson", "Davies", "Davis", "Dawson", "Day", "de Castella", "de Gouw", "De Gouw", "de Ravin", "de Rossi", "Deakes", "Dean", "Debnam", "Dee", "Delaney", "Delfos", "Deng", "Dent", "Dew", "Dickinson", "Dines", "Dixon", "Doubell", "Douglas", "Dowling", "Doyle", "Dry", "Duncan", "Dundee", "Dunderdale", "Dundovic", "Dunn", "Dunne", "Eagles", "Eaton", "Eckhardt", "Edwards", "Elliott", "Ellis", "Englert", "English", "Evans", "Evers", "Evison", "Fairweather", "Felton", "Fenton", "Ferguson", "Fern", "Fielding", "Finch", "Fisher", "Fitzgerald", "Flanagan", "Flemming", "Fletcher", "Flintoff", "Fogarty", "Folino", "Forbes", "Ford", "Forge", "Forrest", "Forscutt", "Forsyth", "Foster", "Fountain", "Fowler", "Fox", "Francis", "Fraser", "Frayne", "Freeman", "Frost", "Fry", "Gainsford", "Gale", "Gardner", "Garner", "Gaskell", "George", "Getheridge-Giumelli", "Getheridge", "Gibbons", "Gibson", "Gilbert", "Giles", "Gill", "Gillard", "Giumelli", "Gleave", "Glenn", "Gliwski", "Gold", "Gomes", "Gonsalves", "Goodrem", "Gordon", "Grageda", "Graham", "Grant", "Gray", "Green", "Greene", "Gregson", "Griffin", "Griffith", "Griffiths", "Gun", "Haas", "Haasbroek", "Haig", "Hall", "Hamblin", "Hames", "Hamilton", "Hammond", "Hampshire", "Hansen", "Harley", "Harman", "Harper", "Harradine", "Harris", "Harrison", "Hart", "Hartmann", "Hartog", "Harvey", "Hawkins", "Hayes", "Heathcote", "Helman", "Henderson", "Hermanszoon", "Hewson", "Hill", "Hodgett", "Holland", "Hollands", "Holmes", "Holt", "Hood", "Hooker", "Hopewell", "Horne", "Horner", "Howard", "Howe", "Howse", "Hughes", "Humphries", "Hung", "Hunt", "Hunter", "Iles", "Inverarity", "Irwin", "Ismay", "Jackes", "Jackman", "Jackson", "Jacobs", "Jacobsen", "Jacoby", "Jaklofsky", "James", "Jamieson", "Janszoon", "Jason", "Jenkins", "Jenneke", "Johnson", "Johnston", "Jones", "Jowett", "Junna", "Kajan", "Kane", "Kaplan", "Kean", "Keeley", "Kelley", "Kelly", "Kemp", "Kendell", "Kennedy", "Kerr", "Kershaw", "Kidman", "Kilborn", "Kim", "King", "Kingsford", "Kneebone", "Knight", "Knoll", "Koch", "Konrads", "Koukla", "Kreimer", "Kreitmayer", "Kripac", "LaCaze", "Lachman", "Laidlaw", "Lambert", "Lane", "Lapierre", "Larkins", "Lawley", "Lawrence", "Lawson", "Lay", "Lee", "Leffers", "Lenny", "Leonarder", "Lewis", "Li", "Liane", "Lim", "Lind", "Liu", "Lloyd", "Logan", "Longworth", "Lorraway", "Lowe", "Lucas", "Lucock", "Luther", "Luyben", "Lynch", "Lynes", "MacCartney", "MacDiarmid", "MacDonald", "MacFarlane", "Mackay", "MacKenzie", "Madden", "Magrath", "Mainwaring", "Makin", "Malcolm", "Mangan", "Manou", "Marais", "Markov", "Marsh", "Marshall", "Martin", "Mason", "Massey", "Mastin", "Mather", "Matthews", "Mavis", "May", "McAleer", "McCabe", "McCafferty", "McCann", "McCarthy", "McCurry", "McDonald", "McEntee", "McEwan", "McGowan", "McKenzie", "McKeon", "McKnight", "McLean", "McLellan", "McMahon", "McMullen", "McNamee", "McNaught", "McNeil", "McNeill", "McQueen", "McSweyn", "Merry", "Meurer", "Miller", "Mills", "Minihan", "Mitchell", "Mladenis", "Moneghetti", "Monk", "Monson", "Moore", "Morgan", "Morris", "Morrison", "Morton", "Moss", "Mottram", "Mucci", "Mundy", "Murphy", "Murray", "Musgrave", "Mussett", "Narracott", "Nash", "Neiberding", "Nelson", "Nevin", "Newell", "Newman", "Newsome", "Newton", "Nguyen", "Nielsen", "Nobis", "Noble", "Norman", "Northwood", "Nott", "Ntiamoah", "O'Brien", "O'Connor", "O'Neill", "Oman", "Ord", "Origliasso", "Otto", "Page", "Palmer", "Papworth", "Parekh", "Parker", "Parkinson", "Pascoe", "Patel", "Paterson", "Payne", "Pearce", "Pearson", "Pemberton", "Peris", "Perry", "Peters", "Pethybridge", "Philips", "Phillips", "Piazza", "Pinder", "Pini", "Pittman", "Plimmer", "Porter", "Powell", "Price", "Prowse", "Queen", "Quin", "Quinn", "Radinas", "Ralph", "Ramsay", "Ratcliffe", "Rattenbury", "Ravin", "Rayward", "Redding", "Redina", "Reid", "Rendell", "Rendina", "Rennison", "Renshaw", "Reynolds", "Richards", "Richardson", "Rigg", "Rippon", "Riseley", "Robbie", "Robbinson", "Roberts", "Robertson", "Robinson", "Rockatansky", "Rogan", "Rogers", "Rohan", "Rollison", "Ronchi", "Ronin", "Rose", "Ross", "Rowe", "Rowly", "Rudd", "Rudrum", "Rule", "Rush", "Russell", "Ryan", "Sacks", "Samer", "Samuel", "Sanderson", "Sang", "Sargent", "Saunders", "Saville", "Sawall", "Sawyer", "Saxby", "Scott", "Sears", "See", "Seiffert", "Shaik", "Shaw", "Shead", "Shelley", "Shepherd", "Shippen", "Shirvington", "Shooter", "Sigmont", "Simpson", "Singh", "Sloan", "Smith", "Solomon", "Spencer", "Sprenger", "St. Clair", "St. Lawrence", "Stanbury", "Starc", "Stark", "Stasey", "Stella", "Stephens", "Stevens", "Stewart", "Stockwell", "Stoeckel", "Stone", "Strachan", "Stracke", "Strahovski", "Stratton", "Sullivan", "Sutherland", "Swan", "Sydney", "Talbot", "Tallent", "Tame", "Tan", "Tanner", "Tarrant", "Taylor", "Telfer", "Terrell", "Theile", "Thomas", "Thompson", "Thomson", "Thorpe", "Thring", "Tiivel", "Tokoly", "Tonisson", "Tonkin", "Torv", "Tozzi", "Trail", "Tran", "Tranter", "Treffers", "Trickett", "Troop", "Trunfio", "Tunstead", "Tupper", "Turner", "Twigley", "Tyrrell", "Upton", "Valance", "van den Dungen", "van Eimeren", "Van Heer", "van Nieuwelant", "Vander-Kuyp", "Vassella", "Verey", "Verstak", "Vickers", "Vidler", "Vinson", "Virtue", "Visser", "Voloder", "Walker", "Wall", "Wallace", "Walsh", "Walsman", "Wang", "Ward", "Wardhaugh", "Ware", "Wasmer", "Wass", "Watson", "Watt", "Watts", "Weaver", "Weaving", "Webb", "Webster", "Wells", "Welsh", "Wenden", "Wenham", "West", "Wheaton", "Wheelwright", "Whelan", "White", "Whitehead", "Whitford", "Whitworth", "Wight", "Wilcox", "Wilkenfeld", "Wilkinson", "Williams", "Williamson", "Williamsz", "Willmer", "Wilson", "Windeatt", "Wohlsen", "Wolowiec", "Wong", "Wood", "Wooden", "Woods", "Woodward", "Woolrich", "Worledge", "Wright", "Wroe", "Wyatt", "Wynter", "Xenophon", "Yeomans", "Yewdale", "Young", "Zealand", "Zhang"];
 
diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js
index de749cfe5e10be7c2214bd6f346a965719c9f51c..e5be2e88b0319cee5ad61244fd044c3367071b55 100644
--- a/js/003-data/policiesData.js
+++ b/js/003-data/policiesData.js
@@ -497,12 +497,12 @@ App.Data.Policies.Selection = {
 				}
 			}
 		],
-		"mercenariesHelpCorp": [
+		"policies.raidingMercenaries": [
 			{
 				title: "Raiding Mercenaries",
 				text: "you will allow your mercenaries to occasionally conduct a raid directly for your benefit.",
 				activatedText: "you are allowing your mercenaries to occasionally raid for your direct benefit.",
-				requirements: function() { return (V.mercenaries > 0); },
+				requirements: function() { return (V.mercenaries > 0) && (V.mercenariesHelpCorp > 0); },
 				get note() { return `Will cost ${cashFormat(policies.cost())} weekly to maintain`; }
 			}
 		],
diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js
index 110f77749eaf83eca773b9962cf1d366ac62f235..781a17b19982bf75c7c2b558769c65df06a4ac3c 100644
--- a/js/003-data/slaveMods.js
+++ b/js/003-data/slaveMods.js
@@ -29,12 +29,11 @@ App.Medicine.Modification.Brands = {
 		"a penis symbol": {displayName: "Penis symbol"},
 	},
 	silhouettes: {
-		"Lady": {displayName: "a lady silhouette"},
-		"Princess": {displayName: "a princess silhouette"},
-		"Queen": {displayName: "a queen silhouette"},
-		"Angel": {displayName: "an angel silhouette"},
-		"Devil": {displayName: "a devil silhouette"},
-
+		"a lady silhouette": {displayName: "Lady"},
+		"a princess silhouette": {displayName: "Princess"},
+		"a queen silhouette": {displayName: "Queen"},
+		"an angel silhouette": {displayName: "Angel"},
+		"a devil silhouette": {displayName: "Devil"},
 	},
 	FS: {
 		"a racial slur": {
diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js
index c798b23d14ca5076fcdb3b97021d744dd78d1410..95c56fcc0df620841bf4063ade116cdcc98f4d10 100644
--- a/src/002-config/fc-version.js
+++ b/src/002-config/fc-version.js
@@ -2,5 +2,5 @@ App.Version = {
 	base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed.
 	pmod: "3.5.4",
 	commitHash: null,
-	release: 1075
+	release: 1076
 };
diff --git a/src/004-base/specialSlavesProxy.js b/src/004-base/specialSlavesProxy.js
index 64b2870e0ac6680fbdcc7be2c58a61a8919d78b1..92622b4efbf40a734577d4532cc4fc371868ca8d 100644
--- a/src/004-base/specialSlavesProxy.js
+++ b/src/004-base/specialSlavesProxy.js
@@ -12,7 +12,7 @@ App.SpecialSlavesProxy = class SpecialSlavesProxy {
 		return V.Concubine;
 	}
 	get DJ() {
-		return V.DJ;
+		return slaveStateById(V.djID);
 	}
 	get Farmer() {
 		return V.Farmer;
diff --git a/src/Corporation/manageCorporation.tw b/src/Corporation/manageCorporation.tw
index 628b630257010ac9dd04e48ba4371b614c9d992a..4ecab35defa77c11ad0156e5911caccb7b9a72c0 100644
--- a/src/Corporation/manageCorporation.tw
+++ b/src/Corporation/manageCorporation.tw
@@ -454,7 +454,7 @@ You own <<print num($personalShares)>> shares while another <<print num($publicS
 			<br>Straightforward cosmetic procedures are [[Applied|Manage Corporation][$corp.SpecCosmetics = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Not Applied|Manage Corporation][$corp.SpecCosmetics = 0, $corp.SpecTimer = 2]]
 		<</if>>
 		<<if ndef $corp.SpecEducation && $corp.DivTrain > 0>> /*This used to be $trainingUpgradeEducation, it is the training specialization*/
-			<br>Slaves are given [[No Education|Manage Corporation][$corp.SpecEducation == 0, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Basic Education|Manage Corporation][$corp.SpecEducation = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] -- //Further specializations possible//
+			<br>Slaves are given [[No Education|Manage Corporation][$corp.SpecEducation = 0, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Basic Education|Manage Corporation][$corp.SpecEducation = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] -- //Further specializations possible//
 		<</if>>
 		<<if ndef $corp.SpecImplants && $corp.DivSurgery > 0>> /*This used to be $surgicalUpgradeImplants, it is the surgery specialization*/
 			<br>Slave implants are [[Applied|Manage Corporation][$corp.SpecImplants = 1, $corp.SpecToken -= 1, $corp.SpecTimer = 2]] | [[Not Applied|Manage Corporation][$corp.SpecImplants = 0, $corp.SpecTimer = 2]] -- //Further specializations possible//
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 60956416ce4536e2dd791b92d1d2518f935fad26..6784f3a1b75a48c2bbedbf6ffa70f5c895513227 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -1292,6 +1292,7 @@ App.Update.genePoolRecords = function(node) {
 
 	let ib_coeff = ibc.coeff_slaves(V.genePool);
 	V.genePool.forEach(g => {g.inbreedingCoeff = ib_coeff[g.ID]});
+	V.slaveIndices = slaves2indices(); // we're going to need to compare to active slaves, if they exist
 
 	for (let bci = 0; bci < V.genePool.length; bci++) {
 		App.Update.Slave(V.genePool[bci], true);
@@ -1371,6 +1372,17 @@ App.Update.genePoolRecords = function(node) {
 
 		App.Entity.Utils.GenePoolRecordCleanup(slave);
 		V.genePool[bci] = slave;
+
+		// if a genepool entry doesn't have specific parent information, but the "live" copy of the same slave does, copy it into the genepool
+		const liveSlave = getSlave(V.genePool[bci].ID);
+		if (liveSlave) {
+			if (liveSlave.mother && V.genePool[bci].mother === 0) {
+				V.genePool[bci].mother = liveSlave.mother;
+			}
+			if (liveSlave.father && V.genePool[bci].father === 0) {
+				V.genePool[bci].father = liveSlave.father;
+			}
+		}
 	}
 	node.append(`Done!`);
 };
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index 79d17e6b4fef8df67fbceb4607de100ae1c73b8f..4564df3e1027f97c63cd859987bea7823421d2c2 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -1659,7 +1659,7 @@ globalThis.FacilityDatatypeCleanup = (function() {
 		V.club = Math.max(+V.club, 0) || 0;
 		V.clubUpgradePDAs = Math.clamp(+V.clubUpgradePDAs, 0, 1) || 0;
 		/* madam */
-		V.DJ = V.slaves.find(s => s.assignment === Job.DJ) || 0;
+		V.djID = findSlaveId(s => s.assignment === Job.DJ);
 		V.DJignoresFlaws = Math.clamp(+V.DJignoresFlaws, 0, 1) || 0;
 	}
 
diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js
index c949a7664ca7e789fa2768a3ca17a2e1a296f9e9..e905a4a5fd2eb3dd55c60f8510de9c84504744c6 100644
--- a/src/endWeek/endWeek.js
+++ b/src/endWeek/endWeek.js
@@ -292,9 +292,7 @@ globalThis.endWeek = (function() {
 		V.unMadam = 0;
 		V.madamCashBonus = 0;
 		V.whorePriceAdjustment = {};
-		V.DJ = 0;
 		V.unDJ = 0;
-		V.DJRepBonus = 0;
 		V.Milkmaid = 0;
 		V.Farmer = 0;
 		V.Concubine = 0;
diff --git a/src/endWeek/healthFunctions.js b/src/endWeek/healthFunctions.js
index b8252954db6506ee1b98fb09d045d24e7d8d5556..6b013a041e06b7b387094a7ae8ce2d69bae0d93e 100644
--- a/src/endWeek/healthFunctions.js
+++ b/src/endWeek/healthFunctions.js
@@ -342,7 +342,7 @@ globalThis.willWorkToDeath = function(slave) {
 		return true;
 	} else if (V.Madam !== 0 && (slave.assignment === Job.BROTHEL || (slave.assignment === Job.WHORE && V.brothel > 0 && V.universalRulesFacilityWork === 1 && V.brothelSpots > 0))) {
 		return true;
-	} else if (V.DJ !== 0 && (slave.assignment === Job.CLUB || (slave.assignment === Job.PUBLIC && V.club > 0 && V.universalRulesFacilityWork === 1 && V.clubSpots > 0))) {
+	} else if (S.DJ && (slave.assignment === Job.CLUB || (slave.assignment === Job.PUBLIC && V.club > 0 && V.universalRulesFacilityWork === 1 && V.clubSpots > 0))) {
 		return true;
 	}
 	return false;
diff --git a/src/endWeek/saDrugs.js b/src/endWeek/saDrugs.js
index f29ed0e013f8c77225160d28c55550710d8855c4..6d644bf87d99fb2dd9417dc37dfa47c3baa046ff 100644
--- a/src/endWeek/saDrugs.js
+++ b/src/endWeek/saDrugs.js
@@ -1772,7 +1772,7 @@ App.SlaveAssignment.drugs = (function() {
 				}
 			}
 		}
-		illness(slave);
+		r += ` ${illness(slave)}`;
 		// tiredness
 		if (slave.drugs !== "stimulants" && slave.inflationType !== "stimulant") {
 			if (slave.assignment !== Job.SPA && slave.assignment !== Job.REST && slave.assignment !== Job.CLINIC) {
diff --git a/src/endWeek/saServeThePublic.js b/src/endWeek/saServeThePublic.js
index 43a8ed4fe5390045911d3b0b5582a603e3e3c19a..0ba7049fd4e6f60cc534eb59b12ddcef99ea34e0 100644
--- a/src/endWeek/saServeThePublic.js
+++ b/src/endWeek/saServeThePublic.js
@@ -142,36 +142,36 @@ App.SlaveAssignment.serveThePublic = (function() {
 				if ((slave.hears === -1 && slave.earwear !== "hearing aids") || (slave.hears === 0 && slave.earwear === "muffling ear plugs") || (slave.hears === -2)) {
 					r += ` ${His} inability to move to the rhythm of the music is very off putting to those looking to party.`;
 				}
-				if (V.DJ !== 0) {
-					const DJpronouns = getPronouns(V.DJ);
-					if (V.DJRepBonus > 0) {
+				if (S.DJ) {
+					const DJpronouns = getPronouns(S.DJ);
+					if (DJRepBonus() > 0) {
 						if (slave.assignment === Job.PUBLIC) {
 							r += ` Working`;
 						} else {
 							r += ` Living and working`;
 						}
-						r += ` out of the club, ${he} comes under ${SlaveFullName(V.DJ)}'s `;
-						if (V.DJRepBonus < 0.1) {
+						r += ` out of the club, ${he} comes under ${SlaveFullName(S.DJ)}'s `;
+						if (DJRepBonus() < 0.1) {
 							r += `completely inept`;
-						} else if (V.DJRepBonus < 0.2) {
+						} else if (DJRepBonus() < 0.2) {
 							r += `unskilled`;
-						} else if (V.DJRepBonus < 0.3) {
+						} else if (DJRepBonus() < 0.3) {
 							r += `skillful`;
 						} else {
 							r += `masterful`;
 						}
 						r += ` leadership.`;
-						if (V.DJ.face > 40 && (V.DJ.intelligence + V.DJ.intelligenceImplant > 50)) {
+						if (S.DJ.face > 40 && (S.DJ.intelligence + S.DJ.intelligenceImplant > 50)) {
 							if (slave.devotion > 20) {
 								r += ` The DJ is such a gorgeous diva that ${he}'s swept along by ${DJpronouns.possessive} charisma, and does ${his} best to be a worthy part of ${DJpronouns.possessive} entourage.`;
 							}
 						}
 						if (V.DJignoresFlaws !== 1) {
 							if (!["abusive", "anal addict", "attention whore", "breast growth", "breeder", "cum addict", "malicious", "neglectful", "none", "self hating"].includes(slave.sexualFlaw) && jsRandom(1, 100) > 90) {
-								r += ` ${SlaveFullName(V.DJ)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} sexual flaws.`;
+								r += ` ${SlaveFullName(S.DJ)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} sexual flaws.`;
 								slave.sexualFlaw = "none";
 							} else if (slave.behavioralFlaw !== "none" && jsRandom(1, 100) > 90) {
-								r += ` ${SlaveFullName(V.DJ)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} flaws.`;
+								r += ` ${SlaveFullName(S.DJ)} manages to <span class="flaw break">break</span> ${slave.slaveName} of ${his} flaws.`;
 								slave.behavioralFlaw = "none";
 							}
 						}
@@ -311,8 +311,8 @@ App.SlaveAssignment.serveThePublic = (function() {
 				r += ` ${He} spends reduced hours working the floor in ${V.clubName} in order to <span class="green">offset ${his} lack of rest.</span>`;
 			} else if (slave.health.tired + 15 >= 90 && !willWorkToDeath(slave)) {
 				r += ` ${He} attempts to turn down citizens due to ${his} exhaustion, but can do little to stop it or the resulting `;
-				if (V.DJ !== 0) {
-					r += `<span class="trust dec">severe punishment</span> by ${V.DJ.slaveName}. ${His} <span class="devotion dec">reluctance</span> is worked around by your watchful DJ, preventing citizens from ever realizing ${his} intent.`;
+				if (S.DJ) {
+					r += `<span class="trust dec">severe punishment</span> by ${S.DJ.slaveName}. ${His} <span class="devotion dec">reluctance</span> is worked around by your watchful DJ, preventing citizens from ever realizing ${his} intent.`;
 				} else {
 					r += `<span class="trust dec">severe punishment.</span> ${He} <span class="devotion dec">purposefully underperforms,</span> choosing ${his} overall well-being over the consequences, <span class="reputation dec">aggravating citizens and damaging the establishment's image.</span>`;
 					repX(forceNeg(50), "disobedience", slave);
@@ -334,8 +334,8 @@ App.SlaveAssignment.serveThePublic = (function() {
 				r += ` ${He} spends reduced hours serving in order to <span class="green">offset ${his} lack of rest.</span>`;
 			} else if (slave.health.tired + 15 >= 90 && !willWorkToDeath(slave)) {
 				r += ` ${He} attempts to turn down citizens due to ${his} exhaustion, but can do little to avoid it or the resulting `;
-				if (V.club > 0 && V.universalRulesFacilityWork === 1 && V.clubSpots > 0 && V.DJ !== 0) {
-					r += `<span class="trust dec">severe punishment</span> by ${V.DJ.slaveName}. ${His} <span class="devotion dec">reluctance</span> is worked around by your watchful DJ, preventing citizens from ever realizing ${his} intent.`;
+				if (V.club > 0 && V.universalRulesFacilityWork === 1 && V.clubSpots > 0 && S.DJ) {
+					r += `<span class="trust dec">severe punishment</span> by ${S.DJ.slaveName}. ${His} <span class="devotion dec">reluctance</span> is worked around by your watchful DJ, preventing citizens from ever realizing ${his} intent.`;
 				} else {
 					r += `<span class="trust dec">severe punishment.</span> ${He} <span class="devotion dec">purposefully underperforms,</span> choosing ${his} overall well-being over the consequences, <span class="reputation dec">causing a scene and damaging the image of your public servants.</span>`;
 					repX(forceNeg(100), "disobedience", slave);
diff --git a/src/endWeek/saServeYourOtherSlaves.js b/src/endWeek/saServeYourOtherSlaves.js
index 7b04d0277c3bf73b92fff0008ffff98e6f6ab720..fea31cb0dafea7f40d70e490c8592772ed314ca8 100644
--- a/src/endWeek/saServeYourOtherSlaves.js
+++ b/src/endWeek/saServeYourOtherSlaves.js
@@ -1021,7 +1021,7 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() {
 				V.oralTotal += fuckCount;
 			}
 			r.push(`The lewdness emanating from beneath the table is not lost on the other diners, <span class="hotpink">much to ${domName}'s enjoyment.</span>`);
-			if (slave.need && slave.fetish === "exhibition") {
+			if (slave.need && slave.fetish === "humiliation") {
 				if (slave.fetishKnown) {
 					r.push(`${subName} needs this kind of exposure to be truly sexually satisfied; this week, ${his} desire for public sex is sated.`);
 				}
@@ -1531,6 +1531,14 @@ App.SlaveAssignment.serveYourOtherSlaves = (function() {
 							slave.fetishKnown = 1;
 						}
 						break;
+					case "humiliation":
+						if (slave.fetish !== "humiliation") {
+							r.push(`${domName}'s taste for public sex has a lasting effect on ${subName}; <span class="lightcoral">${he}'s grown fond of exhibitionism.</span>`);
+							slave.fetish = "humiliation";
+							slave.fetishStrength = 35;
+							slave.fetishKnown = 1;
+						}
+						break;
 				}
 			} else {
 				switch (slave.fetish) {
diff --git a/src/endWeek/slaveAssignmentReport.js b/src/endWeek/slaveAssignmentReport.js
index 9ff7803af55461ccb7253aa3a636654ce99045b8..4fa4fce42e4cebccf09fdc6c7a370406c61fa905 100644
--- a/src/endWeek/slaveAssignmentReport.js
+++ b/src/endWeek/slaveAssignmentReport.js
@@ -515,7 +515,7 @@ App.EndWeek.slaveAssignmentReport = function() {
 				} else if (V.unDJ === 5) {
 					_printSlaveUnassignedNote(slave, "can no longer hear");
 				}
-				if (V.DJ === 0) {
+				if (V.djID === 0) {
 					removeJob(slave, Job.DJ);
 				}
 				break;
diff --git a/src/events/RECI/butthole.js b/src/events/RECI/butthole.js
index 0b9bc576b51e6f9ac058e2439c27cba1893a35b0..33030cbed80a983621d66eb014c0eb1a1ca4011e 100644
--- a/src/events/RECI/butthole.js
+++ b/src/events/RECI/butthole.js
@@ -513,6 +513,12 @@ App.Events.RECIButthole = class RECIButthole extends App.Events.BaseEvent {
 			t.push(Spoken(eventSlave, `"Please nooo,"`));
 			t.push(`</span>`);
 			t.push(`comes a quiet wail from the floor.`);
+			if (canImpreg(eventSlave, V.PC)) {
+				knockMeUp(eventSlave, 10, 1, -1);
+			}
+			if (canImpreg(eventSlave, partnerSlave)) {
+				knockMeUp(eventSlave, 10, 1, partnerSlave.ID);
+			}
 			App.Events.addParagraph(container, t);
 
 			eventSlave.devotion += 2;
@@ -766,9 +772,7 @@ App.Events.RECIButthole = class RECIButthole extends App.Events.BaseEvent {
 			t.push(`${he} ${say}s.</span>`);
 			eventSlave.devotion += 4;
 			eventSlave.anus = 3;
-			t.push(VCheck.Anal(6, eventSlave));
-			eventSlave.counter.anal += 2;
-			V.analTotal += 2;
+			t.push(VCheck.Anal(2, eventSlave));
 			App.Events.addParagraph(container, t);
 
 			return [container];
diff --git a/src/events/RECI/futa.js b/src/events/RECI/futa.js
index c709cf3c2fed7da8d415e059806d6fb9c0d42738..25985e613311b5e543ab6f113adb5bd616587cf7 100644
--- a/src/events/RECI/futa.js
+++ b/src/events/RECI/futa.js
@@ -13,6 +13,7 @@ App.Events.RECIFuta = class RECIFuta extends App.Events.BaseEvent {
 				s => s.dick > 0,
 				s => s.balls > 0,
 				s => s.vagina >= 0,
+				canStand,
 				canAchieveErection,
 				canTalk,
 				canHear,
diff --git a/src/events/RECI/milf.js b/src/events/RECI/milf.js
index 4c33462eedf452a495aeba59c03f151284d3d632..add23616505668ca6285ca4c99714c7b90ec7605 100644
--- a/src/events/RECI/milf.js
+++ b/src/events/RECI/milf.js
@@ -13,6 +13,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 				s => s.energy > 60,
 				s => s.bodySwap === 0,
 				s => (canDoAnal(s) || canDoVaginal(s)),
+				canStand,
 				canTalk,
 				canHear,
 				hasAnyArms,
@@ -218,7 +219,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 
 		function roughSex() {
 			let virginityLoss = 0;
-			let inHole = 0;
+			let inHole = "";
 
 			t = [];
 			t.push(`When ${he}`);
@@ -463,16 +464,22 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 			if (inHole === "ass") {
 				t.push(`anus you just fucked.`);
 				seX(eventSlave, "anal", V.PC, "penetrative");
+				if (canImpreg(eventSlave, V.PC)) {
+					knockMeUp(eventSlave, 10, 1, -1);
+				}
 			} else {
 				t.push(`pussy you just dominated.`);
 				seX(eventSlave, "vaginal", V.PC, "penetrative");
+				if (canImpreg(eventSlave, V.PC)) {
+					knockMeUp(eventSlave, 10, 0, -1);
+				}
 			}
 			eventSlave.devotion += 4;
 			return t;
 		}
 
 		function gentleSex() {
-			let inHole = 0;
+			let inHole = "";
 
 			t = [];
 			t.push(`You stand up from behind your`);
@@ -708,6 +715,9 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 					eventSlave.anus++;
 				}
 				seX(eventSlave, "anal", V.PC, "penetrative");
+				if (canImpreg(eventSlave, V.PC)) {
+					knockMeUp(eventSlave, 10, 1, -1);
+				}
 			} else {
 				if (eventSlave.vagina === 0) {
 					t.push(`${He}'ll remember <span class="virginity loss">losing ${his} virginity</span> in <span class="devotion inc">such an intimate way.</span>`);
@@ -715,6 +725,9 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 					eventSlave.vagina++;
 				}
 				seX(eventSlave, "vaginal", V.PC, "penetrative");
+				if (canImpreg(eventSlave, V.PC)) {
+					knockMeUp(eventSlave, 10, 0, -1);
+				}
 			}
 			return t;
 		}
@@ -737,7 +750,7 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 			}
 			t.push(`and clearly already imagining it. You check in on ${him} later, using the video feeds, and are treated to the sight of ${him} wearing a recently-acquired, too-tight t-shirt with an old world college's mascot on it as ${he}`);
 			if ((canDoAnal(eventSlave) && eventSlave.anus === 0) || (canDoVaginal(eventSlave) && eventSlave.vagina === 0)) {
-				t.push(`<span class="virginity loss">is deflowed</span> by`);
+				t.push(`<span class="virginity loss">is deflowered</span> by`);
 			} else {
 				t.push(`rides`);
 			}
@@ -760,12 +773,18 @@ App.Events.RECIMilf = class RECIMilf extends App.Events.BaseEvent {
 				if (eventSlave.vagina === 0) {
 					eventSlave.vagina++;
 				}
+				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
+					knockMeUp(eventSlave, 10, 0, -2);
+				}
 			}
 			if (canDoAnal(eventSlave)) {
 				seX(eventSlave, "anal", "publicUse", "penetrative", 5);
 				if (eventSlave.anus === 0) {
 					eventSlave.anus++;
 				}
+				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
+					knockMeUp(eventSlave, 10, 1, -2);
+				}
 			}
 			seX(eventSlave, "oral", "publicUse", "penetrative", 5);
 			return t;
diff --git a/src/events/RECI/orientation.js b/src/events/RECI/orientation.js
index 7e667e0fdc9d0fda41d41ea230a46528dfd83f27..7c8e701f9d0bf35c110bb4b4f80a79ca99a1c15b 100644
--- a/src/events/RECI/orientation.js
+++ b/src/events/RECI/orientation.js
@@ -14,6 +14,7 @@ App.Events.RECIOrientation = class RECIOrientation extends App.Events.BaseEvent
 				s => s.vagina !== 0,
 				s => (canDoAnal(s) || canDoVaginal(s)),
 				s => s.devotion >= 10,
+				canStand,
 				canTalk,
 				canHear,
 				hasBothLegs,
@@ -317,11 +318,20 @@ App.Events.RECIOrientation = class RECIOrientation extends App.Events.BaseEvent
 				seX(eventSlave, "vaginal", V.PC, "penetrative");
 				if (canDoAnal(eventSlave)) {
 					seX(eventSlave, "anal", V.PC, "penetrative");
+					if (canImpreg(eventSlave, V.PC)) {
+						knockMeUp(eventSlave, 10, 2, -1);
+					}
 				} else {
 					seX(eventSlave, "vaginal", V.PC, "penetrative");
+					if (canImpreg(eventSlave, V.PC)) {
+						knockMeUp(eventSlave, 10, 0, -1);
+					}
 				}
 			} else if (canDoAnal(eventSlave)) {
 				seX(eventSlave, "anal", V.PC, "penetrative", 2);
+				if (canImpreg(eventSlave, V.PC)) {
+					knockMeUp(eventSlave, 10, 1, -1);
+				}
 			}
 			return t;
 		}
@@ -363,11 +373,20 @@ App.Events.RECIOrientation = class RECIOrientation extends App.Events.BaseEvent
 				seX(eventSlave, "vaginal", "public", "penetrative", 5);
 				if (canDoAnal(eventSlave)) {
 					seX(eventSlave, "anal", "public", "penetrative", 5);
+					if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
+						knockMeUp(eventSlave, 10, 2, -2);
+					}
 				} else {
 					seX(eventSlave, "vaginal", "public", "penetrative", 5);
+					if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
+						knockMeUp(eventSlave, 10, 0, -2);
+					}
 				}
 			} else {
 				seX(eventSlave, "anal", "public", "penetrative", 10);
+				if (canGetPregnant(eventSlave) && eventSlave.eggType === "human") {
+					knockMeUp(eventSlave, 10, 1, -2);
+				}
 			}
 			return t;
 		}
diff --git a/src/events/RESS/assFitting.js b/src/events/RESS/assFitting.js
index 7b4aa6026867dc589b668f24a3c995353ea000dd..58d170a2c9524893c1b4ae391cbbbc0ed330eaa7 100644
--- a/src/events/RESS/assFitting.js
+++ b/src/events/RESS/assFitting.js
@@ -12,7 +12,7 @@ App.Events.RESSAssFitting = class RESSAssFitting extends App.Events.BaseEvent {
 				s => s.butt > 5,
 				s => ["a bimbo outfit", "a biyelgee costume", "a bunny outfit", "a burkini", "a cheerleader outfit", "a comfortable bodysuit", "a dirndl", "a fallen nuns habit", "a huipil", "a latex catsuit", "a leotard", "a long qipao", "a maternity dress", "a military uniform", "a monokini", "a mounty outfit", "a nice nurse outfit", "a red army uniform", "a scalemail bikini", "a schoolgirl outfit", "a schutzstaffel uniform", "a slutty nurse outfit", "a slutty outfit", "a slutty qipao", "a slutty schutzstaffel uniform", "a succubus outfit", "attractive lingerie for a pregnant woman", "attractive lingerie", "battlearmor", "chains", "clubslut netting", "conservative clothing", "cutoffs and a t-shirt", "kitty lingerie", "lederhosen", "nice business attire", "overalls", "restrictive latex", "striped panties", "slutty business attire", "slutty jewelry", "spats and a tank top", "stretch pants and a crop-top", "uncomfortable straps", "Western clothing"].includes(s.clothes),
 				hasAnyArms,
-				hasAnyLegs,
+				canStand,
 			]
 		];
 	}
diff --git a/src/events/RESS/cockfeederResistance.js b/src/events/RESS/cockfeederResistance.js
new file mode 100644
index 0000000000000000000000000000000000000000..f09461c11002ce1d4518e05250188592c4b09a55
--- /dev/null
+++ b/src/events/RESS/cockfeederResistance.js
@@ -0,0 +1,140 @@
+App.Events.RESSCockFeederResistance = class RESSCockFeederResistance extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.cockFeeder !== 0
+		];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				canStand,
+				hasAnyArms,
+				s => s.devotion <= 20 && s.devotion >= -50,
+				s => s.trust >= -20,
+				s => s.fetish !== "cumslut"
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him
+		} = getPronouns(eventSlave);
+		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		const {s, ss, title: Master} = getEnunciation(eventSlave);
+		const desc = SlaveTitle(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(`As you're starting your day, ${V.assistant.name} pauses ${hisA} review of business matters to report that`);
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`is not accepting ${his} breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. ${eventSlave.slaveName} is in the proper position for feeding, on ${hasBothLegs(eventSlave) ? `${his} knees` : "the ground"} in front of a feeding fuckmachine. ${He} isn't sucking it off for ${his} breakfast, however. ${He} doesn't seem to be fully awake, and is ${canSee(eventSlave) ? "regarding" : "touching"} the big dildo that ${he}'s supposed to suck off for food with vague distaste. ${His} ${eventSlave.faceShape} face is scrunched into a look of tired disgust.`);
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		t.push(`${He} turns to you as you enter, and ${canSee(eventSlave) ? "seeing" : "realizing"} that it's you, ${he}`);
+		if (canTalk(eventSlave)) {
+			t.push(`mumbles unhappily, "Plea${s}e, ${Master}, plea${s}e, can I ju${s}t eat normally for one day? Thi${s} i${s}, um, kind of gro${ss}."`);
+		} else {
+			t.push(`uses hesitant gestures to beg you to let ${him} eat normally today. ${His} hand${hasBothArms(eventSlave) ? "s become" : " becomes"} vehement when it comes to the phallus in ${his} face, which ${he} apparently finds disgusting.`);
+		}
+
+		App.Events.addParagraph(node, t);
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Talk ${him} through it`, talk),
+			new App.Events.Result(`Punish ${him} with a bigger feeder`, bigFeeder),
+			new App.Events.Result(`Double penetrate ${his} mouth for insolence`, penetrate),
+			PC.balls >= 14
+				? new App.Events.Result(`Force-feed ${him} with your own cock`, forceFeed)
+				: new App.Events.Result()
+		]);
+
+		function talk() {
+			t = [];
+
+			t.push(`You put as much quiet authority into your ${canHear(eventSlave) ? "voice" : "words"} as you can, and explain to ${him} that ${he} must eat ${his} breakfast this way. You do not explain any of the actual reasons why you require slaves to eat from cocks, but couch your quiet explanation in terms of ${his} life as a slave. You tell ${him} that eating breakfast out of a dick is something you've ordered ${him} to do. ${He} needs to do it. If ${he} does, ${he}'ll be treated well; if ${he} does not, that will oblige you to punish ${him}. You tell ${him} that you would like ${him} to be a good slave, and that it would be disappointing if you had to punish ${him}. You put just a hint of steel into the last sentence, and ${he} stiffens a little at it. Hesitantly, ${he} scoots forward and bends down to take the tip of the big feeder dick in ${his} mouth. Sensing that it's being sucked, it gently presses into ${his} mouth, fucking ${his} ${eventSlave.lips > 95 ? "big-lipped facepussy" : "face"}. Its strokes get longer and faster, until ${he}'s gulping down ${his} breakfast as it's shot down ${his} throat like a huge load.`);
+
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`By this time, the kitchen is also dosing ${him} with drugs by fucking ${his} butt with a phallus that ejaculates them for absorption. ${He}'s being spitroasted by the kitchen.`);
+			}
+
+			t.push(`Once ${he}'s fully awake, ${he}'s mostly <span class="mediumaquamarine">relieved</span> that you let ${him} get away with hesitation about obedience and took the time to talk ${him} through it.`);
+
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function bigFeeder() {
+			t = [];
+
+			t.push(`You give the kitchen an order by voice command. ${canHear(eventSlave) ? "It's technical" : `${He} can't hear it`}, so ${he} doesn't understand it, but the meaning becomes clear soon enough. The phallus dangling in ${his} face is withdrawn, and ${he}'s halfway through a shocked "Thank you" when it's replaced by another, noticeably larger one.`);
+			if (!canSee(eventSlave)) {
+				t.push(`${He} doesn't notice its larger size until it bumps into ${his} cheek, causing ${him} to scoot back.`);
+			}
+			t.push(`You tell ${him} in deceptively mild ${canHear(eventSlave) ? "tones" : "words"} that you'll keep increasing the size of ${his} feeder until ${he} decides to suck it off like a good little ${desc}, or you run out of size options and are forced to strap ${him} down and push them down ${his} throat. At that point, ${he} might be able to breathe; then again, ${he} might not. ${He} begins to cry, ${his}`);
+			if (eventSlave.face > 95) {
+				t.push("heartbreakingly beautiful");
+			} else if (eventSlave.face > 10) {
+				t.push("pretty");
+			} else {
+				t.push("homely");
+			}
+			t.push(`face clouding with anguish, but is so <span class="gold">frightened</span> by the threat that ${he} doesn't let ${him} tears distract ${him} from scooting forward to suck off a huge dildo for ${his} breakfast.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`Once it senses ${he}'s complying, the kitchen starts dosing ${him} with drugs by fucking ${his} butt with a phallus that ejaculates them for absorption. Mercifully, ${he} doesn't try to refuse the anal fuckmachine, and avoids having ${his} asshole filled by a bigger phallus too.`);
+			}
+			t.push(`${He} keeps the threat in mind, and has a slightly sore throat to <span class="hotpink">help ${him} remember to obey without question.</span>`);
+
+			eventSlave.trust -= 2;
+			eventSlave.devotion += 2;
+			return t;
+		}
+
+		function penetrate() {
+			t = [];
+
+			t.push(`You step forward and caress the slave's throat, telling ${him} to suck like a good little ${desc}. You make no threat, but give ${him} the order in a ${canHear(eventSlave) ? "voice of brass" : "commanding manner"}. ${He} knows what you can do to ${him}, and scrabbles forward to obey, <span class="gold">terribly frightened.</span> ${His} fear is justified. You announce that ${he}'s avoided serious punishment, but ${he} still needs correction for ${his} hesitation and insolence. ${He} can't beg or even moan, since ${he}'s being facefucked by the feeder dildo by now, but ${his} ${App.Desc.eyesColor(eventSlave)} widen in terror. ${He} ${canSee(eventSlave) ? `can't watch you, since ${he} can't turn ${his} head,` : "can't see what you are doing,"} so ${he} has almost no time to prepare when you haul ${his} head most of the way off the feeder and shove ${PC.dick !== 0 ? "your own phallus" : "a strap-on"} into ${his} mouth, too. ${He} gags instantly, almost vomiting, but forces ${him}self to relax as you begin to thrust into ${his} throat, alternately with the feeder. The liquid food provides plenty of lubrication, and a lot of liquid for ${him} to gag on, and before long ${he}'s a degraded, humiliating mess. ${He} often clamps ${his} eyes shut as ${he} desperately concentrates on breathing, squeezing the tears out to run down ${his} ${eventSlave.skin} cheeks.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`You leave the poor slave to take ${his} drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for ${him}, ${he} doesn't object to that.`);
+			}
+
+			eventSlave.trust -= 4;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+
+		function forceFeed() {
+			t = [];
+
+			t.push(`You step forward and pull ${him} away from the feeder, telling ${him} that, since ${he} doesn't like the cockfeeder, ${he} can suck yours like a good little ${desc}. You make no threat, but order ${him} ${canHear(eventSlave) ? "in a steely voice" : "authoritatively"} to suck you off until ${he}'s earned a meal of your cum. ${He} knows what you can do to ${him}, and hurries forward to obey. ${He} rushes to open your clothes and get to work, but pauses when ${canSee(eventSlave) ? `${his} ${App.Desc.eyesColor(eventSlave)} take in your massive testicles.` : `${his} groping hand feels your massive testicles.`} Realizing just how big ${his} meal will be, ${he}'s obviously <span class="gold">frightened.</span> You grab ${his} head, breaking ${him} out of ${his} shocked stillness, and explain that you can't let ${him} starve. If ${he} won't eat out of the feeder, you'll just have to feed ${him} some other way. With that, you ram your cock forward and start fucking ${his}`);
+			if (eventSlave.face > 95) {
+				t.push("heartbreakingly beautiful");
+			} else if (eventSlave.face > 10) {
+				t.push("pretty");
+			} else {
+				t.push("homely");
+			}
+			t.push(`face. After a few minutes of gagging oral, you start to approach your climax. Your thorough facefucking leaves ${him} unable to beg or even moan, but ${his} eyes widen in terror when ${he} realizes you're about to cum. You don't give ${him} any time to prepare, instead hilting yourself immediately, and letting ${his} throat's desperate attempts to swallow bring you over the edge. You begin your long release of pent-up jizz, spraying deciliter after deciliter of cum down ${his} throat and into ${his} stomach. By the time you've finished, you can tell ${he}'s struggling for air and in pain from the massive quantity of thick fluid in ${his} stomach. You give ${him} a helpful hint before releasing ${him}: "If you take it all the way in your throat, you don't even have to ${canTaste(eventSlave) ? "taste" : "feel"} what it's feeding you." You pull out of ${his} mouth and let ${him} go. ${He} gasps for air and almost immediately vomits some of your cum all over ${him}self, turning ${him} into a degraded, humiliated mess. ${He} lays on the floor and desperately concentrates on breathing, squeezing the tears out of ${his} eyes to run down ${his} ${eventSlave.skin} cheeks.`);
+			if (V.suppository !== 0 && eventSlave.drugs !== "none") {
+				t.push(`You leave the poor slave to take ${his} drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for ${him}, ${he} doesn't object to that.`);
+			}
+
+			eventSlave.trust -= 2;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+	}
+};
diff --git a/src/events/RESS/escapee.js b/src/events/RESS/escapee.js
new file mode 100644
index 0000000000000000000000000000000000000000..87a53cb7dfa5799dc796ade6226f35c061b8615a
--- /dev/null
+++ b/src/events/RESS/escapee.js
@@ -0,0 +1,175 @@
+App.Events.RESSEscapee = class RESSEscapee extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				canWalk,
+				s => s.devotion < -50,
+				s => s.trust >= -50,
+				s => s.assignment !== Job.CONFINEMENT
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, his, him
+		} = getPronouns(eventSlave);
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave);
+
+		let t = [];
+
+		t.push("An escape attempt occurs and is stopped almost before you are informed of it.");
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`made a rash attempt to leave the penthouse, but ${V.assistant.name} monitors everyone constantly and was able to enclose ${him} before ${he} got very far.`);
+		if (V.assistant.personality === 0) {
+			t.push("It reports impersonally that the would-be escapee is locked in the entryway awaiting your judgment.");
+		} else {
+			t.push(`${He} reports suggestively that the would-be escapee is locked in the entryway awaiting your pleasure.`);
+		}
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		if (V.arcologyUpgrade.drones === 1) {
+			t.push(`Your advanced security systems are able to stop ${him} promptly, and there is no indication to the public that any escape attempt was made.`);
+		} else {
+			t.push(`Your basic security systems are only able to stop ${him} by briefly locking down your penthouse, exciting <span class="red">some adverse public comment.</span>`);
+			repX(-100, "event", eventSlave);
+		}
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		if (eventSlave.indentureRestrictions > 0) {
+			t.push(`This behavior has violated ${his} indenture contract, allowing you to apply more severe punishments that might otherwise breach it.`);
+			App.Events.addParagraph(node, t);
+			t = [];
+		}
+
+		App.Events.addResponses(node, [
+			new App.Events.Result("Do nothing", nothing),
+			new App.Events.Result("Just confine the would-be escapee to prevent future attempts", confine),
+			new App.Events.Result("Flog the would-be escapee", flog),
+			...(V.seeExtreme === 1 ? [
+				(hasAnyNaturalLegs(eventSlave) && eventSlave.heels === 0
+					? new App.Events.Result("Clip the would-be escapee's tendons", clip)
+					: new App.Events.Result()
+				),
+				(hasAnyNaturalLimbs(eventSlave)
+					? new App.Events.Result("Amputate the would-be escapee's limbs", amputate)
+					: new App.Events.Result()
+				),
+				(canSee(eventSlave)
+					? new App.Events.Result("Blind the would-be escapee", blind)
+					: new App.Events.Result()
+				),
+				(canTalk(eventSlave)
+					? new App.Events.Result("Mute the would-be escapee", mute)
+					: new App.Events.Result()
+				)
+			] : []
+			)
+		]);
+
+		function nothing() {
+			t = [];
+
+			t.push(`Considering how easily this attempt was thwarted, you don't see much of a point in wasting your valuable time on punishing ${eventSlave.slaveName} in the hopes that ${he}'ll learn ${his} lesson. You send ${him} back to ${his} assigned duties, warning ${him} that you may not be so lenient in the future. ${eventSlave.slaveName} proclaims ${his} obedience, but, privately, it's clear that ${he} views your decision as <span class="mediumorchid">an act of weakness</span> rather than kindness. In addition, every single one of your other slaves not already obedient to you is <span class="orangered">encouraged in their trust that you won't hurt them</span> by this minuscule punishment of an escape attempt.`);
+
+			eventSlave.devotion -= 10;
+			eventSlave.trust += 2;
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust += 8; } });
+
+			return t;
+		}
+
+		function confine() {
+			t = [];
+
+			t.push(`You order ${eventSlave.slaveName} confined until further notice. ${eventSlave.slaveName} is <span class="hotpink">a little crushed</span> by ${his} failure to escape. However, every single one of your other slaves not already obedient to you is slightly <span class="orangered">encouraged in their trust that you won't hurt them</span> by this moderate punishment of an escape attempt.`);
+
+			eventSlave.devotion += 4;
+			assignJob(eventSlave, "stay confined");
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust += 4; } });
+
+			return t;
+		}
+
+		function flog() {
+			t = [];
+
+			t.push(`Lesser whippings are usually performed by binding a slave's hands and then securing them to the ceiling so that ${he} will dance titillatingly when struck. This is not such a beating. You tie ${eventSlave.slaveName} to a wall by ${his} wrists and ankles and flog ${him} with workmanlike thoroughness${eventSlave.pregKnown === 1 ? `, making sure to avoid accidentally ending ${his} pregnancy` : ""}. ${He} passes from angry struggles to agonized sobbing and finally to bloody, exhausted weeping before you untie ${his} now-limp form and apply first aid. ${eventSlave.slaveName}'s rebelliousness is <span class="gold">dulled by the experience,</span> and ${his} <span class="red">health is damaged.</span> Furthermore, every single one of your other slaves not already obedient to you is <span class="gold">frightened</span> by the example set.`);
+
+			eventSlave.trust -= 5;
+			healthDamage(eventSlave, 40);
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });
+
+			return t;
+		}
+
+		function clip() {
+			t = [];
+
+			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. ${eventSlave.slaveName} is <span class="mediumorchid">saddened</span> and <span class="gold">frightened</span> by this punishment, and ${his} <span class="red">health is damaged</span> by the surgery. Every single one of your other slaves with any resistance left in them is <span class="gold">sensibly restrained</span> from trying such rash acts.`);
+
+			eventSlave.devotion -= 5;
+			eventSlave.trust -= 5;
+			eventSlave.heels = 1;
+			surgeryDamage(eventSlave, 10);
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });
+
+			return t;
+		}
+
+		function amputate() {
+			t = [];
+
+			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. ${eventSlave.slaveName} is <span class="mediumorchid">filled with implacable hatred</span> by this terrible punishment, and ${his} <span class="red">health is damaged</span> by the major surgery. However, every single one of your other slaves not already obedient to you is <span class="gold">utterly terrified</span> by the example set.`);
+
+			eventSlave.devotion -= 50;
+			eventSlave.trust -= 50;
+			eventSlave.diet = "healthy";
+			removeLimbs(eventSlave, "all");
+			surgeryDamage(eventSlave, 40);
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } });
+
+			return t;
+		}
+
+		function blind() {
+			t = [];
+
+			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, weeping form through the penthouse to the surgery. You make sure to point out all the things ${he}'ll never get to see again. ${eventSlave.slaveName} is <span class="mediumorchid">filled with implacable hatred</span> by this terrible punishment, and ${his} <span class="red">health is slightly damaged</span> by the surgery. However, every single one of your other slaves not already obedient to you is <span class="gold">utterly terrified</span> by the example set.`);
+
+			eventSlave.devotion -= 50;
+			eventSlave.trust -= 50;
+			eyeSurgery(eventSlave, "both", "blind");
+			surgeryDamage(eventSlave, 20);
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } });
+
+			return t;
+		}
+
+		function mute() {
+			t = [];
+
+			t.push(`The simple thing to do would be to sedate ${eventSlave.slaveName} and haul ${him} to the remote surgery for ${his} punishment. That would deny ${him} the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain ${him}, pronounce judgment, and drag ${his} struggling, protesting form through the penthouse to the surgery. ${He} is allowed one last chance to verbally resist you, plead with you, and finally to beg with you, all in vain. ${eventSlave.slaveName} is <span class="mediumorchid">filled with hatred</span> and <span class="gold">terror</span> by this harsh punishment, and ${his} <span class="red">health is slightly damaged</span> by the surgery. However, every single one of your other slaves not already obedient to you is <span class="hotpink">terrified</span> by the example set.`);
+
+			eventSlave.devotion -= 5;
+			eventSlave.trust -= 25;
+			eventSlave.voice = 0;
+			surgeryDamage(eventSlave, 10);
+			V.slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } });
+
+			return t;
+		}
+	}
+};
diff --git a/src/events/RESS/hotPC.js b/src/events/RESS/hotPC.js
index bd4ae647a5e08852f4aa60d2f46a2dad553734db..a3f6d88267a008431a994c1a3cbd1b41d32dcd3a 100644
--- a/src/events/RESS/hotPC.js
+++ b/src/events/RESS/hotPC.js
@@ -9,9 +9,9 @@ App.Events.RESSHotPC = class RESSHotPC extends App.Events.BaseEvent {
 				s => s.energy > 40,
 				s => s.devotion > 0 && s.devotion <= 50,
 				s => s.trust >= -50,
+				canMove,
 				canSee,
 				hasAnyArms,
-				hasAnyLegs,
 				s =>
 					(s.attrXX >= 50 && V.PC.belly < 5000 && (V.PC.boobs >= 300 || V.PC.title === 0)) ||
 					(s.attrXY >= 50 && V.PC.dick > 0 && V.PC.boobs < 300 && V.PC.belly < 1500) ||
diff --git a/src/events/RESS/lazyEvening.js b/src/events/RESS/lazyEvening.js
index ec6d378d45cc397ec5fcbca87a27b481575c9f12..387bbfe9d44a0e1369ece5dc5c562edef6de02e6 100644
--- a/src/events/RESS/lazyEvening.js
+++ b/src/events/RESS/lazyEvening.js
@@ -7,8 +7,8 @@ App.Events.RESSLazyEvening = class RESSLazyEvening extends App.Events.BaseEvent
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => (s.assignment === Job.FUCKTOY || s.assignment === Job.MASTERSUITE || s.assignment === Job.CONCUBINE),
 				s => s.devotion > 20,
 			]
diff --git a/src/events/RESS/moistPussy.js b/src/events/RESS/moistPussy.js
index 296f40ee3b3755d3182e50a41460f7dbb56348f3..b0ac5aeee8b922a2ce5bad936e5d9a2df037e9ce 100644
--- a/src/events/RESS/moistPussy.js
+++ b/src/events/RESS/moistPussy.js
@@ -31,7 +31,7 @@ App.Events.RESSMoistPussy = class RESSMoistPussy extends App.Events.BaseEvent {
 		t.push("Just as you're about to give");
 		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
 		t.push(`${his} weekly inspection, a minor business matter comes up and diverts your attention.`);
-		t.push(`So, for about ten minutes, ${he} has nothing at all to do other than ${canWalk(eventSlave) ? "stand" : hasAnyLegs(eventSlave) ? "kneel" : "sit"} in front of your desk in your office, ${canSee(eventSlave) ? "watching" : canHear(eventSlave) ? "listening to" : "feeling the subtle vibrations from"} you, ${(V.assistant.personality > 0) ? `${V.assistant.name}'s avatar,` : ""} the other slaves who come and go, and the general lewdness of the arcology, much of which is ${(canSee(eventSlave)) ? "visible" : canHear(eventSlave) ? "audible" : "apparent"} from right here.`);
+		t.push(`So, for about ten minutes, ${he} has nothing at all to do other than ${canStand(eventSlave) ? "stand" : hasAnyLegs(eventSlave) ? "kneel" : "sit"} in front of your desk in your office, ${canSee(eventSlave) ? "watching" : canHear(eventSlave) ? "listening to" : "feeling the subtle vibrations from"} you, ${(V.assistant.personality > 0) ? `${V.assistant.name}'s avatar,` : ""} the other slaves who come and go, and the general lewdness of the arcology, much of which is ${(canSee(eventSlave)) ? "visible" : canHear(eventSlave) ? "audible" : "apparent"} from right here.`);
 		if ((eventSlave.attrXY > 50) && (V.PC.boobs < 300)) {
 			t.push(`${He} finds your strong body attractive, and ${his} gaze rests most frequently ${canSee(eventSlave) ? "on" : "towards"} you.`);
 		} else if ((eventSlave.attrXX > 50) && (V.PC.boobs >= 650)) {
@@ -55,7 +55,7 @@ App.Events.RESSMoistPussy = class RESSMoistPussy extends App.Events.BaseEvent {
 		App.Events.addParagraph(node, t);
 
 		t = [];
-		t.push(`Your slaves are all in the very best of vaginal health, so the scent of ${his} female arousal is not strong. But ${his} cunt produces such copious natural lubricant that with nothing to do but ${canWalk(eventSlave) ? "stand" : "rest"} there, ${his} ${eventSlave.counter.births > 0 ? "motherly" : eventSlave.weight > 30 ? "thick" : eventSlave.muscles > 30 ? "strong" : "feminine"} inner thighs are soon slick with a sheen of healthy pussyjuice. You notice a droplet of the stuff running down ${his} warm ${eventSlave.skin} skin.`);
+		t.push(`Your slaves are all in the very best of vaginal health, so the scent of ${his} female arousal is not strong. But ${his} cunt produces such copious natural lubricant that with nothing to do but ${canStand(eventSlave) ? "stand" : "rest"} there, ${his} ${eventSlave.counter.births > 0 ? "motherly" : eventSlave.weight > 30 ? "thick" : eventSlave.muscles > 30 ? "strong" : "feminine"} inner thighs are soon slick with a sheen of healthy pussyjuice. You notice a droplet of the stuff running down ${his} warm ${eventSlave.skin} skin.`);
 		if (canAchieveErection(eventSlave) && eventSlave.chastityPenis !== 1) {
 			t.push(`${His} ${eventSlave.dick > 3 ? "stiff prick" : "hard little dick"} is sticking up from atop ${his} pussy, leaving it nice and visible.`);
 		} else if (eventSlave.dick > 0) {
diff --git a/src/events/RESS/muscles.js b/src/events/RESS/muscles.js
index 5e0a0ea033f65a6283a00f323208f7969632e78d..926e5b6226706496ff2a1934f5c459ca3eb4a56a 100644
--- a/src/events/RESS/muscles.js
+++ b/src/events/RESS/muscles.js
@@ -7,8 +7,8 @@ App.Events.RESSMuscles = class RESSMuscles extends App.Events.BaseEvent {
 		return [
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
+				canMove,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.muscles > 30,
 				s => s.weight <= 10
 			]
diff --git a/src/events/RESS/obedientBitchy.js b/src/events/RESS/obedientBitchy.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b683338edf75e22a5a7114937762a69bcb4f09d
--- /dev/null
+++ b/src/events/RESS/obedientBitchy.js
@@ -0,0 +1,141 @@
+App.Events.RESSObedientBitchy = class RESSObedientBitchy extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				canTalk,
+				canSee,
+				s => s.behavioralFlaw === "bitchy",
+				s => s.devotion > 20,
+				s => s.trust >= -20
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him
+		} = getPronouns(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave);
+
+		let t = [];
+
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`is a decent slave, pretty well broken to your will and generally obedient. However, ${he} retains a cutting tongue. Though ${he}'s learned to ${his} considerable cost not to direct ${his} cheek at you, ${he} still insults your other slaves, and worse, will be sarcastic to members of the public ${he} encounters. You've worked on it, but it remains unsolved. Today, however, ${he} crossed the line. You were doing business in your office with a respected female slave drug wholesaler. The woman is in her late forties, and though she's something of a plastic surgery addict she has permitted her hair to go a becoming steel grey. Passing your office, ${eventSlave.slaveName} audibly commented on how old she looked to `);
+		if (canStand(eventSlave)) {
+			t.push(`another slave.`);
+		} else {
+			t.push(`${his} aide.`);
+		}
+		t.push(`Anger flashes in the businesswoman's eyes.`);
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		App.Events.addResponses(node, [
+			new App.Events.Result("Beg her pardon and offer to loan the bitch to her", loan),
+			new App.Events.Result("Offer to spitroast the bitch between the two of you", spitroast, analVirginWarning()),
+			V.arcade > 0
+				? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade)
+				: new App.Events.Result()
+		]);
+
+		function loan() {
+			t = [];
+
+			t.push(`The businesswoman's anger turns to malicious anticipation as you call ${eventSlave.slaveName} over and inform ${him} that you and the businesswoman have decided ${eventSlave.slaveName} will be spending the night with her. Now that you look at your business partner, she has certain signs of a sadist. ${eventSlave.slaveName} notices too, and begins to cry ${eventSlave.bellyPreg >= 1500 ? `and shield ${his} pregnancy` : ""} as the businesswoman promises that there will be "no permanent damage." ${eventSlave.slaveName} is unceremoniously returned in the early hours of the morning. ${His} back and buttocks have been meticulously flogged right up to the very edge of damage, leaving angry marks across ${his} ${eventSlave.skin} skin. ${His} mouth lolls open, as though ${he}'s been doing little but give cunnilingus.`);
+			if (eventSlave.vagina !== -1) {
+				t.push(`${His} pussy,`);
+			} else if (eventSlave.dick === 0) {
+				t.push(`${His} shamefully featureless groin with its tiny little hole,`);
+			} else {
+				t.push(`${His} dick,`);
+			}
+			t.push(`anus, ${eventSlave.belly >= 10000 ? "popped navel," : ""} and even ${his} nipples show signs of torture. Whenever ${he} thinks of a sharp remark in the future, <span class="hotpink">${he}'ll remember the pain and keep ${his} mouth shut.</span>`);
+
+			eventSlave.behavioralFlaw = "none";
+			seX(eventSlave, "oral", "public", "penetrative", 5);
+
+			return t;
+		}
+
+		function spitroast() {
+			t = [];
+
+			t.push(`The businesswoman grins slowly and reaches into ${his} purse as you inform ${eventSlave.slaveName} that you and the businesswoman will punish ${him} together. ${eventSlave.slaveName}'s eyes widen as the businesswoman fishes a massive strap-on out of ${his} bag. The surprise turns to fear as the businesswoman begins to slap it against ${eventSlave.slaveName}'s buttocks as you`);
+			if (!isAmputee(eventSlave)) {
+				if (eventSlave.belly >= 300000) {
+					t.push(`push ${him} onto ${his} ${belly} belly.`);
+				} else {
+					t.push(`pull ${him} down on ${hasAllLimbs(eventSlave) ? "all fours." : "the ground."}`);
+				}
+			} else {
+				t.push("arrange your bitchy little sex toy between you and your guest.");
+			}
+			t.push(`The businesswoman clearly wants ${his} ass, so you ${!canDoAnal(eventSlave.slaveName) ? `quickly unfasten ${his} anal chastity. You` : ""} ${PC.vagina !== -1 ? `ride ${eventSlave.slaveName}'s face` : `facefuck ${eventSlave.slaveName}`} roughly as ${eventSlave.slaveName} takes a painful anal raping from the huge dildo. The businesswoman winks at you companionably and extracts squeals from ${eventSlave.slaveName} that feel especially delicious ${PC.vagina !== -1 ? "against your cunt" : "along your dick"}.`);
+			if (canMove(eventSlave)) {
+				t.push(`${eventSlave.slaveName} collapses ${eventSlave.belly >= 5000 ? `and rolls onto ${his} side` : ""} after a long punishment fuck;`);
+			} else {
+				t.push(`${eventSlave.slaveName} ends the day a sore toy;`);
+			}
+			t.push(`${his} <span class="hotpink">submission</span> to you and <span class="gold">fear of you</span> have both increased.`);
+
+			if (eventSlave.anus === 0) {
+				t.push(`The businesswoman considered ${his} <span class="lime">anal cherry</span> a <span class="green">respectable offer.</span>`);
+				eventSlave.anus++;
+				repX(500, "event", eventSlave);
+			}
+
+			eventSlave.devotion += 3;
+			eventSlave.trust -= 3;
+			seX(eventSlave, "anal", "public", "penetrative");
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+
+		function arcade() {
+			t = [];
+
+			t.push(`${eventSlave.slaveName} screams and begs when ${he} realizes what ${his} punishment for being stupid is to be, but you are obdurate.`);
+			if (eventSlave.muscles > 30) {
+				t.push(`${His} powerful form has to be sedated for immurement in the arcade.`);
+			} else if (eventSlave.weight >= 190) {
+				t.push(`${He} is so massively fat that immuring ${him} in the arcade is a struggle, even when ${he} isn't trying to.`);
+			} else if (eventSlave.belly >= 120000) {
+				t.push(`${He} is so enormously gravid that immuring ${him} in the arcade is a hassle, even though ${his} ${belly} middle limits ${his} ability to struggle.`);
+			} else if (eventSlave.weight >= -10) {
+				t.push(`${His} desperate struggles make immuring ${him} in the arcade difficult.`);
+			} else if (eventSlave.belly >= 1500) {
+				t.push(`${His} ${eventSlave.bellyPreg >= 3000 ? "pregnant" : `${belly}`} body makes it slightly difficult to fit ${him} properly into the restraints for immurement in the arcade.`);
+			} else if (eventSlave.muscles < -15) {
+				t.push(`${His} weak body makes immuring ${him} in the arcade pathetically easy.`);
+			} else {
+				t.push(`${His} thin form makes immuring ${him} in the arcade pathetically easy.`);
+			}
+			t.push(`After ${he}'s properly confined, the only sign of ${his} discomfiture is a slight movement of ${his} ${eventSlave.skin} butt as ${he} wriggles desperately against ${his} restraints.`);
+
+			assignJob(eventSlave, "be confined in the arcade");
+			eventSlave.sentence = 4;
+			return t;
+		}
+
+		function analVirginWarning() {
+			if (eventSlave.anus === 0) {
+				return "This option will take anal virginity and ignore anal chastity";
+			}
+		}
+	}
+};
diff --git a/src/events/RESS/obedientIdiot.js b/src/events/RESS/obedientIdiot.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6a24c1c93b7b0d690da70570f9bfd4a7e1a6bad
--- /dev/null
+++ b/src/events/RESS/obedientIdiot.js
@@ -0,0 +1,167 @@
+App.Events.RESSObedientIdiot = class RESSObedientIdiot extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.cockFeeder === 0
+		];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				canMove,
+				hasAnyArms,
+				s => s.intelligence + s.intelligenceImplant < -50,
+				s => s.devotion <= 50,
+				s => s.devotion > -20 || s.trust < -20
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him, himself, girl
+		} = getPronouns(eventSlave);
+		const {HeA, heA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		const {say, title: Master} = getEnunciation(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(`${capFirstChar(V.assistant.name)} breaks in on your work at your desk.`);
+		t.push(App.UI.DOM.combineNodes(`"${assistant.personality === 0 ? properTitle() : "Sweetheart"}," ${heA} says, "`, App.UI.DOM.slaveDescriptionDialog(eventSlave)));
+		t.push("is having trouble figuring out the meal dispenser again.");
+		if (V.assistant.personality === 0) {
+			t.push(`The report is deadpan, but ${heA} brings up a visual feed.`);
+		} else {
+			t.push(`${HeA} brings up a visual feed. "Poor baby!" ${heA} exclaims.`);
+		}
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		t.push(`Slaves are supposed to place a cup under a spigot, which detects the cup's presence and dispenses the appropriate nutrition for the ${girl}. Unfortunately this concept seems a little tough for ${eventSlave.slaveName}. With no one around to ask for help, ${he} has resorted to trying to suck food out of the spigot with ${his} mouth. With no cup to be detected, ${he}'s not getting very far, and is getting bitterly frustrated.`);
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Give ${him} something more appropriate to suck on`, suck),
+			new App.Events.Result(`Reassure ${him} and get ${him} to slow down`, reassure),
+			new App.Events.Result(`Spank the stupid out of ${him}`, spank),
+			V.arcade > 0
+				? new App.Events.Result(`Sentence ${him} to a month in the arcade`, arcade)
+				: new App.Events.Result()
+		]);
+
+		function suck() {
+			t = [];
+
+			t.push(`${capFirstChar(V.assistant.name)}, as usual, has to give the stupid slut considerable coaching to get ${him} to your office without getting lost. This is a near-miraculous imbecility, as the penthouse is expressly designed to make it nearly impossible to get anywhere from anywhere else without passing by the office door. ${He} understands orders to`);
+			if (PC.dick === 0) {
+				t.push(`perform cunnilingus, though, and gets down to it eagerly enough. When ${he} finishes the job, ${he} wipes ${his} mouth and then looks up at you doubtfully.`);
+			} else {
+				t.push(`suck a dick, though, and gets down to it eagerly enough. When ${he} finishes the job, ${he} busily swallows every drop of your ejaculate and then looks up at you doubtfully.`);
+			}
+			if (!canTalk(eventSlave)) {
+				t.push(`${He} slowly spells out a question with ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"}, asking if ${he}'s a good slave.`);
+			} else {
+				t.push(`${He} mumbles a hesitant question:`);
+				t.push(Spoken(eventSlave, `"${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}, am I a good slave?"`));
+			}
+			t.push(`You tell ${him} that ${he} is, running a hand ${eventSlave.hStyle === "shaved bald" ? `across ${his} bald scalp` : `through ${his} hair`}. ${He} seems <span class="hotpink">reassured,</span> and thankful when you give ${him} a cup of ${his} proper rations from your own hand.`);
+
+			eventSlave.devotion += 4;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+
+		function reassure() {
+			t = [];
+
+			t.push(`${He}'s so intent on trying to suck off the food dispenser that ${he} doesn't ${canHear(eventSlave) ? "hear" : "notice"} you enter the room. ${He} starts with surprise when you encircle ${his}`);
+			if (eventSlave.belly >= 1500) {
+				t.push(`${belly} ${eventSlave.bellyPreg >= 1500 ? "pregnant" : ""} belly`);
+			} else {
+				t.push("waist");
+			}
+			t.push(`with your arms and ${canHear(eventSlave) ? `murmur reassuringly in ${his} ear` : `give ${him} a reassuring squeeze`}.`);
+			if (canTalk(eventSlave)) {
+				t.push(`${He} ${say}s sadly,`);
+				t.push(Spoken(eventSlave, `"$Sorry ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}. I'm trying to be a good slave but it's hard."`));
+			} else {
+				t.push(`${He} sadly gestures at the spigot and then flicks ${his} own head.`);
+			}
+			t.push(`You kindly tell ${him} that you know ${he}'s trying, and that that's what really matters.`);
+			if (canTalk(eventSlave)) {
+				t.push(Spoken(eventSlave, `"Really, ${eventSlave.rudeTitle === 1 ? PoliteRudeTitle(eventSlave) : Master}?"`));
+				t.push(`${he} asks hopefully.`);
+			} else {
+				if (hasBothArms(eventSlave)) {
+					t.push(`${His} hands awkwardly ask, "Really?"`);
+				} else {
+					t.push(`${His} hand awkwardly asks, "Really?"`);
+				}
+			}
+			t.push(`You whisper into ${his} ear that yes, ${he} will be all right as long as ${he} does ${his} best. ${He} wiggles ${his} butt against you a little and giggles`);
+			if (PC.dick !== 0) {
+				t.push(`at the responding stiffness ${he} feels between ${his} buttocks. ${He} shimmies down and takes you into ${his} mouth${PC.vagina !== 1 ? ` and does ${his} best to reach the top of your pussy with the tip of ${his} tongue` : ""},`);
+			} else {
+				t.push(`as you shove ${him} to ${his} knees. ${He} shimmies down and eats you out,`);
+			}
+			t.push(`${canSee(eventSlave) ? "looking you in the eyes the whole time and" : ""} <span class="hotpink">smiling</span> as much as ${he} can manage with ${PC.dick !== 0 ? `a dick in ${his} mouth` : `${his} tongue working your clit`}.`);
+
+			eventSlave.devotion += 4;
+			seX(eventSlave, "oral", PC, "penetrative");
+			return t;
+		}
+
+		function spank() {
+			t = [];
+
+			t.push(`${He}'s so intent on trying to suck off the food dispenser that ${he} doesn't ${canHear(eventSlave) ? "hear" : "notice"} you enter the room. ${He} starts with surprise when you seize ${him} and push ${him}`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`over ${his} ${belly} belly, face-down into the counter.`);
+			} else {
+				t.push(`face-down across the counter.`);
+			}
+			t.push(`After making ${him} confirm that ${canHear(eventSlave) ? `${he} can hear you` : `${he}'s paying attention`}, you patiently repeat the very simple instructions for getting meals from the kitchen. Then, you tell ${him} to repeat them. ${He} manages the first step fine and has completely forgotten the second. The moment ${he} hesitates, ${he} has an instant to ${canHear(eventSlave) ? "hear" : "feel"} the rush of air trying to get out of the way of your speeding palm before it contacts the ${eventSlave.skin} skin of ${his} buttocks. ${He} writhes and cries and promises to try harder, but ${his} poor rear end is almost raw before ${he} gets it all right. ${He} leaves the kitchen snuffling sadly to ${himself}, but in the coming days ${he} really does seem to <span class="gold">do ${his} best</span> to avoid another beating.`);
+
+			eventSlave.trust -= 5;
+			return t;
+		}
+
+		function arcade() {
+			t = [];
+
+			t.push(`${eventSlave.slaveName} screams and begs when ${he} realizes what ${his} punishment for being stupid is to be, but you are obdurate.`);
+			if (eventSlave.muscles > 30) {
+				t.push(`${His} powerful form has to be sedated for immurement in the arcade.`);
+			} else if (eventSlave.weight >= 190) {
+				t.push(`${He} is so massively fat that immuring ${him} in the arcade is a struggle, even when ${he} isn't trying to.`);
+			} else if (eventSlave.belly >= 120000) {
+				t.push(`${He} is so enormously gravid that immuring ${him} in the arcade is a hassle, even though ${his} ${belly} middle limits ${his} ability to struggle.`);
+			} else if (eventSlave.weight >= -10) {
+				t.push(`${His} desperate struggles make immuring ${him} in the arcade difficult.`);
+			} else if (eventSlave.belly >= 1500) {
+				t.push(`${His} ${eventSlave.bellyPreg >= 3000 ? "pregnant" : `${belly}`} body makes it slightly difficult to fit ${him} properly into the restraints for immurement in the arcade.`);
+			} else if (eventSlave.muscles < -15) {
+				t.push(`${His} weak body makes immuring ${him} in the arcade pathetically easy.`);
+			} else {
+				t.push(`${His} thin form makes immuring ${him} in the arcade pathetically easy.`);
+			}
+			t.push(`After ${he}'s properly confined, the only sign of ${his} discomfiture is a slight movement of ${his} ${eventSlave.skin} butt as ${he} wriggles desperately against ${his} restraints.`);
+
+			assignJob(eventSlave, "be confined in the arcade");
+			eventSlave.sentence = 4;
+			return t;
+		}
+	}
+};
diff --git a/src/events/RESS/retchingCum.js b/src/events/RESS/retchingCum.js
index 05c48157f205fa4be9eb31488645922bc6458b1d..a8e6ebdbf19eaea598aad498b577dbeddb13b454 100644
--- a/src/events/RESS/retchingCum.js
+++ b/src/events/RESS/retchingCum.js
@@ -8,8 +8,8 @@ App.Events.RESSRetchingCum = class RESSRetchingCum extends App.Events.BaseEvent
 			[
 				s => s.fetish !== "mindbroken",
 				s => s.assignment !== "work as a servant",
+				canStand,
 				hasAnyArms,
-				hasAnyLegs,
 				s => s.dietCum > 0,
 				s => s.devotion <= 20,
 				s => (s.fetish !== "cumslut" && s.fetish !== "masochist" && s.fetishStrength < 60) || s.fetishKnown === 0,
diff --git a/src/events/RESS/suppositoryResistance.js b/src/events/RESS/suppositoryResistance.js
new file mode 100644
index 0000000000000000000000000000000000000000..e30e952568ecdb264be35982ccb4c852c3ac1f68
--- /dev/null
+++ b/src/events/RESS/suppositoryResistance.js
@@ -0,0 +1,162 @@
+App.Events.RESSSuppositoryResistance = class RESSSuppositoryResistance extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => V.suppository !== 0
+		];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				canStand,
+				hasAnyArms,
+				s => s.drugs !== "none",
+				s => s.devotion <= 20 && s.devotion >= -50,
+				s => s.trust >= -20,
+				s => s.fetish !== "buttslut"
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him
+		} = getPronouns(eventSlave);
+		const {hisA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		const {s, sh, ss, title: Master} = getEnunciation(eventSlave);
+		const desc = SlaveTitle(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(`As you're starting your day, ${V.assistant.name} pauses ${hisA} review of business matters to report that`);
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		t.push(`is not accepting ${his} drugs from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. ${eventSlave.slaveName} is standing in front of the place where ${he}'s supposed to take ${his} drugs. It's a little pad on the ground on which ${he}'s supposed to kneel, with a fuckmachine positioned to penetrate ${his} anus once ${he} does so. ${He}'s not completely awake yet, and is just standing there, ${canSee(eventSlave) ? "viewing" : "feeling"} the setup with a vague look of distaste. ${He}'s facing it, and has ${his}`);
+		if (eventSlave.butt > 6) {
+			t.push("massive behind");
+		} else if (eventSlave.butt > 3) {
+			t.push("beautiful bottom");
+		} else {
+			t.push("cute butt");
+		}
+		t.push("pointed very much away from the machine that's supposed to be fucking it.");
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		t.push(`${He} turns to you as you enter, and ${canSee(eventSlave) ? "seeing" : "realizing"} that it's you, ${he}`);
+		if (canTalk(eventSlave)) {
+			t.push(`mumbles unhappily, "Plea${s}e, ${Master}, can I ju${s}t take a ${sh}ot? A${ss}rape from, you know, people, i${s}, um, bad enough."`);
+		} else {
+			t.push(`uses hesitant gestures to beg you to let ${him} take ${his} drugs normally. ${He} tries to use gestures to explain that ${he} thinks ${he} gets enough anal from humans, without being buttfucked by a machine every morning.`);
+		}
+
+		App.Events.addParagraph(node, t);
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Talk ${him} through it`, talk),
+			new App.Events.Result(`Punish ${him} with a bigger phallus`, bigPhallus),
+			new App.Events.Result(`Double penetrate ${his} ass for insolence`, penetrate)
+		]);
+
+		function talk() {
+			t = [];
+
+			t.push(`You put as much quiet authority into your ${canHear(eventSlave) ? "voice" : "words"} as you can, and explain to ${him} that ${he} is required to take ${his} drugs up ${his} ass. You do not explain any of the actual reasons why you require slaves to submit to daily machine anal, but couch your quiet explanation in terms of ${his} life as a slave. You tell ${him} that taking a solid buttfuck from a machine first thing in the morning is something you've ordered ${him} to do. ${He} needs to do it. If ${he} does, ${he}'ll be treated well; if ${he} does not, that will oblige you to punish ${him}. You tell ${him} that you would like ${him} to be a good slave, and that it would be disappointing if you had to punish ${him}. You put just a hint of steel into the last sentence, and ${he} stiffens a little at it. Hesitantly, ${he}`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`shifts onto ${his} ${belly} belly, uses ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to brace ${him}self against the impending pounding, and scoots towards the phallus.`);
+			} else {
+				t.push(`gets to ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"}, using ${his} ${hasBothArms(eventSlave) ? "hands" : "hand"} to spread ${his} cheeks for the phallus.`);
+			}
+			t.push(`Sensing that it's being offered an anus, it gently pushes inside ${his} rectum. Its strokes get longer and faster,`);
+			if (eventSlave.anus > 2) {
+				t.push(`until ${he}'s groaning under the sodomy despite ${his} loose ass.`);
+			} else if (eventSlave.anus > 1) {
+				t.push(`quickly gaping ${his} big butthole and making ${him} groan.`);
+			} else {
+				t.push(`making ${him} gasp as it stretches ${his} poor little asshole.`);
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`${He} doesn't manage to groan for long, though, since the kitchen extends another phallus to feed ${him} ${his} breakfast. Before long, ${he}'s being spitroasted by machines.`);
+			}
+			t.push(`Once ${he}'s fully awake, ${he}'s mostly <span class="mediumaquamarine">relieved</span> that you let ${him} get away with hesitation about obedience and took the time to talk ${him} through it.`);
+
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function bigPhallus() {
+			t = [];
+
+			t.push(`You give the kitchen an order by voice command. ${canHear(eventSlave) ? "It's technical" : `${He} can't hear it`}, so ${he} doesn't understand it, but the meaning becomes clear soon enough. The phallus aiming meaningfully at the place where ${he}'s supposed to kneel and offer up ${his} butthole is withdrawn, and ${he}'s halfway through a shocked thank you when it's replaced by another, noticeably larger. You tell ${him} in deceptively mild tones that you'll keep increasing the size of ${his} phallus until ${he} decides to get down and take it like a good little ${desc}, or you run out of size options and are forced to strap ${him} down and apply two at once. At that point, ${his} ass might be able to take it; then again, it might not. ${He} begins to cry, but is so <span class="gold">frightened</span> by the threat that ${he} doesn't let ${his} tears distract ${him} from a delectable scramble to`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`throw ${him}self onto ${his} ${belly} belly and`);
+			} else {
+				t.push(`get down on ${his} ${hasBothLegs(eventSlave) ? "knees" : "knee"} and`);
+			}
+			if (eventSlave.butt > 6) {
+				t.push(`heave ${his} huge buttocks apart.`);
+			} else if (eventSlave.butt > 3) {
+				t.push(`spread ${his} broad buttocks.`);
+			} else {
+				t.push(`spread ${his} cute ass wide.`);
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`Once it's got its phallus sliding in and out of ${his} asshole, the kitchen gives ${him} another, to suck off for ${his} breakfast. Fortunately for ${him}, ${he} doesn't object, and only gets facefucked by the normal dildo.`);
+			}
+			t.push(`${He} keeps the threat in mind, and has a slightly sore ass to <span class="hotpink">help ${him} remember to obey without question.</span>`);
+
+			eventSlave.trust -= 2;
+			eventSlave.devotion += 2;
+			return t;
+		}
+
+		function penetrate() {
+			t = [];
+
+			t.push(`You step forward and take gentle hold of the slave's throat, telling ${him} to get down on ${his} knees like a good little ${desc}. You make no threat, but give ${him} the order in a voice of brass. ${He} knows what you can do to ${him}, and hurries to obey, <span class="gold">terribly frightened.</span> ${His} fear is justified. You announce that ${he}'s avoided serious punishment, but ${he} still needs correction for ${his} hesitation and insolence. ${He}'s concerned when ${he}`);
+			if (canSee(eventSlave)) {
+				t.push("sees you");
+			} else if (canHear(eventSlave)) {
+				t.push("hears you");
+			} else {
+				t.push("feels you");
+			}
+
+			if (PC.dick !== 0) {
+				t.push(`get your dick ${PC.vagina !== -1 ? "and pussy" : ""} out,`);
+			} else {
+				t.push("don a strap-on,");
+			}
+			t.push(`though ${he}'s distracted by the rapidly accelerating buttfuck ${he}'s getting from the machine. ${He} tries to offer you ${his} throat, but ${his} hopes are dashed when you walk around behind ${him}, swing a leg over the machine pistoning in and out of ${his} asshole, and command it to stop for a moment. Then you work ${PC.dick !== 0 ? "yourself" : "your own dildo"} up ${his} ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as ${eventSlave.slaveName} takes double penetration up ${his}`);
+			if (eventSlave.anus > 2) {
+				t.push("gaping anus.");
+			} else if (eventSlave.anus === 2) {
+				t.push("big butthole.");
+			} else {
+				t.push("poor, abused little butt.");
+			}
+
+			if (V.cockFeeder !== 0) {
+				t.push(`When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills ${his} throat, muffling the noise somewhat.`);
+			}
+
+			t.push(VCheck.Anal(1, eventSlave));
+
+			eventSlave.trust -= 4;
+			return t;
+		}
+	}
+};
diff --git a/src/events/RESS/waistlineWoes.js b/src/events/RESS/waistlineWoes.js
index 2dfa25fe0a388743e871623384b9a86af8803025..f800601eea2c157ae481eea587228f4ef099962e 100644
--- a/src/events/RESS/waistlineWoes.js
+++ b/src/events/RESS/waistlineWoes.js
@@ -8,6 +8,7 @@ App.Events.RESSWaistlineWoes = class RESSWaistlineWoes extends App.Events.BaseEv
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
 				canHear,
+				canWalk,
 				hasAnyArms,
 				hasAnyLegs,
 				s => s.devotion > 20 && s.devotion <= 50,
diff --git a/src/events/RETS/reSiblingTussle.js b/src/events/RETS/reSiblingTussle.js
index 0de2800b7683d71d43c64b95b20ed053f1283332..19967d2e337f3367b2b46baa5bf64b75596d28a4 100644
--- a/src/events/RETS/reSiblingTussle.js
+++ b/src/events/RETS/reSiblingTussle.js
@@ -9,6 +9,7 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv
 		return [
 			[ // event slave
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
 				hasBothLegs,
 				s => s.actualAge < 18,
@@ -16,6 +17,7 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv
 			],
 			[ // and her sibling
 				s => s.fetish !== "mindbroken",
+				canStand,
 				hasAnyArms,
 				hasBothLegs,
 				isSlaveAvailable,
@@ -207,8 +209,14 @@ App.Events.RETSSiblingTussle = class RETSSiblingTussle extends App.Events.BaseEv
 					seX(winner, "penetrative", loser, sexType);
 					if (sexType === "vaginal") {
 						t.push(`${winner.slaveName} slides ${hisW} ${winner.dick > 3 ? "stiff prick" : "hard little dick"} into ${hisW} ${relativeTerm(winner, loser)}'s ${loser.vagina < 2 ? "tight slit" : "cunt"} and starts pounding away.`);
+						if (canImpreg(loser, winner)) {
+							knockMeUp(loser, 10, 0, winner.id);
+						}
 					} else if (sexType === "anal") {
 						t.push(`${winner.slaveName} slides ${hisW} ${winner.dick > 3 ? "stiff prick" : "hard little dick"} into ${hisW} ${relativeTerm(winner, loser)}'s ${loser.anus < 2 ? "tight ass" : "well-used ass"} and starts pounding away.`);
+						if (canImpreg(loser, winner)) {
+							knockMeUp(loser, 10, 1, winner.id);
+						}
 					} else {
 						t.push(`${winner.slaveName} encourages ${loser.slaveName} to ${winner.dick > 0 ? `suck ${himW} off` : `eat ${himW} out`} quickly, knowing that they both still have to get to work.`);
 					}
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 86b4997a3c37c5bbeb92e66b69314df641c1f2ea..ec625c1f7c052caf5e300615e2dd12a1e07c8bc7 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -10,18 +10,25 @@ App.Events.getIndividualEvents = function() {
 	return [
 		// instantiate all possible random individual events here
 		// example: new App.Events.TestEvent(),
-		new App.Events.RESSLazyEvening(),
-		new App.Events.RESSMuscles(),
+		new App.Events.RESSAssFitting(),
+		new App.Events.RESSCockFeederResistance(),
+		new App.Events.RESSEscapee(),
 		new App.Events.RESSHotPC(),
+		new App.Events.RESSLazyEvening(),
 		new App.Events.RESSMoistPussy(),
-		new App.Events.RESSWaistlineWoes(),
-		new App.Events.RESSAssFitting(),
+		new App.Events.RESSMuscles(),
+		new App.Events.RESSObedientBitchy(),
+		new App.Events.RESSObedientIdiot(),
 		new App.Events.RESSRetchingCum(),
-		new App.Events.RETSSiblingTussle(),
+		new App.Events.RESSSuppositoryResistance(),
+		new App.Events.RESSWaistlineWoes(),
+
 		new App.Events.RECIButthole(),
 		new App.Events.RECIFuta(),
-		new App.Events.RECIOrientation(),
 		new App.Events.RECIMilf(),
+		new App.Events.RECIOrientation(),
+
+		new App.Events.RETSSiblingTussle(),
 	];
 };
 
diff --git a/src/events/reRelativeRecruiter.js b/src/events/reRelativeRecruiter.js
index 18469448a5525b9578299418306adae2412efdc8..19d758bbabba2f9caf7d9d179c1c3ffa3ad0b706 100644
--- a/src/events/reRelativeRecruiter.js
+++ b/src/events/reRelativeRecruiter.js
@@ -285,7 +285,7 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 			App.Events.addParagraph(frag, t);
 
 			t = [];
-			t.push(`You look up the ${_this.params.relative}. ${He2} costs ${cashFormat(cost)}, a bargain, but you won't be able to inspect ${him2} beyond his likely resemblance to ${eventSlave.slaveName}.`);
+			t.push(`You look up the ${_this.params.relative}. ${He2} costs ${cashFormat(cost)}, a bargain, but you won't be able to inspect ${him2} beyond ${his2} likely resemblance to ${eventSlave.slaveName}.`);
 			t.push(_this._getBackgroundDescription(V.activeSlave, _this.params.background));
 			App.Events.addParagraph(frag, t);
 
@@ -561,7 +561,8 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 			}
 
 			const origSlave = BaseSlave();
-			const genepoolRec = App.Entity.Utils.GenePoolRecordCleanup(V.genePool.find(s => s.ID === _this.actors[0]));
+			const genepoolRec = V.genePool.find(s => s.ID === _this.actors[0]);
+			App.Entity.Utils.GenePoolRecordCleanup(genepoolRec);
 			Object.assign(origSlave, genepoolRec);
 
 			const newSlave = generateRelatedSlave(origSlave, _this.params.relative);
@@ -575,6 +576,29 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 			return newSlave;
 		}
 
+		/** we need to record any new parent information for existing slaves into the genepool as well as directly into the slave in question
+		 * @param {App.Entity.SlaveState} slave
+		 * @param {object} parentIDs
+		 * @param {number} [parentIDs.mother]
+		 * @param {number} [parentIDs.father]
+		 */
+		function setUnknownParents(slave, parentIDs = {}) {
+			const gp = V.genePool.find(s => s.ID === slave.ID);
+
+			if (parentIDs.mother && slave.mother === 0) {
+				slave.mother = parentIDs.mother;
+				if (gp) {
+					gp.mother = parentIDs.mother;
+				}
+			}
+			if (parentIDs.father && slave.father === 0) {
+				slave.father = parentIDs.father;
+				if (gp) {
+					gp.father = parentIDs.father;
+				}
+			}
+		}
+
 		function buySlave() {
 			// kill the cheat div (no going back now!)
 			$(cheatDiv).empty();
@@ -582,19 +606,19 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 			// the new slave is already set up to be related to the exising slave, but we're responsible for making sure the existing slave (and any others in our stable) gets *their* relatives set correctly
 			switch (_this.params.relative) {
 				case "mother": {
-					eventSlave.mother = V.activeSlave.ID;
+					setUnknownParents(eventSlave, {mother: V.activeSlave.ID} );
 					for (const slave of V.slaves) {
-						if (sameDad(eventSlave, slave) && slave.mother === 0) {
-							slave.mother = V.activeSlave.ID;
+						if (sameDad(eventSlave, slave)) {
+							setUnknownParents(slave, {mother: V.activeSlave.ID} );
 						}
 					}
 					break;
 				}
 				case "father": {
-					eventSlave.father = V.activeSlave.ID;
+					setUnknownParents(eventSlave, {father: V.activeSlave.ID} );
 					for (const slave of V.slaves) {
-						if (sameMom(eventSlave, slave) && slave.father === 0) {
-							slave.father = V.activeSlave.ID;
+						if (sameMom(eventSlave, slave)) {
+							setUnknownParents(slave, {father: V.activeSlave.ID} );
 						}
 					}
 					break;
@@ -606,22 +630,21 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 				case "twin": { // siblings
 					if (eventSlave.father === 0 && eventSlave.mother === 0) {
 						setMissingParents(eventSlave);
-						V.activeSlave.mother = eventSlave.mother;
-						V.activeSlave.father = eventSlave.father;
+						setUnknownParents(V.activeSlave, {mother: eventSlave.mother, father: eventSlave.father});
 					} else if (eventSlave.father === 0) {
 						setMissingParents(eventSlave);
-						V.activeSlave.father = eventSlave.father;
+						setUnknownParents(V.activeSlave, {father: eventSlave.father});
 						for (const slave of V.slaves) {
-							if (sameMom(eventSlave, slave) && slave.father === 0) {
-								slave.father = eventSlave.father;
+							if (sameMom(eventSlave, slave)) {
+								setUnknownParents(slave, {father: eventSlave.father});
 							}
 						}
 					} else if (eventSlave.mother === 0) {
 						setMissingParents(eventSlave);
-						V.activeSlave.mother = eventSlave.mother;
+						setUnknownParents(V.activeSlave, {mother: eventSlave.mother});
 						for (const slave of V.slaves) {
-							if (sameDad(eventSlave, slave) && slave.mother === 0) {
-								slave.mother = eventSlave.mother;
+							if (sameDad(eventSlave, slave)) {
+								setUnknownParents(slave, {mother: eventSlave.mother});
 							}
 						}
 					}
diff --git a/src/facilities/spa/spaFramework.js b/src/facilities/spa/spaFramework.js
index 475e5f10aa202dc58ba0fb7fc29accf6d0f85494..bd5443a3495b22cd090babb630771f2453d79752 100644
--- a/src/facilities/spa/spaFramework.js
+++ b/src/facilities/spa/spaFramework.js
@@ -46,7 +46,7 @@ App.Entity.Facilities.SpaAssigneeJob = class extends App.Entity.Facilities.Facil
 			(
 				slave.devotion < -20 ||
 				(
-					slave.health.tired < 20 &&
+					slave.health.tired <= 30 &&
 					slave.trust > 60 &&
 					slave.devotion > 60 &&
 					slave.sexualFlaw === "none" &&
diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js
index ece5008630319f904ed221bafaa1ec53ed6061d3..cd56cffbf022fd13c29f46cf87f59ab55f504dbb 100644
--- a/src/interaction/slaveInteract.js
+++ b/src/interaction/slaveInteract.js
@@ -2033,17 +2033,7 @@ App.UI.SlaveInteract.nursery = function(slave) {
 App.UI.SlaveInteract.smartSettings = function(slave) {
 	let el = document.createElement('div');
 
-	const {
-		// eslint-disable-next-line no-unused-vars
-		he,
-		him,
-		his,
-		hers,
-		himself,
-		boy,
-		He,
-		His
-	} = getPronouns(slave);
+	const {His} = getPronouns(slave);
 	const bodyPart = [];
 	const BDSM = [];
 	const gender = [];
@@ -2076,33 +2066,33 @@ App.UI.SlaveInteract.smartSettings = function(slave) {
 		gender.push({text: `Anti-women`, updateSlave: {clitSetting: `anti-women`}});
 	}
 
-	let title = document.createElement('div');
+	let label = null;
 	if (slave.clitPiercing === 3) {
 		if (slave.dick < 1) {
-			title.textContent = `${His} smart clit piercing `;
+			label = `${His} smart clit piercing `;
 			if (slave.vaginalAccessory === "smart bullet vibrator") {
-				title.textContent += `and smart bullet vibrator are `;
+				label += `and smart bullet vibrator are `;
 			} else {
-				title.textContent += `is `;
+				label += `is `;
 			}
-			title.textContent += `set to: `;
+			label += `set to: `;
 		} else {
-			title.textContent = `${His} smart frenulum piercing `;
+			label = `${His} smart frenulum piercing `;
 			if (slave.vaginalAccessory === "smart bullet vibrator") {
-				title.textContent += `and smart bullet vibrator are `;
+				label += `and smart bullet vibrator are `;
 			} else {
-				title.textContent += `is `;
+				label += `is `;
 			}
-			title.textContent += `set to: `;
+			label += `set to: `;
 		}
-	} else {
-		title.textContent = `${His} smart bullet vibe is set to: `;
+	} else if (slave.vaginalAccessory === "smart bullet vibrator") {
+		label = `${His} smart bullet vibe is set to: `;
+	}
+	if (label) {
+		let title = App.UI.DOM.appendNewElement('div', el, label);
+		let selected = App.UI.DOM.appendNewElement('span', title, `${slave.clitSetting}. `);
+		selected.style.fontWeight = "bold";
 	}
-	let selected = document.createElement('span');
-	selected.style.fontWeight = "bold";
-	selected.textContent = `${slave.clitSetting}. `;
-	title.append(selected);
-	el.append(title);
 
 	App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Level", level, slave);
 	App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Body part", bodyPart, slave);
diff --git a/src/js/assayJS.js b/src/js/assayJS.js
index 36425457267d745b83d1be08f5824d6878ae14bc..5be576962ca5afce0b39732b498a65cd20d8935b 100644
--- a/src/js/assayJS.js
+++ b/src/js/assayJS.js
@@ -78,7 +78,7 @@ globalThis.inferiorRaceP = function(slave) {
  */
 globalThis.isLeaderP = function(slave) {
 	/** @type {FC.SlaveStateOrZero[]} */
-	const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, S.Nurse, S.Attendant, V.Matron, V.Madam, V.DJ, V.Milkmaid, V.Farmer, S.Stewardess, S.Schoolteacher, S.Wardeness];
+	const leaders = [V.HeadGirl, V.Bodyguard, V.Recruiter, V.Concubine, S.Nurse, S.Attendant, V.Matron, V.Madam, S.DJ, V.Milkmaid, V.Farmer, S.Stewardess, S.Schoolteacher, S.Wardeness];
 
 	return leaders.some(leader => leader && leader.ID && leader.ID === slave.ID);
 };
@@ -209,6 +209,7 @@ globalThis.newSlave = function(slave) {
 		slave.genes === "XY" &&
 		slave.faceShape === "masculine" &&
 		slave.attrXY <= 35 &&
+		slave.boobs < 400 &&
 		slave.hormoneBalance < 0) {
 		V.REFeminizationCheckinIDs.push(slave.ID);
 	}
diff --git a/src/js/assignJS.js b/src/js/assignJS.js
index 3924410b8a0dc7acb5bd03625d95034d2d997257..d6c1560cf9e1eb742cced3ce31f2956cdf01d00b 100644
--- a/src/js/assignJS.js
+++ b/src/js/assignJS.js
@@ -303,7 +303,7 @@ globalThis.assignJob = function(slave, job) {
 			break;
 
 		case Job.DJ.toLowerCase():
-			uniqueJob("DJ");
+			uniqueJob("dj");
 			slave.assignment = Job.DJ;
 			slave.rules.living = "luxurious";
 			break;
@@ -508,8 +508,8 @@ globalThis.removeJob = function(slave, assignment, saveRecord = false) {
 			V.Bodyguard = 0;
 		} else if (V.Madam !== 0 && slave.ID === V.Madam.ID) {
 			V.Madam = 0;
-		} else if (V.DJ !== 0 && slave.ID === V.DJ.ID) {
-			V.DJ = 0;
+		} else if (V.djID === slave.ID) {
+			V.djID = 0;
 		} else if (V.Milkmaid !== 0 && slave.ID === V.Milkmaid.ID) {
 			V.Milkmaid = 0;
 		} else if (V.Farmer !== 0 && slave.ID === V.Farmer.ID) {
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 5a1c2afdc3711f96811f7e0f639e82eba9f526c0..2f5b97a3dd332f048f98eb72162ef773808cc4d6 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -1,3 +1,52 @@
+globalThis.DJRepBonus = function() {
+	if (!S.DJ) {
+		return 0;
+	}
+
+	let value = 0;
+	const djIntel = S.DJ.intelligence + S.DJ.intelligenceImplant;
+	if (S.DJ.relationship === -3 && S.DJ.devotion > 50) {
+		value += 0.1;
+		// $He tries $his best to be your energetic, cheerful $wife.
+	}
+	if (!canSee(S.DJ)) {
+		value += 0.15;
+	}
+	if ( S.DJ.skill.entertainment > 10 && S.DJ.skill.entertainment <= 30) {
+		value += 0.05;
+		// $DJ.slaveName's basic skills marginally <span class="green">improve</span> the atmosphere in $clubName.
+	} else if (S.DJ.skill.entertainment <= 60) {
+		value += 0.1;
+		// $DJ.slaveName's skills <span class="green">improve</span> the atmosphere in $clubName.
+	} else if (S.DJ.skill.entertainment < 100) {
+		value += 0.15;
+		// $DJ.slaveName's skills greatly <span class="green">improve</span> the atmosphere in $clubName.
+	} else if (S.DJ.skill.entertainment >= 100) {
+		value += 0.20;
+		// $DJ.slaveName's mastery immensely <span class="green">;improves</span> the atmosphere in $clubName.
+	}
+	if (S.DJ.muscles > 5 && S.DJ.muscles <= 95) {
+		value += 0.05;
+		// $His toned body helps $him lead $his fellow club sluts by letting $him dance all night.
+	}
+	if (djIntel > 15) {
+		value += 0.05 * Math.floor((-0.00008 * djIntel * djIntel) + (0.0337 * djIntel) + 0.5);
+		// $He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience.
+	}
+	if (S.DJ.face > 95) {
+		value += 0.05;
+		// $His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance.
+	}
+	if (setup.DJCareers.includes(S.DJ.career)) {
+		value += 0.05;
+		// $He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth.
+	} else if (S.DJ.skill.DJ >= V.masteredXP) {
+		value += 0.05;
+		// $He has musical experience from working for you, giving $his tracks actual depth.
+	}
+	return value;
+};
+
 globalThis.CategoryAssociatedGroup = Object.freeze({
 	PENTHOUSE: [
 		'slaveAssignmentRest',
@@ -1424,72 +1473,27 @@ globalThis.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDeman
 	}
 
 	// Accounting for the DJ.
-	V.DJ = V.slaves.find(s => {
-		return s.assignment === Job.DJ;
-	});
-	if (V.DJ !== 0) {
-		if (!canTalk(V.DJ)) {
-			V.DJ = 0;
+	if (S.DJ) {
+		if (!canTalk(S.DJ)) {
+			V.djID = 0;
 			V.unDJ = 1;
-		} else if (V.DJ.preg > 37 && V.DJ.broodmother === 2) {
-			V.DJ = 0;
+		} else if (S.DJ.preg > 37 && S.DJ.broodmother === 2) {
+			V.djID = 0;
 			V.unDJ = 2;
-		} else if (V.DJ.fetish === "mindbroken") {
-			V.DJ = 0;
+		} else if (S.DJ.fetish === "mindbroken") {
+			V.djID = 0;
 			V.unDJ = 3;
-		} else if (!canWalk(V.DJ)) {
-			V.DJ = 0;
+		} else if (!canWalk(S.DJ)) {
+			V.djID = 0;
 			V.unDJ = 4;
-		} else if (!canHear(V.DJ)) {
-			V.DJ = 0;
+		} else if (!canHear(S.DJ)) {
+			V.djID = 0;
 			V.unDJ = 5;
 		}
 	}
-	if (V.DJ !== 0) {
-		const djIntel = V.DJ.intelligence + V.DJ.intelligenceImplant;
-		V.DJRepBonus = 0;
-		if (V.DJ.relationship === -3 && V.DJ.devotion > 50) {
-			V.DJRepBonus += 0.1;
-			// $He tries $his best to be your energetic, cheerful $wife.
-		}
-		if (!canSee(V.DJ)) {
-			V.DJRepBonus += 0.15;
-		}
-		if ( V.DJ.skill.entertainment > 10 && V.DJ.skill.entertainment <= 30) {
-			V.DJRepBonus += 0.05;
-			// $DJ.slaveName's basic skills marginally <span class="green">improve</span> the atmosphere in $clubName.
-		} else if (V.DJ.skill.entertainment <= 60) {
-			V.DJRepBonus += 0.1;
-			// $DJ.slaveName's skills <span class="green">improve</span> the atmosphere in $clubName.
-		} else if (V.DJ.skill.entertainment < 100) {
-			V.DJRepBonus += 0.15;
-			// $DJ.slaveName's skills greatly <span class="green">improve</span> the atmosphere in $clubName.
-		} else if (V.DJ.skill.entertainment >= 100) {
-			V.DJRepBonus += 0.20;
-			// $DJ.slaveName's mastery immensely <span class="green">;improves</span> the atmosphere in $clubName.
-		}
-		if (V.DJ.muscles > 5 && V.DJ.muscles <= 95) {
-			V.DJRepBonus += 0.05;
-			// $His toned body helps $him lead $his fellow club sluts by letting $him dance all night.
-		}
-		if (djIntel > 15) {
-			V.DJRepBonus += 0.05 * Math.floor((-0.00008 * djIntel * djIntel) + (0.0337 * djIntel) + 0.5);
-			// $He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience.
-		}
-		if (V.DJ.face > 95) {
-			V.DJRepBonus += 0.05;
-			// $His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance.
-		}
-		if (setup.DJCareers.includes(V.DJ.career)) {
-			V.DJRepBonus += 0.05;
-			// $He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth.
-		} else if (V.DJ.skill.DJ >= V.masteredXP) {
-			V.DJRepBonus += 0.05;
-			// $He has musical experience from working for you, giving $his tracks actual depth.
-		}
-
+	if (S.DJ) {
 		// The DJ adding to 'club'
-		SJVClub(V.slaves[V.slaveIndices[V.DJ.ID]]);
+		SJVClub(S.DJ);
 	}
 
 	// Checking for space in the club
@@ -1675,7 +1679,7 @@ globalThis.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDeman
 			}
 		}
 		if (s.assignment === Job.CLUB || toTheClub === 1) {
-			beautyMultiplier += V.DJRepBonus;
+			beautyMultiplier += DJRepBonus();
 			if (canHear(s) === false) {
 				beautyMultiplier -= 0.65;
 				// $His inability to move to the rhythm of the music is very off putting to those looking to party.
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 121a5ab85fbd09a891fa525e2eeb8137bc2f3e12..a7dfab27dd7ee87bd925aef1b17d5da4044da96c 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -879,23 +879,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion <= 20) {
-				if (eventSlave.devotion >= -50) {
-					if (eventSlave.trust >= -20) {
-						if (V.suppository !== 0) {
-							if (eventSlave.fetish !== "buttslut") {
-								V.RESSevent.push("suppository resistance");
-							}
-						}
-						if (V.cockFeeder !== 0) {
-							if (eventSlave.fetish !== "cumslut") {
-								V.RESSevent.push("cockfeeder resistance");
-							}
-						}
-					}
-				}
-			}
-
 			if (eventSlave.relationship <= -2) {
 				if (eventSlave.trust > 50) {
 					if (eventSlave.devotion > 50) {
@@ -1040,16 +1023,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion < -50) {
-				if (eventSlave.trust >= -50) {
-					if (eventSlave.assignment !== Job.CONFINEMENT) {
-						if (eventSlave.heels !== 1) {
-							V.RESSevent.push("escapee");
-						}
-					}
-				}
-			}
-
 			if (eventSlave.devotion <= 50) {
 				if (eventSlave.trust >= -50) {
 					if (eventSlave.behavioralFlaw === "gluttonous") {
@@ -1331,28 +1304,8 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 					}
 				}
 			}
-
-			if (eventSlave.behavioralFlaw === "bitchy") {
-				if (canSee(eventSlave)) {
-					if (eventSlave.devotion > 20) {
-						if (eventSlave.trust >= -20) {
-							V.RESSevent.push("obedient bitchy");
-						}
-					}
-				}
-			}
 		} /* closes mute exempt */
 
-		if (V.cockFeeder === 0) {
-			if (eventSlave.intelligence + eventSlave.intelligenceImplant < -50) {
-				if (eventSlave.devotion <= 50) {
-					if (eventSlave.devotion >= -20 || eventSlave.trust < -20) {
-						V.RESSevent.push("obedient idiot");
-					}
-				}
-			}
-		}
-
 		if (eventSlave.boobs > 25000) {
 			if (eventSlave.belly < 100000) {
 				V.RESSevent.push("tittymonster inspection");
@@ -2233,23 +2186,6 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion <= 20) {
-				if (eventSlave.devotion >= -50) {
-					if (eventSlave.trust >= -20) {
-						if (V.suppository !== 0) {
-							if (eventSlave.fetish !== "buttslut") {
-								V.RESSevent.push("suppository resistance");
-							}
-						}
-						if (V.cockFeeder !== 0) {
-							if (eventSlave.fetish !== "cumslut") {
-								V.RESSevent.push("cockfeeder resistance");
-							}
-						}
-					}
-				}
-			}
-
 			if (eventSlave.relationship <= -2) {
 				if (eventSlave.trust > 50) {
 					if (eventSlave.devotion > 50) {
@@ -2360,14 +2296,6 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 				}
 			}
 
-			if (eventSlave.devotion < -50) {
-				if (eventSlave.trust >= -50) {
-					if (eventSlave.heels !== 1) {
-						V.RESSevent.push("escapee");
-					}
-				}
-			}
-
 			if (eventSlave.devotion <= 50) {
 				if (eventSlave.trust >= -50) {
 					if (eventSlave.behavioralFlaw === "gluttonous") {
@@ -2538,28 +2466,8 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 					}
 				}
 			}
-
-			if (eventSlave.behavioralFlaw === "bitchy") {
-				if (canSee(eventSlave)) {
-					if (eventSlave.devotion > 20) {
-						if (eventSlave.trust >= -20) {
-							V.RESSevent.push("obedient bitchy");
-						}
-					}
-				}
-			}
 		} /* closes mute exempt */
 
-		if (V.cockFeeder === 0) {
-			if (eventSlave.intelligence + eventSlave.intelligenceImplant < -50) {
-				if (eventSlave.devotion <= 50) {
-					if (eventSlave.devotion >= -20 || eventSlave.trust < -20) {
-						V.RESSevent.push("obedient idiot");
-					}
-				}
-			}
-		}
-
 		if (V.assistant > 1) {
 			if (eventSlave.fetishKnown === 1) {
 				if (eventSlave.energy > 95) {
diff --git a/src/js/extendedFamilyModeJS.js b/src/js/extendedFamilyModeJS.js
index 9ab734dfd28864e16f266cb1827f00fe78e56243..cf9a8c3a9a50d309c4a702b346312afc9f701a23 100644
--- a/src/js/extendedFamilyModeJS.js
+++ b/src/js/extendedFamilyModeJS.js
@@ -514,12 +514,19 @@ globalThis.resetFamilyCounters = function() {
  * @param {Relative} slave
  */
 globalThis.setMissingParents = function(slave) {
+	const gp = V.genePool.find(s => s.ID === slave.ID);
 	if (!specificMom(slave)) {
 		slave.mother = V.missingParentID;
+		if (gp) {
+			gp.mother = slave.mother;
+		}
 		V.missingParentID--;
 	}
 	if (!specificDad(slave)) {
 		slave.father = V.missingParentID;
+		if (gp) {
+			gp.father = slave.father;
+		}
 		V.missingParentID--;
 	}
 };
diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index 7290a62ae71fdd490f56ceaabd0685f04b7eac60..ae2f3353f3af13ed0f0ab2cbeb63df056f8d0d9f 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -77,7 +77,7 @@ globalThis.isItemAccessible = (function() {
 			if (V.cheatMode || isAvailable(i)) {
 				let name = i.name;
 				if (i.fs) {
-					name = i.name + ` (FS)`;
+					name = `${i.name} (FS)`;
 				}
 				array.push([name, i.value]);
 			}
@@ -85,6 +85,12 @@ globalThis.isItemAccessible = (function() {
 		return array;
 	}
 
+	/**
+	 * @param {object} item
+	 * @param {string} [category="clothing"] that item is in clothing, collar, etc
+	 * @param {App.Entity.SlaveState} [slave]
+	 * @returns {boolean|string} Returns true if item is accessible, and false if it is not. If the slave param is set, it may sometimes return a string instead of false, explaining why the item can't be used with that slave.
+	 */
 	function isAvailable(item, category, slave) {
 		let slaveResults;
 		if (slave) {
@@ -141,17 +147,9 @@ globalThis.isItemAccessible = (function() {
 						}
 					}
 				});
-				if (fail) {
-					return false;
-				} else {
-					return true;
-				}
+				return !(fail);
 			} else { // string
-				if (V[item.rs] < 1) {
-					return false;
-				} else {
-					return true;
-				}
+				return (V[item.rs] >= 1);
 			}
 		}
 		if (item.hasOwnProperty("fs")) {
@@ -165,6 +163,12 @@ globalThis.isItemAccessible = (function() {
 		return true;
 	}
 
+	/**
+	 * @param {object} item
+	 * @param {string} [category="clothing"] that item is in clothing, collar, etc
+	 * @param {App.Entity.SlaveState} [slave]
+	 * @returns {boolean|string} Returns true if item is accessible, and false if it is not. If the slave param is set, it may sometimes return a string instead of false, explaining why the item can't be used with that slave.
+	 */
 	function isAvailableForSlave(item, category, slave) {
 		switch (category) {
 			case "clothing":
@@ -277,50 +281,24 @@ globalThis.isItemAccessible = (function() {
 				break;
 			}
 			case "dickAccessory":
-				if (slave.dick < 1) {
-					return false;
-				}
-				return true;
+				return (slave.dick >= 1);
 			case "shoes":
 				break;
 			case "chastity": {
 				switch (item.value) {
 					case "chastity belt":
-					case "combined chastity belt": {
-						if (slave.vagina > -1) {
-							return true;
-						} else {
-							return false;
-						}
-					}
+					case "combined chastity belt":
+						return (slave.vagina > -1);
 					case "chastity cage":
-					case "combined chastity cage": {
-						if (slave.dick > 0) {
-							return true;
-						} else {
-							return false;
-						}
-					}
+					case "combined chastity cage":
+						return (slave.dick > 0);
 					case "genital chastity":
-					case "full chastity": {
-						if (slave.vagina > -1 && slave.dick > 0) {
-							return true;
-						} else {
-							return false;
-						}
-					}
-					case "choose own chastity": {
-						if (slave.choosesOwnChastity !== 1 && slave.devotion > 20 && slave.trust > 0) {
-							return true;
-						}
-						return false;
-					}
-					case "revoke choosing own chastity": {
-						if (slave.choosesOwnChastity > 0) {
-							return true;
-						}
-						return false;
-					}
+					case "full chastity":
+						return (slave.vagina > -1 && slave.dick > 0);
+					case "choose own chastity":
+						return (slave.choosesOwnChastity !== 1 && slave.devotion > 20 && slave.trust > 0);
+					case "revoke choosing own chastity":
+						return (slave.choosesOwnChastity > 0);
 					default:
 						return true;
 				}
diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js
index a8774864fd96a495fe7f4d6538794b20488ca44c..3c6eebf99d5ccb55d3eb137dfbfe766c1c76f7ac 100644
--- a/src/js/sexActsJS.js
+++ b/src/js/sexActsJS.js
@@ -65,7 +65,7 @@ globalThis.VCheck = (function() {
 			if (canImpreg(slave, V.PC)) {
 				r += knockMeUp(slave, 10, 1, -1, 1);
 			}
-			actX(slave, "anal", times);
+			seX(slave, "anal", V.PC, "penetrative", times);
 		}
 		return r;
 	}
@@ -111,7 +111,7 @@ globalThis.VCheck = (function() {
 			if (canImpreg(slave, V.PC)) {
 				r += knockMeUp(slave, 10, 0, -1, 1);
 			}
-			actX(slave, "vaginal", times);
+			seX(slave, "vaginal", V.PC, "penetrative", times);
 		}
 		return r;
 	}
@@ -188,13 +188,13 @@ globalThis.VCheck = (function() {
 				slave.anus = 1;
 			}
 			if (canDoAnal(slave)) {
-				actX(slave, "vaginal", bothTimes);
-				actX(slave, "anal", bothTimes);
+				seX(slave, "vaginal", V.PC, "penetrative", bothTimes);
+				seX(slave, "anal", V.PC, "penetrative", bothTimes);
 				if (canImpreg(slave, V.PC)) {
 					r += knockMeUp(slave, 10, 2, -1, 1);
 				}
 			} else {
-				actX(slave, "vaginal", bothTimes);
+				seX(slave, "vaginal", V.PC, "penetrative", bothTimes);
 				if (canImpreg(slave, V.PC)) {
 					r += knockMeUp(slave, 10, 0, -1, 1);
 				}
@@ -222,7 +222,7 @@ globalThis.VCheck = (function() {
 				}
 				slave.anus = 1;
 			}
-			actX(slave, "vaginal", analTimes);
+			seX(slave, "anal", V.PC, "penetrative", analTimes);
 			if (canImpreg(slave, V.PC)) {
 				r += knockMeUp(slave, 10, 1, -1, 1);
 			}
@@ -323,7 +323,7 @@ globalThis.SimpleSexAct = (function() {
 
 		for (let i = 0; i < fuckCount; i++) {
 			fuckTarget = jsRandom(1, 100);
-			if (slave.nipples === "fuckable" && V.PC.dick >0 && fuckTarget > 80) {
+			if (slave.nipples === "fuckable" && V.PC.dick > 0 && fuckTarget > 80) {
 				actX(slave, "mammary");
 			} else if (canDoVaginal(slave) && slave.vagina > 0 && fuckTarget > 33) {
 				actX(slave, "vaginal");
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index 91c5519e6db7f44e10f562f572c5367807ffe8d5..fd5212d8504953078287a782adb9155f3371258e 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -1591,7 +1591,6 @@ globalThis.Beauty = function(s) {
 };
 
 
-
 globalThis.BeautyTooltip = function(slave) {
 	// Make a link. Text should be slave'slave beauty. Clicking the link will display detailed info about that beauty where the link used to be
 	if (V.cheatMode || V.debugMode) {
@@ -2124,7 +2123,6 @@ globalThis.FResult = function(s) {
 };
 
 
-
 globalThis.FResultTooltip = function(slave) {
 	// Make a link. Text should be slave'slave FResult. Clicking the link will display detailed info about that beauty where the link used to be
 	if (V.cheatMode || V.debugMode) {
diff --git a/src/js/slaveListing.js b/src/js/slaveListing.js
index cb9b60febfdc4c92b53090730d171d45fe3c8fce..dec491595859e5549737ae4d1043c15a801caa7a 100644
--- a/src/js/slaveListing.js
+++ b/src/js/slaveListing.js
@@ -524,17 +524,17 @@ App.UI.SlaveList.ScrollPosition = (function() {
 	let position = 0;
 
 	return {
-		reset : function() {
+		reset: function() {
 			lastPassage = null;
 			position = 0;
 		},
 
-		record : function() {
+		record: function() {
 			lastPassage = passage();
 			position = window.pageYOffset;
 		},
 
-		restore : function() {
+		restore: function() {
 			$(document).one(':passageend', () => {
 				if (lastPassage === passage()) {
 					window.scrollTo(0, position);
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index f8dc76f97a14a81786ba18c43710ce045ef1a540..2c8cb5c43b01df5cad743276c4ecb99926dc6aea 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -260,15 +260,11 @@ globalThis.isSlim = function(slave) {
 		if ((slave.muscles <= 30) && (arcology.FSPhysicalIdealist === "unset") && (slave.weight <= 10) && (arcology.FSHedonisticDecadence === "unset")) {
 			slim = true;
 		} else if (arcology.FSPhysicalIdealist !== "unset") {
-			if ((arcology.FSPhysicalIdealistStrongFat === 1) && (slave.weight <= 30)) {
-				slim = true;
-			} else if (slave.weight <= 10) {
+			if (((arcology.FSPhysicalIdealistStrongFat === 1) && (slave.weight <= 30)) || slave.weight <= 10) {
 				slim = true;
 			}
 		} else if ((arcology.FSHedonisticDecadence !== "unset") && (slave.weight <= 30)) {
-			if (arcology.FSHedonisticDecadenceStrongFat === 1) {
-				slim = true;
-			} else if (slave.muscles <= 30) {
+			if (arcology.FSHedonisticDecadenceStrongFat === 1 || slave.muscles <= 30) {
 				slim = true;
 			}
 		}
@@ -616,7 +612,7 @@ globalThis.isInferiorRace = function(slave) {
 
 /**
  * @param {App.Entity.SlaveState} slave
- * @returns {boolean} Whether the slave is a breeder for the Elites
+ * @returns {number} Whether the slave is a breeder for the Elites
  */
 globalThis.isEliteBreeder = function(slave) {
 	return slave.breedingMark;
@@ -800,7 +796,7 @@ globalThis.canHold = function(slave) {
 	return hasAnyArms(slave);
 };
 
-/**
+/** If a slave can walk, she can move and stand.
  * @param {App.Entity.SlaveState} slave
  * @returns {boolean}
  */
@@ -827,6 +823,100 @@ globalThis.canWalk = function(slave) {
 	return true;
 };
 
+/** If a slave can stand, she can move, but not necessarily walk.
+ * @param {App.Entity.SlaveState} slave
+ * @returns {boolean}
+ */
+globalThis.canStand = function(slave) {
+	if (!slave) {
+		return null;
+	} else if (!canMove(slave)) {
+		return false;
+	} else if (!hasAnyLegs(slave)) {
+		return false;
+	} else if (slave.heels === 1 && !setup.highHeels.includes(slave.shoes)) {
+		return false;
+	} else if (tooFatSlave(slave)) {
+		return false;
+	} else if (tooBigBreasts(slave)) {
+		return false;
+	} else if (slave.physicalAge <= 3) {
+		if (slave.belly >= 150000 + (slave.muscles * 500)) {
+			return false;
+		}
+	} else if (slave.physicalAge <= 12) {
+		if (slave.belly >= 450000 + (slave.muscles * 800)) {
+			return false;
+		}
+	} else if (slave.physicalAge < 18) {
+		if (slave.belly >= 450000 + (slave.muscles * 1000)) {
+			return false;
+		}
+	} else if (slave.physicalAge >= 18) {
+		if (slave.belly >= 1500000 + (slave.muscles * 2000)) {
+			return false;
+		}
+	}
+	return true;
+};
+
+/** can she move at all?
+ * @param {App.Entity.SlaveState} slave
+ * @returns {boolean}
+ */
+globalThis.canMove = function(slave) {
+	if (!slave) {
+		return null;
+	} else if (canWalk(slave)) {
+		return true; // If she can walk, no point to even check anything after
+	} else if (!hasBothLegs(slave)) {
+		return false;
+	} else if (tooFatSlave(slave)) {
+		return false;
+	} else if (slave.physicalAge <= 3) {
+		if (slave.boobs > 25000 + (slave.muscles * 20)) {
+			return false;
+		}
+		if (slave.belly >= 100000) {
+			return false;
+		}
+		if (slave.balls >= 30 + (slave.muscles * 0.3) && slave.physicalAge <= 3) {
+			return false;
+		}
+	} else if (slave.physicalAge <= 12) {
+		if (slave.boobs > 100000 + (slave.muscles * 50)) {
+			return false;
+		}
+		if (slave.belly >= 400000) {
+			return false;
+		}
+		if (slave.balls >= 60 + (slave.muscles * 0.5) && slave.physicalAge <= 12) {
+			return false;
+		}
+	} else if (slave.physicalAge < 18) {
+		if (slave.boobs > 250000 + (slave.muscles * 100)) {
+			return false;
+		}
+		if (slave.belly >= 600000) {
+			return false;
+		}
+		if (slave.balls >= 90 + (slave.muscles * 0.7)) {
+			return false;
+		}
+	} else if (slave.physicalAge >= 18) {
+		if (slave.boobs > 500000 + (slave.muscles * 200)) {
+			return false;
+		}
+		if (slave.belly >= 1000000) {
+			return false;
+		}
+		if (slave.balls >= 90 + (slave.muscles * 0.7)) {
+			return false;
+		}
+	}
+	return true;
+};
+
 /**
  * @param {App.Entity.SlaveState} slave
  * @param {boolean} checkLanguage Does a bad accent count as being unable to speak?
diff --git a/src/npc/descriptions/style/clothing.js b/src/npc/descriptions/style/clothing.js
index 8ef339077f185d7ba19c8cfb57c2c68f57dc1e0e..21b118bd427eeab4fa4fbcb16a98663710f18ad6 100644
--- a/src/npc/descriptions/style/clothing.js
+++ b/src/npc/descriptions/style/clothing.js
@@ -787,7 +787,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) {
 				r.push(`${His} uniform is pinned with the`);
 				if (slave.ID === V.Bodyguard.ID || slave.ID === V.HeadGirl.ID || slave.ID === V.Recruiter.ID || slave.ID === V.Concubine.ID) {
 					r.push(`golden whip and manacles insignia of a senior slave officer,`);
-				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
+				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.djID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
 					r.push(`golden manacles insignia of a junior slave officer,`);
 				} else if ((slave.skill.combat > 0) && getLimbCount(slave, 105) > 0) {
 					r.push(`silver spear and manacles insignia of an augmented slave soldier,`);
@@ -809,7 +809,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) {
 				r.push(`${His} uniform is pinned with the`);
 				if (slave.ID === V.Bodyguard.ID || slave.ID === V.HeadGirl.ID || slave.ID === V.Recruiter.ID || slave.ID === V.Concubine.ID) {
 					r.push(`golden whip and manacles insignia of a senior slave officer,`);
-				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
+				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.djID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
 					r.push(`golden manacles insignia of a junior slave officer,`);
 				} else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) {
 					r.push(`silver spear and manacles insignia of an augmented slave soldier,`);
@@ -831,7 +831,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) {
 				r.push(`${His} uniform is pinned with the`);
 				if ((slave.ID === V.Bodyguard.ID) || (slave.ID === V.HeadGirl.ID) || (slave.ID === V.Recruiter.ID) || (slave.ID === V.Concubine.ID)) {
 					r.push(`golden whip and manacles insignia of a senior slave officer,`);
-				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
+				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.djID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
 					r.push(`golden manacles insignia of a junior slave officer,`);
 				} else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) {
 					r.push(`silver spear and manacles insignia of an augmented slave soldier,`);
@@ -853,7 +853,7 @@ App.Desc.clothing = function(slave, {market, eventDescription} = {}) {
 				r.push(`${His} uniform is pinned with the`);
 				if ((slave.ID === V.Bodyguard.ID) || (slave.ID === V.HeadGirl.ID) || (slave.ID === V.Recruiter.ID) || (slave.ID === V.Concubine.ID)) {
 					r.push(`golden whip and manacles insignia of a senior slave officer,`);
-				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.DJ.ID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
+				} else if ((slave.ID === V.Madam.ID) || (slave.ID === V.NurseID) || (slave.ID === V.AttendantID) || (slave.ID === V.Matron.ID) || (slave.ID === V.djID) || (slave.ID === V.Milkmaid.ID) || (slave.ID === V.Farmer.ID) || (slave.ID === V.StewardessID) || (slave.ID === V.SchoolteacherID) || (slave.ID === V.WardenessID)) {
 					r.push(`golden manacles insignia of a junior slave officer,`);
 				} else if ((slave.skill.combat > 0) && getLimbCount(slave, 105)) {
 					r.push(`silver spear and manacles insignia of an augmented slave soldier,`);
diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js
index 69cdd362322af9f4ce180a4f9fea62bc8988686d..c7d9d31776e813fb381fe43477748761e872c9eb 100644
--- a/src/npc/generate/generateNewSlaveJS.js
+++ b/src/npc/generate/generateNewSlaveJS.js
@@ -1439,7 +1439,7 @@ globalThis.GenerateNewSlave = (function() {
 					slave.origSkin = jsEither(["tan", "light", "light", "light", "fair", "fair", "fair", "fair", "pale", "very pale"]);
 					eyeColor(["light grey", "blue", "blue", "blue", "blue", "blue", "blue", "brown", "brown", "green"]);
 					slave.origHColor = jsEither(["jet black", "black", "black", "dark brown", "dark brown", "brown", "brown", "brown", "chestnut", "chocolate", "amber", "golden", "golden", "blonde", "blonde", "platinum blonde", "red"]);
-				} else if (["Icelandic", "Norwegian"].includes(slave.nationality)){
+				} else if (["Icelandic", "Norwegian"].includes(slave.nationality)) {
 					slave.origSkin = jsEither(["tan", "light", "light", "light", "fair", "fair", "fair", "pale", "pale", "very pale", "very pale"]);
 					eyeColor(["light grey", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "brown", "green"]);
 					slave.origHColor = jsEither(["jet black", "black", "dark brown", "brown", "brown", "brown", "chestnut", "chocolate", "amber", "golden", "golden", "blonde", "blonde", "platinum blonde", "platinum blonde", "red"]);
@@ -1469,7 +1469,7 @@ globalThis.GenerateNewSlave = (function() {
 				slave.lips = jsRandom(5, 25);
 				if (["Iranian", "Pakistani", "Tajik", "Kazakh", "Kurdish", "Azerbaijani", "Syrian", "Kyrgyz", "Afghan", "Mongolian", "Turkmen", "Turkish", "Uzbek"].includes(slave.nationality) || (jsRandom(1, 8) === 1)) {
 					slave.origSkin = jsEither(["olive", "bronze", "tan", "light olive", "light olive", "light", "light", "fair"]);
-					if (jsRandom(1, 10) === 1){
+					if (jsRandom(1, 10) === 1) {
 						slave.origHColor = jsEither(["black", "dark brown", "brown", "chestnut", "blonde", "red"]);
 						eyeColor(["light grey", "blue", "blue", "brown", "green", "green"]);
 					} else {
@@ -1533,7 +1533,7 @@ globalThis.GenerateNewSlave = (function() {
 				slave.hStyle = "neat";
 				eyeColor(["blue", "brown", "green"], true);
 		}
-		if (slave.origHColor === "red"){
+		if (slave.origHColor === "red") {
 			slave.origHColor = jsEither(["chestnut", "auburn", "auburn", "auburn", "auburn", "ginger", "ginger", "copper", "copper", "red"]);
 		}
 		if ((skinToneLevel(slave.origSkin) > 5) && (skinToneLevel(slave.origSkin) < 10)) {
@@ -1557,7 +1557,7 @@ globalThis.GenerateNewSlave = (function() {
 			}
 		}
 	}
-	
+
 	function generateBoobTweaks() {
 		if (V.weightAffectsAssets !== 0) {
 			if (slave.weight < -10 && slave.boobs > 200) {
@@ -1798,28 +1798,27 @@ globalThis.GenerateNewSlave = (function() {
 })();
 
 globalThis.generateSalonModifications = function(slave) {
-
 	/*hair dyes*/
-	if ( (jsRandom(1, 50) === 1) || ((jsRandom(1, 20) === 1) && ["southern european", "white"].includes(slave.race)) ){
+	if ( (jsRandom(1, 50) === 1) || ((jsRandom(1, 20) === 1) && ["southern european", "white"].includes(slave.race)) ) {
 		slave.hColor = jsEither(["jet black", "black", "black", "dark brown", "brown", "chestnut", "chocolate", "amber", "golden", "blonde", "blonde", "blonde", "platinum blonde", "platinum blonde", "auburn", "ginger", "copper"]);
-        if (jsRandom(1, 10) === 1 || (["jet black", "black", "dark brown", "brown", "chestnut", "chocolate"].includes(slave.hColor) && jsRandom(1, 10) !== 1)){
-            slave.eyebrowHColor = slave.hColor;
-        }
-        slave.override_H_Color = 1;
-	} else if ( (jsRandom(1, 100) === 1) || ((jsRandom(1, 20) === 1) && ["a barber", "a barista", "a bimbo", "a blogger", "a camgirl", "a camwhore", "a cheerleader", "a child actress", "a clown", "a club recruiter", "a cocktail waitress", "a comedian", "a cosmetologist", "a dominatrix", "a gang member", "a house DJ", "an idol", "a juvenile delinquent", "a magician's assistant", "a medium", "a mime", "a musician", "a party girl", "a poet", "a political activist", "a porn star", "a radio show host", "a stage magician", "a street performer", "a stripper", "a student", "a video game streamer", "an actress", "an artist", "an aspiring pop star"].includes(slave.career)) ){
+		if (jsRandom(1, 10) === 1 || (["jet black", "black", "dark brown", "brown", "chestnut", "chocolate"].includes(slave.hColor) && jsRandom(1, 10) !== 1)) {
+			slave.eyebrowHColor = slave.hColor;
+		}
+		slave.override_H_Color = 1;
+	} else if ( (jsRandom(1, 100) === 1) || ((jsRandom(1, 20) === 1) && ["a barber", "a barista", "a bimbo", "a blogger", "a camgirl", "a camwhore", "a cheerleader", "a child actress", "a clown", "a club recruiter", "a cocktail waitress", "a comedian", "a cosmetologist", "a dominatrix", "a gang member", "a house DJ", "an idol", "a juvenile delinquent", "a magician's assistant", "a medium", "a mime", "a musician", "a party girl", "a poet", "a political activist", "a porn star", "a radio show host", "a stage magician", "a street performer", "a stripper", "a student", "a video game streamer", "an actress", "an artist", "an aspiring pop star"].includes(slave.career)) ) {
 		slave.hColor = jsEither(["platinum blonde", "platinum blonde", "blazing red", "blue-violet", "blue", "burgundy", "dark blue", "deep red", "green-yellow", "green", "grey", "neon blue", "neon green", "neon pink", "pink", "ivory", "purple", "red", "sea green", "silver"]);
-		if (jsRandom(1, 3) === 1){
+		if (jsRandom(1, 3) === 1) {
 			slave.eyebrowHColor = slave.hColor;
 		}
 		slave.override_H_Color = 1;
 	}
-	if (jsRandom(1, 6) === 1){
+	if (jsRandom(1, 6) === 1) {
 		slave.pubicHColor = slave.hColor;
 		slave.underArmHColor = slave.hColor;
 	}
 
 	/*hair style*/
-	if ( (["black", "mixed race"].includes(slave.race) && (jsRandom(1, 3) === 1)) || (jsRandom(1, 15) === 1)  ) {
+	if ( (["black", "mixed race"].includes(slave.race) && (jsRandom(1, 3) === 1)) || (jsRandom(1, 15) === 1) ) {
 		slave.hStyle = jsEither(["dreadlocks", "cornrows", "afro"]);
 	} else if (jsRandom(1, 5) === 1) {
 		slave.hStyle = jsEither(["curled", "bun", "luxurious", "permed"]);
@@ -1839,8 +1838,8 @@ globalThis.generateSalonModifications = function(slave) {
 			}
 		}
 	}
-    
-    /* sun and spray tanning */
+
+	/* sun and spray tanning */
 	if (skinToneLevel(slave.origSkin) < 13) {
 		if ( (jsRandom(1, 40) === 1) || (["a bimbo", "an exotic dancer", "a trophy wife", "a party girl"].includes(slave.career) && (jsRandom(1, 10) === 1)) ) {
 			slave.skin = "spray tanned";
@@ -1857,12 +1856,10 @@ globalThis.generateSalonModifications = function(slave) {
 			if (["the Middle East", "South America", "Africa", "Australia"].includes(V.continent)) {
 				tan_chance += 5;
 			}
-			tan_chance += (skinToneLevel(slave.origSkin)-8);
+			tan_chance += (skinToneLevel(slave.origSkin) - 8);
 			if (tan_chance >= 45) {
 				slave.skin = "sun tanned";
 			}
-
 		}
-
 	}
 };
diff --git a/src/uncategorized/PESS.tw b/src/uncategorized/PESS.tw
index f369a72f3c1cef8d77b4d4da4e268ed40c2e15c2..6c3762e4ba3e20be09c6d6b62e3c4f9f7a322d19 100644
--- a/src/uncategorized/PESS.tw
+++ b/src/uncategorized/PESS.tw
@@ -46,7 +46,7 @@
 	<<case "madam strategy">>
 		<<set $activeSlave = getSlave($Madam.ID)>>
 	<<case "DJ publicity">>
-		<<set $activeSlave = getSlave($DJ.ID)>>
+		<<set $activeSlave = getSlave($djID)>>
 	<<case "tired milkmaid" "tired collectrix">>
 		<<set $activeSlave = getSlave($Milkmaid.ID)>>
 	<<case "loving concubine">>
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index ca8183cc968d6e5e5018d67ed5a280b5437fb53f..6c3f7cd67fca055ec7cebb59e0868d0c21004957 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "cockfeeder resistance" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -935,16 +935,6 @@ Though $assistant.name constantly monitors all your slaves, you keep an eye on t
 
 You have a lot of work to do with <<= App.UI.slaveDescriptionDialog($activeSlave)>>. $He compounds the usual rebellious anger at being a slave with an apparently unshakeable conviction that $he is better than you. Oddly, $he seems to maintain the idea that enslaving other people is somehow inappropriate, and that having done so has lowered you morally. This morning, $he did not appear to start $his morning chores as previously ordered. $He sleeps on a bedroll: a brief investigation discloses that $he is still in it, and has pulled the blanket up over $his head. $He refuses to acknowledge your peremptory command to get up.
 
-<<case "escapee">>
-
-An escape attempt occurs and is stopped almost before you are informed of it. <<= App.UI.slaveDescriptionDialog($activeSlave)>> made a rash attempt to leave the penthouse, but $assistant.name monitors everyone constantly and was able to enclose $him before $he got very far. <<if $assistant.personality == 0>>It reports impersonally that the would-be escapee is locked in the entryway awaiting your judgment.<<else>>$He reports suggestively that the would-be escapee is locked in the entryway awaiting your pleasure.<</if>>
-<br><br>
-<<if $arcologyUpgrade.drones == 1>>Your advanced security systems are able to stop $him promptly, and there is no indication to the public that any escape attempt was made.<<else>>Your basic security systems are only able to stop $him by briefly locking down your penthouse, exciting @@.red;some adverse public comment.@@<<run repX(forceNeg(100), "event", $activeSlave)>><</if>>
-<<if $activeSlave.indentureRestrictions > 0>>
-	<br><br>
-	This behavior has violated $his indenture contract, allowing you to apply more severe punishments that might otherwise breach it.
-<</if>>
-
 <<case "not my name">>
 
 <<if SlaveStatsChecker.checkForLisp($activeSlave)>>
@@ -1365,12 +1355,6 @@ The showers your slaves use are well vented and transparent walled so that you c
 	<</if>>
 <</if>>
 
-<<case "obedient idiot">>
-
-<<= capFirstChar($assistant.name)>> breaks in on your work at your desk. <<if $assistant.personality == 0>>"<<= properTitle()>>,"<<else>>"Sweetheart,"<</if>> $he says, "<<= App.UI.slaveDescriptionDialog($activeSlave)>> is having trouble figuring out the meal dispenser again." <<if $assistant.personality == 0>>The report is deadpan, but $he brings up a visual feed.<<else>>$He brings up a visual feed. "Poor baby!" $he exclaims.<</if>>
-<br><br>
-Slaves are supposed to place a cup under a spigot, which detects the cup's presence and dispenses the appropriate nutrition for the $girl. Unfortunately this concept seems a little tough for $activeSlave.slaveName. With no one around to ask for help, $he has resorted to trying to suck food out of the spigot with $his mouth. With no cup to be detected, $he's not getting very far, and is getting bitterly frustrated.
-
 <<case "devoted old">>
 
 At the end of a long week, <<= App.UI.slaveDescriptionDialog($activeSlave)>> moves past your office toward bed. This is completely normal part of the arcology routine, but you notice as $he passes that $he's wearing a preoccupied, almost sad expression. You call $him over, and $he makes a visible effort to brighten up as $he comes before you and asks your pleasure. You ask $him what's the matter, and $his face falls.
@@ -1404,10 +1388,6 @@ During a routine inspection, <<= App.UI.slaveDescriptionDialog($activeSlave)>> r
 	Can I get fucked in the pu<<ss>>y, to <<s>>pread it out a little?"
 <</if>>
 
-<<case "obedient bitchy">>
-
-<<= App.UI.slaveDescriptionDialog($activeSlave)>> is a decent slave, pretty well broken to your will and generally obedient. However, $he retains a cutting tongue. Though $he's learned to $his considerable cost not to direct $his cheek at you, $he still insults your other slaves, and worse, will be sarcastic to members of the public $he encounters. You've worked on it, but it remains unsolved. Today, however, $he crossed the line. You were doing business in your office with a respected female slave drug wholesaler. The woman is in her late forties, and though she's something of a plastic surgery addict she has permitted her hair to go a becoming steel grey. Passing your office, $activeSlave.slaveName audibly commented on how old she looked to another slave. Anger flashes in the businesswoman's eyes.
-
 <<case "obedient shemale">>
 
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> has been doing $his best to be a good slave $girl recently. Since $he doesn't have a pussy, that means $he's been doing $his best to take it up the ass like a good slave. $He isn't all that used to it yet, but $he tries. $He's trying right now, bent over the arm of the couch in your office with your <<if $PC.dick == 0>>vibrating strap-on<<else>>cock<</if>> pumping in and out of $him. $He looks like $he wants to ask something, so you tell $him to spit it out.
@@ -3030,32 +3010,6 @@ Passing near the slave dormitory late at night, you hear a quiet cry within. Thi
 <</switch>>
 Still dreaming, $he clasps $his arm<<if hasBothArms($activeSlave)>>s<</if>> protectively over $his <<if $activeSlave.pregKnown == 1>>unborn child<<if $activeSlave.pregType > 1>>ren<</if>><<else>>vulnerable chest<</if>>, and rolls to one side. Halfway into a fetal position, $he turns $his head against $his pillow, murmuring "N-no — plea<<s>>e no — I'll d-do anyth-thing — no..."
 
-<<case "cockfeeder resistance">>
-
-As you're starting your day, $assistant.name pauses _hisA review of business matters to report that <<= App.UI.slaveDescriptionDialog($activeSlave)>> is not accepting $his breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. $activeSlave.slaveName is in the proper position for feeding, on <<if hasBothLegs($activeSlave)>>$his knees<<else>>the ground<</if>> in front of a feeding fuckmachine. $He isn't sucking it off for $his breakfast, however. $He doesn't seem to be fully awake, and is <<if canSee($activeSlave)>>regarding<<else>>touching<</if>> the big dildo that $he's supposed to suck off for food with vague distaste. $His $activeSlave.faceShape face is scrunched into a look of tired disgust.
-
-<br><br>
-
-$He turns to you as you enter, and <<if canSee($activeSlave)>>seeing<<else>>realizing<</if>> that it's you, $he
-<<if !canTalk($activeSlave)>>
-	uses hesitant gestures to beg you to let $him eat normally today. $His hand<<if hasBothArms($activeSlave)>>s become<<else>> becomes<</if>> vehement when it comes to the phallus in $his face, which $he apparently finds disgusting.
-<<else>>
-	mumbles unhappily, "Plea<<s>>e, <<Master>>, plea<<s>>e, can I ju<<s>>t eat normally for one day? Thi<<s>> i<<s>>, um, kind of gro<<ss>>."
-<</if>>
-
-<<case "suppository resistance">>
-
-As you're starting your day, $assistant.name pauses _hisA review of business matters to report that <<= App.UI.slaveDescriptionDialog($activeSlave)>> is not accepting $his breakfast from the phallic feeders in the kitchen. With nothing else urgent, you head down to address the situation. $activeSlave.slaveName is standing in front of the place where $he's supposed to take $his drugs. It's a little pad on the ground on which $he's supposed to kneel, with a fuckmachine positioned to penetrate $his anus once $he does so. $He's not completely awake yet, and is just standing there, <<if canSee($activeSlave)>>viewing<<else>>feeling<</if>> the setup with a vague look of distaste. $He's facing it, and has $his <<if $activeSlave.butt > 6>>massive behind<<elseif $activeSlave.butt > 3>>beautiful bottom<<else>>cute butt<</if>> pointed very much away from the machine that's supposed to be fucking it.
-
-<br><br>
-
-$He turns to you as you enter, and <<if canSee($activeSlave)>>seeing<<else>>realizing<</if>> that it's you, $he
-<<if !canTalk($activeSlave)>>
-	uses hesitant gestures to beg you to let $him take $his drugs normally. $He tries to use gestures to explain that $he thinks $he gets enough anal from humans, without being buttfucked by a machine every morning.
-<<else>>
-	mumbles unhappily, "Plea<<s>>e, <<Master>>, can I ju<<s>>t take a <<sh>>ot? A<<ss>>rape from, you know, people, i<<s>>, um, bad enough."
-<</if>>
-
 <<case "shower slip">>
 
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> finishes $his morning shower and sleepily turns to dry off. $He slips a little on the moist bathroom floor, trips over $his own feet, and starts to stumble. $His fall is immediately arrested as $he's caught by a pair of strong<<if $PC.title == 0>> yet feminine<</if>> arms. Coming to rest against
@@ -3106,7 +3060,7 @@ As you pass by the area of the penthouse where slaves sleep one morning, you're
 
 <br><br>
 
-You recognize the tune: it's one of <<if $DJ != 0>>$DJ.slaveName's most popular tracks<<elseif $club != 0>>the most popular tracks in $clubName<<else>>the most popular house tracks in the Free City<</if>>, and it's made for sexy dancing. Shaking $his
+You recognize the tune: it's one of <<if _S.DJ>>_S.DJ.slaveName's most popular tracks<<elseif $club != 0>>the most popular tracks in $clubName<<else>>the most popular house tracks in the Free City<</if>>, and it's made for sexy dancing. Shaking $his
 <<if $activeSlave.hips > 2>>
 	<<if $activeSlave.weight > 30>>
 		awe inspiring, soft
@@ -7328,70 +7282,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>>
 <</if>>
 
-<<case "escapee">>
-
-<<link "Do nothing">>
-	<<replace "#result">>
-		Considering how easily this attempt was thwarted, you don't see much of a point in wasting your valuable time on punishing $activeSlave.slaveName in the hopes that $he'll learn $his lesson. Your send $him back to $his assigned duties, warning $him that you may not be so lenient in the future. $activeSlave.slaveName proclaims $his obedience, but, privately, it's clear that $he views your decision as @@.mediumorchid;an act of weakness@@ rather than kindness. In addition, every single one of your other slaves not already obedient to you is @@.orangered;encouraged in their trust that you won't hurt them@@ by this minuscule punishment of an escape attempt.
-		<<set $activeSlave.devotion -= 10, $activeSlave.trust += 2>>
-		<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust += 8; } })>>
-	<</replace>>
-<</link>>
-<br><<link "Just confine would-be escapee to prevent future attempts">>
-	<<replace "#result">>
-		You order $activeSlave.slaveName confined until further notice. $activeSlave.slaveName is @@.hotpink;a little crushed@@ by $his failure to escape. However, every single one of your other slaves not already obedient to you is slightly @@.orangered;encouraged in their trust that you won't hurt them@@ by this moderate punishment of an escape attempt.
-		<<set $activeSlave.devotion += 4>>
-		<<= assignJob($activeSlave, "stay confined")>>
-		<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust += 4; } })>>
-	<</replace>>
-<</link>>
-<br><<link "Flog the would-be escapee">>
-	<<replace "#result">>
-		Lesser whippings are usually performed by binding a slave's hands and then securing them to the ceiling so that $he will dance titillatingly when struck. This is not such a beating. You tie $activeSlave.slaveName to a wall by $his wrists and ankles and flog $him with workmanlike thoroughness<<if $activeSlave.pregKnown == 1>>, making sure to avoid accidentally ending $his pregnancy<</if>>. $He passes from angry struggles to agonized sobbing and finally to bloody, exhausted weeping before you untie $his now-limp form and apply first aid. $activeSlave.slaveName's rebelliousness is @@.gold;dulled by the experience,@@ and $his @@.red;health is damaged.@@ Furthermore, every single one of your other slaves not already obedient to you is @@.gold;frightened@@ by the example set.
-		<<set $activeSlave.trust -= 5>>
-		<<run healthDamage($activeSlave, 40)>>
-		<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } })>>
-	<</replace>>
-<</link>>
-<<if $seeExtreme == 1>>
-	<br><<link "Clip the would-be escapee's tendons">>
-		<<replace "#result">>
-			The simple thing to do would be to sedate $activeSlave.slaveName and haul $him to the remote surgery for $his punishment. That would deny $him the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain $him, pronounce judgment, and drag $his struggling, weeping form through the penthouse to the surgery. $activeSlave.slaveName is @@.mediumorchid;saddened@@ and @@.gold;frightened@@ by this punishment, and $his @@.red;health is damaged@@ by the surgery. Every single one of your other slaves with any resistance left in them is @@.gold;sensibly restrained@@ from trying such rash acts.
-			<<set $activeSlave.devotion -= 5, $activeSlave.trust -= 5, $activeSlave.heels = 1>>
-			<<run surgeryDamage($activeSlave, 10)>>
-			<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } })>>
-		<</replace>>
-	<</link>>
-	<br><<link "Amputate the would-be escapee's limbs">>
-		<<replace "#result">>
-			The simple thing to do would be to sedate $activeSlave.slaveName and haul $him to the remote surgery for $his punishment. That would deny $him the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain $him, pronounce judgment, and drag $his struggling, weeping form through the penthouse to the surgery. $activeSlave.slaveName is @@.mediumorchid;filled with implacable hatred@@ by this terrible punishment, and $his @@.red;health is damaged@@ by the major surgery. However, every single one of your other slaves not already obedient to you is @@.gold;utterly terrified@@ by the example set.
-			<<set $activeSlave.devotion -= 50, $activeSlave.trust -= 50, $activeSlave.diet = "healthy">>
-			<<run removeLimbs($activeSlave, "all"), surgeryDamage($activeSlave, 40)>>
-			<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } })>>
-		<</replace>>
-	<</link>>
-	<<if getBestVision($activeSlave) > 0>>
-		<br><<link "Blind the would-be escapee">>
-			<<replace "#result">>
-				The simple thing to do would be to sedate $activeSlave.slaveName and haul $him to the remote surgery for $his punishment. That would deny $him the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain $him, pronounce judgment, and drag $his struggling, weeping form through the penthouse to the surgery. You make sure to point out all the things $he'll never get to see again. $activeSlave.slaveName is @@.mediumorchid;filled with implacable hatred@@ by this terrible punishment, and $his @@.red;health is slightly damaged@@ by the surgery. However, every single one of your other slaves not already obedient to you is @@.gold;utterly terrified@@ by the example set.
-				<<set $activeSlave.devotion -= 50, $activeSlave.trust -= 50>>
-				<<run eyeSurgery($activeSlave, "both", "blind"), surgeryDamage($activeSlave, 20)>>
-				<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 10; } })>>
-			<</replace>>
-		<</link>>
-	<</if>>
-	<<if canTalk($activeSlave)>>
-		<br><<link "Mute the would-be escapee">>
-			<<replace "#result">>
-				The simple thing to do would be to sedate $activeSlave.slaveName and haul $him to the remote surgery for $his punishment. That would deny $him the added weight of terror, however, and would stop your other slaves from learning by the sight of it. So, you restrain $him, pronounce judgment, and drag $his struggling, protesting form through the penthouse to the surgery. $He is allowed one last chance to verbally resist you, plead with you, and finally to beg with you, all in vain. $activeSlave.slaveName is @@.mediumorchid;filled with hatred@@ and @@.gold;terror@@ by this harsh punishment, and $his @@.red;health is slightly damaged@@ by the surgery. However, every single one of your other slaves not already obedient to you is @@.hotpink;terrified@@ by the example set.
-				<<set $activeSlave.devotion -= 5, $activeSlave.trust -= 25, $activeSlave.voice = 0>>
-				<<run surgeryDamage($activeSlave, 10)>>
-				<<set $slaves.forEach(function(s) { if (s.devotion <= 20) { s.trust -= 5; } })>>
-			<</replace>>
-		<</link>>
-	<</if>>
-<</if>>
-
 <<case "not my name">>
 
 <<link "Extirpate this foolishness with pain">>
@@ -8839,78 +8729,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>><<if canDoVaginal($activeSlave) && ($activeSlave.vagina == 0)>>//This option will take $his virginity//<<elseif !canDoVaginal($activeSlave) && ($activeSlave.anus == 0)>> //This option will take $his anal virginity//<</if>>
 <</if>>
 
-<<case "obedient idiot">>
-
-<<link "Give $him something more appropriate to suck on">>
-	<<replace "#result">>
-		<<= capFirstChar($assistant.name)>>, as usual, has to give the stupid slut considerable coaching to get $him to your office without getting lost. This is a near-miraculous imbecility, as the penthouse is expressly designed to make it nearly impossible to get anywhere from anywhere else without passing by the office door. $He understands orders to <<if $PC.dick == 0>>perform cunnilingus<<else>>suck a dick<</if>>, though, and gets down to it eagerly enough. When $he finishes the job, <<if $PC.dick == 0>>wipes $his mouth<<else>>$he busily swallows every drop of your ejaculate<</if>> and then looks up at you doubtfully.
-		<<if !canTalk($activeSlave)>>
-			$He slowly spells out a question with $his hand<<if hasBothArms($activeSlave)>>s<</if>>, asking if $he's a good slave.
-		<<else>>
-			$He mumbles a hesitant question: "<<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>, am I a good <<s>>lave?"
-		<</if>>
-		You tell $him that $he is, running a hand <<if $activeSlave.hStyle == "shaved bald">>across $his bald scalp<<else>>through $his hair<</if>>. $He seems @@.hotpink;reassured,@@ and thankful when you give $him a cup of $his proper rations from your own hand.
-		<<set $activeSlave.devotion += 4>>
-		<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-	<</replace>>
-<</link>>
-<br><<link "Reassure $him and get $him to slow down">>
-	<<replace "#result">>
-		$He's so intent on trying to suck off the food dispenser that $he doesn't <<if canHear($activeSlave)>>hear<<else>>notice<</if>> you enter the room. $He starts with surprise when you encircle $his<<if $activeSlave.belly >= 1500>> _belly<<if $activeSlave.bellyPreg >= 1500>> pregnant<</if>> belly<<else>> waist<</if>> with your arms and <<if canHear($activeSlave)>>murmur reassuringly in $his ear<<else>>give $him a reassuring squeeze<</if>>.
-		<<if !canTalk($activeSlave)>>
-			$He sadly gestures at the spigot and then flicks $his own head.
-		<<else>>
-			$He <<say>>s sadly, "<<S>>orry <<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>. I'm trying to be a good <<s>>lave but it'<<s>> hard."
-		<</if>>
-		You kindly tell $him that you know $he's trying, and that that's what really matters.
-		<<if !canTalk($activeSlave)>>
-			$His hands awkwardly ask, "Really?"
-		<<else>>
-			"Really, <<if $activeSlave.rudeTitle == 1>><<= PoliteRudeTitle($activeSlave)>><<else>><<Master>><</if>>?" $he asks hopefully.
-		<</if>>
-		You whisper into $his ear that yes, $he will be all right as long as $he does $his best. $He wiggles $his butt against you a little and giggles <<if $PC.dick != 0>>at the responding stiffness $he feels between $his buttocks<<else>>as you shove $him to $his knees<</if>>. $He shimmies down and <<if $PC.dick != 0>>takes you into $his mouth<<if $PC.vagina != -1>> and does $his best to reach the top of your pussy with the tip of $his tongue<</if>><<else>>eats you out<</if>>, <<if canSee($activeSlave)>>looking you in the eyes the whole time and <</if>>@@.hotpink;smiling@@ as much as $he can manage with <<if $PC.dick != 0>>a dick in $his mouth<<else>>$his tongue working your clit<</if>>.
-		<<set $activeSlave.devotion += 4>>
-		<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-	<</replace>>
-<</link>>
-<br><<link "Spank the stupid out of $him">>
-	<<replace "#result">>
-		$He's so intent on trying to suck off the food dispenser that $he doesn't <<if canHear($activeSlave)>>hear<<else>>notice<</if>> you enter the room. $He starts with surprise when you seize $him and push $him
-		<<if $activeSlave.belly >= 300000>>
-			over $his _belly belly, face-down into the counter.
-		<<else>>
-			face-down across the counter.
-		<</if>>
-		After making $him confirm that $he <<if canHear($activeSlave)>>can hear<<else>>acknowledges<</if>> you, you patiently repeat the very simple instructions for getting meals from the kitchen. Then, you tell $him to repeat them. $He manages the first step fine and has completely forgotten the second. The moment $he hesitates, $he has an instant to <<if canHear($activeSlave)>>hear<<else>>feel<</if>> the rush of air trying to get out of the way of your speeding palm before it contacts the $activeSlave.skin skin of $his buttocks. $He writhes and cries and promises to try harder, but $his poor rear end is almost raw before $he gets it all right. $He leaves the kitchen snuffling sadly to $himself, but in the coming days $he really does seem to @@.gold;do $his best@@ to avoid another beating.
-		<<set $activeSlave.trust -= 5>>
-	<</replace>>
-<</link>>
-<<if $arcade > 0>>
-	<br><<link "Sentence $him to a month in the arcade">>
-		<<replace "#result">>
-			$activeSlave.slaveName screams and begs when $he realizes what $his punishment for being stupid is to be, but you are obdurate.
-			<<if ($activeSlave.muscles > 30)>>
-				$His powerful form has to be sedated for immurement in the arcade.
-			<<elseif ($activeSlave.weight >= 190)>>
-				$He is so massively fat that immuring $him in the arcade is a struggle, even when $he isn't trying to.
-			<<elseif $activeSlave.belly >= 120000>>
-				$He is so enormously gravid that immuring $him in the arcade is a hassle, even though $his _belly middle limits $his ability to struggle.
-			<<elseif ($activeSlave.weight >= -10)>>
-				$His desperate struggles make immuring $him in the arcade difficult.
-			<<elseif $activeSlave.belly >= 1500>>
-				$His <<if $activeSlave.bellyPreg >= 3000>>pregnant<<else>>_belly<</if>> body makes it slightly difficult to fit $him properly into the restraints for immurement in the arcade.
-			<<elseif $activeSlave.muscles < -15>>
-				$His weak body makes immuring $him in the arcade pathetically easy.
-			<<else>>
-				$His thin form makes immuring $him in the arcade pathetically easy.
-			<</if>>
-			After $he's properly confined, the only sign of $his discomfiture is a slight movement of $his $activeSlave.skin butt as $he wriggles desperately against $his restraints.
-			<<= assignJob($activeSlave, "be confined in the arcade")>>
-			<<set $activeSlave.sentence = 4>>
-		<</replace>>
-	<</link>>
-<</if>>
-
 <<case "devoted old">>
 
 <<if canDoAnal($activeSlave) || canDoVaginal($activeSlave)>>
@@ -9095,69 +8913,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</replace>>
 <</link>><<if ($activeSlave.chastityVagina)>> //This option will remove $his chastity belt//<</if>>
 
-<<case "obedient bitchy">>
-
-<<link "Beg her pardon and offer to loan the bitch to her">>
-	<<replace "#result">>
-		The businesswoman's anger turns to malicious anticipation as you call $activeSlave.slaveName over and inform $him that you and the businesswoman have decided $activeSlave.slaveName will be spending the night with her. Now that you look at your business partner, she has certain signs of a sadist. $activeSlave.slaveName notices too, and begins to cry<<if $activeSlave.bellyPreg >= 1500>> and shield $his pregnancy<</if>> as the businesswoman promises that there will be "no permanent damage." $activeSlave.slaveName is unceremoniously returned in the early hours of the morning. $His back and buttocks have been meticulously flogged right up to the very edge of damage, leaving angry marks across $his $activeSlave.skin skin. $His mouth lolls open, as though $he's been doing little but give cunnilingus. <<if $activeSlave.vagina != -1>>$His pussy,<<elseif $activeSlave.dick == 0>>$His shamefully featureless groin with its tiny little hole,<<else>>$His dick,<</if>> anus,<<if $activeSlave.belly >= 10000>> popped navel,<</if>> and even $his nipples show signs of torture. Whenever $he thinks of a sharp remark in the future, @@.hotpink;$he'll remember the pain and keep $his mouth shut.@@
-		<<set $activeSlave.behavioralFlaw = "none">>
-		<<run seX($activeSlave, "oral", "public", "penetrative", 5)>>
-	<</replace>>
-<</link>>
-<br><<link "Offer to spitroast the bitch between the two of you">>
-	<<replace "#result">>
-		The businesswoman grins slowly and reaches into $his purse as you inform $activeSlave.slaveName that you and the businesswoman will punish $him together. $activeSlave.slaveName's eyes widen as the businesswoman fishes a massive strap-on out of $his bag. The surprise turns to fear as the businesswoman begins to slap it against $activeSlave.slaveName's buttocks as you
-		<<if !isAmputee($activeSlave)>>
-			<<if $activeSlave.belly >= 300000>>
-				push $him onto $his _belly belly.
-			<<else>>
-				pull $him down on <<if hasAllLimbs($activeSlave)>>all fours<<else>>the ground<</if>>.
-			<</if>>
-		<<else>>
-			arrange your bitchy little sex toy between you and your guest.
-		<</if>>
-		The businesswoman clearly wants $his ass, so you
-		<<if !canDoAnal($activeSlave)>>
-			quickly unfasten $his anal chastity. You
-		<</if>>
-		<<if $PC.vagina != -1>>ride $activeSlave.slaveName's face<<else>>facefuck $activeSlave.slaveName<</if>> roughly as $activeSlave.slaveName takes a painful anal raping from the huge dildo.
-		The businesswoman winks at you companionably and extracts squeals from $activeSlave.slaveName that feel especially delicious <<if $PC.vagina != -1>>against your cunt<<else>>along your dick<</if>>. $activeSlave.slaveName <<if hasAnyLegs($activeSlave)>>collapses<<if $activeSlave.belly >= 5000>> and rolls onto $his side<</if>> after a long punishment fuck<<else>>ends the day a sore toy<</if>>; $his @@.hotpink;submission@@ to you and @@.gold;fear of you@@ have both increased.
-		<<if $activeSlave.anus == 0>>
-			The businesswoman considered $his @@.lime;anal cherry@@ a @@.green;respectable offer.@@
-			<<set $activeSlave.anus++>>
-			<<run repX(500, "event", $activeSlave)>>
-		<</if>>
-		<<set $activeSlave.devotion += 3, $activeSlave.trust -= 3>>
-		<<run seX($activeSlave, "anal", "public", "penetrative")>>
-		<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-	<</replace>>
-<</link>><<if ($activeSlave.anus == 0)>> //This option will take anal virginity and ignore anal chastity//<</if>>
-<<if $arcade > 0>>
-	<br><<link "Sentence $him to a month in the arcade">>
-		<<replace "#result">>
-			$activeSlave.slaveName screams and begs when $he realizes what $his punishment for being stupid is to be, but you are obdurate.
-			<<if ($activeSlave.muscles > 30)>>
-				$His powerful form has to be sedated for immurement in the arcade.
-			<<elseif ($activeSlave.weight >= 190)>>
-				$He is so massively fat that immuring $him in the arcade is a struggle, even when $he isn't trying to.
-			<<elseif $activeSlave.belly >= 120000>>
-				$He is so enormously gravid that immuring $him in the arcade is a hassle, even though $his _belly middle limits $his ability to struggle.
-			<<elseif ($activeSlave.weight >= -10)>>
-				$His desperate struggles make immuring $him in the arcade difficult.
-			<<elseif $activeSlave.belly >= 1500>>
-				$His <<if $activeSlave.bellyPreg >= 3000>>pregnant<<else>>_belly<</if>> body makes it slightly difficult to fit $him properly into the restraints for immurement in the arcade.
-			<<elseif $activeSlave.muscles < -15>>
-				$His weak body makes immuring $him in the arcade pathetically easy.
-			<<else>>
-				$His thin form makes immuring $him in the arcade pathetically easy.
-			<</if>>
-			After $he's properly confined, the only sign of $his discomfiture is a slight movement of $his $activeSlave.skin butt as $he wriggles desperately against $his restraints.
-			<<= assignJob($activeSlave, "be confined in the arcade")>>
-			<<set $activeSlave.sentence = 4>>
-		<</replace>>
-	<</link>>
-<</if>>
-
 <<case "obedient shemale">>
 
 <<link "Let $him">>
@@ -16179,82 +15934,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>>
 <</if>>
 
-<<case "cockfeeder resistance">>
-
-<<link "Talk $him through it">>
-	<<replace "#result">>
-		You put as much quiet authority into your <<if canHear($activeSlave)>>voice<<else>>words<</if>> as you can, and explain to $him that $he must eat $his breakfast this way. You do not explain any of the actual reasons why you require slaves to eat from cocks, but couch your quiet explanation in terms of $his life as a slave. You tell $him that eating breakfast out of a dick is something you've ordered $him to do. $He needs to do it. If $he does, $he'll be treated well; if $he does not, that will oblige you to punish $him. You tell $him that you would like $him to be a good slave, and that it would be disappointing if you had to punish $him. You put just a hint of steel into the last sentence, and $he stiffens a little at it. Hesitantly, $he scoots forward and bends down to take the tip of the big feeder dick in $his mouth. Sensing that it's being sucked, it gently presses into $his mouth, fucking $his <<if $activeSlave.lips > 95>>big-lipped facepussy<<else>>face<</if>>. Its strokes get longer and faster, until $he's gulping down $his breakfast as it's shot down $his throat like a huge load.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>By this time, the kitchen is also dosing $him with drugs by fucking $his butt with a phallus that ejaculates them for absorption. $He's being spitroasted by the kitchen.<</if>>
-		Once $he's fully awake, $he's mostly @@.mediumaquamarine;relieved@@ that you let $him get away with hesitation about obedience and took the time to talk $him through it.
-		<<set $activeSlave.trust += 4>>
-	<</replace>>
-<</link>>
-<br><<link "Punish $him with a bigger feeder">>
-	<<replace "#result">>
-		You give the kitchen an order by voice command. <<if canHear($activeSlave)>>It's technical<<else>>$He can't hear it<</if>>, so $he doesn't understand it, but the meaning becomes clear soon enough. The phallus dangling in $his face is withdrawn, and $he's halfway through a shocked "Thank you" when it's replaced by another, noticeably larger one<<if !canSee($activeSlave)>>. $He doesn't notice its larger size until it bumps into $his cheek, causing $him to scoot back<</if>>. You tell $him in deceptively mild <<if canHear($activeSlave)>>tones<<else>>words<</if>> that you'll keep increasing the size of $his feeder until $he decides to suck it off like a good little $desc, or you run out of size options and are forced to strap $him down and push them down $his throat. At that point, $he might be able to breathe; then again, $he might not. $He begins to cry, $his <<if $activeSlave.face > 95>>heartbreakingly beautiful<<elseif $activeSlave.face > 10>>pretty<<else>>homely<</if>> face clouding with anguish, but is so @@.gold;frightened@@ by the threat that $he doesn't let $him tears distract $him from scooting forward to suck off a huge dildo for $his breakfast.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>Once it senses $he's complying, the kitchen starts dosing $him with drugs by fucking $his butt with a phallus that ejaculates them for absorption. Mercifully, $he doesn't try to refuse the anal fuckmachine, and avoids having $his asshole filled by a bigger phallus too.<</if>>
-		$He keeps the threat in mind, and has a slightly sore throat to @@.hotpink;help $him remember to obey without question.@@
-		<<set $activeSlave.trust -= 2, $activeSlave.devotion += 2>>
-	<</replace>>
-<</link>>
-<br><<link "Double penetrate $his mouth for insolence">>
-	<<replace "#result">>
-		You step forward and caress the slave's throat, telling $him to suck like a good little $desc. You make no threat, but give $him the order in a <<if canHear($activeSlave)>>voice of brass<<else>>commanding manner<</if>>. $He knows what you can do to $him, and scrabbles forward to obey, @@.gold;terribly frightened.@@ $His fear is justified. You announce that $he's avoided serious punishment, but $he still needs correction for $him hesitation and insolence. $He can't beg or even moan, since $he's being facefucked by the feeder dildo by now, but $his <<= App.Desc.eyesColor($activeSlave)>> widen in terror. $He <<if canSee($activeSlave)>>can't watch you, since $he can't turn $his head,<<else>>can't see what you are doing,<</if>> so $he has almost no time to prepare when you haul $him head most of the way off the feeder and shove <<if $PC.dick != 0>>your own phallus<<else>>a strap-on<</if>> into $his mouth, too. $He gags instantly, almost vomiting, but forces $himself to relax as you begin to thrust into $his throat, alternately with the feeder. The liquid food provides plenty of lubrication, and a lot of liquid for $him to gag on, and before long $he's a degraded, humiliating mess. $He often clamps $his eyes shut as $he desperately concentrates on breathing, squeezing the tears out to run down $his $activeSlave.skin cheeks.
-		<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>You leave the poor slave to take $his drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for $him, $he doesn't object to that.<</if>>
-		<<set $activeSlave.trust -= 4>>
-		<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-	<</replace>>
-<</link>>
-<<if $PC.balls >= 14>>
-	<br><<link "Force-feed $him with your own cock">>
-		<<replace "#result">>
-			You step forward and pull $him away from the feeder, telling $him that, since $he doesn't like the cockfeeder, $he can suck yours like a good little $desc. You make no threat, but order $him <<if canHear($activeSlave)>>in a steely voice<<else>>authoritatively<</if>> to suck you off until $he's earned a meal of your cum. $He knows what you can do to $him, and hurries forward to obey. $He rushes to open your clothes and get to work, but pauses when <<if canSee($activeSlave)>>$his <<= App.Desc.eyesColor($activeSlave)>> take in your massive testicles.<<else>>$his groping hand feels your massive testicles.<</if>> Realizing just how big $his meal will be, $he's obviously @@.gold;frightened.@@ You grab $his head, breaking $him out of $his shocked stillness, and explain that you can't let $him starve. If $he won't eat out of the feeder, you'll just have to feed $him some other way. With that, you ram your cock forward and start fucking $his <<if $activeSlave.face > 95>>heartbreakingly beautiful<<elseif $activeSlave.face > 10>>pretty<<else>>homely<</if>> face. After a few minutes of gagging oral, you start to approach your climax. Your thorough facefucking leaves $him unable to beg or even moan, but $his eyes widen in terror when $he realizes you're about to cum. You don't give $him any time to prepare, instead hilting yourself immediately, and letting $his throat's desperate attempts to swallow bring you over the edge. You begin your long release of pent-up jizz, spraying deciliter after deciliter of cum down $his throat and into $his stomach. By the time you've finished, you can tell $he's struggling for air and in pain from the massive quantity of thick fluid in $his stomach. You give $him a helpful hint before releasing $him: "If you take it all the way in your throat, you don't even have to <<if canTaste($activeSlave)>>taste<<else>>feel<</if>> what it's feeding you." You pull out of $his mouth and let $him go. $He gasps for air and almost immediately vomits some of your cum all over $himself, turning $him into a degraded, humiliated mess. $He lays on the floor and desperately concentrates on breathing, squeezing the tears out of $his eyes to run down $his $activeSlave.skin cheeks.
-			<<if ($suppository != 0) && ($activeSlave.drugs != "none")>>You leave the poor slave to take $his drugs up the ass, since the kitchen administers those by phallus, too. Fortunately for $him, $he doesn't object to that.<</if>>
-			<<set $activeSlave.trust -= 2>>
-			<<run seX($activeSlave, "oral", $PC, "penetrative")>>
-		<</replace>>
-	<</link>>
-<</if>>
-
-<<case "suppository resistance">>
-
-<<link "Talk $him through it">>
-	<<replace "#result">>
-		You put as much quiet authority into your voice as you can, and explain to $him that $he is required to take $his drugs up $his ass. You do not explain any of the actual reasons why you require slaves to submit to daily machine anal, but couch your quiet explanation in terms of $his life as a slave. You tell $him that taking a solid buttfuck from a machine first thing in the morning is something you've ordered $him to do. $He needs to do it. If $he does, $he'll be treated well; if $he does not, that will oblige you to punish $him. You tell $him that you would like $him to be a good slave, and that it would be disappointing if you had to punish $him. You put just a hint of steel into the last sentence, and $he stiffens a little at it. Hesitantly, $he
-		<<if $activeSlave.belly >= 300000>>
-			shifts onto $his _belly belly, uses $his hand<<if hasBothArms($activeSlave)>>s<</if>> to brace $himself against the impending pounding, and scoots towards the phallus.
-		<<else>>
-			gets to $his knee<<if hasBothLegs($activeSlave)>>s<</if>>, using $his hand<<if hasBothArms($activeSlave)>>s<</if>> to spread $his cheeks for the phallus.
-		<</if>>
-		Sensing that it's being offered an anus, it gently pushes inside $his rectum. Its strokes get longer and faster, <<if $activeSlave.anus > 2>>until $he's groaning under the sodomy despite $his loose ass<<elseif $activeSlave.anus > 1>>quickly gaping $his big butthole and making $him groan<<else>>making $him gasp as it stretches $his poor little asshole<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>$He doesn't manage to groan for long, though, since the kitchen extends another phallus to feed $him $his breakfast. Before long, $he's being spitroasted by machines.<</if>>
-		Once $he's fully awake, $he's mostly @@.mediumaquamarine;relieved@@ that you let $him get away with hesitation about obedience and took the time to talk $him through it.
-		<<set $activeSlave.trust += 4>>
-	<</replace>>
-<</link>>
-<br><<link "Punish $him with a bigger phallus">>
-	<<replace "#result">>
-		You give the kitchen an order by voice command. It's technical, so $he doesn't understand it, but the meaning becomes clear soon enough. The phallus aiming meaningfully at the place where $he's supposed to kneel and offer up $his butthole is withdrawn, and $he's halfway through a shocked thank you when it's replaced by another, noticeably larger. You tell $him in deceptively mild tones that you'll keep increasing the size of $his phallus until $he decides to get down and take it like a good little $desc, or you run out of size options and are forced to strap $him down and apply two at once. At that point, $his ass might be able to take it; then again, it might not. $He begins to cry, but is so @@.gold;frightened@@ by the threat that $he doesn't let $him tears distract $him from a delectable scramble to
-		<<if $activeSlave.belly >= 300000>>
-			throw $himself onto $his _belly belly
-		<<else>>
-			get down on $his knees
-		<</if>>
-		and <<if $activeSlave.butt > 6>>heave $his huge buttocks apart<<elseif $activeSlave.butt > 3>>spread $his broad buttocks<<else>>spread $his cute ass wide<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>Once it's got its phallus sliding in and out of $his asshole, the kitchen gives $him another, to suck off for $his breakfast. Fortunately for $him, $he doesn't object, and only gets facefucked by the normal dildo.<</if>>
-		$He keeps the threat in mind, and has a slightly sore ass to @@.hotpink;help $him remember to obey without question.@@
-		<<set $activeSlave.trust -= 2, $activeSlave.devotion += 2>>
-	<</replace>>
-<</link>>
-<br><<link "Double penetrate $his ass for insolence">>
-	<<replace "#result">>
-		You step forward and take gentle hold of the slave's throat, telling $him to get down on $his knees like a good little $desc. You make no threat, but give $him the order in a voice of brass. $He knows what you can do to $him, and hurries to obey, @@.gold;terribly frightened.@@ $His fear is justified. You announce that $he's avoided serious punishment, but $he still needs correction for $his hesitation and insolence. $He's concerned when $he <<if canSee($activeSlave)>>sees<<elseif canHear($activeSlave)>>hears<<else>>feels<</if>> you <<if $PC.dick != 0>>get your dick<<if $PC.vagina != -1>>and pussy<</if>> out<<else>>don a strap-on<</if>>, though $he's distracted by the rapidly accelerating buttfuck $he's getting from the machine. $He tries to offer you $his throat, but $his hopes are dashed when you walk around behind $him, swing a leg over the machine pistoning in and out of $his asshole, and command it to stop for a moment. Then you work <<if $PC.dick != 0>>yourself<<else>>your own dildo<</if>> up $his ass alongside the phallus that already fills it. The drugs are delivered with lubricant, and you do fit, but only after a nice long session of sobbing, spasming, and finally crying resignation. Then you order the machine to go back to what it was doing, and the resignation vanishes, replaced with anal pain as $activeSlave.slaveName takes double penetration up $his <<if $activeSlave.anus > 2>>gaping anus<<elseif $activeSlave.anus == 2>>big butthole<<else>>poor, abused little butt<</if>>.
-		<<if ($cockFeeder != 0) && ($activeSlave.drugs != "none")>>When you grow tired of the whining, you order the kitchen to give the bitch breakfast. It extends a feeding phallus and fills $his throat, muffling the noise somewhat.<</if>>
-		<<set $activeSlave.trust -= 4>>
-		<<= VCheck.Anal()>>
-	<</replace>>
-<</link>>
-
 <<case "shower slip">>
 
 <<link "Carry $him to where $he needs to go">>
diff --git a/src/uncategorized/cellblockReport.tw b/src/uncategorized/cellblockReport.tw
index 96f92583c6ac5a9c5710773b70bcecca219f889b..40f1671c561534c5e85a8bd6d662ae23e1442bc8 100644
--- a/src/uncategorized/cellblockReport.tw
+++ b/src/uncategorized/cellblockReport.tw
@@ -121,7 +121,7 @@
 <</if>>
 
 <<if (_S.Wardeness)>>
-	<<set $i = _FLs>> /* apply following SA passages to facility leader */
+	<<set $i = $slaveIndices[$WardenessID]>> /* apply following SA passages to facility leader */
 	<<if $showEWD != 0>>
 		<br><br>
 		/* 000-250-006 */
diff --git a/src/uncategorized/club.tw b/src/uncategorized/club.tw
index 74fe3887039bebc101bcab61b9c8f4e59a3b3bce..2595248737fa5521982e80daea7032a1845820b2 100644
--- a/src/uncategorized/club.tw
+++ b/src/uncategorized/club.tw
@@ -140,9 +140,9 @@
 		$clubNameCaps is dotted with pretty, flirtatious slaves, stripping on stages, serving drinks, and dancing. They're very willing to suck patrons off in the open or give a public handjob, and there are little private rooms for them to use when engaging in heavier intercourse.
 	<<elseif _CL > 0>>
 		There are a few pretty, flirtatious slaves, stripping on stages, serving drinks, and dancing. They're very willing to suck patrons off in the open or give a public handjob, and there are little private rooms for them to use when engaging in heavier intercourse.
-	<<elseif $DJ != 0>>
-		<<setLocalPronouns $DJ>>
-		$clubNameCaps is doing business normally, without a complement of sex slaves to spice things up. $DJ.slaveName is alone in $clubName, and can accomplish little by $himself.
+	<<elseif _S.DJ>>
+		<<setLocalPronouns _S.DJ>>
+		$clubNameCaps is doing business normally, without a complement of sex slaves to spice things up. _S.DJ.slaveName is alone in $clubName, and can accomplish little by $himself.
 	<<else>>
 		$clubNameCaps is doing business normally, without a complement of sex slaves to spice things up.
 		<div class="choices" style="font-style:normal">
@@ -257,12 +257,12 @@
 </div>
 
 <div>
-	<<if $DJ != 0>>
-		<<if $DJignoresFlaws != 1>>
-			$DJ.slaveName will attempt to fix flaws in <<print $clubName>>'s sluts.
+	<<if _S.DJ>>
+		<<if _S.DJignoresFlaws != 1>>
+			_S.DJ.slaveName will attempt to fix flaws in <<print $clubName>>'s sluts.
 			[[Ignore flaws|Club][$DJignoresFlaws = 1]]
 		<<else>>
-			$DJ.slaveName has been instructed to ignore flaws in <<print $clubName>>'s sluts.
+			_S.DJ.slaveName has been instructed to ignore flaws in <<print $clubName>>'s sluts.
 			[[Fix flaws|Club][$DJignoresFlaws = 0]]
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw
index 96f2a61ae0acc1a872b7f97a0460d4db7b6336d7..ed03beb20a3cbab86779f808cc56f54867e68cb1 100644
--- a/src/uncategorized/clubReport.tw
+++ b/src/uncategorized/clubReport.tw
@@ -10,44 +10,41 @@
 <!-- Statistics gathering; income is rep boosts in numbers, and profit will be rep per cash unit, or cash unit per rep -->
 <<set $facility = $facility || {}, $facility.club = initFacilityStatistics($facility.club)>>
 
-<<if $DJ != 0>>
-	<<set _FLs = $slaveIndices[$DJ.ID]>>
-
-	<<if ($slaves[_FLs].health.condition < -80)>>
-		<<run improveCondition($slaves[_FLs], 20)>>
-	<<elseif $slaves[_FLs].health.condition < -40>>
-		<<run improveCondition($slaves[_FLs], 15)>>
-	<<elseif $slaves[_FLs].health.condition < 0>>
-		<<run improveCondition($slaves[_FLs], 10)>>
-	<<elseif $slaves[_FLs].health.condition < 90>>
-		<<run improveCondition($slaves[_FLs], 7)>>
+<<if _S.DJ>>
+	<<if (_S.DJ.health.condition < -80)>>
+		<<run improveCondition(_S.DJ, 20)>>
+	<<elseif _S.DJ.health.condition < -40>>
+		<<run improveCondition(_S.DJ, 15)>>
+	<<elseif _S.DJ.health.condition < 0>>
+		<<run improveCondition(_S.DJ, 10)>>
+	<<elseif _S.DJ.health.condition < 90>>
+		<<run improveCondition(_S.DJ, 7)>>
 	<</if>>
-	<<if $slaves[_FLs].devotion <= 60>>
-		<<set $slaves[_FLs].devotion += 5>>
+	<<if _S.DJ.devotion <= 60>>
+		<<set _S.DJ.devotion += 5>>
 	<</if>>
-	<<if $slaves[_FLs].trust < 60>>
-		<<set $slaves[_FLs].trust += 3>>
+	<<if _S.DJ.trust < 60>>
+		<<set _S.DJ.trust += 3>>
 	<</if>>
-	<<if $slaves[_FLs].fetishStrength <= 95>>
-		<<if $slaves[_FLs].fetish != "humiliation">>
-			<<if fetishChangeChance($slaves[_FLs]) > random(0,100)>>
-				<<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1, $slaves[_FLs].fetish = "humiliation">>
+	<<if _S.DJ.fetishStrength <= 95>>
+		<<if _S.DJ.fetish != "humiliation">>
+			<<if fetishChangeChance(_S.DJ) > random(0,100)>>
+				<<set _FLsFetish = 1, _S.DJ.fetishKnown = 1, _S.DJ.fetish = "humiliation">>
 			<</if>>
-		<<elseif $slaves[_FLs].fetishKnown == 0>>
-			<<set _FLsFetish = 1, $slaves[_FLs].fetishKnown = 1>>
+		<<elseif _S.DJ.fetishKnown == 0>>
+			<<set _FLsFetish = 1, _S.DJ.fetishKnown = 1>>
 		<<else>>
-			<<set _FLsFetish = 2, $slaves[_FLs].fetishStrength += 4>>
+			<<set _FLsFetish = 2, _S.DJ.fetishStrength += 4>>
 		<</if>>
 	<</if>>
-	<<if $slaves[_FLs].rules.living != "luxurious">>
-		<<set $slaves[_FLs].rules.living = "luxurious">>
+	<<if _S.DJ.rules.living != "luxurious">>
+		<<set _S.DJ.rules.living = "luxurious">>
 	<</if>>
 	/% Make sure we have registered living expenses as for any other slave %/
-	<<run getSlaveStatisticData($DJ, $facility.club)>>
-	<<set $DJ = $slaves[_FLs]>>
-	<<setLocalPronouns $DJ>>
-	&nbsp;&nbsp;&nbsp;&nbsp;<<= SlaveFullName($DJ)>> is performing as the DJ.
-	<<if $DJ.relationship == -3 && $DJ.devotion > 50>>
+	<<run getSlaveStatisticData(_S.DJ, $facility.club)>>
+	<<setLocalPronouns _S.DJ>>
+	&nbsp;&nbsp;&nbsp;&nbsp;<<= SlaveFullName(_S.DJ)>> is performing as the DJ.
+	<<if _S.DJ.relationship == -3 && _S.DJ.devotion > 50>>
 		$He tries $his best to be your energetic, cheerful $wife.
 	<</if>>
 	<<if (_FLsFetish == 1)>>
@@ -55,46 +52,45 @@
 	<<elseif (_FLsFetish == 2)>>
 		Every day $he gets to enjoy hundreds of stares on $his skin, and @@.lightsalmon;becomes more of an exhibitionist.@@
 	<</if>>
-	<<if getBestVision($DJ) === 0>>
+	<<if getBestVision(_S.DJ) === 0>>
 		$His lack of eyesight doesn't slow $him down; rather, it strengthens $his other senses. $His tracks have a distinct sound, since $he experiences noise as $his sight.
 	<</if>>
-	<<if ($DJ.skill.entertainment <= 10)>>
-		Though $DJ.slaveName does $his best to lead on the club, with $his lack of skill $he can do little.
-	<<elseif ($DJ.skill.entertainment <= 30)>>
-		$DJ.slaveName's basic skills marginally @@.green;improve@@ the atmosphere in $clubName.
-	<<elseif ($DJ.skill.entertainment <= 60)>>
-		$DJ.slaveName's skills @@.green;improve@@ the atmosphere in $clubName.
-	<<elseif ($DJ.skill.entertainment < 100)>>
-		$DJ.slaveName's skills greatly @@.green;improve@@ the atmosphere in $clubName.
-	<<elseif ($DJ.skill.entertainment >= 100)>>
-		$DJ.slaveName's mastery immensely @@.green;improves@@ the atmosphere in $clubName.
+	<<if (_S.DJ.skill.entertainment <= 10)>>
+		Though _S.DJ.slaveName does $his best to lead on the club, with $his lack of skill $he can do little.
+	<<elseif (_S.DJ.skill.entertainment <= 30)>>
+		_S.DJ.slaveName's basic skills marginally @@.green;improve@@ the atmosphere in $clubName.
+	<<elseif (_S.DJ.skill.entertainment <= 60)>>
+		_S.DJ.slaveName's skills @@.green;improve@@ the atmosphere in $clubName.
+	<<elseif (_S.DJ.skill.entertainment < 100)>>
+		_S.DJ.slaveName's skills greatly @@.green;improve@@ the atmosphere in $clubName.
+	<<elseif (_S.DJ.skill.entertainment >= 100)>>
+		_S.DJ.slaveName's mastery immensely @@.green;improves@@ the atmosphere in $clubName.
 	<</if>>
-	<<if ($DJ.muscles > 5) && ($DJ.muscles <= 95)>>
+	<<if (_S.DJ.muscles > 5) && (_S.DJ.muscles <= 95)>>
 		$His toned body helps $him lead $his fellow club sluts by letting $him dance all night.
 	<</if>>
-	<<if ($DJ.intelligence+$DJ.intelligenceImplant > 15)>>
+	<<if (_S.DJ.intelligence+_S.DJ.intelligenceImplant > 15)>>
 		$He's smart enough to make an actual contribution to the music, greatly enhancing the entire experience.
 	<</if>>
-	<<if ($DJ.face > 95)>>
+	<<if (_S.DJ.face > 95)>>
 		$His great beauty is a further draw, even when $he's in $his DJ booth, but especially when $he comes out to dance.
 	<</if>>
-	<<if setup.DJCareers.includes($DJ.career)>>
+	<<if setup.DJCareers.includes(_S.DJ.career)>>
 		$He has musical experience from $his life before $he was a slave, a grounding that gives $his tracks actual depth.
-	<<elseif $DJ.skill.DJ >= $masteredXP>>
+	<<elseif _S.DJ.skill.DJ >= $masteredXP>>
 		$He has musical experience from working for you, giving $his tracks actual depth.
 	<<else>>
-		<<set $slaves[_FLs].skill.DJ += random(1,Math.ceil(($DJ.intelligence+$DJ.intelligenceImplant)/15) + 8)>>
+		<<set _S.DJ.skill.DJ += random(1,Math.ceil((_S.DJ.intelligence+_S.DJ.intelligenceImplant)/15) + 8)>>
 	<</if>>
 	<<if (_DL + $clubSlavesGettingHelp < 10)>>
-		<<set $i = _FLs>> /* apply following SA passages to facility leader */
-		<<if ($legendaryEntertainerID == 0) && ($slaves[_FLs].prestige == 0) && ($slaves[_FLs].skill.entertainment >= 100) && ($slaves[_FLs].devotion > 50)>>
-			<<set $legendaryEntertainerID = $slaves[_FLs].ID>>
+		<<if ($legendaryEntertainerID == 0) && (_S.DJ.prestige == 0) && (_S.DJ.skill.entertainment >= 100) && (_S.DJ.devotion > 50)>>
+			<<set $legendaryEntertainerID = _S.DJ.ID>>
 		<</if>>
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;Since $he doesn't have enough sluts in $clubName to make it worthwhile for $him to be on stage 24/7, $he spends $his extra time slutting it up $himself. $He has sex with $slaves[$i].sexAmount citizens, @@.green;pleasing them immensely,@@ since it's more appealing to fuck the DJ than some club slut.
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;Since $he doesn't have enough sluts in $clubName to make it worthwhile for $him to be on stage 24/7, $he spends $his extra time slutting it up $himself. $He has sex with _S.DJ.sexAmount citizens, @@.green;pleasing them immensely,@@ since it's more appealing to fuck the DJ than some club slut.
 		<<if $showEWD != 0>>
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<= App.SlaveAssignment.serveThePublic($slaves[$i])>>
+			<br>&nbsp;&nbsp;&nbsp;&nbsp;$He <<= App.SlaveAssignment.serveThePublic(_S.DJ)>>
 		<<else>>
-			<<run App.SlaveAssignment.serveThePublic($slaves[$i])>>
+			<<run App.SlaveAssignment.serveThePublic(_S.DJ)>>
 		<</if>>
 	<</if>>
 	<<if (_DL > 0)>><br><br><</if>>
@@ -105,18 +101,18 @@
 	&nbsp;&nbsp;&nbsp;&nbsp;<<if (_DL != 1)>>''The _DL slaves pleasing citizens in $clubName''<<else>>''The one slave pleasing citizens in $clubName''<</if>> worked hard to @@.green;increase your reputation@@ this week.
 <</if>>
 
-<<if ($DJ != 0)>>
-	<<set $i = _FLs>> /* apply following SA passages to facility leader */
+<<if _S.DJ>>
+	<<set $i = $slaveIndices[$djID]>> /* apply following SA passages to facility leader */
 	<<if $showEWD != 0>>
 		<br><br>
 		/* 000-250-006 */
 		<<if $seeImages && $seeReportImages>>
 		<div class="imageRef tinyImg">
-			<<= SlaveArt($slaves[_FLs], 0, 0)>>
+			<<= SlaveArt(_S.DJ, 0, 0)>>
 		</div>
 		<</if>>
 		/* 000-250-006 */
-		<span class='slave-name'><<= SlaveFullName($slaves[_FLs])>></span> is performing as the DJ in $clubName.
+		<span class='slave-name'><<= SlaveFullName(_S.DJ)>></span> is performing as the DJ in $clubName.
 		<br>&nbsp;&nbsp;&nbsp;
 		<<= App.SlaveAssignment.choosesOwnClothes($slaves[$i])>>
 		<<run tired($slaves[$i])>>
@@ -140,7 +136,6 @@
 		<<include "SA devotion">>
 		<</silently>>
 	<</if>>
-	<<set $DJ = $slaves[_FLs]>>
 <</if>>
 
 <<if (_DL > 0)>>
@@ -257,6 +252,6 @@
 	<</timed>>
 <</if>>
 
-<<if _DL > 0 || $DJ != 0>>
+<<if _DL > 0 || _S.DJ>>
 	<br><br>
 <</if>>
diff --git a/src/uncategorized/djSelect.tw b/src/uncategorized/djSelect.tw
index a2c43a88d432afeb1590a8ca20cb3a21d21638a3..721284c8b0bf9be71ef29ac835897be55e377d5c 100644
--- a/src/uncategorized/djSelect.tw
+++ b/src/uncategorized/djSelect.tw
@@ -1,15 +1,14 @@
 :: DJ Select [nobr jump-to-safe jump-hidden jump-from-safe]
 
 <<set $nextButton = "Back", $nextLink = "Club", $encyclopedia = "DJ">>
-<<if ($DJ != 0)>>
-	<<set $DJ = getSlave($DJ.ID)>>
-	<<setLocalPronouns $DJ>>
-	<span class='slave-name'><<= SlaveFullName($DJ)>></span> is serving as your DJ.<br><br>$He will headline entertainment in $clubName.
+<<if (_S.DJ)>>
+	<<setLocalPronouns _S.DJ>>
+	<span class='slave-name'><<= SlaveFullName(_S.DJ)>></span> is serving as your DJ.<br><br>$He will headline entertainment in $clubName.
 <<else>>
 	You have not selected a DJ.
 <</if>>
 
 <br><br>''Appoint a DJ from your devoted slaves:''
-<br><br>[[None|Club][removeJob($DJ, "be the DJ")]]
+<br><br>[[None|Club][removeJob(_S.DJ, "be the DJ")]]
 <br><br>
 <<print App.UI.SlaveList.facilityManagerSelection(App.Entity.facilities.club, "Club")>>
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index 92be7400d7536e8ec6225009174cee4887cccf52..fe1403fdd8e2953f137c2b85076c5be249e88c39 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -423,7 +423,7 @@
 		<<set $PESSevent.push("madam strategy")>>
 	<</if>>
 
-	<<if ($DJ != 0) && (_L.club >= 5) && ($DJ.face > 95) && ($DJ.skill.entertainment >= 100)>>
+	<<if _S.DJ && (_L.club >= 5) && (_S.DJ.face > 95) && (_S.DJ.skill.entertainment >= 100)>>
 		<<set $PESSevent.push("DJ publicity")>>
 	<</if>>
 
@@ -439,7 +439,7 @@
 		<<set $PETSevent.push("comforting attendant")>>
 	<</if>>
 
-	<<if _S.Nurse && (_L.clinic > 0) && (_S.Nurse.energy > 95) || ((_S.Nurse.fetishStrength > 60) && (_S.Nurse.fetish == "sadist" || _S.Nurse.fetish == "dom"))>>
+	<<if _S.Nurse && (_L.clinic > 0) && (_S.Nurse.energy > 95 || (_S.Nurse.fetishStrength > 60 && (_S.Nurse.fetish == "sadist" || _S.Nurse.fetish == "dom")))>>
 		<<set $subSlave = $slaves.find(function(s) { return s.anus != 0 && s.assignment == "get treatment in the clinic"; })>>
 		<<if (def $subSlave)>>
 			<<set $PETSevent.push("nurse molestation")>>
diff --git a/src/uncategorized/reNickname.tw b/src/uncategorized/reNickname.tw
index 99a131e73debfe0dfb59c5f579a011669feadeff..71426e5e0846d12ecfc05562564736d0ab81ea1e 100644
--- a/src/uncategorized/reNickname.tw
+++ b/src/uncategorized/reNickname.tw
@@ -122,7 +122,7 @@
 <<if ($activeSlave.ID == $Madam.ID)>>
 	<<set _qualifiedNicknames.push("Madam")>>
 <</if>>
-<<if ($activeSlave.ID == $DJ.ID)>>
+<<if ($activeSlave.ID == $djID)>>
 	<<set _qualifiedNicknames.push("DJ")>>
 <</if>>
 <<if ($activeSlave.ID == $Recruiter.ID)>>
diff --git a/src/uncategorized/recETS.tw b/src/uncategorized/recETS.tw
index 516e4c2f4dd59996d0e93a8a6314ec3ae1e19d55..9564b26d47729380892ee0f36f16b57ffe7159d6 100644
--- a/src/uncategorized/recETS.tw
+++ b/src/uncategorized/recETS.tw
@@ -543,8 +543,8 @@
 			<<set $activeSlave.preg = -1>>
 			<<set $activeSlave.hStyle = "in twin tails">>
 			<<set $activeSlave.pubicHStyle = "waxed">>
-			<<set $activeSlave.sexualQuirk = "none">>
-			<<set $activeSlave.behavioralQuirk = "none">>
+			<<set $activeSlave.sexualFlaw = "none">>
+			<<set $activeSlave.behavioralFlaw = "none">>
 			<<run setMissingParents($activeSlave)>>
 			<<set $activeSlave.canRecruit = 0>>
 			<<set $activeSlave.relationship = 2>>
@@ -602,7 +602,8 @@
 			<<set $activeSlave.fetish = "pregnancy">>
 			<<set $activeSlave.fetishStrength = 100>>
 			<<set $activeSlave.sexualQuirk = "perverted">>
-			<<set $activeSlave.behavioralQuirk = "none">>
+			<<set $activeSlave.sexualFlaw = "none">>
+			<<set $activeSlave.behavioralFlaw = "none">>
 			<<run setMissingParents($activeSlave)>>
 			<<set $activeSlave.canRecruit = 0>>
 			<<set $activeSlave.relationship = 4>>
diff --git a/src/uncategorized/saRecruitGirls.tw b/src/uncategorized/saRecruitGirls.tw
index 6ab863caef6bfdfb656d3a698e046e37e4a53bfa..665fa092ab1b923dde5a19c3d10a0bc66b2b39af 100644
--- a/src/uncategorized/saRecruitGirls.tw
+++ b/src/uncategorized/saRecruitGirls.tw
@@ -743,7 +743,7 @@
 			<</if>>
 		<</if>>
 	<<elseif $arcologies[0].FSEgyptianRevivalist != "unset">>
-		<<set _recruiterRelation = randomAvailableRelatedSlave($slaves[$i])>>
+		<<set _recruiterRelation = randomRelatedAvailableSlave($slaves[$i])>>
 		<<if def _recruiterRelation>>
 			/* willingness; protip: relationship optional, and actual sex doesn't need to be allowed */
 			<<if ($slaves[$i].energy > 60 || $slaves[$i].sexualQuirk == "tease" || $slaves[$i].sexualQuirk == "perverted") && (_recruiterRelation.energy > 60 || _recruiterRelation.sexualQuirk == "tease" || _recruiterRelation.sexualQuirk == "perverted")>>
diff --git a/src/uncategorized/saRelationships.tw b/src/uncategorized/saRelationships.tw
index 49822c11a94849c8c3ac457dbf4f8856be044b7b..455f0ed014784845f43423d1ec317bb6b5af5b15 100644
--- a/src/uncategorized/saRelationships.tw
+++ b/src/uncategorized/saRelationships.tw
@@ -86,7 +86,7 @@
 							<<set _SlaveI.trust -= 4>>
 						<</if>>
 					<</if>>
-				<<elseif (_SlaveJ.ID == $DJ.ID) && (_SlaveI.assignment == "serve in the club")>>
+				<<elseif (_SlaveJ.ID == $djID) && (_SlaveI.assignment == "serve in the club")>>
 					<<if _SlaveJ.rules.relationship != "restrictive">>
 						_SlaveI.slaveName manages to ingratiate $himself with the DJ, _SlaveJ.slaveName. The two slaves have @@.lightgreen;struck up a friendship.@@
 						<<set _SlaveJ.relationship = 1, _SlaveJ.relationshipTarget = _SlaveI.ID, _SlaveI.relationship = 1, _SlaveI.relationshipTarget = _SlaveJ.ID>>
diff --git a/src/uncategorized/seCoursing.tw b/src/uncategorized/seCoursing.tw
index 97c8b720698667ba7b21c7036cb26f348d9221dc..41de5a4964c58fbe935eb044f204166bea8c9b79 100644
--- a/src/uncategorized/seCoursing.tw
+++ b/src/uncategorized/seCoursing.tw
@@ -38,6 +38,10 @@ You lead your lurcher _activeLurcher.slaveName out on a leash, naked just like t
 			$He's ready to do $his best. Since $he's concentrating on the immediate challenge of catching rather than the secondary challenge of raping, $he isn't hard yet, but $he's not indifferent to the prospect of getting $his dick wet. There's a bead of precum forming at $his tip.
 			<<set $phallus = "dick">>
 		<</if>>
+	<<elseif _activeLurcher.tail == "sex">>
+		Although $his dick isn't really up to performing a sexual assault today, $his spade-tipped pleasure tail is sweeping back and forth and dripping lube. It's an unusual instrument for a lurcher, and one that @@.green;fascinates@@ the watching crowd of spectators.
+		<<run repX(250, "event", _activeLurcher)>>
+		<<set $phallus = "tail">>
 	<<elseif !canAchieveErection(_activeLurcher)>>
 		There's no way $he's going to be able to achieve an erection, so $he's holding a lubricated dildo in one hand. This is technically permitted under the rules, but your fellow competitors and the crowd gathering to spectate @@.red;consider it poor form.@@
 		<<run repX(-50, "event", _activeLurcher)>>
@@ -55,6 +59,10 @@ You lead your lurcher _activeLurcher.slaveName out on a leash, naked just like t
 	$He's gently masturbating as you bring $him up to the mark, $his enormous clit becoming engorged and stiff. Your fellow competitors and the gathering crowd of spectators @@.green;are fascinated,@@ realizing that $he intends to attempt rape with it.
 	<<run repX(250, "event", _activeLurcher)>>
 	<<set $phallus = "clit">>
+<<elseif _activeLurcher.tail == "sex">>
+	$His spade-tipped pleasure tail is sweeping back and forth and dripping lube, as if $he's already seeking a target for it. It's an unusual instrument for a lurcher, and one that @@.green;fascinates@@ the watching crowd of spectators.
+	<<run repX(250, "event", _activeLurcher)>>
+	<<set $phallus = "tail">>
 <<elseif $seeDicks != 0>>
 	$He's holding a lubricated dildo in one hand, since $he's missing a natural phallus of $his own. This is technically permitted under the rules, but your fellow competitors and the crowd gathering to spectate @@.red;consider it poor form.@@
 	<<run repX(-50, "event", _activeLurcher)>>
diff --git a/src/uncategorized/seCoursingRace.tw b/src/uncategorized/seCoursingRace.tw
index 98314cbc0f1df74eac3b22375f4a8169914dbc33..740908993eac09b6820ce5d3e43dd7ca6c1c45ed 100644
--- a/src/uncategorized/seCoursingRace.tw
+++ b/src/uncategorized/seCoursingRace.tw
@@ -180,6 +180,9 @@ You place your hand on the leash's quick release and <<if canHear(_activeLurcher
 		<<elseif _activeLurcher.skill.combat == 1>>
 			$He parries the attempt with contemptuous ease and catches up to $his new target.
 			<<set _seed = 1>>
+		<<elseif _activeLurcher.tail == "combat">>
+			$He lashes out at $his competitor with $his combat tail; $his rival stumbles in surprise, and $he easily catches up to $his new target.
+			<<set _seed = 1>>
 		<<elseif _activeLurcher.muscles > 30>>
 			$He muscles through the attempt and catches up to $his new target.
 			<<set _seed = 1>>
@@ -307,6 +310,21 @@ You place your hand on the leash's quick release and <<if canHear(_activeLurcher
 		<<else>>
 			pushes $his dildo up the slave's ass. The slave never stops struggling, which is eloquent proof of the slave's undiminished resolve to resist _his2 lot in life. _He2's probably had several dildos pushed up _his2 disobedient asshole, but it seems _he2's determined to learn nothing.
 		<</if>>
+	<<elseif $phallus == "tail">>
+		as _activeLurcher.slaveName
+		<<if $origin == "virgin">>
+			pushes the well-lubricated tip of $his pleasure tail into the slave's virgin ass. The lurcher has to fuck the slave to claim _him2 for you, and $he knows that a virgin pussy is more valuable than a virgin rosebud. $His tail is not too thick and $he uses the lubrication function generously, but the poor slave shrieks with anal pain anyway.
+		<<elseif $origin == "heavily pregnant">>
+			pushes the tip of $his pleasure tail inside the slave's fertile cunt. Desperate to preserve _his2 baby, the slave complies as best _he2 can. Taking the cue, your lurcher caresses _him2 gently as $his flexible tail seeks _his2 g-spot to make _him2 cum.
+		<<elseif $origin == "housewife">>
+			pushes the tip of $his pleasure tail up the slave's ass. A kept _woman2 like _him2 is not likely to be any stranger to sex toys, but being assfucked by a tail is likely a completely novel experience for _him2.
+		<<elseif $origin == "feminized">>
+			pushes the tip of $his pleasure tail up the slave's sissy ass. The slave stiffens with shock. _He2's obviously had quite a variety of things pushed up _his2 girly butthole, but apparently this is _his2 first time being fucked by a tail.
+		<<elseif $origin == "huge balled">>
+			pushes the tip of $his pleasure tail up the slave's ass. The slave stiffens with shock. Regardless of how much experience _he2's had with anal toys, a tail squirming through his bowels and pushing on _his2 prostate must be a novel experience. Playing up the spectacle, _activeLurcher.slaveName massages _his2 balls with both hands, stimulating them until the hare achieves a shameful anal orgasm.
+		<<else>>
+			pushes the tip of $his pleasure tail up the slave's ass. The slave never stops struggling, which is eloquent proof of the slave's undiminished resolve to resist _his2 lot in life. _He2's probably had things pushed up _his2 ass before, but a tail worming its way univited into _his2 bowels is not going to be easily forgotten.
+		<</if>>
 	<<else>>
 		as _activeLurcher.slaveName hesitates over _him2. The lurcher realizes that $he won't be able to get hard. Desperate to avoid failure, $he
 		<<if $origin == "virgin">>
diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw
index 6f249933801e47e74112daf37445a59ecc6acbab..146faf15411cb5ffc34f93957f60033962b5ce2f 100644
--- a/src/uncategorized/spaReport.tw
+++ b/src/uncategorized/spaReport.tw
@@ -283,7 +283,7 @@
 	<<default>>
 		<<set _slave.rules.living = "luxurious">>
 	<</switch>>
-	<<if (_slave.health.condition >= 20) && (_slave.health.tired < 20) && (_slave.trust > 60) && (_slave.devotion > 60) && (_slave.fetish != "mindbroken") && (_slave.sexualFlaw == "none") && (_slave.behavioralFlaw == "none")>>
+	<<if (_slave.health.condition >= 20) && (_slave.health.tired <= 30) && (_slave.trust > 60) && (_slave.devotion > 60) && (_slave.fetish != "mindbroken") && (_slave.sexualFlaw == "none") && (_slave.behavioralFlaw == "none")>>
 		<p>
 			<span class="slave-name">_slave.slaveName</span> is feeling well enough to leave $spaName,
 			<span class="noteworthy">
@@ -334,6 +334,8 @@
 			$He remains in the Spa, as $he is still learning to accept life as a slave.
 		<<elseif (_slave.health.condition < 20)>>
 			$He remains in the Spa, as $he is benefiting from its healing properties.
+		<<elseif (_slave.health.tired > 30)>>
+			$He remains in the Spa, continuing to soak away $his fatigue.
 		<</if>>
 		<br>&nbsp;&nbsp;&nbsp;
 		<<= App.SlaveAssignment.choosesOwnClothes(_slave)>>