diff --git a/src/002-config/fc-js-init.js b/src/002-config/fc-js-init.js
index e5d890dc402ac75a2223a58ac19e80e1f972384d..8b8a2bec36ccca9bb2a7a4a1a85b21341728e799 100644
--- a/src/002-config/fc-js-init.js
+++ b/src/002-config/fc-js-init.js
@@ -9,5 +9,6 @@ var App = window.App || {};
 
 App.Debug = {};
 App.Entity = {};
+App.Entity.Utils = {};
 App.UI = {};
 App.Utils = {};
diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js
index 47fbacfcd0173d11a1f0cb87639248be00bd6c58..2608876e7c936177d7b32f55d7136ea364319833 100644
--- a/src/js/datatypeCleanupJS.js
+++ b/src/js/datatypeCleanupJS.js
@@ -1,4 +1,21 @@
 /* eslint-disable no-undef */
+/**
+ * Applies data scheme updates to the slave object
+ *
+ * This function only handles data scheme changes (attribute renaming, other reorganzations)
+ * and in general pays no attention to the property values unless they need to be changed due
+ * to the schema change.
+ */
+App.Entity.Utils.SlaveDataSchemeCleanup = (function () {
+	"use strict";
+	return SlaveDataSchemeCleanup;
+
+	/** @param {App.Entity.SlaveState} slave */
+	function SlaveDataSchemeCleanup(slave) { // eslint-disable-line no-unused-vars
+
+	}
+})();
+
 /*
 	This function does not ensure values make sense. For example, it does not fix weird relations/relationships/rivalries/pregnancies/prosthetics.
 	It only makes sure most datatypes are correct, and sets to default if not. Number values are clamped to the correct bounds.
@@ -1662,3 +1679,69 @@ window.FacilityDatatypeCleanup = (function() {
 		}
 	}
 })();
+
+
+/**
+ * Cleans up a slave record assuming it is used for the gene pool.
+ *
+ * It removes all the unneded for the gene pool attributes.
+ * @todo remove after refactoring the slave state class
+ */
+App.Entity.Utils.GenePoolRecordCleanup = (function () {
+	"use strict";
+	return GenePoolRecordCleanup;
+
+	/** @param {App.Entity.SlaveState} slave */
+	function GenePoolRecordCleanup(slave) {
+		App.Entity.Utils.SlaveDataSchemeCleanup(slave);
+
+		// the following attributes are unneeded for gene pool records
+		[
+			"counters", "custom", "porn",
+			"prestige", "pornFeed", "pornFame", "pornFameSpending", "pornPrestige", "pornPrestigeDesc", "prestigeDesc",
+			"recruiter", "relation", "relationTarget", "subTarget", "relationship", "relationshipTarget", "rivalry", "rivalryTarget",
+			"pronoun", "possessive", "possessivePronoun", "objectReflexive", "object", "noun",
+			"weekAcquired", "HGExclude",
+			"daughters", "origin",
+			"canRecruit",
+			"choosesOwnAssignment", "assignment", "assignmentVisible",
+			"sentence", "training", "toyHole",
+			"indenture", "indentureRestrictions",
+			"minorInjury",
+			"oldTrust", "oldDevotion",
+			"eyewear", "earwear",
+			"preg", "pregSource", "pregType", "pregAdaptation", "labor",
+			"bellyAccessory",
+			"clitSetting",
+			"livingRules", "speechRules", "releaseRules", "relationshipRules", "lactationRules",
+			"standardPunishment", "standardReward",
+			"useRulesAssistant",
+			"diet", "dietCum", "dietMilk",
+			"tired",
+			"drugs", "curatives", "aphrodisiacs",
+			"choosesOwnClothes", "clothes", "collar", "shoes",
+			"makeup", "nails",
+			"vaginalAccessory", "dickAccessory", "legAccessory",
+			"buttplug", "buttplugAttachment",
+			"fetishKnown",
+			"rudeTitle",
+			"currentRules",
+			"induce",
+			"mpreg",
+			"inflation", "inflationType", "inflationMethod", "milkSource", "cumSource",
+			"burst",
+			"pregKnown", "pregWeek",
+			"belly", "bellyPreg", "bellyFluid", "bellyImplant", "bellySag", "bellySagPreg", "bellyPain",
+			"cervixImplant",
+			"birthsTotal",
+			"scars",
+			"choosesOwnChastity",
+			"pregControl",
+			"readyLimbs",
+			"death",
+			"onDiet",
+			"prematureBirth",
+			"slaveCost"
+		].forEach((s) => delete slave[s]);
+	}
+})();
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index f109f21dcacaac44fee2dd98694713b229de5152..08b55c84b27cfcf8e981f56a9e0c406129f3870f 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -3338,15 +3338,46 @@ Setting missing slave variables:
 	<</if>>
 <</if>>
 
