diff --git a/communications/include/comm_cfg.h b/communications/include/comm_cfg.h
index 454edd881749c3ab5c5fa892726b6ca083a13006..05a8a6d2aa6ba00ecdb10fb0be5a1d5079d91d72 100644
--- a/communications/include/comm_cfg.h
+++ b/communications/include/comm_cfg.h
@@ -14,7 +14,7 @@
 #endif
 
 #ifndef DYN_MASTER_DEFAULT_TIMEOUT_US
-  #define DYN_MASTER_DEFAULT_TIMEOUT_US           10000
+  #define DYN_MASTER_DEFAULT_TIMEOUT_US           2000
 #endif
 
 #ifndef SERIAL_CONSOLE_MAX_BUFFER_LEN
diff --git a/communications/include/dynamixel_master.h b/communications/include/dynamixel_master.h
index 01f3d947065aa3a7c5b8dba78c94dc049154a6a7..bce7c4a5408d2e7269e75571ce55aa00eaa4be0d 100644
--- a/communications/include/dynamixel_master.h
+++ b/communications/include/dynamixel_master.h
@@ -19,6 +19,8 @@ void dyn_master_scan(uint8_t *num,uint8_t *ids);
 uint8_t dyn_master_ping(uint8_t id);
 uint8_t dyn_master_read_byte(uint8_t id,uint16_t address,uint8_t *data);
 uint8_t dyn_master_read_word(uint8_t id,uint16_t address,uint16_t *data);
+uint8_t dyn_master_start_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data);
+uint8_t dyn_master_wait_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data);
 uint8_t dyn_master_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data);
 uint8_t dyn_master_write_byte(uint8_t id, uint16_t address, uint8_t data);
 uint8_t dyn_master_write_word(uint8_t id, uint16_t address, uint16_t data);
diff --git a/communications/src/dynamixel_master.c b/communications/src/dynamixel_master.c
index 95865d9704c57df97e4ceb7d210ddbd7b6d4469f..fa36b904ef61e63b8adb8071b5304433cdac737f 100644
--- a/communications/src/dynamixel_master.c
+++ b/communications/src/dynamixel_master.c
@@ -113,7 +113,17 @@ ISR(USART0_RX_vect)
 
 uint8_t dyn_master_wait_transmission(void)
 {
-  while(dyn_master_sent_done==0);
+  dyn_master_start_timeout();
+  while(dyn_master_sent_done==0)
+  {
+    if(dyn_master_timeout())
+    {
+      dyn_master_cancel_timeout();
+      dyn_master_sent_done=0x01;
+      return DYN_TIMEOUT;
+    }
+  }
+  dyn_master_cancel_timeout();
   
   return DYN_SUCCESS;
 }
@@ -274,7 +284,8 @@ uint8_t dyn_master_ping(uint8_t id)
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the ping packet for the desired device
   dyn_init_ping_packet(dyn_master_tx_buffer,id);
   dyn_master_rx_num_packets=0x01;
@@ -310,12 +321,56 @@ uint8_t dyn_master_read_word(uint8_t id,uint16_t address,uint16_t *data)
   return error;
 }
 
