diff --git a/Makefile b/Makefile
index cf64a6fadc837ebffa91cd52f7beed458cd83ff7..af8f79a06b932860f2433a516915dec508723c31 100644
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,6 @@ SUBDIR+=	pmb2-simulation
 SUBDIR+=	prf-gazebo-ros-pkgs
 SUBDIR+=	prf-gazebo-ros-pkgs-melodic
 SUBDIR+=	prf-roboticsgroup-gazebo-plugins
-SUBDIR+=	prf-ros-controllers
 SUBDIR+=	prf-teleop-tools
 SUBDIR+=	py-bmtools
 SUBDIR+=	py-casadi
@@ -100,6 +99,7 @@ SUBDIR+=	py-pal
 SUBDIR+=	py-pal-statistics
 SUBDIR+=	py-parametric-curves
 SUBDIR+=	py-prf-ros-control
+SUBDIR+=	py-prf-ros-controllers
 SUBDIR+=	py-qpoases
 SUBDIR+=	py-qt-gepetto-pythonqt
 SUBDIR+=	py-quadprog
diff --git a/prf-ros-controllers/depend.mk b/prf-ros-controllers/depend.mk
deleted file mode 100644
index 575b5a2c8a86974c2ed2e869a0e5c1c6e4cf9691..0000000000000000000000000000000000000000
--- a/prf-ros-controllers/depend.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# robotpkg depend.mk for:	wip/ros-controllers
-# Created:			Olivier Stasse on Wed, 29 Mar 2017
-#
-
-DEPEND_DEPTH:=			${DEPEND_DEPTH}+
-ROS_CONTROLLERS_DEPEND_MK:=	${ROS_CONTROLLERS_DEPEND_MK}+
-
-ifeq (+,$(DEPEND_DEPTH))
-DEPEND_PKG+=			prf-ros-controllers
-endif
-
-ifeq (+,$(ROS_CONTROLLERS_DEPEND_MK)) # ----------------------------------
-
-PREFER.ros-controllers?=	robotpkg
-
-DEPEND_USE+=			prf-ros-controllers
-
-DEPEND_ABI.prf-ros-controllers?=	prf-ros-controllers>=0.2.8
-DEPEND_DIR.prf-ros-controllers?=	../../wip/prf-ros-controllers
-
-SYSTEM_SEARCH.prf-ros-controllers=\
-  'include/joint_state_controller/joint_state_controller.h'		\
-  'lib/libjoint_state_controller.so'				\
-  'share/joint_state_controller/package.xml:/<version>/s/[^0-9.]//gp'	\
-  'lib/pkgconfig/joint_state_controller.pc:/Version/s/[^0-9.]//gp'  \
-  'share/controller_interface/cmake/controller_interfaceConfig.cmake'
-
-endif # ROS_CONTROLLERS_DEPEND_MK ----------------------------------------
-
-DEPEND_DEPTH:=		${DEPEND_DEPTH:+=}
diff --git a/py-pal-statistics/depend.mk b/py-pal-statistics/depend.mk
index e914211e96c7254cabf5071c93468d50f5627785..8dcaf5c17573efd43069a20ac0137d50f8353f63 100644
--- a/py-pal-statistics/depend.mk
+++ b/py-pal-statistics/depend.mk
@@ -15,7 +15,7 @@ PREFER.py-pal-statistics?=	robotpkg
 
 DEPEND_USE+=			py-pal-statistics
 
-DEPEND_ABI.py-pal-statistics?=	py-pal-statistics>=1.1.0
+DEPEND_ABI.py-pal-statistics?=	${PKGTAG.python-}pal-statistics>=1.1.0
 DEPEND_DIR.py-pal-statistics?=	../../wip/py-pal-statistics
 
 SYSTEM_SEARCH.py-pal-statistics=\
@@ -25,6 +25,8 @@ SYSTEM_SEARCH.py-pal-statistics=\
   'lib/pkgconfig/pal_statistics.pc:/Version/s/[^0-9.]//gp'	\
   '${PYTHON_SYSLIBSEARCH}/pal_statistics/__init__.py'
 
+include ../../mk/sysdep/python.mk
+
 endif # PY_PAL_STATISTICS_DEPEND_MK ---------------------------------------
 
 DEPEND_DEPTH:=		${DEPEND_DEPTH:+=}
