diff --git a/src/facilities/farmyard/animals/animals.js b/src/facilities/farmyard/animals/animals.js
index fa0b4e0185c6be724ae334e5f7bf7f3e7cf1ad4d..8bc47b99b80dd7d59ff0c1db3f0a2cd30a84444e 100644
--- a/src/facilities/farmyard/animals/animals.js
+++ b/src/facilities/farmyard/animals/animals.js
@@ -30,7 +30,12 @@ App.Entity.Animal = class {
 		return V.active[this.type].name === this.name;
 	}
 
-	/** @type {function():this} */
+	/** @returns {string} */
+	get ballType() {
+		return this.species;
+	}
+
+	/** @returns {this} */
 	purchase() {
 		V[this.type].push(this.name);
 
@@ -65,7 +70,7 @@ App.Entity.Animal = class {
 		return this;
 	}
 
-	/** @type {function():this} */
+	/** @returns {this} */
 	setActive() {
 		V.active[this.type] = this;
 
@@ -103,8 +108,8 @@ App.Facilities.Farmyard.animals = function() {
 
 	const frag = new DocumentFragment();
 
-	const domesticDiv = App.UI.DOM.appendNewElement("div", frag, '', 'farmyard-domestic');
-	const exoticDiv = App.UI.DOM.appendNewElement("div", frag, '', 'farmyard-exotic');
+	const domesticDiv = App.UI.DOM.appendNewElement("div", frag, null, 'farmyard-domestic');
+	const exoticDiv = App.UI.DOM.appendNewElement("div", frag, null, 'farmyard-exotic');
 
 	const hrMargin = '0';
 
@@ -173,7 +178,7 @@ App.Facilities.Farmyard.animals = function() {
 	}
 
 	function domesticHooved() {
-		const hoovedDiv = App.UI.DOM.makeElement("div", '', 'farmyard-animals');
+		const hoovedDiv = App.UI.DOM.makeElement("div", null, 'farmyard-animals');
 		const hr = document.createElement("hr");
 
 		hr.style.margin = hrMargin;
@@ -186,7 +191,7 @@ App.Facilities.Farmyard.animals = function() {
 	}
 
 	function domesticFelines() {
-		const felineDiv = App.UI.DOM.makeElement("div", '', 'farmyard-animals');
+		const felineDiv = App.UI.DOM.makeElement("div", null, 'farmyard-animals');
 		const hr = document.createElement("hr");
 
 		hr.style.margin = hrMargin;
@@ -203,7 +208,7 @@ App.Facilities.Farmyard.animals = function() {
 	// Exotic Animals
 
 	function exoticCanines() {
-		const canineDiv = App.UI.DOM.makeElement("div", '', 'farmyard-animals');
+		const canineDiv = App.UI.DOM.makeElement("div", null, 'farmyard-animals');
 		const hr = document.createElement("hr");
 
 		hr.style.margin = hrMargin;
@@ -216,7 +221,7 @@ App.Facilities.Farmyard.animals = function() {
 	}
 
 	function exoticHooved() {
-		const hoovedDiv = App.UI.DOM.makeElement("div", '', 'farmyard-animals');
+		const hoovedDiv = App.UI.DOM.makeElement("div", null, 'farmyard-animals');
 		const hr = document.createElement("hr");
 
 		hr.style.margin = hrMargin;
@@ -229,7 +234,7 @@ App.Facilities.Farmyard.animals = function() {
 	}
 
 	function exoticFelines() {
-		const felineDiv = App.UI.DOM.makeElement("div", '', 'farmyard-animals');
+		const felineDiv = App.UI.DOM.makeElement("div", null, 'farmyard-animals');
 		const hr = document.createElement("hr");
 
 		hr.style.margin = hrMargin;
@@ -241,8 +246,6 @@ App.Facilities.Farmyard.animals = function() {
 		return felineDiv;
 	}
 
-
-
 	// Helper Functions
 
 	/**
@@ -278,36 +281,34 @@ App.Facilities.Farmyard.animals = function() {
 	 */
 	function animalList(type, rarity, price, active) {
 		const mainDiv = document.createElement("div");
-		let filteredArray = App.Data.animals.filter(animal => animal.rarity === rarity && animal.type === type);
+		const filteredArray = App.Data.animals.filter(animal => animal.rarity === rarity && animal.type === type);
 
-		for (const i in filteredArray) {
+		filteredArray.forEach(animal => {
 			const animalDiv = document.createElement("div");
 			const optionSpan = document.createElement("span");
 
 			const args = {
-				animal: filteredArray[i],
+				animal: animal,
 				active: active,
 				type: type,
 				price: price,
 				setActiveHandler() {
-					filteredArray[i].setActive();
+					animal.setActive();
 					App.UI.DOM.replace(mainDiv, animalList(type, rarity, price, active));
 				},
 				purchaseHandler() {
 					cashX(forceNeg(price), "farmyard");
-					filteredArray[i].purchase();
+					animal.purchase();
 					App.UI.DOM.replace(mainDiv, animalList(type, rarity, price, active));
 				}
 			};
 
 			optionSpan.append(animalLink(args));
 
-			animalDiv.append(capFirstChar(filteredArray[i].name), ' ', optionSpan);
+			animalDiv.append(capFirstChar(animal.name), ' ', optionSpan);
 
 			mainDiv.appendChild(animalDiv);
-		}
-
-		// filteredArray = [];
+		});
 
 		return mainDiv;
 	}
diff --git a/src/js/storyJS.js b/src/js/storyJS.js
index 1104e28bb29b2d9b09955a00228b0600f02d0cb8..1ebb0663f2580e508e85317dd38092d739045b42 100644
--- a/src/js/storyJS.js
+++ b/src/js/storyJS.js
@@ -69,7 +69,7 @@ globalThis.filterInPlace = function(arr, callback, thisArg) {
 
 /** pregmod: are slave2's sperm compatible with slave1's eggs?
  * @param {FC.HumanState} slave1
- * @param {FC.HumanState} slave2
+ * @param {FC.HumanState|FC.AnimalState} slave2
  * @returns {boolean}
  */
 globalThis.canBreed = function(slave1, slave2) {
diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index 3ba0b8d8e1cb82acf7bcefa063cbe6a18f26ce5f..118691e1d5159978480c91aef36c03c9cbaf7bc9 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -54,12 +54,12 @@ App.Interact.fAnimal = function(slave, type) {
 	}
 
 	const slaveApproves = () =>
-		approvingFetishes.includes(slave.fetish) ||
-		approvingFetishes.includes(slave.sexualQuirk) ||
-		approvingFetishes.includes(slave.behavioralQuirk) ||
-		slave.fetish === "buttslut" && act === Acts.ANAL ||
-		slave.fetish === "cumslut" && act === Acts.ORAL ||
-		slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL;
+		approvingFetishes.includes(slave.fetish)
+		|| approvingFetishes.includes(slave.sexualQuirk)
+		|| approvingFetishes.includes(slave.behavioralQuirk)
+		|| slave.fetish === "buttslut" && act === Acts.ANAL
+		|| slave.fetish === "cumslut" && act === Acts.ORAL
+		|| slave.sexualQuirk === "gagfuck queen" && act === Acts.ORAL;
 
 	switch (act) {
 		case Acts.ORAL: