diff --git a/include/iri_ros_tools/module_action.h b/include/iri_ros_tools/module_action.h
index 48fce49dad36665d93293a4e580f53ddc37f4d72..1aa80dbf13c8ca0e9511b1c1de5f164d8787c48e 100644
--- a/include/iri_ros_tools/module_action.h
+++ b/include/iri_ros_tools/module_action.h
@@ -116,7 +116,7 @@ class CModuleAction
       * \brief Use the timeout feature
       * 
       * This attribute specifies whether the timeout feature is to be used to limit
-      * the amount of time the action is active or not. Its value is controlles by
+      * the amount of time the action is active or not. Its value is controlled by
       * the enable_timeout() and disable_timeout() functions.
       *
       * To check whether the timeout is active or not, use the is_timeout_enabled()
@@ -139,6 +139,17 @@ class CModuleAction
       */
     CROSTimeout action_timeout;
     // watchdog attributes
+    /**
+      * \brief Use the watchdog feature
+      * 
+      * This attribute specifies whether the watchdog feature is to be used to limit
+      * the amount of time between action feedback messages. Its value is controlled by
+      * the enable_watchdog() and disable_watchdog() functions.
+      *
+      * To check whether the watchdog is active or not, use the is_watchdog_enabled()
+      * function.
+      */
+    bool use_watchdog;
     /**
       * \brief Maximum time between feedback messages
       * 
@@ -250,7 +261,8 @@ class CModuleAction
       ROS_DEBUG_STREAM("CModuleAction::action_feedback: Got Feedback from server " << this->name << "!");
       this->action_access.enter();
       this->action_feedback_msg=*feedback;
-      this->feedback_watchdog.reset(ros::Duration(this->watchdog_time));
+      if(this->use_watchdog)
+        this->feedback_watchdog.reset(ros::Duration(this->watchdog_time));
       this->action_access.exit();
     }
   public:
@@ -287,16 +299,34 @@ class CModuleAction
       */
     unsigned int get_max_num_retries(void);
     /**
-      * \brief Sets the feedback watchdog time
+      * \brief Enables the actiin feedback watchdog
       * 
-      * This functions sets the maximum allowed time between two consecutive 
-      * feedback messages before reporting an error. By default this value is
-      * set to 2.
+      * This function enables the internal action feedback watchdog to limit 
+      * the maximum time between feedback messages. By default this feature is 
+      * enabled.
+      *
+      * \param time_s the desired maximum time between feedback messages before 
+      *               reporting and error.
+      */
+    void enable_watchdog(double time_s);
+    /**
+      * \brief Disables the action feedback watchdog
+      * 
+      * This function disables the internal action feedback watchdog to limit 
+      * the maximum time between feedback messgaes. By default this feature is 
+      * enabled.
+      */
+    void disable_watchdog(void);
+    /**
+      * \brief Checks whether the feedback watchdog is enabled or not
+      * 
+      * This functions checks whether the internal feedback watchdog for the current
+      * action is enabled or not.
       *
-      * \param time_s the maximum allowed time in seconds between two consecutive 
-      *               feedback messages.
+      * \return A boolean indicating whether the watchdog is enabled (true) or not
+      *         (false)
       */
-    void set_feedback_watchdog_time(double time_s);
+    bool is_watchdog_enabled(void);
     /**
       * \brief Gets the feedback watchdog time
       * 
@@ -542,6 +572,7 @@ CModuleAction<action_ros>::CModuleAction(const std::string &name,const std::stri
   this->timeout_value=0.0;
   this->timeout_value=DEFAULT_ACTION_TIMEOUT;
   // waychdog
+  this->use_watchdog=true;
   this->watchdog_time=DEFAULT_WATCHDOG_TIME;
   // internal action
   this->action_client=NULL;
@@ -571,19 +602,37 @@ unsigned int CModuleAction<action_ros>::get_max_num_retries(void)
 }
 
 template<class action_ros>
-void CModuleAction<action_ros>::set_feedback_watchdog_time(double time_s)
+void CModuleAction<action_ros>::enable_watchdog(double time_s)
 {
   this->action_access.enter();
   if(time_s>0.0)
+  {
     this->watchdog_time=time_s;
+    this->use_watchdog=true;
+    this->feedback_watchdog.reset(ros::Duration(this->watchdog_time));
+  }
   else
   {
     this->action_access.exit();
-    throw CModuleException(_HERE_,"Invalid watchdog time value",this->name);
+    throw CModuleException(_HERE_,"Invalid watchdog value",this->name);
   }
   this->action_access.exit();
 }
 
+template<class action_ros>
+void CModuleAction<action_ros>::disable_watchdog(void)
+{
+  this->action_access.enter();
+  this->use_watchdog=false;
+  this->action_access.exit();
+}
+
+template<class action_ros>
+bool CModuleAction<action_ros>::is_watchdog_enabled(void)
+{
+  return this->use_watchdog;
+}
+
 template<class action_ros>
 double CModuleAction<action_ros>::get_feedback_watchdog_time(void)
 {
@@ -596,7 +645,7 @@ bool CModuleAction<action_ros>::is_watchdog_active(void)
   this->action_access.enter();
   if(this->enabled)
   {
-    if(this->feedback_watchdog.is_active())
+    if(this->use_watchdog && this->feedback_watchdog.is_active())
     {
       this->status=ACTION_FB_WATCHDOG;
       this->action_access.exit();
@@ -675,7 +724,7 @@ template<class action_ros>
 bool CModuleAction<action_ros>::is_timeout_active(void)
 {
   this->action_access.enter();
-  if(this->action_timeout.timed_out())
+  if(this->use_timeout && this->action_timeout.timed_out())
   {
     this->status=ACTION_TIMEOUT;
     this->action_access.exit();
@@ -753,10 +802,8 @@ action_status CModuleAction<action_ros>::get_state(void)
   {
     if(this->status==ACTION_RUNNING)
     {
-      if(this->use_timeout && this->is_timeout_active())
-        this->status=ACTION_TIMEOUT;
-      if(this->is_watchdog_active())
-        this->status=ACTION_FB_WATCHDOG;
+      this->is_timeout_active();
+      this->is_watchdog_active();
     }
   }
   else