diff --git a/dynamixel_manager/Makefile b/dynamixel_manager/Makefile
index 020c8182f704eec57c52c1efec5a4c7590ff25d3..194e7fca6f45c5a0178292102386447f8f05e892 100755
--- a/dynamixel_manager/Makefile
+++ b/dynamixel_manager/Makefile
@@ -35,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))
diff --git a/dynamixel_manager/include/dyn_module.h b/dynamixel_manager/include/dyn_module.h
index 77c5ce1e462af9ce4fb367b943413377732c401a..979b248243012a7e660a96060d3161db98a5437b 100644
--- a/dynamixel_manager/include/dyn_module.h
+++ b/dynamixel_manager/include/dyn_module.h
@@ -26,7 +26,9 @@ typedef struct TDynModule{
   void (*pre_process)(void *module_data);
   void (*post_process)(void *module_data);
   void *data;
-  TMemModule *mem_module;
+  TMemModule mem_module;
+  unsigned short int ram_base_address;
+  unsigned short int eeprom_base_address;
 }TDynModule;
 
 //public functions
diff --git a/dynamixel_manager/include/modules/motion_manager.h b/dynamixel_manager/include/modules/motion_manager.h
index 7ebf98851692aa2f1eae350e0e8c9b33f4cb9db4..0fb76186cc463713527513de08ec4595972fe1c1 100644
--- a/dynamixel_manager/include/modules/motion_manager.h
+++ b/dynamixel_manager/include/modules/motion_manager.h
@@ -55,7 +55,7 @@ typedef struct {
   void (*balance)(short int offsets[DYN_MANAGER_MAX_NUM_DEVICES]);
 }TMotionManager;  
 
-unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory);
+unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory,unsigned short int ram_base_address,unsigned short int eeprom_base_address);
 TDynModule *mmanager_get_dyn_module(TMotionManager *mmanager);
 void mmanager_enable_balance(TMotionManager *mmanager);
 void mmanager_disable_balance(TMotionManager *mmanager);
diff --git a/dynamixel_manager/src/dyn_module.c b/dynamixel_manager/src/dyn_module.c
index 4207dee7a4b61ba1383b94fe7d4d4b9441326fe2..e63ddca2243621506df9eea07d62a18d4fe0a49d 100644
--- a/dynamixel_manager/src/dyn_module.c
+++ b/dynamixel_manager/src/dyn_module.c
@@ -17,6 +17,8 @@ unsigned char dyn_module_init(TDynModule *module)
   module->pre_process=0x00000000;
   module->post_process=0x00000000;
   module->data=0x00000000;
+  /* initialize memory module */
+  mem_module_init(&module->mem_module);
 
   return 0x01;
 }
diff --git a/dynamixel_manager/src/modules/action.c b/dynamixel_manager/src/modules/action.c
index ea816ab70fd8b5fb941a6d98c1ecd37825016141..978ff509dc9e608978659f9671ad47e39506b28b 100755
--- a/dynamixel_manager/src/modules/action.c
+++ b/dynamixel_manager/src/modules/action.c
@@ -500,7 +500,7 @@ void action_init(void)
   action_pause_time=0;// fixed point 48|16 format
   action_current_time=0;// fixed point 48|16 format
   action_section_time=0;// fixed point 48|16 format
-  action_period=(DYN_MANAGER_DEFAULT_PERIOD_US<<16)/1000000;
+  //action_period=(DYN_MANAGER_DEFAULT_PERIOD_US<<16)/1000000;
 }
 
 TMotionModule *action_get_module(void)
diff --git a/dynamixel_manager/src/modules/motion_manager.c b/dynamixel_manager/src/modules/motion_manager.c
index 9c8c7dc992e7f8098e6ab3ba4c4c4fcedf20625f..e7868622ddd49a8481a8baf9a369e79daf627f15 100644
--- a/dynamixel_manager/src/modules/motion_manager.c
+++ b/dynamixel_manager/src/modules/motion_manager.c
@@ -1,11 +1,9 @@
 #include "motion_manager.h"
+#include "motion_manager_registers.h"
 #include "motion_module.h"
 #include "dyn_devices.h"
 #include "dyn_servos.h"
 
