diff --git a/dynamixel_manager/include/dyn_manager.h b/dynamixel_manager/include/dyn_manager.h
index 834faa5ee09ad0cc45f76bc83cd3a8492f27e075..0b8635b9f447022158f8124ca54b6c910c9fb954 100644
--- a/dynamixel_manager/include/dyn_manager.h
+++ b/dynamixel_manager/include/dyn_manager.h
@@ -124,6 +124,7 @@ typedef struct{
   TMemModule mem_module;
   unsigned char running;
   unsigned char do_scan;
+  unsigned int present_devices;
 }TDynManager;
 
 // public functions
diff --git a/dynamixel_manager/include/dyn_manager_registers.h b/dynamixel_manager/include/dyn_manager_registers.h
index af8c3c629298e053e80e7413feb9b847f52f551c..c7e37603271f9a28d6f40e92dea1048af36cecb6 100644
--- a/dynamixel_manager/include/dyn_manager_registers.h
+++ b/dynamixel_manager/include/dyn_manager_registers.h
@@ -1,7 +1,7 @@
 #ifndef _DYN_MANAGER_REGISTERS_H
 #define _DYN_MANAGER_REGISTERS_H
 
-#define RAM_DYN_MANAGER_LENGTH                4
+#define RAM_DYN_MANAGER_LENGTH                8
 
 #define DYN_MANAGER_NUM_MODULES_OFFSET        0
 #define DYN_MANAGER_NUM_MASTERS_OFFSET        1
@@ -14,6 +14,7 @@
 #define DYN_MANAGER_SCANNING                  0x80
 
 #define DYN_MANAGER_NUM_DEVICES_OFFSET        3
+#define DYN_MANAGER_PRESENT_DEVICES           4
 
 #define EEPROM_DYN_MANAGER_LENGTH             1
 
