diff --git a/py-sot-dyninv-v3/Makefile b/py-sot-dyninv-v3/Makefile
index a606b146db7f7f58813cae5e2011885499b80ba7..b81ff7fdd8927c26e77e427b8b6bde310834f2a6 100644
--- a/py-sot-dyninv-v3/Makefile
+++ b/py-sot-dyninv-v3/Makefile
@@ -4,15 +4,10 @@
 
 ORG=			stack-of-tasks
 NAME=			sot-dyninv
-VERSION=		3.1.1
+VERSION=		3.1.2
 
-DISTNAME=		${NAME}-${VERSION}
 PKGNAME=		${PKGTAG.python-}${NAME}-v3-${VERSION}
 
-MASTER_SITES=		${MASTER_SITE_OPENROBOTS:=${NAME}/}
-MASTER_REPOSITORY=	${MASTER_REPOSITORY_GITHUB}${ORG}/${NAME}
-CHECKOUT_VCS_OPTS+=	--recursive
-
 CATEGORIES=		wip
 COMMENT=		Resolve the inverse of the dynamics of a free-floating robot (python bindings)
 LICENSE=		2-clause-bsd
@@ -20,11 +15,11 @@ MAINTAINER=		gepetto-soft@laas.fr
 
 CONFLICTS+=		py[0-9][0-9]-${NAME}
 
-DYNAMIC_PLIST_DIRS+=	share/doc/${NAME}
-
-include ../../wip/soth/depend.mk
+USE_PYTHON_ONLY=	true
 
+include ../../wip/jrl-cmakemodules/Makefile.common
 include ../../${CATEGORIES}/${NAME}-v3/depend.mk
+include ../../wip/soth/depend.mk
 include ../../wip/dynamic-graph-v3/depend.mk
 include ../../wip/py-dynamic-graph-v3/depend.mk
 include ../../wip/sot-core-v3/depend.mk
