diff --git a/dynamixel_manager/Makefile b/dynamixel_manager/Makefile
index 4ebb37992b0d459fc28f3864365f430b99e11ee1..020c8182f704eec57c52c1efec5a4c7590ff25d3 100755
--- a/dynamixel_manager/Makefile
+++ b/dynamixel_manager/Makefile
@@ -18,6 +18,8 @@ MEMORY_PATH = ../memory
 
 INCLUDE_DIRS = -I./include/ -I./include/modules -I$(COMM_PATH)/include -I$(UTILS_PATH)/include -I$(DYN_BASE_PATH)/include -I$(MEMORY_PATH)/include
 
+MACROS = -DMAX_DYN_MASTER_TX_BUFFER_LEN=256 -DMAX_DYN_MASTER_RX_BUFFER_LEN=256 -DDYN_MANAGER_MAX_NUM_MASTERS=4 -DDYN_MANAGER_MAX_NUM_MODULES=8 -DDYN_MANAGER_MAX_NUM_DEVICES=32 -DDYN_MANAGER_MAX_NUM_SINGLE_OP=16 -DDYN_MANAGER_MAX_NUM_SYNC_OP=4 -DDYN_MANAGER_MAX_NUM_BULK_OP=4 -DMODULE_MAX_NUM_MODELS=32 -DMM_MAX_NUM_MOTION_MODULES=8
+
 TCHAIN_PREFIX=arm-none-eabi-
 
 CC = $(TCHAIN_PREFIX)gcc
@@ -33,8 +35,8 @@ DYNAMIXEL_OUT_M3 = ./lib/dynamixel_manager_m3.a
 
 SRC_DIR=./src/
 SRC=$(wildcard $(SRC_DIR)*.c)
-SRC_DIR_MODULES=./src/modules/
-SRC+=$(wildcard $(SRC_DIR_MODULES)*.c)
+#SRC_DIR_MODULES=./src/modules/
+#SRC+=$(wildcard $(SRC_DIR_MODULES)*.c)
 
 DYNAMIXEL_M4_FPU_OBJ_DIR=build/m4_fpu/
 DYNAMIXEL_M4_FPU_OBJS_TMP = $(notdir $(SRC:.c=.o))
@@ -54,21 +56,21 @@ DYNAMIXEL_M3_OBJS = $(patsubst %,$(DYNAMIXEL_M3_OBJ_DIR)%,$(DYNAMIXEL_M3_OBJS_TM
 
 all: $(DYNAMIXEL_OUT_M4_FPU) $(DYNAMIXEL_OUT_M0) $(DYNAMIXEL_OUT_M0plus) $(DYNAMIXEL_OUT_M3)
 $(DYNAMIXEL_M4_FPU_OBJ_DIR)%.o: $(SRC_DIR)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M4_FPU) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M4_FPU) -o $@ $<
 $(DYNAMIXEL_M4_FPU_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M4_FPU) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M4_FPU) -o $@ $<
 $(DYNAMIXEL_M0_OBJ_DIR)%.o: $(SRC_DIR)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0) -o $@ $<
 $(DYNAMIXEL_M0_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0) -o $@ $<
 $(DYNAMIXEL_M0plus_OBJ_DIR)%.o: $(SRC_DIR)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0plus) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0plus) -o $@ $<
 $(DYNAMIXEL_M0plus_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M0plus) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M0plus) -o $@ $<
 $(DYNAMIXEL_M3_OBJ_DIR)%.o: $(SRC_DIR)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M3) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M3) -o $@ $<
 $(DYNAMIXEL_M3_OBJ_DIR)%.o: $(SRC_DIR_MODULES)%.c
-	$(CC) -c $(CFLAGS) $(COMPILE_OPTS_M3) -o $@ $<
+	$(CC) -c $(CFLAGS) $(MACROS) $(COMPILE_OPTS_M3) -o $@ $<
 mkdir_build: 
 	mkdir -p build/m4_fpu
 	mkdir -p build/m0
