diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index c6cdac06ce129c3c1b327e12c92bcddda968d3f3..fa59d1c1f69730334c3b71e249532c596cb6bf02 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -1986,9 +1986,6 @@ App.Update.oldVersions = function(node) {
 		if (typeof V.PC.markings === "undefined") {
 			V.PC.markings = "none";
 		}
-		if (typeof V.PC.pronoun === "undefined") {
-			generatePlayerPronouns(V.PC);
-		}
 		if (typeof V.PC.pregKnown === "undefined") {
 			if (V.PC.preg > 0) {
 				V.PC.pregKnown = 1;
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index dbccd3d3c04dc8082f0e7f17414d63de36f25648..ef2e3672e016d15606c6f87ed5358cbe2cff31fb 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -1168,8 +1168,10 @@ globalThis.PCDatatypeCleanup = (function PCDatatypeCleanup() {
 		PCRulesDatatypeCleanup(PC);
 		PCCustomStatsDatatypeCleanup(PC);
 		PCMiscellaneousDatatypeCleanup(PC);
-		App.Entity.Utils.migratePronouns(PC);
-		generatePlayerPronouns(PC);
+		if (typeof PC.pronoun !== "number") {
+			App.Entity.Utils.migratePronouns(PC);
+			generatePlayerPronouns(PC);
+		}
 	}
 
 	/**
diff --git a/src/events/RE/reRelativeRecruiter.js b/src/events/RE/reRelativeRecruiter.js
index 94cbdc5b6408c75ff3b75d55a95db641599a42a9..8d2e6a2ec87ec1a3d463bf223d6dbfe15bf9ab6b 100644
--- a/src/events/RE/reRelativeRecruiter.js
+++ b/src/events/RE/reRelativeRecruiter.js
@@ -589,8 +589,9 @@ App.Events.RERelativeRecruiter = class RERelativeRecruiter extends App.Events.Ba
 			const origSlave = BaseSlave();
 			const genepoolRec = V.genePool.find(s => s.ID === that.actors[0]);
 			App.Entity.Utils.GenePoolRecordCleanup(genepoolRec);
-			Object.assign(origSlave, genepoolRec);
+			deepAssign(origSlave, genepoolRec);
 			updateGPRecordAgeFromEventSlave(origSlave);
+			generatePronouns(origSlave);
 
 			const newSlave = generateRelatedSlave(origSlave, that.params.relative);
 			clearMods(newSlave);
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 406545b0ee52099bdcb7f60f293ed94ca932e42c..b8cf1d6b39b9fa3b0902d094109980f4412ebdd7 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -525,7 +525,7 @@ App.UI.Player.design = function() {
 		if (V.PC.title === 1) {
 			r.push(`masculine <strong>Master</strong>`);
 		} else {
-			r.push(`feminine ''Mistress'`);
+			r.push(`feminine <strong>Mistress</strong>`);
 		}
 		r.push(`and everyone that matters calls you	${PlayerName()}.`);
 
diff --git a/src/interaction/siCustom.js b/src/interaction/siCustom.js
index 3cfde0243b1b2a4cbc9e31186f432dce1217d3b9..797495faef7e3444db6a3f307e9fa19fc345e886 100644
--- a/src/interaction/siCustom.js
+++ b/src/interaction/siCustom.js
@@ -22,7 +22,8 @@ App.UI.SlaveInteract.custom = function(slave, refresh) {
 	App.UI.DOM.appendNewElement("h3", el, `Names`);
 	el.append(
 		playerTitle(),
-		slaveFullName()
+		slaveFullName(),
+		pronouns()
 	);
 
 	App.UI.DOM.appendNewElement("h3", el, `Description`);
@@ -446,6 +447,23 @@ App.UI.SlaveInteract.custom = function(slave, refresh) {
 		}
 	}
 
+	function pronouns() {
+		const pnNode = new DocumentFragment();
+
+		const grp = new App.UI.OptionsGroup(); // note that OptionsGroup's default refresh will reload the entire page, which is desirable in this case
+		grp.addOption("Pronouns to use:", "pronoun", slave)
+			.addValue("Feminine", App.Data.Pronouns.Kind.female)
+			.addValue("Masculine", App.Data.Pronouns.Kind.male)
+			.addValue("Neuter/Toy", App.Data.Pronouns.Kind.neutral)
+			// .addValue("Epicene/Plural", App.Data.Pronouns.Kind.epicene) - TODO: epicene pronouns have verb tense problems ("they is...")
+			// .addValue("Custom", App.Data.Pronouns.Kind.custom) - TODO: custom pronoun mechanism is incomplete/broken right now
+			.addComment(`${slave.slaveName} will be addressed as "${he}/${him}."`);
+
+		pnNode.append(grp.render());
+
+		return pnNode;
+	}
+
 	function hair() {
 		let hairNode = new DocumentFragment();
 		hairNode.appendChild(hairStyle());
diff --git a/src/player/managePersonalAffairs.js b/src/player/managePersonalAffairs.js
index 94142b5de8ad06136adddd3661dcb53b5813ac71..c8f8c97c3cd6505036901c924e690bac25d4e122 100644
--- a/src/player/managePersonalAffairs.js
+++ b/src/player/managePersonalAffairs.js
@@ -137,6 +137,7 @@ App.UI.managePersonalAffairs = function() {
 		const textBoxDiv = document.createElement("div");
 		const renamePlayerDiv = document.createElement("div");
 		const newNameDiv = document.createElement("div");
+		const pronounsDiv = document.createElement("div");
 		const rumorsDiv = document.createElement("div");
 		const familyDiv = document.createElement("div");
 		const pregnancyDiv = document.createElement("div");
@@ -153,6 +154,7 @@ App.UI.managePersonalAffairs = function() {
 			`On formal occasions, you are announced as ${PCTitle()}. By slaves, however, you prefer to be called ${properMaster()}.`,
 			customTitle(),
 			renamePlayer(),
+			// pronouns(), // TODO: waiting for 5.0 per pregmodder
 			rumors(),
 			family(),
 		);
@@ -240,6 +242,20 @@ App.UI.managePersonalAffairs = function() {
 			return customTitleDiv;
 		}
 
+		// TODO: waiting for 5.0 per pregmodder
+		function pronouns() {
+			const options = new App.UI.OptionsGroup();
+			const {he, him} = getPronouns(V.PC);
+			options.addOption("", "pronoun", V.PC)
+				.addValue("She/Her", App.Data.Pronouns.Kind.female)
+				.addValue("He/Him", App.Data.Pronouns.Kind.male)
+				.addValue("It", App.Data.Pronouns.Kind.neutral);
+			//	.addValue("They/Them", App.Data.Pronouns.Kind.epicene) - TODO: epicene pronouns have verb tense problems ("they is...")
+			//	.addValue("Custom", App.Data.Pronouns.Kind.custom) - TODO: custom pronoun mechanism is incomplete/broken right now
+			pronounsDiv.append("Your preferred pronouns are ", App.UI.DOM.linkReplace(`${he}/${him}.`, options.render()));
+			return pronounsDiv;
+		}
+
 		function renamePlayer() {
 			newNameDiv.append(
 				`New name: `,