diff --git a/include/sot-dyninv/commands-helper.h b/include/sot-dyninv/commands-helper.h
index d9d35c5df105282b81abc62b3b360d671d96e727..e9e2502689c51a741212dba09f1e63c3d8af7ea1 100644
--- a/include/sot-dyninv/commands-helper.h
+++ b/include/sot-dyninv/commands-helper.h
@@ -30,7 +30,7 @@ namespace dynamicgraph {
 
 
     template <class E, typename T>
-    class DirectGetter
+      class DirectGetter
       : public Command
     {
     public:
@@ -38,10 +38,10 @@ namespace dynamicgraph {
       typedef T (E::*GetterMethod) () const;
 
       /// Constructor
-      DirectGetter(E& entity,T* ptr,
-		   const std::string& docString)
-	: Command(entity, std::vector<Value::Type>(), docString),
-	  T_ptr(ptr) {}
+    DirectGetter(E& entity,T* ptr,
+		 const std::string& docString)
+      : Command(entity, std::vector<Value::Type>(), docString),
+	T_ptr(ptr) {}
 
     protected:
       virtual Value doExecute() { return Value(*T_ptr); }
@@ -50,16 +50,16 @@ namespace dynamicgraph {
     };
 
     template <class E, typename T>
-    DirectGetter<E,T>*
-    makeDirectGetter( E& entity,T* ptr,
-		      const std::string& docString)
-    { return  new DirectGetter<E,T>(entity,ptr,docString); }
+      DirectGetter<E,T>*
+      makeDirectGetter( E& entity,T* ptr,
+			const std::string& docString)
+      { return  new DirectGetter<E,T>(entity,ptr,docString); }
 
     std::string docDirectGetter( const std::string& name,
 				 const std::string& type )
-    {
-      return std::string("\nGet the ")+name+".\n\nNo input.\nReturn an "+type+".\n\n";
-    }
+      {
+	return std::string("\nGet the ")+name+".\n\nNo input.\nReturn an "+type+".\n\n";
+      }
 
   } // namespace command
 } // namespace dynamicgraph
@@ -69,35 +69,26 @@ namespace dynamicgraph {
 namespace dynamicgraph {
   namespace command {
 
-    template <class E, typename T>
-    class DirectSetter
-      : public Command
-    {
-    public:
-      DirectSetter(E& entity,T* ptr,const std::string& docString);
-      typedef void (E::*SetterMethod) (const int&);
 
-    protected:
-      virtual Value doExecute()
+    template< typename T >
+      struct ValueHelper
       {
-	const std::vector<Value>& values = getParameterValues();
-	T val = values[0].value();
-	return (*T_ptr) = val;
-      }
-    private:
-      T* T_ptr;
-    };
+	static const Value::Type TypeID;
+      };
+
+    template<>
+      const Value::Type ValueHelper<int>::TypeID = Value::INT;
 
-    template <class E>
-      class DirectSetter<E,int>
+
+    template <class E, typename T, Value::Type TYPEID>
+      class DirectSetter
       : public Command
     {
-      typedef int T;
     public:
     DirectSetter(E& entity,T* ptr,const std::string& docString)
-      :Command(entity, boost::assign::list_of(Value::INT), docString)
+      :Command(entity, boost::assign::list_of(TYPEID), docString)
 	,T_ptr(ptr)
-	{}
+      {}
 
     protected:
       virtual Value doExecute()
@@ -111,23 +102,39 @@ namespace dynamicgraph {
       T* T_ptr;
     };
 
-    template <class E, typename T>
-    DirectSetter<E,T>*
-    makeDirectSetter( E& entity,T* ptr,
-		      const std::string& docString)
-    { return  new DirectSetter<E,T>(entity,ptr,docString); }
+
+
+    template <Value::Type TYPEID,class E, typename T>
+      DirectSetter<E,T,TYPEID>*
+      makeDirectSetter( E& entity,T* ptr,
+			const std::string& docString)
+      { return  new DirectSetter<E,T,TYPEID>(entity,ptr,docString); }
 
     std::string docDirectSetter( const std::string& name,
 				 const std::string& type )
-    {
-      return std::string("\nSet the ")+name+".\n\nInput:\n - a "
-	+type+".\nVoid return.\n\n";
-    }
+      {
+	return std::string("\nSet the ")+name+".\n\nInput:\n - a "
+	  +type+".\nVoid return.\n\n";
+      }
 
   } // namespace command
 } // namespace dynamicgraph
 
 
+
+/* --- HELPER --------------------------------------------------------------- */
+namespace sot {
+  namespace dyninv {
+    using ::dynamicgraph::command::Value;
+    using ::dynamicgraph::command::makeDirectGetter;
+    using ::dynamicgraph::command::docDirectGetter;
+    using ::dynamicgraph::command::makeDirectSetter;
+    using ::dynamicgraph::command::docDirectSetter;
+  } // namespace dyninv
+} // namespace sot
+
+
+
 #endif // __sot_dyninv_commands_helper_H__
 
 
diff --git a/include/sot-dyninv/controller-pd.h b/include/sot-dyninv/controller-pd.h
index a0f2bf102a578bc96963f170348b05d56838f51a..8cb63768b0a7ca88414996c492e3ed8614017f64 100644
--- a/include/sot-dyninv/controller-pd.h
+++ b/include/sot-dyninv/controller-pd.h
@@ -37,6 +37,7 @@
 
 /* SOT */
 #include <sot-dyninv/signal-helper.h>
+#include <sot-dyninv/entity-helper.h>
 
 
 
@@ -47,8 +48,10 @@ namespace sot {
   /* --- CLASS ----------------------------------------------------------- */
   /* --------------------------------------------------------------------- */
 
+
   class SOTCONTROLLERPD_EXPORT ControllerPD
     :public ::dynamicgraph::Entity
+      ,public ::dynamicgraph::EntityHelper<ControllerPD>
       {
 
       public: /* --- CONSTRUCTOR ---- */
diff --git a/src/controller-pd.cpp b/src/controller-pd.cpp
index 838841c52389fe061af98b9158d98f1e8c01f236..d95590b34b8825809580099f6a757be3b32621c0 100644
--- a/src/controller-pd.cpp
+++ b/src/controller-pd.cpp
@@ -28,10 +28,6 @@ namespace sot
 
     namespace dg = ::dynamicgraph;
     using namespace dg;
-    using ::dynamicgraph::command::makeDirectGetter;
-    using ::dynamicgraph::command::docDirectGetter;
-    using ::dynamicgraph::command::makeDirectSetter;
-    using ::dynamicgraph::command::docDirectSetter;
 
     /* --- DG FACTORY ------------------------------------------------------- */
     DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(ControllerPD,"ControllerPD");
@@ -50,28 +46,21 @@ namespace sot
       ,CONSTRUCT_SIGNAL_IN(velocity,ml::Vector)
       ,CONSTRUCT_SIGNAL_IN(velocityRef,ml::Vector)
 
-      ,CONSTRUCT_SIGNAL_OUT(control,ml::Vector,ControllerPD,
-			    KpSIN << KdSIN << positionSIN << positionRefSIN
-			    << velocitySIN << velocityRefSIN )
+      ,CONSTRUCT_SIGNAL_OUT(control,ml::Vector,
+       			    KpSIN << KdSIN << positionSIN << positionRefSIN
+       			    << velocitySIN << velocityRefSIN )
     {
       Entity::signalRegistration( KpSIN << KdSIN << positionSIN << positionRefSIN
 				  << velocitySIN << velocityRefSIN
 				  << controlSOUT );
 
-
       /* Commands. */
       addCommand("getSize",
 		 makeDirectGetter(*this,&_dimension,
 				  docDirectGetter("dimension","int")));
 
-      // std::string docstring
-      // 		 = "\nSet the vectors dimension.\n\nInput:\n- an int.\nVoid return.\n\n";
-      // addCommand("setSize",
-      // 		 new ::dynamicgraph::command::Setter<ControllerPD,int>
-      // 		 (*this, &ControllerPD::size,docstring));
-
       addCommand("setSize",
-		 makeDirectSetter(*this, &_dimension,
+		 makeDirectSetter<Value::INT>(*this, &_dimension,
 				  docDirectSetter("dimension","int")));
     }