diff --git a/py-prf-ros-control/Makefile b/py-prf-ros-control/Makefile
index 3b3771847feb9ff87899199cd0784fe0ec2f7bb0..45dc9fec5397d7f5cc76d91f868e9900123e5f92 100644
--- a/py-prf-ros-control/Makefile
+++ b/py-prf-ros-control/Makefile
@@ -1,7 +1,7 @@
 # robotpkg Makefile for:	wip/py-prf-ros-control
 # Created:			Olivier Stasse on Wed, 27 Apr 2018
 #
-#
+
 ORG=			pal-robotics-forks
 VERSION=		0.2.8
 PRFNAME=		ros-control
@@ -18,13 +18,12 @@ CONFLICTS=		${PKGBBASE}-[0-9]*
 CONFLICTS+=		py[0-9][0-9]-${PKGBBASE}-[0-9]*
 CONFLICTS+=		ros-control-[0-9]*
 
-
 CATEGORIES=		wip
 
 MASTER_REPOSITORY=	${MASTER_REPOSITORY_GITHUB}${ORG}/${NAME}.git
 CHECKOUT_VCS_OPTS+=	--recursive
 
-HOMEPAGE= 		${MASTER_SITE_GITHUB:=${ORG}/${ROSNAME}}
+HOMEPAGE=		${MASTER_SITE_GITHUB:=${ORG}/${ROSNAME}}
 MASTER_SITES=		${HOMEPAGE}/archive/
 COMMENT=		ros_control package with torque sensors
 LICENSE=		2-clause-bsd
diff --git a/py-prf-ros-control/depend.mk b/py-prf-ros-control/depend.mk
index d75fd365e4a2b7ad4d3f3001166fc71886d6c1a2..43784fb1d84bfea0f8e02b9d2e5de529bfe1b85a 100644
--- a/py-prf-ros-control/depend.mk
+++ b/py-prf-ros-control/depend.mk
@@ -15,7 +15,7 @@ PREFER.py-prf-ros-control?=	robotpkg
 
 DEPEND_USE+=			py-prf-ros-control
 
-DEPEND_ABI.py-prf-ros-control?=	py-prf-ros-control>=0.2
+DEPEND_ABI.py-prf-ros-control?=	${PKGTAG.python-}prf-ros-control>=0.2
 DEPEND_DIR.py-prf-ros-control?=	../../wip/py-prf-ros-control
 
 SYSTEM_SEARCH.py-prf-ros-control=\
@@ -93,7 +93,7 @@ SYSTEM_SEARCH.py-prf-ros-control=\
   'lib/libtransmission_interface_loader_plugins.so'	\
   'lib/libtransmission_interface_parser.so'	\
   'share/ros_control/package.xml:/<version>/s/[^0-9.]//gp'	\
-  '${PYTHON_SYSLIBSEARCH}/controller_manager/__init__.py	\
+  '${PYTHON_SYSLIBSEARCH}/controller_manager/__init__.py'	\
   $(foreach _,							\
 	controller_interface					\
 	rqt_controller_manager					\
@@ -107,6 +107,8 @@ SYSTEM_SEARCH.py-prf-ros-control=\
   'share/$_/cmake/$_Config.cmake'				\
   'lib/pkgconfig/$_.pc:/Version/s/[^0-9.]//gp')
 
+include ../../mk/sysdep/python.mk
+
 endif # PY_PRF_ROS_CONTROL_DEPEND_MK ----------------------------------------
 
 DEPEND_DEPTH:=		${DEPEND_DEPTH:+=}
diff --git a/prf-ros-controllers/DESCR b/py-prf-ros-controllers/DESCR
similarity index 100%
rename from prf-ros-controllers/DESCR
rename to py-prf-ros-controllers/DESCR
diff --git a/prf-ros-controllers/Makefile b/py-prf-ros-controllers/Makefile
similarity index 68%
rename from prf-ros-controllers/Makefile
rename to py-prf-ros-controllers/Makefile
index 8173346a89c0e1e8982acd55ae5377e050bd69a9..fea94ed150c0fc2fc3846270359f1e27134d9004 100644
--- a/prf-ros-controllers/Makefile
+++ b/py-prf-ros-controllers/Makefile
@@ -1,28 +1,34 @@
-# robotpkg Makefile for:	wip/prf-ros-controllers
+# robotpkg Makefile for:	wip/py-prf-ros-controllers
 # Created:			Olivier Stasse on Wed, 29 Mar 2017
 #
