diff --git a/include/darwin_registers.h b/include/darwin_registers.h
index f12214f4e8c70e09beed55a23c557b3bfa42679a..04c66580089c71f7c0703ab1c12397b638095eb1 100644
--- a/include/darwin_registers.h
+++ b/include/darwin_registers.h
@@ -95,16 +95,22 @@ extern "C" {
 #define STAIRS_PHASE7_TIME              ((unsigned short int)0x0072)
 #define STAIRS_PHASE8_TIME              ((unsigned short int)0x0074)
 #define STAIRS_PHASE9_TIME              ((unsigned short int)0x0076)
-#define STAIRS_PHASE10_TIME             ((unsigned short int)0x0078)
-#define STAIRS_X_OFFSET                 ((unsigned short int)0x007A)
-#define STAIRS_Y_OFFSET                 ((unsigned short int)0x007B)
-#define STAIRS_Z_OFFSET                 ((unsigned short int)0x007C)
-#define STAIRS_Y_SHIFT                  ((unsigned short int)0x007D)
-#define STAIRS_X_LEFT_SHIFT             ((unsigned short int)0x007E)
-#define STAIRS_X_RIGHT_SHIFT            ((unsigned short int)0x007F)
+#define STAIRS_X_OFFSET                 ((unsigned short int)0x0078)
+#define STAIRS_Y_OFFSET                 ((unsigned short int)0x0079)
+#define STAIRS_Z_OFFSET                 ((unsigned short int)0x007A)
+#define STAIRS_R_OFFSET                 ((unsigned short int)0x007B)
+#define STAIRS_P_OFFSET                 ((unsigned short int)0x007C)
+#define STAIRS_A_OFFSET                 ((unsigned short int)0x007D)
+#define STAIRS_Y_SHIFT                  ((unsigned short int)0x007E)
+#define STAIRS_X_SHIFT                  ((unsigned short int)0x007F)
 #define STAIRS_Z_OVERSHOOT              ((unsigned short int)0x0080)
 #define STAIRS_Z_HEIGHT                 ((unsigned short int)0x0081)
 #define STAIRS_HIP_PITCH_OFF            ((unsigned short int)0x0082)
+#define STAIRS_R_SHIFT                  ((unsigned short int)0x0084)
+#define STAIRS_P_SHIFT                  ((unsigned short int)0x0085)
+#define STAIRS_A_SHIFT                  ((unsigned short int)0x0086)
+#define STAIRS_Y_SPREAD                 ((unsigned short int)0x0087)
+#define STAIRS_X_SHIFT_BODY             ((unsigned short int)0x0088)
 
 #define LAST_EEPROM_OFFSET              ((unsigned short int)0x00FF)
 
@@ -229,18 +235,23 @@ typedef enum {
   DARWIN_STAIRS_PHASE8_TIME_H          = STAIRS_PHASE8_TIME+1,
   DARWIN_STAIRS_PHASE9_TIME_L          = STAIRS_PHASE9_TIME,
   DARWIN_STAIRS_PHASE9_TIME_H          = STAIRS_PHASE9_TIME+1,
-  DARWIN_STAIRS_PHASE10_TIME_L         = STAIRS_PHASE10_TIME,
-  DARWIN_STAIRS_PHASE10_TIME_H         = STAIRS_PHASE10_TIME+1,
   DARWIN_STAIRS_X_OFFSET               = STAIRS_X_OFFSET, 
   DARWIN_STAIRS_Y_OFFSET               = STAIRS_Y_OFFSET,
   DARWIN_STAIRS_Z_OFFSET               = STAIRS_Z_OFFSET,
   DARWIN_STAIRS_Y_SHIFT                = STAIRS_Y_SHIFT,
-  DARWIN_STAIRS_X_LEFT_SHIFT           = STAIRS_X_LEFT_SHIFT,
-  DARWIN_STAIRS_X_RIGHT_SHIFT          = STAIRS_X_RIGHT_SHIFT,
+  DARWIN_STAIRS_R_OFFSET               = STAIRS_R_OFFSET, 
+  DARWIN_STAIRS_P_OFFSET               = STAIRS_P_OFFSET,
+  DARWIN_STAIRS_A_OFFSET               = STAIRS_A_OFFSET,
+  DARWIN_STAIRS_X_SHIFT                = STAIRS_X_SHIFT,
   DARWIN_STAIRS_Z_OVERSHOOT            = STAIRS_Z_OVERSHOOT,
   DARWIN_STAIRS_Z_HEIGHT               = STAIRS_Z_HEIGHT,
   DARWIN_STAIRS_HIP_PITCH_OFF_L        = STAIRS_HIP_PITCH_OFF,
   DARWIN_STAIRS_HIP_PITCH_OFF_H        = STAIRS_HIP_PITCH_OFF+1,
+  DARWIN_STAIRS_R_SHIFT                = STAIRS_R_SHIFT,
+  DARWIN_STAIRS_P_SHIFT                = STAIRS_P_SHIFT,
+  DARWIN_STAIRS_A_SHIFT                = STAIRS_A_SHIFT,
+  DARWIN_STAIRS_Y_SPREAD               = STAIRS_Y_SPREAD,
+  DARWIN_STAIRS_X_SHIFT_BODY           = STAIRS_X_SHIFT_BODY,
 
 //RAM  
   DARWIN_TX_LED_CNTRL              = 0x0100, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2  | bit 1 |      bit 0
diff --git a/include/eeprom.h b/include/eeprom.h
index c9c2f12b9cfe1aaa78eb37210b05ffa6c46138e5..5d227885a7c436bf53c08f10f51c986163b46e31 100755
--- a/include/eeprom.h
+++ b/include/eeprom.h
@@ -83,7 +83,7 @@ extern "C" {
 #define PAGE_FULL             ((uint8_t)0x80)
 
 /* Variables' number */
-#define NB_OF_VAR             ((uint8_t)0x83)
+#define NB_OF_VAR             ((uint8_t)0x89)
 
 /* Exported types ------------------------------------------------------------*/
 /* Exported macro ------------------------------------------------------------*/
diff --git a/include/eeprom_init.h b/include/eeprom_init.h
index db1405a0269f0ccfe69559dc03fdbc55b292a19c..adf5729ca02dd901198f2d02467b89fbaadf2d29 100644
--- a/include/eeprom_init.h
+++ b/include/eeprom_init.h
@@ -84,27 +84,33 @@ extern "C" {
 #define    DEFAULT_GRIPPER_RIGHT_MIN_ANGLE      0xF100 // -30 in fixed point format 9|7
 #define    DEFAULT_GRIPPER_RIGHT_MAX_FORCE      0x0080 // 1023 max force in binary format
 #define    DEFAULT_SMART_CHARGER_PERIOD         0x05DC // 1500 ms 
-#define    DEFAULT_STAIRS_PHASE1_TIME           0x0640 // 100 ms 
-#define    DEFAULT_STAIRS_PHASE2_TIME           0x0C80 // 200 ms   
-#define    DEFAULT_STAIRS_PHASE3_TIME           0x12C0 // 300 ms
-#define    DEFAULT_STAIRS_PHASE4_TIME           0x1900 // 400 ms
-#define    DEFAULT_STAIRS_PHASE5_TIME           0x1F40 // 500 ms
-#define    DEFAULT_STAIRS_PHASE6_TIME           0x2580 // 600 ms
-#define    DEFAULT_STAIRS_PHASE7_TIME           0x2BC0 // 700 ms
-#define    DEFAULT_STAIRS_PHASE8_TIME           0x3200 // 800 ms
-#define    DEFAULT_STAIRS_PHASE9_TIME           0x3840 // 900 ms
-#define    DEFAULT_STAIRS_PHASE10_TIME          0x3E80 // 1000 ms
+#define    DEFAULT_STAIRS_PHASE1_TIME           0x0640 // 1600 ms 
+#define    DEFAULT_STAIRS_PHASE2_TIME           0x0C80 // 3200 ms   
+#define    DEFAULT_STAIRS_PHASE3_TIME           0x12C0 // 4800 ms
+#define    DEFAULT_STAIRS_PHASE4_TIME           0x1900 // 6400 ms
+#define    DEFAULT_STAIRS_PHASE5_TIME           0x1F40 // 8000 ms
+#define    DEFAULT_STAIRS_PHASE6_TIME           0x2580 // 9600 ms
+#define    DEFAULT_STAIRS_PHASE7_TIME           0x2BC0 // 11200 ms
+#define    DEFAULT_STAIRS_PHASE8_TIME           0x3200 // 12800 ms
+#define    DEFAULT_STAIRS_PHASE9_TIME           0x3840 // 14400 ms
 #define    DEFAULT_STAIRS_X_OFFSET              0xFFF6 // -10 mm
 #define    DEFAULT_STAIRS_Y_OFFSET              0x0005 // 5mm
 #define    DEFAULT_STAIRS_Z_OFFSET              0x0014 // 20 mm
+#define    DEFAULT_STAIRS_R_OFFSET              0x0000 // 0 degrees in fixed point format 5 (1+4) | 3
+#define    DEFAULT_STAIRS_P_OFFSET              0x0000 // 0 degrees in fixed point format 5 (1+4) | 3
+#define    DEFAULT_STAIRS_A_OFFSET              0x0000 // 0 degrees in fixed point format 5 (1+4) | 3
 #define    DEFAULT_STAIRS_Y_SHIFT               0x0028 // 40 mm
-#define    DEFAULT_STAIRS_X_LEFT_SHIFT          0x0000 // 0 mm
-#define    DEFAULT_STAIRS_X_RIGHT_SHIFT         0x0050 // 80 mm
+#define    DEFAULT_STAIRS_X_SHIFT               0x0050 // 80 mm
 #define    DEFAULT_STAIRS_Z_OVERSHOOT           0x000F // 15 mm
 #define    DEFAULT_STAIRS_Z_HEIGHT              0x001E // 30 mm
 #define    DEFAULT_STAIRS_HIP_PITCH_OFF         0x34B6 // 13.18 degrees in fixed point format 6 (1+5) | 10
+#define    DEFAULT_STAIRS_R_SHIFT               0x0017 // 2.875 degrees in fixed point format 5 (1+4) | 3
+#define    DEFAULT_STAIRS_P_SHIFT               0x002E // 5.73 degrees in fixed point format 5 (1+4) | 3
+#define    DEFAULT_STAIRS_A_SHIFT               0x0045 // 17.19 degrees in fixed point format 6 (1+5) | 2
+#define    DEFAULT_STAIRS_Y_SPREAD              0x0014 // 20 mm
+#define    DEFAULT_STAIRS_X_SHIFT_BODY          0x0023 // 35 mm
 
-#define    EEPROM_SIZE                          131
+#define    EEPROM_SIZE                          137
 
 #ifdef __cplusplus
 }
diff --git a/src/eeprom.c b/src/eeprom.c
index 142ad7aa3f6ec9889424983cd563886eebd6beba..ad139dfcc25f9e27676bf89379891995bb91f38a 100755
--- a/src/eeprom.c
+++ b/src/eeprom.c
@@ -175,17 +175,23 @@ uint16_t eeprom_data[] __attribute__ ((section (".eeprom")))={VALID_PAGE,
                                                               DEFAULT_STAIRS_PHASE8_TIME>>8,             STAIRS_PHASE8_TIME+1,
                                                               DEFAULT_STAIRS_PHASE9_TIME&0xFF,           STAIRS_PHASE9_TIME,
                                                               DEFAULT_STAIRS_PHASE9_TIME>>8,             STAIRS_PHASE9_TIME+1,
-                                                              DEFAULT_STAIRS_PHASE10_TIME&0xFF,          STAIRS_PHASE10_TIME,
-                                                              DEFAULT_STAIRS_PHASE10_TIME>>8,            STAIRS_PHASE10_TIME+1,
                                                               DEFAULT_STAIRS_X_OFFSET,                   STAIRS_X_OFFSET,
                                                               DEFAULT_STAIRS_Y_OFFSET,                   STAIRS_Y_OFFSET,
                                                               DEFAULT_STAIRS_Z_OFFSET,                   STAIRS_Z_OFFSET,
+                                                              DEFAULT_STAIRS_R_OFFSET,                   STAIRS_R_OFFSET,
+                                                              DEFAULT_STAIRS_P_OFFSET,                   STAIRS_P_OFFSET,
+                                                              DEFAULT_STAIRS_A_OFFSET,                   STAIRS_A_OFFSET,
                                                               DEFAULT_STAIRS_Y_SHIFT,                    STAIRS_Y_SHIFT,
-                                                              DEFAULT_STAIRS_X_LEFT_SHIFT,               STAIRS_X_LEFT_SHIFT,
-                                                              DEFAULT_STAIRS_X_RIGHT_SHIFT,              STAIRS_X_RIGHT_SHIFT,
+                                                              DEFAULT_STAIRS_X_SHIFT,                    STAIRS_X_SHIFT,
                                                               DEFAULT_STAIRS_Z_OVERSHOOT,                STAIRS_Z_OVERSHOOT, 
                                                               DEFAULT_STAIRS_Z_HEIGHT,                   STAIRS_Z_HEIGHT,
-                                                              DEFAULT_STAIRS_HIP_PITCH_OFF,              STAIRS_HIP_PITCH_OFF};
+                                                              DEFAULT_STAIRS_HIP_PITCH_OFF&0xFF,         STAIRS_HIP_PITCH_OFF,
+                                                              DEFAULT_STAIRS_HIP_PITCH_OFF>>8,           STAIRS_HIP_PITCH_OFF+1,
+                                                              DEFAULT_STAIRS_R_SHIFT,                    STAIRS_R_SHIFT,
+                                                              DEFAULT_STAIRS_P_SHIFT,                    STAIRS_P_SHIFT,
+                                                              DEFAULT_STAIRS_A_SHIFT,                    STAIRS_A_SHIFT,
+                                                              DEFAULT_STAIRS_Y_SPREAD,                   STAIRS_Y_SPREAD,
+                                                              DEFAULT_STAIRS_X_SHIFT_BODY,               STAIRS_X_SHIFT_BODY};
 
 /* Private function prototypes -----------------------------------------------*/
 /* Private functions ---------------------------------------------------------*/
diff --git a/src/stairs.c b/src/stairs.c
index 5cefc8e0b9daf44f49ba4807216e0ffed2d7db49..dd9668fcd5557b43ade6b0f2085400dbb41aa1da 100755
--- a/src/stairs.c
+++ b/src/stairs.c
@@ -5,20 +5,27 @@
 #include <stdio.h>
 #include <math.h>
 
-typedef enum {SHIFT_WEIGHT_LEFT=0x10,RISE_RIGHT_FOOT=0x20,ADVANCE_RIGHT_FOOT=0x30,CONTACT_RIGHT_FOOT=0x40,SHIFT_WEIGHT_RIGHT=0x50,RISE_LEFT_FOOT=0x60,ADVANCE_LEFT_FOOT=0x70,CONTACT_LEFT_FOOT=0x80,CENTER_WEIGHT=0x90,STAND_UP=0xA0} stairs_phase_t;
+typedef enum {SHIFT_WEIGHT_LEFT=0x10,RISE_RIGHT_FOOT=0x20,ADVANCE_RIGHT_FOOT=0x30,CONTACT_RIGHT_FOOT=0x40,SHIFT_WEIGHT_RIGHT=0x50,RISE_LEFT_FOOT=0x60,ADVANCE_LEFT_FOOT=0x70,CONTACT_LEFT_FOOT=0x80,CENTER_WEIGHT=0x90} stairs_phase_t;
 
 // internal motion variables
 float stairs_Z_stair_height;
 float stairs_Z_overshoot;
 float stairs_Y_shift_amplitude;
-float stairs_X_left_shift_amplitude;
-float stairs_X_right_shift_amplitude;
+float stairs_X_shift_amplitude;
+float stairs_R_shift_amplitude;
+float stairs_P_shift_amplitude;
+float stairs_A_shift_amplitude;
+float stairs_Y_spread_amplitude;
+float stairs_X_shift_body;
 
 // internal offset variables
 float stairs_Hip_Pitch_Offset;
 float stairs_X_Offset;
 float stairs_Y_Offset;
 float stairs_Z_Offset;
+float stairs_R_Offset;
+float stairs_P_Offset;
+float stairs_A_Offset;
 
 // internal time variables
 float stairs_Time;
@@ -32,7 +39,6 @@ float stairs_rise_left_foot_time;
 float stairs_advance_left_foot_time;
 float stairs_contact_left_foot_time;
 float stairs_center_weight_time;
-float stairs_walk_ready_time;
 
 // control variables
 uint8_t stairs_Ctrl_Running;
@@ -73,16 +79,22 @@ void stairs_start(void)
   stairs_advance_left_foot_time=((float)ram_data[DARWIN_STAIRS_PHASE7_TIME_L]+(ram_data[DARWIN_STAIRS_PHASE7_TIME_H]<<8));
   stairs_contact_left_foot_time=((float)ram_data[DARWIN_STAIRS_PHASE8_TIME_L]+(ram_data[DARWIN_STAIRS_PHASE8_TIME_H]<<8));
   stairs_center_weight_time=((float)ram_data[DARWIN_STAIRS_PHASE9_TIME_L]+(ram_data[DARWIN_STAIRS_PHASE9_TIME_H]<<8));
-  stairs_walk_ready_time=((float)ram_data[DARWIN_STAIRS_PHASE10_TIME_L]+(ram_data[DARWIN_STAIRS_PHASE10_TIME_H]<<8));
-  stairs_Z_stair_height=((float)ram_data[DARWIN_STAIRS_Z_HEIGHT]);
-  stairs_Z_overshoot=((float)ram_data[DARWIN_STAIRS_Z_OVERSHOOT]);
-  stairs_Y_shift_amplitude=((float)ram_data[DARWIN_STAIRS_Y_SHIFT]);
-  stairs_X_left_shift_amplitude=((float)ram_data[DARWIN_STAIRS_X_LEFT_SHIFT]);
-  stairs_X_right_shift_amplitude=((float)ram_data[DARWIN_STAIRS_X_RIGHT_SHIFT]);
+  stairs_Z_stair_height=((float)((int8_t)ram_data[DARWIN_STAIRS_Z_HEIGHT]));
+  stairs_Z_overshoot=((float)((int8_t)ram_data[DARWIN_STAIRS_Z_OVERSHOOT]));
+  stairs_Y_shift_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_Y_SHIFT]));
+  stairs_X_shift_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_X_SHIFT]));
   stairs_Hip_Pitch_Offset=((float)((int16_t)(ram_data[DARWIN_WALK_HIP_PITCH_OFF_L]+(ram_data[DARWIN_WALK_HIP_PITCH_OFF_H]<<8))))/1024.0;
