diff --git a/src/dynamixel_motor.cpp b/src/dynamixel_motor.cpp
index fafd0d4c5d00539c433513e8f6f981d95d478a9a..432550b99fbf40c39a07913bb853d7ed37cac205 100644
--- a/src/dynamixel_motor.cpp
+++ b/src/dynamixel_motor.cpp
@@ -975,16 +975,16 @@ void CDynamixelMotor::move_absolute_angle(double angle,double speed,double curre
   if(current==std::numeric_limits<double>::infinity())
   {
     this->set_control_mode(position_ctrl);
+    if(speed>this->info.max_speed)
+      speed=this->info.max_speed;
+    data=this->from_speeds(speed);
+    this->write_register(this->registers[goal_speed],data);
     if(angle>this->info.center_angle)
       angle=this->info.center_angle;
     else if(angle<-this->info.center_angle)
       angle=-this->info.center_angle;
     data=this->from_angles(angle);
     this->write_register(this->registers[goal_pos],data);
-    if(speed>this->info.max_speed)
-      speed=this->info.max_speed;
-    data=this->from_speeds(speed);
-    this->write_register(this->registers[goal_speed],data);
   }
   else
   {
@@ -995,16 +995,16 @@ void CDynamixelMotor::move_absolute_angle(double angle,double speed,double curre
       current=-this->info.max_current;
     data=(signed short int)(current*1000.0/2.69);
     this->write_register(this->registers[goal_current],data);
+    if(speed>this->info.max_speed)
+      speed=this->info.max_speed;
+    data=this->from_speeds(speed);
+    this->write_register(this->registers[profile_vel],data);
     if(angle>this->info.center_angle)
       angle=this->info.center_angle;
     else if(angle<-this->info.center_angle)
       angle=-this->info.center_angle;
     data=this->from_angles(angle);
     this->write_register(this->registers[goal_pos],data);
-    if(speed>this->info.max_speed)
-      speed=this->info.max_speed;
-    data=this->from_speeds(speed);
-    this->write_register(this->registers[profile_vel],data);
   }
 }
 
@@ -1016,6 +1016,10 @@ void CDynamixelMotor::move_relative_angle(double angle,double speed,double curre
   if(current==std::numeric_limits<double>::infinity())
   {
     this->set_control_mode(position_ctrl);
+    if(speed>this->info.max_speed)
+      speed=this->info.max_speed;
+    data=this->from_speeds(speed);
+    this->write_register(this->registers[goal_speed],data);
     this->read_register(this->registers[current_pos],pos);
     abs_angle=angle+this->to_angles(pos);
     if(abs_angle>this->info.center_angle)
@@ -1024,10 +1028,6 @@ void CDynamixelMotor::move_relative_angle(double angle,double speed,double curre
       abs_angle=-this->info.center_angle;
     data=this->from_angles(abs_angle);
     this->write_register(this->registers[goal_pos],data);
-    if(speed>this->info.max_speed)
-      speed=this->info.max_speed;
-    data=this->from_speeds(speed);
-    this->write_register(this->registers[goal_speed],data);
   }
   else
   {
@@ -1038,6 +1038,10 @@ void CDynamixelMotor::move_relative_angle(double angle,double speed,double curre
       current=-this->info.max_current;
     data=(signed short int)(current*1000.0/2.69);
     this->write_register(this->registers[goal_current],data);
+    if(speed>this->info.max_speed)
+      speed=this->info.max_speed;
+    data=this->from_speeds(speed);
+    this->write_register(this->registers[profile_vel],data);
     this->read_register(this->registers[current_pos],pos);
     abs_angle=angle+this->to_angles(pos);
     if(abs_angle>this->info.center_angle)
@@ -1046,10 +1050,6 @@ void CDynamixelMotor::move_relative_angle(double angle,double speed,double curre
       abs_angle=-this->info.center_angle;
     data=this->from_angles(abs_angle);
     this->write_register(this->registers[goal_pos],data);
-    if(speed>this->info.max_speed)
-      speed=this->info.max_speed;
-    data=this->from_speeds(speed);
-    this->write_register(this->registers[goal_speed],data);
   } 
 }