diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index 9d28de2862986324e9ccfc76d65cb7f7e75074b3..7abdece0982c0e665d5e1437fe7edc2fb4e5ef89 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -2,6 +2,15 @@
 
 0.10.7.1-1.4.x
 
+	12/21/2018
+
+	1
+	-enabled first run of cloning in cheatmode (slave cloning has issues)
+	-fixes
+	-more economy work
+
+	12/19/2018
+
 	0
 	-dispensary broken down into pharm fabricator, organ farm, implant manufactory and gene lab
 	-lots of SF work
diff --git a/devNotes/twine JS.txt b/devNotes/twine JS.txt
index 129fbd4ac78e014c85a400c8e6877dcec1fa3fde..e9f6b01d312b451c1ff2ad9119d8e2c9f44b00fc 100644
--- a/devNotes/twine JS.txt	
+++ b/devNotes/twine JS.txt	
@@ -10089,7 +10089,7 @@ window.generateGenetics = (function() {
 
 	function generateGenetics(actor1, actor2, x) {
 		V = State.variables;
-		genes = {gender: "XX", name: "blank", surname: 0, 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", geneticQuirks: 0};
+		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", clone: 0, cloneID: 0, geneticQuirks: 0};
 		if (actor1.ID > 0) {
 			mother = V.genePool.find(function(s) { return s.ID == actor1.ID; });
 			if (mother === undefined) {
@@ -11031,6 +11031,11 @@ window.generateChild = function(mother, ova, destination) {
 			}
 		}
 
+		if (genes.clone !== undefined) {
+			child.clone = genes.clone;
+			child.cloneID = genes.cloneID;
+		}
+
 		child.mother = genes.mother;
 		child.father = genes.father;
 		child.nationality = genes.nationality;
@@ -11283,6 +11288,68 @@ window.WombSurrogate = function(actor, fCount, mother, fatherID, age) {
 	WombImpregnate(actor, fCount, fatherID, age, mother);
 };
 
+window.WombImpregnateClone = function(actor, fCount, mother, motherOriginal, age) {
+	var i;
+	var tf;
+	for (i=0; i<fCount; i++) {
+		tf = {}; //new Object
+		tf.age = age; //initial age
+		tf.fatherID = mother.ID; //We can store who is father too.
+		tf.volume = 1; //Initial, to create property. Updated with actual data after WombGetVolume call.
+		tf.reserve = ""; //Initial, to create property. Used later to mark if this child is to be kept.
+		tf.identical = 0; //Initial, to create property. Updated with actual data during fetalSplit call.
+		tf.splitted = 0; //marker for already splitted fetus.
+		tf.motherID = mother.ID; //Initial biological mother ID setup.
+		tf.genetics = generateGenetics(mother, mother.ID, i+1); //Stored genetic information.
+		tf.ID = generateNewID();
+
+		//Welcome to having to set up common relatives for the slave and her clone
+		if (mother.father === 0 || (mother.father < -1 && mother.father >= -20 && mother.father !== -3)) {
+			mother.father = State.variables.missingParentID;
+			State.variables.missingParentID--;
+		}
+		if (mother.mother === 0 || (mother.mother < -1 && mother.mother >= -20 && mother.mother !== -3)) {
+			mother.father = State.variables.missingParentID;
+			State.variables.missingParentID--;
+		}
+
+		//gene corrections
+		tf.genetics.gender = mother.genes;
+		tf.genetics.mother = mother.mother;
+		tf.genetics.father = mother.father;
+		if (mother.ID == -1) {
+			tf.genetics.motherName = mother.name;
+			tf.genetics.fatherName = mother.name;
+			tf.genetics.clone = PlayerName(mother);
+			tf.genetics.cloneID = -1;
+		} else {
+			tf.genetics.motherName = mother.slaveName;
+			tf.genetics.fatherName = mother.slaveName;
+			tf.genetics.clone = SlaveFullName(mother);
+			tf.genetics.cloneID = mother.ID;
+		}
+		tf.genetics.intelligence = motherOriginal.intelligence;
+		tf.genetics.face = motherOriginal.face;
+		tf.genetics.faceShape = motherOriginal.faceShape;
+		tf.genetics.geneticQuirks = clone(motherOriginal.geneticQuirks);
+		tf.genetics.skin = motherOriginal.skin;
+
+		try {
+			if (actor.womb.length == 0) {
+				actor.pregWeek = age;
+				actor.preg = age;
+			}
+			actor.womb.push(tf);
+		} catch(err){
+			WombInit(actor);
+			actor.womb.push(tf);
+			alert("WombImpregnate warning - " + actor.slaveName+" "+err);
+		}
+
+	}
+	MissingParentIDCorrection(actor);
+};
+
 window.WombProgress = function(actor, ageToAdd) {
 	var i, ft;
 	ageToAdd = Math.ceil(ageToAdd*10)/10;
@@ -11687,7 +11754,7 @@ window.WombChangeGene = function(actor, geneName, newValue)
 window.MissingParentIDCorrection = function(actor) {
 	WombInit(actor);
 	actor.womb
-		.filter(ft => (ft.genetics.father === 0 || (ft.genetics.father < -1 && ft.genetics.father >= -20)))
+		.filter(ft => (ft.genetics.father === 0 || (ft.genetics.father < -1 && ft.genetics.father >= -20 && ft.genetics.father !== -3)))
 		.forEach(ft => ft.genetics.father = State.variables.missingParentID);
 	State.variables.missingParentID--;
 }
@@ -33503,6 +33570,7 @@ window.BaseSlave = function BaseSlave() {
 		skillE: 0,
 		skillW: 0,
 		tankBaby: 0,
+		clone: 0,
 		geneMods: {NCS: 0, rapidCellGrowth: 0},
 		NCSyouthening: 0,
 		override_Race: 0,
@@ -36827,6 +36895,7 @@ window.slaveRelationDatatypeCleanup = function slaveRelationDatatypeCleanup(slav
 	slave.relationshipTarget = Math.max(+slave.relationshipTarget, 0) || 0;
 	slave.rivalryTarget = Math.max(+slave.rivalryTarget, 0) || 0;
 	slave.rivalry = Math.clamp(+slave.rivalry, 0, 3) || 0;
+	slave.cloneID = +slave.clone || 0;
 };
 
 window.slaveSkillsDatatypeCleanup = function slaveSkillsDatatypeCleanup(slave) {
diff --git a/player variables documentation - Pregmod.txt b/player variables documentation - Pregmod.txt
index 48bfbc48c7a972991ef6b874633af41f0f5010c9..0a50e92112c526d59ab80cdd1f079bbbd0ad6a30 100644
--- a/player variables documentation - Pregmod.txt	
+++ b/player variables documentation - Pregmod.txt	
@@ -24,6 +24,12 @@ ID:
 
 The player's ID is always -1.
 
+genes:
+
+Player's gender
+"XY"
+"XX"
+
 dick:
 
 (common in events)
diff --git a/src/SecExp/attackOptions.tw b/src/SecExp/attackOptions.tw
index ee754659331ad6dc875fb7fec9d03b554ae5d8e4..cb5f39d48b9de1cb6a0020434e3af91956258154 100644
--- a/src/SecExp/attackOptions.tw
+++ b/src/SecExp/attackOptions.tw
@@ -167,17 +167,17 @@ It seems your troops and your adversary will fight
 <<else>>
 	Your recon capabilities are almost non-existent. The information collected will be wild guesses at best:
 <</if>>
-approximately <strong><<print $estimatedMen>> men</strong> are coming, they seems to be
+approximately <strong><<print $estimatedMen>> men</strong> are coming, they seem to be
 <<if $expectedEquip <= 0>>
 	<strong>poorly armed</strong>. Old rusty small arms are the norm with just a few barely working civilian vehicles.
 <<elseif $expectedEquip == 1>>
-	<strong>lightly armed</strong>. Mostly small arms with some repurposed civilian vehicles and a few scattered machine guns. There's no sign of heavy vehicles, artillery or aircraft.
+	<strong>lightly armed</strong>, mostly wth small arms and some repurposed civilian vehicles with scattered machine gun support. There's no sign of heavy vehicles, artillery or aircraft.
 <<elseif $expectedEquip == 2>>
-	<strong>decently armed</strong>. Good quality small arms, machine guns and a few mortars. There seems to be some heavy military vehicles coming as well.
+	<strong>decently armed</strong> with good quality small arms, machine guns and a few mortars. There appear to be some heavy military vehicles coming as well.
 <<elseif $expectedEquip == 3>>
-	<strong>well armed</strong>. High quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery pieces are accompanying the detachment.
+	<strong>well armed</strong> with high quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery pieces are accompanying the detachment.
 <<elseif $expectedEquip >= 4>>
-	<strong>extremely well armed</strong>. Excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
+	<strong>extremely well armed</strong> with excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
 <</if>>
 
 <hr>
diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw
index 3295e62a64f23535eb4d75020fd9ffcb5b0f2fb5..7610ab5bb417d5bdbcada3d783bb83f75d5ca783 100644
--- a/src/events/intro/introSummary.tw
+++ b/src/events/intro/introSummary.tw
@@ -561,9 +561,9 @@ __''Player Character''__
 	<br>You are a $PCCreationSex.
 	<br>Change to
 		<<if $PCCreationSex != "masculine ''Master''">>
-			[[masculine Master|Intro Summary][$PC.title = 1, $PC.pronoun = "he", $PC.possessive = "his", $PC.object = "him", $PCCreationSex = "masculine ''Master''"]]
+			[[masculine Master|Intro Summary][$PC.title = 1, $PC.genes = "XY", $PC.pronoun = "he", $PC.possessive = "his", $PC.object = "him", $PCCreationSex = "masculine ''Master''"]]
 		<<elseif $PCCreationSex != "feminine ''Mistress''">>
-			[[feminine Mistress|Intro Summary][$PC.title = 0, $PC.pronoun = "her", $PC.possessive = "her", $PC.object = "her", $PCCreationSex = "feminine ''Mistress''"]]
+			[[feminine Mistress|Intro Summary][$PC.title = 0, $PC.genes = "XX", $PC.pronoun = "her", $PC.possessive = "her", $PC.object = "her", $PCCreationSex = "feminine ''Mistress''"]]
 		<</if>>
 
 	<br>Everyone calls you ''<<= PlayerName()>>.''
diff --git a/src/events/intro/pcBodyIntro.tw b/src/events/intro/pcBodyIntro.tw
index 7541ec53d2c38340bf863675cfcd1729392e2c79..95f68f16afc88757bfedb08c5086f5a83342183e 100644
--- a/src/events/intro/pcBodyIntro.tw
+++ b/src/events/intro/pcBodyIntro.tw
@@ -6,10 +6,10 @@ Most slaveowners in the Free Cities are male. The preexisting power structures o
 <br>
 
 <<if $PC.title > 0>>
-	You have a masculine figure and will be referred to as ''Master.''
+	You are a <<if $PC.genes == "XX">>wo<</if>>man with a masculine figure and will be referred to as ''Master.''
 	[[Switch to a feminine appearance|PC Body Intro][$PC.title = 0, $PC.pronoun = "her", $PC.possessive = "her", $PC.object = "her"]]
 <<else>>
-	You have a feminine figure and will be referred to as ''Mistress.''
+	You are a <<if $PC.genes == "XX">>wo<</if>>man with a feminine figure and will be referred to as ''Mistress.''
 	[[Switch to a masculine appearance|PC Body Intro][$PC.title = 1, $PC.pronoun = "he", $PC.possessive = "his", $PC.object = "him"]]
 <</if>>
 <br>&nbsp;&nbsp;&nbsp;&nbsp;
@@ -41,11 +41,11 @@ Behind the front of my tailored
 		[[Remove the penis|PC Body Intro][$PC.dick = 0]] | [[Remove the vagina|PC Body Intro][$PC.vagina = 0]]
 	<<else>>
 		slacks, a ''penis.''
-		[[Switch to vagina|PC Body Intro][$PC.dick = 0, $PC.vagina = 1]] | [[Add a vagina|PC Body Intro][$PC.vagina = 1]]
+		[[Switch to vagina|PC Body Intro][$PC.dick = 0, $PC.genes = "XX", $PC.vagina = 1]] | [[Add a vagina|PC Body Intro][$PC.vagina = 1]]
 	<</if>>
 <<else>>
 	skirt, a ''vagina.''
-	[[Switch to penis|PC Body Intro][$PC.dick = 1, $PC.vagina = 0]] | [[Add a penis|PC Body Intro][$PC.dick = 1]]
+	[[Switch to penis|PC Body Intro][$PC.dick = 1, $PC.genes = "XY", $PC.vagina = 0]] | [[Add a penis|PC Body Intro][$PC.dick = 1]]
 <</if>>
 <br>&nbsp;&nbsp;&nbsp;&nbsp;
 //These options will affect sex scenes. Feminine options will increase difficulty.//
diff --git a/src/js/datatypeCleanupJS.tw b/src/js/datatypeCleanupJS.tw
index 7ee8f3bed3ef9388129a6699c12351144b94008d..ec4e8c772ec10e7252f0f345841e1dcf6b720e82 100644
--- a/src/js/datatypeCleanupJS.tw
+++ b/src/js/datatypeCleanupJS.tw
@@ -453,6 +453,7 @@ window.slaveRelationDatatypeCleanup = function slaveRelationDatatypeCleanup(slav
 	slave.relationshipTarget = Math.max(+slave.relationshipTarget, 0) || 0;
 	slave.rivalryTarget = Math.max(+slave.rivalryTarget, 0) || 0;
 	slave.rivalry = Math.clamp(+slave.rivalry, 0, 3) || 0;
+	slave.cloneID = +slave.clone || 0;
 };
 
 window.slaveSkillsDatatypeCleanup = function slaveSkillsDatatypeCleanup(slave) {
diff --git a/src/js/generateGenetics.tw b/src/js/generateGenetics.tw
index 7de1243a7b0049d50d69f4a2ea2141229a78a6a5..049d3c07a025d4097d5072b3b63013372a65add0 100644
--- a/src/js/generateGenetics.tw
+++ b/src/js/generateGenetics.tw
@@ -12,7 +12,7 @@ window.generateGenetics = (function() {
 
 	function generateGenetics(actor1, actor2, x) {
 		V = State.variables;
-		genes = {gender: "XX", name: "blank", surname: 0, 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", geneticQuirks: 0};
+		genes = {gender: "XX", name: "blank", surname: 0, mother: 0, motherName: "none", father: 0, fatherName: "none", nationality: "Stateless", race: "white", intelligence: 0, face: 0, faceShape: "cute", eyeColor: "brown", hColor: "black", skin: "white", markings: "none", behavioralFlaw: "none", sexualFlaw: "none", pubicHSyle: "bushy", underArmHStyle: "bushy", clone: 0, cloneID: 0, geneticQuirks: 0};
 		if (actor1.ID > 0) {
 			mother = V.genePool.find(function(s) { return s.ID == actor1.ID; });
 			if (mother === undefined) {
@@ -954,6 +954,11 @@ window.generateChild = function(mother, ova, destination) {
 			}
 		}
 
+		if (genes.clone !== undefined) {
+			child.clone = genes.clone;
+			child.cloneID = genes.cloneID;
+		}
+
 		child.mother = genes.mother;
 		child.father = genes.father;
 		child.nationality = genes.nationality;
diff --git a/src/js/slaveGenerationJS.tw b/src/js/slaveGenerationJS.tw
index 2443056b4c2fabc9064e126fdbe6ec0579b74852..6ec794cb8ec7e72e8028f0e619a07499ebd269cf 100644
--- a/src/js/slaveGenerationJS.tw
+++ b/src/js/slaveGenerationJS.tw
@@ -1737,6 +1737,7 @@ window.BaseSlave = function BaseSlave() {
 		skillE: 0,
 		skillW: 0,
 		tankBaby: 0,
+		clone: 0,
 		geneMods: {NCS: 0, rapidCellGrowth: 0},
 		NCSyouthening: 0,
 		override_Race: 0,
diff --git a/src/js/wombJS.tw b/src/js/wombJS.tw
index ef5f378bf9dcd9e607256481c27611f966b7de1a..27f9a4bd00fa5b705eff1871b073710d6ca81656 100644
--- a/src/js/wombJS.tw
+++ b/src/js/wombJS.tw
@@ -120,6 +120,68 @@ window.WombSurrogate = function(actor, fCount, mother, fatherID, age) {
 	WombImpregnate(actor, fCount, fatherID, age, mother);
 };
 
+window.WombImpregnateClone = function(actor, fCount, mother, motherOriginal, age) {
+	var i;
+	var tf;
+	for (i=0; i<fCount; i++) {
+		tf = {}; //new Object
+		tf.age = age; //initial age
+		tf.fatherID = mother.ID; //We can store who is father too.
+		tf.volume = 1; //Initial, to create property. Updated with actual data after WombGetVolume call.
+		tf.reserve = ""; //Initial, to create property. Used later to mark if this child is to be kept.
+		tf.identical = 0; //Initial, to create property. Updated with actual data during fetalSplit call.
+		tf.splitted = 0; //marker for already splitted fetus.
+		tf.motherID = mother.ID; //Initial biological mother ID setup.
+		tf.genetics = generateGenetics(mother, mother.ID, i+1); //Stored genetic information.
+		tf.ID = generateNewID();
+
+		//Welcome to having to set up common relatives for the slave and her clone
+		if (mother.father === 0 || (mother.father < -1 && mother.father >= -20 && mother.father !== -3)) {
+			mother.father = State.variables.missingParentID;
+			State.variables.missingParentID--;
+		}
+		if (mother.mother === 0 || (mother.mother < -1 && mother.mother >= -20 && mother.mother !== -3)) {
+			mother.mother = State.variables.missingParentID;
+			State.variables.missingParentID--;
+		}
+
+		//gene corrections
+		tf.genetics.gender = mother.genes;
+		tf.genetics.mother = mother.mother;
+		tf.genetics.father = mother.father;
+		if (mother.ID == -1) {
+			tf.genetics.motherName = mother.name;
+			tf.genetics.fatherName = mother.name;
+			tf.genetics.clone = PlayerName(mother);
+			tf.genetics.cloneID = -1;
+		} else {
+			tf.genetics.motherName = mother.slaveName;
+			tf.genetics.fatherName = mother.slaveName;
+			tf.genetics.clone = SlaveFullName(mother);
+			tf.genetics.cloneID = mother.ID;
+		}
+		tf.genetics.intelligence = motherOriginal.intelligence;
+		tf.genetics.face = motherOriginal.face;
+		tf.genetics.faceShape = motherOriginal.faceShape;
+		tf.genetics.geneticQuirks = clone(motherOriginal.geneticQuirks);
+		tf.genetics.skin = motherOriginal.skin;
+
+		try {
+			if (actor.womb.length == 0) {
+				actor.pregWeek = age;
+				actor.preg = age;
+			}
+			actor.womb.push(tf);
+		} catch(err){
+			WombInit(actor);
+			actor.womb.push(tf);
+			alert("WombImpregnate warning - " + actor.slaveName+" "+err);
+		}
+
+	}
+	MissingParentIDCorrection(actor);
+};
+
 window.WombProgress = function(actor, ageToAdd) {
 	var i, ft;
 	ageToAdd = Math.ceil(ageToAdd*10)/10;
@@ -524,7 +586,7 @@ window.WombChangeGene = function(actor, geneName, newValue)
 window.MissingParentIDCorrection = function(actor) {
 	WombInit(actor);
 	actor.womb
-		.filter(ft => (ft.genetics.father === 0 || (ft.genetics.father < -1 && ft.genetics.father >= -20)))
+		.filter(ft => (ft.genetics.father === 0 || (ft.genetics.father < -1 && ft.genetics.father >= -20 && ft.genetics.father !== -3)))
 		.forEach(ft => ft.genetics.father = State.variables.missingParentID);
 	State.variables.missingParentID--;
 }
diff --git a/src/pregmod/cloningWorkaround.tw b/src/pregmod/cloningWorkaround.tw
new file mode 100644
index 0000000000000000000000000000000000000000..8fa5af3e7fba9085ade5f343a020cabb7b8aa502
--- /dev/null
+++ b/src/pregmod/cloningWorkaround.tw
@@ -0,0 +1,29 @@
+:: Cloning Workaround [nobr]
+
+<<set $nextButton = "Cancel", $receptrix = 0, _eligibility = 0>>
+
+//You've decided to clone <<if $donatrix.ID == -1>>yourself<<else>>$donatrix.slaveName<</if>>.//
+
+<br><br>
+
+__Select a slave to serve as the host for the clone__
+
+<br>
+
+<<for _cw = 0; _cw < $slaves.length; _cw++>>
+<<capture _cw>>
+	<<if ($slaves[_cw].ovaries > 0 || $slaves[_cw].mpreg > 0) && isSlaveAvailable($slaves[_cw]) && $slaves[_cw].preg >= 0 && $slaves[_cw].preg < $slaves[_cw].pregData.normalBirth/10 && $slaves[_cw].pregWeek >= 0 && $slaves[_cw].pubertyXX == 1 && $slaves[_cw].pregType < 12 && $slaves[_cw].bellyImplant == -1 && $slaves[_cw].broodmother == 0 && $slaves[_cw].inflation <= 2 && $slaves[_cw].physicalAge < 70>>
+		<<set _name = SlaveFullName($slaves[_cw])>>
+		<br><<print "[[_name|Surrogacy][$receptrix = $slaves[" + _cw + "], $cash -= ($surgeryCost*2), $surgeryType = 'clone']]">> <<if $slaves[_cw].pregType >= 4>>//Using a slave carrying multiples is unadvisable//<</if>>
+		<<set _eligibility = 1>>
+	<</if>>
+<</capture>>
+<</for>>
+<<if (_eligibility == 0)>>
+	<br>//You have no slaves capable of acting as an incubator.//
+<</if>>
+
+<<if $PC.vagina == 1 && $PC.preg >= 0 && $PC.preg < 4 && $PC.pregType < 8 && $PC.physicalAge < 70>>
+	<br>
+	[[Use your own womb|Surrogacy][$receptrix = $PC, $cash -= ($surgeryCost*2), $surgeryType = 'clone']]
+<</if>>
diff --git a/src/pregmod/geneLab.tw b/src/pregmod/geneLab.tw
index 62df1dce36729b39206d2fbafbd17b09bb1dd563..c5feb381bffc96af3f304fec35afa92994141c70 100644
--- a/src/pregmod/geneLab.tw
+++ b/src/pregmod/geneLab.tw
@@ -7,4 +7,28 @@
 The Gene Lab
 <hr>
 
-//The gene lab is fully operational. It can identify genetic traits in slaves. It can be used to modify a slave's genome should you obtain the data necessary to adjust it.//
\ No newline at end of file
+//The gene lab is fully operational. It can identify genetic traits in slaves. It can be used to modify a slave's genome should you obtain the data necessary to adjust it.//
+
+<br><br>
+Genetic Harvesting
+<hr>
+
+<<if $cheatMode == 1>>
+<<if ($cloningSystem != 1) && ($rep <= 18000*_PCSkillCheck)>>
+	//You lack the reputation needed to access methods for human cloning//
+	<br>
+<<elseif ($cloningSystem != 1) && ($rep > 18000*_PCSkillCheck)>>
+	<<if $organFarmUpgrade == 0>>
+		//An organ farm is needed to grow the blank embryo to serve as a clone base//
+		<br>
+	<<else>>
+		[[Purchase methods for human cloning|Gene Lab][$cash -= 100000*_PCSkillCheck, $cloningSystem = 1]]
+		//Costs <<print cashFormat(100000*_PCSkillCheck)>>//
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will allow children to be created with indentical base genetics as the source DNA//
+		<br>
+	<</if>>
+<<elseif ($cloningSystem > 0)>>
+	The gene lab is capable of implanting a slave's genetic sequence into a blank embryo to produce a basic clone.
+	<br>
+<</if>>
+<</if>>
\ No newline at end of file
diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw
index 3dff3e42120c9ff76b3d7bca43fb776b0894f56f..872215cd269d8b959111b7d042daa3b471a3fefb 100644
--- a/src/pregmod/managePersonalAffairs.tw
+++ b/src/pregmod/managePersonalAffairs.tw
@@ -592,6 +592,9 @@ __Other Personal Business__
 <br> You lack the reputation to be invited to the underground Black Market.
 <</if>>
 
+<<if $cloningSystem == 1>>
+	<br> [[Clone yourself|Cloning Workaround][$returnTo = "Manage Personal Affairs", $donatrix = $PC]]
+<</if>>
 
 <<if $propOutcome == 1 && $arcologies[0].FSRestart != "unset">>
 	<br><br>
diff --git a/src/pregmod/organFarm.tw b/src/pregmod/organFarm.tw
index a02800325e7007a08fc2c475eb0395ee8ac05620..549c903794f7158d0c022a5ba65fbcb7efa8732b 100644
--- a/src/pregmod/organFarm.tw
+++ b/src/pregmod/organFarm.tw
@@ -132,19 +132,17 @@ Organ Production
 	<br>
 <</if>>
 
-<<if $organFarmUpgrade > 0>>
-	<<if ($youngerOvaries != 1) && ($rep <= 10000*_PCSkillCheck)>>
-		//You lack the reputation to access designs for cloning fertile ovaries for menopausal slaves.//
-		<br>
-	<<elseif ($youngerOvaries != 1) && ($rep > 10000*_PCSkillCheck)>>
-		[[Purchase designs for cloning fertile ovaries for menopausal slaves|Organ Farm][$cash -= 30000*_PCSkillCheck, $youngerOvaries = 1]]
-		//Costs <<print cashFormat(30000*_PCSkillCheck)>>//
-		<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most.//
-		<br>
-	<<elseif ($youngerOvaries > 0)>>
-		The organ farm is capable of growing fertile ovaries for postmenopausal slaves.
-		<br>
-	<</if>>
+<<if ($youngerOvaries != 1) && ($rep <= 10000*_PCSkillCheck)>>
+	//You lack the reputation to access designs for cloning fertile ovaries for menopausal slaves.//
+	<br>
+<<elseif ($youngerOvaries != 1) && ($rep > 10000*_PCSkillCheck)>>
+	[[Purchase designs for cloning fertile ovaries for menopausal slaves|Organ Farm][$cash -= 30000*_PCSkillCheck, $youngerOvaries = 1]]
+	//Costs <<print cashFormat(30000*_PCSkillCheck)>>//
+	<br>&nbsp;&nbsp;&nbsp;&nbsp;//Will allow the growth of younger, fertile ovaries for menopausal slaves. Restored fertility will only last for a couple years at most.//
+	<br>
+<<elseif ($youngerOvaries > 0)>>
+	The organ farm is capable of growing fertile ovaries for postmenopausal slaves.
+	<br>
 <</if>>
 /*
 <<if $seePreg != 0 && $seeBestiality != 0>>
diff --git a/src/pregmod/surrogacy.tw b/src/pregmod/surrogacy.tw
index f3a6ee56a5d99da4c43efcd2b9c4ac8e2cfc6020..faa29826b6124e52057b3114d8efd63f2f0c3787 100644
--- a/src/pregmod/surrogacy.tw
+++ b/src/pregmod/surrogacy.tw
@@ -118,4 +118,77 @@
 	<</if>>
 	<<set $receptrix = 0, $donatrix = 0, $wombIndex = 0>>
 
+<<case "clone">>
+
+	<<if $receptrix.ID == -1>>
+		Since the surgery required only a local anesthetic, you remain fully aware of the procedure as the autosurgery carries it out. You slowly rise to your feet, a hand to your lower belly, appreciating the clone growing within you.
+		<<set $PC.pregKnown = 1>>
+		<<if $donatrix.ID != -1>>
+			<<set _babyDaddy = $genePool.find(function(s) { return s.ID == $donatrix.ID; })>>
+			<<if ndef _babyDaddy>>
+				<<set _babyDaddy = $slaveIndices[$donatrix.ID]>>
+			<</if>>
+		<<else>>
+			<<set _babyDaddy = $PC>>
+		<</if>>
+		<<run WombImpregnateClone($PC, 1, $donatrix, _babyDaddy, 1)>>
+		<<run WombNormalizePreg($PC)>>
+	<<else>>
+		<<set $receptrix.pregKnown = 1>>
+		<<if $donatrix.ID != -1>>
+			<<set _babyDaddy = $genePool.find(function(s) { return s.ID == $donatrix.ID; })>>
+			<<if ndef _babyDaddy>>
+				<<set _babyDaddy = $slaveIndices[$donatrix.ID]>>
+			<</if>>
+		<<else>>
+			<<set _babyDaddy = $PC>>
+		<</if>>
+		<<run WombImpregnateClone($receptrix, 1, $donatrix, _babyDaddy, 1)>>
+		<<run WombNormalizePreg($receptrix)>>
+		<<setLocalPronouns $receptrix>>
+		<<if $receptrix.fetish == "mindbroken">>
+			 $receptrix.slaveName leaves the surgery with a certain warmth in $his lower abdomen,
+			 <<if $receptrix.ID == $donatrix.ID>>
+				but has no idea $he carries $his own clone.
+			 <<else>>
+				$he knows that $he has been impregnated.
+			<</if>>
+		<<elseif ($receptrix.fetish == "pregnancy") && ($receptrix.fetishStrength > 60) && ($receptrix.fetishKnown == 1)>>
+			<<if canSee($receptrix)>>
+				Since the surgery required only a local anesthetic, $receptrix.slaveName remained fully aware throughout the procedure. $He was overjoyed at the sight of the syringe containing $his <<if $receptrix.ID == $donatrix.ID>>clone<<else>>future child<</if>> emptying into $his womb.
+			<<else>>
+				$receptrix.slaveName leaves the surgery with a certain warmth in $his lower abdomen, $he knows that $he has been impregnated<<if $receptrix.ID == $donatrix.ID>>, but not that $he now bears $his own clone<</if>>.
+			<</if>>
+			$He is @@.hotpink; filled with joy@@ over the life settling into $his womb and can't wait to see the result. $He's so pleased that $he now @@.mediumaquamarine;trusts@@ your plans for $his body.
+			<<set $receptrix.trust += 4, $receptrix.devotion += 10>>
+		<<elseif ($receptrix.devotion > 50)>>
+			<<if canSee($receptrix)>>
+				Since the surgery required only a local anesthetic, $receptrix.slaveName remained fully aware throughout the procedure. $He watched the syringe containing $his new pregnancy empty into $his womb with rapt attention.
+			<<else>>
+				$receptrix.slaveName leaves the surgery with a certain warmth in $his lower abdomen, $he knows that $he has been impregnated<<if $receptrix.ID == $donatrix.ID>>, but not that $he now bears $his own clone<</if>>.
+			<</if>>
+			$He's @@.hotpink;grateful@@ that you think $him worthy of carrying this child, and a little nervous about how $he'll perform as a surrogate.
+			<<set $receptrix.devotion += 4>>
+		<<elseif ($receptrix.devotion >= -20)>>
+			<<if canSee($receptrix)>>
+				Since the surgery required only a local anesthetic, $receptrix.slaveName remained fully aware throughout the procedure. From the syringe making contact with $his skin, to the egg's delivery into $his womb and $his subsequent impregnation, $he couldn't look away.
+			<<else>>
+				$receptrix.slaveName leaves the surgery with a certain warmth in $his lower abdomen, $he knows that $he has been impregnated<<if $receptrix.ID == $donatrix.ID>>, but not that $he now bears $his own clone<</if>>.
+			<</if>>
+			$He understands the realities of $his life as a slave, so it isn't much of a shock. $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+			<<set $receptrix.trust -= 10>>
+		<<else>>
+			<<if canSee($receptrix)>>
+				Since the surgery required only a local anesthetic, $receptrix.slaveName remained fully aware throughout the procedure. The moment $he realized what was happening, $he shut $his eyes tight, only opening them again as $he feels the slight tingle of the injector exiting $his lower abdomen.
+			<<else>>
+				$receptrix.slaveName leaves the surgery with a certain warmth in $his lower abdomen, $he knows that $he has been impregnated.
+			<</if>>
+			$He does not understand the realities of $his life as a slave at a core level, so $he's @@.mediumorchid;terrified and angry@@ that you have forced $him to bear <<if $receptrix.ID == $donatrix.ID>>$his own clone and potential replacement<<else>>this child, even more so as $he realizes $he doesn't know who the father is<</if>>. $He is @@.gold;sensibly fearful@@ of your total power over $his body and the future of the life $he now harbors within $him.
+			<<set $receptrix.trust -= 15, $receptrix.devotion -= 15>>
+		<</if>>
+		<<set _surr = $slaves.findIndex(function(s) { return s.ID == $receptrix.ID; })>>
+		<<set $slaves[_surr] = $receptrix>>
+	<</if>>
+	<<set $receptrix = 0, $impregnatrix = 0, $donatrix = 0>>
+
 <</switch>>
\ No newline at end of file
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index c98e43d194990f7ef994cf9cfa1bd556e9040677..6c66291ada2d84319bc5db871b7987efd6a503e2 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -1,7 +1,7 @@
 :: pregmod widgets [nobr widget]
 
 <<widget "initPC">>
-	<<set $PC = {name: "Anonymous", surname: 0, title: 1, ID: -1, pronoun: "he", possessive: "him", object: "his", dick: 1, vagina: 0, preg: 0, pregType: 0, pregWeek: 0, pregKnown: 0, belly: 0, bellyPreg: 0, mpreg: 0, pregSource: 0, pregMood: 0, labor: 0, births: 0, boobsBonus: 0, degeneracy: 0, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, lactation: 0, lactationDuration: 0, career: "capitalist", rumor: "wealth", birthWeek: random(0,51), age: 2, sexualEnergy: 4, refreshment: "cigar", refreshmentType: 0, trading: 0, warfare: 0, slaving: 0, engineering: 0, medicine: 0, hacking: 0, cumTap: 0, race: "white", origRace: "white", skin: "white", origSkin: "white", markings: "none", eyeColor: "blue", origEye: "blue", pupil: "circular", sclerae: "white", hColor: "blonde", origHColor: "blonde", nationality: "Stateless", father: 0, mother: 0, sisters: 0, daughters: 0, birthElite: 0, birthMaster: 0, birthDegenerate: 0, birthClient: 0, birthOther: 0, birthArcOwner: 0, birthCitizen: 0, birthSelf: 0, birthLab: 0, slavesFathered: 0, slavesKnockedUp: 0, intelligence: 100, face: 100, faceShape: "normal", actualAge: 35, physicalAge: 35, visualAge: 35, boobsImplant: 0, butt: 0, buttImplant: 0, balls: 0, ballsImplant: 0, ageImplant: 0, newVag: 0, reservedChildren: 0, reservedChildrenNursery: 0, fertDrugs: 0, forcedFertDrugs: 0, staminaPills: 0, ovaryAge: 35, eggType: "human", ballType: "human", storedCum: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", fetish: "none", pubicHStyle: "hairless", underArmHStyle: "hairless", geneticQuirks: {macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, androgyny: 0}}>>
+	<<set $PC = {name: "Anonymous", surname: 0, title: 1, ID: -1, genes: "XY", pronoun: "he", possessive: "him", object: "his", dick: 1, vagina: 0, preg: 0, pregType: 0, pregWeek: 0, pregKnown: 0, belly: 0, bellyPreg: 0, mpreg: 0, pregSource: 0, pregMood: 0, labor: 0, births: 0, boobsBonus: 0, degeneracy: 0, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, lactation: 0, lactationDuration: 0, career: "capitalist", rumor: "wealth", birthWeek: random(0,51), age: 2, sexualEnergy: 4, refreshment: "cigar", refreshmentType: 0, trading: 0, warfare: 0, slaving: 0, engineering: 0, medicine: 0, hacking: 0, cumTap: 0, race: "white", origRace: "white", skin: "white", origSkin: "white", markings: "none", eyeColor: "blue", origEye: "blue", pupil: "circular", sclerae: "white", hColor: "blonde", origHColor: "blonde", nationality: "Stateless", father: 0, mother: 0, sisters: 0, daughters: 0, birthElite: 0, birthMaster: 0, birthDegenerate: 0, birthClient: 0, birthOther: 0, birthArcOwner: 0, birthCitizen: 0, birthSelf: 0, birthLab: 0, slavesFathered: 0, slavesKnockedUp: 0, intelligence: 100, face: 100, faceShape: "normal", actualAge: 35, physicalAge: 35, visualAge: 35, boobsImplant: 0, butt: 0, buttImplant: 0, balls: 0, ballsImplant: 0, ageImplant: 0, newVag: 0, reservedChildren: 0, reservedChildrenNursery: 0, fertDrugs: 0, forcedFertDrugs: 0, staminaPills: 0, ovaryAge: 35, eggType: "human", ballType: "human", storedCum: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", fetish: "none", pubicHStyle: "hairless", underArmHStyle: "hairless", geneticQuirks: {macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, androgyny: 0}}>>
 
 	<<set WombInit($PC)>>
 
@@ -130,6 +130,9 @@
 		<</if>>
 	<</for>>
 <</if>>
+<<if ndef $args[0].clone>>
+	<<set $args[0].clone = 0>>
+<</if>>
 
 <</widget>>
 
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 2978c7481269e4553e54bc921dbaaff7cd06e8e8..1a747b3d6ac00e2016c63ae29758af7de6d9d472 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -388,6 +388,13 @@
 		<<set $PC.pregSource = -2>>
 	<</if>>
 <</if>>
+<<if ndef $PC.genes>>
+	<<if $PC.title == 1>>
+		<<set $PC.genes == "XY">>
+	<<else>>
+		<<set $PC.genes == "XX">>
+	<</if>>
+<</if>>
 <<run PCDatatypeCleanup()>>
 <<run BCReserveInit()>>
 
diff --git a/src/uncategorized/managePenthouse.tw b/src/uncategorized/managePenthouse.tw
index 766519761593bcc503bb001ade97e4b6bbdd62da..535e2d9e2c490b0ce906bfce5fba9ff2c3bbee61 100644
--- a/src/uncategorized/managePenthouse.tw
+++ b/src/uncategorized/managePenthouse.tw
@@ -338,7 +338,7 @@ __Penthouse Upgrades__
 	//You lack the reputation to purchase a cutting-edge genetic sequencer//
 <</if>>
 <<else>>
-	There is a genetic sequencer linked with the pharmaceutical fabricator.
+	There is a [[genetic sequencer|Gene Lab]] attached to the surgery.
 <</if>>
 
 <br>
diff --git a/src/uncategorized/saLongTermEffects.tw b/src/uncategorized/saLongTermEffects.tw
index 6aa3a2ac0be689209fa6a737b6a26c5aa9166877..3d86806f35159943e507bde118110a3b0b52621f 100644
--- a/src/uncategorized/saLongTermEffects.tw
+++ b/src/uncategorized/saLongTermEffects.tw
@@ -3543,50 +3543,52 @@
 					<</if>>
 
 				<<default>> /* random impregnation chance on other assignments - consider relationships first */
-					<<if (_conceptionSeed > 80) && (($slaves[$i].vaginalCount > 0) || ($slaves[$i].analCount > 0 && $slaves[$i].mpreg > 0))>> /* TODO: compare to previous week totals? */
-						<<if $slaves[$i].relationshipTarget > 0>>
-							<<set _tempLover = getSlave($slaves[$i].relationshipTarget)>>
-							<<if ndef _tempLover>>@@.red;Error, relationshipTarget not found.@@<</if>>
-					<<elseif $slaves[$i].rivalryTarget > 0>>
-						<<set _tempRival = getSlave($slaves[$i].rivalryTarget)>>
-						<<if ndef _tempRival>>@@.red;Error, rivalryTarget not found.@@<</if>>
-					<<elseif $slaves[$i].subTarget > 0>>
-						<<set _tempSub = getSlave($slaves[$i].subTarget)>>
-						<<if ndef _tempSub>>@@.red;Error, subTarget not found.@@<</if>>
-					<</if>>
-					<<if (($slaves[$i].relationship == -3) || ($slaves[$i].relationship == -2)) && canImpreg($slaves[$i], $PC)>>
-						<<set $slaves[$i].pregSource = -1>>
-					<<elseif ($slaves[$i].relationship > 2) && canImpreg($slaves[$i], _tempLover)>> /* erection not needed for impregnation via consensual sex play (FWB or better) */
-						<<set $slaves[$i].pregSource = _tempLover.ID>>
-					<<elseif ($slaves[$i].subTarget != 0) && ($slaves[$i].assignment == "be a subordinate slave") && canAchieveErection(_tempSub) && canImpreg($slaves[$i], _tempSub)>> /* subordinate must have erection to impregnate target */
-						<<set $slaves[$i].pregSource = _tempSub.ID>>
-					<<elseif (random(1,100) > 95) && ($slaves[$i].rivalry > 2) && canAchieveErection(_tempRival) && canImpreg($slaves[$i], _tempRival)>> /* 5% chance to be raped and knocked up by bitter rival - erection needed */
-						Driven by the bitter rivalry between them, _tempRival.slaveName successfully overpowers $slaves[$i].slaveName and rapes $him, cumming deep in $his fertile <<if $slaves[$i].mpreg == 1>>asshole<<else>>pussy<</if>> whenever $he chooses. By the end of the week, $slaves[$i].slaveName is vowing revenge as $he regains confidence.
-						<<set $slaves[$i].pregSource = _tempRival.ID>>
-					<<elseif (random(1,100) > 60) && canImpreg($slaves[$i], $PC)>> /* still 40% chance of impregnation by PC */
-						<<set $slaves[$i].pregSource = -1>>
-					<<elseif (random(1,100) > 95) && ($slaves[$i].eggType == "human") && $slaves[$i].devotion <= 20>> /* 5% chance of impregnation by random citizen - TODO: make this optional for players who want random fathers from among their own slaves only */
-						<<set $slaves[$i].pregSource = -2>>
-					<<else>>
-						/* pick a random starting point in the slave array and iterate (wrapping around) until finding eligible father or coming back to starting point */
-						<<if $slaves.length == 1>>
-							<<if canImpreg($slaves[$i], $slaves[$i]) && _conceptionSeed > 95 && ($slaves[$i].releaseRules == "permissive" || $slaves[$i].releaseRules == "masturbation")>>
-								<<set $slaves[$i].pregSource = $slaves[$i].ID>>
-							<</if>>
-						<<elseif $slaves[$i].releaseRules == "permissive" || ($slaves[$i].devotion <= 20 && $slaves[$i].trust > 50) || $universalRulesConsent == 0>>
-							<<set _sourceSeed = random(0,$slaves.length-1)>><<set _tried = 0>>
-							<<for _m = _sourceSeed + 1; _m != _sourceSeed; _m++>>
-								<<if _m == $slaves.length>><<set _m = 0, _tried = 1>><</if>> /* wrap around */
-								<<if _m == _sourceSeed+1 && _tried == 1>><<break>><</if>> /* give up after a full loop */
-								<<if canImpreg($slaves[$i], $slaves[_m])>>
-									/* self-impregnation check */
-									<<if ($slaves[_m].ID == $slaves[$i].ID) && (_conceptionSeed <= 95)>>
-										<<continue>> /* 95% chance not to self-impregnate */
-									<</if>>
-									<<set $slaves[$i].pregSource = $slaves[_m].ID>> /* passed the checks above, so this is an eligible father */
-									<<break>>
+					<<if ["masturbation", "chastity"].includes($slaves[$i].releaseRules) && $slaves[$i].devotion <= 50>>
+						<<if (_conceptionSeed > 80) && (($slaves[$i].vaginalCount > 0) || ($slaves[$i].analCount > 0 && $slaves[$i].mpreg > 0))>> /* TODO: compare to previous week totals? */
+							<<if $slaves[$i].relationshipTarget > 0>>
+								<<set _tempLover = getSlave($slaves[$i].relationshipTarget)>>
+								<<if ndef _tempLover>>@@.red;Error, relationshipTarget not found.@@<</if>>
+						<<elseif $slaves[$i].rivalryTarget > 0>>
+							<<set _tempRival = getSlave($slaves[$i].rivalryTarget)>>
+							<<if ndef _tempRival>>@@.red;Error, rivalryTarget not found.@@<</if>>
+						<<elseif $slaves[$i].subTarget > 0>>
+							<<set _tempSub = getSlave($slaves[$i].subTarget)>>
+							<<if ndef _tempSub>>@@.red;Error, subTarget not found.@@<</if>>
+						<</if>>
+						<<if (($slaves[$i].relationship == -3) || ($slaves[$i].relationship == -2)) && canImpreg($slaves[$i], $PC)>>
+							<<set $slaves[$i].pregSource = -1>>
+						<<elseif ($slaves[$i].relationship > 2) && canImpreg($slaves[$i], _tempLover)>> /* erection not needed for impregnation via consensual sex play (FWB or better) */
+							<<set $slaves[$i].pregSource = _tempLover.ID>>
+						<<elseif ($slaves[$i].subTarget != 0) && ($slaves[$i].assignment == "be a subordinate slave") && canAchieveErection(_tempSub) && canImpreg($slaves[$i], _tempSub)>> /* subordinate must have erection to impregnate target */
+							<<set $slaves[$i].pregSource = _tempSub.ID>>
+						<<elseif (random(1,100) > 95) && ($slaves[$i].rivalry > 2) && canAchieveErection(_tempRival) && canImpreg($slaves[$i], _tempRival)>> /* 5% chance to be raped and knocked up by bitter rival - erection needed */
+							Driven by the bitter rivalry between them, _tempRival.slaveName successfully overpowers $slaves[$i].slaveName and rapes $him, cumming deep in $his fertile <<if $slaves[$i].mpreg == 1>>asshole<<else>>pussy<</if>> whenever $he chooses. By the end of the week, $slaves[$i].slaveName is vowing revenge as $he regains confidence.
+							<<set $slaves[$i].pregSource = _tempRival.ID>>
+						<<elseif (random(1,100) > 60) && canImpreg($slaves[$i], $PC) && !["masturbation", "chastity"].includes($slaves[$i].releaseRules)>> /* still 40% chance of impregnation by PC */
+							<<set $slaves[$i].pregSource = -1>>
+						<<elseif (random(1,100) > 95) && ($slaves[$i].eggType == "human") && $slaves[$i].devotion <= 20>> /* 5% chance of impregnation by random citizen - TODO: make this optional for players who want random fathers from among their own slaves only */
+							<<set $slaves[$i].pregSource = -2>>
+						<<else>>
+							/* pick a random starting point in the slave array and iterate (wrapping around) until finding eligible father or coming back to starting point */
+							<<if $slaves.length == 1>>
+								<<if canImpreg($slaves[$i], $slaves[$i]) && _conceptionSeed > 95 && ($slaves[$i].releaseRules == "permissive" || $slaves[$i].releaseRules == "masturbation")>>
+									<<set $slaves[$i].pregSource = $slaves[$i].ID>>
 								<</if>>
-							<</for>>
+							<<elseif $slaves[$i].releaseRules == "permissive" || ($slaves[$i].devotion <= 20 && $slaves[$i].trust > 50) || $universalRulesConsent == 0>>
+								<<set _sourceSeed = random(0,$slaves.length-1)>><<set _tried = 0>>
+								<<for _m = _sourceSeed + 1; _m != _sourceSeed; _m++>>
+									<<if _m == $slaves.length>><<set _m = 0, _tried = 1>><</if>> /* wrap around */
+									<<if _m == _sourceSeed+1 && _tried == 1>><<break>><</if>> /* give up after a full loop */
+									<<if canImpreg($slaves[$i], $slaves[_m])>>
+										/* self-impregnation check */
+										<<if ($slaves[_m].ID == $slaves[$i].ID) && (_conceptionSeed <= 95)>>
+											<<continue>> /* 95% chance not to self-impregnate */
+										<</if>>
+										<<set $slaves[$i].pregSource = $slaves[_m].ID>> /* passed the checks above, so this is an eligible father */
+										<<break>>
+									<</if>>
+								<</for>>
+							<</if>>
 						<</if>>
 					<</if>>
 					<<if $slaves[$i].pregSource != 0>>
diff --git a/src/uncategorized/saRules.tw b/src/uncategorized/saRules.tw
index 929be6551276844c8487d3d36d11286f585868be..8c2cb717a752af59c7706bb6869d188be8c35e66 100644
--- a/src/uncategorized/saRules.tw
+++ b/src/uncategorized/saRules.tw
@@ -3055,7 +3055,7 @@
 			<<if ($slaves[$i].attrKnown == 0)>>
 				<<if ($week-$slaves[$i].weekAcquired > 4) && $slaves[$i].energy > 20>>
 					<<set $slaves[$i].attrKnown = 1>>
-					<<if $assistantName == "your personal assistant">>Your personal assistant<<else>>$assistantName<</if>> has been monitoring $him as $he services customers, analyzing $his sexuality. It seems $he is
+					<<if $assistantName == "your personal assistant">>Your personal assistant<<else>>$assistantName<</if>> has been monitoring $him as $he studies, analyzing what topics $he tends to keep returning to. It seems $he is
 					<<saRulesAttractionDiscovery>>
 				<</if>>
 			<</if>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 00fd1e6c7fe5a809ad97ba8d696cd0bddb45ad78..cdf1a63f73428e11e435de12c3ba6c3a3fbc887e 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -1463,7 +1463,11 @@ Aphrodisiacs: <span id="aphrodisiacs"><strong><<if $activeSlave.aphrodisiacs > 1
 <</if>>
 <</if>>
 <</if>>
-/**/
+
+<<if $cloningSystem == 1>>
+	<br>&nbsp;&nbsp;&nbsp;&nbsp;
+	<<link "Clone $him" "Cloning Workaround">><<set $returnTo = "Main", $donatrix = $activeSlave>><</link>>
+<</if>>
 <<if $propOutcome == 1 && $arcologies[0].FSRestart != "unset">>
 	<<if $activeSlave.breedingMark == 0 && $activeSlave.fuckdoll == 0 && $activeSlave.eggType == "human" && isFertile($activeSlave)>>
 		<br>&nbsp;&nbsp;&nbsp;&nbsp;
diff --git a/src/uncategorized/storyCaption.tw b/src/uncategorized/storyCaption.tw
index 70200a14739e20759985ecbe2fc9be7b5196f5e0..bec3fe24c95687672dbf25200550810d424a6c2f 100644
--- a/src/uncategorized/storyCaption.tw
+++ b/src/uncategorized/storyCaption.tw
@@ -610,6 +610,9 @@
 	<br>
 	<br><<link [[Wardrobe]]>><</link>>
 	<br><<if $dispensary>>[[Pharmaceutical Fabricator|Dispensary]]<</if>>
+	<br><<if $ImplantProductionUpgrade>>[[Implant Manufactory|Implant Manufactory]]<</if>>
+	<br><<if $organFarmUpgrade>>[[Organ Farm|Organ Farm]]<</if>>
+	<br><<if $geneticMappingUpgrade>>[[Gene Lab|Gene Lab]]<</if>>
 	<br><<if $rep >= 10000>>[[Black Market|The Black Market]]<</if>>
 	<br><br><br><br><br>
 <<elseif _Pass == "Manage Economy">>
@@ -658,6 +661,9 @@
 	<br>
 	<br><<link [[Wardrobe]]>><</link>>
 	<br><<if $dispensary>>[[Pharmaceutical Fabricator|Dispensary]]<</if>>
+	<br><<if $ImplantProductionUpgrade>>[[Implant Manufactory|Implant Manufactory]]<</if>>
+	<br><<if $organFarmUpgrade>>[[Organ Farm|Organ Farm]]<</if>>
+	<br><<if $geneticMappingUpgrade>>[[Gene Lab|Gene Lab]]<</if>>
 	<br><<if $rep >= 10000>>[[Black Market|The Black Market]]<</if>>
 	<br><br><br><br><br>