diff --git a/src/darwin_dyn_slave.c b/src/darwin_dyn_slave.c
index a35588338663274d82427391b6800f223d1c5c82..0da5b8ac11a7d6677e7acbd41fbcf91c711d0c4b 100755
--- a/src/darwin_dyn_slave.c
+++ b/src/darwin_dyn_slave.c
@@ -1,4 +1,5 @@
 #include "darwin_dyn_slave.h"
+#include "darwin_dyn_master.h"
 #include "darwin_time.h"
 #include "usart3.h"
 #include "eeprom.h"
@@ -15,6 +16,9 @@ TScheduler *darwin_dyn_slave_sch;
 /* memory module */
 TMemory *darwin_dyn_slave_memory;
 
+extern TDynamixelMaster *darwin_master;
+extern TDynamixelMaster *darwin_master2;
+
 /* eeprom data */
 dyn_slave_control_eeprom_data(example_dyn_slave,".eeprom",EEPROM_DYN_SLAVE_BASE_ADDRESS1,EEPROM_DYN_SLAVE_BASE_ADDRESS2,DARWIN_DEVICE_MODEL,DARWIN_FIRMWARE_VERSION,DARWIN_DEVICE_ID,DEFAULT_BAUDRATE,DEFAULT_RETURN_DELAY,DEFAULT_RETURN_LEVEL);
 
@@ -37,6 +41,17 @@ void darwin_on_ping(void)
 {
 }
 
+unsigned char darwin_on_relay(TDynVersion version,unsigned char *inst_pkt,unsigned char *status_pkt)
+{
+  unsigned char error;
+
+  error=dyn_master_relay(darwin_master,version,inst_pkt,status_pkt);    
+  if(error!=DYN_SUCCESS)
+    error=dyn_master_relay(darwin_master2,version,inst_pkt,status_pkt);    
+
+  return error;
+}
+
 // public functions
 uint8_t darwin_dyn_slave_init(TMemory **memory,TScheduler *scheduler)
 {
@@ -78,6 +93,7 @@ uint8_t darwin_dyn_slave_init(TMemory **memory,TScheduler *scheduler)
 
   status=dyn_slave_init(&darwin_dyn_slave,&darwin_dyn_slave_comm,scheduler,SCHED_CH1,DYN_VER2);
   darwin_dyn_slave.set_baudrate=usart3_set_baudrate;
+  darwin_dyn_slave.on_relay=darwin_on_relay;
   dyn_slave_add_device(&darwin_dyn_slave,&darwin_dyn_slave_device);
 
   return status;
diff --git a/stm32_libraries b/stm32_libraries
index c3575a6117c3a0bdac5d242d89eba6fa264c3938..188e1f8bda9d26ef613378a93087ce29d528c755 160000
--- a/stm32_libraries
+++ b/stm32_libraries
@@ -1 +1 @@
-Subproject commit c3575a6117c3a0bdac5d242d89eba6fa264c3938
+Subproject commit 188e1f8bda9d26ef613378a93087ce29d528c755