diff --git a/CMakeLists.txt b/CMakeLists.txt
index 49c7e1b7356814ef7cf17c3f104b2a331cfee5f3..f46ee062a6763bef551a7fe687a11e923ee5b053 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -91,7 +91,7 @@ IF (UNIX)
   SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "labrobotica - labrobotica@iri.upc.edu")
 
 # Uncomment to add the necessary mantainer scripts
-#   SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/package_scripts/preinst;${CMAKE_SOURCE_DIR}/package_scripts/postinst;${CMAKE_SOURCE_DIR}/package_scripts/prerm;${CMAKE_SOURCE_DIR}/package_scripts/postrm")
+  SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/scripts/debian/postinst;${CMAKE_SOURCE_DIR}/scripts/debian/prerm")
 
 # Uncomment to add dependencies comma separated
 # SET(CPACK_DEBIAN_PACKAGE_DEPENDS "iri-<package_name>-dev (>= 1.0~${DISTRIB})")
diff --git a/scripts/debian/postinst b/scripts/debian/postinst
new file mode 100755
index 0000000000000000000000000000000000000000..7eea91b6f417f85b46ba3c95a9599369a27baba4
--- /dev/null
+++ b/scripts/debian/postinst
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+  configure)
+    echo "   Trying to add library to ldconfig..."
+    /usr/share/iri/add_lib_to_ld_config.sh -l dynamixel -p && echo "   Done." || echo "   /usr/share/iri/add_lib_to_ld_config.sh doesn't exists. Download it from iriutils and execute it."
+    
+  ;;
+  abort-upgrade)
+
+  ;;
+  abort-remove)
+
+  ;;
+  abort-deconfigure)
+
+  ;;
+esac   
+
+exit 0
diff --git a/scripts/debian/prerm b/scripts/debian/prerm
new file mode 100644
index 0000000000000000000000000000000000000000..a2e8b2ad545d6bd7842baa3282c318ad02657190
--- /dev/null
+++ b/scripts/debian/prerm
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+  remove)
+    echo "   Trying to remove library from ldconfig..."
+    /usr/share/iri/remove_lib_from_ld_config.sh -l dynamixel -p && echo "   Done." || echo "   /usr/share/iri/remove_lib_from_ld_config.sh doesn't exists. Download it from iriutils and execute it."
+
+  ;;
+  upgrade)
+
+  ;;
+  deconfigure)
+
+  ;;
+  failed-upgrade)
+
+  ;;
+esac    
+
+exit 0
diff --git a/src/dynamixel.cpp b/src/dynamixel.cpp
index 61df2a885df3aec397a17fc06206a2be73be2f39..31f8ea8e1200b61d0b77d1b4c0239c79ae3d4ee3 100644
--- a/src/dynamixel.cpp
+++ b/src/dynamixel.cpp
@@ -118,7 +118,7 @@ unsigned char CDynamixel::receive_status_packet_v1(unsigned char **data,unsigned
       do{
         if((num=this->comm_dev->get_num_data())==0)
         {
-          this->event_server->wait_all(events,500);
+          this->event_server->wait_all(events,100);
           num=this->comm_dev->get_num_data();
         }
         if((read+num)>1024)
@@ -139,7 +139,7 @@ unsigned char CDynamixel::receive_status_packet_v1(unsigned char **data,unsigned
       {
         if((num=this->comm_dev->get_num_data())==0)
         {
-          this->event_server->wait_all(events,500);
+          this->event_server->wait_all(events,100);
           num=this->comm_dev->get_num_data();
         }
         if((read-start+num)>length)
@@ -201,7 +201,7 @@ unsigned char CDynamixel::receive_status_packet_v2(unsigned char **data,unsigned
       do{
         if((num=this->comm_dev->get_num_data())==0)
         {
-          this->event_server->wait_all(events,500);
+          this->event_server->wait_all(events,100);
           num=this->comm_dev->get_num_data();
         }
         if((read+num)>1024)
@@ -222,7 +222,7 @@ unsigned char CDynamixel::receive_status_packet_v2(unsigned char **data,unsigned
       {
         if((num=this->comm_dev->get_num_data())==0)
         {
-          this->event_server->wait_all(events,500);
+          this->event_server->wait_all(events,100);
           num=this->comm_dev->get_num_data();
         }
         if((read-start+num)>1024)
diff --git a/src/dynamixel_slave_ftdi.cpp b/src/dynamixel_slave_ftdi.cpp
index 47335a99309c9a5847447408f9a5e10982dbd39c..f947036d02851d2ed405706273618f36144bca72 100644
--- a/src/dynamixel_slave_ftdi.cpp
+++ b/src/dynamixel_slave_ftdi.cpp
@@ -68,7 +68,7 @@ void CDynamixelSlaveFTDI::config(std::string &filename)
   {
     // try to open the specified file
     try{
-      std::auto_ptr<dyn_server_ftdi_config_t> cfg(dyn_server_ftdi_config(filename.c_str(), xml_schema::flags::dont_validate));
+      std::unique_ptr<dyn_server_ftdi_config_t> cfg(dyn_server_ftdi_config(filename.c_str(), xml_schema::flags::dont_validate));
       this->config_bus(cfg->serial_num(),cfg->baudrate());
     }catch (const xml_schema::exception& e){
       std::ostringstream os;
diff --git a/src/dynamixelserver_ftdi.cpp b/src/dynamixelserver_ftdi.cpp
index e29bcdd9dea05a6f6b3c9b749e7748976601f57a..da88b2c5f25c0f65f56f175d9bacfdd8619ccdd1 100644
--- a/src/dynamixelserver_ftdi.cpp
+++ b/src/dynamixelserver_ftdi.cpp
@@ -87,7 +87,7 @@ void CDynamixelServerFTDI::config(std::string &filename)
   {
     // try to open the specified file
     try{
-      std::auto_ptr<dyn_server_ftdi_config_t> cfg(dyn_server_ftdi_config(filename.c_str(), xml_schema::flags::dont_validate));
+      std::unique_ptr<dyn_server_ftdi_config_t> cfg(dyn_server_ftdi_config(filename.c_str(), xml_schema::flags::dont_validate));
       this->config_bus(cfg->serial_num(),cfg->baudrate());
     }catch (const xml_schema::exception& e){
       std::ostringstream os;
diff --git a/src/dynamixelserver_serial.cpp b/src/dynamixelserver_serial.cpp
index 2d55c3d434b451d771fb43f33b30a9123e7b1b3c..03d0676fb9a14d09938d285473a68d2c18738d0f 100644
--- a/src/dynamixelserver_serial.cpp
+++ b/src/dynamixelserver_serial.cpp
@@ -41,8 +41,12 @@ void CDynamixelServerSerial::config_bus(const std::string &device, int baudrate)
 {
   TRS232_config serial_config;
 
-  if(this->comm_dev==NULL)
+  if(this->comm_dev!=NULL)
   {
+    delete this->comm_dev;
+    this->comm_dev=NULL;
+  }
+  try{
     serial_config.baud=baudrate;
     serial_config.num_bits=8;
     serial_config.parity=none;
@@ -52,6 +56,13 @@ void CDynamixelServerSerial::config_bus(const std::string &device, int baudrate)
     this->comm_dev->config(&serial_config);
     this->bus_info.baud_rate=baudrate;
     this->bus_info.device=device;
+  }catch(CException &e){
+    if(this->comm_dev!=NULL)
+    {
+      delete this->comm_dev;
+      this->comm_dev=NULL;
+    }
+    throw e;
   }
 }
 
@@ -64,7 +75,7 @@ void CDynamixelServerSerial::config(std::string &filename)
   {
     // try to open the specified file
     try{
-      std::auto_ptr<dyn_server_serial_config_t> cfg(dyn_server_serial_config(filename.c_str(), xml_schema::flags::dont_validate));
+      std::unique_ptr<dyn_server_serial_config_t> cfg(dyn_server_serial_config(filename.c_str(), xml_schema::flags::dont_validate));
       this->config_bus(cfg->serial_dev(),cfg->baudrate());
     }catch (const xml_schema::exception& e){
       std::ostringstream os;
diff --git a/src/xml/CMakeLists.txt b/src/xml/CMakeLists.txt
index 1a4a350e0aa0687fcbe60dff22a89823fd3d620f..d49ad31560929acfd1ba549a5fcc4e2fc74299bd 100644
--- a/src/xml/CMakeLists.txt
+++ b/src/xml/CMakeLists.txt
@@ -36,7 +36,7 @@ IF(XSD_FOUND)
       ADD_CUSTOM_TARGET(xsd_files_gen DEPENDS ${XSD_SOURCES_INT})
       ADD_CUSTOM_COMMAND(
          OUTPUT ${XSD_SOURCES_INT}
-         COMMAND xsdcxx cxx-tree --generate-serialization ${XSD_FILES}
+         COMMAND xsdcxx cxx-tree --std c++11 --generate-serialization ${XSD_FILES}
          WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
          DEPENDS ${XSD_PATH_FILES}
          COMMENT "Parsing the xml template file ${XSD_FILES}")