+
+uint8_t dyn_master_start_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data)
+{
+  uint8_t error;
+
+  // wait until any previous transmissions ends
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
+  // generate the read packet for the desired device
+  dyn_init_read_packet(dyn_master_tx_buffer,id,address,length);
+  dyn_master_rx_num_packets=0x01;
+  if(dyn_master_return_level==no_return || id==DYN_BROADCAST_ID)
+    dyn_master_rx_no_answer=0x01;
+  else
+    dyn_master_rx_no_answer=0x00;
+  // enable transmission
+  dyn_master_set_tx_mode();
+  // send the data
+  if((error=dyn_master_send())!=DYN_SUCCESS)
+  {
+    dyn_master_set_rx_mode();
+    return error;
+  }
+  return error;
+}
+
+uint8_t dyn_master_wait_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data)
+{
+  uint8_t error=DYN_SUCCESS;
+
+  // wait for the replay within the given timeout
+  if(dyn_master_return_level!=no_return && id!=DYN_BROADCAST_ID)
+  {
+    if((error=dyn_master_wait_reception())==DYN_SUCCESS)
+    {
+      if(dyn_get_read_status_data(dyn_master_rx_buffer,data)!=length)// not enough data
+        error=DYN_INST_ERROR;
+    }
+  }
+
+  return error;
+}
+
 uint8_t dyn_master_read_table(uint8_t id,uint16_t address,uint16_t length,uint8_t *data)
 {
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the read packet for the desired device
   dyn_init_read_packet(dyn_master_tx_buffer,id,address,length);
   dyn_master_rx_num_packets=0x01;
@@ -363,7 +418,8 @@ uint8_t dyn_master_write_table(uint8_t id, uint16_t address, uint16_t length, ui
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the write packet for the desired device
   dyn_init_write_packet(dyn_master_tx_buffer,id,address,length,data);
   dyn_master_rx_num_packets=0x01;
@@ -391,7 +447,8 @@ uint8_t dyn_master_reg_write(uint8_t id, uint16_t address, uint16_t length, uint
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the registered write packet for the desired device
   dyn_init_reg_write_packet(dyn_master_tx_buffer,id,address,length,data);
   dyn_master_rx_num_packets=0x01;
@@ -419,7 +476,8 @@ uint8_t dyn_master_action(void)
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the action packet for the desired device
   dyn_init_action_packet(dyn_master_tx_buffer);
   dyn_master_rx_num_packets=0x01;
@@ -441,7 +499,8 @@ uint8_t dyn_master_sync_write(uint8_t num,uint8_t *ids,uint16_t address, uint16_
   uint8_t error;
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the write packet for the desired device
   dyn_init_sync_write_packet(dyn_master_tx_buffer,num,ids,address,length,data);
   dyn_master_rx_num_packets=0x01;
@@ -463,7 +522,8 @@ uint8_t dyn_master_bulk_read(uint8_t num,uint8_t *ids,uint16_t *address, uint16_
   uint8_t error,i,ver1_address[255],ver1_length[255];
 
   // wait until any previous transmissions ends
-  dyn_master_wait_transmission();
+  if(dyn_master_wait_transmission()==DYN_TIMEOUT)
+    return DYN_TIMEOUT;
   // generate the read packet for the desired device
   for(i=0;i<num;i++)
   {
diff --git a/communications/src/serial_console.c b/communications/src/serial_console.c
index 9f53a7a3e2d012eb17032cfa56d80eb1e9bd22b0..af72a027b39da22565406ddc29c855ccda09e069 100644
--- a/communications/src/serial_console.c
+++ b/communications/src/serial_console.c
@@ -18,17 +18,14 @@ static FILE *device;
 /* interrupt handlers */
 SIGNAL(USART1_RX_vect)
 {
-  cli();
   serial_console_rx_buffer[serial_console_rx_write_ptr]=UDR1;
   serial_console_rx_write_ptr=(serial_console_rx_write_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN;
   if(serial_console_rx_num_data<SERIAL_CONSOLE_MAX_BUFFER_LEN)
     serial_console_rx_num_data++;
-  sei();
 }
 
 SIGNAL(USART1_TX_vect)
 {
-  cli();
   if(serial_console_tx_num_data>0)
   {
     UDR1=serial_console_tx_buffer[serial_console_tx_read_ptr];
@@ -37,7 +34,6 @@ SIGNAL(USART1_TX_vect)
   }
   else
     serial_console_sending=0x00;
-  sei();
 }
 
 /* private functions */
@@ -53,7 +49,6 @@ void serial_console_set_baudrate(uint32_t baudrate)
 int serial_console_putchar(char c,FILE *dev)
 {
 
-  cli();
   if(c=='\n')
   {
     serial_console_tx_buffer[serial_console_tx_write_ptr]='\r';
@@ -70,7 +65,6 @@ int serial_console_putchar(char c,FILE *dev)
     serial_console_tx_num_data--;
     serial_console_sending=0x01;
   }
-  sei();
 
   return 0;
 }
@@ -79,7 +73,6 @@ int serial_console_getchar(FILE *dev)
 {
   int8_t rx;
 
-  cli();
   if(serial_console_rx_num_data>0)
   {
     rx=serial_console_rx_buffer[serial_console_rx_read_ptr];
@@ -87,14 +80,10 @@ int serial_console_getchar(FILE *dev)
     serial_console_rx_num_data--;
     if(rx=='\r')
       rx='\n';
-    sei();
     return rx;
   }
   else
-  {
-    sei();
     return -1;
-  }
 }
 
 /* pubic functions */
diff --git a/controllers/include/cm510_cfg.h b/controllers/include/cm510_cfg.h
index 5154b967cffd8ede038d1c5d6c2272ad28c68a50..a6c5b79cf954c135ec2e479b26a784e77594040d 100644
--- a/controllers/include/cm510_cfg.h
+++ b/controllers/include/cm510_cfg.h
@@ -16,7 +16,7 @@
 #define DYN_MASTER_MAX_TX_BUFFER_LEN            128
 #define DYN_MASTER_MAX_RX_BUFFER_LEN            128
 #define DYN_MASTER_DEFAULT_BAUDRATE             1000000
-#define DYN_MASTER_DEFAULT_TIMEOUT_US           1000
+#define DYN_MASTER_DEFAULT_TIMEOUT_US           2000
 #define SERIAL_CONSOLE_MAX_BUFFER_LEN           128
 
 // motion configuration parameters
@@ -25,8 +25,8 @@
 #define MANAGER_MISSING_SERVOS_ALARM_TIME_ON    10
 #define MANAGER_MISSING_SERVOS_ALARM_TIME_OFF   100
 #define BALANCE_GYRO_CAL_NUM_SAMPLES            10
-#define BALANCE_GYRO_X_CHANNEL                  3
-#define BALANCE_GYRO_Y_CHANNEL                  4
+#define BALANCE_GYRO_X_CHANNEL                  4
+#define BALANCE_GYRO_Y_CHANNEL                  3
 #define BALANCE_GYRO_CAL_FAILED_ALARM_NOTE      NOTE_SOL
 #define BALANCE_GYRO_CAL_FAILED_ALARM_TIME_ON   10
 #define BALANCE_GYRO_CAL_FAILED_ALARM_TIME_OFF  100
diff --git a/controllers/src/cm510.c b/controllers/src/cm510.c
index 16612ed2edf70c225e86a7808a6e29daf7121158..881ee13fa7cb5b116e1b5e76741641940500cf4d 100755
--- a/controllers/src/cm510.c
+++ b/controllers/src/cm510.c
@@ -52,7 +52,7 @@ int16_t main(void)
   init_cm510();
   turn_led_off(LED_BAT);
   sei();
-  _delay_ms(2000);
+  _delay_ms(3000);
   /* call the user initialization function */
   dyn_master_init();
   exp_board_init(EXP_BOARD_ID);
diff --git a/dyn_devices/src/exp_board/exp_board.c b/dyn_devices/src/exp_board/exp_board.c
index 71ddd298767dd535c434e18f1d820d0db70c66a3..2d913e447ec677acba807529f676ae90dbce056e 100755
--- a/dyn_devices/src/exp_board/exp_board.c
+++ b/dyn_devices/src/exp_board/exp_board.c
@@ -41,7 +41,17 @@ uint8_t exp_board_int_data[BLOCK_LENGTH];
 
 /* private functions */
 #if EXP_BOARD_USE_LOOP==1
+void exp_board_loop_start(void)
+{
+  dyn_master_start_read_table(exp_board_id,BLOCK_START_ADDRESS,BLOCK_LENGTH,exp_board_int_data);
+}
+
+void exp_board_loop_read(void)
+{
+  dyn_master_wait_read_table(exp_board_id,BLOCK_START_ADDRESS,BLOCK_LENGTH,exp_board_int_data);
+}
 void exp_board_loop(void)
+
 {
   dyn_master_read_table(exp_board_id,BLOCK_START_ADDRESS,BLOCK_LENGTH,exp_board_int_data);
 }
diff --git a/examples/movements/Makefile b/examples/movements/Makefile
index 84f98f106644726863bcbd568b0d45bd91e566d5..71961032da5dc002276178a674d4a16ac319d479 100644
--- a/examples/movements/Makefile
+++ b/examples/movements/Makefile
@@ -2,7 +2,7 @@ PROJECT=movements
 ########################################################
 # afegir tots els fitxers que s'han de compilar aquí
 ########################################################
-SOURCES=movements.c mtn_library.c
+SOURCES=movements.c 
 
 OBJS=$(SOURCES:.c=.o)
 SRC_DIR=./
diff --git a/examples/movements/movements.c b/examples/movements/movements.c
index af81f3ffe70a7ab555e1d6437621e22fecf784b1..67ad75d6be36a02085e66d56d9cded41a25fe9c7 100644
--- a/examples/movements/movements.c
+++ b/examples/movements/movements.c
@@ -14,13 +14,14 @@ void user_init(void)
   balance_init();
   balance_calibrate_gyro();
   balance_enable_gyro();
+  user_time_set_period(100);
   mtn_lib_init();
 }
 
 typedef uint8_t (*fnct_ptr)(void);
 
-fnct_ptr fnct1=fast_walk_forward;
-//fnct_ptr fnct1=walk_forward;
+//fnct_ptr fnct1=fast_walk_forward;
+fnct_ptr fnct1=walk_forward;
 //fnct_ptr fnct1=walk_right;
 //fnct_ptr fnct1=walk_backward_turn_left;
 
@@ -31,6 +32,7 @@ fnct_ptr fnct2=turn_left;
 void user_loop(void)
 {
   static main_states state=wait_start;
+  static unsigned char i=0;
 
   switch(state)
   {
@@ -66,7 +68,14 @@ void user_loop(void)
                if(fnct1()==0x01)
                  state=wait_cmd;
                else
+               {
                  state=walk;
+//                 if(user_time_is_period_done())
+//                 {
+                   printf("%d\n",i);
+                   i++;
+//                 }
+               }
                break;
     case walk2: if(is_button_rising_edge(BTN_RIGHT))
                   mtn_lib_stop_mtn();
diff --git a/examples/movements/mtn_library.c b/examples/movements/mtn_library.c
deleted file mode 100644
index 63cb4cba312f48d827de8b82ffeedd92d687bfde..0000000000000000000000000000000000000000
--- a/examples/movements/mtn_library.c
+++ /dev/null
@@ -1,445 +0,0 @@
-#include <avr/io.h>
-#include "mtn_library.h"
-#include "action_id.h"
-#include "action.h"
-#include <stdio.h>
-
-// private variables
-typedef enum {mtn_fwd=0,mtn_bwd=1,mtn_turn_left=2,mtn_turn_right=3,mtn_left=4,mtn_right=5,mtn_fwd_turn_left=6,mtn_fwd_turn_right=7,
-              mtn_bwd_turn_left=8,mtn_bwd_turn_right=9,mtn_fwd_left=10,mtn_fwd_right=11,mtn_bwd_left=12,mtn_bwd_right=13,
-              mtn_fast_fwd=14,mtn_fast_bwd=15} mtn_t;
-typedef enum {idle,wait_start,wait_middle,wait_end} full_states;
-
-typedef struct{
-  uint8_t start_l;
-  uint8_t start_r;
-  uint8_t middle_l;
-  uint8_t middle_r;
-  uint8_t end_l;
-  uint8_t end_r;
-}TPages;
-
-uint8_t mtn_lib_stop;
-foot_t mtn_lib_start_foot;
-foot_t mtn_lib_current_foot;
-TPages mtn_pages[]={{F_S_L,F_S_R,F_M_L,F_M_R,F_E_L,F_E_R},
-                    {B_S_L,B_S_R,B_M_L,B_M_R,B_E_L,B_E_R},
-                    {LT_S_L,LT_S_R,LT_M_L,LT_M_R,LT_E_L,LT_E_R},
-                    {RT_S_L,RT_S_R,RT_M_L,RT_M_R,RT_E_L,RT_E_R},
-                    {L_S_L,L_S_R,L_M_L,L_M_R,L_E_L,L_E_R},
-                    {R_S_L,R_S_R,R_M_L,R_M_R,R_E_L,R_E_R},
-                    {FLT_S_L,FLT_S_R,FLT_M_L,FLT_M_R,FLT_E_L,FLT_E_R},
-                    {FRT_S_L,FRT_S_R,FRT_M_L,FRT_M_R,FRT_E_L,FRT_E_R},
-                    {BLT_S_L,BLT_S_R,BLT_M_L,BLT_M_R,BLT_E_L,BLT_E_R},
-                    {BRT_S_L,BRT_S_R,BRT_M_L,BRT_M_R,BRT_E_L,BRT_E_R},
-                    {FL_S_L,FL_S_R,FL_M_L,FL_M_R,FL_E_L,FL_E_R},
-                    {FR_S_L,FR_S_R,FR_M_L,FR_M_R,FR_E_L,FR_E_R},
-                    {BL_S_L,BL_S_R,BL_M_L,BL_M_R,BL_E_L,BL_E_R},
-                    {BR_S_L,BR_S_R,BR_M_L,BR_M_R,BR_E_L,BR_E_R},
-                    {fst_F_L_S,fst_F_R_S,fst_F_R_L_M,fst_F_L_R_M,fst_F_R_E,fst_F_L_E},
-                    {fst_B_L_S,fst_B_R_S,fst_B_L_M,fst_B_R_M,fst_B_L_E,fst_B_R_E}};
-
-/* private functions */
-uint8_t mtn_lib_full(TPages *pages)
-{
-  static full_states state=idle;
-  uint8_t done=0x00;
-
-  switch(state)
-  {
-    case idle: if(mtn_lib_start_foot==left_foot)
-                 action_set_page(pages->start_l);
-               else
-                 action_set_page(pages->start_r);
-               action_start_page();
-               mtn_lib_current_foot=mtn_lib_start_foot;
-               state=wait_start;
-               break;
-    case wait_start: if(is_action_running())
-                       state=wait_start;
-                     else
-                     {
-                       if(mtn_lib_stop==0x01)
-                       {
-                         if(mtn_lib_current_foot==left_foot)
-                         {
-                           action_set_page(pages->end_r);
-                           mtn_lib_current_foot=right_foot;
-                         }
-                         else
-                         {
-                           action_set_page(pages->end_l);
-                           mtn_lib_current_foot=left_foot;
-                         }
-                         action_start_page();
-                         state=wait_end;
-                       }
-                       else
-                       {
-                         if(mtn_lib_current_foot==left_foot)
-                         {
-                           action_set_page(pages->middle_r);
-                           mtn_lib_current_foot=right_foot;
-                         }
-                         else
-                         {
-                           action_set_page(pages->middle_l);
-                           mtn_lib_current_foot=left_foot;
-                         }
-                         action_start_page();
-                         state=wait_middle;
-                       }
-                     }
-                     break;
-    case wait_middle: if(is_action_running())
-                        state=wait_middle;
-                      else
-                      {
-                        if(mtn_lib_stop==0x01)
-                        {
-                          if(mtn_lib_current_foot==left_foot)
-                          {
-                            action_set_page(pages->end_r);
-                            mtn_lib_current_foot=right_foot;
-                          }
-                          else
-                          {
-                            action_set_page(pages->end_l);
-                            mtn_lib_current_foot=left_foot;
-                          }
-                          action_start_page();
-                          state=wait_end;
-                        }
-                        else
-                        {
-                          if(mtn_lib_current_foot==left_foot)
-                          {
-                            action_set_page(pages->middle_r);
-                            mtn_lib_current_foot=right_foot;
-                          }
-                          else
-                          {
-                            action_set_page(pages->middle_l);
-                            mtn_lib_current_foot=left_foot;
-                          }
-                          action_start_page();
-                          state=wait_middle;
-                        }
-                      }
-                      break;
-    case wait_end: if(is_action_running())
-                     state=wait_end;
-                   else
-                   {
-                     mtn_lib_stop=0x00;
-                     state=idle;
-                     done=0x01;
-                   }
-                   break;
-  }
-
-  return done;
-}
-
-uint8_t mtn_lib_left(TPages *pages)
-{
-  static full_states state=idle;
-  uint8_t done=0x00;
-
-  switch(state)
-  {
-    case idle: if(mtn_lib_start_foot==left_foot)
-                 action_set_page(pages->start_l);
-               else
-                 action_set_page(pages->start_r);
-               action_start_page();
-               mtn_lib_current_foot=mtn_lib_start_foot;
-               state=wait_start;
-               break;
-    case wait_start: if(is_action_running())
-                       state=wait_start;
-                     else
-                     {
-                       if(mtn_lib_current_foot==left_foot)
-                       {
-                         if(mtn_lib_stop==0x01)
-                         {
-                           action_set_page(pages->end_r);
-                           state=wait_end;
-                         }
-                         else
-                         {
-                           action_set_page(pages->middle_r);
-                           state=wait_middle;
-                         }
-                         mtn_lib_current_foot=right_foot;
-                         action_start_page();
-                       }
-                       else
-                       {
-                         action_set_page(pages->middle_l);
-                         mtn_lib_current_foot=left_foot;
-                         action_start_page();
-                         state=wait_middle;
-                       }
-                     }
-                     break;
-    case wait_middle: if(is_action_running())
-                        state=wait_middle;
-                      else
-                      {
-                        if(mtn_lib_current_foot==left_foot)
-                        {
-                          if(mtn_lib_stop==0x01)
-                          {
-                            action_set_page(pages->end_r);
-                            state=wait_end;
-                          }
-                          else
-                          {
-                            action_set_page(pages->middle_r);
-                            state=wait_middle;
-                          }
-                          mtn_lib_current_foot=right_foot;
-                          action_start_page();
-                        }
-                        else
-                        {
-                          action_set_page(pages->middle_l);
-                          mtn_lib_current_foot=left_foot;
-                          action_start_page();
-                          state=wait_middle;
-                        }
-                      }
-                      break;
-    case wait_end: if(is_action_running())
-                     state=wait_end;
-                   else
-                   {
-                     mtn_lib_stop=0x00;
-                     state=idle;
-                     done=0x01;
-                   }
-                   break;
-  }
-
-  return done;
-}
-
-uint8_t mtn_lib_right(TPages *pages)
-{
-  static full_states state=idle;
-  uint8_t done=0x00;
-
-  switch(state)
-  {
-    case idle: if(mtn_lib_start_foot==left_foot)
-                 action_set_page(pages->start_l);
-               else
-                 action_set_page(pages->start_r);
-               action_start_page();
-               mtn_lib_current_foot=mtn_lib_start_foot;
-               state=wait_start;
-               break;
-    case wait_start: if(is_action_running())
-                       state=wait_start;
-                     else
-                     {
-                       if(mtn_lib_current_foot==right_foot)
-                       {
-                         if(mtn_lib_stop==0x01)
-                         {
-                           action_set_page(pages->end_l);
-                           state=wait_end;
-                         }
-                         else
-                         {
-                           action_set_page(pages->middle_l);
-                           state=wait_middle;
-                         }
-                         mtn_lib_current_foot=left_foot;
-                         action_start_page();
-                       }
-                       else
-                       {
-                         action_set_page(pages->middle_r);
-                         mtn_lib_current_foot=right_foot;
-                         action_start_page();
-                         state=wait_middle;
-                       }
-                     }
-                     break;
-    case wait_middle: if(is_action_running())
-                        state=wait_middle;
-                      else
-                      {
-                        if(mtn_lib_current_foot==right_foot)
-                        {
-                          if(mtn_lib_stop==0x01)
-                          {
-                            action_set_page(pages->end_l);
-                            state=wait_end;
-                          }
-                          else
-                          {
-                            action_set_page(pages->middle_l);
-                            state=wait_middle;
-                          }
-                          mtn_lib_current_foot=left_foot;
-                          action_start_page();
-                        }
-                        else
-                        {
-                          action_set_page(pages->middle_r);
-                          mtn_lib_current_foot=right_foot;
-                          action_start_page();
-                          state=wait_middle;
-                        }
-                      }
-                      break;
-    case wait_end: if(is_action_running())
-                     state=wait_end;
-                   else
-                   {
-                     mtn_lib_stop=0x00;
-                     state=idle;
-                     done=0x01;
-                   }
-                   break;
-  }
-
-  return done;
-}
-
-/* public functions */
-void mtn_lib_init(void)
-{
-  mtn_lib_stop=0x00;
-  mtn_lib_start_foot=left_foot;
-  mtn_lib_current_foot=left_foot;
-}
-
-void mtn_lib_stop_mtn(void)
-{
-  mtn_lib_stop=0x01;
-}
-
-void mtn_lib_set_start_foot(foot_t foot)
-{
-  mtn_lib_start_foot=foot;
-}
-
-uint8_t walk_forward(void)
-{
-  return mtn_lib_full(&mtn_pages[mtn_fwd]);
-}
-
-uint8_t walk_backward(void)
-{
-  return mtn_lib_full(&mtn_pages[mtn_bwd]);
-}
-
-uint8_t turn_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_turn_left]);
-}
-
-uint8_t turn_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_turn_right]);
-}
-
-uint8_t walk_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_left]);
-}
-
-uint8_t walk_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_right]);
-}
-
-uint8_t walk_forward_turn_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_fwd_turn_left]);
-}
-
-uint8_t walk_forward_turn_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_fwd_turn_right]);
-}
-
-uint8_t walk_backward_turn_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_bwd_turn_left]);
-}
-
-uint8_t walk_backward_turn_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_bwd_turn_right]);
-}
-
-uint8_t walk_forward_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_fwd_left]);
-}
-
-uint8_t walk_forward_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_fwd_right]);
-}
-
-uint8_t walk_backward_left(void)
-{
-  return mtn_lib_left(&mtn_pages[mtn_bwd_left]);
-}
-
-uint8_t walk_backward_right(void)
-{
-  return mtn_lib_right(&mtn_pages[mtn_bwd_right]);
-}
-
-
-uint8_t fast_walk_forward(void)
-{
-  return mtn_lib_full(&mtn_pages[mtn_fast_fwd]);
-}
-
-uint8_t fast_walk_backward(void)
-{
-  return mtn_lib_full(&mtn_pages[mtn_fast_bwd]);
-}
-
-uint8_t fast_turn_left(void)
-{
-}
-
-uint8_t fast_turn_right(void)
-{
-}
-
-uint8_t fast_walk_left(void)
-{
-}
-
-uint8_t fast_walk_right(void)
-{
-}
-
-uint8_t fast_walk_forward_turn_left(void)
-{
-}
-
-uint8_t fast_walk_forward_turn_right(void)
-{
-}
-
-uint8_t fast_walk_backward_turn_left(void)
-{
-}
-
-uint8_t fast_walk_backward_turn_right(void)
-{
-}
-
-
diff --git a/examples/movements/mtn_library.h b/examples/movements/mtn_library.h
deleted file mode 100644
index c23f1609c6e48e5b9e88137345569a3620a7d54e..0000000000000000000000000000000000000000
--- a/examples/movements/mtn_library.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef _MTN_LIBRARY_H
-#define _MTN_LIBRARY_H
-
-typedef enum {left_foot,right_foot} foot_t;
-
-void mtn_lib_init(void);
-void mtn_lib_stop_mtn(void);
-void mtn_lib_set_start_foot(foot_t foot);
-
-uint8_t walk_forward(void);
-uint8_t walk_backward(void);
-uint8_t turn_left(void);
-uint8_t turn_right(void);
-uint8_t walk_left(void);
-uint8_t walk_right(void);
-uint8_t walk_forward_turn_left(void);
-uint8_t walk_forward_turn_right(void);
-uint8_t walk_backward_turn_left(void);
-uint8_t walk_backward_turn_right(void);
-uint8_t walk_forward_left(void);
-uint8_t walk_forward_right(void);
-uint8_t walk_backward_left(void);
-uint8_t walk_backward_right(void);
-
-uint8_t fast_walk_forward(void);
-uint8_t fast_walk_backward(void);
-uint8_t fast_turn_left(void);
-uint8_t fast_turn_right(void);
-uint8_t fast_walk_left(void);
-uint8_t fast_walk_right(void);
-uint8_t fast_walk_forward_turn_left(void);
-uint8_t fast_walk_forward_turn_right(void);
-uint8_t fast_walk_backward_turn_left(void);
-uint8_t fast_walk_backward_turn_right(void);
-
-#endif
diff --git a/examples/vision/cm510_vision.c b/examples/vision/cm510_vision.c
index 9c86ccaede8ce9d3f43b552e4cd3a008ee55b3b5..f77a0da988f81bf8808bc742ef80457b6e4c4da5 100644
--- a/examples/vision/cm510_vision.c
+++ b/examples/vision/cm510_vision.c
@@ -40,9 +40,10 @@ void user_loop(void)
                        break;
       case wait_cmd: if(serial_console_get_num_data()>0)
                      {
-                       printf("New data received\n");
+//                       printf("New data received\n");
                        cm510_scanf("%c",&cmd);
-                       switch(cmd)
+                       printf("%c",cmd);
+/*                       switch(cmd)
                        {
                          case 'l': pan_set_speed(200);
                                    pan_move_angle(-70);
@@ -56,7 +57,8 @@ void user_loop(void)
                                    break;
                          default: state=wait_cmd;
                                   break;
-                       }
+                       }*/
+                       state=wait_cmd;
                      }
                      else
                        state=wait_cmd;
