diff --git a/dynamixel_manager/Makefile b/dynamixel_manager/Makefile
index 9058279e15f2830c3a5dacd9dc8e7721fcd4e70b..4ebb37992b0d459fc28f3864365f430b99e11ee1 100755
--- a/dynamixel_manager/Makefile
+++ b/dynamixel_manager/Makefile
@@ -14,8 +14,9 @@ COMPILE_OPTS_M3 = -mfloat-abi=softfp -mcpu=cortex-m3
 COMM_PATH = ../comm
 UTILS_PATH = ../utils
 DYN_BASE_PATH = ../dynamixel_base
+MEMORY_PATH = ../memory
 
-INCLUDE_DIRS = -I./include/ -I./include/modules -I$(COMM_PATH)/include -I$(UTILS_PATH)/include -I$(DYN_BASE_PATH)/include
+INCLUDE_DIRS = -I./include/ -I./include/modules -I$(COMM_PATH)/include -I$(UTILS_PATH)/include -I$(DYN_BASE_PATH)/include -I$(MEMORY_PATH)/include
 
 TCHAIN_PREFIX=arm-none-eabi-
 
diff --git a/dynamixel_manager/include/dyn_manager.h b/dynamixel_manager/include/dyn_manager.h
index 241c7231d719a0fb3cc74d12055cfde76e7d533b..b9f03388a2dcf3461dcad06f3d654ff32a2c3adf 100644
--- a/dynamixel_manager/include/dyn_manager.h
+++ b/dynamixel_manager/include/dyn_manager.h
@@ -1,14 +1,28 @@
 #ifndef _DYN_MANAGER_H
 #define _DYN_MANAGER_H
 
+#include "dyn_manager_registers.h"
 #include "dynamixel_master.h"
-
-#define    DYN_MANAGER_MAX_NUM_MASTERS       4
-#define    DYN_MANAGER_MAX_NUM_MODULES       8
-#define    DYN_MANAGER_MAX_NUM_DEVICES       32
-#define    DYN_MANAGER_MAX_NUM_SINGLE_OP     16
-#define    DYN_MANAGER_MAX_NUM_SYNC_OP       4
-#define    DYN_MANAGER_MAX_NUM_BULK_OP       4
+#include "memory.h"
+
+#ifndef DYN_MANAGER_MAX_NUM_MASTERS
+  #define DYN_MANAGER_MAX_NUM_MASTERS        4
+#endif
+#ifndef DYN_MANAGER_MAX_NUM_MODULES
+  #define DYN_MANAGER_MAX_NUM_MODULES        8
+#endif
+#ifndef DYN_MANAGER_MAX_NUM_DEVICES
+  #define DYN_MANAGER_MAX_NUM_DEVICES        32
+#endif
+#ifndef DYN_MANAGER_MAX_NUM_SINGLE_OP
+  #define DYN_MANAGER_MAX_NUM_SINGLE_OP      16
+#endif
+#ifndef DYN_MANAGER_MAX_NUM_SYNC_OP
+  #define DYN_MANAGER_MAX_NUM_SYNC_OP        4
+#endif
+#ifndef DYN_MANAGER_MAX_NUM_BULK_OP
+  #define DYN_MANAGER_MAX_NUM_BULK_OP        4
+#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)
 
 #define    DYN_MANAGER_PERIODIC              0xFF
@@ -23,8 +37,6 @@
 #define    DYN_MANAGER_BULK                  0x40
 #define    DYN_MANAGER_NONE                  0x00
 
-#define    DYN_MANAGER_DEFAULT_PERIOD_US     7800
-
 typedef enum {single_rd_op=DYN_MANAGER_SINGLE|DYN_MANAGER_READ,
               single_wr_op=DYN_MANAGER_SINGLE|DYN_MANAGER_WRITE,
               sync_rd_op=DYN_MANAGER_SYNC|DYN_MANAGER_READ,
@@ -101,10 +113,11 @@ typedef struct{
   unsigned short int period_us;
   void (*init_timer)(void);
   void (*set_period)(unsigned short int period_us);
+  TMemModule mem_module;
 }TDynManager;
 
 // public functions
-void dyn_manager_init(TDynManager *manager);
+unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory);
 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