diff --git a/dynamixel_manager/include/dyn_manager.h b/dynamixel_manager/include/dyn_manager.h
index b9f03388a2dcf3461dcad06f3d654ff32a2c3adf..b5c8cff1085b6254a1b1b635de67f422e1b78287 100644
--- a/dynamixel_manager/include/dyn_manager.h
+++ b/dynamixel_manager/include/dyn_manager.h
@@ -6,22 +6,22 @@
 #include "memory.h"
 
 #ifndef DYN_MANAGER_MAX_NUM_MASTERS
-  #define DYN_MANAGER_MAX_NUM_MASTERS        4
+  #error "Please, specify the maximum number of masters with the DYN_MANAGER_MAX_NUM_MASTERS macro"
 #endif
 #ifndef DYN_MANAGER_MAX_NUM_MODULES
-  #define DYN_MANAGER_MAX_NUM_MODULES        8
+  #error "Please, specify the maximum number of modules with the DYN_MANAGER_MAX_NUM_MODULES macro"
 #endif
 #ifndef DYN_MANAGER_MAX_NUM_DEVICES
-  #define DYN_MANAGER_MAX_NUM_DEVICES        32
+  #error "Please, specify the maximum number of devices with the DYN_MANAGER_MAX_NUM_DEVICES macro"
 #endif
 #ifndef DYN_MANAGER_MAX_NUM_SINGLE_OP
-  #define DYN_MANAGER_MAX_NUM_SINGLE_OP      16
+  #error "Please, specify the maximum number of single operations with the DYN_MANAGER_MAX_NUM_SINGLE_OP macro"
 #endif
 #ifndef DYN_MANAGER_MAX_NUM_SYNC_OP
-  #define DYN_MANAGER_MAX_NUM_SYNC_OP        4
+  #error "Please, specify the maximum number of sync operations with the DYN_MANAGER_MAX_NUM_SYNC_OP macro"
 #endif
 #ifndef DYN_MANAGER_MAX_NUM_BULK_OP
-  #define DYN_MANAGER_MAX_NUM_BULK_OP        4
+  #error "Please, specify the maximum number of bulk operations with the DYN_MANAGER_MAX_NUM_BULK_OP macro"
 #endif
 #define    DYN_MANAGER_MAX_NUM_OP            ((DYN_MANAGER_MAX_NUM_SINGLE_OP+DYN_MANAGER_MAX_NUM_SYNC_OP+DYN_MANAGER_MAX_NUM_BULK_OP)*DYN_MANAGER_MAX_NUM_MASTERS)
 
@@ -101,6 +101,8 @@ typedef struct{
 struct TDynModule;
 
 typedef struct{
+  unsigned short int eeprom_base_address;
+  unsigned short int ram_base_address;
   TDynamixelMaster *masters[DYN_MANAGER_MAX_NUM_MASTERS];
   TDynManagerOps operations[DYN_MANAGER_MAX_NUM_MASTERS];
   unsigned char num_masters;
@@ -113,11 +115,12 @@ typedef struct{
   unsigned short int period_us;
   void (*init_timer)(void);
   void (*set_period)(unsigned short int period_us);
+  TMemory *memory;
   TMemModule mem_module;
 }TDynManager;
 
 // public functions
-unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory);
+unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,unsigned short int eeprom_base_address,unsigned short int ram_base_address);
 void dyn_manager_set_period(TDynManager *manager,unsigned short int period_us);
 unsigned short int dyn_manager_get_period(TDynManager *manager);
 void dyn_manager_scan(TDynManager *manager);
diff --git a/dynamixel_manager/include/dyn_manager_registers.h b/dynamixel_manager/include/dyn_manager_registers.h
index 7099cc7d5ce6a4292d3a7b7c2c96164bbe2e0264..c7d360be6c57731f044ba572f5d6af9b17b51455 100644
--- a/dynamixel_manager/include/dyn_manager_registers.h
+++ b/dynamixel_manager/include/dyn_manager_registers.h
@@ -1,26 +1,18 @@
 #ifndef _DYN_MANAGER_REGISTERS_H
 #define _DYN_MANAGER_REGISTERS_H
 
