diff --git a/pr2_teleop_general/include/pr2_teleop_general/pr2_teleop_general_commander.h b/pr2_teleop_general/include/pr2_teleop_general/pr2_teleop_general_commander.h
index 9baa0b8..ac5da5e 100644
--- a/pr2_teleop_general/include/pr2_teleop_general/pr2_teleop_general_commander.h
+++ b/pr2_teleop_general/include/pr2_teleop_general/pr2_teleop_general_commander.h
@@ -130,8 +130,8 @@ public:
 
   void updateCurrentWristPositions();
 
-  void sendArmVelCommands(double r_x_vel, double r_y_vel, double r_z_vel, double r_pitch_vel, double r_roll_vel,
-                          double l_x_vel, double l_y_vel, double l_z_vel, double l_pitch_vel, double l_roll_vel,
+  void sendArmVelCommands(double r_x_vel, double r_y_vel, double r_z_vel, double r_roll_vel, double r_pitch_vel, double r_yaw_vel,
+                          double l_x_vel, double l_y_vel, double l_z_vel, double l_roll_vel, double l_pitch_vel, double l_yaw_vel,
                           double hz);
 
   bool moveToWalkAlongArmPose();
diff --git a/pr2_teleop_general/manifest.xml b/pr2_teleop_general/manifest.xml
index 9bfe27d..48ce2d9 100644
--- a/pr2_teleop_general/manifest.xml
+++ b/pr2_teleop_general/manifest.xml
@@ -19,11 +19,13 @@
   <depend package="pr2_controller_manager" />
   <depend package="pr2_mechanism_msgs" />
   <depend package="kinematics_msgs" />
+  <depend package="angles" />
   <depend package="urdf" />
   <depend package="urdf_interface" />
   <depend package="ps3joy" />
   <depend package="pr2_common_action_msgs" />
   <depend package="polled_camera" />
+  <depend package="bullet" />
 
   <export>
     <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib"/>
diff --git a/pr2_teleop_general/src/pr2_teleop_general_commander.cpp b/pr2_teleop_general/src/pr2_teleop_general_commander.cpp
index fac36d2..4717012 100644
--- a/pr2_teleop_general/src/pr2_teleop_general_commander.cpp
+++ b/pr2_teleop_general/src/pr2_teleop_general_commander.cpp
@@ -32,6 +32,8 @@
 
 #include <string>
 #include <boost/bind.hpp>
+#include <LinearMath/btQuaternion.h>
+#include <LinearMath/btMatrix3x3.h>
 
 #include <pr2_mechanism_msgs/SwitchController.h>
 #include <geometry_msgs/Twist.h>
@@ -770,7 +772,11 @@ void GeneralCommander::clampDesiredArmPositionsToActual(double max_dist)  {
   if(control_rarm_) {
     tot_distance = sqrt(pow(des_r_wrist_roll_pose_.position.x-right_wrist_roll_pose_.position.x,2.0)+
                         pow(des_r_wrist_roll_pose_.position.y-right_wrist_roll_pose_.position.y,2.0)+
-                        pow(des_r_wrist_roll_pose_.position.z-right_wrist_roll_pose_.position.z,2.0));
+                        pow(des_r_wrist_roll_pose_.position.z-right_wrist_roll_pose_.position.z,2.0)+
+			pow(des_r_wrist_roll_pose_.orientation.x-right_wrist_roll_pose_.orientation.x,2.0)+
+			pow(des_r_wrist_roll_pose_.orientation.y-right_wrist_roll_pose_.orientation.y,2.0)+
+			pow(des_r_wrist_roll_pose_.orientation.z-right_wrist_roll_pose_.orientation.z,2.0)+
+			pow(des_r_wrist_roll_pose_.orientation.w-right_wrist_roll_pose_.orientation.w,2.0));
     
     //ROS_INFO_STREAM("Cur " << right_wrist_roll_pose_.position.x << " " << right_wrist_roll_pose_.position.y << " " << right_wrist_roll_pose_.position.z
     //                << " des " << des_r_wrist_roll_pose_.position.x << " " << des_r_wrist_roll_pose_.position.y << " " << des_r_wrist_roll_pose_.position.z);
@@ -803,7 +809,12 @@ void GeneralCommander::clampDesiredArmPositionsToActual(double max_dist)  {
   if(control_larm_) {
     tot_distance = sqrt(pow(des_l_wrist_roll_pose_.position.x-left_wrist_roll_pose_.position.x,2.0)+
                         pow(des_l_wrist_roll_pose_.position.y-left_wrist_roll_pose_.position.y,2.0)+
-                        pow(des_l_wrist_roll_pose_.position.z-left_wrist_roll_pose_.position.z,2.0));
+                        pow(des_l_wrist_roll_pose_.position.z-left_wrist_roll_pose_.position.z,2.0)+
+			pow(des_l_wrist_roll_pose_.orientation.x-left_wrist_roll_pose_.orientation.x,2.0)+
+			pow(des_l_wrist_roll_pose_.orientation.y-left_wrist_roll_pose_.orientation.y,2.0)+
+			pow(des_l_wrist_roll_pose_.orientation.z-left_wrist_roll_pose_.orientation.z,2.0)+
+			pow(des_l_wrist_roll_pose_.orientation.w-left_wrist_roll_pose_.orientation.w,2.0));
+
     
     if(tot_distance > max_dist) {
       des_l_wrist_roll_pose_ = left_wrist_roll_pose_;
@@ -882,8 +893,8 @@ void GeneralCommander::unnormalizeTrajectory(trajectory_msgs::JointTrajectory& t
   traj = unnormalized_trajectory; 
 }
 
-void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double r_z_vel, double r_pitch_vel, double r_roll_vel,
-                                        double l_x_vel, double l_y_vel, double l_z_vel, double l_pitch_vel, double l_roll_vel,
+void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double r_z_vel, double r_roll_vel, double r_pitch_vel, double r_yaw_vel,
+					  double l_x_vel, double l_y_vel, double l_z_vel, double l_roll_vel, double l_pitch_vel, double l_yaw_vel,
                                         double hz) {
 
 
@@ -892,12 +903,12 @@ void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double
   double trajectory_duration = .2;
 
   //ROS_INFO_STREAM("Got vels " << r_x_vel << " " << r_y_vel << " " << r_z_vel);
-
   clampDesiredArmPositionsToActual(.1);
 
   if(control_rarm_) {
     
-    if(fabs(r_x_vel) > .001 || fabs(r_y_vel) > .001 || fabs(r_z_vel) > .001 || fabs(r_roll_vel) > 0 || fabs(r_pitch_vel) > 0) {
+    if(fabs(r_x_vel) > .001 || fabs(r_y_vel) > .001 || fabs(r_z_vel) > .001 ||
+       fabs(r_roll_vel) > .001 || fabs(r_pitch_vel) > .001 || fabs(r_yaw_vel) > .001) {
       
       geometry_msgs::Pose right_trajectory_endpoint = des_r_wrist_roll_pose_;
       
@@ -909,44 +920,45 @@ void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double
       double pos_diff_x = r_x_vel*(1.0/hz);//*look_ahead;
       double pos_diff_y = r_y_vel*(1.0/hz);//*look_ahead;
       double pos_diff_z = r_z_vel*(1.0/hz);//*look_ahead;
-      double pos_diff_pitch = r_pitch_vel*trajectory_duration;
-      double pos_diff_roll = r_roll_vel*trajectory_duration;
-      
+
+      double pos_diff_roll = r_roll_vel*(1.0/hz);//*look_ahead;
+      double pos_diff_pitch = r_pitch_vel*(1.0/hz);//*look_ahead;
+      double pos_diff_yaw = r_yaw_vel;//*(1.0/hz);//*look_ahead;
+
+      btQuaternion endpoint_quat, des_quat;
+      btMatrix3x3 end_rot, des_rot, diff_rot, duration_rot;
+      end_rot.setRotation(btQuaternion(
+			      right_trajectory_endpoint.orientation.x,
+			      right_trajectory_endpoint.orientation.y,
+			      right_trajectory_endpoint.orientation.z,
+			      right_trajectory_endpoint.orientation.w));
+      des_rot = end_rot;
+      duration_rot.setEulerYPR(r_yaw_vel*trajectory_duration,
+			       r_pitch_vel*trajectory_duration,
+			       r_roll_vel*trajectory_duration);
+      diff_rot.setEulerYPR(pos_diff_yaw, pos_diff_pitch, pos_diff_roll);
+
+      (duration_rot *= end_rot).getRotation(endpoint_quat);
+      (diff_rot *= des_rot).getRotation(des_quat);
+
       right_trajectory_endpoint.position.x += r_x_vel*trajectory_duration;
       right_trajectory_endpoint.position.y += r_y_vel*trajectory_duration;
       right_trajectory_endpoint.position.z += r_z_vel*trajectory_duration;
-      { 
-        urdf::Rotation q(right_trajectory_endpoint.orientation.x,right_trajectory_endpoint.orientation.y,
-                         right_trajectory_endpoint.orientation.z,right_trajectory_endpoint.orientation.w);
-        double tmp[3];
-        q.getRPY(tmp[0],tmp[1],tmp[2]);
-        tmp[0] += r_roll_vel*trajectory_duration;
-        tmp[1] += r_pitch_vel*trajectory_duration;
-        q.setFromRPY(tmp[0],tmp[1],tmp[2]);
-
-        right_trajectory_endpoint.orientation.x = q.x;
-        right_trajectory_endpoint.orientation.y = q.y;
-        right_trajectory_endpoint.orientation.z = q.z;
-        right_trajectory_endpoint.orientation.w = q.w;
-      }
 
+      right_trajectory_endpoint.orientation.x = endpoint_quat.getAxis().getX();
+      right_trajectory_endpoint.orientation.y = endpoint_quat.getAxis().getY();
+      right_trajectory_endpoint.orientation.z = endpoint_quat.getAxis().getZ();
+      right_trajectory_endpoint.orientation.w = endpoint_quat.getW();
+      
       des_r_wrist_roll_pose_.position.x += pos_diff_x;
       des_r_wrist_roll_pose_.position.y += pos_diff_y;
       des_r_wrist_roll_pose_.position.z += pos_diff_z;
-      {
-        urdf::Rotation q(des_r_wrist_roll_pose_.orientation.x,des_r_wrist_roll_pose_.orientation.y,
-                         des_r_wrist_roll_pose_.orientation.z,des_r_wrist_roll_pose_.orientation.w);
-        double tmp[3];
-        q.getRPY(tmp[0],tmp[1],tmp[2]);
-        tmp[0] += pos_diff_roll;
-        tmp[1] += pos_diff_pitch;
-        q.setFromRPY(tmp[0],tmp[1],tmp[2]);
-
-        des_r_wrist_roll_pose_.orientation.x = q.x;
-        des_r_wrist_roll_pose_.orientation.y = q.y;
-        des_r_wrist_roll_pose_.orientation.z = q.z;
-        des_r_wrist_roll_pose_.orientation.w = q.w;
-      }
+      
+      des_r_wrist_roll_pose_.orientation.x = des_quat.getAxis().getX();
+      des_r_wrist_roll_pose_.orientation.y = des_quat.getAxis().getY();
+      des_r_wrist_roll_pose_.orientation.z = des_quat.getAxis().getZ();
+      des_r_wrist_roll_pose_.orientation.w = des_quat.getW();
+
       //ROS_INFO_STREAM("Desired " << des_r_wrist_roll_pose_.position.x << " " << des_r_wrist_roll_pose_.position.y << " " << des_r_wrist_roll_pose_.position.z);
       
       //now call ik
@@ -1013,7 +1025,8 @@ void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double
     ros::Time afterCall = ros::Time::now();
   }
   if(control_larm_) {
-    if(fabs(l_x_vel) > .001 || fabs(l_y_vel) > .001 || fabs(l_z_vel) > .001 || fabs(l_roll_vel) > 0 || fabs(l_pitch_vel) > 0) {
+    if(fabs(l_x_vel) > .001 || fabs(l_y_vel) > .001 || fabs(l_z_vel) > .001 ||
+       fabs(l_roll_vel) > .001 || fabs(l_pitch_vel) > .001 || fabs(l_yaw_vel) > .001) {
 
       geometry_msgs::Pose left_trajectory_endpoint = des_l_wrist_roll_pose_;
 
@@ -1025,45 +1038,43 @@ void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double
       double pos_diff_x = l_x_vel*(1.0/hz);
       double pos_diff_y = l_y_vel*(1.0/hz);
       double pos_diff_z = l_z_vel*(1.0/hz);
-      double pos_diff_pitch = l_pitch_vel*trajectory_duration;
-      double pos_diff_roll = l_roll_vel*trajectory_duration;
+      double pos_diff_roll = l_roll_vel*(1.0/hz);//*look_ahead;
+      double pos_diff_pitch = l_pitch_vel*(1.0/hz);//*look_ahead;
+      double pos_diff_yaw = l_yaw_vel*(1.0/hz);
+
+      btQuaternion endpoint_quat, des_quat;
+      btMatrix3x3 end_rot, des_rot, diff_rot, duration_rot;
+      end_rot.setRotation(btQuaternion(
+			      left_trajectory_endpoint.orientation.x,
+			      left_trajectory_endpoint.orientation.y,
+			      left_trajectory_endpoint.orientation.z,
+			      left_trajectory_endpoint.orientation.w));
+      des_rot = end_rot;
+      duration_rot.setEulerYPR(l_yaw_vel*trajectory_duration,
+			       l_pitch_vel*trajectory_duration,
+			       l_roll_vel*trajectory_duration);
+      diff_rot.setEulerYPR(pos_diff_yaw, pos_diff_pitch, pos_diff_roll);
+
+      (duration_rot *= end_rot).getRotation(endpoint_quat);
+      (diff_rot *= des_rot).getRotation(des_quat);
     
       left_trajectory_endpoint.position.x += l_x_vel*trajectory_duration;
       left_trajectory_endpoint.position.y += l_y_vel*trajectory_duration;
       left_trajectory_endpoint.position.z += l_z_vel*trajectory_duration;
 
-      { 
-        urdf::Rotation q(left_trajectory_endpoint.orientation.x,left_trajectory_endpoint.orientation.y,
-                         left_trajectory_endpoint.orientation.z,left_trajectory_endpoint.orientation.w);
-        double tmp[3];
-        q.getRPY(tmp[0],tmp[1],tmp[2]);
-        tmp[0] += r_roll_vel*trajectory_duration;
-        tmp[1] += r_pitch_vel*trajectory_duration;
-        q.setFromRPY(tmp[0],tmp[1],tmp[2]);
-
-        left_trajectory_endpoint.orientation.x = q.x;
-        left_trajectory_endpoint.orientation.y = q.y;
-        left_trajectory_endpoint.orientation.z = q.z;
-        left_trajectory_endpoint.orientation.w = q.w;
-      }
+      left_trajectory_endpoint.orientation.x = endpoint_quat.getAxis().getX();
+      left_trajectory_endpoint.orientation.y = endpoint_quat.getAxis().getY();
+      left_trajectory_endpoint.orientation.z = endpoint_quat.getAxis().getZ();
+      left_trajectory_endpoint.orientation.w = endpoint_quat.getW();
 
       des_l_wrist_roll_pose_.position.x += pos_diff_x;
       des_l_wrist_roll_pose_.position.y += pos_diff_y;
       des_l_wrist_roll_pose_.position.z += pos_diff_z;
-      {
-        urdf::Rotation q(des_l_wrist_roll_pose_.orientation.x,des_l_wrist_roll_pose_.orientation.y,
-                         des_l_wrist_roll_pose_.orientation.z,des_l_wrist_roll_pose_.orientation.w);
-        double tmp[3];
-        q.getRPY(tmp[0],tmp[1],tmp[2]);
-        tmp[0] += pos_diff_roll;
-        tmp[1] += pos_diff_pitch;
-        q.setFromRPY(tmp[0],tmp[1],tmp[2]);
-
-        des_l_wrist_roll_pose_.orientation.x = q.x;
-        des_l_wrist_roll_pose_.orientation.y = q.y;
-        des_l_wrist_roll_pose_.orientation.z = q.z;
-        des_l_wrist_roll_pose_.orientation.w = q.w;
-      }
+
+      des_l_wrist_roll_pose_.orientation.x = des_quat.getAxis().getX();
+      des_l_wrist_roll_pose_.orientation.y = des_quat.getAxis().getY();
+      des_l_wrist_roll_pose_.orientation.z = des_quat.getAxis().getZ();
+      des_l_wrist_roll_pose_.orientation.w = des_quat.getW();
 
       //now call ik
     
@@ -1089,7 +1100,6 @@ void GeneralCommander::sendArmVelCommands(double r_x_vel, double r_y_vel, double
         }
       }
     
-    
       //otherwise not a lot to be done
       if(left_arm_kinematics_inverse_client_.call(ik_req, ik_res) && ik_res.error_code.val == ik_res.error_code.SUCCESS) {
         //ROS_INFO("Ik succeeded");
diff --git a/pr2_teleop_general/src/pr2_teleop_general_joystick.cpp b/pr2_teleop_general/src/pr2_teleop_general_joystick.cpp
index dbc7007..ecf9fca 100644
--- a/pr2_teleop_general/src/pr2_teleop_general_joystick.cpp
+++ b/pr2_teleop_general/src/pr2_teleop_general_joystick.cpp
@@ -63,12 +63,14 @@ static const unsigned int PROSILICA_POLL_BUTTON = 6;
 static const unsigned int OPEN_GRIPPER_BUTTON = 15;
 static const unsigned int CLOSE_GRIPPER_BUTTON = 13;
 static const unsigned int ARM_MODE_TOGGLE_BUTTON = 4;
+static const unsigned int ARM_POSE_BUTTON = 6;
 
 static const unsigned int LEFT_AXIS_NUMBER = 1;
 static const unsigned int RIGHT_AXIS_NUMBER = 1;
 
 static const unsigned int TORSO_UP_BUTTON = 12;
 static const unsigned int TORSO_DOWN_BUTTON = 14;
+static const unsigned int SPEED_UP_BUTTON = 11;
 
 static const unsigned int WRIST_CLOCKWISE_BUTTON = 12;
 static const unsigned int WRIST_COUNTER_BUTTON = 14;
@@ -132,6 +134,10 @@ public:
     n_local.param("arm_y_scale", arm_y_scale_, .15);
     n_local.param("arm_z_scale", arm_z_scale_, .15);
 
+    n_local.param("arm_roll_scale", arm_roll_scale_, -1.50);
+    n_local.param("arm_pitch_scale", arm_pitch_scale_, 1.50);
+    n_local.param("arm_yaw_scale", arm_yaw_scale_, 1.50);
+
     n_local.param("wrist_velocity",wrist_velocity_, 4.5);
 
     n_local.param("walk_along_x_speed_scale", walk_along_x_speed_scale_, 9.0);
@@ -280,6 +286,12 @@ public:
 	left_arm_vx_ = 0.0;
 	left_arm_vy_ = 0.0;
 	left_arm_vz_ = 0.0;
+	right_arm_vel_roll_ = 0.0;
+	right_arm_vel_pitch_ = 0.0;
+	right_arm_vel_yaw_ = 0.0;
+	left_arm_vel_roll_ = 0.0;
+	left_arm_vel_pitch_ = 0.0;
+	left_arm_vel_yaw_ = 0.0;
 	in_walk_along = true;
       }
     }
@@ -396,6 +408,8 @@ public:
     if(!in_walk_along && layout == LAYOUT_BODY) {
       bool down = buttonOkAndOn(TORSO_DOWN_BUTTON, joy_msg);
       bool up = buttonOkAndOn(TORSO_UP_BUTTON, joy_msg);
+      bool speedup = buttonOkAndOn(SPEED_UP_BUTTON, joy_msg);
+      bool unsafe = buttonOkAndOn(RIGHT_ARM_LAYOUT_BUTTON, joy_msg); // for jsk_pr2_startup
       
       //ROS_INFO_STREAM("Down is " << down);
       //ROS_INFO_STREAM("Up is " << up);
@@ -409,17 +423,17 @@ public:
         des_torso_vel_ = 0.0;
       }
       if(axisOk(VX_AXIS, joy_msg)) {
-        des_vx_ = joy_msg->axes[VX_AXIS]*vx_scale_;
+        des_vx_ = joy_msg->axes[VX_AXIS]*vx_scale_*(unsafe?0.5:(speedup?2.0:1.0));
       } else {
         des_vx_ = 0.0;
       }
       if(axisOk(VY_AXIS, joy_msg)) {
-        des_vy_ = joy_msg->axes[VY_AXIS]*vy_scale_;
+        des_vy_ = joy_msg->axes[VY_AXIS]*vy_scale_*(unsafe?0.5:(speedup?2.0:1.0));
       } else {
         des_vy_ = 0.0;
       }
       if(axisOk(VW_AXIS, joy_msg)) {
-        des_vw_ = joy_msg->axes[VW_AXIS]*vw_scale_;
+        des_vw_ = joy_msg->axes[VW_AXIS]*vw_scale_*(unsafe?0.5:(speedup?2.0:1.0));
       } else {
         des_vw_ = 0.0;
       }
@@ -464,6 +478,7 @@ public:
         bool lookAnalog = false;
         bool rotClock = buttonOkAndOn(WRIST_CLOCKWISE_BUTTON, joy_msg);
         bool rotCounter = buttonOkAndOn(WRIST_COUNTER_BUTTON, joy_msg);
+	bool rotateArm = buttonOkAndOn(ARM_POSE_BUTTON, joy_msg);
         if(rotClock && !rotCounter) {
           des_right_wrist_vel_ = wrist_velocity_;
         } else if(!rotClock && rotCounter) {
@@ -472,29 +487,35 @@ public:
           des_right_wrist_vel_ = 0.0;
           lookAnalog = true;
         }
+
+	right_arm_vx_ = 0.0;
+	right_arm_vy_ = 0.0;
+	right_arm_vz_ = 0.0;
+	right_arm_vel_roll_ = 0.0;
+	right_arm_vel_pitch_ = 0.0;
+	right_arm_vel_yaw_ = 0.0;
         
         if(lookAnalog) {
           //look at analog sticks if we aren't supposed to wrist rotate
           if(axisOk(ARM_X_AXIS, joy_msg)) {
-            right_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
-          } else {
-            right_arm_vx_ = 0.0;
+	    if(!rotateArm)
+	      right_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
+	    else
+	      right_arm_vel_pitch_ = joy_msg->axes[ARM_X_AXIS]*arm_pitch_scale_;
           }
           if(axisOk(ARM_Y_AXIS, joy_msg)) {
-            right_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
-          } else {
-            right_arm_vy_ = 0.0;
+	    if(!rotateArm)
+	      right_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
+	    else
+	      right_arm_vel_roll_ = joy_msg->axes[ARM_Y_AXIS]*arm_roll_scale_;
           }
-          if(axisOk(ARM_Z_AXIS, joy_msg)) {
-            right_arm_vz_ = joy_msg->axes[ARM_Z_AXIS]*arm_z_scale_;
-          } else {
-            right_arm_vz_ = 0.0;
+          if(axisOk(ARM_Z_AXIS, joy_msg) && (!rotateArm)) {
+	    right_arm_vz_ = joy_msg->axes[ARM_Z_AXIS]*arm_z_scale_;
           }
+          if(axisOk(ARM_YAW_AXIS, joy_msg) && rotateArm) {
+	    right_arm_vel_yaw_ = joy_msg->axes[ARM_YAW_AXIS]*arm_yaw_scale_;
+	  }
           //ROS_INFO_STREAM("Setting vx " << right_arm_vx_ << " " << right_arm_vy_ << " " << right_arm_vz_);
-        } else {
-          right_arm_vx_ = 0.0;
-          right_arm_vy_ = 0.0;
-          right_arm_vz_ = 0.0;
         }
       }
     } else if (layout != LAYOUT_BOTH_ARMS) {
@@ -502,6 +523,9 @@ public:
       right_arm_vx_ = 0.0;
       right_arm_vy_ = 0.0;
       right_arm_vz_ = 0.0;
+      right_arm_vel_roll_ = 0.0;
+      right_arm_vel_pitch_ = 0.0;
+      right_arm_vel_yaw_ = 0.0;
     }
     if(layout == LAYOUT_LEFT_ARM) {
       if(buttonOkAndOn(ARM_MODE_TOGGLE_BUTTON, joy_msg) && !sameValueAsLast(ARM_MODE_TOGGLE_BUTTON, joy_msg, last_joy_)) {
@@ -536,6 +560,7 @@ public:
         bool lookAnalog = false;
         bool rotClock = buttonOkAndOn(WRIST_CLOCKWISE_BUTTON, joy_msg);
         bool rotCounter = buttonOkAndOn(WRIST_COUNTER_BUTTON, joy_msg);
+	bool rotateArm = buttonOkAndOn(ARM_POSE_BUTTON, joy_msg);
         if(rotClock && !rotCounter) {
           des_left_wrist_vel_ = wrist_velocity_;
         } else if(!rotClock && rotCounter) {
@@ -544,29 +569,35 @@ public:
           des_left_wrist_vel_ = 0.0;
           lookAnalog = true;
         }
+
+	left_arm_vx_ = 0.0;
+	left_arm_vy_ = 0.0;
+	left_arm_vz_ = 0.0;
+	left_arm_vel_roll_ = 0.0;
+	left_arm_vel_pitch_ = 0.0;
+	left_arm_vel_yaw_ = 0.0;
         
         if(lookAnalog) {
           //look at analog sticks if we aren't supposed to wrist rotate
           if(axisOk(ARM_X_AXIS, joy_msg)) {
-            left_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
-          } else {
-            left_arm_vx_ = 0.0;
+	    if(!rotateArm)
+	      left_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
+	    else
+	      left_arm_vel_pitch_ = joy_msg->axes[ARM_X_AXIS]*arm_pitch_scale_;
           }
           if(axisOk(ARM_Y_AXIS, joy_msg)) {
-            left_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
-          } else {
-            left_arm_vy_ = 0.0;
+	    if(!rotateArm)
+	      left_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
+	    else
+	      left_arm_vel_roll_ = joy_msg->axes[ARM_Y_AXIS]*arm_roll_scale_;
           }
-          if(axisOk(ARM_Z_AXIS, joy_msg)) {
+          if(axisOk(ARM_Z_AXIS, joy_msg) && (!rotateArm)) {
             left_arm_vz_ = joy_msg->axes[ARM_Z_AXIS]*arm_z_scale_;
-          } else {
-            left_arm_vz_ = 0.0;
           }
+          if(axisOk(ARM_YAW_AXIS, joy_msg) && rotateArm) {
+	    left_arm_vel_yaw_ = joy_msg->axes[ARM_YAW_AXIS]*arm_yaw_scale_;
+	  }
           //ROS_INFO_STREAM("Setting vx " << left_arm_vx_ << " " << left_arm_vy_ << " " << left_arm_vz_);
-        } else {
-          left_arm_vx_ = 0.0;
-          left_arm_vy_ = 0.0;
-          left_arm_vz_ = 0.0;
         }
       }
     } else if (layout != LAYOUT_BOTH_ARMS) {
@@ -574,6 +605,9 @@ public:
       left_arm_vx_ = 0.0;
       left_arm_vy_ = 0.0;
       left_arm_vz_ = 0.0;
+      left_arm_vel_roll_ = 0.0;
+      left_arm_vel_pitch_ = 0.0;
+      left_arm_vel_yaw_ = 0.0;
     }
     if(layout == LAYOUT_BOTH_ARMS) {
       if(buttonOkAndOn(ARM_MODE_TOGGLE_BUTTON, joy_msg) && !sameValueAsLast(ARM_MODE_TOGGLE_BUTTON, joy_msg, last_joy_)) {
@@ -612,6 +646,7 @@ public:
         bool lookAnalog = false;
         bool rotClock = buttonOkAndOn(WRIST_CLOCKWISE_BUTTON, joy_msg);
         bool rotCounter = buttonOkAndOn(WRIST_COUNTER_BUTTON, joy_msg);
+        bool rotateArm = buttonOkAndOn(ARM_POSE_BUTTON, joy_msg);
         if(rotClock && !rotCounter) {
           des_left_wrist_vel_ = wrist_velocity_;
           des_right_wrist_vel_ = wrist_velocity_;
@@ -623,38 +658,49 @@ public:
           des_right_wrist_vel_ = 0.0;
           lookAnalog = true;
         }
+
+	left_arm_vx_ = 0.0;
+	left_arm_vy_ = 0.0;
+	left_arm_vz_ = 0.0;
+	right_arm_vx_ = 0.0;
+	right_arm_vy_ = 0.0;
+	right_arm_vz_ = 0.0;
+	left_arm_vel_roll_ = 0.0;
+	left_arm_vel_pitch_ = 0.0;
+	left_arm_vel_yaw_ = 0.0;
+	right_arm_vel_roll_ = 0.0;
+	right_arm_vel_pitch_ = 0.0;
+	right_arm_vel_yaw_ = 0.0;
         
         if(lookAnalog) {
           //look at analog sticks if we aren't supposed to wrist rotate
           if(axisOk(ARM_X_AXIS, joy_msg)) {
-            left_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
-            right_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
-          } else {
-            left_arm_vx_ = 0.0;
-            right_arm_vz_ = 0.0;
+	    if(!rotateArm) {
+	      left_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
+	      right_arm_vx_ = joy_msg->axes[ARM_X_AXIS]*arm_x_scale_;
+	    } else {
+	      left_arm_vel_pitch_ = joy_msg->axes[ARM_X_AXIS]*arm_pitch_scale_;
+	      right_arm_vel_pitch_ = joy_msg->axes[ARM_X_AXIS]*arm_pitch_scale_;
+	    }
           }
           if(axisOk(ARM_Y_AXIS, joy_msg)) {
-            left_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
-            right_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
-          } else {
-            left_arm_vy_ = 0.0;
-            right_arm_vz_ = 0.0;
+	    if(!rotateArm) {
+	      left_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
+	      right_arm_vy_ = joy_msg->axes[ARM_Y_AXIS]*arm_y_scale_;
+	    } else {
+	      left_arm_vel_roll_ = joy_msg->axes[ARM_Y_AXIS]*arm_roll_scale_;
+	      right_arm_vel_roll_ = joy_msg->axes[ARM_Y_AXIS]*arm_roll_scale_;
+	    }
           }
-          if(axisOk(ARM_Z_AXIS, joy_msg)) {
+          if(axisOk(ARM_Z_AXIS, joy_msg) && (!rotateArm)) {
             left_arm_vz_ = joy_msg->axes[ARM_Z_AXIS]*arm_z_scale_;
             right_arm_vz_ = joy_msg->axes[ARM_Z_AXIS]*arm_z_scale_;
-          } else {
-            left_arm_vz_ = 0.0;
-            right_arm_vz_ = 0.0;
           }
+          if(axisOk(ARM_YAW_AXIS, joy_msg) && rotateArm) {
+	    left_arm_vel_yaw_ = joy_msg->axes[ARM_YAW_AXIS]*arm_yaw_scale_;
+	    right_arm_vel_yaw_ = joy_msg->axes[ARM_YAW_AXIS]*arm_yaw_scale_;
+	  }
         //ROS_INFO_STREAM("Setting vx " << left_arm_vx_ << " " << left_arm_vy_ << " " << left_arm_vz_);
-        } else {
-          left_arm_vx_ = 0.0;
-          left_arm_vy_ = 0.0;
-          left_arm_vz_ = 0.0;
-          right_arm_vx_ = 0.0;
-          right_arm_vy_ = 0.0;
-          right_arm_vz_ = 0.0;
         }
       }
     } else if (layout != LAYOUT_RIGHT_ARM && layout != LAYOUT_LEFT_ARM) {
@@ -666,6 +712,12 @@ public:
       right_arm_vx_ = 0.0;
       right_arm_vy_ = 0.0;
       right_arm_vz_ = 0.0;
+      left_arm_vel_roll_ = 0.0;
+      left_arm_vel_pitch_ = 0.0;
+      left_arm_vel_yaw_ = 0.0;
+      right_arm_vel_roll_ = 0.0;
+      right_arm_vel_pitch_ = 0.0;
+      right_arm_vel_yaw_ = 0.0;
     }
 
     joy_deadman_ = ros::Time::now();
@@ -739,6 +791,9 @@ public:
   double arm_x_scale_;
   double arm_y_scale_;
   double arm_z_scale_;
+  double arm_roll_scale_;
+  double arm_pitch_scale_;
+  double arm_yaw_scale_;
 
   double right_arm_vx_;
   double right_arm_vy_;
@@ -748,6 +803,14 @@ public:
   double left_arm_vy_;
   double left_arm_vz_;
 
+  double right_arm_vel_roll_;
+  double right_arm_vel_pitch_;
+  double right_arm_vel_yaw_;
+
+  double left_arm_vel_roll_;
+  double left_arm_vel_pitch_;
+  double left_arm_vel_yaw_;
+
   bool head_init_;
   bool torso_init_;
 
@@ -877,8 +940,8 @@ int main(int argc, char **argv)
         //generaljoy.gc->updateCurrentWristPositions();
         generaljoy.gc->sendWristVelCommands(generaljoy.des_right_wrist_vel_, generaljoy.des_left_wrist_vel_, SlowHz);
         
-        generaljoy.gc->sendArmVelCommands(generaljoy.right_arm_vx_, generaljoy.right_arm_vy_, generaljoy.right_arm_vz_, 0.0, 0.0,
-                                          generaljoy.left_arm_vx_, generaljoy.left_arm_vy_, generaljoy.left_arm_vz_, 0.0, 0.0,
+        generaljoy.gc->sendArmVelCommands(generaljoy.right_arm_vx_, generaljoy.right_arm_vy_, generaljoy.right_arm_vz_, generaljoy.right_arm_vel_roll_, generaljoy.right_arm_vel_pitch_, generaljoy.right_arm_vel_yaw_,
+                                          generaljoy.left_arm_vx_, generaljoy.left_arm_vy_, generaljoy.left_arm_vz_, generaljoy.left_arm_vel_roll_, generaljoy.left_arm_vel_pitch_, generaljoy.left_arm_vel_yaw_,
                                           SlowHz);
       }
     }
diff --git a/pr2_teleop_general/src/pr2_teleop_general_keyboard.cpp b/pr2_teleop_general/src/pr2_teleop_general_keyboard.cpp
index b2f4593..24ff161 100644
--- a/pr2_teleop_general/src/pr2_teleop_general_keyboard.cpp
+++ b/pr2_teleop_general/src/pr2_teleop_general_keyboard.cpp
@@ -448,151 +448,151 @@ int main(int argc, char** argv)
             break;
           case 'i':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                             generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                             generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,
-                                             0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,0.0,
+                                             0.0, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,
-                                             generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,0.0,
+                                             generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             }
             break;
           case 'k':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                             -generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                             -generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(-generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,
-                                             0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(-generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,0.0,
+                                             0.0, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(-generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,
-                                             -generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(-generalkey->arm_x_scale_,0.0,0.0,0.0,0.0,0.0,
+                                             -generalkey->arm_x_scale_, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             }
             break;
           case 'j':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                             0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                             0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
                                              20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,
-                                             0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
+                                             0.0, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,
-                                                 0.0,generalkey->arm_y_scale_, 0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
+                                                 0.0,generalkey->arm_y_scale_, 0.0,0.0,0.0,0.0,
                                                  20.0);
             }
             break;
           case 'l':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                             0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                             0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
                                              20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,
-                                             0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
+                                             0.0, 0.0,0.0,0.0,0.0,0.0,
                                              20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,
-                                                 0.0,-generalkey->arm_y_scale_, 0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,-generalkey->arm_y_scale_,0.0,0.0,0.0,0.0,
+                                                 0.0,-generalkey->arm_y_scale_, 0.0,0.0,0.0,0.0,
                                                  20.0);
             }
             break;
           case 'h':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,0.0,
+                                                 0.0, 0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,
-                                                 0.0,0.0,generalkey->arm_z_scale_, 0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,generalkey->arm_z_scale_,0.0,0.0,0.0,
+                                                 0.0,0.0,generalkey->arm_z_scale_, 0.0,0.0,0.0,
                                                  20.0);
             }
             break;
           case 'n':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,0.0,
+                                                 0.0, 0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,
-                                                 0.0,0.0,-generalkey->arm_z_scale_, 0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,-generalkey->arm_z_scale_,0.0,0.0,0.0,
+                                                 0.0,0.0,-generalkey->arm_z_scale_, 0.0,0.0,0.0,
                                                  20.0);
             }
             break;
-          case 'd':
+          case 'r':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,0,generalkey->arm_pitch_scale_,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,0.0,generalkey->arm_roll_scale_,0.0,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0,generalkey->arm_pitch_scale_,0.0,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,generalkey->arm_roll_scale_,0.0,0.0,
+                                                 0.0, 0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0,generalkey->arm_pitch_scale_,0.0,
-                                                 0.0,0.0,0,generalkey->arm_pitch_scale_,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,generalkey->arm_roll_scale_,0.0,0.0,
+                                                 0.0,0.0,0.0,generalkey->arm_roll_scale_,0.0,0.0,
                                                  20.0);
             }
             break;