diff --git a/motion/include/motion_cfg.h b/motion/include/motion_cfg.h
index 0440e64c64301544b029bb5b779867790189d5ce..a4d211884c84f21573f590a2c2cc1650812af696 100644
--- a/motion/include/motion_cfg.h
+++ b/motion/include/motion_cfg.h
@@ -48,11 +48,11 @@
 #endif
 
 #ifndef BALANCE_FORWARD_FALL_THD_VALUE
-  #define BALANCE_FORWARD_FALL_THD_VALUE          (-200)
+  #define BALANCE_FORWARD_FALL_THD_VALUE          200
 #endif
 
 #ifndef BALANCE_BACKWARD_FALL_THD_VALUE
-  #define BALANCE_BACKWARD_FALL_THD_VALUE         200
+  #define BALANCE_BACKWARD_FALL_THD_VALUE         (-200)
 #endif
 
 #ifndef BALANCE_KNEE_GAIN
diff --git a/motion/src/balance.c b/motion/src/balance.c
index dd5290656c969e42b5efdf6b78a373b6926fc2b8..cdbd6da17a197f57bdb833457176c46ff3a4c58e 100644
--- a/motion/src/balance.c
+++ b/motion/src/balance.c
@@ -35,9 +35,9 @@ void balance_loop(void)
     gyro_x=get_adc_channel(BALANCE_GYRO_X_CHANNEL)-balance_x_gyro_center;
     gyro_y=get_adc_channel(BALANCE_GYRO_Y_CHANNEL)-balance_y_gyro_center;
 
