diff --git a/sot-dynamic-pinocchio-v3/Makefile b/sot-dynamic-pinocchio-v3/Makefile
index d664fc0564d516e87da56a4e479cd9d3b335b2b1..0362a5d8c4a5d465903db28b2c32d28cb60ddc5b 100644
--- a/sot-dynamic-pinocchio-v3/Makefile
+++ b/sot-dynamic-pinocchio-v3/Makefile
@@ -3,7 +3,7 @@
 #
 
 VERSION=		3.1.1
-PKGREVISION=		1
+PKGREVISION=		2
 DISTNAME=		sot-dynamic-pinocchio-v3-${VERSION}
 MASTER_SITES=		${MASTER_SITE_OPENROBOTS:=sot-dynamic-pinocchio-v3/}
 MASTER_REPOSITORY=	${MASTER_REPOSITORY_GITHUB}proyan/sot-dynamic/
diff --git a/sot-dynamic-pinocchio-v3/distinfo b/sot-dynamic-pinocchio-v3/distinfo
index c87b770b08a18866915384c9258b28316ac265fb..124cca11c440b4940d28a92b2385c8a04005a1bf 100644
--- a/sot-dynamic-pinocchio-v3/distinfo
+++ b/sot-dynamic-pinocchio-v3/distinfo
@@ -3,3 +3,4 @@ RMD160 (sot-dynamic-pinocchio-v3-3.1.1.tar.gz) = beddcd9fae060cbf371b80075978e20
 Size (sot-dynamic-pinocchio-v3-3.1.1.tar.gz) = 922041 bytes
 SHA1 (patch-aa) = c57a914a6fc1140f348dec8c1cd2627c79a4de7d
 SHA1 (patch-ab) = 70878ef8071dfce1eddb895b35e3cdb4942a848f
+SHA1 (patch-ac) = deb468df72d57de00d079edfbec8725f292fd8b5
diff --git a/sot-dynamic-pinocchio-v3/patches/patch-ac b/sot-dynamic-pinocchio-v3/patches/patch-ac
new file mode 100644
index 0000000000000000000000000000000000000000..201abe2ecb448107de6ab3708e944167922ae8ee
--- /dev/null
+++ b/sot-dynamic-pinocchio-v3/patches/patch-ac
@@ -0,0 +1,116 @@
+--- src/python-module-py.cpp	2016-11-08 11:38:20.163431833 +0100
++++ src/python-module-py.cpp	2016-11-08 11:14:03.243064192 +0100
+@@ -26,54 +26,11 @@
+ namespace dynamicgraph{
+   namespace sot{
+ 
+-    /*    PyObject* getPinocchioModel(PyObject* // self
+-				,PyObject* args) {
+-      PyObject* object = NULL;
+-      void* pointer = NULL;
+-      
+-      if (!PyArg_ParseTuple(args, "O", &object))
+-	return NULL;
+-      
+-      if (!PyCObject_Check(object)) {
+-	PyErr_SetString(PyExc_TypeError,
+-			"function takes a PyCObject as argument");
+-	return NULL;
+-      }
+-      
+-      pointer = PyCObject_AsVoidPtr(object);
+-      Dynamic* dyn_entity = (Dynamic*) pointer;
+-      
+-      se3::Model* model_ptr = NULL;
+-      
+-      try {
+-      model_ptr = dyn_entity->m_model;
+-      se3::python::ModelHandler& _model(& (dyn_entity->m_model));	
+-      }
+-      catch (const std::exception& exc) {
+-      PyErr_SetString(dgpyError, exc.what());			
+-      return NULL;						
+-      }								
+-      catch (const char* s) {								
+-      PyErr_SetString(dgpyError, s);
+-      return NULL;
+-      }
+-      catch (...) {
+-	    PyErr_SetString(dgpyError, "Unknown exception");		
+-	    return NULL;						
+-	    }
+-	    //CATCH_ALL_EXCEPTIONS();
+-	    
+-	    // Return the pointer to the signal without destructor since the signal
+-	    // is not owned by the calling object but by the Entity.
+-	    //return boost::python::incref();
+-	    return PyCObject_FromVoidPtr((void*)model_ptr, NULL);
+-    }
+-    */
+-
+     PyObject* setPinocchioModel(PyObject* /* self */,PyObject* args) {
+       PyObject* object = NULL;
+       PyObject* pyPinocchioObject;
+       void* pointer1 = NULL;
++      se3::Model* pointer2 = NULL;
+       if (!PyArg_ParseTuple(args, "OO", &object, &pyPinocchioObject))
+ 	return NULL;
+ 
+@@ -87,10 +44,9 @@
+       Dynamic* dyn_entity = (Dynamic*) pointer1;
+ 
+       try {
+-	se3::python::Handler<se3::Model> cppModelHandle = 
+-	  boost::python::extract< se3::python::Handler<se3::Model> >(pyPinocchioObject);
+-	dyn_entity->setModel(cppModelHandle.ptr());
+-	//dyn_entity->m_model = cppModelHandle.ptr();
++	boost::python::extract<se3::Model&> cppHandle(pyPinocchioObject);
++	pointer2 = (se3::Model*) &cppHandle();
++	dyn_entity->setModel(pointer2);
+       }
+       catch (const std::exception& exc) {
+ 	//PyErr_SetString(dgpyError, exc.what());
+@@ -104,9 +60,7 @@
+ 	//PyErr_SetString(dgpyError, "Unknown exception");
+ 	return NULL;						
+       }
+-      // Return the pointer to the signal without destructor since the signal
+-      // is not owned by the calling object but by the Entity.
+-      //return boost::python::incref();
++      
+       return Py_BuildValue("");
+     }
+ 
+@@ -114,6 +68,7 @@
+       PyObject* object = NULL;
+       PyObject* pyPinocchioObject;
+       void* pointer1 = NULL;
++      se3::Data* pointer2 = NULL;
+       if (!PyArg_ParseTuple(args, "OO", &object, &pyPinocchioObject))
+ 	return NULL;
+ 
+@@ -127,10 +82,9 @@
+       Dynamic* dyn_entity = (Dynamic*) pointer1;
+ 
+       try {
+-	se3::python::Handler<se3::Data> cppDataHandle = 
+-	  boost::python::extract< se3::python::Handler<se3::Data> >(pyPinocchioObject);
+-	dyn_entity->setData(cppDataHandle.ptr());
+-	//dyn_entity->m_data = cppDataHandle.ptr();
++	boost::python::extract<se3::Data&> cppHandle(pyPinocchioObject);
++	pointer2 = (se3::Data*) &cppHandle();
++	dyn_entity->setData(pointer2);
+       }
+       catch (const std::exception& exc) {
+ 	//	PyErr_SetString(dgpyError, exc.what());			
+@@ -144,9 +98,7 @@
+ 	//	PyErr_SetString(dgpyError, "Unknown exception");		
+ 	return NULL;						
+       }
+-      // Return the pointer to the signal without destructor since the signal
+-      // is not owned by the calling object but by the Entity.
+-      //return boost::python::incref();
++
+       return Py_BuildValue("");
+     }
+   }