diff --git a/webform_rules.module b/webform_rules.module
index ac9ab02..b26b20d 100644
--- a/webform_rules.module
+++ b/webform_rules.module
@@ -321,3 +321,41 @@ function webform_rules_render_component($component, $value, $format = 'text', $t
   }
   return drupal_render($display_element);
 }
+
+/**
+ * Get a list of all webforms.
+ */
+function webform_rules_get_webforms() {
+  // Get a list of all webform-enabled content types.
+  $webform_types = webform_variable_get('webform_node_types');
+  // Get a list of all nodes that are configured to use a webform.
+  $query = db_select('node', 'n')
+    ->fields('n', array('nid', 'title'))
+    ->condition('n.type', $webform_types, 'IN');
+  // Join to limit result list to nodes that really have a webform.
+  $query->join('webform', 'w', 'n.nid = w.nid');
+  // Join {webform_component} to prevent listing unconfigured webforms.
+  $query->join('webform_component', 'c', 'n.nid = c.nid');
+  // Get the result list.
+  $results = $query->execute();
+
+  $webforms = array();
+  foreach ($results as $record) {
+    $webforms[$record->nid] = $record->title;
+  }
+  return $webforms;
+}
+
+/**
+ * Get an option list of all webforms.
+ */
+function webform_rules_get_webforms_as_options() {
+  // Get the list of all webforms.
+  $webforms = webform_rules_get_webforms();
+
+  $options = array();
+  foreach ($webforms as $nid => $webform) {
+    $options["webform-client-form-{$nid}"] = $webform;
+  }
+  return $options;
+}
diff --git a/webform_rules.rules.inc b/webform_rules.rules.inc
index 359da6b..0f45105 100644
--- a/webform_rules.rules.inc
+++ b/webform_rules.rules.inc
@@ -59,16 +59,75 @@ function webform_rules_rules_condition_info() {
         'selected_webform' => array(
           'type' => 'list<text>',
           'label' => t('Webforms'),
-          'options list' => 'webform_rules_get_webforms',
+          'options list' => 'webform_rules_get_webforms_as_options',
           'description' => t('The name of the webform to check for.'),
           'restriction' => 'input',
         ),
       ),
-      'help' => t('This condition just compares two texts. It returns TRUE, if both texts are equal.'),
+      'help' => t('This condition compares the id of the submitted form with the selected value(s).'),
       'group' => t('Webform'),
       'base' => 'webform_rules_condition_webform_has_id',
     ),
+    'node_is_webform' => array(
+      'label' => t('Content is webform-enabled'),
+      'parameter' => array(
+      'node' => array(
+        'type' => 'node',
+        'label' => t('Content'),
+        'description' => t('The content to verify.'),
+      ),
+      ),
+      'help' => t('This condition verifies a node contains a webform.'),
+      'group' => t('Webform'),
+      'base' => 'webform_rules_condition_node_is_webform',
+    ),
+  );
+}
+
+/**
+ * Implements hook_rules_action_info().
+ *
+ */
+function webform_rules_rules_action_info() {
+  $defaults = array(
+    'group' => t('Webform'),
+    'access callback' => 'rules_node_admin_access',
+    'parameter' => array(
+      'entity' => array(
+        'type' => 'node',
+        'label' => t('Webform'),
+        'description' => t('A webform-enabled node.'),
+        'save' => TRUE,
+        'optional' => TRUE,
+      ),
+      'selected_webform' => array(
+        'type' => 'list<text>',
+        'label' => t('Webforms'),
+        'options list' => 'webform_rules_get_webforms_as_options',
+        'description' => t('The name of the webforms to open.'),
+        'restriction' => 'input',
+        'optional' => TRUE,
+      ),
+    ),
+    'callbacks' => array(
+      'validate' => 'webform_rules_webform_statuschange_validate',
+    ),
   );
+  $actions = array(
+    'webform_open' => $defaults + array(
+      'label' => t('Open webforms'),
+      'base' => 'webform_rules_webform_open',
+    ),
+    'webform_close' => $defaults + array(
+      'label' => t('Close webforms'),
+      'base' => 'webform_rules_webform_close',
+    ),
+  );
+
+  // Modify description of closing action.
+  $actions['webform_close']['parameter']['selected_webform']['description'] = t('The name of the webforms to close.');
+
+  return $actions;
 }
 
 /**
@@ -86,6 +145,16 @@ function webform_rules_data_info() {
 }
 
 /**
+ * Validation callback for actions 'webform_rules_webform_open' and
+ * 'webform_rules_webform_close'.
+ */
+function webform_rules_webform_statuschange_validate($element) {
+  if (empty($element->settings['node:select']) && empty($element->settings['selected_webform'])) {
+    throw new RulesIntegrityException(t('At least one parameter needs to be set.'), array($element, 'parameter', 'node'));
+  }
+}
+
+/**
  * Function to compare the form id of the submitted webform with the selected
  * form.
  */