new file mode 100644
index 0000000000000000000000000000000000000000..7099cc7d5ce6a4292d3a7b7c2c96164bbe2e0264
--- /dev/null
+++ b/dynamixel_manager/include/dyn_manager_registers.h
@@ -0,0 +1,26 @@
+#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_NUM_MODULES               RAM_DYN_MANAGER_BASE_ADDRESS
+#define DYN_MANAGER_NUM_MASTERS               (RAM_DYN_MANAGER_BASE_ADDRESS+1)
+
+#ifndef DEFAULT_DYN_MANAGER_PERIOD
+  #define DEFAULT_DYN_MANAGER_PERIOD          0x1E78
+#endif
+
+#endif
+
diff --git a/dynamixel_manager/include/dyn_module.h b/dynamixel_manager/include/dyn_module.h
index 3da912ac704ae0d5623d954bb045585a79cee1cc..f4c6d44fad8636bfe75fb69f09f4484344900090 100644
--- a/dynamixel_manager/include/dyn_module.h
+++ b/dynamixel_manager/include/dyn_module.h
@@ -1,9 +1,12 @@
 #ifndef _DYN_MODULE_H
 #define _DYN_MODULE_H
 
-#define     MODULE_MAX_NUM_MODELS     32
+#ifndef MODULE_MAX_NUM_MODELS
+  #define MODULE_MAX_NUM_MODELS     32
+#endif
 
 #include "dyn_manager.h"