-    if(gyro_x > BALANCE_BACKWARD_FALL_THD_VALUE)
+    if(gyro_x < BALANCE_BACKWARD_FALL_THD_VALUE)
       balance_robot_fallen_state = robot_face_up;
-    else if(gyro_x < BALANCE_FORWARD_FALL_THD_VALUE)
+    else if(gyro_x > BALANCE_FORWARD_FALL_THD_VALUE)
       balance_robot_fallen_state = robot_face_down;
 
     float x_error1,x_error2,y_error1,y_error2;
diff --git a/motion/src/motion_manager.c b/motion/src/motion_manager.c
index dc3dc786209368eace9d7874b79ff223660fb169..4dbb21d47f3134367e4c6f591150ce3477587820 100644
--- a/motion/src/motion_manager.c
+++ b/motion/src/motion_manager.c
@@ -22,6 +22,8 @@ extern void balance_get_all_offsets(int16_t **offsets);
 extern void action_init(void);
 extern void action_process(void);
 extern void exp_board_loop(void);
+extern void exp_board_loop_start(void);
+extern void exp_board_loop_read(void);
 
 // private variables
 uint8_t manager_num_servos;
@@ -95,8 +97,8 @@ void manager_send_motion_command(void)
 
       if(manager_servos[i].slope == 0) 
       {
-        pdata[num*4] = 32;
-        pdata[num*4+1] = 32;
+        pdata[num*4] = 5;
+        pdata[num*4+1] = 5;
       }
       else 
       {
@@ -150,9 +152,13 @@ void manager_loop(void)
 {
   if(manager_period_done()==0x01)
   {
-    #if EXP_BOARD_USE_LOOP==1
+/*    #if EXP_BOARD_USE_LOOP==1
       if(exp_board_is_present())
         exp_board_loop(); 
+    #endif*/
+    #if EXP_BOARD_USE_LOOP==1
+      if(exp_board_is_present())
+        exp_board_loop_start(); 
     #endif
     // call the action process
     action_process(); //action_ready
@@ -160,6 +166,10 @@ void manager_loop(void)
     balance_loop();
     // update the pan&tilt angles
     pan_tilt_process();
+    #if EXP_BOARD_USE_LOOP==1
+      if(exp_board_is_present())
+        exp_board_loop_read(); 
+    #endif
     // send the motion commands to the servos
     manager_send_motion_command();
   }
@@ -205,7 +215,7 @@ uint8_t manager_init(uint8_t num_servos)
       manager_servos[id].min_value=0;
       manager_servos[id].center_value=512;
       manager_servos[id].current_value=get_current_position(id);
-      get_angle_limits(id,&manager_servos[i].cw_limit,&manager_servos[id].ccw_limit);
+      get_angle_limits(id,&manager_servos[id].cw_limit,&manager_servos[id].ccw_limit);
       manager_servos[id].module=MM_ACTION;
       manager_servos[id].slope=5;
       manager_num_servos++;
@@ -218,7 +228,7 @@ uint8_t manager_init(uint8_t num_servos)
       manager_servos[id].min_value=0;
       manager_servos[id].center_value=512;
       manager_servos[id].current_value=get_current_position(id);
-      get_angle_limits(id,&manager_servos[i].cw_limit,&manager_servos[id].ccw_limit);
+      get_angle_limits(id,&manager_servos[id].cw_limit,&manager_servos[id].ccw_limit);
       manager_servos[id].module=MM_JOINTS;
       manager_servos[id].slope=5;
       manager_num_servos++;