diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt
index 6d3f7919b29b27249841bff5feefb612ca1c5b2e..661f625c95c44f77f688aafa71e936caf16016b7 100644
--- a/devNotes/twine JS.txt	
+++ b/devNotes/twine JS.txt	
@@ -5262,7 +5262,7 @@ if(eventSlave.fetish != "mindbroken") {
 			}
 		}
 
-		if canWalk(eventSlave) {
+		if (canWalk(eventSlave)) {
 			if(eventSlave.devotion > 20) {
 				if(eventSlave.trust > -10) {
 					if(eventSlave.ID != State.variables.HeadGirl.ID) {
@@ -6688,7 +6688,7 @@ if(eventSlave.fetish != "mindbroken") {
 			}
 		}
 
-		if canWalk(eventSlave) {
+		if (canWalk(eventSlave)) {
 			if(eventSlave.devotion > 20) {
 				if(eventSlave.trust > -10) {
 					if(eventSlave.ID != State.variables.HeadGirl.ID) {
@@ -9958,6 +9958,459 @@ window.removeJob = function removeJob(slave, assignment) {
 	return r;
 };
 
+/*:: generateGenetics [script]*/
+
+// Generates a child's genetics based off mother and father and returns it as an object to be attached to an ovum
+window.generateGenetics = (function() {
+	"use strict";
+	let genes;
+	let mother;
+	let activeMother;
+	let father;
+	let activeFather;
+	let V
+
+	function generateGenetics(actor1, actor2, x) {
+		V = State.variables;
+		genes = {gender: "XX", name: "blank", mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", geneticFlaws: 0};
+		mother = (actor1 > 0) ? V.genePool.findIndex(function(s) { return s.ID == actor1; }) : V.PC;
+		activeMother = (actor1 > 0) ? V.slaves[actor1] : V.PC;
+		father = (actor2 > 0) ? V.genePool.findIndex(function(s) { return s.ID == actor2; })
+			: (actor2 == -1 && actor1 > 0) ? mother
+			: (actor2 == -6 && actor1 == -1) ? V.PC
+			: 0;
+		activeFather = (father !== 0 && father.ID > 0) ? V.slaves[actor2]
+			: (father !== 0 && father.ID == -1) ? V.PC
+			: 0;
+
+		genes.gender = setGender(father);
+		genes.name = setName(x);
+		genes.mother = setMotherID(actor1);
+		genes.motherName = setMotherName(activeMother);
+		genes.father = setFatherID(actor2);
+		genes.fatherName = setFatherName(father, activeFather);
+		genes.nationality = setNationality(father, mother);
+		genes.skin = setSkin(father, mother);
+		genes.race = setRace(father, mother, actor2);
+		genes.intelligence = setIntelligence(father, mother, activeMother, actor2);
+		genes.face = setFace(father, mother, activeMother, actor2);
+		genes.eyeColor = setEyeColor(father, mother, actor2);
+		genes.hColor = setHColor(father, mother, actor2);
+		genes.underArmHStyle = setUnderArmHStyle(father, mother);
+		genes.pubicHStyle = setPubicHStyle(father, mother);
+		genes.markings = setMarkings(father, mother);
+		genes.sexualFlaw = setSexualFlaw(father, mother);
+		genes.behavioralFlaw = setBehavioralFlaw(father, mother);
+		genes.fetish = setFetish(father, mother);
+	}
+
+	// gender
+	function setGender(father) {
+		let gender;
+		if (V.seeDicksAffectsPregnancy == 1) {
+			gender = Math.floor(Math.random()*100) < V.seeDicks ? 2 : 1;
+		} else if (V.adamPrinciple == 1) {
+			if (father) {
+				if (father.genes == "XX") {
+					gender = "XX";
+				} else {
+					gender = jsEither(["XX", "XY"]);
+				}
+			} else {
+				gender = jsEither(["XX", "XY"]);
+			}
+		} else {
+			gender = jsEither(["XX", "XY"]);
+		}
+		return gender;
+	}
+
+	// name
+	function setName(x) {
+		return "ovum" + x;
+	}
+
+	// motherID
+	function setMotherID(actor1) {
+		return actor1;
+	}
+
+	// motherName
+	function setMotherName(activeMother) {
+		let motherName;
+		if (actor1 == -1) {
+			motherName = activeMother.name;
+			if (activeMother.surname !== 0 && activeMother.surname !== "") { motherName + " " + activeMother.surname; }
+		} else {
+			motherName = activeMother.slaveName;
+			if (activeMother.slaveSurname !== 0 && activeMother.slaveSurname !== "") { motherName + " " + activeMother.slaveSurname; }
+		}
+		return motherName;
+	}
+
+	// fatherID
+	function setFatherID(actor2) {
+		return actor2;
+	}
+
+	// fatherName
+	function setFatherName(father, activeFather) {
+		let fatherName;
+		if (father) {
+			if (father.ID == -1) {
+				fatherName = activeFather.name;
+				if (activeFather.surname !== 0 && activeFather.surname !== "") { fatherName + " " + activeFather.surname; }
+			} else {
+				fatherName = activeFather.slaveName;
+				if (activeFather.slaveSurname !== 0 && activeFather.slaveSurname !== "") { fatherName + " " + activeFather.slaveSurname; }
+			}
+		}
+		return fatherName;
+	}
+
+	// nationality
+	function setNationality(father, mother) {
+		return (!father) ? "Stateless"
+			: (father.nationality == mother.nationality) ? mother.nationality
+			: "Stateless";
+	}
+
+	// race
+	function setRace(father, mother, actor2) {
+		let race;
+		if (father) {
+			race = (mother.origRace == father.origRace) ? mother.origRace
+			: (jsRandom(1,4)) == 4 ? jsEither([father.origRace, mother.origRace])
+			: "mixed race";
+		} else if (actor2 == -2) {
+			if (V.arcologies[0].FSSupremacist != "unset") {
+				race = jsEither([mother.origRace, V.arcologies[0].FSSupremacistRace, V.arcologies[0].FSSupremacistRace]);
+				if (mother.origRace != V.arcologies[0].FSSupremacistRace) {
+					if (jsRandom(1,100) > 50) {
+						race = "mixed race";
+					}
+				}
+			} else {
+				race = mother.origRace;
+			}
+		} else {
+			race = mother.origRace;
+		}
+		return race;
+	}
+
+	//skin
+	function setSkin(father, mother) {
+		let skinToMelanin = {
+			'pure black': 21,
+			ebony: 20,
+			black: 19,
+			'dark brown': 18,
+			brown: 17,
+			'light brown': 16,
+			dark: 15,
+			'dark olive': 14,
+			bronzed: 13,
+			tanned: 12,
+			natural: 11,
+			olive: 10,
+			'light olive': 9,
+			lightened: 8,
+			light: 7,
+			white: 6,
+			fair: 5,
+			'very fair': 4,
+			'extremely fair': 3,
+			pale: 2,
+			'extremely pale': 1,
+			'pure white': 0
+		};
+		let momSkinIndex = mother ? (skinToMelanin[mother.origSkin] || 11) : 7;
+		let dadSkinIndex = father ? (skinToMelanin[father.origSkin] || 11) : 7;
+		let skinIndex = Math.round(Math.random() * (dadSkinIndex - momSkinIndex) + momSkinIndex);
+		return [
+			'pure white',
+			'extremely pale',
+			'pale',
+			'extremely fair',
+			'very fair',
+			'fair',
+			'white',
+			'light',
+			'lightened',
+			'light olive',
+			'olive',
+			'natural',
+			'tanned',
+			'bronzed',
+			'dark olive',
+			'dark',
+			'light brown',
+			'brown',
+			'dark brown',
+			'ebony',
+			'black',
+			'pure black'
+		][skinIndex];
+	};
+
+	// eyeColor
+	function setEyeColor(father, mother, actor2) {
+		let eyeColor;
+		if (father) {
+			if (mother.origEye == father.origEye) {
+				eyeColor = mother.origEye;
+			} else if (mother.origEye == "red" || mother.origEye == "pale red" || mother.origEye == "light red" || mother.origEye == "pale gray" || mother.origEye == "milky white") {
+				eyeColor = father.origEye;
+			} else if (father.origEye == "red" || father.origEye == "pale red" || father.origEye == "light red" || father.origEye == "pale gray" || father.origEye == "milky white") {
+				eyeColor = mother.origEye;
+			} else if (mother.origEye == "blue") {
+				if (jsRandom(1,4) == 2) {
+					eyeColor = mother.origEye;
+				} else {
+					eyeColor = father.origEye;
+				}
+			} else if (father.origEye == "blue") {
+				if (jsRandom(1,4) == 2) {
+					eyeColor = father.origEye;
+				} else {
+					eyeColor = mother.origEye;
+				}
+			} else {
+				eyeColor = jsEither([mother.origEye, father.origEye]);
+			}
+		} else if (actor2 === -2 || actor2 === 0) {
+			eyeColor = jsEither([mother.origEye, "brown", "blue", "brown", "green", "hazel", "green"]);
+		} else {
+			eyeColor = mother.origEye;
+		}
+		return eyeColor;
+	}
+
+	// hColor
+	function setHColor(father, mother, actor2) {
+		let hairColor;
+		if (father) {
+			if (mother.origHColor == father.origHColor) {
+				hairColor = mother.origHColor;
+			} else if (mother.origHColor == "white") {
+				hairColor = jsRandom(1,100) == 69 ? mother.origHColor : father.origHColor;
+			} else if (father.origHColor == "white") {
+				hairColor = jsRandom(1,100) == 69 ? father.origHColor : mother.origHColor;
+			} else if (mother.origHColor == "black") {
+				hairColor = jsEither([mother.origHColor, mother.origHColor, mother.origHColor, mother.origHColor, mother.origHColor, mother.origHColor, mother.origHColor, father.origHColor]);
+			} else if (father.origHColor == "black") {
+				hairColor = jsEither([father.origHColor, father.origHColor, father.origHColor, father.origHColor, father.origHColor, father.origHColor, father.origHColor, mother.origHColor]);
+			} else if (mother.origHColor == "brown") {
+				hairColor = jsEither([mother.origHColor, mother.origHColor, mother.origHColor, father.origHColor]);
+			} else if (father.origHColor == "brown") {
+				hairColor = jsEither([father.origHColor, father.origHColor, father.origHColor, mother.origHColor]);
+			} else {
+				hairColor = jsEither([mother.origHColor, father.origHColor]);
+			}
+		} else if (actor2 === -2 || actor2 === 0) {
+			hairColor = jsEither([mother.origHColor, "brown", "blonde", "black", "brown", "black", "brown", "black"]);
+		} else {
+			hairColor = mother.origHColor;
+		}
+		return hairColor;
+	}
+
+	// underArmHairStyle
+	function setUnderArmHStyle(father, mother) {
+		let hair;
+		if (father) {
+			if (mother.underArmHStyle == "hairless" && father.underArmHStyle == "hairless") {
+				hair = "hairless";
+			} else if (mother.underArmHStyle == "hairless" || father.underArmHStyle == "hairless") {
+				hair = (jsRandom(1,5) == 3) ? "hairless" : jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+			} else {
+				hair = jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+			}
+		} else if (mother.underArmHStyle == "hairless") {
+			hair = (jsRandom(1,5) == 3) ? "hairless" : jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+		} else {
+			hair = jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+		}
+		return hair;
+	}
+	
+	// pubicHairStyle
+	function setPubicHStyle(father, mother) {
+		let hair;
+		if (father) {
+			if (mother.pubicHStyle == "hairless" && father.pubicHStyle == "hairless") {
+				hair = "hairless";
+			} else if (mother.pubicHStyle == "hairless" || father.pubicHStyle == "hairless") {
+				hair = (jsRandom(1,5) == 3) ? "hairless" : jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+			} else {
+				hair = jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+			}
+		} else if (mother.pubicHStyle == "hairless") {
+			hair = (jsRandom(1,5) == 3) ? "hairless" : jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+		} else {
+			hair = jsEither(["bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "bushy", "hairless"]);
+		}
+		return hair;
+	}
+
+	// markings
+	function setMarkings(father, mother) {
+		let markings;
+		if (jsRandom(1,8) == 1) {
+			markings = jsEither(["beauty mark", "birthmark"]);
+		} else {
+			markings = "none";
+		}
+		if (markings == "none") {
+			if (father) {
+				markings = jsEither([mother.markings, father.markings, "none", "none"]);
+			} else {
+				markings = jsEither([mother.markings, mother.markings, "none", "none"]);
+			}
+		}
+		return markings;
+	}
+	
+	// sexualFlaw
+	function setSexualFlaw(father, mother) {
+		let flaw;
+		if (father) {
+			flaw = jsEither([mother.sexualFlaw, father.sexualFlaw, "none", "none"]);
+		} else {
+			flaw = jsEither([mother.sexualFlaw, mother.sexualFlaw, "none", "none"]);
+		}
+		return flaw;
+	}
+
+	// behavioralFlaw
+	function setBehavioralFlaw(father, mother) {
+		let flaw;
+		if (father) {
+			flaw = jsEither([mother.behavioralFlaw, father.behavioralFlaw, "none", "none"]);
+		} else {
+			flaw = jsEither([mother.behavioralFlaw, mother.behavioralFlaw, "none", "none"]);
+		}
+		return flaw;
+	}
+	
+	// fetish
+	function setFetish(father, mother) {
+		let fetish;
+		if (father) {
+			fetish = jsEither(["none", "none", "none", "none", "none", father.fetish, mother.fetish]);
+		} else {
+			fetish = jsEither(["none", "none", "none", "none", "none", mother.fetish, mother.fetish]);
+		}
+		if (fetish == "mindbroken") { fetish = "none"; }
+		return fetish;
+	}
+
+	//intelligence
+	function setIntelligence(father, mother, activeMother, actor2) {
+		let smarts;
+		if (mother.ID == -1) {
+			if (actor2 == -1) {
+				smarts = jsRandom(90,100);
+			} else if (father) {
+				if (father.intelligence < mother.intelligence) {
+					smarts = jsRandom(father.intelligence, mother.intelligence);
+				} else {
+					smarts = jsRandom(mother.intelligence, father.intelligence);
+				}
+				if (smarts <= 50) {
+					smarts += 30;
+				}
+			} else {
+				smarts = jsRandom(50,100);
+			}
+		} else if (father) {
+			if (father.intelligence < mother.intelligence) {
+				smarts = jsRandom(father.intelligence, mother.intelligence);
+			} else {
+				smarts = jsRandom(mother.intelligence, father.intelligence);
+			}
+			if (activeMother.breedingMark == 1 && smarts <= 50) {
+				smarts = jsRandom(60,100);
+			}
+		} else {
+			smarts = mother.inelligence;
+		}
+		if (V.inbreeding == 1) {
+			if (mother.ID != -1) {
+				if (father && father.ID == -1 && activeMother.breedingMark != 1) {
+					if (smarts >= -95 && jsRandom(1,100) < 40) {
+						smarts -= jsRandom(1,10);
+						if (smarts >= -95 && jsRandom(1,100) < 20) {
+							smarts -= jsRandom(1,5);
+						}
+					}
+				} else {
+					if (smarts >= -95 && jsRandom(1,100) < 50) {
+						smarts -= jsRandom(1,15);
+						if (smarts >= -95 && jsRandom(1,100) < 30) {
+							smarts -= jsRandom(1,15);
+						}
+					}
+				}
+			}
+		}
+		return Math.clamp(smarts, -100, 100);
+	}
+
+	//face
+	function setFace(father, mother, activeMother, actor2) {
+		let face;
+		if (mother.ID == -1) {
+			if (actor2 == -1) {
+				face = jsRandom(90,100);
+			} else if (father) {
+				if (father.face < mother.face) {
+					face = jsRandom(father.face, mother.face);
+				} else {
+					face = jsRandom(mother.face, father.face);
+				}
+				if (face <= 40) {
+					face += jsRandom(5,20);
+				}
+			} else {
+				face = jsRandom(20,100);
+			}
+		} else if (father) {
+			if (father.intelligence < mother.intelligence) {
+				face = jsRandom(father.intelligence, mother.intelligence);
+			} else {
+				face = jsRandom(mother.intelligence, father.intelligence);
+			}
+			if (activeMother.breedingMark == 1 && face < 60) {
+				face = jsRandom(60,100);
+			}
+		} else {
+			face = mother.inelligence;
+		}
+		if (V.inbreeding == 1) {
+			if (mother.ID != -1) {
+				if (father && father.ID == -1 && activeMother.breedingMark != 1) {
+					if (face > -100 && jsRandom(1,100) > 60) {
+						face -= jsRandom(2,20);
+					}
+				} else {
+					if (face > -100 && jsRandom(1,100) < 50) {
+						face -= jsRandom(1,15);
+						if (face >= -95 && jsRandom(1,100) < 30) {
+							face -= jsRandom(5,20);
+						}
+					}
+				}
+			}
+		}
+		return Math.clamp(face, -100, 100);
+	}
+
+	return genes;
+
+})();
+
 /*:: wombJS [script]*/
 
 /*
diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw
index f42636dd19b1832426dbaac76c201b633a72b672..5615d4fbff2188866e480a15c86d7be8ea69cd56 100644
--- a/src/init/setupVars.tw
+++ b/src/init/setupVars.tw
@@ -312,7 +312,7 @@
 
 <<set setup.milkmaidCareers = ["a cowgirl", "a dairy worker", "a farmer's daughter", "a milkmaid", "a shepherd", "a veterinarian"]>>
 
-<<set setup.farmerCareers = ["a beekeeper", "a bullfighter""a farmer", "a rancher", "a farmhand", "a rodeo star", "a zookeeper"]>>
+<<set setup.farmerCareers = ["a beekeeper", "a bullfighter", "a farmer", "a rancher", "a farmhand", "a rodeo star", "a zookeeper"]>>
 
 <<set setup.stewardessCareers = ["a barista", "a bartender", "a brewer", "a bureaucrat", "a caregiver", "a charity worker", "a club treasurer", "a concierge", "a critic", "a housekeeper", "a housesitter", "a lemonade stand operator", "a personal assistant", "a professional bartender", "a secretary", "a wedding planner", "an air hostess", "an architect", "an editor", "an estate agent", "an investor", "an office worker"]>>
 
diff --git a/src/js/eventSelectionJS.tw b/src/js/eventSelectionJS.tw
index 1202a6281125802f7f7980de2a3dbfa886a1882d..227a9cd11a65d619aabc0d2ed84d4d6c26d237fc 100644
--- a/src/js/eventSelectionJS.tw
+++ b/src/js/eventSelectionJS.tw
@@ -988,7 +988,7 @@ if(eventSlave.fetish != "mindbroken") {
 			}
 		}
 
-		if canWalk(eventSlave) {
+		if (canWalk(eventSlave)) {
 			if(eventSlave.devotion > 20) {
 				if(eventSlave.trust > -10) {
 					if(eventSlave.ID != State.variables.HeadGirl.ID) {
@@ -2414,7 +2414,7 @@ if(eventSlave.fetish != "mindbroken") {
 			}
 		}
 
-		if canWalk(eventSlave) {
+		if (canWalk(eventSlave)) {
 			if(eventSlave.devotion > 20) {
 				if(eventSlave.trust > -10) {
 					if(eventSlave.ID != State.variables.HeadGirl.ID) {
diff --git a/src/js/generateGenetics.tw b/src/js/generateGenetics.tw
index e1bbb66b748f1cdf1f84269f4831541d73de5f61..41f33d1f27003c46652cb64788d06ef42b80d672 100644
--- a/src/js/generateGenetics.tw
+++ b/src/js/generateGenetics.tw
@@ -1,7 +1,7 @@
 :: generateGenetics [script]
 
 // Generates a child's genetics based off mother and father and returns it as an object to be attached to an ovum
-window.generateGenetics =  = (function() {
+window.generateGenetics = (function() {
 	"use strict";
 	let genes;
 	let mother;
@@ -14,12 +14,12 @@ window.generateGenetics =  = (function() {
 		V = State.variables;
 		genes = {gender: "XX", name: "blank", mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", geneticFlaws: 0};
 		mother = (actor1 > 0) ? V.genePool.findIndex(function(s) { return s.ID == actor1; }) : V.PC;
-		activeMother = (mother.ID > 0) ? V.slaves.findIndex(function(s) { return s.ID == mother.ID; }) : V.PC;
+		activeMother = (actor1 > 0) ? V.slaves[actor1] : V.PC;
 		father = (actor2 > 0) ? V.genePool.findIndex(function(s) { return s.ID == actor2; })
 			: (actor2 == -1 && actor1 > 0) ? mother
 			: (actor2 == -6 && actor1 == -1) ? V.PC
 			: 0;
-		activeFather = (father !== 0 && father.ID > 0) ? V.slaves.findIndex(function(s) { return s.ID == father.ID; })
+		activeFather = (father !== 0 && father.ID > 0) ? V.slaves[actor2]
 			: (father !== 0 && father.ID == -1) ? V.PC
 			: 0;
 
@@ -140,7 +140,7 @@ window.generateGenetics =  = (function() {
 	}
 
 	//skin
-	window.setSkin = function(father, mother) {
+	function setSkin(father, mother) {
 		let skinToMelanin = {
 			'pure black': 21,
 			ebony: 20,