diff --git a/src/cheats/cheatEditActor.js b/src/cheats/cheatEditActor.js
index bbbb1a6c394bf0e649fdd570a0509ed9bd6705a1..fc7e13ee63da1d1a23d48e4b995f7f965520b75d 100644
--- a/src/cheats/cheatEditActor.js
+++ b/src/cheats/cheatEditActor.js
@@ -84,14 +84,14 @@ App.UI.Cheat.cheatEditActor = function(actor) {
 		tabBar.addTab("Family", "family", App.Intro.editFamily(actor, true));
 	}
 	if (slave || citizen) {
-		tabBar.addTab("Body Mods", "body-mods", App.UI.bodyModification(actor, true));
+		tabBar.addTab("Body Mods", "body-mods", App.UI.bodyModification(slave ?? citizen, true));
 	}
 	if (player){
-		tabBar.addTab("Salon", "salon", App.UI.playerSalon(actor, true));
+		tabBar.addTab("Salon", "salon", App.UI.playerSalon(player, true));
 	} else if (!infant && !tankSlave) {
 		tabBar.addTab("Salon", "salon", App.UI.salon(actor, true));
 	}
-	
+
 	if (V.seeExtreme) {
 		tabBar.addTab("Extreme", "extreme", extreme());
 	}
@@ -282,9 +282,9 @@ App.UI.Cheat.cheatEditActor = function(actor) {
 		}
 
 		if (slave) {
-			const origin = App.StartingGirls.playerOrigin(actor).preview;
+			const origin = App.StartingGirls.playerOrigin(slave).preview;
 			options.addOption("Origin story", "origin", actor)
-				.customButton("Customize", () => App.StartingGirls.playerOrigin(actor).apply(), "")
+				.customButton("Customize", () => App.StartingGirls.playerOrigin(slave).apply(), "")
 				.showTextBox()
 				.addComment(origin === "" ? "No origin available" : pronounsForSlaveProp(actor, origin));
 		}
@@ -1277,7 +1277,6 @@ App.UI.Cheat.cheatEditActor = function(actor) {
 				option.showTextBox();
 
 				options.addOption("Births", "birthsTotal", actor.counter).showTextBox().addComment(`Absolute total number of births, not just in current game.`);
-				options.addOption("Number of babies", "pregType", actor).showTextBox();
 				if (V.seeHyperPreg && V.seeExtreme && actor.broodmother === 1) {
 					options.addOption("Babies produced per week", "broodmotherFetuses", actor).showTextBox();
 				}
@@ -1309,14 +1308,9 @@ App.UI.Cheat.cheatEditActor = function(actor) {
 						]);
 				}
 			}
+			App.Interact.ActorEdit.fetusFatherSelector(actor, options, cheat);
+			App.Interact.ActorEdit.fetusCount(actor, options);
 
-			if (actor.preg > 0) {
-				option = options.addOption("Father of child", "pregSource", actor);
-				if (canBreed(V.PC, actor)) {
-					option.addValueList([["Your child", -1], ["Not yours", 0]]);
-				}
-				option.showTextBox().addComment("Use slave's ID");
-			}
 			options.addOption("Breeding mark", "breedingMark", actor)
 				.addValue("No", 0).off()
 				.addValue("Yes", 1).on();
@@ -2297,3 +2291,112 @@ App.UI.Cheat.cheatEditActor = function(actor) {
 		}
 	}
 };