-          case 'u':
+          case 't':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,0,-generalkey->arm_pitch_scale_,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,0.0,-generalkey->arm_roll_scale_,0.0,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0,-generalkey->arm_pitch_scale_,0.0,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,-generalkey->arm_roll_scale_,0.0,0.0,
+                                                 0.0,0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0,-generalkey->arm_pitch_scale_,0.0,
-                                                 0.0,0.0,0,-generalkey->arm_pitch_scale_,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,-generalkey->arm_roll_scale_,0.0,0.0,
+                                                 0.0,0.0,0.0,-generalkey->arm_roll_scale_,0.0,0.0,
                                                  20.0);
             }
             break;
-          case 'r':
+          case 'd':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,0.0,0.0,generalkey->arm_roll_scale_,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,0,0.0,generalkey->arm_pitch_scale_,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,generalkey->arm_roll_scale_,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0,0.0,generalkey->arm_pitch_scale_,0.0,
+                                                 0.0, 0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,generalkey->arm_roll_scale_,
-                                                 0.0,0.0,0.0,0.0,generalkey->arm_roll_scale_,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0,0.0,generalkey->arm_pitch_scale_,0.0,
+                                                 0.0,0.0,0,0.0,generalkey->arm_pitch_scale_,0.0,
                                                  20.0);
             }
             break;
-          case 't':
+          case 'u':
             if(arm == GeneralCommander::ARMS_LEFT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,
-                                                 0.0,0.0,0.0,0.0,-generalkey->arm_roll_scale_,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,0.0,0.0,
+                                                 0.0,0.0,0,0.0,-generalkey->arm_pitch_scale_,0.0,
                                                  20.0);
             } else if(arm == GeneralCommander::ARMS_RIGHT) {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,-generalkey->arm_roll_scale_,
-                                                 0.0, 0.0,0.0,0.0,0.0,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0,0.0,-generalkey->arm_pitch_scale_,0.0,
+                                                 0.0, 0.0,0.0,0.0,0.0,0.0,
                                                  20.0);
             } else {
-              generalkey->gc->sendArmVelCommands(0.0,0.0,0.0,0.0,-generalkey->arm_roll_scale_,
-                                                 0.0,0.0,0.0,0.0,-generalkey->arm_roll_scale_,
+              generalkey->gc->sendArmVelCommands(0.0,0.0,0,0.0,-generalkey->arm_pitch_scale_,0.0,
+                                                 0.0,0.0,0,0.0,-generalkey->arm_pitch_scale_,0.0,
                                                  20.0);
             }
             break;