@@ -100,25 +169,61 @@ function webform_rules_condition_webform_has_id($form_id, $selected_webform) {
 }
 
 /**
- * Get an option list of all webforms.
+ * Condition callback to determine whether a node contains a webform.
  */
-function webform_rules_get_webforms() {
-  // Get a list of all webform-enabled content types.
-  $webform_types = webform_variable_get('webform_node_types');
+function webform_rules_condition_node_is_webform($node) {
   // Get a list of all nodes that are configured to use a webform.
   $query = db_select('node', 'n')
     ->fields('n', array('nid', 'title'))
-    ->condition('n.type', $webform_types, 'IN');
-  // Join to limi result list to node that really have a webform.
+    ->condition('n.nid', $node->nid);
+  // Join to limit result list to node that really have a webform.
   $query->join('webform', 'w', 'n.nid = w.nid');
+  // Join {webform_component} to prevent listing unconfigured webforms.
+  $query->join('webform_component', 'c', 'n.nid = c.nid');
   // Get the result list.
-  $results = $query->execute();
+  if ($query->execute()->rowCount() > 0) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * Rules action callback to open webforms.
+ */
+function webform_rules_webform_open($entity = FALSE, $selected_webforms = array()) {
+  _webform_rules_webform_set_status($entity, $selected_webforms);
+}
+
+/**
+ * Rules action callback to close webforms.
+ */
+function webform_rules_webform_close($entity = FALSE, $selected_webforms = array()) {
+  _webform_rules_webform_set_status($entity, $selected_webforms, FALSE);
+}
 
-  $options = array();
-  foreach ($results as $record) {
-    $options["webform-client-form-{$record->nid}"] = $record->title;
+/**
+ * Helper method to update the status of a webform.
+ */
+function _webform_rules_webform_set_status($entity = FALSE, $selected_webforms = array(), $open = TRUE) {
+  if (!empty($entity->nid) && webform_rules_condition_node_is_webform($entity)) {
+    // Set new status.
+    $entity->webform['status'] = ($open == TRUE) ? 1 : 0;
+  }
+  module_load_include('inc', 'rules', 'modules/entity.eval');
+  // Try to close all selected webforms.
+  foreach ($selected_webforms as $form_id) {
+    // Try to get node id from form_id.
+    $nid = str_replace('webform-client-form-', '', $form_id);
+    // Load the node object.
+    $result = rules_action_entity_fetch('node', $nid, NULL);
+    $webform = $result['entity_fetched'];
+    if (!empty($webform->nid) && webform_rules_condition_node_is_webform($webform)) {
+      // Set new status.
+      $webform->webform['status'] = ($open == TRUE) ? 1 : 0;
+      // Save the webform node. Maybe we can find a better way how to save?
+      node_save($webform);
+    }
   }
-  return $options;
 }
 
 /**
@@ -149,7 +254,7 @@ function _webform_rules_event_variables() {
     'selected_webform' => array(
       'type' => 'list<text>',
       'label' => t('Webforms'),
-      'options list' => 'webform_rules_get_webforms',
+      'options list' => 'webform_rules_get_webforms_as_options',
       'description' => t('The name of the webform to check for.'),
       'restriction' => 'input',
       'hidden' => TRUE,
@@ -157,3 +262,4 @@ function _webform_rules_event_variables() {
     ),
   );
 }
+