-ORG=		pal-robotics-forks
-VERSION=	0.3.15
-PRFNAME=	ros-controllers
-PKGBASE=	prf-${PRFNAME}
-PKGNAME=	${PKGBASE}-${VERSION}
-DISTNAME=	${VERSION}
-ROSNAME=	$(subst -,_,${PRFNAME})
-WRKSRC=		${WRKDIR}/${ROSNAME}-${VERSION}
-
-CATEGORIES=	wip
+
+ORG=			pal-robotics-forks
+VERSION=		0.3.15
+PRFNAME=		ros-controllers
+PKGBASE=		prf-${PRFNAME}
+PKGNAME=		${PKGTAG.python-}${PKGBASE}-${VERSION}
+DISTNAME=		${VERSION}
+ROSNAME=		$(subst -,_,${PRFNAME})
+WRKSRC=			${WRKDIR}/${ROSNAME}-${VERSION}
+PKGREVISION=		1
+
+# old package name and other Python versions
+CONFLICTS=		${PKGBBASE}-[0-9]*
+CONFLICTS+=		py[0-9][0-9]-${PKGBBASE}-[0-9]*
+CONFLICTS=		talos-ros-controllers
+
+CATEGORIES=		wip
+
 MASTER_REPOSITORY=	${MASTER_REPOSITORY_GITHUB}${ORG}/${NAME}.git
 CHECKOUT_VCS_OPTS+=	--recursive
 
-HOMEPAGE=	${MASTER_SITE_GITHUB:=${ORG}/${ROSNAME}}
-MASTER_SITES=	${HOMEPAGE}/archive/
-
-COMMENT=	Library of ros controllers
-LICENSE=	2-clause-bsd
+HOMEPAGE=		${MASTER_SITE_GITHUB:=${ORG}/${ROSNAME}}
+MASTER_SITES=		${HOMEPAGE}/archive/
+COMMENT=		Library of ros controllers
+LICENSE=		2-clause-bsd
 
-ROS_METAPKG=	yes
+ROS_METAPKG=		yes
 
-CONFLICTS=	talos-ros-controllers
 
 # Allows to have robotpkg ros packages with the highest priority
 # over system ros packages.
diff --git a/prf-ros-controllers/PLIST b/py-prf-ros-controllers/PLIST
similarity index 100%
rename from prf-ros-controllers/PLIST
rename to py-prf-ros-controllers/PLIST
diff --git a/py-prf-ros-controllers/depend.mk b/py-prf-ros-controllers/depend.mk
new file mode 100644
index 0000000000000000000000000000000000000000..5e896946246a0762b8d26aa5c5f4f420fd0ed996
--- /dev/null
+++ b/py-prf-ros-controllers/depend.mk
@@ -0,0 +1,33 @@
+# robotpkg depend.mk for:	wip/py-prf-ros-controllers
+# Created:			Olivier Stasse on Wed, 29 Mar 2017
+#
+
+DEPEND_DEPTH:=			${DEPEND_DEPTH}+
+PY_PRF_ROS_CONTROLLERS_DEPEND_MK:=	${PY_PRF_ROS_CONTROLLERS_DEPEND_MK}+
+
+ifeq (+,$(DEPEND_DEPTH))
+DEPEND_PKG+=			py-prf-ros-controllers
+endif
+
+ifeq (+,$(PY_PRF_ROS_CONTROLLERS_DEPEND_MK)) # ----------------------------------
+
+PREFER.ros-controllers?=	robotpkg
+
+DEPEND_USE+=			py-prf-ros-controllers
+
+DEPEND_ABI.py-prf-ros-controllers?=	${PKGTAG.python-}prf-ros-controllers>=0.2.8
+DEPEND_DIR.py-prf-ros-controllers?=	../../wip/py-prf-ros-controllers
+
+SYSTEM_SEARCH.py-prf-ros-controllers=\
+  'include/joint_state_controller/joint_state_controller.h'		\
+  'lib/libjoint_state_controller.so'					\
+  'share/joint_state_controller/package.xml:/<version>/s/[^0-9.]//gp'	\
+  'lib/pkgconfig/joint_state_controller.pc:/Version/s/[^0-9.]//gp'	\
+  'share/controller_interface/cmake/controller_interfaceConfig.cmake'	\
+  '${PYTHON_SYSLIBSEARCH}/diff_drive_controller/__init__.py'
+
+include ../../mk/sysdep/python.mk
+
+endif # PY_PRF_ROS_CONTROLLERS_DEPEND_MK ----------------------------------------
+
+DEPEND_DEPTH:=		${DEPEND_DEPTH:+=}
diff --git a/prf-ros-controllers/distinfo b/py-prf-ros-controllers/distinfo
similarity index 73%
rename from prf-ros-controllers/distinfo
rename to py-prf-ros-controllers/distinfo
index 9848a20c7f27502e506cef2783892d14db2a3c18..06ec3d197b8a0ce31e166da0bfd360d0515ce2ba 100644
--- a/prf-ros-controllers/distinfo
+++ b/py-prf-ros-controllers/distinfo
@@ -1,3 +1,4 @@
 SHA1 (0.3.15.tar.gz) = bfd6696e961f05a7a0957d2a3a28880071cd3318
 RMD160 (0.3.15.tar.gz) = 1d93e609e8d022d9d60f891dfc687fabe71e5346
 Size (0.3.15.tar.gz) = 484646 bytes