diff --git a/dynamixel_manager/include/modules/motion_manager.h b/dynamixel_manager/include/modules/motion_manager.h
index f2ac07d48ef91af79de0a148ffb7fcffa2448877..59ef8ffd3c0529094abdf8d2fb14ce052d0a4468 100644
--- a/dynamixel_manager/include/modules/motion_manager.h
+++ b/dynamixel_manager/include/modules/motion_manager.h
@@ -13,7 +13,7 @@ extern "C" {
   #error "Please, specify the maximum number of motion modules with the MM_MAX_NUM_MOTION_MODULES macro"
 #endif
 
-typedef enum {MM_NONE          = -1,
+typedef enum {MM_NONE          = 7,
               MM_ACTION        = 0,
               MM_WALKING       = 1,
               MM_JOINTS        = 2,
@@ -48,6 +48,7 @@ typedef struct {
   TMemModule mem_module;
   unsigned short int ram_base_address;
   unsigned short int eeprom_base_address;
+  unsigned int present_servos;
 }TMotionManager;  
 
 unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory,unsigned short int ram_base_address,unsigned short int eeprom_base_address);
diff --git a/dynamixel_manager/include/modules/motion_manager_registers.h b/dynamixel_manager/include/modules/motion_manager_registers.h
index 6086f1169749c53d878a9d73787beb3c87e933c9..1d0bc4b1447149c7d54fc44965d395b2d0effda3 100644
--- a/dynamixel_manager/include/modules/motion_manager_registers.h
+++ b/dynamixel_manager/include/modules/motion_manager_registers.h
@@ -3,9 +3,10 @@
 
 #include "dyn_module_registers.h"
 
-#define RAM_MM_LENGTH                        (DYN_MANAGER_MAX_NUM_DEVICES/2)
+#define RAM_MM_LENGTH                        (4+DYN_MANAGER_MAX_NUM_DEVICES/2)
 
-#define MM_ENABLE_MODULE_OFFSET              0
+#define MM_PRESENT_SERVOS_OFFSET             0
+#define MM_ENABLE_MODULE_OFFSET              4
   #define MM_EVEN_SER_EN                     0x80
   #define MM_EVEN_SER_MOD                    0x70
   #define MM_ODD_SER_EN                      0x08
diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c
index 3eac3989c6840fc6202df469d7c15f466b4c3ef8..db25cf8667d0a5688fcf111927b2c603f67bbc22 100644
--- a/dynamixel_manager/src/dyn_manager.c
+++ b/dynamixel_manager/src/dyn_manager.c
@@ -292,6 +292,7 @@ unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,TScheduler *
     manager->op_handles[i].handle_index=i;
   }
   manager->num_ops=0x00;
+  manager->present_devices=0x00000000;
   /* initialize scheduler */
   scheduler_set_channel(scheduler,sch_channel,(void(*)(void *))dyn_manager_loop,100,manager);
   manager->scheduler=scheduler;
@@ -349,6 +350,7 @@ void dyn_manager_scan(TDynManager *manager)
   unsigned char i,j,k,num=0;
   unsigned short int model;
 
+  manager->present_devices=0x00000000;
   // scan all dynamixel buses
   for(i=0;i<manager->num_masters;i++)
   {
@@ -364,6 +366,7 @@ void dyn_manager_scan(TDynManager *manager)
         manager->devices[servo_ids[j]].model=model;
         manager->devices[servo_ids[j]].master_index=i;
         manager->num_devices++;
+        manager->present_devices|=(0x00000001<<servo_ids[j]);
         // pass the infor to each of the modules
         for(k=0;k<DYN_MANAGER_MAX_NUM_MODULES;k++)
           if(manager->modules[k]!=0x00000000)
@@ -374,6 +377,10 @@ void dyn_manager_scan(TDynManager *manager)
   }
   manager->memory->data[manager->ram_base_address+DYN_MANAGER_NUM_DEVICES_OFFSET]=manager->num_devices;
   manager->memory->data[manager->ram_base_address+DYN_MANAGER_CONTROL_OFFSET]&=(~DYN_MANAGER_SCANNING);
+  manager->memory->data[manager->ram_base_address+DYN_MANAGER_PRESENT_DEVICES]=manager->present_devices&0x000000FF;
+  manager->memory->data[manager->ram_base_address+DYN_MANAGER_PRESENT_DEVICES+1]=(manager->present_devices>>8)&0x000000FF;
+  manager->memory->data[manager->ram_base_address+DYN_MANAGER_PRESENT_DEVICES+2]=(manager->present_devices>>16)&0x000000FF;
+  manager->memory->data[manager->ram_base_address+DYN_MANAGER_PRESENT_DEVICES+3]=(manager->present_devices>>24)&0x000000FF;
   // configure the operations
   for(i=0;i<manager->num_modules;i++)
     if(manager->modules[i]->setup!=0x00000000)
diff --git a/dynamixel_manager/src/modules/motion_manager.c b/dynamixel_manager/src/modules/motion_manager.c
index a5fc87b8df43a6ef1eda1622799a1c8a01cee241..84dcad807083e1c25ab7a892f25a54fb3aba71ae 100644
--- a/dynamixel_manager/src/modules/motion_manager.c
+++ b/dynamixel_manager/src/modules/motion_manager.c
@@ -132,6 +132,11 @@ void mmanager_add_device(TMotionManager *mmanager,unsigned char id,unsigned shor
     // read the servo limits
     mmanager->servo_configs[id]->cw_angle_limit=(mmanager_value_to_angle(mmanager,id,cw_value)<<9);
     mmanager->servo_configs[id]->ccw_angle_limit=(mmanager_value_to_angle(mmanager,id,ccw_value)<<9);
+    mmanager->present_servos|=(0x00000001<<id);
+    mmanager->memory->data[mmanager->ram_base_address+MM_PRESENT_SERVOS_OFFSET]=mmanager->present_servos&0x000000FF;
+    mmanager->memory->data[mmanager->ram_base_address+MM_PRESENT_SERVOS_OFFSET+1]=(mmanager->present_servos>>8)&0x000000FF;
+    mmanager->memory->data[mmanager->ram_base_address+MM_PRESENT_SERVOS_OFFSET+2]=(mmanager->present_servos>>16)&0x000000FF;
+    mmanager->memory->data[mmanager->ram_base_address+MM_PRESENT_SERVOS_OFFSET+3]=(mmanager->present_servos>>24)&0x000000FF;
   }
 }
 
