diff --git a/eve/src/main.cpp b/eve/src/main.cpp
index a06ec4981e..c451c0f7bc 100644
--- a/eve/src/main.cpp
+++ b/eve/src/main.cpp
@@ -113,7 +113,8 @@ int main(int argc, const char* argv[]) {
     // move eve away from the origin
     // pick a random point inside a 10x10 grid
     
-    eve.setPosition(glm::vec3(randFloatInRange(-RANDOM_POSITION_MAX_DIMENSION, RANDOM_POSITION_MAX_DIMENSION), 0.4,
+    eve.setPosition(glm::vec3(randFloatInRange(-RANDOM_POSITION_MAX_DIMENSION, RANDOM_POSITION_MAX_DIMENSION), 
+                              0.32,
                               randFloatInRange(-RANDOM_POSITION_MAX_DIMENSION, RANDOM_POSITION_MAX_DIMENSION)));
     
     // face any instance of eve down the z-axis
@@ -121,7 +122,7 @@ int main(int argc, const char* argv[]) {
     
     // put her hand out so somebody can shake it
     eve.setHandPosition(glm::vec3(eve.getPosition()[0] - 0.2,
-                                  0.32, // this is the same as the pelvis standing height (as of 4/26/13)
+                                  0.2, // this is the same as the pelvis standing height (as of 4/26/13)
                                   eve.getPosition()[2] + 0.1));    
     // read eve's audio data
     AudioInjector eveAudioInjector("/etc/highfidelity/eve/resources/eve.raw");
diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp
index b945ebe05e..c1f7445dc2 100644
--- a/interface/src/Avatar.cpp
+++ b/interface/src/Avatar.cpp
@@ -78,7 +78,9 @@ Avatar::Avatar(bool isMine) {
 	_bodyYaw                    = -90.0;
 	_bodyPitch                  = 0.0;
 	_bodyRoll                   = 0.0;
+	_bodyPitchDelta             = 0.0;
 	_bodyYawDelta               = 0.0;
+	_bodyRollDelta              = 0.0;
 	_mousePressed               = false;
 	_mode                       = AVATAR_MODE_STANDING;
     _isMine                     = isMine;
@@ -95,34 +97,6 @@ Avatar::Avatar(bool isMine) {
     
     for (int i = 0; i < MAX_DRIVE_KEYS; i++) _driveKeys[i] = false;
     
-/*
-    _head.mouthPitch          = 0;
-    _head.mouthYaw            = 0;
-    _head.mouthWidth          = 1.0;
-    _head.mouthHeight         = 0.2;
-    _head.eyeballPitch[0]     = 0;
-    _head.eyeballPitch[1]     = 0;
-    _head.eyeballScaleX       = 1.2;
-    _head.eyeballScaleY       = 1.5;
-    _head.eyeballScaleZ       = 1.0;
-    _head.eyeballYaw[0]       = 0;
-    _head.eyeballYaw[1]       = 0;
-    _head.pitchTarget         = 0;
-    _head.yawTarget           = 0;
-    _head.noiseEnvelope       = 1.0;
-    _head.pupilConverge       = 10.0;
-    _head.leanForward         = 0.0;
-    _head.leanSideways        = 0.0;
-    _head.eyeContact          = 1;
-    _head.eyeContactTarget    = LEFT_EYE;
-    _head.scale               = 1.0;
-    _head.audioAttack         = 0.0;
-    _head.averageLoudness     = 0.0;
-    _head.lastLoudness        = 0.0;
-    _head.browAudioLift       = 0.0;
-    _head.noise               = 0;
-*/
-
     _head.pupilSize             = 0.10;
     _head.interPupilDistance    = 0.6;
     _head.interBrowDistance     = 0.75;
@@ -166,11 +140,9 @@ Avatar::Avatar(bool isMine) {
     _renderPitch                = 0.0;
 	_sphere                     = NULL;
     _interactingOther           = NULL;
-	_closeEnoughToHoldHands   = false;
-	//_interactingOtherIsNearby   = false;
+	_closeEnoughToHoldHands   = false;	//_interactingOtherIsNearby   = false;
     _handHoldingPosition        = glm::vec3( 0.0, 0.0, 0.0 );
 
-    
     initializeSkeleton();
     
     if (iris_texture.size() == 0) {
@@ -192,11 +164,12 @@ Avatar::Avatar(const Avatar &otherAvatar) {
 	_thrust                         = otherAvatar._thrust;
     _rotation                       = otherAvatar._rotation;
 	_closeEnoughToHoldHands         = otherAvatar._closeEnoughToHoldHands;
-	//_interactingOtherIsNearby       = otherAvatar._interactingOtherIsNearby;
 	_bodyYaw                        = otherAvatar._bodyYaw;
 	_bodyPitch                      = otherAvatar._bodyPitch;
 	_bodyRoll                       = otherAvatar._bodyRoll;
+	_bodyPitchDelta                 = otherAvatar._bodyPitchDelta;
 	_bodyYawDelta                   = otherAvatar._bodyYawDelta;
+	_bodyRollDelta                  = otherAvatar._bodyRollDelta;
 	_mousePressed                   = otherAvatar._mousePressed;
 	_mode                           = otherAvatar._mode;
     _isMine                         = otherAvatar._isMine;
@@ -406,10 +379,9 @@ void Avatar::simulate(float deltaTime) {
                             _handHoldingPosition += vectorToMyHand    * MY_HAND_HOLDING_PULL;
                             _bone[ AVATAR_BONE_RIGHT_HAND ].position = _handHoldingPosition;
                             
-
-                            //if ( glm::length(vectorToOtherHand) > 0.2 ) {
-                            //    _velocity += vectorToOtherHand;                         
-                            //}
+                            if ( glm::length(vectorToOtherHand) > _maxArmLength * 0.9 ) {
+                                _velocity += vectorToOtherHand;                         
+                            }
                         }
                     }
                 }
@@ -477,8 +449,10 @@ void Avatar::simulate(float deltaTime) {
         _bodyYaw += _bodyYawDelta * deltaTime;
     }
     
-	// decay body yaw delta
-    _bodyYawDelta *= (1.0 - TEST_YAW_DECAY * deltaTime);
+	// decay body rotation deltas
+    _bodyPitchDelta *= (1.0 - BODY_PITCH_DECAY * deltaTime);
+    _bodyYawDelta   *= (1.0 - BODY_YAW_DECAY   * deltaTime);
+    _bodyRollDelta  *= (1.0 - BODY_ROLL_DECAY  * deltaTime);
     
 	// add thrust to velocity
 	_velocity += _thrust * deltaTime;
@@ -813,7 +787,7 @@ void Avatar::renderHead(bool lookingInMirror) {
     glEnable(GL_RESCALE_NORMAL);
     
 	// show head orientation
-	renderOrientationDirections( _bone[ AVATAR_BONE_HEAD ].springyPosition, _bone[ AVATAR_BONE_HEAD ].orientation, 0.2f );
+	//renderOrientationDirections( _bone[ AVATAR_BONE_HEAD ].springyPosition, _bone[ AVATAR_BONE_HEAD ].orientation, 0.2f );
     
     glPushMatrix();
     
@@ -831,13 +805,13 @@ void Avatar::renderHead(bool lookingInMirror) {
 	glScalef( 0.03, 0.03, 0.03 );
     
     if (lookingInMirror) {
-        glRotatef(_bodyYaw - _headYaw,   0, 1, 0);
+        glRotatef(_bodyYaw   - _headYaw,   0, 1, 0);
         glRotatef(_bodyPitch + _headPitch, 1, 0, 0);
-        glRotatef(_bodyRoll - _headRoll,  0, 0, 1);
+        glRotatef(_bodyRoll  - _headRoll,  0, 0, 1);
     } else {
-        glRotatef(_bodyYaw + _headYaw,   0, 1, 0);
+        glRotatef(_bodyYaw   + _headYaw,   0, 1, 0);
         glRotatef(_bodyPitch + _headPitch, 1, 0, 0);
-        glRotatef(_bodyRoll + _headRoll,  0, 0, 1);
+        glRotatef(_bodyRoll  + _headRoll,  0, 0, 1);
     }
     
     glScalef(2.0, 2.0, 2.0);
diff --git a/interface/src/Avatar.h b/interface/src/Avatar.h
index 91951795f8..170055e456 100644
--- a/interface/src/Avatar.h
+++ b/interface/src/Avatar.h
@@ -148,7 +148,9 @@ private:
     const float DECAY                   = 0.1;
     const float THRUST_MAG              = 1200.0;
     const float YAW_MAG                 = 500.0;
-    const float TEST_YAW_DECAY          = 5.0;
+    const float BODY_PITCH_DECAY        = 5.0;
+    const float BODY_YAW_DECAY          = 5.0;
+    const float BODY_ROLL_DECAY         = 5.0;
     const float LIN_VEL_DECAY           = 5.0;
     const float MY_HAND_HOLDING_PULL    = 0.2;
     const float YOUR_HAND_HOLDING_PULL  = 1.0;
@@ -228,7 +230,9 @@ private:
     glm::vec3         _TEST_bigSpherePosition;
     float             _TEST_bigSphereRadius;
     bool              _mousePressed;
+    float             _bodyPitchDelta;
     float             _bodyYawDelta;
+    float             _bodyRollDelta;
     bool              _usingBodySprings;
     glm::vec3         _movedHandOffset;
     glm::quat         _rotation; // the rotation of the avatar body as a whole expressed as a quaternion
@@ -252,7 +256,6 @@ private:
     glm::vec3         _transmitterInitialReading;
     Avatar*           _interactingOther;
     bool              _closeEnoughToHoldHands;
-    //bool              _interactingOtherIsNearby;
     float             _pelvisStandingHeight;
     float             _height;
     Balls*            _balls;
diff --git a/libraries/avatars/src/Orientation.cpp b/libraries/avatars/src/Orientation.cpp
index 2226d9b999..fddb64d700 100755
--- a/libraries/avatars/src/Orientation.cpp
+++ b/libraries/avatars/src/Orientation.cpp
@@ -93,6 +93,25 @@ void Orientation::roll( float angle ) {
     }
 }
 
+void Orientation::rotate( float p, float y, float r ) {
+    pitch(p);
+    yaw  (y);
+    roll (r);
+}
+
+void Orientation::rotate( glm::vec3 eulerAngles ) {
+
+//this needs to be optimized!
+    pitch(eulerAngles.x);
+    yaw  (eulerAngles.y);
+    roll (eulerAngles.z);
+}
+
+void Orientation::rotate( glm::quat rotation ) {
+    rotateAndGenerateDirections(rotation);
+}
+
+
 void Orientation::rotateAndGenerateDirections( glm::quat rotation ) {
 
     quat = quat * rotation;
diff --git a/libraries/avatars/src/Orientation.h b/libraries/avatars/src/Orientation.h
index 8441c182b8..50b400b935 100755
--- a/libraries/avatars/src/Orientation.h
+++ b/libraries/avatars/src/Orientation.h
@@ -24,9 +24,13 @@ public:
 	void set( Orientation );
 	void setToIdentity();
 
-	void yaw  ( float );
-	void pitch( float );
-	void roll ( float );
+	void pitch( float p );
+	void yaw  ( float y );
+	void roll ( float r );
+    
+    void rotate( float pitch, float yaw, float roll );
+    void rotate( glm::vec3 EulerAngles );
+    void rotate( glm::quat quaternion );
 
 	const glm::vec3 & getRight() const { return right; }
 	const glm::vec3 & getUp   () const { return up;	   }