+#include "memory.h"
 
 typedef struct TDynModule{
   TDynManager *manager;
@@ -19,10 +22,11 @@ typedef struct TDynModule{
   void (*pre_process)(void *module_data);
   void (*post_process)(void *module_data);
   void *data;
+  TMemModule *mem_module;
 }TDynModule;
 
 //public functions
-void dyn_module_init(TDynModule *module);
+unsigned char dyn_module_init(TDynModule *module);
 inline void dyn_module_enable(TDynModule *module);
 inline void dyn_module_disable(TDynModule *module);
 inline unsigned char dyn_module_is_enabled(TDynModule *module);
diff --git a/dynamixel_manager/include/dyn_module_registers.h b/dynamixel_manager/include/dyn_module_registers.h
new file mode 100644
index 0000000000000000000000000000000000000000..c4c7afdf264b1289021c6f3478da61db963cfe8e
--- /dev/null
+++ b/dynamixel_manager/include/dyn_module_registers.h
@@ -0,0 +1,19 @@
+#ifndef _DYN_MODULE_REGISTERS_H
+#define _DYN_MODULE_REGISTERS_H
+
+#define RAM_DYN_MODULE_LENGTH                3
+
+#define EEPROM_DYN_MODULE_LENGTH             1
+
+#define DYN_MODULE_PERIOD                    EEPROM_DYN_MODULE_BASE_ADDRESS
+
+#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)
+
+#ifndef DEFAULT_DYN_MODULE_PERIOD
+  #define DEFAULT_DYN_MODULE_PERIOD          0x01
+#endif
+
+#endif
+
diff --git a/dynamixel_manager/include/modules/motion_manager.h b/dynamixel_manager/include/modules/motion_manager.h
index 74a12817c1752533f3b7e12ee1acca72fd900180..b5d3bbe2e32678e5d0c055bb3bd27d08c02fa9c8 100644
--- a/dynamixel_manager/include/modules/motion_manager.h
+++ b/dynamixel_manager/include/modules/motion_manager.h
@@ -3,7 +3,12 @@
 
 #include "dyn_module.h"
 
-#define MAX_NUM_MOTION_MODULES        8
+#ifndef MM_MAX_NUM_MOTION_MODULES
+  #define MM_MAX_NUM_MOTION_MODULES        8
+#endif
+#ifdef MM_MAX_NUM_MODELS
+  #define MODULE_MAX_NUM_MODELS            MM_MAX_NUM_MODELS
+#endif
 
 typedef enum {MM_NONE          = -1,
               MM_ACTION        = 0,
@@ -38,7 +43,7 @@ struct TMotionModule;
 
 typedef struct {
   TDynModule dyn_module;
-  struct TMotionModule *modules[MAX_NUM_MOTION_MODULES];
+  struct TMotionModule *modules[MM_MAX_NUM_MOTION_MODULES];
   unsigned char num_modules;
   TServoConfig servo_configs[DYN_MANAGER_MAX_NUM_DEVICES];
   TServoValues servo_values[DYN_MANAGER_MAX_NUM_DEVICES];
@@ -49,7 +54,7 @@ typedef struct {
   void (*balance)(short int offsets[DYN_MANAGER_MAX_NUM_DEVICES]);
 }TMotionManager;  
 
-void mmanager_init(TMotionManager *mmanager);
+unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory);
 TDynModule *mmanager_get_dyn_module(TMotionManager *mmanager);
 void mmanager_enable_balance(TMotionManager *mmanager);
 void mmanager_disable_balance(TMotionManager *mmanager);
diff --git a/dynamixel_manager/include/modules/motion_manager_registers.h b/dynamixel_manager/include/modules/motion_manager_registers.h
new file mode 100644
index 0000000000000000000000000000000000000000..208e6b810965e8a28d47268820f151b25498137e
--- /dev/null
+++ b/dynamixel_manager/include/modules/motion_manager_registers.h
@@ -0,0 +1,62 @@
+#ifndef _MOTION_MANAGER_REGISTERS_H
+#define _MOTION_MANAGER_REGISTERS_H
+
+#include "dyn_module_registers.h"
+
+#ifndef RAM_MM_BASE_ADDRESS
+  #define RAM_MM_BASE_ADDRESS                ((unsigned short int)0x0000)
+#endif
+
+#ifndef EEPROM_MM_BASE_ADDRESS
+  #define EEPROM_MM_BASE_ADDRESS             ((unsigned short int)0x0000)
+#endif
+
+#define RAM_MM_LENGTH                        (RAM_DYN_MODULE_LENGTH + )
+
+#define EEPROM_MM_LENGTH                     (EEPROM_DYN_MODULE_LENGTH + )
+
+#define MM_PERIOD                            DYN_MODULE_PERIOD
+
+#define MM_CNTRL                             DYN_MODULE_CNTRL
+#define MM_NUM_MODELS                        DYN_MODULE_NUM_MODELS
+#define MM_NUM_DEVICES                       DYN_MODULE_NUM_DEVICES
+
+#ifndef DEFAULT_MM_PERIOD
+  #define DEFAULT_MM_PERIOD                  DEFAULT_DYN_MODULE_PERIOD
+#endif
+#define MM_SERVO0_OFFSET                ((unsigned short int)0x0011)
+#define MM_SERVO1_OFFSET                ((unsigned short int)0x0012)
+#define MM_SERVO2_OFFSET                ((unsigned short int)0x0013)
+#define MM_SERVO3_OFFSET                ((unsigned short int)0x0014)
+#define MM_SERVO4_OFFSET                ((unsigned short int)0x0015)
+#define MM_SERVO5_OFFSET                ((unsigned short int)0x0016)
+#define MM_SERVO6_OFFSET                ((unsigned short int)0x0017)
+#define MM_SERVO7_OFFSET                ((unsigned short int)0x0018)
+#define MM_SERVO8_OFFSET                ((unsigned short int)0x0019)
+#define MM_SERVO9_OFFSET                ((unsigned short int)0x001A)
+#define MM_SERVO10_OFFSET               ((unsigned short int)0x001B)
+#define MM_SERVO11_OFFSET               ((unsigned short int)0x001C)
+#define MM_SERVO12_OFFSET               ((unsigned short int)0x001D)
+#define MM_SERVO13_OFFSET               ((unsigned short int)0x001E)
+#define MM_SERVO14_OFFSET               ((unsigned short int)0x001F)
+#define MM_SERVO15_OFFSET               ((unsigned short int)0x0020)
+#define MM_SERVO16_OFFSET               ((unsigned short int)0x0021)
+#define MM_SERVO17_OFFSET               ((unsigned short int)0x0022)
+#define MM_SERVO18_OFFSET               ((unsigned short int)0x0023)
+#define MM_SERVO19_OFFSET               ((unsigned short int)0x0024)
+#define MM_SERVO20_OFFSET               ((unsigned short int)0x0025)
+#define MM_SERVO21_OFFSET               ((unsigned short int)0x0026)
+#define MM_SERVO22_OFFSET               ((unsigned short int)0x0027)
+#define MM_SERVO23_OFFSET               ((unsigned short int)0x0028)
+#define MM_SERVO24_OFFSET               ((unsigned short int)0x0029)
+#define MM_SERVO25_OFFSET               ((unsigned short int)0x002A)
+#define MM_SERVO26_OFFSET               ((unsigned short int)0x002B)
+#define MM_SERVO27_OFFSET               ((unsigned short int)0x002C)
+#define MM_SERVO28_OFFSET               ((unsigned short int)0x002D)
+#define MM_SERVO29_OFFSET               ((unsigned short int)0x002E)
+#define MM_SERVO30_OFFSET               ((unsigned short int)0x002F)
+#define MM_SERVO31_OFFSET               ((unsigned short int)0x0030)
+
+
+#endif
+
diff --git a/dynamixel_manager/src/dyn_manager.c b/dynamixel_manager/src/dyn_manager.c
index 9a29a8cf4222aa5ddbbd932f71723710701262a5..8499d2c1a5130a45251b9d02167c47bba4e6338d 100644
--- a/dynamixel_manager/src/dyn_manager.c
+++ b/dynamixel_manager/src/dyn_manager.c
@@ -1,5 +1,6 @@
 #include "dyn_manager.h"
 #include "dyn_module.h"
+#include "ram.h"
 
 extern unsigned char dyn_master_start_read_table(TDynamixelMaster *master,unsigned char id,unsigned short int address,unsigned short int length,unsigned char *data);
 extern unsigned char dyn_master_is_read_table_done(TDynamixelMaster *master,unsigned char id,unsigned short int address,unsigned short int length,unsigned char *data);
@@ -17,6 +18,28 @@ extern unsigned char dyn_master_is_bulk_read_done(TDynamixelMaster *master,unsig
 typedef enum {start_single_ops,wait_single_ops,start_sync_ops,wait_sync_ops,start_bulk_ops,wait_bulk_ops,ops_done} dyn_manager_states_t;
 
 // private functions
+void dyn_manager_write_cmd(TDynManager *module,unsigned short int address,unsigned short int length,unsigned char *data)
+{
+  unsigned short int uint16_value;
+  unsigned char *data_ptr;
+
+  if(ram_in_window(DYN_MANAGER_PERIOD,2,address,length))
+  {
+    uint16_value=dyn_manager_get_period(module);
+    data_ptr=(unsigned char *)&uint16_value;
+    if(ram_in_range(DYN_MANAGER_PERIOD,address,length))
+      data_ptr[0]=data[DYN_MANAGER_PERIOD-address];
+    if(ram_in_range(DYN_MANAGER_PERIOD+1,address,length))
+      data_ptr[1]=data[DYN_MANAGER_PERIOD+1-address];
+    dyn_manager_set_period(module,uint16_value);
+  }
+}
+
+void dyn_manager_read_cmd(TDynManager *module,unsigned short int address,unsigned short int length,unsigned char *data)
+{
+  ram_read_table(address,length,data);
+}
+
 unsigned char dyn_manager_check_id(TDynManager *manager,unsigned char id)
 {
   if(id>=DYN_MANAGER_MAX_NUM_DEVICES)
@@ -188,7 +211,7 @@ void dyn_manager_delete_op_single_master(TDynManager *manager,unsigned char mast
 }
 
 // public functions
-void dyn_manager_init(TDynManager *manager)
+unsigned char dyn_manager_init(TDynManager *manager,TMemory *memory)
 {
   unsigned char i,j,k;
 
@@ -261,7 +284,21 @@ void dyn_manager_init(TDynManager *manager)
   /* initialize timer */
   if(manager->init_timer!=0x00000000)
     manager->init_timer();
-  dyn_manager_set_period(manager,DYN_MANAGER_DEFAULT_PERIOD_US);
+  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))
+    return 0x00;
+  if(!mem_module_add_eeprom_segment(&manager->mem_module,EEPROM_DYN_MANAGER_BASE_ADDRESS,EEPROM_DYN_MANAGER_LENGTH))
+    return 0x00;
+  if(!mem_add_module(memory,&manager->mem_module))
+    return 0x00;
+  
+  return 0x01;
 }
 
 void dyn_manager_set_period(TDynManager *manager,unsigned short int period_us)
@@ -275,6 +312,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;
   }
 }
 