diff --git a/py-sot-dyninv-v3/PLIST b/py-sot-dyninv-v3/PLIST
index 01d040ed7edb9043ce6d5af6415351e34ec1c05d..35191eac9b3baaac4f49ce7f0759371b7f7995fa 100644
--- a/py-sot-dyninv-v3/PLIST
+++ b/py-sot-dyninv-v3/PLIST
@@ -1,43 +1,43 @@
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/dynamic_integrator/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/dynamic_integrator/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/zmp_estimator/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/zmp_estimator/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/pseudo_robot_dynamic/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/pseudo_robot_dynamic/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/robot_dyn_simu/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/robot_dyn_simu/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/controller_pd/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/contact_selecter/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/contact_selecter/wrap.so
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/controller_pd/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_pd/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_pd/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_joint_limits/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_joint_limits/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_limits/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_limits/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_inequality/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_inequality/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_passing_point/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_passing_point/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_op_space/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_op_space/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_dyn_reduced/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_dyn_reduced/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_kine/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_kine/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_joint_limits/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_joint_limits/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_inequality/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_inequality/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_weight/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_weight/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/feature_projected_line/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/controller_pd/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/dynamic_integrator/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/dynamic_integrator/wrap.so
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/feature_projected_line/__init__.py
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/contact_selecter/wrap.so
-${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/contact_selecter/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/feature_projected_line/wrap.so
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/__init__.py
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/meta_task_dyn_6d.py
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/meta_task_dyn_passing_point.py
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/meta_tasks_dyn.py
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/meta_tasks_dyn_relative.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/pseudo_robot_dynamic/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/pseudo_robot_dynamic/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/robot_dyn_simu/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/robot_dyn_simu/wrap.so
 ${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/robot_specific.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_dyn_reduced/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_dyn_reduced/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_kine/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_kine/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_op_space/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/solver_op_space/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_inequality/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_inequality/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_joint_limits/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_joint_limits/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_limits/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_limits/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_passing_point/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_passing_point/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_pd/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_dyn_pd/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_inequality/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_inequality/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_joint_limits/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_joint_limits/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_weight/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/task_weight/wrap.so
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/zmp_estimator/__init__.py
+${PYTHON_SITELIB}/dynamic_graph/sot/dyninv/zmp_estimator/wrap.so
 ${PYTHON_SITELIB}/dynamic_graph/tutorial/sot-concept.py
diff --git a/py-sot-dyninv-v3/distinfo b/py-sot-dyninv-v3/distinfo
index 05a6a03ab9dc174156e897410c4d57c6bdd2d320..b60c22607934035e8d34d552db87fc244b90724c 100644
--- a/py-sot-dyninv-v3/distinfo
+++ b/py-sot-dyninv-v3/distinfo
@@ -1,3 +1,3 @@
-SHA1 (sot-dyninv-3.1.1.tar.gz) = 43d1bac43a6661f4933ff0522150109a3bc28eed
-RMD160 (sot-dyninv-3.1.1.tar.gz) = 98d5377fcb745fad8343d7f74688c0547a6f9caa
-Size (sot-dyninv-3.1.1.tar.gz) = 913193 bytes
+SHA1 (sot-dyninv-3.1.2.tar.gz) = 09becaf3eac1f8b5e66b1bab65bde5fc445c1c61
+RMD160 (sot-dyninv-3.1.2.tar.gz) = d3db48bca8d8c6ebd107920649044405ab8c5c45
+Size (sot-dyninv-3.1.2.tar.gz) = 924465 bytes
diff --git a/sot-dyninv-v3/Makefile b/sot-dyninv-v3/Makefile
index aff219daeb0508a60a1910cf048096f5229f5482..38f6e2219c15db31bde74f085708b3e5236e8154 100644
--- a/sot-dyninv-v3/Makefile
+++ b/sot-dyninv-v3/Makefile
@@ -4,15 +4,10 @@
 
 ORG=			stack-of-tasks
 NAME=			sot-dyninv
-VERSION=		3.1.1
+VERSION=		3.1.2
 
-DISTNAME=		${NAME}-${VERSION}
 PKGNAME=		${NAME}-v3-${VERSION}
 
-MASTER_SITES=		${MASTER_SITE_OPENROBOTS:=${NAME}/}
-MASTER_REPOSITORY=	${MASTER_REPOSITORY_GITHUB}${ORG}/${NAME}.git
-CHECKOUT_VCS_OPTS+=	--recursive
-
 CATEGORIES=		wip
 COMMENT=		Resolve the inverse of the dynamics of a free-floating robot
 LICENSE=		2-clause-bsd
@@ -22,8 +17,7 @@ CONFLICTS+=		${NAME}
 
 CMAKE_ARGS+=		-DBUILD_PYTHON_INTERFACE=OFF
 
-DYNAMIC_PLIST_DIRS+=	share/doc/${NAME}
-
+include ../../wip/jrl-cmakemodules/Makefile.common
 include ../../wip/soth/depend.mk
 include ../../wip/sot-core-v3/depend.mk
 include ../../pkgtools/pkg-config/depend.mk
diff --git a/sot-dyninv-v3/PLIST b/sot-dyninv-v3/PLIST
index a89dad84afdb27e1567981504ce98b4f99aa8096..5b7b8b3407c610fafe3c6bdd19a281ca25a001cf 100644
--- a/sot-dyninv-v3/PLIST
+++ b/sot-dyninv-v3/PLIST
@@ -1,64 +1,65 @@
+@comment Mon Sep 16 14:27:39 CEST 2019
+include/sot-dyninv/col-piv-qr-solve-in-place.h
+include/sot-dyninv/commands-helper.h
 include/sot-dyninv/config.hh
+include/sot-dyninv/contact-selecter.h
+include/sot-dyninv/controller-pd.h
 include/sot-dyninv/deprecated.hh
-include/sot-dyninv/warning.hh
-lib/pkgconfig/sot-dyninv.pc
-include/sot-dyninv/commands-helper.h
-include/sot-dyninv/entity-helper.h
-include/sot-dyninv/signal-helper.h
 include/sot-dyninv/dynamic-integrator.h
-include/sot-dyninv/zmp-estimator.h
+include/sot-dyninv/entity-helper.h
+include/sot-dyninv/feature-projected-line.h
 include/sot-dyninv/pseudo-robot-dynamic.h
 include/sot-dyninv/robot-dyn-simu.h
+include/sot-dyninv/signal-helper.h
+include/sot-dyninv/solver-dyn-reduced.h
+include/sot-dyninv/solver-kine.h
+include/sot-dyninv/solver-op-space.h
 include/sot-dyninv/stack-template.h
 include/sot-dyninv/stack-template.t.cpp
-include/sot-dyninv/controller-pd.h
-include/sot-dyninv/task-dyn-pd.h
+include/sot-dyninv/task-dyn-inequality.h
 include/sot-dyninv/task-dyn-joint-limits.h
 include/sot-dyninv/task-dyn-limits.h
-include/sot-dyninv/task-dyn-inequality.h
 include/sot-dyninv/task-dyn-passing-point.h
-include/sot-dyninv/solver-op-space.h
-include/sot-dyninv/solver-dyn-reduced.h
-include/sot-dyninv/task-joint-limits.h
+include/sot-dyninv/task-dyn-pd.h
 include/sot-dyninv/task-inequality.h
+include/sot-dyninv/task-joint-limits.h
 include/sot-dyninv/task-weight.h
-include/sot-dyninv/solver-kine.h
-include/sot-dyninv/feature-projected-line.h
-include/sot-dyninv/col-piv-qr-solve-in-place.h
-include/sot-dyninv/contact-selecter.h
-lib/plugin/dynamic-integrator.so.${PKGVERSION}
+include/sot-dyninv/warning.hh
+include/sot-dyninv/zmp-estimator.h
+lib/pkgconfig/sot-dyninv.pc
+lib/plugin/contact-selecter.so
+lib/plugin/contact-selecter.so.${PKGVERSION}
+lib/plugin/controller-pd.so
+lib/plugin/controller-pd.so.${PKGVERSION}
 lib/plugin/dynamic-integrator.so
-lib/plugin/zmp-estimator.so.${PKGVERSION}
-lib/plugin/zmp-estimator.so
-lib/plugin/pseudo-robot-dynamic.so.${PKGVERSION}
+lib/plugin/dynamic-integrator.so.${PKGVERSION}
+lib/plugin/feature-projected-line.so
+lib/plugin/feature-projected-line.so.${PKGVERSION}
 lib/plugin/pseudo-robot-dynamic.so
-lib/plugin/robot-dyn-simu.so.${PKGVERSION}
+lib/plugin/pseudo-robot-dynamic.so.${PKGVERSION}
 lib/plugin/robot-dyn-simu.so
-lib/plugin/controller-pd.so.${PKGVERSION}
-lib/plugin/controller-pd.so
-lib/plugin/task-dyn-pd.so.${PKGVERSION}
-lib/plugin/task-dyn-pd.so
-lib/plugin/task-dyn-joint-limits.so.${PKGVERSION}
+lib/plugin/robot-dyn-simu.so.${PKGVERSION}
+lib/plugin/solver-dyn-reduced.so
+lib/plugin/solver-dyn-reduced.so.${PKGVERSION}
+lib/plugin/solver-kine.so
+lib/plugin/solver-kine.so.${PKGVERSION}
+lib/plugin/solver-op-space.so
+lib/plugin/solver-op-space.so.${PKGVERSION}
+lib/plugin/task-dyn-inequality.so
+lib/plugin/task-dyn-inequality.so.${PKGVERSION}
 lib/plugin/task-dyn-joint-limits.so
-lib/plugin/task-dyn-limits.so.${PKGVERSION}
+lib/plugin/task-dyn-joint-limits.so.${PKGVERSION}
 lib/plugin/task-dyn-limits.so
-lib/plugin/task-dyn-inequality.so.${PKGVERSION}
-lib/plugin/task-dyn-inequality.so
-lib/plugin/task-dyn-passing-point.so.${PKGVERSION}
+lib/plugin/task-dyn-limits.so.${PKGVERSION}
 lib/plugin/task-dyn-passing-point.so
-lib/plugin/solver-op-space.so.${PKGVERSION}
-lib/plugin/solver-op-space.so
-lib/plugin/solver-dyn-reduced.so.${PKGVERSION}
-lib/plugin/solver-dyn-reduced.so
-lib/plugin/solver-kine.so.${PKGVERSION}
-lib/plugin/solver-kine.so
-lib/plugin/task-joint-limits.so.${PKGVERSION}
-lib/plugin/task-joint-limits.so
-lib/plugin/task-inequality.so.${PKGVERSION}
+lib/plugin/task-dyn-passing-point.so.${PKGVERSION}
+lib/plugin/task-dyn-pd.so
+lib/plugin/task-dyn-pd.so.${PKGVERSION}
 lib/plugin/task-inequality.so
-lib/plugin/task-weight.so.${PKGVERSION}
+lib/plugin/task-inequality.so.${PKGVERSION}
+lib/plugin/task-joint-limits.so
+lib/plugin/task-joint-limits.so.${PKGVERSION}
 lib/plugin/task-weight.so
-lib/plugin/feature-projected-line.so.${PKGVERSION}
-lib/plugin/feature-projected-line.so
-lib/plugin/contact-selecter.so.${PKGVERSION}
-lib/plugin/contact-selecter.so
+lib/plugin/task-weight.so.${PKGVERSION}
+lib/plugin/zmp-estimator.so
+lib/plugin/zmp-estimator.so.${PKGVERSION}
diff --git a/sot-dyninv-v3/distinfo b/sot-dyninv-v3/distinfo
index 05a6a03ab9dc174156e897410c4d57c6bdd2d320..b60c22607934035e8d34d552db87fc244b90724c 100644
--- a/sot-dyninv-v3/distinfo
+++ b/sot-dyninv-v3/distinfo
@@ -1,3 +1,3 @@
-SHA1 (sot-dyninv-3.1.1.tar.gz) = 43d1bac43a6661f4933ff0522150109a3bc28eed
-RMD160 (sot-dyninv-3.1.1.tar.gz) = 98d5377fcb745fad8343d7f74688c0547a6f9caa
-Size (sot-dyninv-3.1.1.tar.gz) = 913193 bytes
+SHA1 (sot-dyninv-3.1.2.tar.gz) = 09becaf3eac1f8b5e66b1bab65bde5fc445c1c61
+RMD160 (sot-dyninv-3.1.2.tar.gz) = d3db48bca8d8c6ebd107920649044405ab8c5c45
+Size (sot-dyninv-3.1.2.tar.gz) = 924465 bytes