-<<run SlaveDatatypeCleanup(_Slave)>>
+<<set $slaves[_bci] = _Slave>>
+<</for>>
 
-<<set _leaderIdx = $leaders.findIndex(function(s) { return s.ID === _Slave.ID; })>>
-<<if _leaderIdx !== -1>>
-	<<set $leaders[_leaderIdx] = _Slave>>
+<br> Checking and fixing slave records...
+<<for _Slave range $slaves>>
+	<<run App.Entity.Utils.SlaveDataSchemeCleanup(_Slave)>>
+	<<run SlaveDatatypeCleanup(_Slave)>>
+	<<set _leaderIdx = $leaders.findIndex(function(s) { return s.ID === _Slave.ID; })>>
+	<<if _leaderIdx !== -1>>
+		<<set $leaders[_leaderIdx] = _Slave>>
+	<</if>>
+<</for>>
+Done<br>
+
+<<if $tanks.length > 0>>
+	Checking and fixing records for incubator tanks...
+	<<for _Slave range $tanks>>
+		<<run App.Entity.Utils.SlaveDataSchemeCleanup(_Slave)>>
+		<<run SlaveDatatypeCleanup(_Slave)>>
+	<</for>>
+	Done<br>
 <</if>>
 
-<<set $slaves[_bci] = _Slave>>
-<</for>>
+<<if $cribs.length > 0>>
+	Checking and fixing records for nursery cribs...
+	<<for _Slave range $cribs>>
+		<<run App.Entity.Utils.SlaveDataSchemeCleanup(_Slave)>>
+		<<run ChildDatatypeCleanup(_Slave)>>
+	<</for>>
+	Done<br>
+<</if>>
+
+<<if $heroSlaves.length > 0>>
+	Checking and fixing special slave records...
+	<<for _Slave range $heroSlaves>>
+		<<run App.Entity.Utils.SlaveDataSchemeCleanup(_Slave)>>
+		/% No SlaveDatatypeCleanup() call as hero slaves are not SlaveState objects %/
+	<</for>>
+	Done<br>
+<</if>>
 
 <<set $slavesOriginal = []>> /* not used by pregmod */
 
@@ -3415,6 +3446,7 @@ Setting missing slave variables:
 		<</if>>
 	<</if>>
 
+	<<run App.Entity.Utils.GenePoolRecordCleanup(_Slave)>>
 	<<set $genePool[_bci] = _Slave>>
 <</for>>
 
diff --git a/src/uncategorized/reRelativeRecruiter.tw b/src/uncategorized/reRelativeRecruiter.tw
index a7404b9b0374480761e3f22bc0836119b6cf8dda..347f7687f4c05bcadfc90bdc72c5f7e98e7a96a9 100644
--- a/src/uncategorized/reRelativeRecruiter.tw
+++ b/src/uncategorized/reRelativeRecruiter.tw
@@ -7,6 +7,7 @@
 <<set $eventSlave = getSlave($recruiterSlave)>>
 <<set $activeSlave = BaseSlave()>>
 <<set $activeSlave = Object.assign($activeSlave, clone($genePool.find(function(o) { return o.ID == $eventSlave.ID; })))>>
+<<run generatePronouns($activeSlave)>>
 
 <span id="artFrame">
 /* 000-250-006 */
@@ -852,7 +853,9 @@ You look up the _relationType. _He2 costs <<print cashFormat($slaveCost)>>, a ba
 <<set $j = $genePool.findIndex(function(o) { return o.ID == $slaves[$i].ID; })>>
 
 <<set $eventSlave = $slaves[$i]>>
-<<set $activeSlave = clone($genePool[$j])>>
+<<set $activeSlave = BaseSlave()>>
+<<set $activeSlave = Object.assign($activeSlave, clone($genePool[$j]))>>
+<<run generatePronouns($activeSlave)>>
 <<run Enunciate($eventSlave)>>
 
 /* 000-250-006 */
@@ -1198,4 +1201,3 @@ You look up the $activeSlave.relation. _He2 costs <<print cashFormat($slaveCost)
 </span>
 
 <</if>> /* close extended family mode */
-