diff --git a/include/iri_ros_tools/module.h b/include/iri_ros_tools/module.h
index 55513f4ce838ecdc1b2299e9f1bb02f5af98dcbe..db73bb10c1e692b152419f9b4c621f4756106bc5 100644
--- a/include/iri_ros_tools/module.h
+++ b/include/iri_ros_tools/module.h
@@ -123,6 +123,10 @@ class CModule
       * start_operation() functions is called. This function monitors the
       * internal event to know when it has to stop, and calls the state_machine()
       * function at the desired rate.
+      *
+      * \param name string with the desired name for the action.
+      *
+      * \param namespace string with the base namespace for the action.
       */
     static void *module_thread(void *param);
     /**
@@ -194,7 +198,7 @@ class CModule
       *
       * \param namespace string with the base namespace for the module.
       */
-    CModule(const std::string &name);
+    CModule(const std::string &name,const std::string &name_space=std::string(""));
     /**
       * \brief Function to set the rate
       *
@@ -224,26 +228,6 @@ class CModule
       * \return the name of the module.
       */
     std::string get_name(void);
-    /**
-      * \brief
-      *
-      */
-    bool set_parameter(ros::ServiceClient &service,const std::string &name,bool value);
-    /**
-      * \brief
-      *
-      */
-    bool set_parameter(ros::ServiceClient &service,const std::string &name,int value);
-    /**
-      * \brief
-      *
-      */
-    bool set_parameter(ros::ServiceClient &service,const std::string &name,std::string &value);
-    /**
-      * \brief
-      *
-      */
-    bool set_parameter(ros::ServiceClient &service,const std::string &name,double value);
     /**
       * \brief Destructor
       *
@@ -254,10 +238,10 @@ class CModule
 };
 
 template<class ModuleCfg>
-CModule<ModuleCfg>::CModule(const std::string &name) : 
+CModule<ModuleCfg>::CModule(const std::string &name,const std::string &name_space) : 
   module_rate(MODULE_DEFAULT_RATE), 
   dyn_reconf(module_nh),
-  module_nh(ros::this_node::getName(),name)
+  module_nh(ros::this_node::getName()+"/"+name_space+"/"+name)
 {
   try
   {
@@ -268,7 +252,7 @@ CModule<ModuleCfg>::CModule(const std::string &name) :
     this->module_thread_id=name+"_module_thread";
     this->thread_server->create_thread(this->module_thread_id);
     this->thread_server->attach_thread(this->module_thread_id,this->module_thread,this);
-    this->name=name;
+    this->name=this->module_nh.getNamespace()+"/"+name;
   }
   catch (CException &ex)
   {
@@ -341,202 +325,6 @@ void CModule<ModuleCfg>::unlock(void)
   this->module_access.exit();
 }
 
-template<class ModuleCfg>
-bool CModule<ModuleCfg>::set_parameter(ros::ServiceClient &service,const std::string &name,bool value)
-{
-  unsigned int i=0;
-  bool changed=true,call_status;
-  dynamic_reconfigure::Reconfigure set_params_srv;
-
-  ROS_DEBUG_STREAM("CModule::set_parameter: Sending new request on service " << service.getService());
-  ROS_DEBUG_STREAM("CModule::set boolean parameter " << name << " to " << value);
-
-  this->module_access.enter();
-  set_params_srv.request.config.bools.resize(1);
-  set_params_srv.request.config.bools[0].name=name;
-  set_params_srv.request.config.bools[0].value=value;
-  call_status=service.call(set_params_srv);
-  if(call_status)
-  {
-    for(i=0;i<set_params_srv.response.config.bools.size();i++)
-    {
-      if(set_params_srv.response.config.bools[i].name==name)
-      {
-        if(set_params_srv.response.config.bools[i].value!=value)
-        {
-          changed=false;
-          break;
-        }
-      }
-    }
-    if(changed)
-    {
-      ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << service.getService());
-      this->module_access.exit();
-      return true;
-    }
-    else
-    {
-      ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-      this->module_access.exit();
-      return false;
-    }
-  }
-  else
-  {
-    ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-    this->module_access.exit();
-    return false;
-  }
-}
-
-template<class ModuleCfg>
-bool CModule<ModuleCfg>::set_parameter(ros::ServiceClient &service,const std::string &name,int value)
-{
-  unsigned int i=0;
-  bool changed=true,call_status;
-  dynamic_reconfigure::Reconfigure set_params_srv;
-
-  ROS_DEBUG_STREAM("CModule::set_parameter: Sending new request on service " << service.getService());
-  ROS_DEBUG_STREAM("CModule::set integer parameter " << name << " to " << value);
-
-  this->module_access.enter();
-  set_params_srv.request.config.ints.resize(1);
-  set_params_srv.request.config.ints[0].name=name;
-  set_params_srv.request.config.ints[0].value=value;
-  call_status=service.call(set_params_srv);
-  if(call_status)
-  {
-    for(i=0;i<set_params_srv.response.config.ints.size();i++)
-    {
-      if(set_params_srv.response.config.ints[i].name==name)
-      {
-        if(set_params_srv.response.config.ints[i].value!=value)
-        {
-          changed=false;
-          break;
-        }
-      }
-    }
-    if(changed)
-    {
-      ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << service.getService());
-      this->module_access.exit();
-      return true;
-    }
-    else
-    {
-      ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-      this->module_access.exit();
-      return false;
-    }
-  }
-  else
-  {
-    ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-    this->module_access.exit();
-    return false;
-  }
-}
-
-template<class ModuleCfg>
-bool CModule<ModuleCfg>::set_parameter(ros::ServiceClient &service,const std::string &name,std::string &value)
-{
-  unsigned int i=0;
-  bool changed=true,call_status;
-  dynamic_reconfigure::Reconfigure set_params_srv;
-
-  ROS_DEBUG_STREAM("CModule::set_parameter: Sending new request on service " << service.getService());
-  ROS_DEBUG_STREAM("CModule::set string parameter " << name << " to " << value);
-
-  this->module_access.enter();
-  set_params_srv.request.config.strs.resize(1);
-  set_params_srv.request.config.strs[0].name=name;
-  set_params_srv.request.config.strs[0].value=value;
-  call_status=service.call(set_params_srv);
-  if(call_status)
-  {
-    for(i=0;i<set_params_srv.response.config.strs.size();i++)
-    {
-      if(set_params_srv.response.config.strs[i].name==name)
-      {
-        if(set_params_srv.response.config.strs[i].value!=value)
-        {
-          changed=false;
-          break;
-        }
-      }
-    }
-    if(changed)
-    {
-      ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << service.getService());
-      this->module_access.exit();
-      return true;
-    }
-    else
-    {
-      ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-      this->module_access.exit();
-      return false;
-    }
-  }
-  else
-  {
-    ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-    this->module_access.exit();
-    return false;
-  }
-}
-
-template<class ModuleCfg>
-bool CModule<ModuleCfg>::set_parameter(ros::ServiceClient &service,const std::string &name,double value)
-{
-  unsigned int i=0;
-  bool changed=true,call_status;
-  dynamic_reconfigure::Reconfigure set_params_srv;
-
-  ROS_DEBUG_STREAM("CModule::set_parameter: Sending new request on service " << service.getService());
-  ROS_DEBUG_STREAM("CModule::set double parameter " << name << " to " << value);
-
-  this->module_access.enter();
-  set_params_srv.request.config.doubles.resize(1);
-  set_params_srv.request.config.doubles[0].name=name;
-  set_params_srv.request.config.doubles[0].value=value;
-  call_status=service.call(set_params_srv);
-  if(call_status)
-  {
-    for(i=0;i<set_params_srv.response.config.doubles.size();i++)
-    {
-      if(set_params_srv.response.config.doubles[i].name==name)
-      {
-        if(set_params_srv.response.config.doubles[i].value!=value)
-        {
-          changed=false;
-          break;
-        }
-      }
-    }
-    if(changed)
-    {
-      ROS_DEBUG_STREAM("CModule::set_parameters: Request successfull on server: " << service.getService());
-      this->module_access.exit();
-      return true;
-    }
-    else
-    {
-      ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-      this->module_access.exit();
-      return false;
-    }
-  }
-  else
-  {
-    ROS_ERROR_STREAM("CModule::set_parameters: Request failed on server: " << service.getService());
-    this->module_access.exit();
-    return false;
-  }
-}
-
 template<class ModuleCfg>
 CModule<ModuleCfg>::~CModule()
 {
diff --git a/include/iri_ros_tools/module_action.h b/include/iri_ros_tools/module_action.h
index c282d2125dfac52d9ddb799a5f67edbdddab28d5..788e269c6362aabdc075cb46f8bb9343d58e44b6 100644
--- a/include/iri_ros_tools/module_action.h
+++ b/include/iri_ros_tools/module_action.h
@@ -314,8 +314,11 @@ class CModuleAction
       * This function enables the internal action timeout to limit the maximum 
       * time the action can be active without finishing properly. By default 
       * this feature is disabled.
+      *
+      * \param time_s the desired maximum ammount of time the action can be 
+      *               active before reporting and error.
       */
