diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 95f8ba91984e0b15d0aab74a43850b534d9bc116..eccdafd3002e6aec31ba8859eed35cf2c60c9032 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -3,7 +3,7 @@ ADD_SUBDIRECTORY(xml)
 # edit the following line to add all the source code files of the library
 SET(sources dynamixel.cpp dynamixelserver.cpp dynamixelserver_ftdi.cpp dynamixelserver_serial.cpp dynamixelexceptions.cpp dynamixel_slave.cpp dynamixel_slave_ftdi.cpp dynamixel_slave_serial.cpp)
 # edit the following line to add all the header files of the library
-SET(headers dynamixel.h dynamixelserver.h dynamixelserver_ftdi.h dynamixelserver_serial.h dynamixelexceptions.h dynamixel_common.h dynamixel_slave.h dynamixel_slave_ftdi.h dynamixel_slave_serial.h)
+SET(headers dynamixel.h dynamixelserver.h dynamixelserver_ftdi.h dynamixelserver_serial.h dynamixelexceptions.h dynamixel_common.h dynamixel_slave.h dynamixel_slave_ftdi.h dynamixel_slave_serial.h) 
 
 INCLUDE_DIRECTORIES(.)
 
diff --git a/src/dynamixel.h b/src/dynamixel.h
index 96c545cae70ec860f23f7876bdacc7ae4d4242c9..2ab05597c3592d53ce6e44ca6a87a5d0528b0111 100644
--- a/src/dynamixel.h
+++ b/src/dynamixel.h
@@ -24,87 +24,87 @@ class CDynamixel
   private:
     friend class CDynamixelServer;
     /**
-     * \brief
-     * 
+     * \brief 
+     *
      */
-    CDynamixelServer *dyn_server;
+    unsigned char id_register;
     /**
-     * \brief Handle to the communications device
+     * \brief 
      *
-     */ 
-    CComm *comm_dev;
+     */
+    unsigned char baudrate_register;
     /**
-     * \brief
-     * 
+     * \brief 
+     *
      */
-    unsigned char node_address;
+    void set_baudrate(int baudrate);
     /**
-     * \brief mutual exclusion mechanism to access the usb
+     * \brief
      *
      */
-    CMutex *usb_access; 
+    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
     /**
-     * \brief Handle to the unique event server
+     * \brief
      *
      */
-    CEventServer *event_server;
+    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+
+  protected:
     /**
      * \brief data reception event
      * 
      */
     std::string usb_rx_event_id;
     /**
-     * \brief 
+     * \brief
      *
      */
-    unsigned char id_register;
+    dyn_version_t version;
     /**
-     * \brief 
-     *
+     * \brief
+     * 
      */
-    unsigned char baudrate_register;
+    CDynamixelServer *dyn_server;
     /**
-     * \brief 
-     *
+     * \brief
+     * 
      */
-    void set_baudrate(int baudrate);
+    unsigned char node_address;
     /**
-     * \brief
+     * \brief Handle to the unique event server
      *
      */
-    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
+    CEventServer *event_server;
     /**
-     * \brief
+     * \brief Handle to the communications device
      *
-     */
-    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+     */ 
+    CComm *comm_dev;
     /**
-     * \brief
+     * \brief mutual exclusion mechanism to access the usb
      *
      */
-    dyn_version_t version;
-
-  protected:
+    CMutex *usb_access; 
     /**
      * \brief 
      *
      */
-    void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0);
+    virtual void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0);
     /**
      * \brief 
      *
      */
-    void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0);
+    virtual void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0);
     /**
      * \brief 
      *
      */
-    unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
+    virtual unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
     /**
      * \brief 
      *
      */
-    unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
+    virtual unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
     /**
      * \brief 
      *
diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp
index 37c91fcd3e430215b3f94bb56f52d7b06673f42e..1528875a3071f4d430ae9e29f2454c5bdbcbed39 100644
--- a/src/dynamixelserver.cpp
+++ b/src/dynamixelserver.cpp
@@ -1347,3 +1347,6 @@ void CDynamixelServer::read_bulk(std::vector<unsigned char>& servo_ids,std::vect
   }
 }
 
+CDynamixelServer::~CDynamixelServer()
+{
+}
diff --git a/src/dynamixelserver.h b/src/dynamixelserver.h
index 9c5559abda51b86b4510f97ca63b7f6ab4f28657..160c164ff0276d4f8b5c0c6ef417e832051862bf 100644
--- a/src/dynamixelserver.h
+++ b/src/dynamixelserver.h
@@ -50,11 +50,6 @@ const int frequencies[9]={1000000,500000,400000,250000,200000,115200,57600,19200
 class CDynamixelServer
 {
   private:
-    /**
-     * \brief 
-     *
-     */ 
-    CEventServer *event_server;
     /**
      * \brief 
      *
@@ -99,33 +94,38 @@ class CDynamixelServer
      * \brief 
      *
      */ 
-    void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0,unsigned char id=0xFE);
+    virtual void send_instruction_packet_v1(dyn_inst_t inst,unsigned char *data=NULL,unsigned char len=0,unsigned char id=0xFE);
     /**
      * \brief 
      *
      */ 
-    void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0,unsigned char id=0xFE);
+    virtual void send_instruction_packet_v2(dyn_inst_t inst,unsigned char *data=NULL,unsigned short int len=0,unsigned char id=0xFE);
     /**
      * \brief 
      *
      */ 
-    unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
+    virtual unsigned char receive_status_packet_v1(unsigned char **data,unsigned char *len);
     /**
      * \brief 
      *
      */ 
-    unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
+    virtual unsigned char receive_status_packet_v2(unsigned char **data,unsigned short int *len);
     /**
      * \brief
      *
      */
-    void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
+    virtual void sync_packet_v1(unsigned char *data,unsigned int length,int *start);
     /**
      * \brief
      *
      */
-    void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
+    virtual void sync_packet_v2(unsigned char *data,unsigned int length,int *start);
   protected:
+    /**
+     * \brief 
+     *
+     */ 
+    CEventServer *event_server;
     /**
      * \brief 
      *
@@ -243,7 +243,7 @@ class CDynamixelServer
      * \brief 
      *
      */ 
-    CDynamixel *get_device(int dev_id,dyn_version_t version=dyn_version1);
+    virtual CDynamixel *get_device(int dev_id,dyn_version_t version=dyn_version1);
     /**
      * \brief 
      *
@@ -284,6 +284,7 @@ class CDynamixelServer
      *
      */    
     void read_bulk(std::vector<unsigned char>& servo_ids,std::vector<unsigned short int> &start_addr,std::vector<unsigned short int> &length, std::vector< std::vector<unsigned char> >& data,dyn_version_t version=dyn_version2);
+    virtual ~CDynamixelServer();
 };
 
 #endif