diff --git a/CMakeLists.txt b/CMakeLists.txt
index a894528e77523ab558a75e13a17ed0ee16217b47..ae409074be1203b79eb7b8a4aaf37529840210f4 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -120,6 +120,7 @@ install(FILES
 	data/meshes/truck.stl
 	data/meshes/truck_vision.stl
 	data/meshes/stair_bauzil.stl
+        data/meshes/stair_bauzil_reduced.stl
 	data/meshes/climb.stl
 	data/meshes/stepladder.stl
 	data/meshes/chair.stl
diff --git a/data/meshes/stair_bauzil.stl b/data/meshes/stair_bauzil.stl
index 13c37c2ace14fbdab4c404cb6f5c5ea270b7bf55..7b608963d78806e796ce789a4b234f0ef90bc774 100644
Binary files a/data/meshes/stair_bauzil.stl and b/data/meshes/stair_bauzil.stl differ
diff --git a/data/meshes/stair_bauzil_reduced.stl b/data/meshes/stair_bauzil_reduced.stl
new file mode 100644
index 0000000000000000000000000000000000000000..3c1e07ce7b5872ee3602baa813ef5cf2dc1afaec
Binary files /dev/null and b/data/meshes/stair_bauzil_reduced.stl differ
diff --git a/data/stair_bauzil.blend b/data/stair_bauzil.blend
index 992e4e21ce52332e8b3c031f5f521a506a8335b8..afa523a04285e659f3148abac75fbc908771f4d6 100644
Binary files a/data/stair_bauzil.blend and b/data/stair_bauzil.blend differ
diff --git a/data/stair_bauzilreduced.blend b/data/stair_bauzilreduced.blend
new file mode 100644
index 0000000000000000000000000000000000000000..ebddb79a25631b3f6f8235f722fee128f46188c9
Binary files /dev/null and b/data/stair_bauzilreduced.blend differ
diff --git a/data/urdf/stair_bauzil.urdf b/data/urdf/stair_bauzil.urdf
index 5a49b44d233a4bdc5a39eb51ad62dc1066e63e72..3635b5d8b0a4dbf9523b2512789dff1289709987 100644
--- a/data/urdf/stair_bauzil.urdf
+++ b/data/urdf/stair_bauzil.urdf
@@ -12,7 +12,7 @@
     <collision>
       <origin xyz="0 0 0" rpy="0 0 0" />
       <geometry>
-        <mesh filename="package://hpp-rbprm-corba/meshes/stair_bauzil.stl"/>
+        <mesh filename="package://hpp-rbprm-corba/meshes/stair_bauzil_reduced.stl"/>
       </geometry>
     </collision>
   </link>
diff --git a/script/loadhrp2stair_bauzil.py b/script/loadhrp2stair_bauzil.py
index a26b2de2ebce40b2d70f5d10cd78a53322622a7d..9c6cb81e894eecab656e651751796a8c994cf88e 100644
--- a/script/loadhrp2stair_bauzil.py
+++ b/script/loadhrp2stair_bauzil.py
@@ -18,7 +18,7 @@ srdfSuffix = ""
 fullBody = FullBody ()
 
 fullBody.loadFullBodyModel(urdfName, rootJointType, meshPackageName, packageName, urdfSuffix, srdfSuffix)
-fullBody.setJointBounds ("base_joint_xyz", [0,2, -1, 1, 0, 2.2])
+fullBody.setJointBounds ("base_joint_xyz", [-0.135,2, -1, 1, 0, 2.2])
 
 
 ps = tp.ProblemSolver( fullBody )
@@ -43,8 +43,8 @@ fullBody.addLimb(lLegId,lLeg,'',lLegOffset,rLegNormal, lLegx, lLegy, 10000, 0.01
 rarmId = '3Rarm'
 rarm = 'RARM_JOINT0'
 rHand = 'RARM_JOINT5'
-rArmOffset = [-0.05,-0.050,-0.050]
-rArmNormal = [1,0,0]
+rArmOffset = [0,0,-0.1]
+rArmNormal = [0,0,1]
 rArmx = 0.024; rArmy = 0.024
 fullBody.addLimb(rarmId,rarm,rHand,rArmOffset,rArmNormal, rArmx, rArmy, 30000, 0.05)
 
@@ -85,12 +85,19 @@ q_goal = fullBody.getCurrentConfig(); q_goal[0:7] = tp.q_goal[0:7]
 
 fullBody.setCurrentConfig (q_init)
 q_0 = fullBody.getCurrentConfig(); 
-q_init = fullBody.generateContacts(q_init, [0,0,1]); r (q_init)
+q_init =  [
+        0.1, -0.82, 0.648702, 1.0, 0.0 , 0.0, 0.0,                         # Free flyer 0-6
+        0.0, 0.0, 0.0, 0.0,                                                  # CHEST HEAD 7-10
+        0.261799388,  0.174532925, 0.0, -0.523598776, 0.0, 0.0, 0.174532925, # LARM       11-17
+        0.261799388, -0.174532925, 0.0, -0.523598776, 0.0, 0.0, 0.174532925, # RARM       18-24
+        0.0, 0.0, -0.453785606, 0.872664626, -0.41887902, 0.0,               # LLEG       25-30
+        0.0, 0.0, -0.453785606, 0.872664626, -0.41887902, 0.0,               # RLEG       31-36
+        ]; r (q_init)
 
 fullBody.setCurrentConfig (q_goal)
-r(q_goal)
+#~ r(q_goal)
 q_goal = fullBody.generateContacts(q_goal, [0,0,1])
-r(q_goal)
+#~ r(q_goal)
 
 fullBody.setStartState(q_init,[rLegId,lLegId]) #,rarmId,larmId])
 fullBody.setEndState(q_goal,[rLegId,lLegId])#,rarmId,larmId])
@@ -98,11 +105,12 @@ fullBody.setEndState(q_goal,[rLegId,lLegId])#,rarmId,larmId])
 #~ configs = fullBody.interpolate(0.1)
 configs = fullBody.interpolate(0.1)
 #~ configs = fullBody.interpolate(0.15)
-i = 1; 
+i = 0;
 r (configs[i]); i=i+1; i-1
 #~ q_init = fullBody.generateContacts(q_init, [0,0,-1]); r (q_init)
 
-f1 = open("secondchoice","w+")
+#~ f1 = open("secondchoice","w+")
+f1 = open("new","w+")
 f1.write(str(configs))
 f1.close()
 
diff --git a/script/stair_path_bauzil_hrp2.py b/script/stair_path_bauzil_hrp2.py
index 9d85ddefba0576dfb0a4a21d1f3a74dfd5f69898..2799215d7b499005e7762c2ace57055467e549de 100644
--- a/script/stair_path_bauzil_hrp2.py
+++ b/script/stair_path_bauzil_hrp2.py
@@ -23,12 +23,15 @@ r = Viewer (ps)
 
 
 q_init = rbprmBuilder.getCurrentConfig ();
-q_init [0:3] = [0, -0.7, 0.6]; rbprmBuilder.setCurrentConfig (q_init); r (q_init)
+q_init [0:3] = [0, -0.82, 0.648702]; rbprmBuilder.setCurrentConfig (q_init); r (q_init)
+q_init [0:3] = [0.1, -0.82, 0.648702]; rbprmBuilder.setCurrentConfig (q_init); r (q_init)
 #~ q_init [0:3] = [0, -0.63, 0.6]; rbprmBuilder.setCurrentConfig (q_init); r (q_init)
-q_init [3:7] = [ 0.98877108,  0.        ,  0.14943813,  0.        ]
+#~ q_init [3:7] = [ 0.98877108,  0.        ,  0.14943813,  0.        ]
 
 q_goal = q_init [::]
-q_goal [0:3] = [1.49, -0.6, 1.25]; r (q_goal)
+q_goal [3:7] = [ 0.98877108,  0.        ,  0.14943813,  0.        ]
+q_goal [0:3] = [1.49, -0.65, 1.25]; r (q_goal)
+#~ q_goal [0:3] = [1.2, -0.65, 1.1]; r (q_goal)
 
 #~ ps.addPathOptimizer("GradientBased")
 ps.addPathOptimizer("RandomShortcut")
diff --git a/script/stair_path_hrp2.py b/script/stair_path_hrp2.py
index 45634be4c19f4fdf6f3abc0f95037cd12ea03378..5f21989fe49c6e1d8087870dd8c900c81da44c88 100644
--- a/script/stair_path_hrp2.py
+++ b/script/stair_path_hrp2.py
@@ -4,15 +4,16 @@ from hpp.gepetto import Viewer
 rootJointType = 'freeflyer'
 packageName = 'hpp-rbprm-corba'
 meshPackageName = 'hpp-rbprm-corba'
-urdfName = 'hrp2_trunk'
-urdfNameRom = 'hrp2_rom'
+urdfName = 'hrp2_trunk_flexible'
+urdfNameRoms = ['hrp2_larm_rom','hrp2_rarm_rom','hrp2_lleg_rom','hrp2_rleg_rom']
 urdfSuffix = ""
 srdfSuffix = ""
 
 rbprmBuilder = Builder ()
 
-rbprmBuilder.loadModel(urdfName, urdfNameRom, rootJointType, meshPackageName, packageName, urdfSuffix, srdfSuffix)
+rbprmBuilder.loadModel(urdfName, urdfNameRoms, rootJointType, meshPackageName, packageName, urdfSuffix, srdfSuffix)
 rbprmBuilder.setJointBounds ("base_joint_xyz", [-1,1, -1, 1, 0, 2.2])
+rbprmBuilder.setFilter(['hrp2_larm_rom','hrp2_rarm_rom','hrp2_lleg_rom','hrp2_rleg_rom'])
 
 #~ from hpp.corbaserver.rbprm. import ProblemSolver
 from hpp.corbaserver.rbprm.problem_solver import ProblemSolver
diff --git a/src/rbprmbuilder.impl.cc b/src/rbprmbuilder.impl.cc
index 97ef3c2a01e9f49c152232c7e0e8b9761269ab82..0e950c18eebd8cf60275893394b63e5229d95fa4 100755
--- a/src/rbprmbuilder.impl.cc
+++ b/src/rbprmbuilder.impl.cc
@@ -21,6 +21,7 @@
 #include "hpp/rbprm/rbprm-device.hh"
 #include "hpp/rbprm/rbprm-validation.hh"
 #include "hpp/rbprm/rbprm-path-interpolation.hh"
+#include "hpp/rbprm/stability/stability.hh"
 #include "hpp/model/urdf/util.hh"
 #include <fstream>
 
@@ -342,6 +343,7 @@ namespace hpp {
         core::Configuration_t old = fullBody->device_->currentConfiguration();
         model::Configuration_t config = dofArrayToConfig (fullBody->device_, configuration);
         fullBody->device_->currentConfiguration(config);
+        fullBody->device_->computeForwardKinematics();
         std::vector<std::string> names = stringConversion(contactLimbs);
         for(std::vector<std::string>::const_iterator cit = names.begin(); cit != names.end();++cit)
         {
@@ -362,6 +364,7 @@ namespace hpp {
         }        
         state.nbContacts = state.contactNormals_.size() ;
         state.configuration_ = config;
+        state.stable = stability::IsStable(fullBody,state);
         fullBody->device_->currentConfiguration(old);
     }