diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js
index 36bbd38f42027d39a10b4ef24d045c0527bef9f5..e1ed9064b562cb6590d212e977f07e0f9e628f9f 100644
--- a/src/npc/interaction/fPCImpreg.js
+++ b/src/npc/interaction/fPCImpreg.js
@@ -246,12 +246,145 @@ function consummationPregnancyFetishNonvirgin(slave) {
 }
 
 /** @param {App.Entity.SlaveState} slave */
-function consummationPregnancyFetish(slave) {
-	const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0);
+function consummationAcceptingVirgin(slave) {
+	const frag = new DocumentFragment();
+	const devotionSpan = document.createElement('span');
+	const virginityLossSpan = document.createElement('span');
 
-	if (virgin) {
-		return consummationPregnancyFetishVirgin(slave);
+	const {He, His, he, his, him} = getPronouns(slave);
+
+	const text = [];
+
+	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
+	const hole = slave.mpreg ? `asshole` : `pussy`;
+
+	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}`;
+	}
+
+	devotionSpan.classList.add('devotion', 'inc');
+	devotionSpan.textContent = `increases ${his} devotion to you.`;
+
+	virginityLossSpan.classList.add('virginity', 'loss');
+	virginityLossSpan.textContent = `${His} ${hole} has been broken in, and there's a good chance ${he}'s ${superfetation ? `got another bun in the oven` : `pregnant`}.`;
+
+	text.push(`${He} accepts your orders without comment and presents ${his} virgin ${hole} for fertilization. ${He} gasps in shock when ${he} feels your hot seed${fillHim}. ${He} spends the rest of the day struggling with roiling emotions. Since ${he} is already well broken${superfetation ? ` and pregnant` : ``}, this new connection with ${his} ${getWrittenTitle(slave)}`);
+
+	slave.devotion += 10;
+
+	if (slave.mpreg) {
+		slave.anus = 1;
+	} else {
+		slave.vagina = 1;
+	}
+
+	frag.append(text.join(' '), devotionSpan, virginityLossSpan);
+
+	return frag;
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationHesitantVirgin(slave) {
+	const frag = new DocumentFragment();
+	const devotionSpan = document.createElement('span');
+	const virginityLossSpan = document.createElement('span');
+
+	const {He, His, he, his} = getPronouns(slave);
+
+	const text = [];
+
+	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
+	const hole = slave.mpreg ? `asshole` : `pussy`;
+
+	devotionSpan.classList.add('devotion', 'inc');
+	devotionSpan.textContent = `increases ${his} devotion to you.`;
+
+	virginityLossSpan.classList.add('virginity', 'loss');
+	virginityLossSpan.textContent = `${His} ${hole} has been broken in.`;
+
+	text.push(`${He} is clearly unhappy at losing ${his} pearl of great price to you; this probably isn't what ${he} imagined ${his} first real sex would be like. Worse, ${he} knows ${he}'s fertile and realizes ${superfetation ? `${his} existing pregnancy is not going to stop you from adding another baby to ${his} womb.` : `${he}'ll likely get pregnant.`} Nevertheless, this new connection with ${his} ${getWrittenTitle(slave)}`);
+
+	slave.devotion += 4;
+
+	if (slave.mpreg) {
+		slave.anus = 1;
+	} else {
+		slave.vagina = 1;
+	}
+
+	frag.append(text.join(' '), devotionSpan, virginityLossSpan);
+
+	return frag;
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationResistantVirgin(slave) {
+	const frag = new DocumentFragment();
+	const devotionSpan = document.createElement('span');
+	const trustSpan = document.createElement('span');
+	const virginityLossSpan = document.createElement('span');
+
+	const {He, His, he, his, him} = getPronouns(slave);
+
+	const text = [];
+
+	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
+	const hole = slave.mpreg ? `asshole` : `pussy`;
+
+	devotionSpan.classList.add('devotion', 'dec');
+	devotionSpan.textContent = `decreases ${his} devotion to you`;
+
+	trustSpan.classList.add('trust', 'dec');
+	trustSpan.textContent = `fills ${him} with fear.`;
+
+	virginityLossSpan.classList.add('virginity', 'loss');
+	virginityLossSpan.textContent = `${His} ${hole} has been broken in.`;
+
+	text.push(`As you anticipated, ${he} refuses to give you ${his} virginity. And as you expected, ${he} is unable to resist you. ${He} cries as you force yourself on ${him}, your cock piercing ${his} fresh, tight hole. Afterwards, ${he} ${hasAnyArms(slave) ? `clutches ${his} ${bellyAdjective(slave)} stomach` : `lies there`} and sobs, horrified by the knowledge that ${superfetation ? `${his} unborn ${slave.pregType === 1 ? `child is` : `children are`} now sharing quarters with ${his} rapist's child.` : `${he}'s probably carrying ${his} rapist's child.`}`);
+
+	slave.devotion -= 5;
+	slave.trust -= 5;
+
+	if (slave.mpreg) {
+		slave.anus = 1;
 	} else {
+		slave.vagina = 1;
+	}
+
+	frag.append(text.join(' '), devotionSpan, ' and ', trustSpan, virginityLossSpan);
+
+	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 resistant = slave.devotion < -20;
+
+	if (pregnancyFetish) {
+		return consummationPregnancyFetishVirgin(slave);
+	} else if (accepting) {
+		return consummationAcceptingVirgin(slave);
+	} else if (hesitant) {
+		return consummationHesitantVirgin(slave);
+	} else if (resistant) {
+		return consummationResistantVirgin(slave);
+	}
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function consummationNonvirgin(slave) {
+	const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown;
+
+	if (pregnancyFetish) {
 		return consummationPregnancyFetishNonvirgin(slave);
 	}
 }
@@ -263,10 +396,12 @@ function consummationPregnancyFetish(slave) {
 function consummation(slave) {
 	const frag = new DocumentFragment();
 
-	const pregnancyFetish = slave.fetish === 'pregnancy' && slave.fetishStrength > 60 && slave.fetishKnown;
+	const virgin = slave.vagina === 0 || (slave.mpreg && slave.anus === 0);
 
-	if (pregnancyFetish) {
-		frag.appendChild(consummationPregnancyFetish(slave));
+	if (virgin) {
+		frag.appendChild(consummationVirgin(slave));
+	} else {
+		frag.appendChild(consummationNonvirgin(slave));
 	}
 
 	return frag;