+
+// TODO: move code shared by starting player editor, starting girls editor, and/or the cheat actor editor to here
+App.Interact.ActorEdit = {};
+
+/**
+ * @param {FC.HumanState} actor
+ * @param {InstanceType<App.UI.OptionsGroup>} options
+ */
+App.Interact.ActorEdit.fetusCount = (actor, options) => {
+	if (actor.preg > 0) {
+		options.addOption("Number of babies in their womb", "a", {a: actor.pregType})
+			.showTextBox()
+			.addGlobalCallback((count) => {
+				let change = count - actor.pregType;
+				actor.pregType = count;
+				if (change > 0) {
+					WombImpregnate(actor, change, actor.pregSource, 0);
+				} else if (change < 0) {
+					while (change < 0) {
+						change++;
+						WombRemoveFetus(actor, actor.womb.length -1);
+					}
+				}
+			}).addComment(`Setting this number to less than it already is will remove fetuses.`);
+	}
+};
+
+/**
+ * @param {FC.HumanState} actor
+ * @param {InstanceType<App.UI.OptionsGroup>} options
+ * @param {boolean} [cheat]
+ */
+App.Interact.ActorEdit.fetusFatherSelector = (actor, options, cheat=(V.cheatMode === 1)) => {
+	let option;
+	if (actor.preg > 0) {
+		// pregSource
+		option = options.addOption(`Set the father of their future children to`, "a", {a: actor.pregSource});
+		if (canBreed(V.PC, actor)) {
+			option.addValue(`Yourself`, V.PC.ID);
+		}
+		if (canBreed(actor, actor)) {
+			option.addValue(`Themself`, actor.ID);
+		}
+		option.addValueList([
+			["An unknown source", 0],
+			["Another arcology's owner", -4],
+			["A citizen", -2],
+			["An unknown rapist", -10],
+		]);
+		if (isPCCareerInCategory("servant")) {
+			option.addValue("Your former master", -3);
+		}
+		if (isPCCareerInCategory("escort")) {
+			option.addValue("One of your clients", -5);
+		}
+		getSlaves().forEach((s) => {
+			if (s.ID !== actor.ID && canBreed(s, actor)) {
+				option.addValue(SlaveFullName(s), s.ID);
+			}
+		});
+		option.pulldown();
+		option.addGlobalCallback(
+			/** @param {FC.HumanID} fatherID */
+			(fatherID) => {
+				actor.pregSource = fatherID;
+			}
+		);
+		if (cheat) {
+			option.showTextBox();
+		}
+
+		// existing children
+		option = options.addOption(`Set the father of their existing child${actor.womb.length > 1 ? "ren" : ""} to`, "a", {a: -10532052305});
+		option.addValue(`Don't change`, -10532052305);
+		if (canBreed(V.PC, actor)) {
+			option.addValue(`Yourself`, V.PC.ID);
+		}
+		if (canBreed(actor, actor)) {
+			option.addValue(`Themself`, actor.ID);
+		}
+		option.addValueList([
+			["An unknown source", 0],
+			["Another arcology's owner", -4],
+			["A citizen", -2],
+			["An unknown rapist", -10],
+		]);
+		if (isPCCareerInCategory("servant")) {
+			option.addValue("Your former master", -3);
+		}
+		if (isPCCareerInCategory("escort")) {
+			option.addValue("One of your clients", -5);
+		}
+		getSlaves().forEach((s) => {
+			if (s.ID !== actor.ID && canBreed(s, actor)) {
+				option.addValue(SlaveFullName(s), s.ID);
+			}
+		});
+		option.pulldown();
+		option.addGlobalCallback(
+			/** @param {FC.HumanID} fatherID */
+			(fatherID) => {
+				WombForceFatherID(actor, fatherID);
+			}
+		);
+		if (cheat) {
+			option.showTextBox();
+		}
+	}
+};
diff --git a/src/js/wombJS.js b/src/js/wombJS.js
index 4f2225c617209bef8713a0533564284d361c8570..be4424002039601c594c0a50adaa40fb68db59f3 100644
--- a/src/js/wombJS.js
+++ b/src/js/wombJS.js
@@ -526,10 +526,6 @@ globalThis.WombNormalizePreg = function(mother) {
 			mother.preg = 0.1;
 		}
 
-		if (mother.pregSource !== 0) {
-			mother.pregSource = 0;
-		}
-
 		if (mother.pregWeek > 0) {
 			mother.pregWeek = 0;
 		}
@@ -558,7 +554,6 @@ globalThis.WombNormalizePreg = function(mother) {
 		}
 
 		mother.pregType = mother.womb.length;
-		mother.pregSource = mother.womb[0].fatherID;
 	} else if (mother.womb.length === 0 && mother.broodmother < 1) {
 		// not broodmother
 		// console.log("preg fixing");
@@ -569,10 +564,6 @@ globalThis.WombNormalizePreg = function(mother) {
 			mother.preg = 0;
 		}
 
-		if (mother.pregSource !== 0) {
-			mother.pregSource = 0;
-		}
-
 		// We can't properly set postpartum here,
 		// but can normalize obvious error with forgotten property.
 		if (mother.pregWeek > 0) {
diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js
index 2f8d9e377f719a0c8d0f1e7382bdda5528c87487..32afd187863367aee5742ccae9dfafa218223683 100644
--- a/src/npc/startingGirls/startingGirls.js
+++ b/src/npc/startingGirls/startingGirls.js
@@ -1648,14 +1648,8 @@ App.StartingGirls.lower = function(slave, cheat = false) {
 					["Asexual", "asexual"],
 				]);
 		}
-
-		option = options.addOption("Father of child", "pregSource", slave);
-		if (V.PC.dick > 0 && slave.preg > 0) {
-			option.addValueList([["Your child", -1], ["Not yours", 0]]);
-		}
-		if (cheat) {
-			option.showTextBox().addComment("Use slave's ID");
-		}
+		App.Interact.ActorEdit.fetusFatherSelector(slave, options, cheat);
+		App.Interact.ActorEdit.fetusCount(slave, options);
 	}
 
 	if (V.seeDicks !== 0 || V.makeDicks === 1) {