diff --git a/dynamixel_base/src/dynamixel_slave.c b/dynamixel_base/src/dynamixel_slave.c
index a08f9b063ef5bcf7173cb8a218865c8f3e611b0a..84aaeaeabccf810a950c7e9488d07a76d042f302 100644
--- a/dynamixel_base/src/dynamixel_slave.c
+++ b/dynamixel_base/src/dynamixel_slave.c
@@ -169,13 +169,19 @@ void dyn_slave_loop(TDynamixelSlave *slave)
         if(send_status==0x01)
           dyn_slave_send_status_packet(slave,slave->slave_devices[i]->address,error,length,data,slave->slave_devices[i]->return_delay);
       }
-      if(slave->on_relay(slave->version,slave->rx_buffer,slave->tx_buffer)==DYN_SUCCESS)
-      {   
-        // set the tx mode, if necessary           
-        slave->set_tx_mode();
-        // start transmission by DMA
-        comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn_get_length(slave->tx_buffer)+4);         
-      } 
+      if(send_status==0xFF)// packet has not been processed
+      {
+        if(slave->on_relay(slave->version,slave->rx_buffer,slave->tx_buffer)==DYN_SUCCESS)
+        {   
+          // set the tx mode, if necessary           
+          slave->set_tx_mode();
+          // start transmission by DMA
+          if(slave->version==DYN_VER1)
+            comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn_get_length(slave->tx_buffer)+4);         
+          else
+            comm_send_dma(slave->comm_dev,slave->tx_buffer,dyn2_get_length(slave->tx_buffer)+7);         
+        } 
+      }
     }
     else
     {