diff --git a/src/interaction/siWork.js b/src/interaction/siWork.js
index e5d725032e7b7f2c332cd9832e90d7e7b8a5dbe1..b0cf25ab354e879fc695dce693b211625e0f9425 100644
--- a/src/interaction/siWork.js
+++ b/src/interaction/siWork.js
@@ -409,7 +409,10 @@ App.UI.SlaveInteract.work = function(slave, refresh) {
 
 			if (canGetPregnant(slave) && (slave.geneticQuirks.superfetation !== 2 || V.geneticMappingUpgrade !== 0) && (slave.fuckdoll === 0) && V.seePreg !== 0) {
 				if (canImpreg(slave, V.PC)) {
-					sexOptions.push({text: `Impregnate ${him} yourself`, scene: `FPCImpreg`});
+					sexOptions.push({
+						text: `Impregnate ${him} yourself`,
+						get scene() { return App.Interact.fPCImpreg(slave); },
+					});
 				}
 				if (canImpreg(slave, slave)) {
 					sexOptions.push({text: `Use ${his} own seed to impregnate ${him}`, scene: `FSlaveSelfImpreg`});
diff --git a/src/npc/interaction/fPCImpreg.js b/src/npc/interaction/fPCImpreg.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bfd3e45a715876bd3b3096a1b2d9f7d62ff3f69
--- /dev/null
+++ b/src/npc/interaction/fPCImpreg.js
@@ -0,0 +1,132 @@
+/**
+ * @param {App.Entity.SlaveState} slave
+ * @returns {DocumentFragment}
+ */
+App.Interact.fPCImpreg = function(slave) {
+	const frag = new DocumentFragment();
+
+	frag.append(intro(slave));
+
+	addPartner(slave, -1);
+
+	return frag;
+};
+
+/** @param {App.Entity.SlaveState} slave */
+function impregnateAnus(slave) {
+	const {his, him} = getPronouns(slave);
+
+	const asshole = slave.geneticQuirks.superfetation === 2 && slave.pregKnown
+		? `asshole and put another baby in ${him}`
+		: `asshole`;
+
+	if (slave.anus > 2) {
+		return `fuck ${his} gaping, fertile ${asshole}.`;
+	} else if (slave.anus === 2) {
+		return `use ${his} whorish, fertile ${asshole}.`;
+	} else if (slave.anus === 1) {
+		return `use ${his} tight, fertile ${asshole}.`;
+	} else if (slave.anus === 0) {
+		return `take ${his} fertile, virgin ${asshole}.`;
+	} else {
+		throw new Error(`Unexpected anus value '${slave.anus}' in impregnateAnus()`);
+	}
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function impregnateVagina(slave) {
+	const {his} = getPronouns(slave);
+
+	if (slave.vagina > 2) {
+		return `fuck ${his} gaping, fertile cunt.`;
+	} else if (slave.vagina === 2) {
+		return `use ${his} whorish, fertile cunt.`;
+	} else if (slave.vagina === 1) {
+		return `use ${his} tight, fertile cunt.`;
+	} else if (slave.anus === 0) {
+		return `take ${his} fertile, virgin pussy.`;
+	} else {
+		throw new Error(`Unexpected vagina value '${slave.vagina}' in impregnateVagina()`);
+	}
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function getVaginaTat(slave) {
+	const {his, him} = getPronouns(slave);
+
+	if (slave.vaginaTat === "tribal patterns") {
+		return `The tattoos on ${his} abdomen certainly draw attention there.`;
+	} else if (slave.vaginaTat === "scenes") {
+		return `The tattoos on ${his} abdomen nicely illustrate what you mean to do to ${him}.`;
+	} else if (slave.vaginaTat === "degradation") {
+		return `The tattoos on ${his} abdomen ask you to, after all.`;
+	} else if (slave.vaginaTat === "lewd crest") {
+		return `The crest on ${his} abdomen eagerly awaits a womb stuffed with cum.`;
+	}
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function getClit(slave) {
+	const {His} = getPronouns(slave);
+
+	if (slave.clit === 1) {
+		return `${His} big clit ${slave.foreskin ? `peeks out from under its hood` : `can't be missed`}.`;
+	} else if (slave.clit > 1) {
+		return `${His} huge clit is impossible to miss.`;
+	}
+}
+
+/** @param {App.Entity.SlaveState} slave */
+function getPiercings(slave) {
+	const {His, him} = getPronouns(slave);
+
+	if (slave.vaginaPiercing > 1) {
+		return `${His} pierced lips and clit have ${him} nice and wet.`;
+	} else if (slave.vaginaPiercing === 1) {
+		return `${His} pierced clit has ${him} nice and moist.`;
+	}
+}
+
+/**
+ * @param {App.Entity.SlaveState} slave
+ * @returns {DocumentFragment}
+ */
+function intro(slave) {
+	const frag = new DocumentFragment();
+
+	const {him, his} = getPronouns(slave);
+
+	const text = [];
+
+	const superfetation = slave.geneticQuirks.superfetation === 2 && slave.pregKnown;
+
+	text.push(`You call ${him} over so you can`);
+
+	if (slave.mpreg) {
+		text.push(impregnateAnus(slave));
+
+		text.push(`The crest on ${his} abdomen eagerly awaits a womb stuffed with cum, and who are you to deny its request?`);
+	} else {
+		text.push(impregnateVagina(slave));
+
+		if (superfetation) {
+			text.push(`You plan on putting another baby in ${him}.`);
+		}
+
+		if (slave.vaginaTat) {
+			text.push(getVaginaTat(slave));
+		}
+
+		if (slave.clit > 0) {
+			text.push(getClit(slave));
+		}
+
+		if (slave.vaginaPiercing > 0) {
+			text.push(getPiercings(slave));
+		}
+	}
+
+	App.UI.DOM.appendNewElement('div', frag, App.UI.DOM.toSentence(text));
+
+	return frag;
+}