@@ -285,6 +290,7 @@ unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory,unsigned sh
   mmanager->feedback_op[0]=0x00000000;
   mmanager->feedback_op[1]=0x00000000;
   mmanager->balance=0x00000000;
+  mmanager->present_servos=0x00000000;
 
   /* initialize memory module */
   mem_module_init(&mmanager->mem_module);
@@ -300,6 +306,8 @@ unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory,unsigned sh
   if(!mem_add_module(memory,&mmanager->mem_module))
     return 0x00;
   mmanager->memory=memory;
+  for(i=0;i<DYN_MANAGER_MAX_NUM_DEVICES/2;i++)
+    mmanager->memory->data[ram_base_address+MM_ENABLE_MODULE_OFFSET+i]=0x77;
 
   return 0x01;
 }
@@ -333,13 +341,16 @@ void mmanager_enable_servo(TMotionManager *mmanager,unsigned char servo_id)
   {
     mmanager->servo_values[servo_id].enabled=0x01;
     /* add an operation to enable the servo */
-    if(mmanager->enable_op==0x00000000 || mmanager->enable_op->op_type==no_op)
+    if(mmanager->servo_configs[servo_id]!=0x00000000)
     {
-      mmanager->enable_op=dyn_manager_sync_op_new(mmanager->dyn_module.manager,DYN_MANAGER_WRITE,1,&servo_id,mmanager->servo_configs[servo_id]->registers[torque_en].address,1,&data);
-      dyn_manager_set_op_repetitions(mmanager->dyn_module.manager,mmanager->enable_op,1);
+      if(mmanager->enable_op==0x00000000 || mmanager->enable_op->op_type==no_op)
+      {
+        mmanager->enable_op=dyn_manager_sync_op_new(mmanager->dyn_module.manager,DYN_MANAGER_WRITE,1,&servo_id,mmanager->servo_configs[servo_id]->registers[torque_en].address,1,&data);
+        dyn_manager_set_op_repetitions(mmanager->dyn_module.manager,mmanager->enable_op,1);
+      }
+      else
+        dyn_manager_sync_op_add_devices(mmanager->dyn_module.manager,mmanager->enable_op,1,&servo_id,&data);
     }
-    else
-      dyn_manager_sync_op_add_devices(mmanager->dyn_module.manager,mmanager->enable_op,1,&servo_id,&data);
   }
 }
 
@@ -351,13 +362,16 @@ void mmanager_disable_servo(TMotionManager *mmanager,unsigned char servo_id)
   {
     mmanager->servo_values[servo_id].enabled=0x00;
     /* add an operation to enable the servo */
-    if(mmanager->enable_op==0x00000000 || mmanager->enable_op->op_type==no_op)
+    if(mmanager->servo_configs[servo_id]!=0x00000000)
     {
-      mmanager->enable_op=dyn_manager_sync_op_new(mmanager->dyn_module.manager,DYN_MANAGER_WRITE,1,&servo_id,mmanager->servo_configs[servo_id]->registers[torque_en].address,1,&data);
-      dyn_manager_set_op_repetitions(mmanager->dyn_module.manager,mmanager->enable_op,1);
+      if(mmanager->enable_op==0x00000000 || mmanager->enable_op->op_type==no_op)
+      {
+        mmanager->enable_op=dyn_manager_sync_op_new(mmanager->dyn_module.manager,DYN_MANAGER_WRITE,1,&servo_id,mmanager->servo_configs[servo_id]->registers[torque_en].address,1,&data);
+        dyn_manager_set_op_repetitions(mmanager->dyn_module.manager,mmanager->enable_op,1);
+      }
+      else
+        dyn_manager_sync_op_add_devices(mmanager->dyn_module.manager,mmanager->enable_op,1,&servo_id,&data);
     }
-    else
-      dyn_manager_sync_op_add_devices(mmanager->dyn_module.manager,mmanager->enable_op,1,&servo_id,&data);
   }
 }