diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt
index c51108d9c802290f6f89dbfa77e664869d615e67..b3648d37fc204c0d9dca9db6b76ac3daf9ef933b 100644
--- a/slave variables documentation - Pregmod.txt	
+++ b/slave variables documentation - Pregmod.txt	
@@ -1229,6 +1229,75 @@ is there an inner ear implant device
 0 - no
 1 - yes
 
+earShape:
+
+the shape of their outer ears
+"none"
+"damaged"
+"normal"
+"pointy"
+"elven"
+"ushi"
+
+earT:
+
+type of kemonomimi ears if any
+"neko"
+"inu"
+"kit"
+"tanuki"
+
+earTColor:
+
+kemonomimi ear color
+accepts hColor strings
+
+horn:
+
+horn type if any
+"none"
+"curved succubus horns"
+"backswept horns"
+"cow horns"
+"one long oni horn"
+"two long oni horns"
+"small horns"
+
+hornColor:
+
+horn color
+accepts string
+
+PTail:
+
+Does she have a tail interface installed
+0: no
+1: yes
+
+tail:
+
+type of tail installed
+"none"
+"mod"
+"combat"
+"sex"
+
+tailShape:
+
+the current shape of their modular tail
+"none"
+"neko"
+"inu"
+"kit"
+"kitsune"
+"tanuki"
+"ushi"
+
+tailColor:
+
+tail color
+accepts hColor strings
+
 origHColor:
 
 slave's original hair color, defaults to their initial hair color.
diff --git a/src/art/artJS.js b/src/art/artJS.js
index fb8a7fce5d0208aa9650e3f5fab470af0b117565..c10c8016588836842b43f33a4ff15812afc682ee 100644
--- a/src/art/artJS.js
+++ b/src/art/artJS.js
@@ -1740,7 +1740,9 @@ window.VectorArt = (function (artSlave) {
 	
 	function VectorArt(artSlave) {
 		/* set constants */
-		V = State.variables, T = State.temporary, slave = artSlave;
+		V = State.variables;
+		T = State.temporary;
+		slave = artSlave;
 		/* reset/initialize some variables */
 		T.artTransformBelly = "";
 		T.artTransformBoob = "";
@@ -2999,7 +3001,8 @@ window.VectorArt = (function (artSlave) {
 	}
 	
 	function ArtVectorHead() {
-		let eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */
+		const eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */
+		const hasEyebrows = slave.eyebrowHStyle !== "bald" && slave.eyebrowHStyle !== "shaved";
 
 		r += jsInclude("Art_Vector_Head");
 		/* shiny clothing */
@@ -3029,32 +3032,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeF");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						}
 						break;
 					case "asian":
@@ -3064,35 +3073,40 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeB");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeE");
 							if (slave.eyebrowFullness === "pencil-thin")
 								r += jsInclude("Art_Vector_Eyebrow_TypeC_Pencilthin");
-							else
+							else if (hasEyebrows === true)
 								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						}
 						break;
 					case "amerindian":
@@ -3101,32 +3115,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeB");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeB");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						}
 						break;
 					case "black":
@@ -3134,35 +3154,40 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeB");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeD");
 							if (slave.eyebrowFullness === "natural")
 								r += jsInclude("Art_Vector_Eyebrow_TypeB_Natural");
-							else
+							else if (hasEyebrows === true)
 								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeF");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						}
 						break;
 					case "middle eastern":
@@ -3170,32 +3195,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeF");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						}
 						break;
 					case "semitic":
@@ -3203,32 +3234,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeF");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						}
 						break;
 					case "indo-aryan":
@@ -3236,32 +3273,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						}
 						break;
 					case "mixed race":
@@ -3269,32 +3312,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeF");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeD");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						}
 						break;
 					default:
@@ -3302,32 +3351,38 @@ window.VectorArt = (function (artSlave) {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeA");
 							r += jsInclude("Art_Vector_Nose_TypeA");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "masculine") {
 							r += jsInclude("Art_Vector_Eyes_TypeD");
 							r += jsInclude("Art_Vector_Mouth_TypeF");
 							r += jsInclude("Art_Vector_Nose_TypeF");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`);
 						} else if (slave.faceShape === "androgynous") {
 							r += jsInclude("Art_Vector_Eyes_TypeE");
 							r += jsInclude("Art_Vector_Mouth_TypeE");
 							r += jsInclude("Art_Vector_Nose_TypeE");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`);
 						} else if (slave.faceShape === "cute") {
 							r += jsInclude("Art_Vector_Eyes_TypeB");
 							r += jsInclude("Art_Vector_Mouth_TypeB");
 							r += jsInclude("Art_Vector_Nose_TypeD");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`);
 						} else if (slave.faceShape === "sensual") {
 							r += jsInclude("Art_Vector_Eyes_TypeC");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						} else if (slave.faceShape === "exotic") {
 							r += jsInclude("Art_Vector_Eyes_TypeA");
 							r += jsInclude("Art_Vector_Mouth_TypeC");
 							r += jsInclude("Art_Vector_Nose_TypeC");
-							r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
+							if (hasEyebrows === true)
+								r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`);
 						}
 				}
 			}
diff --git a/src/cheats/mod_editSlaveCheatNew.tw b/src/cheats/mod_editSlaveCheatNew.tw
index a4692a3fd827b99e915b717bd56fc282a9cbcfbf..9aaf46d2ee181ed6d1a065c957342aed9ab16a82 100644
--- a/src/cheats/mod_editSlaveCheatNew.tw
+++ b/src/cheats/mod_editSlaveCheatNew.tw
@@ -1471,6 +1471,37 @@
 		@@.yellow;none@@
 	<<checkbox "$tempSlave.earImplant" 0 1>>
 	<</if>>
+	<br><br>
+
+	''Ear Shape: @@.yellow;$tempSlave.earShape@@ ''
+	<br>
+	<<radiobutton "$tempSlave.earShape" "none">> None
+	<<radiobutton "$tempSlave.earShape" "damaged">> Damaged
+	<<radiobutton "$tempSlave.earShape" "normal">> Normal
+	<<radiobutton "$tempSlave.earShape" "pointy">> Small Elf Ears
+	<<radiobutton "$tempSlave.earShape" "elven">> Long Elf Ears
+	<<radiobutton "$tempSlave.earShape" "ushi">> Bovine
+	<br><br>
+
+	''Kemonomimi Ear Type: @@.yellow;$tempSlave.earT@@ ''
+	<br>
+	<<radiobutton "$tempSlave.earT" "none">> None
+	<<radiobutton "$tempSlave.earT" "neko">> Cat
+	<<radiobutton "$tempSlave.earT" "inu">> Dog
+	<<radiobutton "$tempSlave.earT" "kit">> Fox
+	<<radiobutton "$tempSlave.earT" "tanuki">> TANUKI
+	<br><br>
+
+	''Horn Type: @@.yellow;$tempSlave.horn@@ ''
+	<br>
+	<<radiobutton "$tempSlave.horn" "none">> None
+	<<radiobutton "$tempSlave.horn" "curved succubus horns">> Succubus
+	<<radiobutton "$tempSlave.horn" "backswept horns">> Backswept
+	<<radiobutton "$tempSlave.horn" "one long oni horn">> One Oni Horn
+	<<radiobutton "$tempSlave.horn" "two long oni horns">> Two Oni Horns
+	<<radiobutton "$tempSlave.horn" "small horns">> Small Horns
+	<<radiobutton "$tempSlave.horn" "cow horns">> Bovine
+	<br><br>
 
 <</widget>>
 
@@ -2062,6 +2093,32 @@
 	<<radiobutton "$tempSlave.PLimb" 1>> Basic Interface
 	<<radiobutton "$tempSlave.PLimb" 2>> Advanced Interface
 
+	<br><br>
+	''Prostetic tail Interface:''
+	<<if $tempSlave.PTail == 1>>@@.yellow;Installed@@
+	<<else>>@@.yellow;Not Installed@@<</if>>
+	<br>
+	<<radiobutton "$tempSlave.PTail" 0>> Not Installed
+	<<radiobutton "$tempSlave.PTail" 1>> Installed
+	<br>
+	''Tail Currently Installed: @@.yellow;$tempSlave.tail@@ ''
+	<br>
+	<<radiobutton "$tempSlave.tail" "none">> None
+	<<radiobutton "$tempSlave.tail" "mod">> Modular
+	<<radiobutton "$tempSlave.tail" "combat">> Combat
+	<<radiobutton "$tempSlave.tail" "sex">> Pleasure
+	<br>
+	''Kemonomimi Tail Shape: @@.yellow;$tempSlave.tailShape@@ ''
+	<br>
+	//Set current tail to Modular before changing this//
+	<<radiobutton "$tempSlave.tailShape" "none">> None
+	<<radiobutton "$tempSlave.tailShape" "neko">> Cat
+	<<radiobutton "$tempSlave.tailShape" "inu">> Dog
+	<<radiobutton "$tempSlave.tailShape" "kit">> Fox
+	<<radiobutton "$tempSlave.tailShape" "kitsune">> 3 Fox Tails
+	<<radiobutton "$tempSlave.tailShape" "tanuki">> TANUKI
+	<<radiobutton "$tempSlave.tailShape" "ushi">> Bovine
+
 	<br><br>
 	''Fuckdoll: (0-100)''
 	<<if $tempSlave.fuckdoll < 15>>@@.yellow;Not a Fuckdoll@@
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 9070d39d7692339e4440d4359f75272a95b3241d..3f59727291fc7210f1dd276034567cbc69517268 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -1429,6 +1429,10 @@ cyberneticPLimb: 0,
 ocularImplant: 0,
 cochlearImplant: 0,
 electrolarynx: 0,
