diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index d56550acdb62f5c6634dd54498e340cc30fe5bee..e835c9e40aa0b1784e43d4d6732aed37cb4a3209 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -15,10 +15,6 @@ App.Interact.fAnimal = function(slave, type) {
 		ORAL: "oral",
 	};
 
-	const vaginal = Acts.VAGINAL;
-	const anal = Acts.ANAL;
-	const oral = Acts.ORAL;
-
 	const approvingFetishes = ["masochist", "humiliation", "perverted", "sinful"];	// not strictly fetishes, but approvingFetishesAndBehavioralQuirksAndSexualQuirks doesn't have the same ring to it
 
 	const animal = V.active[type];
@@ -30,49 +26,49 @@ App.Interact.fAnimal = function(slave, type) {
 	let hole;
 	let orifice;
 
-	const anAnimal = animal.articleAn ? `an ${animal.name}` : `a ${animal.name}`;
+	const anAnimal = `${animal.articleAn} ${animal.name}`;
 
 	if (slave.assignment === Job.FUCKTOY || slave.assignment === Job.MASTERSUITE) {
 		if (slave.toyHole === "pussy") {
-			act = vaginal;
+			act = Acts.VAGINAL;
 		} else if (slave.toyHole === "ass") {
-			act = anal;
+			act = Acts.ANAL;
 		} else if (slave.toyHole === "mouth") {
-			act = oral;
+			act = Acts.ORAL;
 		} else {
 			if (canDoVaginal(slave)) {
-				act = vaginal;
+				act = Acts.VAGINAL;
 			} else if (canDoAnal(slave)) {
-				act = anal;
+				act = Acts.ANAL;
 			} else {
-				act = oral;
+				act = Acts.ORAL;
 			}
 		}
 	} else if (canDoVaginal(slave)) {
-		act = vaginal;
+		act = Acts.VAGINAL;
 	} else if (canDoAnal(slave)) {
-		act = anal;
+		act = Acts.ANAL;
 	} else {
-		act = oral;
+		act = Acts.ORAL;
 	}
 
 	const slaveApproves = () =>
 		approvingFetishes.includes(slave.fetish) ||
 		approvingFetishes.includes(slave.sexualQuirk) ||
 		approvingFetishes.includes(slave.behavioralQuirk) ||
-		slave.fetish === "buttslut" && act === anal ||
-		slave.fetish === "cumslut" && act === oral ||
-		slave.sexualQuirk === "gagfuck queen" && act === oral;
+		slave.fetish === "buttslut" && act === Acts.ANAL ||
+		slave.fetish === "cumslut" && act === Acts.ORAL ||
+		slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL;
 
 	switch (act) {
-		case oral:
+		case Acts.ORAL:
 			orifice = () => either("mouth", "throat");
 			break;
-		case vaginal:
+		case Acts.VAGINAL:
 			orifice = () => either("pussy", "cunt");
 			hole = 0;
 			break;
-		case anal:
+		case Acts.ANAL:
 			orifice = () => either("asshole", "rectum");
 			hole = 1;
 			break;
@@ -80,17 +76,17 @@ App.Interact.fAnimal = function(slave, type) {
 			throw new Error(`Unexpected act type '${act}' in fAnimal()`);
 	}
 
-	if (slave.fetish === "cumslut" && act === oral) {
+	if (slave.fetish === "cumslut" && act === Acts.ORAL) {
 		fetishDesc = `getting to drink more cum`;
 	} else if (slave.fetish === "humiliation") {
 		fetishDesc = `committing such a humiliating act`;
-	} else if (slave.fetish === "buttslut" && act === anal) {
+	} else if (slave.fetish === "buttslut" && act === Acts.ANAL) {
 		fetishDesc = `getting to take a cock up ${his} ass`;
 	} else if (slave.fetish === "masochist") {
 		fetishDesc = `committing such a painful act`;
 	} else if (slave.sexualQuirk === "perverted") {
 		fetishDesc = `committing such a perverted act`;
-	} else if (slave.sexualQuirk === "gagfuck queen" && act === oral) {
+	} else if (slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL) {
 		fetishDesc = `getting to suck more dick`;
 	} else if (slave.behavioralQuirk === "sinful") {
 		fetishDesc = `committing such a sinful act`;
@@ -121,9 +117,9 @@ App.Interact.fAnimal = function(slave, type) {
 			r.push(`You order another slave to bring ${slave.slaveName} over. Once ${he} is situated, you`);
 		}
 
-		r.push(`tell ${him} you want to watch ${him} ${act === oral ?
+		r.push(`tell ${him} you want to watch ${him} ${act === Acts.ORAL ?
 			`suck off` :
-			act === vaginal ?
+			act === Acts.VAGINAL ?
 				`get fucked by` :
 				`get fucked in the ass by`} ${anAnimal}. `);
 
@@ -152,14 +148,14 @@ App.Interact.fAnimal = function(slave, type) {
 		function introDevoted() {
 			const mainSpan = document.createElement("span");
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				if (slaveApproves()) {
 					mainSpan.append(`${slave.slaveName}'s face visibly brightens at the prospect of ${fetishDesc}, even if it's an animal${slave.fetish === "cumslut" ? `'s cum` : ` that ${he} has to suck off`}. `);
 				} else {
 					mainSpan.append(`${slave.slaveName} visibly blanches at the thought of having to suck down an animal's cum, but ${he} is so devoted to you that ${he} reluctantly agrees. `);
 				}
 			} else {
-				if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) {
+				if ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) {
 					if (slaveApproves()) {
 						mainSpan.append(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, even if the dick is an animal's. `);
 					} else {
@@ -180,14 +176,14 @@ App.Interact.fAnimal = function(slave, type) {
 		function introNondevoted() {
 			const mainSpan = document.createElement("span");
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				if (slaveApproves()) {
 					mainSpan.append(`${slave.slaveName} isn't too keen on the idea of sucking off an animal, but the idea of ${fetishDesc} is enough to get ${him} to comply. `);
 				} else {
 					mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an animal, but quickly regains ${his} composure. `);
 				}
 			} else {
-				if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) {
+				if ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) {
 					if (slaveApproves()) {
 						mainSpan.append(`${slave.slaveName} doesn't seem terribly keen on the idea of fucking an animal, but the thought of ${fetishDesc} seems to be enough to win ${him} over. `);
 					} else {
@@ -195,9 +191,9 @@ App.Interact.fAnimal = function(slave, type) {
 					}
 				} else {
 					if (slaveApproves()) {
-						mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `);
+						mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === Acts.ANAL ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `);
 					} else {
-						mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === anal ? `rosebud` : `pearl`} taken by a beast, but quickly regains ${his} composure. `);
+						mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === Acts.ANAL ? `rosebud` : `pearl`} taken by a beast, but quickly regains ${his} composure. `);
 					}
 				}
 			}
@@ -208,14 +204,14 @@ App.Interact.fAnimal = function(slave, type) {
 		function introNonresistant() {
 			const mainSpan = document.createElement("span");
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				if (slaveApproves()) {
 					mainSpan.append(`${slave.slaveName} looks disgusted at the thought of sucking off an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `);
 				} else {
 					mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of blowing an animal${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `);
 				}
 			} else {
-				if ((act === vaginal && slave.vagina > 0) || (act === anal && slave.anus > 0)) {
+				if ((act === Acts.VAGINAL && slave.vagina > 0) || (act === Acts.ANAL && slave.anus > 0)) {
 					if (slaveApproves()) {
 						mainSpan.append(`${slave.slaveName} looks disgusted at the thought of fucking an animal at first, but the thought of the ${fetishDesc} that comes with it seems to spark a small flame of lust in ${him}. `);
 					} else {
@@ -223,9 +219,9 @@ App.Interact.fAnimal = function(slave, type) {
 					}
 				} else {
 					if (slaveApproves()) {
-						mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === anal ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `);
+						mainSpan.append(`${slave.slaveName} clearly has some reservations about having ${his} ${act === Acts.ANAL ? `anal ` : ``}virginity taken by ${anAnimal}, but the thought of ${fetishDesc} is enough to make agree to comply. `);
 					} else {
-						mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === anal ? `rosebud` : `pearl`} taken by a beast${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `);
+						mainSpan.append(`${slave.slaveName} tries in vain to conceal ${his} horror at the thought of having ${his} precious ${act === Acts.ANAL ? `rosebud` : `pearl`} taken by a beast${canWalk(slave) ? `, and only the threat of worse punishment keeps ${him} from running away as fast as ${he} can` : ``}. `);
 					}
 				}
 			}
@@ -264,7 +260,7 @@ App.Interact.fAnimal = function(slave, type) {
 				mainSpan = document.createElement("span"),
 				r = [];
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`You have ${him} kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
 				r.push(`You have ${him} ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
@@ -284,12 +280,12 @@ App.Interact.fAnimal = function(slave, type) {
 					throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`);
 			}
 
-			if (act !== oral) {
+			if (act !== Acts.ORAL) {
 				mainSpan.append(virginityCheck(act));
 			}
 
 			function consummationDevotedCanine(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave seems to quickly get over the fact that the dick currently in ${his} mouth belongs to a canine as ${his} more carnal desires kick in. `);
 					} else {
@@ -302,12 +298,12 @@ App.Interact.fAnimal = function(slave, type) {
 						r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `);
 					}
 
-					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
+					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
 				}
 			}
 
 			function consummationDevotedHooved(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth is not a human one as ${his} more carnal desires kick in. `);
 					} else {
@@ -319,7 +315,7 @@ App.Interact.fAnimal = function(slave, type) {
 			}
 
 			function consummationDevotedFeline(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave seems to quickly get over the fact that dick currently in ${his} mouth belongs to ${anAnimal} as ${his} more carnal desires kick in. `);
 					} else {
@@ -340,7 +336,7 @@ App.Interact.fAnimal = function(slave, type) {
 				mainSpan = document.createElement("span"),
 				r = [];
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`You tell ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave hesitantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock, and, after taking a moment to steel ${his} resolve, begins to give it a few reluctant licks before putting it in ${his} mouth. `);
 			} else {
 				r.push(`You tell ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
@@ -360,12 +356,12 @@ App.Interact.fAnimal = function(slave, type) {
 					throw new Error(`Unexpected animal type '${animal}' in consummationDevoted()`);
 			}
 
-			if (act !== oral) {
+			if (act !== Acts.ORAL) {
 				mainSpan.append(virginityCheck(act));
 			}
 
 			function consummationNondevotedCanine(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -378,12 +374,12 @@ App.Interact.fAnimal = function(slave, type) {
 						r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `);
 					}
 
-					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
+					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
 				}
 			}
 
 			function consummationNondevotedHooved(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -395,7 +391,7 @@ App.Interact.fAnimal = function(slave, type) {
 			}
 
 			function consummationNondevotedFeline(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -416,7 +412,7 @@ App.Interact.fAnimal = function(slave, type) {
 				mainSpan = document.createElement("span"),
 				r = [];
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`You force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reluctantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
 				r.push(`You force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
@@ -436,12 +432,12 @@ App.Interact.fAnimal = function(slave, type) {
 					throw new Error(`Unexpected animal type '${animal}' in consummationNonresistant()`);
 			}
 
-			if (act !== oral) {
+			if (act !== Acts.ORAL) {
 				mainSpan.append(virginityCheck(act));
 			}
 
 			function consummationNonresistantCanine(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to ${anAnimal} soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -454,12 +450,12 @@ App.Interact.fAnimal = function(slave, type) {
 						r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `);
 					}
 
-					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
+					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
 				}
 			}
 
 			function consummationNonresistantHooved(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off ${anAnimal}, ${he} seems to forget that the cock in ${his} mouth isn't human soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -471,7 +467,7 @@ App.Interact.fAnimal = function(slave, type) {
 			}
 
 			function consummationNonresistantFeline(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`Though the slave still seems to have some reservations about sucking off an animal, ${he} seems to forget that the cock in ${his} mouth belongs to a feline soon enough, once ${his} carnal desires kick in. `);
 					} else {
@@ -492,7 +488,7 @@ App.Interact.fAnimal = function(slave, type) {
 				mainSpan = document.createElement("span"),
 				r = [];
 
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`You have to physically force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} is restrained, showing little concern when another slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, the slave takes its cock and lines it up with ${slave.slaveName}'s mouth. The animal needs no prompting, and thrusts itself into ${his} ring-gagged mouth. `);
 			} else {
 				r.push(`You have to physically force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
@@ -512,12 +508,12 @@ App.Interact.fAnimal = function(slave, type) {
 					throw new Error(`Unexpected animal type '${animal}' in consummationResistant()`);
 			}
 
-			if (act !== oral) {
+			if (act !== Acts.ORAL) {
 				mainSpan.append(virginityCheck(act));
 			}
 
 			function consummationResistantCanine(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave glares daggers at you as ${he} takes the full length of the canine's cock in ${his} mouth, but ${slave.dick ?
 							canAchieveErection(slave) ?
@@ -537,12 +533,12 @@ App.Interact.fAnimal = function(slave, type) {
 						r.push(`The canine takes a few curious sniffs, then lines up its large cock with ${slave.slaveName}'s ${orifice()}. `);
 					}
 
-					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === vaginal ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
+					r.push(`It takes a few tries, but the ${animal.name} finally manages to sink its cock into ${his} ${slaveApproves() && act === Acts.VAGINAL ? `wet ` : ``}${orifice()} and begin to hammer away in the way that only canines can. `);
 				}
 			}
 
 			function consummationResistantHooved(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave glares daggers at you as ${he} takes the full length of the ${animal.name}'s cock in ${his} mouth, but ${slave.dick ?
 							canAchieveErection(slave) ?
@@ -561,7 +557,7 @@ App.Interact.fAnimal = function(slave, type) {
 			}
 
 			function consummationResistantFeline(type) {
-				if (type === oral) {
+				if (type === Acts.ORAL) {
 					if (slaveApproves()) {
 						r.push(`The slave glares daggers at you as ${he} takes the full length of the feline's cock in ${his} mouth, but ${slave.dick ?
 							canAchieveErection(slave) ?
@@ -608,28 +604,28 @@ App.Interact.fAnimal = function(slave, type) {
 				throw new Error(`Unexpected animal type '${animal}' in completion()`);
 		}
 
-		if (act !== oral && canGetPregnant(slave) && canBreed(slave, animal)) {
+		if (act !== Acts.ORAL && canGetPregnant(slave) && canBreed(slave, animal)) {
 			knockMeUp(slave, 5, hole, -8);
 		}
 
 		function completionCanine() {
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz down ${his} abused throat. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s mouth, causing ${him} to immediately begin coughing and retching uncontrollably. Having finished its business, the ${animal.name} runs off, presumably in search of food. `);
 			} else {
-				r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === vaginal && slave.vagina < 3 || act === anal && slave.anus < 2 ?
+				r.push(`The ${animal.species === "dog" ? `hound` : animal.name} wastes no time in beginning to hammer away at ${his} ${orifice()}, causing ${slave.slaveName} to moan uncontrollably as its thick, veiny member probes the depths of ${his} ${orifice()}. A few short minutes later, ${he} gives a loud groan ${slaveApproves() ? `and shakes in orgasm ` : ``}as the ${animal.name}'s knot begins to swell and its dick begins to erupt a thick stream of jizz into ${his} ${orifice()}. Soon enough, the ${animal.name} finally finishes cumming and its knot is sufficiently small enough to slip out of ${slave.slaveName}'s ${act === Acts.VAGINAL && slave.vagina < 3 || act === Acts.ANAL && slave.anus < 2 ?
 					`now-gaping ${orifice()}` :
 					orifice()}, causing a thick stream of cum to slide out of it. Having finished its business, the ${animal.name} runs off, presumably in search of food. `);
 			}
 
 			switch (act) {
-				case oral:
+				case Acts.ORAL:
 					slave.counter.oral++;
 					break;
-				case vaginal:
+				case Acts.VAGINAL:
 					slave.counter.vaginal++;
 					slave.vagina = slave.vagina < 3 ? 3 : slave.vagina;
 					break;
-				case anal:
+				case Acts.ANAL:
 					slave.counter.anal++;
 					slave.anus = slave.anus < 2 ? 2 : slave.anus;
 					break;
@@ -639,21 +635,21 @@ App.Interact.fAnimal = function(slave, type) {
 		}
 
 		function completionHooved() {
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan past the huge ${animal.species} cock stretching ${his} poor throat to its limits. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and pour its thick semen down ${his} throat and into ${his} stomach, filling it to the brim. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, causing ${slave.slaveName} to begin coughing and retching uncontrollably. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `);
 			} else {
-				r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === vaginal ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `);
+				r.push(`The ${animal.species === "horse" ? `stallion` : animal.name} begins to thrust faster and faster, causing ${him} to moan and groan as the huge ${animal.species} cock ${act === Acts.VAGINAL ? `batters ${his} cervix` : `fills ${him} completely`}. Before too long, the ${animal.name}'s movements begin to slow, and you can see its large testicles contract as its begins to erupt and fill ${his} ${orifice()} with its thick baby batter. After what seems like an impossibly long time, the ${animal.name}'s dick finally begins to soften and pull out, leaving ${slave.slaveName} panting and covered in sweat. You have another slave lead the ${animal.name} away, with a fresh apple as a treat for its good performance. `);
 			}
 
 			switch (act) {
-				case oral:
+				case Acts.ORAL:
 					slave.counter.oral++;
 					break;
-				case vaginal:
+				case Acts.VAGINAL:
 					slave.counter.vaginal++;
 					slave.vagina = slave.vagina < 4 ? 4 : slave.vagina;
 					break;
-				case anal:
+				case Acts.ANAL:
 					slave.counter.anal++;
 					slave.anus = slave.anus < 3 ? 3 : slave.anus;
 					break;
@@ -663,7 +659,7 @@ App.Interact.fAnimal = function(slave, type) {
 		}
 
 		function completionFeline() {
-			if (act === oral) {
+			if (act === Acts.ORAL) {
 				r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} mouth and throat raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts down ${slave.slaveName}'s throat. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `);
 			} else {
 				r.push(`The ${animal.name} begins to move, thrusting faster and faster. The ${girl} underneath it can't stop a groan of pain from escaping ${his} lips as the ${animal.species}'s barbed dick rubs the inside of ${his} ${orifice()} raw. After a few minutes of painful coupling, the ${animal.species}'s thrusts finally slow, then stop completely as its ${animal.species !== "cat" ? `large` : ``} cock erupts, filling ${slave.slaveName} with its sperm. With a ${animal.species !== "cat" ? `deep bellow` : `loud meow`}, he finally dismounts, gives you a long look, then stalks off. `);
@@ -672,14 +668,14 @@ App.Interact.fAnimal = function(slave, type) {
 			healthDamage(slave, 1);
 
 			switch (act) {
-				case oral:
+				case Acts.ORAL:
 					slave.counter.oral++;
 					return;
-				case vaginal:
+				case Acts.VAGINAL:
 					slave.counter.vaginal++;
 					slave.vagina = slave.vagina < 2 ? 2 : slave.vagina;
 					return;
-				case anal:
+				case Acts.ANAL:
 					slave.counter.anal++;
 					slave.anus = slave.anus < 1 ? 1 : slave.anus;
 					return;
@@ -702,21 +698,21 @@ App.Interact.fAnimal = function(slave, type) {
 
 		if (jsRandom(1, 100) > 100 + slave.devotion) {
 			switch (act) {
-				case oral:
+				case Acts.ORAL:
 					if (slave.energy < 95 && slave.sexualFlaw !== "hates oral") {
 						mainSpan.append(`Having ${anAnimal} fuck ${his} throat by force has given ${him} a hatred of oral sex. `);
 					}
 					slave.sexualFlaw = "hates oral";
 
 					break;
-				case vaginal:
+				case Acts.VAGINAL:
 					if (slave.energy < 95 && slave.sexualFlaw !== "hates penetration") {
 						mainSpan.append(`Having ${anAnimal} fuck ${him} by force has given ${him} a hatred of penetration. `);
 					}
 					slave.sexualFlaw = "hates penetration";
 
 					break;
-				case anal:
+				case Acts.ANAL:
 					if (slave.energy < 95 && slave.sexualFlaw !== "hates anal") {
 						mainSpan.append(`Having ${anAnimal} fuck ${his} asshole by force has given ${him} a hatred of anal penetration. `);
 					}
@@ -736,8 +732,8 @@ App.Interact.fAnimal = function(slave, type) {
 			mainSpan = document.createElement("span"),
 			r = [];
 
-		if (act !== oral) {
-			if (act === vaginal) {
+		if (act !== Acts.ORAL) {
+			if (act === Acts.VAGINAL) {
 				if (slave.vagina === 3) {
 					r.push(`${capFirstChar(animal.name)} cum drips out of ${his} fucked-out hole. `);
 				} else if (slave.vagina === 2) {
@@ -832,8 +828,8 @@ App.Interact.fAnimal = function(slave, type) {
 			virginityLossSpan = App.UI.DOM.makeElement("span", '', ["virginity", "loss"]);
 
 		switch (type) {
-			case vaginal:
-				if (act === vaginal && slave.vagina === 0) {
+			case Acts.VAGINAL:
+				if (act === Acts.VAGINAL && slave.vagina === 0) {
 					virginityLossSpan.append(`${his} virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `);
 
 					mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as `, virginityLossSpan, ` `);
@@ -842,8 +838,8 @@ App.Interact.fAnimal = function(slave, type) {
 				}
 
 				return mainSpan;
-			case anal:
-				if (act === anal && slave.anus === 0) {
+			case Acts.ANAL:
+				if (act === Acts.ANAL && slave.anus === 0) {
 					mainSpan.append(`The slave gives a loud ${slave.devotion > 20 ? `moan` : `groan`} as ${his} anal virginity is taken from ${him}${slave.devotion < -20 ? ` by force` : ``}. `);
 
 					mainSpan.append(virginityEffects(type));
@@ -863,7 +859,7 @@ App.Interact.fAnimal = function(slave, type) {
 			healthSpan = App.UI.DOM.makeElement("span", '', ["health", "dec"]);
 
 		switch (type) {
-			case vaginal:
+			case Acts.VAGINAL:
 				if (slave.devotion >= -20) {
 					if (slaveApproves()) {
 						devotionSpan.classList.add("devotion", "inc");
@@ -926,7 +922,7 @@ App.Interact.fAnimal = function(slave, type) {
 				healthDamage(slave, 5);
 
 				return mainSpan;
-			case anal:
+			case Acts.ANAL:
 				if (slave.devotion >= -20) {
 					if (slaveApproves()) {
 						devotionSpan.classList.add("devotion", "inc");