diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index 16083f4b7f1d055ca02928867c5371887bc439c5..79b563ca34086592dd2dcbf392b55528d74e0fb8 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -26,8 +26,9 @@ App.Interact.fAnimal = function(slave, type) {
 	/** @type {App.Entity.Animal} */
 	const animal = V.active[type];
 
-	let fetishDesc;
+	/** @type {0|1|2} */
 	let hole;
+	let fetishDesc;
 	let orifice;
 
 	const anAnimal = `${animal.articleAn} ${animal.name}`;
@@ -98,9 +99,7 @@ App.Interact.fAnimal = function(slave, type) {
 		fetishDesc = `committing such a sinful act`;
 	}
 
-	const div = App.UI.DOM.appendNewElement("div", frag);
-
-	let text = [];
+	const text = new SpacedTextAccumulator(frag);
 
 	if (canWalk(slave)) {
 		text.push(`You call ${him} over and`);
@@ -127,10 +126,8 @@ App.Interact.fAnimal = function(slave, type) {
 					text.push(`${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 === Acts.VAGINAL && slave.vagina > 0) ||
-						(act === Acts.ANAL && slave.anus > 0)
-				) {
+				if ((act === Acts.VAGINAL && slave.vagina > 0)
+					|| (act === Acts.ANAL && slave.anus > 0)) {
 					if (slaveApproves()) {
 						text.push(`${slave.slaveName}'s face visibly brightens at the thought of ${fetishDesc}, even if the dick is an animal's.`);
 					} else {
@@ -198,9 +195,7 @@ App.Interact.fAnimal = function(slave, type) {
 		}
 	}
 
-	App.Events.addParagraph(div, text);
-	text = [];
-
+	text.toParagraph();
 
 	if (slave.devotion > 50) {
 		if (act === Acts.ORAL) {
@@ -235,7 +230,7 @@ App.Interact.fAnimal = function(slave, type) {
 						text.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, then gives a groan as the beast thrusts, stretching ${his} poor throat to the limit.`);
 					}
 				} else {
-					text.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus `, slave.vagina < 4 ? `<span class="lime">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
+					text.push(`${slave.slaveName} gives a long, drawn-out moan as the huge phallus `, slave.vagina < 4 ? `<span class="change positive">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
 				}
 				break;
 			case V.active.feline:
@@ -253,8 +248,7 @@ App.Interact.fAnimal = function(slave, type) {
 				throw new Error(`Unexpected animal type '${animal}' in fAnimal()`);
 		}
 
-		App.Events.addParagraph(div, text);
-		text = [];
+		text.toParagraph();
 
 		if (act !== Acts.ORAL) {
 			text.push(virginityCheck(act));
@@ -292,7 +286,7 @@ App.Interact.fAnimal = function(slave, type) {
 						text.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
 					}
 				} else {
-					text.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? `<span class="lime">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
+					text.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? `<span class="change positive">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
 				}
 				break;
 			case V.active.feline:
@@ -310,8 +304,7 @@ App.Interact.fAnimal = function(slave, type) {
 				throw new Error(`Unexpected animal type '${animal}' in fAnimal()`);
 		}
 
-		App.Events.addParagraph(div, text);
-		text = [];
+		text.toParagraph();
 
 		if (act !== Acts.ORAL) {
 			text.push(virginityCheck(act));
@@ -349,7 +342,7 @@ App.Interact.fAnimal = function(slave, type) {
 						text.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} is beginning to reevaluate just how much ${he} wants to avoid punishment.`);
 					}
 				} else {
-					text.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? `<span class="lime">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
+					text.push(`${slave.slaveName} gives a long, drawn-out groan as the huge phallus `, slave.vagina < 4 ? `<span class="change positive">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
 				}
 				break;
 			case V.active.feline:
@@ -367,8 +360,7 @@ App.Interact.fAnimal = function(slave, type) {
 				throw new Error(`Unexpected animal type '${animal}' in fAnimal()`);
 		}
 
-		App.Events.addParagraph(div, text);
-		text = [];
+		text.toParagraph();
 
 		if (act !== Acts.ORAL) {
 			text.push(virginityCheck(act));
@@ -420,7 +412,7 @@ App.Interact.fAnimal = function(slave, type) {
 						text.push(`The slave visibly gags as the unfamiliar texture of ${anAnimal}'s cock fills it, and you get the feeling ${he} would have run away a long time ago if ${he} wasn't a little tied up at the moment.`);
 					}
 				} else {
-					text.push(`${slave.slaveName} lets out a blood-curdling scream as the huge phallus `, slave.vagina < 4 ? `<span class="lime">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
+					text.push(`${slave.slaveName} lets out a blood-curdling scream as the huge phallus `, slave.vagina < 4 ? `<span class="change positive">stretches</span>` : `fills`, ` ${his} ${orifice()} nearly to its breaking point.`);
 				}
 				break;
 			case V.active.feline:
@@ -450,8 +442,7 @@ App.Interact.fAnimal = function(slave, type) {
 		}
 	}
 
-	App.Events.addParagraph(div, text);
-	text = [];
+	text.toParagraph();
 
 	switch (animal) {
 		case V.active.canine:
@@ -484,9 +475,9 @@ App.Interact.fAnimal = function(slave, type) {
 			throw new Error(`Unexpected animal type '${animal}' in fAnimal()`);
 	}
 
-	if (act === Acts.ANAL) {
+	if (act === Acts.VAGINAL) {
 		slave.vagina = slave.vagina < animal.dick.size ? animal.dick.size : slave.vagina;
-	} else if (act === Acts.VAGINAL) {
+	} else if (act === Acts.ANAL) {
 		slave.anus = slave.anus < animal.dick.size ? animal.dick.size : slave.anus;
 	}
 
@@ -494,8 +485,7 @@ App.Interact.fAnimal = function(slave, type) {
 		knockMeUp(slave, 5, hole, -8);
 	}
 
-	App.Events.addParagraph(div, text);
-	text = [];
+	text.toParagraph();
 
 	if (random(1, 100) > 100 + slave.devotion) {
 		switch (act) {
@@ -607,8 +597,7 @@ App.Interact.fAnimal = function(slave, type) {
 			}
 		}
 
-		App.Events.addParagraph(div, text);
-		text = [];
+		text.toParagraph();
 	}
 
 	return frag;