+PTail: 0,
+modPTail: 0,
+warPTail: 0,
+sexPTail: 0,
 erectileImplant: 0
 } >>
 
diff --git a/src/interaction/cyberConfig.tw b/src/interaction/cyberConfig.tw
index 7493591e09e16514b43931b19c203ad01a42b3aa..f749e6ee2e585711508580247096e344808a60f3 100644
--- a/src/interaction/cyberConfig.tw
+++ b/src/interaction/cyberConfig.tw
@@ -140,6 +140,50 @@
 		<</if>>
 	<</if>>
 
+	<<if $activeSlave.PTail == 1>><br><br>
+		$He has a neural tail interface installed. You can assign and adjust $his tail here.
+	    <<if $activeSlave.tail != "none">><br>&nbsp;
+			$He currently has a tail attached, if you wish to change it you will first need to detach it.<br>
+			[[Detach|cyberConfig][$temp = 7,$nextButton = "Continue", $nextLink = "cyberConfig"]]
+	    <<else>><br>&nbsp;
+			<<if $stockpile.modPTail > 0>>Attach a modular tail designed to look like a:<br>
+			[[Cat's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "neko", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]]
+			| [[Dog's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "inu", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]]
+			| [[Fox's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "kit", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]]
+			| [[Kitsune's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "kitsune", $activeSlave.tailColor =  $activeSlave.hColor, $stockpile.modPTail -= 1]]
+			| [[Tanuki's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "tanuki", $activeSlave.tailColor =  $activeSlave.hColor, $stockpile.modPTail -= 1]]	
+			| [[Cow's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailColor = "ushi", $activeSlave.tailColor =  $activeSlave.hColor, $stockpile.modPTail -= 1]]<br><</if>>
+			<<if $stockpile.warPTail > 0>>[[Attach Combat Tail|cyberConfig][$temp = 8, $activeSlave.tail = "combat", $activeSlave.tailColor = "jet black", $stockpile.warPTail -= 1]]<</if>>
+			<<if $stockpile.sexPTail > 0>>| [[Attach Pleasure Tail|cyberConfig][$temp = 8, $activeSlave.tail = "sex", $activeSlave.tailColor = "pink", $stockpile.sexPTail -= 1]]<</if>>
+        <</if>>
+	<<else>>
+		$He does not have a neural tail interface installed so you can not attach a tail.
+	<</if>>
+	<<if $activeSlave.tail == "mod">><br>
+		$He currently has a modular tail, styled to look like 
+		<<if $activeSlave.tailShape == "neko">>
+			a long, slender cat tail.
+		<<elseif $activeSlave.tailShape == "inu">>
+			a bushy dog tail.
+		<<elseif $activeSlave.tailShape == "kit">>
+			a soft, fluffy fox tail.
+		<<elseif $activeSlave.tailShape == "kitsune">>
+			three incredibly soft, fluffy fox tails.
+		<<elseif $activeSlave.tailShape == "tanuki">>
+			a long, fluffy tanuki tail.
+		<<elseif $activeSlave.tailShape == "ushi">>
+			a long cow tail.
+		<</if>>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
+
+		Modify $his tail's apearance:<br>
+		[[Cat|cyberConfig][$activeSlave.tailShape = "neko",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+		| [[Dog|cyberConfig][$activeSlave.tailShape = "inu",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+		| [[Fox|cyberConfig][$activeSlave.tailShape = "kit",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+		| [[Kitsune|cyberConfig][$activeSlave.tailShape = "kitsune",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+		| [[Tanuki|cyberConfig][$activeSlave.tailShape = "tanuki",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+		| [[Bovine|cyberConfig][$activeSlave.tailShape = "ushi",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]]
+	<</if>>
 <<case 1>>
 	<<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">>
 	<<if $activeSlave.amp == -1>><<set $stockpile.basicPLimb += 1>>
@@ -196,5 +240,27 @@
 		$He tests out the <<if canHear($activeSlave)>>sound<<else>>feeling<</if>> of $his new, normal voice.
 	<<elseif $activeSlave.voice == 3>>
 		$He tests out the <<if canHear($activeSlave)>>sound<<else>>feeling<</if>> of $his new, high voice.
+	<</if>><br>
+<<case 7>>
+	<<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">>
+	<<if $activeSlave.tail == "mod">><<set $stockpile.modPTail += 1>>
+	<<elseif $activeSlave.tail == "combat">><<set $stockpile.warPTail += 1>>
+	<<elseif $activeSlave.tail == "sex">><<set $stockpile.sexPTail += 1>>
+	<</if>>
+	<<set $activeSlave.tail = "none">><<set $activeSlave.tailShape = "none">><<set $activeSlave.tailColor = "none">>
+	You send the release signal and the mechanical lock disengages allowing the artificial tail to pop right off.<br>
+<<case 8>>
+	<<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">>
+	Attaching $his tail is a simple procedure, you simply push the connector into a socket, right where $his tailbone ends, until the lock engages.<br>
+	When you are done, $he looks back and 
+	<<if $activeSlave.tailShape == "neko">>sways $his tail side to side enigmatically.
+	<<elseif $activeSlave.tailShape == "inu">>wags $his tail side to side energeticaly.
+	<<elseif $activeSlave.tailShape == "kit">>slowly sways $his tail feeling the soft fur brush against $his skin.
+	<<elseif $activeSlave.tailShape == "kitsune">>slowly sways $his tails luxuriating in the incredibly soft, fluffy fur brushing against $his skin.
+	<<elseif $activeSlave.tailShape == "tanuki">>admires $his long, thick fluffy tail.
+	<<elseif $activeSlave.tailShape == "ushi">>swats $himself playfully.
+	<<elseif $activeSlave.tail == "combat">>experimentally whips the long tail side to side then takes aim at a prepared fruit, lashes out with blinding speed and smiles as it explodes into chunks.
+	<<elseif $activeSlave.tail == "sex">>accidentally engages the vibrating and lube functions, startling $him and making quite a mess.
+	<<else>>admires $his new tail.
 	<</if>>
 <</switch>>
\ No newline at end of file
diff --git a/src/interaction/researchLab.tw b/src/interaction/researchLab.tw
index 1a347af9b8530d193a84acb51af4efae6e520aa5..52e1d52314a22295e9bcc759d726ce015f61b712 100644
--- a/src/interaction/researchLab.tw
+++ b/src/interaction/researchLab.tw
@@ -253,4 +253,15 @@
 	[[Erectile implant|Research Lab][$temp = 1, cashX(-95000, "lab"), $researchLab.erectileImplant = 1]] //Costs <<print cashFormat(95000)>>.//
 	<</if>>*/
 
+<br><br>
+	//You contact a representative of one of the most popular japanese cybernetics companies and inquire about their products.<br>&nbsp;This is what they have to offer://<br><br>
+	
+	__Hardware__<br>
+	[[Neural Tail Interface|Research Lab][$temp = 1, cashX(-10000, "lab"), $stockpile.interfacePTail += 1]] //Costs <<print cashFormat(10000)>>. Currently have: $stockpile.interfacePTail//<br>
+	[[Modular Tail|Research Lab][$temp = 1, cashX(-3000, "lab"), $stockpile.modPTail += 1]] //Costs <<print cashFormat(5000)>>. Currently have: $stockpile.modPTail//<br>
+	[[Combat Tail|Research Lab][$temp = 1, cashX(-15000, "lab"), $stockpile.warPTail += 1]] //Costs <<print cashFormat(15000)>>. Currently have: $stockpile.warPTail//<br>
+	[[Pleasure Tail|Research Lab][$temp = 1, cashX(-10000, "lab"), $stockpile.sexPTail += 1]] //Costs <<print cashFormat(10000)>>. Currently have: $stockpile.sexPTail//<br>
+	
+	<br><br>__Schematics__<br>
+	They do not currently offer schematics for sale.
 <</switch>>
\ No newline at end of file
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 6ef1a9c7f7fec1854373a66c78dfaf9fbc210d7d..717224238844c7c70fed9c4212b55b34b66d807f 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -324,8 +324,33 @@ App.Entity.SlaveState = class SlaveState {
 		/** is there an inner ear implant device
 		 * 0: no; 1: yes */
 		this.earImplant = 0;
-		/** */
+		/**the shape of their outer ears
+		 * "none", "damaged", "normal", "pointy", "elven", "ushi" */
 		this.earShape = "normal";
+		/**type of kemonomimi ears if any
+		 * "neko", "inu", "kit", "tanuki" */
+		this.earT = "none";
+		/**kemonomimi ear color */
+		this.earTColor = "none";
+		/**horn type if any
+		 * "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */
+		this.horn = "none";
+		/**horn color */
+		this.hornColor = "none";
+		/**type of tail installed
+		 * "none", "mod", "combat", "sex"*/
+		this.tail = "none";
+		/**
+		 * Does she have a tail interface installed
+		 * * 0: no
+		 * * 1: yes
+		 */
+		this.PTail = 0;
+		/**the current shape of their modular tail
+		 * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi" */
+		this.tailShape = "none";
+		/**tail color */
+		this.tailColor = "none";
 		/** slave's original hair color, defaults to their initial hair color. */
 		this.origHColor = "brown";
 		/** hair color */
diff --git a/src/js/assayJS.js b/src/js/assayJS.js
index 62ea88d163ae3c8e1fb13e00e316f4aafdb3140f..2e62bac72ac747eb1c14f3fe925da89fa096c724 100644
--- a/src/js/assayJS.js
+++ b/src/js/assayJS.js
@@ -2266,5 +2266,9 @@ window.Deadliness = /** @param {App.Entity.SlaveState} slave */ function Deadlin
 		deadliness -= 1;
 	}
 
+	if (slave.tail === "combat") {
+		deadliness += 2;
+	}
+
 	return Math.max(deadliness, 1);
 };
diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js
index 5e7917ef37ff16968fcb2869e30c722bd61a7f69..22ccf04dc7bb1081389daedd9a15a3b1c1497a44 100644
--- a/src/js/datatypeCleanupJS.js
+++ b/src/js/datatypeCleanupJS.js
@@ -39,6 +39,7 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		slaveHairDatatypeCleanup(slave);
 		slaveBoobsDatatypeCleanup(slave);
 		slaveButtDatatypeCleanup(slave);
+		slaveNekoDatatypeCleanup(slave);
 		slavePregnancyDatatypeCleanup(slave);
 		slaveBellyDatatypeCleanup(slave);
 		slaveGenitaliaDatatypeCleanup(slave);
@@ -198,6 +199,34 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		slave.analArea = Math.max(+slave.analArea, 0) || 0;
 	}
 
+		/** @param {App.Entity.SlaveState} slave */
+			function slaveNekoDatatypeCleanup(slave) {
+		if (typeof slave.earShape !== "string") {
+			slave.earShape = "normal";
+		}
+		if (typeof slave.earT !== "string") {
+			slave.earT = "none";
+		}
+		if (typeof slave.earTColor !== "string") {
+			slave.earTColor = "none";
+		}
+		if (typeof slave.horn !== "string") {
+			slave.horn = "none";
+		}
+		if (typeof slave.hornColor !== "string") {
+			slave.hornColor = "none";
+		}
+		if (typeof slave.tail !== "string") {
+			slave.tail = "none";
+		}
+		if (typeof slave.tailShape !== "string") {
+			slave.tailShape = "none";
+		}
+		if (typeof slave.tailColor !== "string") {
+			slave.tailColor = "none";
+		}
+	}
+
 	/** @param {App.Entity.SlaveState} slave */
 	function slavePregnancyDatatypeCleanup(slave) {
 		slave.induce = Math.clamp(+slave.induce, 0, 1) || 0;
diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js
index e6c91b9967380cd0f2242293e36bca44deb9c8b6..16bd8542138491eb3444c99b78ce69ff81b8eea6 100644
--- a/src/js/generateNewSlaveJS.js
+++ b/src/js/generateNewSlaveJS.js
@@ -804,7 +804,22 @@ window.GenerateNewSlave = (function(){
 	}
 
 	function generateXYBoobs() {
-		slave.boobs = jsEither([100, 200, 200, 300, 300, 400, 500]);
+		
+		if (slave.physicalAge <= 10) {
+			slave.boobs = 100;
+		} else if (slave.physicalAge === 11) {
+			slave.boobs = jsEither([100, 100, 150]);
+		} else if (slave.physicalAge === 12) {
+			slave.boobs = jsEither([100, 100, 150, 150]);
+		} else if (slave.physicalAge === 13) {
+			slave.boobs = jsEither([100, 100, 150, 150, 200, 200]);
+		} else if (slave.physicalAge === 14) {
+			slave.boobs = jsEither([100, 100, 150, 150, 200, 200, 300]);
+		} else if (slave.physicalAge === 15) {
+			slave.boobs = jsEither([100, 100, 150, 150, 200, 200, 300, 300, 350, 350]);
+		} else {
+			slave.boobs = jsEither([100, 200, 200, 300, 300, 400, 500]);
+		}
 	}
 
 	function generateXXFace() {
diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js
index d3ab4af31bc72467daabdc753096c705ecb1fb7f..73efd5db005c69fbdd79f10fd678862c928fbd5b 100644
--- a/src/js/slaveCostJS.js
+++ b/src/js/slaveCostJS.js
@@ -1461,6 +1461,7 @@ window.FResult = (function() {
 	/** @param {App.Entity.SlaveState} slave */
 	function calcSexAttributes(slave) {
 		if (slave.clitPiercing > 2) result += 1;
+		if (slave.tail === "sex") result += 1;
 		if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish !== "none")
 			result += slave.fetishStrength/5;
 
diff --git a/src/js/walkPastJS.js b/src/js/walkPastJS.js
index 83afe9a292ab1ebbbb87b1485aec523fac713d53..cd628e23fe631b9d58f5e2264c78b481f2891093 100644
--- a/src/js/walkPastJS.js
+++ b/src/js/walkPastJS.js
@@ -889,7 +889,11 @@ window.loverSlave = function(activeSlave) {
 					} else {
 						t += `on ${name}'s bedroll `;
 					}
-					t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`;
+					t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s `
+					if (_partnerSlave.earShape !== "none") {
+						t +=`ears and `
+					}
+					t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`;
 				} else if (activeSlave.clit > 2 && canDoAnal(_partnerSlave) && _partnerSlave.anus > 0 && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) {
 					if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) {
 						t += `in bed `;
@@ -907,7 +911,11 @@ window.loverSlave = function(activeSlave) {
 					} else {
 						t += `on ${name}'s bedroll `;
 					}
-					t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`;
+					t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s `
+					if (_partnerSlave.earShape !== "none") {
+						t +=`ears and `
+					}
+					t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`;
 				} else if (activeSlave.clit > 2 && canDoVaginal(activeSlave) && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) {
 					if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) {
 						t += `in bed `;
@@ -940,7 +948,11 @@ window.loverSlave = function(activeSlave) {
 					} else {
 						t += `on ${name}'s bedroll `;
 					}
-					t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him} with the other.`;
+					t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s `
+					if (_partnerSlave.earShape !== "none") {
+						t +=`ears and `
+					}
+					t += `neck, cupping a breast with one hand, and lightly stimulating ${him} with the other.`;
 				} else if (_partnerSlave.amp !== 1 && activeSlave.amp !== 1) {
 					if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) {
 						t += `in bed `;
@@ -1222,6 +1234,49 @@ window.loverSlave = function(activeSlave) {
 		return t;
 }
 
+window.relatedSlave = function(activeSlave) {
+	const V = State.variables;
+	const pronouns = getPronouns(activeSlave);
+	const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun;
+	const He = capFirstChar(he), His = capFirstChar(his);
+	let t = "";
+	let _target = "";
+
+	if (V.partner === "relation") {
+		if (V.familyTesting === 1) {
+			_partnerSlave = V.relation;
+		} else {
+			_partnerSlave = getSlave(activeSlave.relationTarget);
+		}
+	} else {
+		var activeSlaveRel = relationshipTerm(activeSlave);
+		_partnerSlave = getSlave(activeSlave.relationshipTarget);
+	}
+	
+	if (_partnerSlave !== undefined) { /* potential problem point */
+		// let race2 = (V.seeRace ? _partnerSlave.race : "");
+
+		t += " His ";
+		if (V.partner === "relation") {
+			if (V.familyTesting === 1) {
+				t += `${V.relationType} `;
+			} else {
+				t += `${_partnerSlave.relation} `;
+			}
+		} else {
+			t += `${activeSlaveRel} `;
+		}
+		t += `${_partnerSlave.slaveName} `;
+		
+
+		V.target = "FRival"; /*potentially removed later*/
+	} else {
+		t += ` Expected partner not found!`;
+	}
+
+	return t;
+};
+
 window.walkPasts = function(slave, _seed) {
 
 	/* will be moved up once this becomes a single, contained function. */
diff --git a/src/pregmod/huskSlaveSwap.tw b/src/pregmod/huskSlaveSwap.tw
index a6e9a33cd46587f08bde9ed24aa6a6f57bb80a42..351261d8df59e227675f60a4f61937151cb886ac 100644
--- a/src/pregmod/huskSlaveSwap.tw
+++ b/src/pregmod/huskSlaveSwap.tw
@@ -4,6 +4,15 @@
 <<set _oldSlave = clone($swappingSlave)>>
 <<set _m = $slaveIndices[$swappingSlave.ID]>>
 <<run clearSummaryCache($slaves[_m])>>
+<<if $slaves[_m].tail != "none">>
+	<<if $slaves[_m].tail == "sex">>
+		<<set $stockpile.sexPTail++>>
+	<<elseif $slaves[_m].tail == "combat">>
+		<<set $stockpile.warPTail++>>
+	<<else>>
+		<<set $stockpile.modPTail++>>
+	<</if>>
+<</if>>
 
 You strap $slaves[_m].slaveName, and the body to which $he will be transferred, into the remote surgery and stand back as it goes to work.
 <<BodySwap $slaves[_m] $activeSlave>>
diff --git a/src/pregmod/organFarmOptions.tw b/src/pregmod/organFarmOptions.tw
index 5888ae64fd11ad4362fc76192e2aa61508b2c9f5..01a0050e321f394ce0542c6d27056fe65deb5553 100644
--- a/src/pregmod/organFarmOptions.tw
+++ b/src/pregmod/organFarmOptions.tw
@@ -19,6 +19,7 @@
 	horseOvaries: 0,
 	cowOvaries: 0,
 	eyes: 0,
+	ears: 0,
 	cochleae: 0,
 	voicebox: 0,
 	mpreg: 0,
@@ -58,6 +59,8 @@
 			<<set $slaveOrgans.cowOvaries = 1>>
 		<<elseif $organs[_i].type == "eyes">>
 			<<set $slaveOrgans.eyes = 1>>
+		<<elseif $organs[_i].type == "ears">>
+			<<set $slaveOrgans.ears = 1>>
 		<<elseif $organs[_i].type == "cochleae">>
 			<<set $slaveOrgans.cochleae = 1>>
 		<<elseif $organs[_i].type == "voicebox">>
@@ -267,6 +270,18 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi
 		<</link>> //Costs <<print cashFormat(10000)>> and is imperfect — eyes will lack natural color//
 	<</if>>
 <</if>>
+<<if $slaveOrgans.ears != 1>>
+	<<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "pointy">>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
+		<<link "Normal Ears">>
+			<<run cashX(-1000, "slaveSurgery", $activeSlave)>>
+			<<set _newOrgan = {type: "ears", weeksToCompletion: "2", ID: 0}>>
+			<<set _newOrgan.ID = $activeSlave.ID>>
+			<<set $organs.push(_newOrgan)>>
+			<<goto "Remote Surgery">>
+		<</link>> //Costs <<print cashFormat(1000)>>//
+	<</if>>
+<</if>>
 <<if $slaveOrgans.cochleae != 1>>
 	<<if $activeSlave.hears <= -2 && $activeSlave.earImplant != 1>>
 		<br>&nbsp;&nbsp;&nbsp;&nbsp;
@@ -355,7 +370,7 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi
 			<<switch $organs[_i].type>>
 			<<case "penis" "scrotum" "foreskin" "prostate" "voicebox">>
 				$organs[_i].type is
-			<<case "testicles" "ovaries" "eyes" "cochleae">>
+			<<case "testicles" "ovaries" "eyes" "cochleae" "ears">>
 				$organs[_i].type are
 			<<case "pigTesticles">>
 				pig testicles are
@@ -1998,6 +2013,74 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi
 						<</if>>
 					<</link>>
 				<</if>>
+			<<case "ears">>
+				<<if $activeSlave.earShape == "normal" || $activeSlave.earShape == "pointy">>
+					<br>&nbsp;&nbsp;&nbsp;&nbsp;
+					ERROR: this slave has normal ears.
+					<<link "Discard" "Remote Surgery">>
+						<<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>>
+						<<if _ofo != -1>>
+							<<set $completedOrgans.deleteAt(_ofo)>>
+						<<else>>
+							@@.red;Organ not found for deletion!@@
+						<</if>>
+					<</link>>
+				<<elseif $activeSlave.earShape == "none">>
+					<br>&nbsp;&nbsp;&nbsp;&nbsp;
+					<<link "Attach" "Surgery Degradation">>
+						<<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>>
+						<<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>>
+						<<if _ofo != -1>>
+							<<set $completedOrgans.deleteAt(_ofo)>>
+						<<else>>
+							@@.red;Organ not found for deletion!@@
+						<</if>>
+						<<set $activeSlave.earShape = "normal">>
+						<<if $activeSlave.hears == -1>>
+							<<set $activeSlave.hears = 0>>
+						<</if>>
+						<<set $activeSlave.health -= 15>>
+						<<if $organFarmUpgrade == 2>>
+							<<set $activeSlave.chem += 20>>
+						<</if>>
+						<<set $surgeryType = "earShapeMinor">>
+					<</link>>
+					|
+					<<link "Discard" "Remote Surgery">>
+						<<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>>
+						<<if _ofo != -1>>
+							<<set $completedOrgans.deleteAt(_ofo)>>
+						<<else>>
+							@@.red;Organ not found for deletion!@@
+						<</if>>
+					<</link>>
+				<<else>>
+					<br>&nbsp;&nbsp;&nbsp;&nbsp;
+					<<link "Remove current ears and attach" "Surgery Degradation">>
+						<<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>>
+						<<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>>
+						<<if _ofo != -1>>
+							<<set $completedOrgans.deleteAt(_ofo)>>
+						<<else>>
+							@@.red;Organ not found for deletion!@@
+						<</if>>
+						<<set $activeSlave.earShape = "normal">>
+						<<set $activeSlave.health -= 20>>
+						<<if $organFarmUpgrade == 2>>
+							<<set $activeSlave.chem += 20>>
+						<</if>>
+						<<set $surgeryType = "earShapeMinor">>
+					<</link>>
+					|
+					<<link "Discard" "Remote Surgery">>
+						<<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>>
+						<<if _ofo != -1>>
+							<<set $completedOrgans.deleteAt(_ofo)>>
+						<<else>>
+							@@.red;Organ not found for deletion!@@
+						<</if>>
+					<</link>>
+				<</if>>
 			<<case "cochleae">>
 				<<if $activeSlave.hears > -2 && $activeSlave.earImplant != 1>>
 					<br>&nbsp;&nbsp;&nbsp;&nbsp;
diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw
index 612aee850961b571a69370547bd3ee0924e18821..509d0727be931e3d51c975ab68db1b6969b2260f 100644
--- a/src/pregmod/widgets/bodyswapWidgets.tw
+++ b/src/pregmod/widgets/bodyswapWidgets.tw
@@ -72,6 +72,14 @@
 <<set $args[0].earwear = $args[1].earwear>>
 <<set $args[0].earImplant = $args[1].earImplant>>
 <<set $args[0].earShape = $args[1].earShape>>
+<<set $args[0].earT = $args[1].earT>>
+<<set $args[0].earTColor = $args[1].earTColor>>
+<<set $args[0].horn = $args[1].horn>>
+<<set $args[0].hornColor = $args[1].hornColor>>
+<<set $args[0].PTail = $args[1].PTail>>
+<<set $args[0].tail = $args[1].tail>>
+<<set $args[0].tailShape = $args[1].tailShape>>
+<<set $args[0].tailColor = $args[1].tailColor>>
 <<set $args[0].origHColor = $args[1].origHColor>>
 <<set $args[0].hColor = $args[1].hColor>>
 <<set $args[0].hLength = $args[1].hLength>>
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index c767be12592376fe84442e92a03ae78fe89ab867..25f73cd2c4750a3ed51fd67d1af6e07976af2de1 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -19,6 +19,27 @@
 <<if ndef $args[0].earShape>>
 	<<set $args[0].earShape = "normal">>
 <</if>>
+<<if ndef $args[0].earT>>
+	<<set $args[0].earT = "none">>
+<</if>>
+<<if ndef $args[0].earTColor>>
+	<<set $args[0].earTColor = "none">>
+<</if>>
+<<if ndef $args[0].horn>>
+	<<set $args[0].horn = "none">>
+<</if>>
+<<if ndef $args[0].hornColor>>
+	<<set $args[0].hornColor = "none">>
+<</if>>
+<<if ndef $args[0].tail>>
+	<<set $args[0].tail = "none">>
+<</if>>
+<<if ndef $args[0].tailShape>>
+	<<set $args[0].tailShape = "none">>
+<</if>>
+<<if ndef $args[0].tailColor>>
+	<<set $args[0].tailColor = "none">>
+<</if>>
 <<if ndef $args[0].missingEyes>>
 	<<if $args[0].eyes == -3>>
 		<<set $args[0].missingEyes = 3>>
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index dc153cd52a0f4a08b18df00d6a27b573073ef9b0..01ead1cea3f8c290e0e85a464876f9c6283d2a6b 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -2062,6 +2062,20 @@ Setting missing global variables:
 	<</if>>
 <</if>>
 
+/* Neko*/
+	<<if ndef $stockpile.interfacePTail>>
+		<<set $stockpile.interfacePTail = 0>>
+	<</if>>
+	<<if ndef $stockpile.modPTail>>
+		<<set $stockpile.modPTail = 0>>
+	<</if>>
+	<<if ndef $stockpile.warPTail>>
+		<<set $stockpile.warPTail = 0>>
+	<</if>>	
+	<<if ndef $stockpile.sexPTail>>
+		<<set $stockpile.sexPTail = 0>>
+	<</if>>
+
 <<if ndef $trinkets>>
 	<<set $trinkets = []>>
 
diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw
index f1d23864cb8129fc3b51d49d27037e4a5a28115b..f5a749171aa9cf6fe52899e6a4d4c57748ca4fdd 100644
--- a/src/uncategorized/bodyModification.tw
+++ b/src/uncategorized/bodyModification.tw
@@ -926,7 +926,7 @@ Or design your own: <<textbox "$brandDesign" $brandDesign "Body Modification">>
 
 <br>&nbsp;&nbsp;&nbsp;&nbsp;
 Choose a site for branding:
-[[Ears|Body Modification][$brandTarget = "ear"]]
+<<if $activeSlave.earShape != "none">>[[Ears|Body Modification][$brandTarget = "ear"]]<</if>>
 | [[Cheeks|Body Modification][$brandTarget = "cheek"]]
 | [[Shoulders|Body Modification][$brandTarget = "shoulder"]]
 | [[Breasts|Body Modification][$brandTarget = "breast"]]
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index fab5020f3dc5df6ed1cfddcbcb5385fcffe0dcbb..4ab8977bb769ae3049e6f442d80c909b3427a4cb 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -2120,6 +2120,7 @@ $He is
 	<</if>>
 <</if>>
 
+<<hornDescription>>
 <<faceDescription>>
 <<mouthDescription>>
 
diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw
index 72602950b2fd74cb707dfcb17445b3ebbb055972..7820d95647100ab214e6e7f8e21bb4ba9c9bd192 100644
--- a/src/uncategorized/remoteSurgery.tw
+++ b/src/uncategorized/remoteSurgery.tw
@@ -155,16 +155,88 @@ $His $activeSlave.faceShape face is
 	<</if>>
 <</if>>
 
+/*Regular Ears*/
 <br>&nbsp;&nbsp;&nbsp;&nbsp;
-$He has
+$He has 
 <<if $activeSlave.earShape == "normal">>
 	normal ears.
-	[[Elongate ears|Surgery Degradation][$activeSlave.earShape = "elfin", cashX(forceNeg($surgeryCost), "slaveSurgery"), $activeSlave.health -= 10, $surgeryType = "earShape"]]
-<<elseif $activeSlave.earShape == "elfin">>
-	elfin shaped ears.
-	[[Revert ears|Surgery Degradation][$activeSlave.earShape = "normal", cashX(forceNeg($surgeryCost), "slaveSurgery"), $activeSlave.health -= 10, $surgeryType = "earShape"]]
+<<elseif $activeSlave.earShape == "damaged">>
+	damaged ears.
+	| [[Repair|Surgery Degradation][$activeSlave.earShape = "normal", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earRestore"]]
+<<elseif $activeSlave.earShape == "pointy">>
+	small elfin ears.
+<<elseif $activeSlave.earShape == "elven">>
+	long elf ears.
+<<elseif $activeSlave.earShape == "ushi">>
+	floppy cow ears.
+<<elseif $activeSlave.earShape == "none">>
+	no ears.
+<<else>>
+	bugged ears. You done goofed. //Report This//
+<</if>>
+<<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "none">>
+	[[Restore to normal|Surgery Degradation][$activeSlave.earShape = "normal", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earRestore"]]
+<</if>>
+<<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>> | <</if>>
+<<if $activeSlave.earShape != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>>
+	[[Remove them|Surgery Degradation][$activeSlave.earShape = "none", $cash -= $surgeryCost, $activeSlave.health -= 20, $surgeryType = "earGone"]]
+<</if>>
+
+<<if $activeSlave.earShape == "none">>
+	<<if $activeSlave.hears != -2 && $activeSlave.earImplant != 1>>
+		<<set $activeSlave.hears = -1>>
+	<</if>>
+	<<if $activeSlave.brandLocation == "left ear" || $activeSlave.brandLocation == "right ear" || $activeSlave.brandLocation == "both ear">>
+		<<set $activeSlave.brand = 0>>
+	<</if>>
+<</if>>
+
+<<if $activeSlave.earShape != "none">>
+	<br>Give $him:
+	<<if $activeSlave.earShape != "pointy">>
+	[[Small Elfin Ears|Surgery Degradation][$activeSlave.earShape = "pointy", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMinor"]]<</if>>
+	<<if $surgeryUpgrade == 1>>
+		<<if $activeSlave.earShape != "elven">>
+		| [[Long Elf Ears|Surgery Degradation][$activeSlave.earShape = "elven", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>
+		<<if $activeSlave.earShape != "ushi">>
+		| [[Bovine Ears|Surgery Degradation][$activeSlave.earShape = "ushi", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>
+	<</if>>
 <</if>>
 
+/*Top Ears*/
+/*
+<br>&nbsp;&nbsp;&nbsp;&nbsp;
+$He has 
+<<if $activeSlave.earT == "none">>
+	<<if $activeSlave.earShape != "none">>only one set of ears.<<else>>no secondary ears.<</if>>
+<<elseif $activeSlave.earT == "neko">>
+	cat ears.
+<<elseif $activeSlave.earT == "inu">>
+	dog ears.
+<<elseif $activeSlave.earT == "kit">>
+	fox ears.
+<<elseif $activeSlave.earT == "tanuki">>
+	tanuki ears.
+<<else>>
+	You done goofed. //Report This//
+<</if>>
+<<if $activeSlave.earT != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>>
+	[[Remove them|Surgery Degradation][$activeSlave.earT = "none", $cash -= $surgeryCost, $activeSlave.health -= 20, $surgeryType = "earGone"]]
+<</if>>
+
+<<if $surgeryUpgrade == 1>><br>
+	Give $him:
+	<<if $activeSlave.earT != "neko">>
+	[[Cat Ears|Surgery Degradation][$activeSlave.earT = "neko", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>
+	<<if $activeSlave.earT != "inu">>
+	| [[Dog Ears|Surgery Degradation][$activeSlave.earT = "inu", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>
+	<<if $activeSlave.earT != "kit">>
+	| [[Fox Ears|Surgery Degradation][$activeSlave.earT = "kit", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>	
+	<<if $activeSlave.earT != "tanuki">>
+	| [[Tanuki Ears|Surgery Degradation][$activeSlave.earT = "tanuki", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>>
+<</if>>
+*/
+
 <<if $activeSlave.earImplant == 1>>
 	<br>&nbsp;&nbsp;&nbsp;&nbsp;
 	$He has cochlear implants.
@@ -175,8 +247,8 @@ $He has
 	<br>&nbsp;&nbsp;&nbsp;&nbsp;
 	$He has working
 	<<if $activeSlave.hears == -1>>
-		ears, but is hearing impaired.
-		<<if ($activeSlave.earImplant != 1)>>
+		inner ears, but is hearing impaired<<if $activeSlave.earShape == "none">>, likely due to missing the outer structure<</if>>.
+		<<if ($activeSlave.earImplant != 1) && $activeSlave.earShape != "none">>
 			[[Correct hearing|Surgery Degradation][$activeSlave.hears = 0, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $surgeryType = "earFix"]]
 		<</if>>
 	<<else>>
@@ -198,6 +270,25 @@ $He has
 	<</if>>
 <</if>>
 
+/*Horns*/
+<br>&nbsp;&nbsp;&nbsp;&nbsp;
+$He has <<if $activeSlave.horn == "none">>no horns<<else>>$activeSlave.horn<</if>>.
+<<if $activeSlave.horn != "none">>
+	[[Remove them|Surgery Degradation][$activeSlave.horn = "none", $activeSlave.hornColor = "none", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "hornGone"]]<</if>><br>
+	Give $him:
+<<if $activeSlave.horn != "curved succubus horns">>
+	[[Succubus horns|Surgery Degradation][$activeSlave.horn = "curved succubus horns", $activeSlave.hornColor = "jet black", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>
+<<if $activeSlave.horn != "backswept horns">>
+	| [[Backswept horns|Surgery Degradation][$activeSlave.horn = "backswept horns", $activeSlave.hornColor = "jet black", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>
+<<if $activeSlave.horn != "cow horns">>
+	| [[Bovine horns|Surgery Degradation][$activeSlave.horn = "cow horns", $activeSlave.hornColor = "ivory", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>
+<<if $activeSlave.horn != "one long oni horn">>
+	| [[an oni horn|Surgery Degradation][$activeSlave.horn = "one long oni horn", $activeSlave.hornColor = $activeSlave.skin,  $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>
+<<if $activeSlave.horn != "two long oni horns">>
+	| [[2 oni horns|Surgery Degradation][$activeSlave.horn = "two long oni horns", $activeSlave.hornColor = $activeSlave.skin, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>
+<<if $activeSlave.horn != "small horns">>
+	| [[Small horns|Surgery Degradation][$activeSlave.horn = "small horns", $activeSlave.hornColor = "ivory", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>>	
+
 <br>&nbsp;&nbsp;&nbsp;&nbsp;
 $He has
 <<if $activeSlave.lips <= 10>>
@@ -1515,6 +1606,15 @@ Work on $him structurally:
 	<</if>>
 <</if>>
 
+<br>&nbsp;&nbsp;&nbsp;&nbsp;
+	<<if $activeSlave.PTail == 1>>
+		$He has a neural interface allowing attachment of tails.
+	<<elseif $stockpile.interfacePTail > 0>>
+		$He lacks a neural interface allowing attachment of tails.
+		[[Implant interface|Surgery Degradation][$activeSlave.PTail = 1, $activeSlave.tail = "none", $activeSlave.tailColor = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $stockpile.interfacePTail -= 1, $surgeryType = "tailInterface"]]
+	<<else>>
+		$He lacks a neural interface allowing attachment of tails and you have none in stock.
+	<</if>>
 
 <<if $organFarmUpgrade >= 1>> /* ORGAN FARM */
 	<<if $activeSlave.indentureRestrictions < 2>>
diff --git a/src/uncategorized/salon.tw b/src/uncategorized/salon.tw
index aeda3b784264ee8aa80e6404622a5e307d17952e..86209b1745c5f619505fad239a2daffb08f67f55 100644
--- a/src/uncategorized/salon.tw
+++ b/src/uncategorized/salon.tw
@@ -87,7 +87,7 @@
 		<<if $activeSlave.origEye != $activeSlave.eyeColor>>
 			[[Remove lenses|Salon][$activeSlave.eyeColor = $activeSlave.origEye]] or //choose new ones://
 		<<else>>
-			//Choose $his cosmetic lenses:
+			//Choose $his cosmetic lenses://
 		<</if>>
 	<<else>>
 		<<if $activeSlave.eyeColor == "empty">>
@@ -159,9 +159,69 @@
 <</if>> /*End eye check */
 
 /* EARS */
+<<if $activeSlave.earT != "none">><br><br>
+	$His fluffy ears are $activeSlave.earTColor.
+	<<if $activeSlave.earTColor != $activeSlave.hColor>>
+		[[Match current hair|Salon][$activeSlave.earTColor = $activeSlave.hColor]] or //choose a new one://
+	<<else>>
+		//Choose a dye color before dyeing $his ears://
+	<</if>>
+	<br>&nbsp;&nbsp;&nbsp;&nbsp;
+	Colors:
+		[[Auburn|Salon][$primaryEarColor = "auburn"]]
+		| [[Black|Salon][$primaryEarColor = "black"]]
+		| [[Blazing Red|Salon][$primaryEarColor = "blazing red"]]
+		| [[Blonde|Salon][$primaryEarColor = "blonde"]]
+		| [[Blue-Violet|Salon][$primaryEarColor = "blue-violet"]]
+		| [[Blue|Salon][$primaryEarColor = "blue"]]
+		| [[Brown|Salon][$primaryEarColor = "brown"]]
+		| [[Burgundy|Salon][$primaryEarColor = "burgundy"]]
+		| [[Chestnut|Salon][$primaryEarColor = "chestnut"]]
+		| [[Chocolate|Salon][$primaryEarColor = "chocolate brown"]]
+		| [[Copper|Salon][$primaryEarColor = "copper"]]
+		| [[Dark Blue|Salon][$primaryEarColor = "dark blue"]]
+		| [[Dark Brown|Salon][$primaryEarColor = "dark brown"]]
+		| [[Dark Orchid|Salon][$primaryEarColor = "dark orchid"]]
+		| [[Deep Red|Salon][$primaryEarColor = "deep red"]]
+		| [[Ginger|Salon][$primaryEarColor = "ginger"]]
+		| [[Golden|Salon][$primaryEarColor = "golden"]]
+		| [[Green-yellow|Salon][$primaryEarColor = "green-yellow"]]
+		| [[Green|Salon][$primaryEarColor = "green"]]
+		| [[Grey|Salon][$primaryEarColor = "grey"]]
+		| [[Hazel|Salon][$primaryEarColor = "hazel"]]
+		| [[Jet Black|Salon][$primaryEarColor = "jet black"]]
+		| [[Neon Blue|Salon][$primaryEarColor = "neon blue"]]
+		| [[Neon Green|Salon][$primaryEarColor = "neon green"]]
+		| [[Neon Pink|Salon][$primaryEarColor = "neon pink"]]
+		| [[Pink|Salon][$primaryEarColor = "pink"]]
+		| [[Platinum Blonde|Salon][$primaryEarColor = "platinum blonde"]]
+		| [[Purple|Salon][$primaryEarColor = "purple"]]
+		| [[Red|Salon][$primaryEarColor = "red"]]
+		| [[Sea Green|Salon][$primaryEarColor = "sea green"]]
+		| [[Silver|Salon][$primaryEarColor = "silver"]]
+		| [[Strawberry-Blonde|Salon][$primaryEarColor = "strawberry-blonde"]]
+		| [[White|Salon][$primaryEarColor = "white"]]
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
 
+	Highlights:
+		[[None|Salon][$secondaryEarColor = ""]]
+		| [[Black|Salon][$secondaryEarColor = " with black highlights"]]
+		| [[Blazing Red|Salon][$secondaryEarColor = " with blazing red highlights"]]
+		| [[Blonde|Salon][$secondaryEarColor = " with blonde highlights"]]
+		| [[Grey|Salon][$secondaryEarColor = " with grey highlights"]]
+		| [[Neon Blue|Salon][$secondaryEarColor = " with neon blue highlights"]]
+		| [[Neon Green|Salon][$secondaryEarColor = " with neon green highlights"]]
+		| [[Neon Pink|Salon][$secondaryEarColor = " with neon pink highlights"]]
+		| [[Rainbow|Salon][$secondaryEarColor = " with rainbow highlights"]]
+		| [[Silver|Salon][$secondaryEarColor = " with silver highlights"]]
+		| [[White|Salon][$secondaryEarColor = " with white highlights"]]
+
+	<<if $primaryEarColor != 0>>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
+		[["Dye " + $his + " ears"|Salon][$activeSlave.earTColor = ($primaryEarColor + $secondaryEarColor),cashX(forceNeg($modCost), "slaveMod", $activeSlave), $primaryEarColor = 0, $secondaryEarColor = ""]] $primaryEarColor $secondaryEarColor now?
+	<</if>>
+<</if>>	
 <br><br>
-
 <<if $activeSlave.earImplant == 1>>
 	$He has artificial inner ear implants,
 	<<if $activeSlave.earwear == "none">>
@@ -216,6 +276,38 @@
 
 /*End ear check */
 
+<<if $activeSlave.horn != "none">><br><br>
+$His $activeSlave.horn are $activeSlave.hornColor
+<br>&nbsp;&nbsp;&nbsp;&nbsp;
+Set horn color:
+		[[Black|Salon][$activeSlave.hornColor = "black",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Blazing Red|Salon][$activeSlave.hornColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Blue-Violet|Salon][$activeSlave.hornColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Blue|Salon][$activeSlave.hornColor = "blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Brown|Salon][$activeSlave.hornColor = "brown",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Burgundy|Salon][$activeSlave.hornColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Copper|Salon][$activeSlave.hornColor = "copper",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Dark Blue|Salon][$activeSlave.hornColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Dark Brown|Salon][$activeSlave.hornColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Dark Orchid|Salon][$activeSlave.hornColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Deep Red|Salon][$activeSlave.hornColor = "deep red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Golden|Salon][$activeSlave.hornColor = "golden",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Green-yellow|Salon][$activeSlave.hornColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Green|Salon][$activeSlave.hornColor = "green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Grey|Salon][$activeSlave.hornColor = "grey",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Jet Black|Salon][$activeSlave.hornColor = "jet black",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Neon Blue|Salon][$activeSlave.hornColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Neon Green|Salon][$activeSlave.hornColor = "neon green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Neon Pink|Salon][$activeSlave.hornColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Pink|Salon][$activeSlave.hornColor = "pink",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Ivory|Salon][$activeSlave.hornColor = "ivory",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Purple|Salon][$activeSlave.hornColor = "purple",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Red|Salon][$activeSlave.hornColor = "red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Sea Green|Salon][$activeSlave.hornColor = "sea green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[Silver|Salon][$activeSlave.hornColor = "silver",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+		| [[White|Salon][$activeSlave.hornColor = "white",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
+<</if>>
+
 /* HAIR */
 
 <br><br>
@@ -556,6 +648,69 @@ Dye or paint:
 | [[Red|Salon][$activeSlave.skin = "dyed red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
 | [[Tiger Stripes|Salon][$activeSlave.skin = "tiger striped",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]]
 
+<<if $activeSlave.tail != "none">><br><br>
+	$His tail is $activeSlave.tailColor.
+	<<if $activeSlave.tailColor != $activeSlave.hColor>>
+		[[Match current hair|Salon][$activeSlave.tailColor = $activeSlave.hColor]] or //choose a new one://
+	<<else>>
+		//Choose a dye color before dyeing $his tail://
+	<</if>>
+	<br>&nbsp;&nbsp;&nbsp;&nbsp;
+	Colors:
+		[[Auburn|Salon][$primaryTailColor = "auburn"]]
+		| [[Black|Salon][$primaryTailColor = "black"]]
+		| [[Blazing Red|Salon][$primaryTailColor = "blazing red"]]
+		| [[Blonde|Salon][$primaryTailColor = "blonde"]]
+		| [[Blue-Violet|Salon][$primaryTailColor = "blue-violet"]]
+		| [[Blue|Salon][$primaryTailColor = "blue"]]
+		| [[Brown|Salon][$primaryTailColor = "brown"]]
+		| [[Burgundy|Salon][$primaryTailColor = "burgundy"]]
+		| [[Chestnut|Salon][$primaryTailColor = "chestnut"]]
+		| [[Chocolate|Salon][$primaryTailColor = "chocolate brown"]]
+		| [[Copper|Salon][$primaryTailColor = "copper"]]
+		| [[Dark Blue|Salon][$primaryTailColor = "dark blue"]]
+		| [[Dark Brown|Salon][$primaryTailColor = "dark brown"]]
+		| [[Dark Orchid|Salon][$primaryTailColor = "dark orchid"]]
+		| [[Deep Red|Salon][$primaryTailColor = "deep red"]]
+		| [[Ginger|Salon][$primaryTailColor = "ginger"]]
+		| [[Golden|Salon][$primaryTailColor = "golden"]]
+		| [[Green-yellow|Salon][$primaryTailColor = "green-yellow"]]
+		| [[Green|Salon][$primaryTailColor = "green"]]
+		| [[Grey|Salon][$primaryTailColor = "grey"]]
+		| [[Hazel|Salon][$primaryTailColor = "hazel"]]
+		| [[Jet Black|Salon][$primaryTailColor = "jet black"]]
+		| [[Neon Blue|Salon][$primaryTailColor = "neon blue"]]
+		| [[Neon Green|Salon][$primaryTailColor = "neon green"]]
+		| [[Neon Pink|Salon][$primaryTailColor = "neon pink"]]
+		| [[Pink|Salon][$primaryTailColor = "pink"]]
+		| [[Platinum Blonde|Salon][$primaryTailColor = "platinum blonde"]]
+		| [[Purple|Salon][$primaryTailColor = "purple"]]
+		| [[Red|Salon][$primaryTailColor = "red"]]
+		| [[Sea Green|Salon][$primaryTailColor = "sea green"]]
+		| [[Silver|Salon][$primaryTailColor = "silver"]]
+		| [[Strawberry-Blonde|Salon][$primaryTailColor = "strawberry-blonde"]]
+		| [[White|Salon][$primaryTailColor = "white"]]
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
+
+	Highlights:
+		[[None|Salon][$secondaryTailColor = ""]]
+		| [[Black|Salon][$secondaryTailColor = " with black highlights"]]
+		| [[Blazing Red|Salon][$secondaryTailColor = " with blazing red highlights"]]
+		| [[Blonde|Salon][$secondaryTailColor = " with blonde highlights"]]
+		| [[Grey|Salon][$secondaryTailColor = " with grey highlights"]]
+		| [[Neon Blue|Salon][$secondaryTailColor = " with neon blue highlights"]]
+		| [[Neon Green|Salon][$secondaryTailColor = " with neon green highlights"]]
+		| [[Neon Pink|Salon][$secondaryTailColor = " with neon pink highlights"]]
+		| [[Rainbow|Salon][$secondaryTailColor = " with rainbow highlights"]]
+		| [[Silver|Salon][$secondaryTailColor = " with silver highlights"]]
+		| [[White|Salon][$secondaryTailColor = " with white highlights"]]
+
+	<<if $primaryTailColor != 0>>
+		<br>&nbsp;&nbsp;&nbsp;&nbsp;
+		[["Dye " + $his + " tail"|Salon][$activeSlave.tailColor = ($primaryTailColor + $secondaryTailColor),cashX(forceNeg($modCost), "slaveMod", $activeSlave), $primaryTailColor = 0, $secondaryTailColor = ""]] $primaryTailColor $secondaryTailColor now?
+	<</if>>
+<</if>>	
+
 /* MARKS */
 
 <<if ($activeSlave.markings == "beauty mark")>>
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 59f61088b7b9bce28740fdc648baddb898113b51..01ee3a990bbfa90b6f1cd79db1222ed5fef2d8de 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -58,7 +58,7 @@
 
 <br><br>__Take slave to another room:__
 [[Wardrobe|Wardrobe Use][$degradation = 0]]
-| [[Auto salon|Salon][$degradation = 0,$primaryHairColor = "",$secondaryHairColor = "",$artificialEyeColor = "",$artificialEyeShape = "",$artificialEyeFill = "",$tattooChoice = "",$piercingLevel = ""]]
+| [[Auto salon|Salon][$degradation = 0,$primaryHairColor = "",$secondaryHairColor = "",$primaryEarColor = "",$secondaryEarColor = "",$primaryTailColor = "",$secondaryTailColor = "",$artificialEyeColor = "",$artificialEyeShape = "",$artificialEyeFill = "",$tattooChoice = "",$piercingLevel = ""]]
 | [[Body mod studio|Body Modification][$degradation = 0, $tattooChoice = undefined]]
 | [[Remote surgery|Remote Surgery][$degradation = 0]]
 <<if $cyberMod == 1>>| [[Configure cybernetics|cyberConfig][$temp = 0]]<</if>>
diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw
index 13526fa2bfb38160685bcdd3e976a3ee5b793e97..59f1041b6a12010a3845f83291f921ce6ac2d0a7 100644
--- a/src/uncategorized/surgeryDegradation.tw
+++ b/src/uncategorized/surgeryDegradation.tw
@@ -416,8 +416,80 @@ As the remote surgery's long recovery cycle completes,
 	<</if>>
 	<<set $activeSlave.hears = 0>>
 
-<<case "earShape">>
-	The ear surgery is @@.red;invasive@@ and $he spends some time in the autosurgery recovering. As soon as the bandages around $his head are removed, $he initially believes nothing has changed, but soon discovers $his ears have been reshaped.
+<<case "earMinor">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to $his altered ears. The modification surgery is brief, with @@.red;nothing more than minor health effects.@@
+	<<elseif ($activeSlave.devotion > 20)>>
+		<<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new ears, <<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified, <</if>><<if $activeSlave.amp != 1>>they're still a bit sore, but $he reaches up to feel them gently,<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $He seems to think $his new ears are @@.hotpink;cute.@@ The modification surgery is brief, with @@.red;nothing more than minor health effects.@@
+		<<set $activeSlave.devotion += 4>>
+	<<elseif ($activeSlave.devotion >= -20)>>
+		<<if canSee($activeSlave)>>$He eyes $his new ears skeptically.<<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>>$He's come to terms with the fact that $he's a slave, so $he isn't much affected mentally despite the surprise of having $his ears reshaped. The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 5>>
+	<<else>>
+		<<if canSee($activeSlave)>>$He eyes $his new ears with disdain.<<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently, as if to confirm it's not some trick.<</if>> For now, @@.mediumorchid;$he seems to view $his altered ears as a cruel imposition.@@ The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 10, $activeSlave.devotion -= 5>>
+	<</if>>
+	
+<<case "earMajor">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+	<<elseif ($activeSlave.devotion > 50)>>
+		<<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new ears and they immediately perk up surprising $him, <<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified, <</if>><<if $activeSlave.amp != 1>>they're still a bit sore, but $he reaches up to feel them gently<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will, for now $he seems to think $his new ears are @@.hotpink;cute.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+		<<set $activeSlave.devotion += 4>>
+	<<elseif ($activeSlave.devotion >= -20)>>
+		<<if canSee($activeSlave)>>$He eyes $his new ears disapprovingly, they lay back flat against $his head as if mirroring $his thoughts.<<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>>$His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will. $He's come to terms with the fact that $he's a slave, but $he is still somewhat angry that you would go this far. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 5, $activeSlave.devotion -= 5>>
+	<<else>>
+		<<if canSee($activeSlave)>>$He eyes $his new ears with disgust, they lay back flat against $his head as if mirroring $his thoughts.<<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>> $His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will.  For now, @@.mediumorchid;$he seems to view $his altered ears as a cruel imposition.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 10, $activeSlave.devotion -= 10>>
+	<</if>>	
+
+<<case "earRestore">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+	<<else>>/*Will expand in future*/
+		$He is delighted to have $his ears back. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+	<</if>>	
+	
+<<case "earGone">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+	<<elseif ($activeSlave.devotion > 50)>>
+		She is horrified that you would disfigure her but ultimately accepts it since she is devoted to you. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@
+	<<elseif ($activeSlave.devotion >= -20)>>
+		She is horrified that you would disfigure her, $he's come to terms with the fact that $he's a slave, but $he is still @@.mediumorchid;angry that you would go this far.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 10, $activeSlave.devotion -= 10>>
+	<<else>>
+		She is horrified that you would disfigure her and begins to weep openly as soon as $he discovers the loss.@@.mediumorchid;$He seems to consdier the loss as a cruel theft.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 20, $activeSlave.devotion -= 20>>
+	<</if>>
+
+<<case "horn">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to $his new head ornamentation. As with all invasive surgery @@.red;$his health has been affected.@@
+	<<elseif ($activeSlave.devotion > 20)>>
+		<<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new $activeSlave.hornColor $activeSlave.horn, <<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to feel their shape,<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $He seems to think $his new horns are @@.hotpink;cute.@@ As with all invasive surgery @@.red;$his health has been affected.@@
+		<<set $activeSlave.devotion += 4>>
+	<<elseif ($activeSlave.devotion >= -20)>>
+		<<if canSee($activeSlave)>>$He eyes $his new $activeSlave.hornColor $activeSlave.horn disapprovingly<<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to tug on them gently,<</if>>$He's come to terms with the fact that $he's a slave, so $he isn't much affected mentally despite the surprise of having horns attached to $his head. As with all invasive surgery @@.red;$his health has been affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 5>>
+	<<else>>
+		<<if canSee($activeSlave)>>$He eyes $his new $activeSlave.hornColor $activeSlave.horn with disgust.<<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, and probably not for the better, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to tug on them, as if to confirm it's not some trick.<</if>> For now, @@.mediumorchid;$he seems to view $his head ornamentation as a cruel imposition.@@ As with all invasive surgery @@.red;$his health has been affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 10, $activeSlave.devotion -= 5>>
+	<</if>>
+	
+<<case "hornGone">>
+	<<if $activeSlave.fetish == "mindbroken">>
+		$He shows little reaction to the removal of $his head ornamentation. As with all invasive surgery @@.red;$his health has been affected.@@
+	<<elseif ($activeSlave.devotion > 20)>>
+		$He is a little sad $his head ornaments are gone but since $he is attentive to your will it doesn't have a great impact on $his mental state. As with all invasive surgery @@.red;$his health has been affected.@@
+	<<else>>
+		$He is glad to be rid of the horns but any happiness is tempered by $his general dissatisfaction of being treated as your surgical plaything. As with all invasive surgery @@.red;$his health has been affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body.
+		<<set $activeSlave.trust -= 5>>
+	<</if>>
+
+<<case "tailInterface">>
+	Implanting a tail socket and interfacing it with $his spinal column is delicate and invasive procedure @@.red;$his health has been greatly affected.@@
 
 <<case "boobs">>
 	<<if ($activeSlave.areolae < 2) && (random(1,100) > 70)>>
diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw
index 0e1c3a087f2d7eac32fff89b562abbb5c77fb60d..42240dcc3d431742ea8a66c0b957878892b52c1d 100644
--- a/src/uncategorized/walkPast.tw
+++ b/src/uncategorized/walkPast.tw
@@ -3863,4 +3863,4 @@
 	<</switch>>
 <</if>>
 </span>
-//
+//
\ No newline at end of file
diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw
index 5086d6b54435d73b509722540f689d30964e2cc9..9459e4ece63071a00b228c03ce881a32c846b81d 100644
--- a/src/utility/descriptionWidgetsFlesh.tw
+++ b/src/utility/descriptionWidgetsFlesh.tw
@@ -5321,9 +5321,40 @@ $He's got a
 
 <<widget "earDescription">>
 /* ear shape description here */
-<<if $activeSlave.earShape == "elfin">>
-	$His $activeSlave.earShape ears are <<print either("elongated, ending in pointed tips that might wiggle when "+$he+"'s particularly pleased with something.", "long and thin, tapering to a point.", " leaf-shaped, and twitch with the slightest touch.")>>
+<<if $activeSlave.earShape == "none">>
+		<<if $activeSlave.earImplant == 1>>
+			<<if $activeSlave.earT != "none">>
+			$He has smooth skin where $his ears should be as $his hearing has been cybernetically rerouted to $his secondary ears. 
+			<<else>>
+			$He has nothing but small, perforated metal disks where $his ears should be.
+			<</if>>
+		<<else>>
+			$He has small unsightly holes on the sides of $his head. /*That can't be sanitary.*/
+		<</if>>	
+	<<elseif $activeSlave.earShape == "damaged">>
+		$His outer ears have been severely damaged.
+	<<elseif $activeSlave.earShape == "normal">>
+		$He has perfectly ordinary ears. 
+	<<elseif $activeSlave.earShape == "robot">>
+		$He has high tech cyber-ears that could be mistaken for headphones. /*not yet implemented*/
+	<<elseif $activeSlave.earShape == "pointy">>
+		$His small, <<print either("pointed", "leaf-shaped", "elfin")>> ears are quite cute and give her an exotic apearance.
+	<<elseif $activeSlave.earShape == "elven">>
+		$He has long, thin elven ears that <<print either("tend waggle up and down when $he is exicited", "twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>.
+	<<elseif $activeSlave.earShape == "ushi">>
+		$He has long, floppy cow ears that <<print either("tend waggle up and down when $he is exicited", "twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>.
+<</if>>
+
+<<if $activeSlave.earT == "neko">>
+		$He has cute, $activeSlave.earTColor cat ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>
+	<<elseif $activeSlave.earT == "inu">>
+		$He has cute, $activeSlave.earTColor dog ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>
+	<<elseif $activeSlave.earT == "kit">>
+		$He has elegant, $activeSlave.earTColor fox ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>
+	<<elseif $activeSlave.earT == "tanuki">>
+		$He has adorable, $activeSlave.earTColor, round tanuki ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and <<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>
 <</if>>
+
 <<if $activeSlave.hears < 0>>
 	<<if $activeSlave.hears == -1>>
 		$His hearing is noticeably impaired,
@@ -5511,6 +5542,26 @@ $His
 
 <</widget>>
 
+<<widget "hornDescription">>
+<<if $activeSlave.horn == "curved succubus horns">>
+		$He has
+		<<if $activeSlave.face > 40>>majestic $activeSlave.hornColor horns that jut out from the back of $his head and curve forward, looking almost like a crown.
+		<<elseif $activeSlave.face > 0>>imposing $activeSlave.hornColor horns that jut out from the back of $his head and curve forward nicely.
+		<<else>>terrifying $activeSlave.hornColor horns that jut out from the back of $his head and curve forward menacingly.<</if>>
+	<<elseif $activeSlave.horn == "backswept horns">>
+		<<if $activeSlave.face > 40>>majestic $activeSlave.hornColor horns that jut out the front of $his head and curve backwards, like some royal headdress.
+		<<elseif $activeSlave.face > 0>>imposing $activeSlave.hornColor horns that jut out the front of $his head and curve backwards nicely.
+		<<else>>terrifying $activeSlave.hornColor horns that jut out the front of $his head and curve backwards, looking like some twisted helmet.<</if>>
+	<<elseif $activeSlave.horn == "cow horns">>
+		$He has two $activeSlave.hornColor cow horns on the sides of her head, they curve sharply upward.
+	<<elseif $activeSlave.horn == "two long oni horns">>
+		$He has two long $activeSlave.hornColor horns sticking straight up out of $his forehead<<if $activeSlave.devotion > 20>>$he holds them up proudly<</if>>.
+	<<elseif $activeSlave.horn == "one long oni horn">>
+		$He has a long $activeSlave.hornColor horn sticking straight up out of $his forehead<<if $activeSlave.devotion > 20>>$he holds it up proudly<</if>>.
+	<<elseif $activeSlave.horn == "small horns">>
+		$He has cute, little $activeSlave.hornColor horns sticking out of $his head.
+<</if>>
+<</widget>>
 
 <<widget "mouthDescription">>
 
@@ -16868,6 +16919,23 @@ $He has
 	<</if>>
 <</if>>
 
+<<if $activeSlave.tailShape == "neko">>
+		$He has a long, slender, $activeSlave.tailColor cat tail which tends to sway side to side when $he is focused on a task.
+	<<elseif $activeSlave.tailShape == "inu">>
+		$He has a bushy, $activeSlave.tailColor dog tail which tends to wag energetically when $he gets exited.
+	<<elseif $activeSlave.tailShape == "kit">>
+		$He has a soft, fluffy, $activeSlave.tailColor fox tail.
+	<<elseif $activeSlave.tailShape == "kitsune">>
+		$He has three incredibly soft, fluffy, $activeSlave.tailColor fox tails, they feel heavenly to the touch.
+	<<elseif $activeSlave.tailShape == "tanuki">>
+		$He has a long, fluffy, $activeSlave.tailColor tanuki tail with a dark stripe running down the middle.
+	<<elseif $activeSlave.tailShape == "ushi">>
+		$He has a long, $activeSlave.tailColor cow tail, it has a small tuft of hair at the end and tends to swat at things absentminedly.
+	<<elseif $activeSlave.tail == "combat">>
+		$He has a very long $activeSlave.tailColor metallic tail that can lash out, constrict, and deploy razor sharp spikes on command.
+	<<elseif $activeSlave.tail == "sex">>
+		$He has a long, slender, $activeSlave.tailColor tail. While not strong it is very dextrous and has a small fleshy spade-shaped tip that can vibrate and dispense lube on command.
+<</if>>
 <</widget>>
 
 <<widget "heightImplantDescription">>