@@ -329,6 +368,7 @@ void dyn_manager_add_master(TDynManager *manager,TDynamixelMaster *master)
   {
     manager->masters[i]=master;
     manager->num_masters++;
+    ram_data[DYN_MANAGER_NUM_MASTERS]++;
   }
 }
 
@@ -362,6 +402,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]++;
   }
 }
 
diff --git a/dynamixel_manager/src/dyn_module.c b/dynamixel_manager/src/dyn_module.c
index 8f2e76b2ab3f6e8d5312ca344b5b5e3e313cd017..4207dee7a4b61ba1383b94fe7d4d4b9441326fe2 100644
--- a/dynamixel_manager/src/dyn_module.c
+++ b/dynamixel_manager/src/dyn_module.c
@@ -1,6 +1,6 @@
 #include "dyn_module.h"
 
-void dyn_module_init(TDynModule *module)
+unsigned char dyn_module_init(TDynModule *module)
 {
   unsigned char i;
 
@@ -17,19 +17,21 @@ void dyn_module_init(TDynModule *module)
   module->pre_process=0x00000000;
   module->post_process=0x00000000;
   module->data=0x00000000;
+
+  return 0x01;
 }
 
-inline void dyn_module_enable(TDynModule *module)
+void dyn_module_enable(TDynModule *module)
 {
   module->enabled=0x01;
 }
 
