diff --git a/src/dynamixel_slave.cpp b/src/dynamixel_slave.cpp
index bdaad1c70b1cef354098a11ee1a8ec5717e409d9..59fa467d1df677f2b5e6ca71d02039c03b012edf 100644
--- a/src/dynamixel_slave.cpp
+++ b/src/dynamixel_slave.cpp
@@ -21,6 +21,9 @@ CDynamixelSlave::CDynamixelSlave(const std::string& cont_id,dyn_version_t dyn_ve
   this->dyn_ver=dyn_ver;
   
   this->comm_dev=NULL;
+  this->data_phase=false;
+  this->num_bytes=0;
+  this->length=0;
 }
 
 void *CDynamixelSlave::process_packets_thread(void *params)
@@ -31,10 +34,6 @@ void *CDynamixelSlave::process_packets_thread(void *params)
   unsigned char data[1024];
   bool end=false;
 
-  static bool data_phase=false;
-  static unsigned char packet[64*1024];
-  static int num_bytes=0,length=0; 
-
   // wait until the comm device becomes valid 
   while(!end)
   {
@@ -71,81 +70,81 @@ void *CDynamixelSlave::process_packets_thread(void *params)
             slave->comm_access.exit();
             for(i=0;i<num;i++)
             {
-              if(!data_phase)
+              if(!slave->data_phase)
               {
-                switch(num_bytes)
+                switch(slave->num_bytes)
                 {
                   case 0: if(data[i]==0xFF)
                           {
-                            packet[num_bytes]=data[i];
-                            num_bytes++;
+                            slave->packet[slave->num_bytes]=data[i];
+                            slave->num_bytes++;
                           }
                           break;
                   case 1: if(data[i]==0xFF)
                           {
-                            packet[num_bytes]=data[i];
-                            num_bytes++;
+                            slave->packet[slave->num_bytes]=data[i];
+                            slave->num_bytes++;
                           }
                           else
-                            num_bytes--;
+                            slave->num_bytes--;
                           break;
                   case 2: if(data[i]==0xFD)// version 2 header
                           {
                             if(slave->dyn_ver==dyn_version2)// the module is configured for version 2
                             {
-                              packet[num_bytes]=data[i];
-                              num_bytes++;
+                              slave->packet[slave->num_bytes]=data[i];
+                              slave->num_bytes++;
                             }
                             else
-                              num_bytes=0;// ignore packet and restart synchronization
+                              slave->num_bytes=0;// ignore packet and restart synchronization
                           }
                           else if(data[i]!=0xFF)
                           {
-                            packet[num_bytes]=data[i];
-                            num_bytes++;
+                            slave->packet[slave->num_bytes]=data[i];
+                            slave->num_bytes++;
                           }
                           break;
-                  case 3: packet[num_bytes]=data[i];
+                  case 3: slave->packet[slave->num_bytes]=data[i];
                           if(slave->dyn_ver==dyn_version1)
                           {
-                            length=data[i];
-                            num_bytes++;
+                            slave->length=data[i];
+                            slave->num_bytes++;
                             /* read packet_data */
-                            data_phase=true;
+                            slave->data_phase=true;
                           }
                           else
-                            num_bytes++;
+                            slave->num_bytes++;
                           break;
-                  case 4: packet[num_bytes]=data[i];
-                          num_bytes++;
+                  case 4: slave->packet[slave->num_bytes]=data[i];
+                          slave->num_bytes++;
                           break;
-                  case 5: packet[num_bytes]=data[i];
-                          num_bytes++;
-                          length=data[i];
+                  case 5: slave->packet[slave->num_bytes]=data[i];
+                          slave->num_bytes++;
+                          slave->length=data[i];
                           break;
-                  case 6: packet[num_bytes]=data[i];
-                          num_bytes++;
-                          length+=(data[i]<<8);
+                  case 6: slave->packet[slave->num_bytes]=data[i];
+                          slave->num_bytes++;
+                          slave->length+=(data[i]<<8);
                           /* read packet_data */
-                          data_phase=true;
+                          slave->data_phase=true;
                           break;
                   default: break;
                 }
               }
               else// data phase
               {
-                packet[num_bytes]=data[i];
-                num_bytes++;
-                length--;
-                if(length==0)
+                slave->packet[slave->num_bytes]=data[i];
+                slave->num_bytes++;
+                slave->length--;
+                if(slave->length==0)
                 {
-                  data_phase=false;
-                  memcpy(slave->new_packet,packet,num_bytes);
+                  slave->data_phase=false;
+                  memcpy(slave->new_packet,slave->packet,slave->num_bytes);
                   if(slave->dyn_ver==dyn_version1)
                     slave->dynamixel_loop_v1();
                   else
                     slave->dynamixel_loop_v2();
-                  num_bytes=0;
+                  slave->num_bytes=0;
                 }  
               }
             }
diff --git a/src/dynamixel_slave.h b/src/dynamixel_slave.h
index f51d42b287445dde20d9ee21a5be23c9955a557f..b535dfd5f41ba5ba5910439cc174ae412bb5b674 100644
--- a/src/dynamixel_slave.h
+++ b/src/dynamixel_slave.h
@@ -101,7 +101,31 @@ class CDynamixelSlave
      *
      */
     unsigned char slave_answer[1024];
+    /**
+     * \brief
+     *
+     */
     unsigned int slave_answer_length;
+    /**
+     * \brief
+     *
+     */
+    bool data_phase;
+    /**
+     * \brief
+     *
+     */
+    unsigned char packet[64*1024];
+    /**
+     * \brief
+     *
+     */
+    unsigned int num_bytes;
+    /**
+     * \brief
+     *
+     */
+    unsigned int length;
   protected:
     /**
      * \brief mutual exclusion mechanism to access the usb