+SHA1 (patch-ab) = 6071abb0ea9918238ade52ebf0d145d8d8587b45
diff --git a/py-prf-ros-controllers/patches/patch-ab b/py-prf-ros-controllers/patches/patch-ab
new file mode 100644
index 0000000000000000000000000000000000000000..a24370ad2288110592ffe2c2e1f8d97cf27d65f2
--- /dev/null
+++ b/py-prf-ros-controllers/patches/patch-ab
@@ -0,0 +1,20 @@
+--- rqt_joint_trajectory_controller/src/rqt_joint_trajectory_controller/joint_trajectory_controller.py.orig	2019-09-09 10:34:01.000000000 +0200
++++ rqt_joint_trajectory_controller/src/rqt_joint_trajectory_controller/joint_trajectory_controller.py	2020-03-24 09:12:19.974060717 +0100
+@@ -25,6 +25,8 @@
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ # POSSIBILITY OF SUCH DAMAGE.
+ 
++from __future__ import print_function
++
+ import os
+ import rospy
+ import rospkg
+@@ -328,7 +330,7 @@
+         except:
+             # TODO: Can we do better than swallow the exception?
+             from sys import exc_info
+-            print 'Unexpected error:', exc_info()[0]
++            print('Unexpected error:', exc_info()[0])
+ 
+         # Enter monitor mode (sending commands disabled)
+         self._on_jtc_enabled(False)
diff --git a/py-roscontrol-sot/Makefile b/py-roscontrol-sot/Makefile
index b9cf3ca5f5d2f99ae4bb4f132827976428601379..06bfcda1a2552d4bc011f9473ae57043666346c0 100644
--- a/py-roscontrol-sot/Makefile
+++ b/py-roscontrol-sot/Makefile
@@ -61,12 +61,12 @@ ifeq (erbium,${PREFER.pal-distro})
   else
     include ../../wip/pal-hardware-interfaces/depend.mk
     include ../../wip/py-prf-ros-control/depend.mk
-    include ../../wip/prf-ros-controllers/depend.mk
+    include ../../wip/py-prf-ros-controllers/depend.mk
   endif
 else
   include ../../wip/pal-hardware-interfaces/depend.mk
   include ../../wip/py-prf-ros-control/depend.mk
-  include ../../wip/prf-ros-controllers/depend.mk
+  include ../../wip/py-prf-ros-controllers/depend.mk
 endif
 
 
diff --git a/talos-metapkg-ros-control-sot/Makefile b/talos-metapkg-ros-control-sot/Makefile
index 1a5f9d85054bf6f12c64c4b3ef5e6a96dc9c3b7f..96e16da604b763164223539057664a67c0057464 100644
--- a/talos-metapkg-ros-control-sot/Makefile
+++ b/talos-metapkg-ros-control-sot/Makefile
@@ -43,7 +43,7 @@ ifeq (erbium,${PREFER.pal-distro})
     CMAKE_PREFIX_PATH+=/opt/pal/erbium
   else
     include ../../wip/pal-hardware-interfaces/depend.mk
-    include ../../wip/prf-ros-controllers/depend.mk
+    include ../../wip/py-prf-ros-controllers/depend.mk
     include ../../motion/ros-control-toolbox/depend.mk
   endif
 
@@ -53,7 +53,7 @@ displaytalosmetapkg:
 
 else
   include ../../wip/pal-hardware-interfaces/depend.mk
-  include ../../wip/prf-ros-controllers/depend.mk
+  include ../../wip/py-prf-ros-controllers/depend.mk
   include ../../motion/ros-control-toolbox/depend.mk
 
 displaytalosmetapkg:
diff --git a/talos-simulation/Makefile b/talos-simulation/Makefile
index 505e46bc324ff87fbf4d609a39b6bb212035ad2c..666a6f250f89ae6815a02caa3f9dc78427318daa 100644
--- a/talos-simulation/Makefile
+++ b/talos-simulation/Makefile
@@ -62,7 +62,7 @@ endif
 include ../../wip/talos-robot/depend.mk
 include ../../wip/talos-moveit-config/depend.mk
 include ../../wip/prf-roboticsgroup-gazebo-plugins/depend.mk
-include ../../wip/prf-ros-controllers/depend.mk
+include ../../wip/py-prf-ros-controllers/depend.mk
 ifeq (xenial,${UBUNTUDISTRO})
   include ../../wip/pal-gazebo-plugins/depend.mk
 else
diff --git a/tiago-description-calibration/Makefile b/tiago-description-calibration/Makefile
index dc2a718a3789f43938a67b74e463631389cf81d1..f08f75e22ba4adfff5985459f28549dfc51d70cf 100644
--- a/tiago-description-calibration/Makefile
+++ b/tiago-description-calibration/Makefile
@@ -41,7 +41,7 @@ else
   include ../../wip/pal-gazebo-plugins-melodic/depend.mk
   include ../../wip/pal-hardware-gazebo-melodic/depend.mk
 endif
-include ../../wip/prf-ros-controllers/depend.mk
+include ../../wip/py-prf-ros-controllers/depend.mk
 include ../../wip/tiago-moveit-config/depend.mk
 include ../../wip/play-motion/depend.mk
 include ../../mk/language/c++.mk
diff --git a/tiago-metapkg-ros-control-sot/Makefile b/tiago-metapkg-ros-control-sot/Makefile
index 20484d5cbafdf71a7f4a6acc6afef744095c6241..4851c4a7ff3661623df8050d56eea6f190b2383b 100644
--- a/tiago-metapkg-ros-control-sot/Makefile
+++ b/tiago-metapkg-ros-control-sot/Makefile
@@ -42,7 +42,7 @@ ifeq (erbium,${PREFER.pal-distro})
     CMAKE_PREFIX_PATH+=/opt/pal/erbium
   else
     include ../../wip/pal-hardware-interfaces/depend.mk
-    include ../../wip/prf-ros-controllers/depend.mk
+    include ../../wip/py-prf-ros-controllers/depend.mk
     include ../../motion/ros-control-toolbox/depend.mk
   endif
 
@@ -52,7 +52,7 @@ displaytiagometapkg:
 
 else
   include ../../wip/pal-hardware-interfaces/depend.mk
-  include ../../wip/prf-ros-controllers/depend.mk
+  include ../../wip/py-prf-ros-controllers/depend.mk
   include ../../motion/ros-control-toolbox/depend.mk
 
 displaytiagometapkg:
diff --git a/tiago-simulation/Makefile b/tiago-simulation/Makefile
index 1d0a223edd54e32754955aa0f8b928c297bcd592..8f9a8b5cd78478e77169c21507652b9bf82789ce 100644
--- a/tiago-simulation/Makefile
+++ b/tiago-simulation/Makefile
@@ -43,7 +43,7 @@ else
   include ../../wip/pal-hardware-gazebo-melodic/depend.mk
 endif
 include ../../wip/pal-gazebo-worlds/depend.mk
-include ../../wip/prf-ros-controllers/depend.mk
+include ../../wip/py-prf-ros-controllers/depend.mk
 include ../../wip/tiago-moveit-config/depend.mk
 include ../../wip/tiago-description-calibration/depend.mk
 include ../../wip/simple-grasping-action/depend.mk
diff --git a/tiago-tutorials/Makefile b/tiago-tutorials/Makefile
index 1276dd9c34aa8a73d02507aa650a673307b04c72..dc30de137da53d8d1bb3f08b8bc2ca26ec77c8ff 100644
--- a/tiago-tutorials/Makefile
+++ b/tiago-tutorials/Makefile
@@ -45,7 +45,7 @@ else
 endif
 include ../../wip/pal-msgs/depend.mk
 include ../../wip/play-motion/depend.mk
-include ../../wip/prf-ros-controllers/depend.mk
+include ../../wip/py-prf-ros-controllers/depend.mk
 include ../../wip/tiago-moveit-config/depend.mk
 include ../../wip/play-motion/depend.mk
 include ../../mk/language/c++.mk