diff --git a/src/art/artJS.tw b/src/art/artJS.tw
index c5e762afe2fc4f0d6cedf4de064831a73354377b..b52a830604d4a75cc478140aec8c84f4e7b5b628 100644
--- a/src/art/artJS.tw
+++ b/src/art/artJS.tw
@@ -152,16 +152,18 @@ window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) {
 /* 
 This takes a textual hair colour description and tries to guess the appropriate HTML compliant color code.
 
-hColor should be a color name, but can also be a string describing hair colour.
+color should be a color name, but can also be a string describing hair colour.
+eyes can be nearly anything, it only indicates that the function is being used for eye color instead of hair color.
 
 This code's working is described to the user in the Encyclopedia, chapter "Lore", section "Dyes".
 */
-window.extractHairColor = function (hColor) {
+window.extractColor = function (color, eyes) {
 	/* 
 	these are color names known and used in FreeCities 
 	attributed color names are at the front of the array
 	*/
 	var FCname2HTMLarray = [
+		["amber", "#ffbf00"],
 		["auburn", "#7e543e"],
 		["black", "#3F4040"],
 		["blazing red", "#E00E2B"],
@@ -184,6 +186,7 @@ window.extractHairColor = function (hColor) {
 		["neon blue", "#2284C3"],
 		["neon green", "#25d12b"],
 		["neon pink", "#cc26aa"],
+		["pale-grey", "#b2babb"],
 		["pink", "#D18CBC"],
 		["platinum blonde", "#fcf3c1"],
 		["red", "#BB2027"],
@@ -198,30 +201,30 @@ window.extractHairColor = function (hColor) {
 	var HTMLstandardColors = ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgrey", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgrey", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"];
 
 	var FCnames = new Map(FCname2HTMLarray);
-	hColor = hColor.toLowerCase(); /* normalization: lowercase color name */
-	var colorCode = FCnames.get(hColor); /* look up in FreeCities color names */
+	color = color.toLowerCase(); /* normalization: lowercase color name */
+	var colorCode = FCnames.get(color); /* look up in FreeCities color names */
 	if (!colorCode) { /* not a FreeCities color name*/
-		if (HTMLstandardColors.includes(hColor) || hColor.match(/^#([0-9a-f]{3}){1,2}$/) !== null) {
-			colorCode = hColor; /* is a HTML color name or value, use it directly */
+		if (HTMLstandardColors.includes(color) || color.match(/^#([0-9a-f]{3}){1,2}$/) !== null) {
+			colorCode = color; /* is a HTML color name or value, use it directly */
 		} else {
 			/* 
-			is not even a HTML color name. hColor probably is a description.
+			is not even a HTML color name. color probably is a description.
 			look for anything resembling a valid color name within the description.
 			*/
-			var hColorNoSpaces = hColor.replace(/\s+/g, ''); /* remove all spaces from description */
+			var colorNoSpaces = color.replace(/\s+/g, ''); /* remove all spaces from description */
 			var FCkeys = Array.from(FCnames.keys());
 			var colorCodes = [
 				FCnames.get(FCkeys.find(function (e) {
-					return hColor.startsWith(e);
+					return color.startsWith(e);
 				})),
 				HTMLstandardColors.find(function (e) {
-					return hColorNoSpaces.startsWith(e);
+					return colorNoSpaces.startsWith(e);
 				}),
 				FCnames.get(FCkeys.find(function (e) {
-					return hColor.includes(e);
+					return color.includes(e);
 				})),
 				HTMLstandardColors.find(function (e) {
-					return hColorNoSpaces.includes(e);
+					return colorNoSpaces.includes(e);
 				})
 			];
 			colorCode = colorCodes.find(function (e) {
@@ -230,8 +233,11 @@ window.extractHairColor = function (hColor) {
 		}
 	}
 	if (!colorCode) {
-		console.log("Art Color Tools JS: Unable to determine HTML compliant color code for hair color string '" + hColor + "'.");
-		colorCode = "fuchsia"; /* use fuchsia as error marker */
+		console.log("Art Color Tools JS: Unable to determine HTML compliant color code for color string '" + color + "'.");
+		if (eyes)
+			colorCode = "#89b7ff";
+		else
+			colorCode = "fuchsia"; /* use fuchsia as error marker */
 	}
 	return colorCode;
 };
diff --git a/src/art/vector/Set_Colour_Hair.tw b/src/art/vector/Set_Colour_Hair.tw
index aacf2042895eb13fad377a6eb890413d92d70ffc..b2593878b68b3227c973a20bd4bce4495ce0f672 100644
--- a/src/art/vector/Set_Colour_Hair.tw
+++ b/src/art/vector/Set_Colour_Hair.tw
@@ -6,6 +6,6 @@ to-"HTML Color"-Map
 courtesy of Nov-X 
 */
 
-<<set _hairColour = extractHairColor(_artSlave.hColor) >>
-<<set _pubicHairColour = extractHairColor(_artSlave.pubicHColor) >>
-<<set _underarmHairColour = extractHairColor(_artSlave.underArmHColor) >>
\ No newline at end of file
+<<set _hairColour = extractColor(_artSlave.hColor) >>
+<<set _pubicHairColour = extractColor(_artSlave.pubicHColor) >>
+<<set _underarmHairColour = extractColor(_artSlave.underArmHColor) >>
\ No newline at end of file
diff --git a/src/art/vector/Set_Colour_Outfit_JS.tw b/src/art/vector/Set_Colour_Outfit_JS.tw
index e1d4f085abd4686ead80cfb4743ba3788acd73db..417e60894221267905904a5c1ae29e3f09203684 100644
--- a/src/art/vector/Set_Colour_Outfit_JS.tw
+++ b/src/art/vector/Set_Colour_Outfit_JS.tw
@@ -48,53 +48,7 @@ if (artSlave.glassesColor) {
 }
 
 if (artSlave.eyeColor) {
-	switch (artSlave.eyeColor) {
-		case "blue":
-			s.eyeColor = "#0579ff";
-			break;
-		case "black":
-			s.eyeColor = "#0b0907";
-			break;
-		case "brown":
-			s.eyeColor = "#795548";
-			break;
-		case "red":
-			s.eyeColor = "#af1c1c";
-			break;
-		case "green":
-			s.eyeColor = "#66b266";
-			break;
-		case "turquoise":
-			s.eyeColor = "#39c6b8";
-			break;
-		case "sky-blue":
-			s.eyeColor = "#89b7ff";
-			break;
-		case "hazel":
-			s.eyeColor = "#8d6f1f";	
-			break;
-		case "pale-grey":
-			s.eyeColor = "#b2babb";
-			break;
-		case "white":
-			s.eyeColor = "#ffffff";
-			break;
-		case "pink":
-			s.eyeColor = "#ffb7c4";
-			break;
-		case "yellow":
-			s.eyeColor = "#ffff00";
-			break;
-		case "orange":
-			s.eyeColor = "#ffa500";
-			break;
-		case "amber":
-			s.eyeColor = "#ffbf00";
-			break;
-		default:
-			/* use color for "eyes" by default */
-			s.eyeColor = "#89b7ff";
-	}
+	s.eyeColor = extractColor(artSlave.eyeColor, 1);
 }
 
 return s;
diff --git a/src/art/vector_revamp/vectorRevampedArtControlJS.tw b/src/art/vector_revamp/vectorRevampedArtControlJS.tw
index a37b505f353251de783b270768b5c568584539ec..7e9e80e054a7ba1a64891df5b40ee65fee37c7d9 100644
--- a/src/art/vector_revamp/vectorRevampedArtControlJS.tw
+++ b/src/art/vector_revamp/vectorRevampedArtControlJS.tw
@@ -200,7 +200,7 @@ class ArtStyleControl {
 		this.labia.fill = colorSlave.labiaColor;
 
 		this.hair = new ArtStyleEntry("hair");
-		this.hair.fill = extractHairColor(this.artSlave.hColor);
+		this.hair.fill = extractColor(this.artSlave.hColor);
 
 		this.shoe = new ArtStyleEntry("shoe");
 		this.shoe.fill = "#3E65B0";
@@ -238,7 +238,7 @@ class ArtStyleControl {
 		this.eyeball.fill = "#dfdfdf";
 
 		this.iris = new ArtStyleEntry("iris");
-		this.iris.fill = extractHairColor(this.artSlave.eyeColor);
+		this.iris.fill = extractColor(this.artSlave.eyeColor, 1);
 
 		this.highlight1 = new ArtStyleEntry("highlight1");
 		this.highlight1.fill = "#ffffff";
@@ -254,10 +254,10 @@ class ArtStyleControl {
 		this.highlightStrong.fill = "#ffffff";
 
 		this.armpitHair = new ArtStyleEntry("armpit_hair");
-		this.armpitHair.fill = extractHairColor(this.artSlave.underArmHColor);
+		this.armpitHair.fill = extractColor(this.artSlave.underArmHColor);
 
 		this.pubicHair = new ArtStyleEntry("pubic_hair");
-		this.pubicHair.fill = extractHairColor(this.artSlave.pubicHColor);
+		this.pubicHair.fill = extractColor(this.artSlave.pubicHColor);
 
 		this.bellyDetails = new ArtStyleEntry("belly_details");
 		this.bellyDetails["fill-opacity"] = 1;
diff --git a/src/utility/assayWidgets.tw b/src/utility/assayWidgets.tw
index d9e5fdbff92d44b3f7ae805a440b2251e19622a9..6dd3a283e2a432bdd762f1f35ec5d44f286034f1 100644
--- a/src/utility/assayWidgets.tw
+++ b/src/utility/assayWidgets.tw
@@ -1108,11 +1108,7 @@
 	<</if>>
 <</if>>
 
-<<if $beauty < 1>>
-	<<set $beauty = 1>>
-<<else>>
-	<<set $beauty = Math.trunc($beauty*0.5)>>
-<</if>>
+<<set $beauty = Math.max(1, Math.trunc($beauty*0.5))>>
 
 <</widget>>