diff --git a/dynamixel_base/src/dynamixel_master.c b/dynamixel_base/src/dynamixel_master.c
index ba4ab98207b6b880e91f02862afc9a9009ea59a6..113992a75626b08ec216de072cc1ee5e21396037 100644
--- a/dynamixel_base/src/dynamixel_master.c
+++ b/dynamixel_base/src/dynamixel_master.c
@@ -533,19 +533,31 @@ unsigned char dyn_master_is_sync_read_done(TDynamixelMaster *master,unsigned cha
                   }
                 }
                 else
+                {
+                  num_dev_done=0;
                   return error;
+                }
               }
               else
+              {
+                num_dev_done=0;
                 return DYN_CHECKSUM_ERROR;
+              }
             }
             else
               return error;
           }
           else 
+          {
+            num_dev_done=0;
             return DYN_SUCCESS;
+          }
         }
         else
+        {
+          num_dev_done=0;
           return DYN_SUCCESS;
+        }
       }
       else
         return error;
@@ -676,10 +688,16 @@ unsigned char dyn_master_is_bulk_read_done(TDynamixelMaster *master,unsigned cha
                   }
                 }
                 else
+                {
+                  num_dev_done=0;
                   return error;
+                }
               }
               else
-                return DYN_CHECKSUM_ERROR;
+              {
+                num_dev_done++;
+                return DYN_BUSY;
+              }
             }
             else
             {
@@ -697,20 +715,32 @@ unsigned char dyn_master_is_bulk_read_done(TDynamixelMaster *master,unsigned cha
                   }
                 }
                 else
+                {
+                  num_dev_done=0;
                   return error;
+                }
               }
               else
-                return DYN_CHECKSUM_ERROR;
+              {
+                num_dev_done++;
+                return DYN_BUSY;
+              }
             }
           }
           else
             return error;
         }
         else
+        {
+          num_dev_done=0;
           return DYN_SUCCESS;
+        }
       }
       else
+      {
+        num_dev_done=0;
         return DYN_SUCCESS;
+      }  
     }
     else
       return error; 
diff --git a/dynamixel_manager/include/dyn_manager.h b/dynamixel_manager/include/dyn_manager.h
index 2860e0ceb0d8171eac3301e512d87df7c28aca57..3069f47f30090c25f97f73240b36d2d247529d3a 100644
--- a/dynamixel_manager/include/dyn_manager.h
+++ b/dynamixel_manager/include/dyn_manager.h
@@ -123,7 +123,8 @@ typedef struct{
   sched_channel_t sch_scan_ch;
   TMemory *memory;
   TMemModule mem_module;
-  unsigned char running;
+  volatile unsigned char running;
+  unsigned char stop_flag;
   unsigned int present_devices;
   volatile unsigned char lock;
 }TDynManager;
@@ -136,6 +137,10 @@ static inline unsigned char dyn_manager_get_period(TDynManager *manager)
   return manager->period_ms;
 }
 void dyn_manager_start(TDynManager *manager);
+inline void dyn_manager_wait_stopped(TDynManager *manager)
+{
+  while(manager->running==0x01);
+}
 void dyn_manager_stop(TDynManager *manager);
 void dyn_manager_scan(TDynManager *manager);
 void dyn_manager_add_master(TDynManager *manager,TDynamixelMaster *master);
diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c
index df5a9440cf9c65dbb6d0304675b24832c9fd864e..ebf5509a09e996ea63331a7c0e8f3c1f55025e8b 100644
--- a/dynamixel_manager/src/dyn_manager.c
+++ b/dynamixel_manager/src/dyn_manager.c
@@ -330,6 +330,7 @@ unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,TScheduler *
   manager->ram_base_address=ram_base_address;
   manager->memory=memory;
   manager->running=0x00;
+  manager->stop_flag=0x00;
   
   return 0x01;
 }
@@ -356,16 +357,17 @@ void dyn_manager_start(TDynManager *manager)
 void dyn_manager_stop(TDynManager *manager)
 {
   scheduler_disable_channel(manager->scheduler,manager->sch_loop_ch);
-  manager->running=0x00;
-  manager->memory->data[manager->ram_base_address+DYN_MANAGER_CONTROL_OFFSET]&=(~DYN_MANAGER_RUNNING);
+  manager->stop_flag=0x01;
 }
 
 void dyn_manager_scan(TDynManager *manager)
 {
-  unsigned char servo_ids[DYN_MANAGER_MAX_NUM_DEVICES];
+  unsigned char servo_ids[255];
   unsigned char i,j,k,num=0;
   unsigned short int model;
 
+  dyn_manager_wait_stopped(manager);
+  HAL_Delay(1000);
   manager->present_devices=0x00000000;
   manager->num_devices=0;
   // scan all dynamixel buses
@@ -373,6 +375,8 @@ void dyn_manager_scan(TDynManager *manager)
   {
     // scan the bus
     dyn_master_scan(manager->masters[i],&num,servo_ids);
+    if(num>DYN_MANAGER_MAX_NUM_DEVICES)
+      num=DYN_MANAGER_MAX_NUM_DEVICES;
     for(j=0;j<num;j++)
     {
       // get the servo module
@@ -1191,4 +1195,10 @@ void dyn_manager_loop(TDynManager *manager)
       }
     }
   }
+  if(manager->stop_flag==0x01)
+  {
+    manager->running=0x00;
+    manager->memory->data[manager->ram_base_address+DYN_MANAGER_CONTROL_OFFSET]&=(~DYN_MANAGER_RUNNING);
+    manager->stop_flag=0x00;
+  }
 }