diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp
index d9c6cd2b599996aa4d4e17a2cefce08a1513fc1c..dc250af1d653d8a89ac4ec00ff9028e0711bee40 100644
--- a/src/dynamixelserver.cpp
+++ b/src/dynamixelserver.cpp
@@ -2,6 +2,7 @@
 #include "dynamixelserver.h"
 #include "eventexceptions.h"
 #include <sstream>
+#include <iostream>
 
 const unsigned short crc_table[256] = {
         0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011,
@@ -596,29 +597,28 @@ void *CDynamixelServer::scan_thread(void *param)
         dyn_server->state=dyn_created;
         dyn_server->scan_error="communication device not initialized";
         dyn_server->event_server->set_event(dyn_server->scan_error_event_id);
-        dyn_server->close();
         dyn_server->dynamixel_access.exit();
         pthread_exit(NULL);
       }
       for(freq=0;freq<9;freq++)
       {
+        std::cout << "trying frequency: " << frequencies[freq] << std::endl;
         dyn_server->set_baudrate(frequencies[freq]);
         for(id=0;id<0xFD;id++)
         {
           if(dyn_server->event_server->event_is_set(dyn_server->stop_scan_event_id))
           {
             dyn_server->event_server->reset_event(dyn_server->stop_scan_event_id);
-            if(dyn_server->scan_version==dyn_version1)
-              dyn_server->devices_v1.clear();
-            else
-              dyn_server->devices_v2.clear();
-            dyn_server->close();
+            dyn_server->devices_v1.clear();
+            dyn_server->devices_v2.clear();
             pthread_exit(NULL);
           }
           else
           {
             try{
+              std::cout << "checking device ID: " << id << std::endl;
               dyn_server->ping(id,20,dyn_server->scan_version);
+              std::cout << "Found device with ID: " << id << std::endl;
             }catch(CEventTimeoutException &e){
               continue;
             }
@@ -643,14 +643,11 @@ void *CDynamixelServer::scan_thread(void *param)
       end=true;// nothing found
     }catch(CException &e){
       dyn_server->dynamixel_access.enter();
-      if(dyn_server->scan_version==dyn_version1)
-        dyn_server->devices_v1.clear();
-      else
-        dyn_server->devices_v2.clear();
+      dyn_server->devices_v1.clear();
+      dyn_server->devices_v2.clear();
       dyn_server->state=dyn_created;
       dyn_server->scan_error=e.what();
       dyn_server->event_server->set_event(dyn_server->scan_error_event_id);
-      dyn_server->close();
       dyn_server->dynamixel_access.exit();
       pthread_exit(NULL);
     }
@@ -673,11 +670,8 @@ void CDynamixelServer::start_scan(dyn_version_t version)
   {
     this->scan_version=version;
     this->stop_scan();
-    if(version==dyn_version1)
-      this->devices_v1.clear();
-    else
-      this->devices_v2.clear();
-    this->close();
+    this->devices_v1.clear();
+    this->devices_v2.clear();
     this->thread_server->start_thread(this->scan_thread_id);
   }
 }
@@ -899,95 +893,26 @@ void CDynamixelServer::action(dyn_version_t version)
 
 void CDynamixelServer::ping(int dev_id,int time,dyn_version_t version,unsigned short *model,unsigned char *fw_ver)
 {
-  unsigned char *data,length_v1,dummy;
-  std::list<std::string> events;
+  unsigned char *data,length_v1;
   unsigned short length_v2;
-  int num_retries=5,num,i;
-  bool done=false;
 
   if(version==dyn_version1)
   {
-    events.push_back(this->comm_dev->get_rx_event_id());
-    while(!done)
-    {
-      try{
-        this->send_instruction_packet_v1(dyn_ping,NULL,0,dev_id);
-        this->receive_status_packet_v1(&data,&length_v1);
-        if(data!=NULL)
-          delete[] data;
-        done=true;
-      }catch(CEventTimeoutException &e){
-        this->dynamixel_access.enter();
-        for(i=0;i<32;i++)
-        {
-          if((num=this->comm_dev->get_num_data())==0)
-          {
-            try{
-              this->comm_dev->write(&dummy,1);
-              this->event_server->wait_all(events,20);
-            }catch(CEventTimeoutException &e){
-            }
-          }
-          else
-            break;
-        }
-        this->dynamixel_access.exit(); 
-        if(num>0)
-        {
-          this->receive_status_packet_v1(&data,&length_v1);
-          if(data!=NULL)
-            delete[] data;
-          usleep(100000);
-        }
-        num_retries--;
-        if(num_retries==0)
-          throw e;
-      }
-    }
+    this->send_instruction_packet_v1(dyn_ping,NULL,0,dev_id);
+    this->receive_status_packet_v1(&data,&length_v1);
+    if(data!=NULL)
+      delete[] data;
   }
   else
   {
-    events.push_back(this->comm_dev->get_rx_event_id());
-    while(!done)
-    {
-      try{
-        this->send_instruction_packet_v2(dyn_ping,NULL,0,dev_id);
-        this->receive_status_packet_v2(&data,&length_v2);
-        if(model!=NULL)
-          *model=data[0]+data[1]*256;
-        if(fw_ver!=NULL)
-          *fw_ver=data[2];
-        if(data!=NULL)
-          delete[] data;
-        done=true;
-      }catch(CEventTimeoutException &e){
-        this->dynamixel_access.enter();
-        for(i=0;i<32;i++)
-        {
-          if((num=this->comm_dev->get_num_data())==0)
-          {
-            try{
-              this->comm_dev->write(&dummy,1);
-              this->event_server->wait_all(events,20);
-            }catch(CEventTimeoutException &e){
-            }
-          }
-          else
-            break;
-        }
-        this->dynamixel_access.exit(); 
-        if(num>0)
-        {
-          this->receive_status_packet_v1(&data,&length_v1);
-          if(data!=NULL)
-            delete[] data;
-          usleep(100000);
-        }
-        num_retries--;
-        if(num_retries==0)
-          throw e;
-      }
-    }
+    this->send_instruction_packet_v2(dyn_ping,NULL,0,dev_id);
+    this->receive_status_packet_v2(&data,&length_v2);
+    if(model!=NULL)
+      *model=data[0]+data[1]*256;
+    if(fw_ver!=NULL)
+      *fw_ver=data[2];
+    if(data!=NULL)
+      delete[] data;
   }
 } 
 
diff --git a/src/examples/test_dynamixel_slave.cpp b/src/examples/test_dynamixel_slave.cpp
index 4859730690a13c541fa1e4dcd7ab8ca5f9ab48dd..1f269e340055acf536707fa8cfa4944464b1500a 100644
--- a/src/examples/test_dynamixel_slave.cpp
+++ b/src/examples/test_dynamixel_slave.cpp
@@ -5,8 +5,8 @@
 int main(int argc, char *argv[])
 {
   try{
-    CDynamixelSlaveSerial slave("slave","/dev/ttyUSB0");
-    slave.set_baudrate(921600);
+    CDynamixelSlaveSerial slave("slave","/dev/ttyUSB1");
+    slave.set_baudrate(1000000);
     sleep(10);
     std::cout << "exit" << std::endl;
   }catch(CException &e){