diff --git a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-penis.js b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-penis.js
index 677fe745a3652a909407b92f38bb59ca9fa60486..bb3e23f689386d80d7241702d84eb4b38282c638 100644
--- a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-penis.js
+++ b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-penis.js
@@ -56,7 +56,7 @@ const combatClosePenis = {
 					options.pcPenis = V.worn.under_lower.name === "strap-on knotted cock" ? "strapon-knotted" : "strapon-dick";
 				} else if (playerChastity("cage")) {
 					options.pcPenis = options.penis.chastityPenis;
-				} else if (["beast", "beast-oral"].includes(options.penis.npc)) {
+				} else if (["beast-oral"].includes(options.penis.npc)) {
 					options.pcPenis = `${options.penis.size}-${options.penis.type}-${options.penis.state}`;
 				} else {
 					options.pcPenis = `${options.penis.size}-${options.penis.type}`;
diff --git a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-vagina.js b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-vagina.js
index 86c65270da9a1fe834192d142e964d4c8ae63eb8..177e9be8f673bd6bd6e23f9a33f97971172ddb88 100644
--- a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-vagina.js
+++ b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-close-vagina.js
@@ -90,7 +90,7 @@ const combatCloseVagina = {
 			animationfn(options) {
 				return options.animKeyVagina;
 			},
-			filters: ["pbhair"],
+			filters: ["hirsute"],
 			z: CombatRenderer.indices.closeBase + 1,
 		},
 		silhouette: {
diff --git a/game/03-JavaScript/05-renderer/21-close-options.js b/game/03-JavaScript/05-renderer/21-close-options.js
index b55ff32d213d10be3906320d801f4fca37ce8ed6..8d4cbc40a792fb661b3f83f6e05626b03436b356 100644
--- a/game/03-JavaScript/05-renderer/21-close-options.js
+++ b/game/03-JavaScript/05-renderer/21-close-options.js
@@ -86,6 +86,7 @@ class CloseCombatMapper {
 
 		options.pbhairColour = V.makeup.pbcolour || V.naturalhaircolour;
 		options.filters.pbhair = CombatRenderer.lookupColour(setup.colours.hair_map, options.pbhairColour, "pbhair", "pbhair_custom", "pbhair");
+		options.filters.hirsute = CombatRenderer.getTransformationFilter("wolf", "pubes");
 
 		if (V.player.condom) {
 			options.condomColour = V.player.condom.colour || "red";
@@ -172,7 +173,7 @@ class CloseCombatMapper {
 
 		if (slot === "vagina") {
 			/* match drippy cum sprites to corresponding vagina state */
-			const entrance = ["entrance", "doubleentrance", "tentacleentrance"].includes(V.vaginastate.toString()) ? "entrance" : "vagina";
+			const entrance = ["entrance", "doubleentrance", "tentacleentrance", "imminent"].includes(V.vaginastate.toString()) ? "entrance" : "vagina";
 			options[slot].cumState = options.vagina.state === "penetrated" ? "penetrated" : entrance;
 			/* select appropriate chastity sprite */
 			if (chastity) {
diff --git a/game/03-JavaScript/05-renderer/21-npc-options.js b/game/03-JavaScript/05-renderer/21-npc-options.js
index f28168777bb1e895874fcae4d70ca94867f20b95..7a0c248b1fb379a21c4f36fe31ce3a6a908fe1f2 100644
--- a/game/03-JavaScript/05-renderer/21-npc-options.js
+++ b/game/03-JavaScript/05-renderer/21-npc-options.js
@@ -45,7 +45,7 @@
  * @property {string} hex
  */
 
-const beastModels = ["bear", "boar", "cat", "creature", "dog", "dolphin", "fox", "horse", "centaur", "lizard", "pig", "wolf"];
+const beastModels = ["bear", "boar", "cat", "creature", "dog", "dolphin", "fox", "hawk", "horse", "centaur", "lizard", "pig", "wolf"];
 
 class NpcCombatMapper {
 	/** @returns {NpcOptions} */
diff --git a/game/03-JavaScript/05-renderer/22-canvasmodel-combat-xray-penis.js b/game/03-JavaScript/05-renderer/22-canvasmodel-combat-xray-penis.js
index 80273a0e36e53cd00a6e897af7fd968d006a13f3..6a4b0fbd64f25be3677237d8bd3680a34063ab92 100644
--- a/game/03-JavaScript/05-renderer/22-canvasmodel-combat-xray-penis.js
+++ b/game/03-JavaScript/05-renderer/22-canvasmodel-combat-xray-penis.js
@@ -51,7 +51,7 @@ const combatXrayPenis = {
 			animationfn(options) {
 				return options.animKeyPenis;
 			},
-			filters: ["body"],
+			filters: ["playerPenis"],
 			z: CombatRenderer.indices.xrayPenetrator,
 		},
 		playerCum: {
diff --git a/game/03-JavaScript/05-renderer/23-xray-options.js b/game/03-JavaScript/05-renderer/23-xray-options.js
index 907486a29ccd27ec0d745624f7a3cf991c539fcb..094e2122b9fbd751caa304ecd876b27013903bab 100644
--- a/game/03-JavaScript/05-renderer/23-xray-options.js
+++ b/game/03-JavaScript/05-renderer/23-xray-options.js
@@ -131,14 +131,14 @@ class XrayCombatMapper {
 	 * @returns {boolean}
 	 */
 	static isPcVaginaVisible() {
-		return V.player.vaginaExist && (combat.isVaginaPenetrated() || T.pullOutVagina);
+		return V.player.vaginaExist && combat.isVaginaPenetrated();
 	}
 
 	/**
 	 * @returns {boolean}
 	 */
 	static isPcAnusVisible() {
-		return combat.isAnusPenetrated() || T.pullOutAnus;
+		return combat.isAnusPenetrated();
 	}
 
 	/**
@@ -225,7 +225,7 @@ class XrayCombatMapper {
 			V.NPCList[V[slot + "target"]].penis === slot + "double" &&
 			V.NPCList[V[slot + "doubletarget"]].penis === slot + "double";
 
-		/* If NPC pulled out, show empty xray base for that turn */
+		/* If NPC pulled out, show empty xray base for that turn
 		if (T["pullOut" + slot.toUpperFirst()]) {
 			penetrator.npcType = "none";
 			penetrator.size = 0;
@@ -235,6 +235,9 @@ class XrayCombatMapper {
 			penetrator.base = "sex";
 			penetrator.npc = V[slot + "target"];
 		}
+		*/
+		penetrator.base = "sex";
+		penetrator.npc = V[slot + "target"];
 
 		/* Penetrator control */
 		switch (penetrator.npcType) {
@@ -509,6 +512,12 @@ class XrayCombatMapper {
 		} else {
 			penetrator.penetrated = penetrator.state === "otheranus" ? "anal" : "vaginal";
 		}
+
+		if (penetrator.type === "parasite") {
+			options.filters.playerPenis = CombatRenderer.lookupColour(setup.colours.tentacle_map, "tentacles-peach", "xrayTentacle", undefined, undefined);
+		} else {
+			options.filters.playerPenis = options.filters.body;
+		}
 		penetrator.base = "sex";
 		options.showNpcVagina = penetrator.penetrated === "vaginal";
 		options.showNpcArse = penetrator.penetrated === "anal";
diff --git a/game/04-Variables/colours.js b/game/04-Variables/colours.js
index 18892863f9c8a6fa070ff5ce7b08930d3d75f348..a9d743f6b73b9984142b567713bb63fcbffc6921 100644
--- a/game/04-Variables/colours.js
+++ b/game/04-Variables/colours.js
@@ -1637,8 +1637,11 @@ setup.colours.tentacle = [
 	{
 		variable: "tentacles-peach",
 		canvasfilter: {
-			blend: "#f99889",
-			contrast: 0.6,
+			blend: "#ff9e75",
+			brightness: 0.3,
+			contrast: 1.6,
+			blendMode: "hard-light",
+			desaturate: false,
 		},
 	},
 	{
diff --git a/img/newsex/doggy/beast/hawk/back-over.png b/img/newsex/doggy/beast/hawk/back-over.png
index ea57740af73eec7761a9371b56dae58cdfbcea31..07a5e410fd3eb6daa4892eda38708b5fe3d9a69e 100644
Binary files a/img/newsex/doggy/beast/hawk/back-over.png and b/img/newsex/doggy/beast/hawk/back-over.png differ
diff --git a/img/newsex/doggy/beast/hawk/front-over.png b/img/newsex/doggy/beast/hawk/front-over.png
index fb29efe283a70b3f702a95abd60ed394f28d7528..e6da48dda9d5caa51a2ada0f2fdf5b2c2fba3253 100644
Binary files a/img/newsex/doggy/beast/hawk/front-over.png and b/img/newsex/doggy/beast/hawk/front-over.png differ
diff --git a/img/newsex/doggy/shadow/bird/anus.png b/img/newsex/doggy/shadow/harpy/anus.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/anus.png
rename to img/newsex/doggy/shadow/harpy/anus.png
diff --git a/img/newsex/doggy/shadow/bird/dp_bound.png b/img/newsex/doggy/shadow/harpy/dp_bound.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/dp_bound.png
rename to img/newsex/doggy/shadow/harpy/dp_bound.png
diff --git a/img/newsex/doggy/shadow/bird/mouth.png b/img/newsex/doggy/shadow/harpy/mouth.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/mouth.png
rename to img/newsex/doggy/shadow/harpy/mouth.png
diff --git a/img/newsex/doggy/shadow/bird/penis.png b/img/newsex/doggy/shadow/harpy/penis.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/penis.png
rename to img/newsex/doggy/shadow/harpy/penis.png
diff --git a/img/newsex/doggy/shadow/bird/thighs.png b/img/newsex/doggy/shadow/harpy/thighs.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/thighs.png
rename to img/newsex/doggy/shadow/harpy/thighs.png
diff --git a/img/newsex/doggy/shadow/bird/vagina.png b/img/newsex/doggy/shadow/harpy/vagina.png
similarity index 100%
rename from img/newsex/doggy/shadow/bird/vagina.png
rename to img/newsex/doggy/shadow/harpy/vagina.png
diff --git a/img/newsex/missionary/shadow/bird/anus.png b/img/newsex/missionary/shadow/harpy/anus.png
similarity index 100%
rename from img/newsex/missionary/shadow/bird/anus.png
rename to img/newsex/missionary/shadow/harpy/anus.png
diff --git a/img/newsex/missionary/shadow/bird/mouth.png b/img/newsex/missionary/shadow/harpy/mouth.png
similarity index 100%
rename from img/newsex/missionary/shadow/bird/mouth.png
rename to img/newsex/missionary/shadow/harpy/mouth.png
diff --git a/img/newsex/missionary/shadow/bird/penis.png b/img/newsex/missionary/shadow/harpy/penis.png
similarity index 100%
rename from img/newsex/missionary/shadow/bird/penis.png
rename to img/newsex/missionary/shadow/harpy/penis.png
diff --git a/img/newsex/missionary/shadow/bird/thighs.png b/img/newsex/missionary/shadow/harpy/thighs.png
similarity index 100%
rename from img/newsex/missionary/shadow/bird/thighs.png
rename to img/newsex/missionary/shadow/harpy/thighs.png
diff --git a/img/newsex/missionary/shadow/bird/vagina.png b/img/newsex/missionary/shadow/harpy/vagina.png
similarity index 100%
rename from img/newsex/missionary/shadow/bird/vagina.png
rename to img/newsex/missionary/shadow/harpy/vagina.png
diff --git a/img/newsex/xray/vaginal/cum/sex_size2_dp_cum1.png b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum1.png
new file mode 100644
index 0000000000000000000000000000000000000000..69aa75be1beab84e44ed60c2c209254a11ee5f71
Binary files /dev/null and b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum1.png differ
diff --git a/img/newsex/xray/vaginal/cum/sex_size2_dp_cum2.png b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum2.png
new file mode 100644
index 0000000000000000000000000000000000000000..41d870509b091e129c9be3a5b27b6d0e532270a7
Binary files /dev/null and b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum2.png differ
diff --git a/img/newsex/xray/vaginal/cum/sex_size2_dp_cum3.png b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum3.png
new file mode 100644
index 0000000000000000000000000000000000000000..32120e6ee13840c1b6d4ec549ae452cb7ede6fd2
Binary files /dev/null and b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum3.png differ
diff --git a/img/newsex/xray/vaginal/cum/sex_size2_dp_cum4.png b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum4.png
new file mode 100644
index 0000000000000000000000000000000000000000..53d3a0cbc519316edc5ba1e1b48e5707960f78d5
Binary files /dev/null and b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum4.png differ
diff --git a/img/newsex/xray/vaginal/cum/sex_size2_dp_cum5.png b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum5.png
new file mode 100644
index 0000000000000000000000000000000000000000..be93ea59feec1e3a169a46b8d3174683a037cd16
Binary files /dev/null and b/img/newsex/xray/vaginal/cum/sex_size2_dp_cum5.png differ