-/* private variables */
-uint16_t mm_eeprom_data[] __attribute__ ((section (".eeprom")))={DEFAULT_ADC_PERIOD,ADC_PERIOD};
-
 /* private functions */
 void mmanager_read_cmd(void *module,unsigned short int address,unsigned short int length,unsigned char *data)
 {
@@ -235,7 +233,7 @@ void mmanager_set_period(TMotionManager *mmanager,unsigned short int period_us)
 {
   unsigned char i;
 
-  for(i=0;i<MAX_NUM_MOTION_MODULES;i++)
+  for(i=0;i<MM_MAX_NUM_MOTION_MODULES;i++)
     if(mmanager->modules[i]->set_period!=0x00000000)
       mmanager->modules[i]->set_period(mmanager->modules[i]->data,period_us*mmanager->dyn_module.period_count);
 }
@@ -244,7 +242,7 @@ void mmanager_pre_process(TMotionManager *mmanager)
 {
   unsigned char i;
 
-  for(i=0;i<MAX_NUM_MOTION_MODULES;i++)
+  for(i=0;i<MM_MAX_NUM_MOTION_MODULES;i++)
   {
     if(mmanager->modules[i]!=0x00000000 && mmanager->modules[i]->pre_process!=0x00000000)
       mmanager->modules[i]->pre_process(mmanager->modules[i]->data);
@@ -259,7 +257,7 @@ void mmanager_post_process(TMotionManager *mmanager)
 
   /* transform the current values to angles */
   mmanager_compute_angles(mmanager);
-  for(i=0;i<MAX_NUM_MOTION_MODULES;i++)
+  for(i=0;i<MM_MAX_NUM_MOTION_MODULES;i++)
   {
     if(mmanager->modules[i]!=0x00000000 && mmanager->modules[i]->post_process!=0x00000000)
       mmanager->modules[i]->post_process(mmanager->modules[i]->data);
@@ -267,7 +265,7 @@ void mmanager_post_process(TMotionManager *mmanager)
 }
 
 /* public functions */
-unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory)
+unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory,unsigned short int ram_base_address,unsigned short int eeprom_base_address)
 {
   unsigned char i;
 
@@ -300,7 +298,7 @@ unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory)
   mmanager->balance_enabled=0x00;
   mmanager->num_modules=0x00;
   /* initialize motion module base attributes */
-  for(i=0;i<MAX_NUM_MOTION_MODULES;i++)
+  for(i=0;i<MM_MAX_NUM_MOTION_MODULES;i++)
     mmanager->modules[i]=0x00000000;
   for(i=0;i<DYN_MANAGER_MAX_NUM_DEVICES;i++)
   {
@@ -330,15 +328,16 @@ unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory)
   mmanager->balance=0x00000000;
 
   /* initialize memory module */
-  mem_module_init(&manager->mem_module);
-  manager->mem_module.data=manager;
-  manager->mem_module.write_cmd=mmanager_write_cmd;
-  manager->mem_module.read_cmd=mmanager_read_cmd;
-  if(!mem_module_add_ram_segment(&manager->mem_module,RAM_MM_BASE_ADDRESS,RAM_MM_LENGTH))
+  mmanager->dyn_module.mem_module.data=mmanager;
+  mmanager->dyn_module.mem_module.write_cmd=mmanager_write_cmd;
+  mmanager->dyn_module.mem_module.read_cmd=mmanager_read_cmd;
+  if(!mem_module_add_ram_segment(&mmanager->dyn_module.mem_module,ram_base_address,RAM_MM_LENGTH))
     return 0x00;
-  if(!mem_module_add_eeprom_segment(&manager->mem_module,EEPROM_MM_BASE_ADDRESS,EEPROM_MM_LENGTH))
+  mmanager->dyn_module.ram_base_address=ram_base_address;
+  if(!mem_module_add_eeprom_segment(&mmanager->dyn_module.mem_module,eeprom_base_address,EEPROM_MM_LENGTH))
     return 0x00;
-  if(!mem_add_module(memory,&manager->mem_module))
+  mmanager->dyn_module.eeprom_base_address=eeprom_base_address;
+  if(!mem_add_module(memory,&mmanager->dyn_module.mem_module))
     return 0x00;
 
   return 0x01;