-inline void dyn_module_disable(TDynModule *module)
+void dyn_module_disable(TDynModule *module)
 {
   module->enabled=0x00;
 }
 
-inline unsigned char dyn_module_is_enabled(TDynModule *module)
+unsigned char dyn_module_is_enabled(TDynModule *module)
 {
   return module->enabled;
 }
@@ -48,7 +50,7 @@ void dyn_module_add_model(TDynModule *module,unsigned short int model)
   }
 }
 
-inline unsigned char dyn_module_get_num_models(TDynModule *module)
+unsigned char dyn_module_get_num_models(TDynModule *module)
 {
   return module->num_models;
 }
@@ -70,7 +72,7 @@ void dyn_module_add_device(TDynModule *module,unsigned char id, unsigned short i
   }
 }
 
-inline unsigned char dyn_module_get_num_assigned_devices(TDynModule *module)
+unsigned char dyn_module_get_num_assigned_devices(TDynModule *module)
 {
   return module->num_assigned_ids;
 }
@@ -91,7 +93,7 @@ void dyn_module_set_period(TDynModule *module,unsigned char period)
     module->period_count=period;
 }
 
-inline unsigned char dyn_module_get_period(TDynModule *module)
+unsigned char dyn_module_get_period(TDynModule *module)
 {
   return module->period_count;
 }
diff --git a/dynamixel_manager/src/modules/motion_manager.c b/dynamixel_manager/src/modules/motion_manager.c
index bbcca07ee8d43db53294443c0cf49723ccad98df..9c8c7dc992e7f8098e6ab3ba4c4c4fcedf20625f 100644
--- a/dynamixel_manager/src/modules/motion_manager.c
+++ b/dynamixel_manager/src/modules/motion_manager.c
@@ -3,12 +3,27 @@
 #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)
+{
+
+}
+
+void mmanager_write_cmd(void *module,unsigned short int address,unsigned short int length,unsigned char *data)
+{
+
+}
+
+unsigned short int mmanager_angle_to_value(TMotionManager *mmanager,unsigned char servo_id,short int angle);
 inline unsigned short int mmanager_angle_to_value(TMotionManager *mmanager,unsigned char servo_id,short int angle)
 {
   return ((angle+mmanager->servo_configs[servo_id].center_angle)*mmanager->servo_configs[servo_id].encoder_resolution)/mmanager->servo_configs[servo_id].max_angle;
 }
 
