diff --git a/src/dyn_slave_diff.c b/src/dyn_slave_diff.c
index b0cee4c8ca33777b5f29b1e0b7acc729b09bed99..3fef1531645b993742b946b72c0f3115d5d14724 100644
--- a/src/dyn_slave_diff.c
+++ b/src/dyn_slave_diff.c
@@ -3,6 +3,7 @@
 #include <avr/io.h>
 #include "dyn_slave_diff.h"
 #include "mem.h"
+#include "pwm_dyn_emm.h"
 
 #ifndef DYN_SLAVE_DIFF_BUFFER_LEN
   #define DYN_SLAVE_DIFF_BUFFER_LEN          128
@@ -106,6 +107,11 @@ uint8_t dyn_slave_diff_check_id(void)
   }
 }
 
+uint8_t dyn_slave_diff_get_id(void)
+{
+  return dyn_slave_diff_data[2];
+}
+
 uint8_t dyn_slave_diff_check_checksum(void)
 {
   uint8_t i,cs=0x00;
@@ -239,8 +245,8 @@ void dyn_slave_diff_send_status(uint8_t error,uint8_t length, uint8_t *data)
        ram_data[Status_Return_Level]!=0x00) || ram_data[Status_Return_Level]==0x02) 
     dyn_slave_diff_data[0]=0xFF;
     dyn_slave_diff_data[1]=0xFF;
-    dyn_slave_diff_data[2]=dyn_slave_diff_id;
-    cs+=dyn_slave_diff_id;
+    dyn_slave_diff_data[2]=dyn_slave_diff_get_id();
+    cs+=dyn_slave_diff_get_id();
     dyn_slave_diff_data[3]=length+2;
     cs+=length+2;
     dyn_slave_diff_data[4]=error;
@@ -299,20 +305,24 @@ void dyn_slave_diff_set_baudrate(uint8_t baudrate)
 {
   UBRR0H = 0;
   UBRR0L = baudrate;
+  ram_data[Baud_Rate]=baudrate;
 }
 
 void dyn_slave_diff_set_id(uint8_t id)
 {
   dyn_slave_diff_id=id;
+  ram_data[ID]=id;
 }
 
 void dyn_slave_diff_loop(void)
 {
   static uint8_t *data,i;
+  uint8_t id;
 
   if(dyn_slave_diff_is_packet_ready())
-  {
-    if(dyn_slave_diff_check_id())
+  { 
+    id=dyn_slave_diff_get_id();
+    if(dyn_slave_diff_check_id() || pwm_dyn_check_id(id))
     {
       if(dyn_slave_diff_check_checksum())
       {
@@ -320,28 +330,55 @@ void dyn_slave_diff_loop(void)
         {
           case INST_PING: dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
                           break;
-          case INST_READ: if(do_read(dyn_slave_diff_get_address(),dyn_slave_diff_get_read_length(),&data))
-                            dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,dyn_slave_diff_get_read_length(),data);
-                          else
-                            dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+          case INST_READ: if(dyn_slave_diff_check_id())
+                          {
+                            if(do_read(dyn_slave_diff_get_address(),dyn_slave_diff_get_read_length(),&data))
+                              dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,dyn_slave_diff_get_read_length(),data);
+                            else
+                              dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+                          }
+                          if(pwm_dyn_check_id(id))
+                          {
+                            if(pwm_dyn_do_read(id,dyn_slave_diff_get_address(),dyn_slave_diff_get_read_length(),&data))
+                              dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,dyn_slave_diff_get_read_length(),data);
+                            else
+                              dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+                          }
                           break;
-          case INST_WRITE: if(do_write(dyn_slave_diff_get_address(),dyn_slave_diff_get_write_length(),dyn_slave_diff_get_write_data()))
-                             dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
-                           else 
-                             dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+          case INST_WRITE: if(dyn_slave_diff_check_id())
+                           {
+                             if(do_write(dyn_slave_diff_get_address(),dyn_slave_diff_get_write_length(),dyn_slave_diff_get_write_data()))
+                               dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
+                             else 
+                               dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+                           }
+                           if(pwm_dyn_check_id(id))
+                           {
+                             if(pwm_dyn_do_write(id,dyn_slave_diff_get_address(),dyn_slave_diff_get_write_length(),dyn_slave_diff_get_write_data()))
+                               dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
+                             else 
+                               dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
+                           }
                            break;
-          case INST_REG_WRITE: dyn_slave_diff_tmp_address=dyn_slave_diff_get_address();
-                               dyn_slave_diff_tmp_length=dyn_slave_diff_get_write_length();
-                               data=dyn_slave_diff_get_write_data();
-                               for(i=0;i<dyn_slave_diff_tmp_length;i++)
-                                 dyn_slave_diff_tmp_data[i]=data[i];
-                               dyn_slave_diff_reg_pending=0x01;
+          case INST_REG_WRITE: if(dyn_slave_diff_check_id())
+                               {
+                                 dyn_slave_diff_tmp_address=dyn_slave_diff_get_address();
+                                 dyn_slave_diff_tmp_length=dyn_slave_diff_get_write_length();
+                                 data=dyn_slave_diff_get_write_data();
+                                 for(i=0;i<dyn_slave_diff_tmp_length;i++)
+                                   dyn_slave_diff_tmp_data[i]=data[i];
+                                 dyn_slave_diff_reg_pending=0x01;
+                               }
+                               if(pwm_dyn_check_id(id))
+                                 pwm_dyn_do_reg_write(id,dyn_slave_diff_get_address(),dyn_slave_diff_get_write_length(),dyn_slave_diff_get_write_data());
                                dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
                                break;
           case INST_ACTION: if(dyn_slave_diff_reg_pending)
                             {
-                              if(do_write(dyn_slave_diff_tmp_address,dyn_slave_diff_tmp_length,dyn_slave_diff_tmp_data))
-                                dyn_slave_diff_send_status(dyn_slave_diff_error|NO_ERROR,0x00,0x00000000);
+                              if(dyn_slave_diff_check_id())
+                                do_write(dyn_slave_diff_tmp_address,dyn_slave_diff_tmp_length,dyn_slave_diff_tmp_data);
+                              if(pwm_dyn_check_id(id))
+                                pwm_dyn_do_action(id);
                             }
                             else
                               dyn_slave_diff_send_status(dyn_slave_diff_error|INSTRUCTION_ERROR,0x00,0x00000000);
@@ -368,6 +405,7 @@ void dyn_slave_diff_loop(void)
                                break;
           case INST_SYNC_WRITE: if(dyn_slave_diff_sync_write_id_present(&data))
                                   do_write(dyn_slave_diff_get_address(),dyn_slave_diff_get_read_length(),data);
+                                pwm_dyn_do_sync_write(dyn_slave_diff_data);
                                 break;
           case INST_BULK_READ: dyn_slave_diff_bulk_read_previous=dyn_slave_diff_bulk_read_id_present(&dyn_slave_diff_tmp_address,&dyn_slave_diff_tmp_length);
                                if(dyn_slave_diff_bulk_read_previous!=0xFF)