-    void enable_timeout(void);
+    void enable_timeout(double time_s);
     /**
       * \brief Disables the action timeout
       * 
@@ -324,12 +327,6 @@ class CModuleAction
       * this feature is disabled.
       */
     void disable_timeout(void); 
-    /**
-      * \brief 
-      * 
-      * TODO: do it automatically in the make_request function
-      */
-    void start_timeout(double time_s);
     /**
       * \brief Updates the current timeout value
       * 
@@ -406,6 +403,11 @@ class CModuleAction
                     boost::bind(&CModuleAction<action_ros>::action_feedback, this, _1));
         this->feedback_watchdog.reset(ros::Duration(this->watchdog_time));
         this->status=ACTION_RUNNING;
+        if(this->use_timeout)
+        {
+          if(this->timeout_value>0.0)
+            this->action_timeout.start(ros::Duration(this->timeout_value));
+        }
         ROS_DEBUG_STREAM("CModuleAction::make_request: Goal Sent to server " << this->name << ". Wait for Result!");
         return ACT_SRV_SUCCESS;
       }
@@ -497,7 +499,7 @@ CModuleAction<action_ros>::CModuleAction(const std::string &name,const std::stri
 {
   std::size_t position;
 
-  this->name=name;
+  this->name=this->nh.getNamespace()+"/"+name;
   this->status=ACTION_IDLE;
   // retry control
   this->current_num_retries=0;
@@ -505,6 +507,7 @@ CModuleAction<action_ros>::CModuleAction(const std::string &name,const std::stri
   // assign the full service name
   // timeouts
   this->use_timeout=false;
+  this->timeout_value=0.0;
   this->timeout_value=DEFAULT_ACTION_TIMEOUT;
   // waychdog
   this->watchdog_time=DEFAULT_WATCHDOG_TIME;
@@ -571,10 +574,19 @@ bool CModuleAction<action_ros>::is_watchdog_active(void)
 }
 
 template<class action_ros>
-void CModuleAction<action_ros>::enable_timeout(void)
+void CModuleAction<action_ros>::enable_timeout(double time_s)
 {
   this->action_access.enter();
-  this->use_timeout=true;
+  if(time_s>0.0)
+  {
+    this->timeout_value=time_s;
+    this->use_timeout=true;
+  }
+  else
+  {
+    this->action_access.exit();
+    throw CModuleException(_HERE_,"Invalid timeout value",this->name);
+  }
   this->action_access.exit();
 }
 
@@ -586,26 +598,6 @@ void CModuleAction<action_ros>::disable_timeout(void)
   this->action_access.exit();
 }
 
-template<class action_ros>
-void CModuleAction<action_ros>::start_timeout(double time_s)
-{
-  this->action_access.enter();
-  if(this->use_timeout)
-  {
-    if(time_s>0.0)
-    {
-      this->timeout_value=time_s;
-      this->action_timeout.start(ros::Duration(time_s));
-    }
-    else
-    {
-      this->action_access.exit();
-      throw CModuleException(_HERE_,"Invalid timeout value",this->name);
-    }
-  }
-  this->action_access.exit();
-}
-
 template<class action_ros>
 void CModuleAction<action_ros>::update_timeout(double time_s)
 {
@@ -666,7 +658,11 @@ std::string CModuleAction<action_ros>::get_name(void)
 template<class action_ros>
 void CModuleAction<action_ros>::cancel(void)
 {
-  this->action_client->cancelGoal();
+  actionlib::SimpleClientGoalState action_state(actionlib::SimpleClientGoalState::PENDING);
+  
+  action_state=action_client->getState();
+  if(action_state==actionlib::SimpleClientGoalState::ACTIVE)
+    this->action_client->cancelGoal();
 }
 
 template<class action_ros>
diff --git a/include/iri_ros_tools/module_service.h b/include/iri_ros_tools/module_service.h
index 776ccfcb9a69e4027c976f21a6dffc1013326976..518a927d6771379445aa7022f3fb48204644f250 100644
--- a/include/iri_ros_tools/module_service.h
+++ b/include/iri_ros_tools/module_service.h
@@ -177,7 +177,7 @@ CModuleService<service_msg>::CModuleService(const std::string &name,const std::s
   this->max_num_retries=DEFAULT_SERVICE_MAX_RETRIES;
   this->service_client=this->nh.template serviceClient<service_msg>(name); 
   // assign the full service name
-  this->name=name;
+  this->name=this->nh.getNamespace()+"/"+name;
   // assign the default check function
   this->call_successfull=boost::bind(&CModuleService::default_call_check, this, _1);
 }