-#ifndef RAM_DYN_MANAGER_BASE_ADDRESS
-  #define RAM_DYN_MANAGER_BASE_ADDRESS        ((unsigned short int)0x0000)
-#endif
-
-#ifndef EEPROM_DYN_MANAGER_BASE_ADDRESS
-  #define EEPROM_DYN_MANAGER_BASE_ADDRESS     ((unsigned short int)0x0000)
-#endif
-
 #define RAM_DYN_MANAGER_LENGTH                2
 
 #define EEPROM_DYN_MANAGER_LENGTH             2
 
-#define DYN_MANAGER_PERIOD                    EEPROM_DYN_MANAGER_BASE_ADDRESS
+#define DYN_MANAGER_PERIOD                    0
 
-#define DYN_MANAGER_NUM_MODULES               RAM_DYN_MANAGER_BASE_ADDRESS
-#define DYN_MANAGER_NUM_MASTERS               (RAM_DYN_MANAGER_BASE_ADDRESS+1)
+#define DYN_MANAGER_NUM_MODULES               0
+#define DYN_MANAGER_NUM_MASTERS               1
 
-#ifndef DEFAULT_DYN_MANAGER_PERIOD
-  #define DEFAULT_DYN_MANAGER_PERIOD          0x1E78
-#endif
+#define dyn_manager_eeprom_data(name,section_name,base_address,DEFAULT_PERIOD) \
+unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_PERIOD&0x00FF,base_address+DYN_MANAGER_PERIOD, \
+                                                                                  (DEFAULT_PERIOD>>8)&0x00FF,base_address+DYN_MANAGER_PERIOD+1};
 
 #endif
 
diff --git a/dynamixel_manager/include/dyn_module.h b/dynamixel_manager/include/dyn_module.h
index f4c6d44fad8636bfe75fb69f09f4484344900090..a79d6c6a7669d5c3a3405ac8d2546fb08e2a3ff9 100644
--- a/dynamixel_manager/include/dyn_module.h
+++ b/dynamixel_manager/include/dyn_module.h
@@ -2,7 +2,7 @@
 #define _DYN_MODULE_H
 
 #ifndef MODULE_MAX_NUM_MODELS
-  #define MODULE_MAX_NUM_MODELS     32
+  #error "Please, specify the maximum number of dynamixel master modules with the MODULE_MAX_NUM_MODELS macro"
 #endif
 
 #include "dyn_manager.h"
diff --git a/dynamixel_manager/include/dyn_module_registers.h b/dynamixel_manager/include/dyn_module_registers.h
index c4c7afdf264b1289021c6f3478da61db963cfe8e..fe27dbb309ebefbe6eb880dd716b8ce44518836e 100644
--- a/dynamixel_manager/include/dyn_module_registers.h
+++ b/dynamixel_manager/include/dyn_module_registers.h
@@ -5,15 +5,14 @@
 
 #define EEPROM_DYN_MODULE_LENGTH             1
 
-#define DYN_MODULE_PERIOD                    EEPROM_DYN_MODULE_BASE_ADDRESS
+#define DYN_MODULE_PERIOD                    0
 
-#define DYN_MODULE_CNTRL                     RAM_DYN_MODULE_BASE_ADDRESS
-#define DYN_MODULE_NUM_MODELS                (RAM_DYN_MODULE_BASE_ADDRESS+1)
-#define DYN_MODULE_NUM_DEVICES               (RAM_DYN_MODULE_BASE_ADDRESS+2)
+#define DYN_MODULE_CNTRL                     0
+#define DYN_MODULE_NUM_MODELS                1
+#define DYN_MODULE_NUM_DEVICES               2
 
-#ifndef DEFAULT_DYN_MODULE_PERIOD
-  #define DEFAULT_DYN_MODULE_PERIOD          0x01
-#endif
+#define dyn_module_eeprom_data(name,section_name,base_address,DEFAULT_PERIOD) \
+unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_PERIOD,base_address+DYN_MODULE_PERIOD};
 
 #endif
 
diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c
index 8499d2c1a5130a45251b9d02167c47bba4e6338d..73db6b175604463e9a7c863b62610ea24b11530d 100644
--- a/dynamixel_manager/src/dyn_manager.c
+++ b/dynamixel_manager/src/dyn_manager.c
@@ -37,7 +37,7 @@ void dyn_manager_write_cmd(TDynManager *module,unsigned short int address,unsign
 
 void dyn_manager_read_cmd(TDynManager *module,unsigned short int address,unsigned short int length,unsigned char *data)
 {
-  ram_read_table(address,length,data);
+  ram_read_table(module->memory,address,length,data);
 }
 
 unsigned char dyn_manager_check_id(TDynManager *manager,unsigned char id)
@@ -211,7 +211,7 @@ void dyn_manager_delete_op_single_master(TDynManager *manager,unsigned char mast
 }
 
 // public functions
-unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory)
+unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory,unsigned short int eeprom_base_address,unsigned short int ram_base_address)
 {
   unsigned char i,j,k;
 
@@ -284,19 +284,20 @@ unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory)
   /* initialize timer */
   if(manager->init_timer!=0x00000000)
     manager->init_timer();
-  manager->set_period(DEFAULT_DYN_MANAGER_PERIOD);
 
   /* initialize memory module */
   mem_module_init(&manager->mem_module);
   manager->mem_module.data=manager;
   manager->mem_module.write_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_manager_write_cmd;
   manager->mem_module.read_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_manager_read_cmd;
-  if(!mem_module_add_ram_segment(&manager->mem_module,RAM_DYN_MANAGER_BASE_ADDRESS,RAM_DYN_MANAGER_LENGTH))
+  if(!mem_module_add_ram_segment(&manager->mem_module,ram_base_address,RAM_DYN_MANAGER_LENGTH))
     return 0x00;
-  if(!mem_module_add_eeprom_segment(&manager->mem_module,EEPROM_DYN_MANAGER_BASE_ADDRESS,EEPROM_DYN_MANAGER_LENGTH))
+  if(!mem_module_add_eeprom_segment(&manager->mem_module,eeprom_base_address,EEPROM_DYN_MANAGER_LENGTH))
     return 0x00;
   if(!mem_add_module(memory,&manager->mem_module))
     return 0x00;
+  manager->eeprom_base_address=eeprom_base_address;
+  manager->ram_base_address=ram_base_address;
   
   return 0x01;
 }
@@ -312,8 +313,8 @@ void dyn_manager_set_period(TDynManager *manager,unsigned short int period_us)
       if(manager->modules[i]!=0x00000000 && manager->modules[i]->set_period!=0x00000000)
          manager->modules[i]->set_period(manager->modules[i]->data,period_us);
     manager->period_us=period_us;
-    ram_data[DYN_MANAGER_PERIOD]=period_us%256;
-    ram_data[DYN_MANAGER_PERIOD+1]=period_us/256;
+    manager->memory->data[DYN_MANAGER_PERIOD]=period_us%256;
+    manager->memory->data[DYN_MANAGER_PERIOD+1]=period_us/256;
   }
 }
 
@@ -368,7 +369,7 @@ void dyn_manager_add_master(TDynManager *manager,TDynamixelMaster *master)
   {
     manager->masters[i]=master;
     manager->num_masters++;
-    ram_data[DYN_MANAGER_NUM_MASTERS]++;
+    manager->memory->data[DYN_MANAGER_NUM_MASTERS]++;
   }
 }
 
@@ -402,7 +403,7 @@ void dyn_manager_add_module(TDynManager *manager,TDynModule *module)
     manager->modules[i]=module;
     manager->num_modules++;
     module->manager=manager;
-    ram_data[DYN_MANAGER_NUM_MODULES]++;
+    manager->memory->data[DYN_MANAGER_NUM_MODULES]++;
   }
 }