+short int mmanager_value_to_angle(TMotionManager *mmanager,unsigned char servo_id,unsigned short int value);
 inline short int mmanager_value_to_angle(TMotionManager *mmanager,unsigned char servo_id,unsigned short int value)
 {
   return (((short int)((value*mmanager->servo_configs[servo_id].max_angle)/mmanager->servo_configs[servo_id].encoder_resolution))-mmanager->servo_configs[servo_id].center_angle);
@@ -43,7 +58,7 @@ void mmanager_compute_angles(TMotionManager *mmanager)
   for(i=0;i<DYN_MANAGER_MAX_NUM_DEVICES;i++)
   {
     if(mmanager->servo_values[i].enabled)// servo is enabled and present
-      mmanager->servo_values[i].current_angle=mmanager_value_to_angle(mmanager,i,mmanager->servo_values[i].current_value);
+      mmanager->servo_values[i].current_angle=(mmanager_value_to_angle(mmanager,i,mmanager->servo_values[i].current_value)<<9);
   }
 }
 
@@ -252,7 +267,7 @@ void mmanager_post_process(TMotionManager *mmanager)
 }
 
 /* public functions */
-void mmanager_init(TMotionManager *mmanager)
+unsigned char mmanager_init(TMotionManager *mmanager,TMemory *memory)
 {
   unsigned char i;
 
@@ -313,6 +328,20 @@ void mmanager_init(TMotionManager *mmanager)
   mmanager->motion_op=0x00000000;
   mmanager->feedback_op=0x00000000;
   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))
+    return 0x00;
+  if(!mem_module_add_eeprom_segment(&manager->mem_module,EEPROM_MM_BASE_ADDRESS,EEPROM_MM_LENGTH))
+    return 0x00;
+  if(!mem_add_module(memory,&manager->mem_module))
+    return 0x00;
+
+  return 0x01;
 }
 
 TDynModule *mmanager_get_dyn_module(TMotionManager *mmanager)
diff --git a/dynamixel_manager/test/Makefile b/dynamixel_manager/test/Makefile
index 0b1f534f18d1ef42c24e01ed0e18a4d5d2567416..5ebaf504ae096678463832ddd32da27cbd77bb57 100755
--- a/dynamixel_manager/test/Makefile
+++ b/dynamixel_manager/test/Makefile
@@ -2,9 +2,9 @@
 # modified by zerom for WinARM 8/2010
 
 PROJECT_NAME=dynamixel_manager_test
-TARGET_FILES=$(wildcard *.c)
-TARGET_FILES+=$(wildcard ../src/*.c)
+TARGET_FILES+=$(wildcard *.c)
 TARGET_FILES+=$(wildcard ../src/modules/*.c)
+TARGET_FILES+=$(wildcard ../src/*.c)
 TARGET_FILES+=$(wildcard ../../utils/src/*.c)
 TARGET_FILES+=$(wildcard ../../comm/src/*.c)
 BUILD_PATH=build
@@ -14,8 +14,8 @@ INCLUDE_DIRS = -I../include -I../include/modules -I../../utils/include -I../../c
 
 CC = gcc
 
-UTILS_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o))
-UTILS_OBJS = $(patsubst %,$(BUILD_PATH)/%,$(UTILS_OBJS_TMP))
+TEST_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o))
+TEST_OBJS = $(patsubst %,$(BUILD_PATH)/%,$(TEST_OBJS_TMP))
 
 OUT_FILE=$(BIN_PATH)/$(PROJECT_NAME)
 
@@ -40,8 +40,8 @@ $(BUILD_PATH)/%.o: ../../utils/src/%.c
 $(BUILD_PATH)/%.o: ../../comm/src/%.c
 	$(CC) -c -g $(INCLUDE_DIRS) -o $@ $<
 
-$(OUT_FILE): make_dirs $(UTILS_OBJS) 
-	$(CC) -g $(UTILS_OBJS) -lpthread --output $@
+$(OUT_FILE): make_dirs $(TEST_OBJS) 
+	$(CC) -g $(TEST_OBJS) -lpthread --output $@
 
 clean:
 	-rm -rf $(BUILD_PATH)