diff --git a/src/art/webgl/art.js b/src/art/webgl/art.js
index eed7bd0bb4dc827f0fc0f83a73200b8d0900f293..cedf59222987981359832f4889067cd11cf56197 100644
--- a/src/art/webgl/art.js
+++ b/src/art/webgl/art.js
@@ -1834,11 +1834,21 @@ App.Art.getAnimState = function(slave, scene, p, morphs, isAnimTick) {
 
 	const poseAnimList = ["idle1", "idle2", "idle3"];
 	const faceAnimList = [];
-	if (slave.trust < 0) {
-		faceAnimList.push("expressionsAngerFierce", "expressionsAngerGrumpy", "expressionsAngerSnarl", "expressionsFearAlarm", "expressionsFearAnticipation", "expressionsFearFrightened", "expressionsSadConfused", "expressionsSadOffended", "expressionsSadDejected", "expressionsSadIll");
+	if (Math.random() < (slave.trust + 100) / 200) {
+		// trusting slave - happy animations
+		faceAnimList.push("expressionsHappy", "expressionsHappyCheerful", "expressionsHappyDelighted", "expressionsHappyFriendly", "expressionsHappySweet");
 	}
 	else {
-		faceAnimList.push("expressionsHappyCheerful", "expressionsHappyDelighted", "expressionsHappyFriendly", "expressionsHappySweet", "expressionsSeductiveDesire", "expressionsSeductiveLoving");
+		// fearful slave - fear/sad animations
+		faceAnimList.push("expressionsFear", "expressionsFearAlarm", "expressionsFearAnticipation", "expressionsFearFrightened", "expressionsSadConfused", "expressionsSadOffended", "expressionsSadDejected", "expressionsSadIll");
+	}
+	if (Math.random() < (slave.devotion + 100) / 200) {
+		// devoted slave - seductive animations
+		faceAnimList.push("expressionsSeductiveDesire", "expressionsSeductiveLoving");
+	}
+	else {
+		// hateful slave - angry animations
+		faceAnimList.push("expressionsAngerFierce", "expressionsAngerGrumpy", "expressionsAngerSnarl");
 	}
 	const animList = [poseAnimList, faceAnimList];
 
@@ -1857,8 +1867,8 @@ App.Art.getAnimState = function(slave, scene, p, morphs, isAnimTick) {
 				case 1: // facial exp
 					App.Art.currentAnim[i] = animList[i][Math.floor(Math.random() * animList[i].length)];
 					App.Art.animLength[i] = (Math.random() * 4) + 1;
-					App.Art.animDelay[i] = (Math.floor(Math.random() * 55) + 5) * V.animFPS;
-					App.Art.animPower[i] = (Math.random() * 0.5) + 0.25;
+					App.Art.animDelay[i] = (Math.floor(Math.random() * 20) + 10) * V.animFPS;
+					App.Art.animPower[i] = (Math.random() * 0.75) + 0.25;
 					break;
 				case 2: // breathing
 					App.Art.currentAnim[i] = "breathAnim";
@@ -1878,14 +1888,9 @@ App.Art.getAnimState = function(slave, scene, p, morphs, isAnimTick) {
 						App.Art.animLength[4] = (Math.random() * 2) + 0.5;
 						App.Art.animDelay[4] = (Math.floor(Math.random() * 10) + 5) * V.animFPS;
 						App.Art.animPower[4] = Math.random();
-						if (Math.random() < (slave.trust + 100) / 200) {
-							App.Art.currentAnim[5] = "down";
-							App.Art.eyeMoveReciprocal = false;
-						}
-						else {
-							App.Art.currentAnim[5] = "up";
-							App.Art.eyeMoveReciprocal = true;
-						}
+						
+						App.Art.currentAnim[5] = ((Math.random() < (slave.trust + 100) / 200) ? "down" : "up");
+						App.Art.eyeMoveReciprocal = (Math.random() > (slave.trust + 100) / 200);
 						App.Art.animLength[5] = (Math.random() * 2) + 0.5;
 						App.Art.animDelay[5] = (Math.floor(Math.random() * 10) + 5) * V.animFPS;
 						App.Art.animPower[5] = Math.random();
@@ -1984,11 +1989,6 @@ App.Art.getAnimState = function(slave, scene, p, morphs, isAnimTick) {
 				morphs.push(["posesLegsClosed", Math.min(Math.max(slaveLegsClosed, 0), 1)])
 				break;
 			case 1: // facial exp
-				if (slave.trust < 0) {
-					morphs.push(["expressionsFear", Math.min(Math.max((Math.abs(slave.trust)/100) - getAnimState(1.0), 0), 1)]);
-				} else {
-					morphs.push(["expressionsHappy", Math.min(Math.max((slave.trust/100) - getAnimState(1.0), 0), 1)]);
-				}
 				morphs.push([App.Art.currentAnim[i], getAnimState(App.Art.animPower[i])]);
 				break;
 			case 2: // breathing
@@ -2054,12 +2054,14 @@ App.Art.getAnimState = function(slave, scene, p, morphs, isAnimTick) {
 							App.Art.animDelay[i] = (Math.floor(Math.random() * 50) + 10) * V.animFPS;
 							break;
 						case 1: // facial exp
-						case 3: // blink
-							App.Art.animDelay[i] = 0;
+							App.Art.animDelay[i] = (Math.floor(Math.random() * 20) + 10) * V.animFPS;
 							break;
 						case 2: // breathing
 							App.Art.animDelay[i] = (Math.floor(Math.random() * 2) + 1) * V.animFPS;
 							break;
+						case 3: // blink
+							App.Art.animDelay[i] = 0;
+							break;
 						case 4: // look X
 						case 5: // look Y
 							App.Art.animDelay[i] = (Math.floor(Math.random() * 10) + 5) * V.animFPS;