diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index fa2e590df7737d3983ad3b5a3ada8aec9dfd0138..9e1bf105ccc2fdcd79ad2e948ecf8121cb718ff7 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -891,6 +891,7 @@ App.Data.resetOnNGPlus = {
 	propOutcome: 0,
 	EliteSires: [],
 	raped: -1,
+	rapedThisWeek: 0,
 	missingParentID: -10000,
 	/* animalParts: 0,*/
 	pregSpeedControl: 0,
diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js
index 0774ad19271af2bde0d1275f753623595a9e2013..8c40ac2bc949e973d0d8e298553598b70a472ee5 100644
--- a/src/002-config/fc-version.js
+++ b/src/002-config/fc-version.js
@@ -2,5 +2,5 @@ App.Version = {
 	base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed.
 	pmod: "4.0.0-alpha.27",
 	commitHash: null,
-	release: 1208, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js.
+	release: 1209, // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js.
 };
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index ddfd8e89112942d2b2030c68ac6746703dc344d8..5731b7ca5718ab2b59e531d70dfe8aee935c80cc 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -1557,6 +1557,7 @@ globalThis.PCDatatypeCleanup = (function PCDatatypeCleanup() {
 		PC.counter.slavesKnockedUp = Math.max(+PC.counter.slavesKnockedUp, 0) || 0;
 		PC.counter.storedCum = Math.max(+PC.counter.storedCum, 0) || 0;
 		PC.counter.reHymen = Math.max(+PC.counter.reHymen, 0) || 0;
+		PC.counter.raped = Math.max(+PC.counter.raped, 0) || (V.raped && (V.raped > 0) ? 1 : 0);
 
 		PC.counter.moves = Math.max(+PC.counter.moves, 0) || 0;
 		PC.counter.quick = Math.max(+PC.counter.quick, 0) || 0;
diff --git a/src/endWeek/economics/reputation.js b/src/endWeek/economics/reputation.js
index e36b88077601f130b70ebd52062450b78cbb1ac3..db0a35117902ee3baa92574b25e2914e516ef2b7 100644
--- a/src/endWeek/economics/reputation.js
+++ b/src/endWeek/economics/reputation.js
@@ -976,6 +976,54 @@ App.EndWeek.reputation = function() {
 			repX(forceNeg(1 * V.PC.degeneracy), "PCactions");
 		}
 	}
+	if (V.rapedThisWeek) {
+		let rapeFameDec = 25 + V.rapedThisWeek * 75;
+		r.push(`There's ${V.PC.degeneracy ? "also " : ""}a rumor you've been raped${V.PC.counter.raped ? " again" : ""}.`);
+		if (V.rep < 3000) {
+			r.push(`Since you are almost unknown, the rumor goes almost unnoticed.`);
+			rapeFameDec *= V.rep / 10000;
+		} else if (V.rep < 6000) {
+			r.push(`Since you are not very well known, the rumor goes quite unnoticed.`);
+			rapeFameDec *= V.rep / 10000;
+		} else if (V.rep < 9000) {
+			r.push(`Since you are not well known, the rumor does not have much impact.`);
+			rapeFameDec *= V.rep / 10000;
+		}
+		if (FutureSocieties.isActive("FSAntebellumRevivalist")) {
+			if (V.SecExp.edicts.weaponsLaw > 0) {
+				r.push(`Your citizens are relieved that they are allowed to bear arms to defend themselves against possible attacks.`);
+				rapeFameDec *= .8;
+			} else {
+				r.push(`Your citizens would feel safer if they were allowed to bear weapons to defend themselves against possible attacks.`);
+				rapeFameDec *= 1.2;
+			}
+		} else if (FutureSocieties.isActive("FSSubjugationist") && V.PC.race === V.arcologies[0].FSSubjugationistRace) {
+			r.push(`Your citizens see your rape as normal since you are ${V.PC.race}.`);
+			rapeFameDec *= .5;
+		} else if (FutureSocieties.isActive("FSSupremacist") && V.PC.race === V.arcologies[0].FSSupremacistRace) {
+			r.push(`Your citizens consider your rape an atrocity, since you are ${V.PC.race}.`);
+			rapeFameDec *= 1.2;
+		} else if (FutureSocieties.isActive("FSRepopulationFocus") && (isFertile(V.PC) || ((V.PC.vagina >= 0 || V.PC.mpreg) && V.PC.preg < 10))) {
+			r.push(`All things considered, your citizens hope that at least you have become pregnant.`);
+			rapeFameDec *=.9;
+		}
+		if (V.arcologies[0].FSChattelReligionistLaw === 1) {
+			r.push(`The Prophet has been sullied, and this is a sacrilege.`);
+			rapeFameDec *= 1.2;
+		}
+		if (V.arcologyUpgrade.drone !== 1) {
+			r.push(`The lack of security is scaring people.`);
+			rapeFameDec *= 1.3;
+		}
+		if (V.policies.sexualOpenness === 1 && FutureSocieties.isActive("FSNull")) {
+			r.push(`Since you have shown interest in being penetrated, many people think that it's not a real rape, that you are role-playing with some friend.`);
+			rapeFameDec *= .5;
+		}
+		rapeFameDec = Math.clamp(Math.floor(rapeFameDec), 0, 250);
+		repX(forceNeg(rapeFameDec), "PCactions");
+		V.PC.counter.raped = (V.PC.counter.raped || 0) + V.rapedThisWeek;
+		V.rapedThisWeek = 0;
+	}
 
 	if (V.FCNNstation === 1) {
 		r.push(`Playing host to the Free Cities News Network brings <span class="green">approval</span> from those who still consider freedom of the press a virtue.`);
diff --git a/src/endWeek/saDevotion.js b/src/endWeek/saDevotion.js
index 2f6974c57adf7d51830bc22278acbfe0af7fc18f..f6183164b6b904a15e00188ba192b819ddd208f2 100644
--- a/src/endWeek/saDevotion.js
+++ b/src/endWeek/saDevotion.js
@@ -689,7 +689,7 @@ App.SlaveAssignment.devotion = function saDevotion(slave) {
 				if (!getPersonalAttention(slave.ID, "torture")) {
 					if (canSee(slave) && slave.assignment === Job.FUCKTOY) {
 						if (slave.fetish === Fetish.SADIST) {
-							r.push(`${He} has <span class="devotion dec">fun</span> watching you spend your free time brutalizing a helpless slave. On the other hand, that ${he} could be next was a <span class="trust dec">little worrying.</span>`);
+							r.push(`${He} has <span class="devotion inc">fun</span> watching you spend your free time brutalizing a helpless slave. On the other hand, that ${he} could be next was a <span class="trust dec">little worrying.</span>`);
 							slave.devotion++;
 							slave.trust -= 5;
 						} else {
@@ -738,6 +738,29 @@ App.SlaveAssignment.devotion = function saDevotion(slave) {
 				}
 			}
 		}
+		if (V.rapedThisWeek) {
+			r.push(`Some of your slaves whisper among themselves that you have been raped.`);
+			if (slave.devotion <= 20) {
+				if (slave.fetish === Fetish.PREGNANCY && canImpreg(V.PC, slave)) {
+					r.push(`${He} daydreams about being able to do it ${himself} and <span class="trust inc">put ${slave.counter.PCKnockedUp ? "another" : "a"} bastard in your womb.</span>`);
+				} else if (slave.fetish === Fetish.DOM || slave.fetish === Fetish.SADIST) {
+					r.push(`${He} daydreams about being able to do it ${himself}, slowly <span class="trust inc">subduing and dominating you</span> under his power.`);
+				} else {
+					r.push(`${He} feels more <span class="trust inc">encouraged to challenge you</span> if given the opportunity.`);
+				}
+				slave.trust += 10;
+			} else if (slave.devotion <= 60) {
+				r.push(`<span class="trust inc">${His} confidence increases</span> because ${he} thinks <span class="devotion dec">${he} can take advantage of your weakness.</span>`);
+				slave.devotion -= 5;
+				slave.trust +=5;
+			} else if (slave.trust <= 50) {
+				r.push(`${He} feels <span class="trust dec">vulnerable</span> because <span class="devotion dec">${his} ${getWrittenTitle(slave)} can't even protect ${playerPronouns.himself}.</span>`);
+				slave.devotion -=5;
+				slave.trust -=5;
+			} else {
+				r.push(`${He} knows well what it is to be raped and <span class="devotion inc">${he} empathizes with you.</span>`);
+			}
+		}
 	}
 
 	/**
diff --git a/src/events/RESS/breedingBull.js b/src/events/RESS/breedingBull.js
index 63a296df5cafe980fd57cb05f735a2252efeecc7..45c20ca19b4d1aa3a9553c1074e5cc83fd53fc4f 100644
--- a/src/events/RESS/breedingBull.js
+++ b/src/events/RESS/breedingBull.js
@@ -89,6 +89,7 @@ App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEven
 				App.Events.addParagraph(frag, [`You awaken some time later, your crotch extremely sore and your belly slightly bloated. Most of ${his} deposit has flowed back out of you, but you still feel a fair amount sloshing inside you. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the fault is on you for ignoring the warning signs and not taking the proper precautions. Still, there is no doubt in your mind that <span class="lime">you're pregnant</span> with ${his} child.`]);
 				knockMeUp(V.PC, 100, 0, eventSlave.ID);
 				seX(eventSlave, "penetrative", V.PC, "vaginal", 4);
+				V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			}
 			return frag;
 
@@ -130,6 +131,7 @@ App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEven
 			App.Events.addParagraph(frag, [`Panting, you look over the damage: Your pussy is gaping, there is semen everywhere, and given the steady flow from you, ${he} likely got some of that ejaculation in you. You sigh to yourself, knowing you have nobody to blame but yourself for this. ${He}'s a breeding bull and you, a fertile ${womanP}. ${He} only did what ${he} was conditioned for; the blame is on you for ignoring the warning signs and not taking the proper precautions. Still, ${he} knew you were fertile and went right for the prize; it would be wise to assume you've been impregnated.`]);
 			knockMeUp(V.PC, 20, 0, eventSlave.ID);
 			seX(eventSlave, "penetrative", V.PC, "vaginal");
+			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			return frag;
 		}
 
@@ -150,6 +152,7 @@ App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEven
 			} else {
 				r.push(`pussy.`);
 			}
+			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			r.push(`You groan with pain at the sheer size of the rod stretching out your poor hole and struggle to hold back the tears once ${he} starts thrusting. There is no pleasure for you here as ${he} batters your cervix; you barely stop yourself from screaming out as ${he} slams through your final defense`);
 			if (S.Bodyguard) {
 				const {his2} = getPronouns(S.Bodyguard).appendSuffix("2");
@@ -217,6 +220,7 @@ App.Events.RESSBreedingBull = class RESSBreedingBull extends App.Events.BaseEven
 			knockMeUp(V.PC, 100, 0, eventSlave.ID);
 			seX(eventSlave, "penetrative", V.PC, "vaginal", 4);
 			App.Events.addParagraph(frag, r);
+			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			return frag;
 		}
 
diff --git a/src/events/RESS/mutinyAttempt.js b/src/events/RESS/mutinyAttempt.js
index 8a8cbfa3f7d8d584f38b41d5f996d1d94df4e69a..431a3c3dcfa714587a8bdd40f45a5a941557c496 100644
--- a/src/events/RESS/mutinyAttempt.js
+++ b/src/events/RESS/mutinyAttempt.js
@@ -206,6 +206,7 @@ App.Events.RESSMutinyAttempt = class RESSMutinyAttempt extends App.Events.BaseEv
 				if (canImpreg(V.PC, eventSlave)) {
 					r.push(knockMeUp(V.PC, 50, 0, eventSlave.ID));
 				}
+				V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			}
 			App.Events.addParagraph(frag, r);
 			App.Events.addResponses(frag, choices2);
@@ -261,6 +262,7 @@ App.Events.RESSMutinyAttempt = class RESSMutinyAttempt extends App.Events.BaseEv
 			}
 			r.push(`Once spent, ${he} shoves you to the ground and crashes into your office chair. The moment ${he} lets down ${his} guard, you slam the heaviest object you can find into ${his} head. Now that you have ${him} controlled, it's time ${he} learned ${his} place — when ${he} wakes up, of course. It's more fun that way.`);
 			seX(eventSlave, "penetrative", V.PC, "vaginal");
+			V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			App.Events.addParagraph(frag, r);
 			App.Events.addResponses(frag, choices2);
 			return frag;
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 1e67757f0a785f3dcaa3efc15cee3ef456f3641b..76d0cf98967047ffb52020d7161daecd994a90ce 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -980,6 +980,7 @@ App.UI.Player.design = function() {
 						["Societal Elite", -6],
 						["Designer baby", -7],
 						["Futanari Sister", -9],
+						["Rapist", -10],
 					])
 					.showTextBox();
 			}
diff --git a/src/events/nonRandom/pRaped.js b/src/events/nonRandom/pRaped.js
index 38478a64b26d1b9a3d1f500600457b432fecfd68..6ba243b891a32c44f87a97a4eb600691e2df8282 100644
--- a/src/events/nonRandom/pRaped.js
+++ b/src/events/nonRandom/pRaped.js
@@ -21,6 +21,7 @@ App.Events.pRaped = class pRaped extends App.Events.BaseEvent {
 			hisP, womanP, girlP
 		} = getPronouns(V.PC).appendSuffix("P");
 		V.raped = 1;
+		V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 
 		const genParam = {minAge: 16, race: "nonslave", disableDisability: 1};
 		let rapist;
@@ -62,6 +63,7 @@ App.Events.pRaped = class pRaped extends App.Events.BaseEvent {
 			if (!isHindered(V.PC)) {
 				r.push(`over. With a single strike, the ${woman} tailing you lies in a heap on the ground.`);
 				V.raped = 0;
+				V.rapedThisWeek--;
 			} else {
 				r.push(`over, but your body has grown a bit too unwieldy as of late, so you find yourself quickly outmaneuvered and held with a knife to your throat.`);
 			}
@@ -70,6 +72,7 @@ App.Events.pRaped = class pRaped extends App.Events.BaseEvent {
 			if (!isHindered(V.PC)) {
 				r.push(`You quickly disarm the assailant and knock them to the floor before placing them in a choke-hold. Once they are subdued, you stand back to decide what to do next.`);
 				V.raped = 0;
+				V.rapedThisWeek--;
 			} else {
 				r.push(`You quickly try to disarm your assailant, but find your body has become a bit too ponderous as of late. After a short struggle, it is you that ends up pinned with a knife to the throat.`);
 			}
@@ -78,6 +81,7 @@ App.Events.pRaped = class pRaped extends App.Events.BaseEvent {
 			if (!isHindered(V.PC)) {
 				r.push(`With a single stab, your own shiv is buried in ${his} chest, incapacitating ${him}.`);
 				V.raped = 0;
+				V.rapedThisWeek--;
 			} else {
 				r.push(`You try to draw your shiv and stab ${him}, but your body has grown a bit too unwieldy as of late, so you find yourself quickly outmaneuvered and held with a knife to your throat.`);
 			}
@@ -320,7 +324,7 @@ App.Events.pRaped = class pRaped extends App.Events.BaseEvent {
 						r.push(`not climaxing...`);
 					}
 					r.push(`Is this what it feels like to be bred by someone so dominant? You should take a pregnancy test right away and make sure ${he} didn't knock you up.`);
-					knockMeUp(V.PC, 100, 0, -2);
+					knockMeUp(V.PC, 100, 0, -10);
 				}
 				if (V.PC.vagina === 0) {
 					V.PC.vagina++;
diff --git a/src/events/scheduled/sePlayerBirth.js b/src/events/scheduled/sePlayerBirth.js
index c24928ae8961870065ceafbdf650026cd9c3084e..de05d6eb0c7d000eeec9fa668fd56a03989a3cc2 100644
--- a/src/events/scheduled/sePlayerBirth.js
+++ b/src/events/scheduled/sePlayerBirth.js
@@ -61,6 +61,7 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent {
 		let elite = 0;
 		let lab = 0;
 		let futaS = 0;
+		let rapists = 0;
 		let slavesLength = 0;
 		let babies = [];
 		for (const baby of birthed) {
@@ -91,6 +92,9 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent {
 			} else if (baby.fatherID === -9) {
 				futaS++;
 				babies.push("a Futanari Sister");
+			} else if (baby.fatherID === -10) {
+				rapists++;
+				babies.push("a rapist");
 			} else {
 				const babyDaddy = getSlave(baby.fatherID);
 				if (babyDaddy) {
@@ -721,6 +725,8 @@ App.Events.SEPlayerBirth = class SEPlayerBirth extends App.Events.BaseEvent {
 				V.PC.counter.birthLab += lab;
 				V.PC.counter.birthFutaSis += futaS;
 				V.PC.counter.birthDegenerate += slavesLength;
+				V.PC.counter.birthRape = (V.PC.counter.birthRape || 0) + rapists;
+				V.PC.counter.birthFutaSis += futaS;
 
 				if (curBabies === 1) {
 					let p = 0;
diff --git a/src/facilities/facilityRetrievalWorkaround.js b/src/facilities/facilityRetrievalWorkaround.js
index 2fa4db315169853d4910ff5af0e06d553012df10..b0c4a74b62d649887c3680ee8d04f611789ef7c3 100644
--- a/src/facilities/facilityRetrievalWorkaround.js
+++ b/src/facilities/facilityRetrievalWorkaround.js
@@ -105,6 +105,8 @@ App.UI.facilityRetrievalWorkaround = function(facility) {
 				r.append(`Lab crafted.`);
 			} else if (slave.father === -9) {
 				r.append(`Futanari Sister.`);
+			} else if (slave.father === -10) {
+				r.append(`Your rapist.`);
 			} else {
 				r.append(missingSlave);
 			}
diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js
index c39ab57df7b85a92864a25d604c3799d33daf46a..4680c67fdaabbd360484623963294a50ce46451a 100644
--- a/src/facilities/nursery/utils/nurseryUtils.js
+++ b/src/facilities/nursery/utils/nurseryUtils.js
@@ -751,6 +751,9 @@ App.Facilities.Nursery.nurserySort = function nurserySort() {
 					case -9:
 						r += `the Futanari Sister's`;
 						break;
+					case -10:
+						r += `your rapist`;
+						break;
 					default:
 						if (slave.preg <= 5) {
 							r += `someone's, though it is too early to tell whose,`;
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 26532b92ffcdc63c8dfc72e65b7a083d876128c9..e22a6d40131956d6c83eefbe15e1ec690ab736ba 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -1411,6 +1411,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * accepts ID See Pregnancy Control section for more.
 		 *
 		 * Who sired her pregnancy
+		 * * -10: a rapist
 		 * * -9: a futanari sister
 		 * * -8: an animal
 		 * * -7: designer baby
@@ -2185,6 +2186,7 @@ App.Entity.SlaveState = class SlaveState {
 		 * | *-6*     | Societal Elite        |
 		 * | *-8*     | Animal                |
 		 * | *-9*     | Futanari Sister       |
+		 * | *-10*    | Rapist                |
 		 * @type {Set<number>}
 		 */
 		this.partners = new Set();
diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js
index 69489a6c8118620f3a33351f2ca8ed29aeabf8ab..3db6da789e1192330e008304565e8bc77676c734 100644
--- a/src/js/birth/birth.js
+++ b/src/js/birth/birth.js
@@ -426,6 +426,8 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 					fathers.push("one of your animals");
 				} else if (baby.fatherID === -9) {
 					fathers.push("a Futanari Sister");
+				} else if (baby.fatherID === -10) {
+					fathers.push("a rapist");
 				} else {
 					const babyDaddy = findFather(baby.fatherID);
 					if (babyDaddy) {
@@ -2136,6 +2138,8 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false, artRen
 					fathers.push("one of your animals");
 				} else if (baby.fatherID === -9) {
 					fathers.push("a Futanari Sister");
+				} else if (baby.fatherID === -10) {
+					fathers.push("a rapist");
 				} else {
 					const babyDaddy = findFather(baby.fatherID);
 					if (babyDaddy) {
diff --git a/src/js/sexActsJS.js b/src/js/sexActsJS.js
index 15ba1bdb4d9d1af5555ab159bc1a4a040fee956a..dafc34f40b3d532fad2664096d540e3abc6d5da9 100644
--- a/src/js/sexActsJS.js
+++ b/src/js/sexActsJS.js
@@ -547,6 +547,7 @@ globalThis.seX = function(slave1, act1, slave2, act2 = "penetrative", count = 1)
 	 * | *-6*     | Societal Elite        |
 	 * | *-8*     | Animal                |
 	 * | *-9*     | Futanari Sister       |
+	 * | *-10*    | Rapist                |
 	 */
 	function addPartner(slave, partner) {
 	/** @returns {FC.HumanState} */
diff --git a/src/npc/children/ChildState.js b/src/npc/children/ChildState.js
index b02ba500b972bf8f426382953129cae763d45833..2d80ae90c4deb44d3c6a01943fe8399a96a83fce 100644
--- a/src/npc/children/ChildState.js
+++ b/src/npc/children/ChildState.js
@@ -737,6 +737,7 @@ App.Facilities.Nursery.ChildState = class ChildState {
 		 * accepts ID See Pregnancy Control section for more.
 		 *
 		 * Who sired her pregnancy
+		 * * -10: a rapist
 		 * * -9: a futanari sister
 		 * * -8: an animal
 		 * * -7: designer baby
diff --git a/src/npc/descriptions/womb/pregnancy.js b/src/npc/descriptions/womb/pregnancy.js
index 0f66527bce7263da69dde812134ae5ddceeba496..10cc554a80974ff3228c7fdcbfc986b9b6e4ad23 100644
--- a/src/npc/descriptions/womb/pregnancy.js
+++ b/src/npc/descriptions/womb/pregnancy.js
@@ -589,6 +589,7 @@ App.Desc.pregnancy = function(slave, descType = DescType.NORMAL) {
 						6: `a member of the Societal Elite`,
 						8: `one of your pets`,
 						9: `a Futanari Sister`,
+						10: `a rapist`,
 					};
 					daddy = desc[Math.abs(daddy)];
 				}
diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js
index 376787ebccba8b925d557f78063bdc2e3bf554e6..7ce11163d4acf295dd2900b3a47dd2d270b437bd 100644
--- a/src/npc/generate/generateGenetics.js
+++ b/src/npc/generate/generateGenetics.js
@@ -261,6 +261,9 @@ globalThis.generateGenetics = (function() {
 				case -9:
 					fatherName = "A Futanari Sister";
 					break;
+				case -10:
+					fatherName = "A rapist";
+					break;
 				default:
 					fatherName = "Unknown";
 			}
diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js
index 4f30d7bfdd8846d662bc6abc0c05b3b38989c4f5..8242e742319335e179038b69c50d8940b783d5ac 100644
--- a/src/npc/generate/newSlaveIntro.js
+++ b/src/npc/generate/newSlaveIntro.js
@@ -3462,6 +3462,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 									V.PC.vagina = 1;
 								}
 								seX(slave, "penetrative", V.PC, "vaginal");
+								V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 								if (random(1, 100) > 60 && slave.fetish === Fetish.NONE) {
 									slave.fetish = "dom";
 									slave.fetishStrength = 20;
diff --git a/src/npc/interaction/fDick.js b/src/npc/interaction/fDick.js
index ee6e89e307b221bf88c1519a014785384fffcdd1..ff2419de5305f29b69e73c2b566ff6069e1edd49 100644
--- a/src/npc/interaction/fDick.js
+++ b/src/npc/interaction/fDick.js
@@ -322,12 +322,13 @@ App.Interact.fDick = function(slave) {
 							seX(V.PC, "anal", slave, "penetrative", 5);
 						} else {
 							seX(V.PC, "vaginal", slave, "penetrative", 5);
-						}					
+						}
 					} else {
 						text.push(`Contently sighing, ${he} pulls ${his} still very hard cock from your overwhelmed body and forces it into your mouth, ready to blow a second load and give you a <span class="orangered">taste of your place,</span> before leaving you twitching and drooling cum.`);
 						seX(V.PC, "oral", slave, "penetrative");
 					}
 					slave.trust += 5;
+					V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 				} else {
 					text.push(`You feel ${him} shift dominantly beneath you and in response`);
 
diff --git a/src/npc/interaction/fSuckDick.js b/src/npc/interaction/fSuckDick.js
index 1a60071eff3a97725aa294d6d81ac6e113028d12..b1668ebe10c61b018195e8c09eb3836e1ae70515 100644
--- a/src/npc/interaction/fSuckDick.js
+++ b/src/npc/interaction/fSuckDick.js
@@ -457,6 +457,7 @@ App.Interact.fSuckDick = function(slave) {
 			} else {
 				r.push(`You try to break free, but you don't have enough strength and your unsuccessful attempts only excite ${him} more. Finally you give up and decide to cooperate as best you can so that ${he} finishes as soon as possible.`);
 				r.push(swallow());
+				V.rapedThisWeek = (V.rapedThisWeek || 0) + 1;
 			}
 
 			App.Events.addParagraph(node, r);
@@ -536,7 +537,7 @@ App.Interact.fSuckDick = function(slave) {
 
 		} else if (isHorny(slave) && slave.devotion < 50 && slave.trust > 50 && jsRandom(1, 100) > 50) { // Slaves unable to warn with time enough
 			r.push(`${He} warns you that ${his} orgasm is imminent at the time you feel a throbbing at the base of the dick, and ${amount <= 100 ? "liquid splatters in the back of your mouth" : "a thick spurt fills your mouth"}.`);
-			r.push(`You pull away immediately, taking out what's in your mouth. ${He} let ${himself} go, the expression on ${his} face is worried, but ${his} orgasm and ${his} moans increase in intensity, having cummed in your mouth arouses ${him}${isHorny(V.PC) ? ", and you too." : "."} You look at ${him} threateningly, you're really angry.`);
+			r.push(`You pull away immediately, taking out what's in your mouth. ${He} lets ${himself} go, the expression on ${his} face is worried, but ${his} orgasm and ${his} moans increase in intensity, having cummed in your mouth arouses ${him}${isHorny(V.PC) ? ", and you too." : "."} You look at ${him} threateningly, you're really angry.`);
 
 			if (isHorny(V.PC)) {
 				r.push(`You can't control yourself anymore and an intense, extremely pleasurable and endless orgasm takes control of your mind,`);
diff --git a/src/player/electiveSurgery.js b/src/player/electiveSurgery.js
index 2f3c6da196822b4aeb1efe6b777bb7743ca8dcd9..f02ff1e34667aca5d6ab4a79f28f3d37a4cf8b16 100644
--- a/src/player/electiveSurgery.js
+++ b/src/player/electiveSurgery.js
@@ -730,7 +730,7 @@ App.UI.electiveSurgery = function() {
 			};
 		} else if (V.PC. vagina > 0) {
 			if (V.PC.preg === 0) {
-				r.push(`"It looks like you have lost the warranty seal${V.PC.counter.reHymen ? " again" : ""}. I can give you a hymen reconstruction for only <span class="cash">${cashFormat(applyDiscount(2000))}.</span> No one will notice that your vagina has ${V.PC.counter.vaginal/V.week > 10 ? "largely" : ""} been used${V.raped > 0 ? " and abused" : ""}, it will be a perfect work of craftsmanship. The surgery will also serve to make your duct narrow like"`);
+				r.push(`"It looks like you have lost the warranty seal${V.PC.counter.reHymen ? " again" : ""}. I can give you a hymen reconstruction for only <span class="cash">${cashFormat(applyDiscount(2000))}.</span> No one will notice that your vagina has ${V.PC.counter.vaginal/V.week > 10 ? "largely" : ""} been used${V.PC.counter.raped > 0 ? " and abused" : ""}, it will be a perfect work of craftsmanship. The surgery will also serve to make your duct narrow like"`);
 				if (V.PC.physicalAge < 13 || V.PC.actualAge < 13) {
 					r.push("a child like you is supposed to have.");
 				} else if (V.PC.visualAge < 13) {
@@ -756,7 +756,7 @@ App.UI.electiveSurgery = function() {
 					}
 				}));
 			} else {
-				r.push(`"It looks like you have lost the warranty seal${V.PC.counter.reHymen ? " again" : ""}. If you weren't pregnant, I could give you a hymen reconstruction for only <span class="cash">${cashFormat(applyDiscount(2000))}.</span> No one would notice that your vagina has ${V.PC.counter.vaginal/V.week > 10 ? "largely" : ""} been used${V.raped > 0 ? " and abused" : ""}, it would be a perfect work of craftsmanship. The surgery would also serve to make your duct narrow like"`);
+				r.push(`"It looks like you have lost the warranty seal${V.PC.counter.reHymen ? " again" : ""}. If you weren't pregnant, I could give you a hymen reconstruction for only <span class="cash">${cashFormat(applyDiscount(2000))}.</span> No one would notice that your vagina has ${V.PC.counter.vaginal/V.week > 10 ? "largely" : ""} been used${V.PC.counter.raped > 0 ? " and abused" : ""}, it would be a perfect work of craftsmanship. The surgery would also serve to make your duct narrow like"`);
 				if (V.PC.physicalAge < 13 || V.PC.actualAge < 13) {
 					r.push("a child like you is supposed to have.");
 				} else if (V.PC.visualAge < 13) {
diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js
index 9cdbea311017f3b60767c2f3f5617950cf3eef82..55b779460f0e99b943b29a18692c7dd1e763996a 100644
--- a/src/player/js/PlayerState.js
+++ b/src/player/js/PlayerState.js
@@ -106,10 +106,14 @@ App.Entity.PlayerActionsCountersState = class {
 		this.birthSelf = 0;
 		/** how many designer babies you've produced */
 		this.birthLab = 0;
+		/** hoy many children you've had fruit of unknown rapists */
+		this.birthRape = 0;
 		/** untracked births */
 		this.birthOther = 0;
 		/** how many units of your cum are stored away for artificially inseminating slaves */
 		this.storedCum = 0;
+		/** how many times you've been raped of forced to sex */
+		this.raped = 0;
 		/** shared variables */
 		/** amount of milk given */
 		this.milk = 0;
@@ -965,6 +969,7 @@ App.Entity.PlayerState = class PlayerState {
 		 * accepts ID See Pregnancy Control section for more.
 		 *
 		 * Who sired your pregnancy
+		 * * -10: a rapist
 		 * * -9: a futanari sister
 		 * * -8: an animal
 		 * * -7: designer baby
@@ -1549,6 +1554,7 @@ App.Entity.PlayerState = class PlayerState {
 		 * | *-6*     | Societal Elite*        |
 		 * | *-8*     | Animal*                |
 		 * | *-9*     | Futanari Sister*       |
+		 * | *-10*    | Rapist*                |
 		 *
 		 * **not currently implemented*
 		 * @type {Set<number>}