diff --git a/jrl-walkgen-v3/distinfo b/jrl-walkgen-v3/distinfo
index ce88de40e2414d589e970e000a0fad18a44c5fa6..77403fca4fad0cb2efa863368bb518cfab798a99 100644
--- a/jrl-walkgen-v3/distinfo
+++ b/jrl-walkgen-v3/distinfo
@@ -1,3 +1,4 @@
 SHA1 (jrl-walkgen-4.0.4.tar.gz) = 1f9bcd5447dfd43b16955a276dd82d70590f934d
 RMD160 (jrl-walkgen-4.0.4.tar.gz) = c05a3e06bff1a50fc452400ab9aab67019d878d5
 Size (jrl-walkgen-4.0.4.tar.gz) = 16028021 bytes
+SHA1 (patch-aa) = b05edcefd62be5dad8592e7b6f40079d50e61783
diff --git a/jrl-walkgen-v3/patches/patch-aa b/jrl-walkgen-v3/patches/patch-aa
new file mode 100644
index 0000000000000000000000000000000000000000..3ce3789c10e40bf456376abcb76cbb48900b40da
--- /dev/null
+++ b/jrl-walkgen-v3/patches/patch-aa
@@ -0,0 +1,36 @@
+use se3::SINCOS, fix compilation with recent version of pinocchio
+
+--- src/RobotDynamics/pinocchiorobot.cpp
++++ src/RobotDynamics/pinocchiorobot.cpp
+@@ -238,7 +238,7 @@ bool PinocchioRobot::testInverseKinematics()
+   leftLegJointName.push_back("JointModelRY");
+   leftLegJointName.push_back("JointModelRY");
+   leftLegJointName.push_back("JointModelRX");
+-  
++
+   rightLegJointName.push_back("JointModelFreeFlyer");
+   rightLegJointName.push_back("JointModelRZ");
+   rightLegJointName.push_back("JointModelRX");
+@@ -246,7 +246,7 @@ bool PinocchioRobot::testInverseKinematics()
+   rightLegJointName.push_back("JointModelRY");
+   rightLegJointName.push_back("JointModelRY");
+   rightLegJointName.push_back("JointModelRX");
+-  
++
+   leftArmJointName.push_back("JointModelRY");
+   leftArmJointName.push_back("JointModelRX");
+   leftArmJointName.push_back("JointModelRZ");
+@@ -342,9 +342,9 @@ void PinocchioRobot::RPYToSpatialFreeFlyer(Eigen::Vector3d & rpy,
+         Eigen::AngleAxisd(rpy(1), Eigen::Vector3d::UnitY()) *
+         Eigen::AngleAxisd(rpy(0), Eigen::Vector3d::UnitX()) ) ;
+   quat.normalize();
+-  double c0,s0; SINCOS (rpy(2), &s0, &c0);
+-  double c1,s1; SINCOS (rpy(1), &s1, &c1);
+-  double c2,s2; SINCOS (rpy(0), &s2, &c2);
++  double c0,s0; se3::SINCOS (rpy(2), &s0, &c0);
++  double c1,s1; se3::SINCOS (rpy(1), &s1, &c1);
++  double c2,s2; se3::SINCOS (rpy(0), &s2, &c2);
+   m_S << -s1, 0., 1., c1 * s2, c2, 0, c1 * c2, -s2, 0;
+   omega = m_S * drpy ;
+   domega = m_S * ddrpy ;
+