+  stairs_R_shift_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_R_SHIFT]))*PI/1440.0;// (r_shift/8)*(pi/180)
+  stairs_P_shift_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_P_SHIFT]))*PI/1440.0;// (p_shift/8)*(pi/180)
+  stairs_A_shift_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_A_SHIFT]))*PI/720.0;// (a_shift/4)*(pi/180)
+  stairs_Y_spread_amplitude=((float)((int8_t)ram_data[DARWIN_STAIRS_Y_SPREAD]));
+  stairs_X_shift_body=((float)((int8_t)ram_data[DARWIN_STAIRS_X_SHIFT_BODY]));
   stairs_X_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_X_OFFSET]));
   stairs_Y_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_Y_OFFSET]));
   stairs_Z_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_Z_OFFSET]));
+  stairs_R_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_X_OFFSET]))*PI/1440.0;
+  stairs_P_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_Y_OFFSET]))*PI/1440.0;
+  stairs_A_Offset=((float)((int8_t)ram_data[DARWIN_STAIRS_Z_OFFSET]))*PI/1440.0;
   // start operation
   ram_data[DARWIN_STAIRS_CNTRL]|=STAIRS_STATUS;
   stairs_Ctrl_Running=0x01;
@@ -105,6 +117,7 @@ uint8_t is_climbing_stairs(void)
 void stairs_process(void)
 {
   float angle[14]={0},ep[12]={0};
+  float delta;
 
   if(ram_data[DARWIN_STAIRS_CNTRL]&STAIRS_STATUS)
   {
@@ -112,156 +125,165 @@ void stairs_process(void)
     if(stairs_Time>=0 && stairs_Time<=stairs_shift_weight_left_time)
     {
       //1
+      delta=stairs_Time/stairs_shift_weight_left_time;
       ep[0]=stairs_X_Offset;
-      ep[1]=stairs_Y_Offset/2.0+(stairs_Y_shift_amplitude/stairs_shift_weight_left_time)*stairs_Time;
+      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude*delta;
       ep[2]=stairs_Z_Offset;
+      ep[3]=stairs_R_Offset;
+      ep[4]=stairs_P_Offset;
+      ep[5]=stairs_A_Offset;
       ep[6]=stairs_X_Offset;
-      ep[7]=stairs_Y_Offset/2.0+(stairs_Y_shift_amplitude/stairs_shift_weight_left_time)*stairs_Time;
+      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude*delta;
       ep[8]=stairs_Z_Offset;
+      ep[9]=stairs_R_Offset;
+      ep[10]=stairs_P_Offset;
+      ep[11]=stairs_A_Offset;
       ram_data[DARWIN_STAIRS_CNTRL]|=SHIFT_WEIGHT_LEFT;
     }
     else if(stairs_Time>stairs_shift_weight_left_time && stairs_Time<=stairs_rise_right_foot_time)
     {
       //2
+      delta=(stairs_Time-stairs_shift_weight_left_time)/(stairs_rise_right_foot_time-stairs_shift_weight_left_time);
       ep[0]=stairs_X_Offset;
       ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude;
       ep[2]=stairs_Z_Offset;
-      ep[3]=-0.05/(stairs_rise_right_foot_time-stairs_shift_weight_left_time)*(stairs_Time-stairs_shift_weight_left_time);
+      ep[3]=stairs_R_Offset-stairs_R_shift_amplitude*delta;
+      ep[4]=stairs_P_Offset;
+      ep[5]=stairs_A_Offset;
       ep[6]=stairs_X_Offset;
       ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude;
-      ep[8]=stairs_Z_Offset+(stairs_Z_overshoot+stairs_Z_stair_height)/(stairs_rise_right_foot_time-stairs_shift_weight_left_time)*(stairs_Time-stairs_shift_weight_left_time);
-      ep[9]=-0.05/(stairs_rise_right_foot_time-stairs_shift_weight_left_time)*(stairs_Time-stairs_shift_weight_left_time);
+      ep[8]=stairs_Z_Offset+(stairs_Z_overshoot+stairs_Z_stair_height)*delta;
+      ep[9]=stairs_R_Offset-stairs_R_shift_amplitude*delta;
+      ep[10]=stairs_P_Offset;
+      ep[11]=stairs_A_Offset;
       ram_data[DARWIN_STAIRS_CNTRL]|=RISE_RIGHT_FOOT;
     }
     else if(stairs_Time>stairs_rise_right_foot_time && stairs_Time<=stairs_advance_right_foot_time)
     {   
       //3
+      delta=(stairs_Time-stairs_rise_right_foot_time)/(stairs_advance_right_foot_time-stairs_rise_right_foot_time);
       ep[0]=stairs_X_Offset;
-      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-10.0/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
+      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-(stairs_Y_spread_amplitude/2.0)*delta;
       ep[2]=stairs_Z_Offset;
-      ep[3]=-0.05;
-      ep[4]=0.1/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
-      ep[5]=0.3/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
-      ep[6]=stairs_X_Offset+stairs_X_right_shift_amplitude/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
-      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+10.0/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
+      ep[3]=stairs_R_Offset-stairs_R_shift_amplitude;
+      ep[4]=stairs_P_Offset+stairs_P_shift_amplitude*delta;
+      ep[5]=stairs_A_Offset+stairs_A_shift_amplitude*delta;
+      ep[6]=stairs_X_Offset+stairs_X_shift_amplitude*delta;
+      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+(stairs_Y_spread_amplitude/2.0)*delta;
       ep[8]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height;
-      ep[9]=-0.05;
-      ep[10]=0.1/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
-      ep[11]=0.3/(stairs_advance_right_foot_time-stairs_rise_right_foot_time)*(stairs_Time-stairs_rise_right_foot_time);
+      ep[9]=stairs_R_Offset-stairs_R_shift_amplitude;
+      ep[10]=stairs_P_Offset+stairs_P_shift_amplitude*delta;
+      ep[11]=stairs_A_Offset+stairs_A_shift_amplitude*delta;
       ram_data[DARWIN_STAIRS_CNTRL]|=ADVANCE_RIGHT_FOOT;
     }
     else if(stairs_Time>stairs_advance_right_foot_time && stairs_Time<=stairs_contact_right_foot_time)
     {
       //4
+      delta=(stairs_Time-stairs_advance_right_foot_time)/(stairs_contact_right_foot_time-stairs_advance_right_foot_time);
       ep[0]=stairs_X_Offset;
-      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-10.0;
+      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-(stairs_Y_spread_amplitude/2.0);
       ep[2]=stairs_Z_Offset;
-      ep[3]=-0.05;
-      ep[4]=0.1;
-      ep[5]=0.3;
-      ep[6]=stairs_X_Offset+stairs_X_right_shift_amplitude;
-      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+10.0;
-      ep[8]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height-stairs_Z_overshoot/(stairs_contact_right_foot_time-stairs_advance_right_foot_time)*(stairs_Time-stairs_advance_right_foot_time);
-      ep[9]=-0.05;
-      ep[10]=0.1;
-      ep[11]=0.3;
+      ep[3]=stairs_R_Offset-stairs_R_shift_amplitude;
+      ep[4]=stairs_P_Offset+stairs_P_shift_amplitude;
+      ep[5]=stairs_A_Offset+stairs_A_shift_amplitude;
+      ep[6]=stairs_X_Offset+stairs_X_shift_amplitude;
+      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+(stairs_Y_spread_amplitude/2.0);
+      ep[8]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height-stairs_Z_overshoot*delta;
+      ep[9]=stairs_R_Offset-stairs_R_shift_amplitude;
+      ep[10]=stairs_P_Offset+stairs_P_shift_amplitude;
+      ep[11]=stairs_A_Offset+stairs_A_shift_amplitude;
       ram_data[DARWIN_STAIRS_CNTRL]|=CONTACT_RIGHT_FOOT;
     }
     else if(stairs_Time>stairs_contact_right_foot_time && stairs_Time<=stairs_shift_weight_right_time)
     {
       //5
-      ep[0]=stairs_X_Offset-35.0/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-10.0-(2*stairs_Y_shift_amplitude)/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
+      delta=(stairs_Time-stairs_contact_right_foot_time)/(stairs_shift_weight_right_time-stairs_contact_right_foot_time);
+      ep[0]=stairs_X_Offset-stairs_X_shift_body*delta;
+      ep[1]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude-(stairs_Y_spread_amplitude/2.0)-(2*stairs_Y_shift_amplitude)*delta;
       ep[2]=stairs_Z_Offset;
-      ep[3]=-0.05+0.05/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[4]=0.1-0.2/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[5]=0.3;
-      ep[6]=stairs_X_Offset+stairs_X_right_shift_amplitude-35.0/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+10.0-(2*stairs_Y_shift_amplitude)/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
+      ep[3]=stairs_R_Offset-stairs_R_shift_amplitude+stairs_R_shift_amplitude*delta;
+      ep[4]=stairs_P_Offset+stairs_P_shift_amplitude-(2.0*stairs_P_shift_amplitude)*delta;
+      ep[5]=stairs_A_Offset+stairs_A_shift_amplitude;
+      ep[6]=stairs_X_Offset+stairs_X_shift_amplitude-stairs_X_shift_body*delta;
+      ep[7]=stairs_Y_Offset/2.0+stairs_Y_shift_amplitude+(stairs_Y_spread_amplitude/2.0)-(2*stairs_Y_shift_amplitude)*delta;
       ep[8]=stairs_Z_Offset+stairs_Z_stair_height;
-      ep[9]=-0.05+0.05/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[10]=0.1-0.2/(stairs_shift_weight_right_time-stairs_contact_right_foot_time)*(stairs_Time-stairs_contact_right_foot_time);
-      ep[11]=0.3;
+      ep[9]=stairs_R_Offset-stairs_R_shift_amplitude+stairs_R_shift_amplitude*delta;
+      ep[10]=stairs_P_Offset+stairs_P_shift_amplitude-(2.0*stairs_P_shift_amplitude)*delta;
+      ep[11]=stairs_A_Offset+stairs_A_shift_amplitude;
       ram_data[DARWIN_STAIRS_CNTRL]|=SHIFT_WEIGHT_RIGHT;
     }
     else if(stairs_Time>stairs_shift_weight_right_time && stairs_Time<=stairs_rise_left_foot_time)
     {
       //6
-      ep[0]=stairs_X_Offset-35.0;
-      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude-10.0;
-      ep[2]=stairs_Z_Offset+(stairs_Z_overshoot+stairs_Z_stair_height)/(stairs_rise_left_foot_time-stairs_shift_weight_right_time)*(stairs_Time-stairs_shift_weight_right_time);
-      ep[3]=0.05/(stairs_rise_left_foot_time-stairs_shift_weight_right_time)*(stairs_Time-stairs_shift_weight_right_time);
-      ep[4]=-0.1;
-      ep[5]=0.3;
-      ep[6]=stairs_X_Offset+stairs_X_right_shift_amplitude-35.0;
-      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+10.0;
+      delta=(stairs_Time-stairs_shift_weight_right_time)/(stairs_rise_left_foot_time-stairs_shift_weight_right_time);
+      ep[0]=stairs_X_Offset-stairs_X_shift_body;
+      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude-(stairs_Y_spread_amplitude/2.0);
+      ep[2]=stairs_Z_Offset+(stairs_Z_overshoot+stairs_Z_stair_height)*delta;
+      ep[3]=stairs_R_Offset+stairs_R_shift_amplitude*delta;
+      ep[4]=stairs_P_Offset-stairs_P_shift_amplitude;
+      ep[5]=stairs_A_Offset+stairs_A_shift_amplitude;
+      ep[6]=stairs_X_Offset+stairs_X_shift_amplitude-stairs_X_shift_body;
+      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+(stairs_Y_spread_amplitude/2.0);
       ep[8]=stairs_Z_Offset+stairs_Z_stair_height;
-      ep[9]=0.05/(stairs_rise_left_foot_time-stairs_shift_weight_right_time)*(stairs_Time-stairs_shift_weight_right_time);
-      ep[10]=-0.1;
-      ep[11]=0.3;
+      ep[9]=stairs_R_Offset+stairs_R_shift_amplitude*delta;
+      ep[10]=stairs_P_Offset-stairs_P_shift_amplitude;
+      ep[11]=stairs_A_Offset+stairs_A_shift_amplitude;
       ram_data[DARWIN_STAIRS_CNTRL]|=RISE_LEFT_FOOT;
     }
     else if(stairs_Time>stairs_rise_left_foot_time && stairs_Time<=stairs_advance_left_foot_time)
     {
       //7
-      ep[0]=stairs_X_Offset-35.0+35.0/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
-      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude-10.0+10.0/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
+      delta=(stairs_Time-stairs_rise_left_foot_time)/(stairs_advance_left_foot_time-stairs_rise_left_foot_time);
+      ep[0]=stairs_X_Offset-stairs_X_shift_body+stairs_X_shift_body*delta;
+      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude-(stairs_Y_spread_amplitude/2.0)+(stairs_Y_spread_amplitude/2.0)*delta;
       ep[2]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height;
-      ep[3]=0.05;
-      ep[4]=-0.1+0.1/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
-      ep[5]=0.3-0.3/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
-      ep[6]=stairs_X_Offset+stairs_X_right_shift_amplitude-35.0-(-35.0+stairs_X_right_shift_amplitude)/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
-      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+10.0-10.0/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
+      ep[3]=stairs_R_Offset+stairs_R_shift_amplitude;
+      ep[4]=stairs_P_Offset-stairs_P_shift_amplitude+stairs_P_shift_amplitude*delta;
+      ep[5]=stairs_A_Offset+stairs_A_shift_amplitude-stairs_A_shift_amplitude*delta;
+      ep[6]=stairs_X_Offset+stairs_X_shift_amplitude-stairs_X_shift_body-(stairs_X_shift_amplitude-stairs_X_shift_body)*delta;
+      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+(stairs_Y_spread_amplitude/2.0)-(stairs_Y_spread_amplitude/2.0)*delta;
       ep[8]=stairs_Z_Offset+stairs_Z_stair_height;
-      ep[9]=0.05;
-      ep[10]=-0.1+0.1/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
-      ep[11]=0.3-0.3/(stairs_advance_left_foot_time-stairs_rise_left_foot_time)*(stairs_Time-stairs_rise_left_foot_time);
+      ep[9]=stairs_R_Offset+stairs_R_shift_amplitude;
+      ep[10]=stairs_P_Offset-stairs_P_shift_amplitude+stairs_P_shift_amplitude*delta;
+      ep[11]=stairs_A_Offset+stairs_A_shift_amplitude-stairs_A_shift_amplitude*delta;
       ram_data[DARWIN_STAIRS_CNTRL]|=ADVANCE_LEFT_FOOT;
     }
     else if(stairs_Time>stairs_advance_left_foot_time && stairs_Time<=stairs_contact_left_foot_time)
     {
       //8
+      delta=(stairs_Time-stairs_advance_left_foot_time)/(stairs_contact_left_foot_time-stairs_advance_left_foot_time);
       ep[0]=stairs_X_Offset;
       ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude;
-      ep[2]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height-stairs_Z_overshoot/(stairs_contact_left_foot_time-stairs_advance_left_foot_time)*(stairs_Time-stairs_advance_left_foot_time);
-      ep[3]=0.05-0.05/(stairs_contact_left_foot_time-stairs_advance_left_foot_time)*(stairs_Time-stairs_advance_left_foot_time);
-      ep[4]=0.0;
-      ep[5]=0.0;
+      ep[2]=stairs_Z_Offset+stairs_Z_overshoot+stairs_Z_stair_height-stairs_Z_overshoot*delta;
+      ep[3]=stairs_R_Offset+stairs_R_shift_amplitude-stairs_R_shift_amplitude*delta;
+      ep[4]=stairs_P_Offset;
+      ep[5]=stairs_A_Offset;
       ep[6]=stairs_X_Offset;
       ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude;
       ep[8]=stairs_Z_Offset+stairs_Z_stair_height;
-      ep[9]=0.05-0.05/(stairs_contact_left_foot_time-stairs_advance_left_foot_time)*(stairs_Time-stairs_advance_left_foot_time);
-      ep[10]=0.0;
-      ep[11]=0.0;
+      ep[9]=stairs_R_Offset+stairs_R_shift_amplitude-stairs_R_shift_amplitude*delta;
+      ep[10]=stairs_P_Offset;
+      ep[11]=stairs_A_Offset;
       ram_data[DARWIN_STAIRS_CNTRL]|=CONTACT_LEFT_FOOT;
     }
     else if(stairs_Time>stairs_contact_left_foot_time && stairs_Time<=stairs_center_weight_time)
     {
       //9
+      delta=(stairs_Time-stairs_contact_left_foot_time)/(stairs_center_weight_time-stairs_contact_left_foot_time);
       ep[0]=stairs_X_Offset;
-      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+stairs_Y_shift_amplitude/(stairs_center_weight_time-stairs_contact_left_foot_time)*(stairs_Time-stairs_contact_left_foot_time);
-      ep[2]=stairs_Z_Offset+stairs_Z_stair_height-stairs_Z_stair_height/(stairs_center_weight_time-stairs_contact_left_foot_time)*(stairs_Time-stairs_contact_left_foot_time);
-      ep[3]=0.0;
-      ep[4]=0.0;
-      ep[5]=0.0;
+      ep[1]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+stairs_Y_shift_amplitude*delta;
+      ep[2]=stairs_Z_Offset+stairs_Z_stair_height-stairs_Z_stair_height*delta;
+      ep[3]=stairs_R_Offset;
+      ep[4]=stairs_P_Offset;
+      ep[5]=stairs_A_Offset;
       ep[6]=stairs_X_Offset;
-      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+stairs_Y_shift_amplitude/(stairs_center_weight_time-stairs_contact_left_foot_time)*(stairs_Time-stairs_contact_left_foot_time);
-      ep[8]=stairs_Z_Offset+stairs_Z_stair_height-stairs_Z_stair_height/(stairs_center_weight_time-stairs_contact_left_foot_time)*(stairs_Time-stairs_contact_left_foot_time);
-      ep[9]=0.0;
-      ep[10]=0.0;
-      ep[11]=0.0;
+      ep[7]=stairs_Y_Offset/2.0-stairs_Y_shift_amplitude+stairs_Y_shift_amplitude*delta;
+      ep[8]=stairs_Z_Offset+stairs_Z_stair_height-stairs_Z_stair_height*delta;
+      ep[9]=stairs_R_Offset;
+      ep[10]=stairs_P_Offset;
+      ep[11]=stairs_A_Offset;
       ram_data[DARWIN_STAIRS_CNTRL]|=CENTER_WEIGHT;
     }
-    else if(stairs_Time>stairs_center_weight_time && stairs_Time<=stairs_walk_ready_time)
-    {
-      ep[0]=stairs_X_Offset;
-      ep[1]=stairs_Y_Offset/2.0;
-      ep[2]=stairs_Z_Offset;
-      ep[6]=stairs_X_Offset;
-      ep[7]=stairs_Y_Offset/2.0;
-      ep[8]=stairs_Z_Offset;
-      ram_data[DARWIN_STAIRS_CNTRL]|=STAND_UP;
-    }
     else
     {
       ram_data[DARWIN_STAIRS_CNTRL]&=(~STAIRS_STATUS);