diff --git a/src/fw_downloader/fw_downloader.cpp b/src/fw_downloader/fw_downloader.cpp
index 633665f1968f1274f43fbc717f5020c7f1d5799f..2c08f8bed5fb1bc2ee5c12432f64fd38d0baa377 100755
--- a/src/fw_downloader/fw_downloader.cpp
+++ b/src/fw_downloader/fw_downloader.cpp
@@ -127,7 +127,8 @@ int main(int argc,char *argv[])
         while(!bootloader_connected)
         {
           try{
-            event_server->wait_all(events,20);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,20);
             num_data=serial_port.get_num_data();
             serial_port.read((unsigned char *)bootloader_data,num_data);
             bootloader_data[num_data]='\0';
@@ -166,7 +167,8 @@ int main(int argc,char *argv[])
           while(!end)
           {
             try{
-              event_server->wait_all(events,300);
+              if((num_data=serial_port.get_num_data()==0))
+                event_server->wait_all(events,300);
               num_data=serial_port.get_num_data();
               serial_port.read(bootloader_data,num_data);
               bootloader_data[num_data]='\0';
@@ -179,6 +181,7 @@ int main(int argc,char *argv[])
           }
           end=false;
         }
+        sleep(1);
         // start the download
         serial_port.write((unsigned char *)&bootloader_load,1);
         if(protocol==new_protocol)
@@ -186,7 +189,8 @@ int main(int argc,char *argv[])
         while(!end)
         {
           try{
-            event_server->wait_all(events,300);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,300);
             num_data=serial_port.get_num_data();
             serial_port.read(bootloader_data,num_data);
             bootloader_data[num_data]='\0';
@@ -212,6 +216,7 @@ int main(int argc,char *argv[])
           printf("\rDownloading Firmware (%ld/%ld byte)", downloaded_size, binary_size);
           fflush(stdout);
         }
+        usleep(1000);
         // send the checksum
         serial_port.write(&checksum,1);
         std::cout << std::endl << "Download complete" << std::endl;
@@ -219,7 +224,8 @@ int main(int argc,char *argv[])
         while(!end)
         {
           try{
-            event_server->wait_all(events,300);
+            if((num_data=serial_port.get_num_data()==0))
+              event_server->wait_all(events,300);
             // there has been an error
             num_data=serial_port.get_num_data();
             serial_port.read(bootloader_data,num_data);