diff --git a/dynamixel_base/include/dynamixel_slave_registers.h b/dynamixel_base/include/dynamixel_slave_registers.h
index 2a09dc5829e22af41fd05bd411e17e653d48c222..46cef2b79342753136e2514c7ce41c79383306a1 100644
--- a/dynamixel_base/include/dynamixel_slave_registers.h
+++ b/dynamixel_base/include/dynamixel_slave_registers.h
@@ -13,34 +13,14 @@
 
 #define RETURN_LEVEL                          0
 
-#ifndef DEFAULT_DEVICE_MODEL
-  #define DEFAULT_DEVICE_MODEL                0x7300
-#endif
-#ifndef DEFAULT_FIRMWARE_VERSION
-  #define DEFAULT_FIRMWARE_VERSION            0x0001
-#endif
-#ifndef DEFAULT_DEVICE_ID
-  #define DEFAULT_DEVICE_ID                   0x0001
-#endif
-#ifndef DEFAULT_BAUDRATE
-  #define DEFAULT_BAUDRATE                    0x0010
-#endif
-#ifndef DEFAULT_RETURN_DELAY
-  #define DEFAULT_RETURN_DELAY                0x0000
-#endif
-
-#ifndef DEFAULT_RETURN_LEVEL
-  #define DEFAULT_RETURN_LEVEL                0x0002
-#endif
-
-#define dyn_slave_control_eeprom_data(name,section_name,base_address1,base_address2) \
-unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_DEVICE_MODEL&0x00FF,base_address1+DEVICE_MODEL, \
-                                                                                  (DEFAULT_DEVICE_MODEL>>8)&0x00FF,base_address1+DEVICE_MODEL+1, \
-                                                                                  DEFAULT_FIRMWARE_VERSION,base_address1+FIRMWARE_VERSION, \
-                                                                                  DEFAULT_DEVICE_ID,base_address1+DEVICE_ID, \
-                                                                                  DEFAULT_BAUDRATE,base_address1+BAUDRATE, \
-                                                                                  DEFAULT_RETURN_DELAY,base_address1+RETURN_DELAY, \
-                                                                                  DEFAULT_RETURN_LEVEL,base_address2+RETURN_LEVEL};
+#define dyn_slave_control_eeprom_data(name,section_name,base_address1,base_address2,DEFAULT_DEVICE_MODEL,DEFAULT_FIRMWARE_VERSION,DEFAULT_DEVICE_ID,DEFAULT_BAUDRATE,DEFAULT_RETURN_DELAY,DEFAULT_RETURN_LEVEL) \
+unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_DEVICE_MODEL&0x00FF,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_MODEL, \
+                                                                                  (DEFAULT_DEVICE_MODEL>>8)&0x00FF,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_MODEL+1, \
+                                                                                  DEFAULT_FIRMWARE_VERSION,(DEFAULT_DEVICE_ID<<8) + base_address1+FIRMWARE_VERSION, \
+                                                                                  DEFAULT_DEVICE_ID,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_ID, \
+                                                                                  DEFAULT_BAUDRATE,(DEFAULT_DEVICE_ID<<8) + base_address1+BAUDRATE, \
+                                                                                  DEFAULT_RETURN_DELAY,(DEFAULT_DEVICE_ID<<8) + base_address1+RETURN_DELAY, \
+                                                                                  DEFAULT_RETURN_LEVEL,(DEFAULT_DEVICE_ID<<8) + base_address2+RETURN_LEVEL};
 
 
 #endif
diff --git a/dynamixel_base/src/dynamixel_slave_device.c b/dynamixel_base/src/dynamixel_slave_device.c
index de9b3f7045f9e2cd9e18de9d50ed437fbe53c755..c11eecc6446d528b375a4c9dfb659730938d5642 100644
--- a/dynamixel_base/src/dynamixel_slave_device.c
+++ b/dynamixel_base/src/dynamixel_slave_device.c
@@ -10,36 +10,36 @@ void dyn_slave_device_write_cmd(TDynamixelSlaveDevice *device,unsigned short int
   if(ram_in_window(device->eeprom_base_address1+DEVICE_MODEL,2,address,length))
   {
     if(ram_in_range(device->eeprom_base_address1+DEVICE_MODEL,address,length))
-      ram_data[device->eeprom_base_address1+DEVICE_MODEL]=data[DEVICE_MODEL-offset];
+      device->memory.data[device->eeprom_base_address1+DEVICE_MODEL]=data[DEVICE_MODEL-offset];
     if(ram_in_range(device->eeprom_base_address1+DEVICE_MODEL+1,address,length))
-      ram_data[device->eeprom_base_address1+DEVICE_MODEL+1]=data[DEVICE_MODEL+1-offset];
+      device->memory.data[device->eeprom_base_address1+DEVICE_MODEL+1]=data[DEVICE_MODEL+1-offset];
   }
   if(ram_in_range(device->eeprom_base_address1+DEVICE_ID,address,length))
   {
     dyn_slave_device_set_address(device,data[DEVICE_ID-offset]);
-    ram_data[device->eeprom_base_address1+DEVICE_ID]=data[DEVICE_ID-offset];
+    device->memory.data[device->eeprom_base_address1+DEVICE_ID]=data[DEVICE_ID-offset];
   }
   if(ram_in_range(device->eeprom_base_address1+BAUDRATE,address,length))
   {
     dyn_slave_set_baudrate(device->slave,2000000/(data[BAUDRATE-offset]+1));
-    ram_data[device->eeprom_base_address1+BAUDRATE]=data[BAUDRATE-offset];
+    device->memory.data[device->eeprom_base_address1+BAUDRATE]=data[BAUDRATE-offset];
   }
   if(ram_in_range(device->eeprom_base_address1+RETURN_DELAY,address,length))
   {
     dyn_slave_device_set_return_delay(device,data[RETURN_DELAY-offset]);
-    ram_data[device->eeprom_base_address1+RETURN_DELAY]=data[RETURN_DELAY-offset];
+    device->memory.data[device->eeprom_base_address1+RETURN_DELAY]=data[RETURN_DELAY-offset];
   }
   offset=address-device->eeprom_base_address2;
   if(ram_in_range(device->eeprom_base_address2+RETURN_LEVEL,address,length))
   {
     dyn_slave_device_set_return_level(device,data[RETURN_LEVEL-offset]);
-    ram_data[device->eeprom_base_address2+RETURN_LEVEL]=data[RETURN_LEVEL-offset];
+    device->memory.data[device->eeprom_base_address2+RETURN_LEVEL]=data[RETURN_LEVEL-offset];
   }
 }
 
-void dyn_slave_device_read_cmd(TDynamixelSlaveDevice *devicee,unsigned short int address,unsigned short int length,unsigned char *data)
+void dyn_slave_device_read_cmd(TDynamixelSlaveDevice *device,unsigned short int address,unsigned short int length,unsigned char *data)
 {
-  ram_read_table(address,length,data);
+  ram_read_table(&device->memory,address,length,data);
 }
 
 void dummy_dyn_slave_device_on_ping(void)
@@ -403,7 +403,7 @@ unsigned char dyn_slave_device_init(TDynamixelSlaveDevice *device,unsigned char
   device->bulk_read_pending=0x00;
 
   /* initialize memory module */
-  mem_init(&device->memory);
+  mem_init(&device->memory,address);
   mem_module_init(&device->mem_module);
   device->mem_module.data=device;
   device->mem_module.write_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_slave_device_write_cmd;