diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js
index 0814507dc1f9f8ebe2b333e24cef6096e8de1682..b60d9d51dc2c160998f0896672f34474ce4c088d 100644
--- a/src/npc/interaction/fPCImpreg.js
+++ b/src/npc/interaction/fPCImpreg.js
@@ -558,11 +558,126 @@ function consummationBigBalls(slave) {
 	return frag;
 }
 
+/** @param {App.Entity.SlaveState} slave */
+function consummationSubmissive(slave) {
+	const frag = new DocumentFragment();
+
+	const {He, he, him, his, himself} = getPronouns(slave);
+
+	const text = [];
+
+	let fillsHim = '';
+
+	if (V.PC.prostate > 1) {
+		fillsHim = `fills ${him} until ${his} belly is distended and wobbling with your cum`;
+	} else if (V.PC.prostate > 0) {
+		fillsHim = `pours into ${him} until ${he} is stuffed with your cum`;
+	} else if (V.PC.balls > 8) {
+		fillsHim = `pours into ${him}`;
+	} else {
+		fillsHim = `jets into ${his} welcoming depths`;
+	}
+
+	text.push(`${He} ${slave.belly >= 10000 ? `waddles` : `comes`} submissively over, smiling a little submissive smile, and spreads ${himself} for you. ${slave.belly < 5000
+		? `You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your chest; you can feel ${his} heart beating hard.`
+		: `You take ${him} from behind against your desk. ${He} steadies ${himself} as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. As the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate.`}
+	As the sex reaches its climax your semen ${fillsHim} as ${he} begs you to use ${his} unworthy body to make a new slave.`);
+
+	frag.append(text.join(' '));
+
+	return frag;
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationAcceptingNonvirgin(slave) {
+	const frag = new DocumentFragment();
+
+	const {He, he, him, his, himself} = getPronouns(slave);
+
+	const text = [];
+
+	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
+
+	let fillingHim = '';
+
+	if (V.PC.prostate > 1) {
+		fillingHim = `flowing into ${him} until ${his} stomach is distended and wobbling with your cum`;
+	} else if (V.PC.prostate > 0) {
+		fillingHim = `pouring into ${him} until ${he} is stuffed with your cum`;
+	} else if (V.PC.balls > 8) {
+		fillingHim = `pouring into ${him}`;
+	} else {
+		fillingHim = `jetting into ${him}`;
+	}
+
+	text.push(`${slave.belly < 5000
+		? `${He} skips over smiling and gives you a quick kiss. You take ${him} on the couch next to your desk in the missionary position. ${He} hugs ${his} torso to you and ${his} breasts press against your ${V.PC.boobs > 300 ? `own;` : `chest; `} you can feel ${his} heart beating hard. As the sex reaches its climax, ${his} kisses grow urgent and passionate. ${He} clings to you,`
+		: `${He} waddles over smiling and leans in to give you a quick kiss. You decide to take ${him} from behind against your desk. ${He} steadies ${himself} against the furniture as ${he} feels your hands roaming across ${his} ${bellyAdjective(slave)} belly. You begin to pound into ${him} and as the sex reaches its climax, ${his} breaths grow short and ${his} moans passionate. As you reach your respective peaks, ${he} pushes ${himself} back against you, feeling`}
+	your semen ${fillingHim} as ${he} rides the downslope of ${his} orgasm. ${He} kisses you and promises to do ${his} best to use ${his} womb to make ${superfetation ? `another` : `a`} good slave for you.`);
+
+	frag.append(text.join(' '));
+
+	return frag;
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationHesitantNonvirgin(slave) {
+	const frag = new DocumentFragment();
+
+	const {He, he, him, his, himself} = getPronouns(slave);
+
+	const text = [];
+
+	let full = '';
+
+	if (V.PC.prostate > 1) {
+		full = `far beyond capacity`;
+	} else if (V.PC.prostate > 0) {
+		full = `beyond capacity`;
+	} else if (V.PC.balls > 8) {
+		full = `to capacity`;
+	}
+
+	text.push(`${He} obeys, lying on the couch next to your desk${hasAnyLegs(slave) ? ` with ${his} leg${hasBothLegs(slave) ? `s spread` : ` moved aside`}` : ``}. You kneel on the ground and enter ${him}${hasAnyLegs(slave) ? `, a hand on ${hasBothLegs(slave) ? `each of ${his} legs` : `${his} leg`} to give you purchase` : ``}. The pounding is hard and fast, and ${he} gasps and whines. ${slave.belly > 100000 ? `You reach a hand up to tease ${his} already taut dome of a pregnancy.` : `You reach a hand down to maul ${his} breasts.`} ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, but soon loses track of ${his} fears as ${he} enjoys ${himself}. ${He} bites ${his} lip and moans as ${he} climaxes. You follow ${him} over the edge as you give one final, deep thrust before filling ${his} squeezing fuckhole${full} with your cum; ${he} realizes what you've done with a gasp and a worried look.`);
+
+	frag.append(text.join(' '));
+
+	return frag;
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationResistantNonvirgin(slave) {
+	const frag = new DocumentFragment();
+
+	const {He, His, he, him, his} = getPronouns(slave);
+
+	const text = [];
+
+	let fillHim = '';
+
+	if (V.PC.prostate > 1) {
+		fillHim = `filling ${him} until ${his} belly is distended and wobbling with your cum`;
+	} else if (V.PC.prostate > 0) {
+		fillHim = `pouring into ${him} until ${he} is stuffed with your cum`;
+	} else if (V.PC.balls > 8) {
+		fillHim = `pouring into ${him}`;
+	} else {
+		fillHim = `blow your load`;
+	}
+
+	text.push(`${He} tries to refuse, so you bend the disobedient slave over your desk and take ${him} hard from behind. ${His} breasts slide back and forth across the desk. You give ${his} buttocks some nice hard swats as you pound ${him}. ${He} grunts and moans but knows better than to try to get away. ${He} begs you not to cum inside ${him}, knowing ${he}'s fertile, and sobs when ${he} feels you ${fillHim} despite ${his} pleas.`);
+
+	frag.append(text.join(' '));
+
+	return frag;
+}
+
+
 /** @param {App.Entity.SlaveState} slave */
 function consummationVirgin(slave) {
 	const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown;
 	const accepting = slave.devotion > 20;
-	const hesitant = slave.devotion >= -20;
+	const hesitant = slave.devotion >= -20 && slave.devotion <= 20;
 	const resistant = slave.devotion < -20;
 
 	if (pregnancyFetish) {
@@ -579,6 +694,10 @@ function consummationVirgin(slave) {
 /** @param {App.Entity.SlaveState} slave */
 function consummationNonvirgin(slave) {
 	const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown;
+	const submissive = slave.fetish === 'submissive' && slave.fetishStrength > 60 && slave.fetishKnown;
+	const accepting = slave.devotion > 20;
+	const hesitant = slave.devotion >= -20 && slave.devotion <= 20;
+	const resistant = slave.devotion < -20;
 
 	if (pregnancyFetish) {
 		return consummationPregnancyFetishNonvirgin(slave);
@@ -596,6 +715,14 @@ function consummationNonvirgin(slave) {
 		return consummationBigDick(slave);
 	} else if (tooBigBalls(slave)) {
 		return consummationBigBalls(slave);
+	} else if (submissive) {
+		return consummationSubmissive(slave);
+	} else if (accepting) {
+		return consummationAcceptingNonvirgin(slave);
+	} else if (hesitant) {
+		return consummationHesitantNonvirgin(slave);
+	} else if (resistant) {
+		return consummationResistantNonvirgin(slave);
 	}
 }