diff --git a/src/npc/interaction/fDick.js b/src/npc/interaction/fDick.js
index 1c2f2b7d510235d5595bf002454e0335b6e12ee9..9778f3f5fcf814a5a4d7dd8791bebdda860780f8 100644
--- a/src/npc/interaction/fDick.js
+++ b/src/npc/interaction/fDick.js
@@ -12,9 +12,10 @@ App.Interact.fDick = function(slave) {
 
 	// TODO: .pregMood and more amp variants
 
-	seX(slave, "penetrative", V.PC, V.PC.vagina !== -1 ? "vaginal" : "anal");
+	const anusFirst = (getPCPreferredHole() || V.PC.vagina === -1) === "anus";
+	seX(slave, "penetrative", V.PC, !anusFirst ? "vaginal" : "anal");
 
-	const cunt = V.PC.vagina !== -1 ? "cunt" : "rectal"; // TODO: probably ought to be able to *choose* vaginal or anal sex if they're both valid
+	const cunt = !anusFirst ? "cunt" : "rectal"; // TODO: probably ought to be able to *choose* vaginal or anal sex if they're both valid
 	const belly = bellyAdjective(slave);
 	const amount = cumAmount(slave);
 
@@ -97,10 +98,10 @@ App.Interact.fDick = function(slave) {
 	if (canImpreg(V.PC, slave)) {
 		if (slave.diet === "cum production") {
 			const pregChance = (slave.balls * 5 * 1.2);
-			text.push(knockMeUp(V.PC, pregChance, 0, slave.ID));
+			text.push(knockMeUp(V.PC, pregChance, anusFirst ? 1 : 0, slave.ID));
 		} else {
 			const pregChance = (slave.balls * 5);
-			text.push(knockMeUp(V.PC, pregChance, 0, slave.ID));
+			text.push(knockMeUp(V.PC, pregChance, anusFirst ? 1 : 0, slave.ID));
 		}
 	}
 
@@ -113,16 +114,16 @@ App.Interact.fDick = function(slave) {
 	function consummation() {
 		const text = [];
 
-		if (V.PC.vagina === 0) {
+		if (V.PC.vagina === 0 && !anusFirst) {
 			text.push(`You've decided that this is the day to finally <span class="virginity loss">lose your virginity,</span> and ${slave.slaveName} is going to help you do it.`);
-		} else if (V.PC.vagina === -1 && V.PC.anus === 0) {
+		} else if (anusFirst && V.PC.anus === 0) {
 			text.push(`You've decided that this is the day to finally <span class="virginity loss">lose your anal virginity,</span> and ${slave.slaveName} is going to help you do it.`);
 		}
 
 		if (!isAmputee(slave)) {
 			text.push(`You direct ${slave.slaveName} to lie down and ready ${himself} as you step over to ${him} and align your`);
 
-			if (V.PC.vagina !== -1 && getPCPreferredHole() === "vagina") {
+			if (!anusFirst) {
 				if (V.PC.vagina === 0) {
 					text.push(`untouched`);
 					V.PC.vagina = 1;
@@ -195,7 +196,7 @@ App.Interact.fDick = function(slave) {
 			if (slave.fetish === Fetish.MINDBROKEN) {
 				text.push(`Like a doll, ${he} dumbly remains still, completely indifferent that ${he}'s deep in ${his} ${getWrittenTitle(slave)}'s`);
 
-				if (V.PC.vagina !== -1) {
+				if (!anusFirst) {
 					text.push(`pussy.`);
 				} else {
 					text.push(`butt.`);
@@ -203,7 +204,7 @@ App.Interact.fDick = function(slave) {
 
 				text.push(`You start moving up and on ${his} shaft, continuing until you climax and lift yourself off of ${him}. A strand of cum slips from your`);
 
-				if (V.PC.vagina !== -1) {
+				if (!anusFirst) {
 					text.push(`slit;`);
 				} else {
 					text.push(`anus;`);
@@ -299,7 +300,7 @@ App.Interact.fDick = function(slave) {
 					}
 
 					text.push(`Such audacity takes you entirely by surprise and gives ${him} the edge ${he} needs to pull it off. ${He} vigorously pistons in and out of you with little regard for you${(V.PC.pregKnown === 1) ? ` or your pregnancy` : ``}, fucking you senseless until ${he} has had enough and cums deep inside your`);
-					if (V.PC.vagina !== -1) {
+					if (!anusFirst) {
 						text.push(`pussy.`);
 					} else {
 						text.push(`ass.`);
@@ -312,7 +313,21 @@ App.Interact.fDick = function(slave) {
 							text.push(`Grinding against`);
 						}
 
-						text.push(`your firm belly, ${he} decides ${his} job is not yet done and begins reaming you once more, dead set on taking this opportunity to <span class="orangered">show you your place by knocking you up with ${his} child.</span> ${He} manages to empty ${his} balls in your ${V.PC.mpreg ? "anal " : ""}womb several more times before exhaustion kicks in, forcing ${him} to leave you twitching and drooling cum.`);
+						text.push(`your firm belly, ${he} decides ${his} job is not yet done`);
+						if (anusFirst && V.PC.mpreg !== 1) {
+							text.push(`so ${he} withdraws his dick from your backhole, shoves it in your ${V.PC.vagina < 2 ? "pussy" : "cunt"},`);
+							if (V.PC.vagina === 0) {
+								text.push(`<span class="virginity loss">taking your virginity in the way</span>,`);
+								V.PC.vagina++;
+							}
+						} else if (!anusFirst && V.PC.mpreg === 1) {
+							text.push(`so ${he} withdraws his dick from your useless cunt, shoves it in your ${V.PC.anus < 2 ? "anus" : "backhole"},`);
+							if (V.PC.anus === 0) {
+								text.push(`<span class="virginity loss">taking your anal virginity in the way</span>,`);
+								V.PC.anus++;
+							}
+						}
+						text.push(` and begins reaming you once more, dead set on taking this opportunity to <span class="orangered">show you your place by knocking you up with ${his} child.</span> ${He} manages to empty ${his} balls in your ${V.PC.mpreg ? "anal " : ""}womb several more times before exhaustion kicks in, forcing ${him} to leave you twitching and drooling cum.`)
 						text.push(knockMeUp(V.PC, 100, 2, slave.ID));
 						if (V.PC.mpreg) {
 							seX(V.PC, "anal", slave, "penetrative", 5);
@@ -348,7 +363,7 @@ App.Interact.fDick = function(slave) {
 		} else {
 			text.push(`You step over to pick up ${slave.slaveName}, lie ${him} down and get ${him} ready. Then you align your`);
 
-			if (V.PC.vagina !== -1) {
+			if (!anusFirst) {
 				if (V.PC.vagina === 0) {
 					text.push(`untouched`);
 				}