diff -urpN rules/rules/modules/taxonomy.rules_forms.inc rules/rules/modules/taxonomy.rules_forms.inc
--- rules/rules/modules/taxonomy.rules_forms.inc	1970-01-01 02:00:00.000000000 +0200
+++ rules/rules/modules/taxonomy.rules_forms.inc	2008-10-04 02:14:52.000000000 +0300
@@ -0,0 +1,62 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Rules configuration forms for the taxonomy module.
+ */
+
+/**
+ * Action:Load a term configuration form.
+ *
+ * Multistep form.
+ */
+function rules_action_taxonomy_load_term_form($settings, &$form, $form_state) {
+  $settings += array('vocabulary' => 0);
+  if (empty($settings['vocabulary'])) {
+    // Get existing taxonomy vocabularies.
+    $vocab = $options = array();
+    $vocabs = taxonomy_get_vocabularies();
+    foreach ($vocabs as $vocab) {
+      $options[$vocab->vid] = check_plain($vocab->name);
+    }
+
+    $form['settings']['vocabulary'] = array(
+      '#type' => 'select',
+      '#title' => t('Vocabulary'),
+      '#options' => $options,
+      '#description' => !empty($options) ? t('Select the vocabulary.') : t('There are no existing vocabularies, you should !add one.', array('!add' => l(t('add'), '/admin/content/taxonomy/add/vocabulary'))),
+      '#required' => TRUE,
+      '#disabled' => empty($options),
+    );
+    // Replace the usual submit handlers with our own handler.
+    $form['submit']['#submit'] = array('rules_action_taxonomy_load_term_form_step_submit');
+    $form['submit']['#value'] = t('Continue');
+  }
+  else {
+    $options = array();
+    $vocabulary = taxonomy_vocabulary_load($settings['vocabulary']);
+    $terms = taxonomy_get_tree($vocabulary->vid);
+    foreach ($terms as $term) {
+      $options[$term->tid] = check_plain($term->name);
+    }
+    $form['settings']['term'] = array(
+      '#type' => 'fieldset',
+      '#title' => t("!vocab's terms", array('!vocab' => $vocabulary->name)),
+      '#description' => empty($options) ? t('There are no terms in the vocabulary, you should !add one.', array('!add' => l(t('add'), 'admin/content/taxonomy/'. $vocabulary->vid .'/add/term' ))) : t('Select an existing term or manually enter the name of the term that should be added or removed from the content.'),
+    );
+    $form['settings']['term']['term_select'] = taxonomy_form($vocabulary->vid, !empty($settings['term']['term_select']) ? $settings['term']['term_select'] : 0);
+
+    $form['settings']['term']['term_text'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Select by term id'),
+      '#default_value' => !empty($settings['term']['term_text']) ? $settings['term']['term_text'] : '',
+      '#disabled' => empty($options),
+      '#description' => t('Optional: enter the term id (<em>not the term name</em>) that should be loaded . If this field is used "Select a term" field will be ignored.'),
+    );
+  }
+}
+
+function rules_action_taxonomy_load_term_form_step_submit($form, &$form_state) {
+  $form_state['element']['#settings']['vocabulary'] = $form_state['values']['settings']['vocabulary'];
+}
diff -urpN rules/rules/modules/taxonomy.rules.inc rules/rules/modules/taxonomy.rules.inc
--- rules/rules/modules/taxonomy.rules.inc	1970-01-01 02:00:00.000000000 +0200
+++ rules/rules/modules/taxonomy.rules.inc	2008-10-04 01:56:16.000000000 +0300
@@ -0,0 +1,111 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Rules integration for the taxonomy module.
+ */
+
+
+/**
+* Implementation of hook_rules_action_info().
+*/
+function taxonomy_rules_action_info() {
+  $info = array();
+  $info['rules_action_taxonomy_load_term'] = array(
+    'label' => t('Load a term'),
+    'new variables' => array(
+      'taxonomy_term' => array(
+        'type' => 'taxonomy_term',
+        'label' => t('Taxonomy term'),
+      ),
+    ),
+    'eval input' => array('term_text'),
+    'help' => t('Loading a taxonomy term will allow you to act on this term, for example you will be able to assign this term to a content.'),
+    'module' => 'Taxonomy',
+  );
+  $info['rules_action_taxonomy_term_assign_to_content'] = array(
+    'label' => t('Assign a term to content'),
+    'arguments' => array(
+      'node' => array(
+        'type' => 'node',
+        'label' => t('Content which term will be assigned to'),
+      ),
+      'taxonomy_term' => array(
+        'type' => 'taxonomy_term',
+        'label' => t('Taxonomy term'),
+      ),
+    ),
+    'module' => 'Taxonomy',
+  );
+  $info['rules_action_taxonomy_term_remove_from_content'] = array(
+    'label' => t('Remove a term from content'),
+    'arguments' => array(
+      'node' => array(
+        'type' => 'node',
+        'label' => t('Content which term will be removed from'),
+      ),
+      'taxonomy_term' => array(
+        'type' => 'taxonomy_term',
+        'label' => t('Taxonomy term'),
+      ),
+    ),
+    'module' => 'Taxonomy',
+  );
+  return $info;
+}
+
+/**
+ * Action: Load a term.
+ */
+function rules_action_taxonomy_load_term($settings) {
+  if ($term = taxonomy_get_term(!empty($settings['term']['term_text']) ? $settings['term']['term_text'] : $settings['term']['term_select'])) {
+    return array('taxonomy_term' => $term);
+  }
+}
+
+/**
+ * Action: Assign or remove a term to content.
+ */
+function rules_action_taxonomy_term_assign_to_content($node, $taxonomy_term, $settings) {
+  $node->taxonomy[$taxonomy_term->tid] = $taxonomy_term;
+  return array('node' => $node);
+}
+
+/**
+ * Action: Remove a term from content.
+ */
+function rules_action_taxonomy_term_remove_from_content($node, $taxonomy_term, $settings) {
+  unset($node->taxonomy[$taxonomy_term->tid]);
+  return array('node' => $node);
+}
+
+/**
+ * Implementation of hook_rules_data_type_info().
+ */
+function taxonomy_term_rules_data_type_info() {
+  return array(
+    'taxonomy_term' => array(
+      'label' => t('Taxonomy'),
+      'class' => 'rules_data_type_taxonomy_term',
+      'savable' => FALSE,
+      'identifiable' => TRUE,
+      'module' => 'Taxonomy',
+    ),
+  );
+}
+
+/**
+ * Defines the taxonomy term data type.
+ */
+class rules_data_type_taxonomy_term extends rules_data_type {
+
+  function load($tid) {
+     return taxonomy_get_term($tid);
+  }
+
+  function get_identifier() {
+    $taxonomy = &$this->get();
+    return $taxonomy->tid;
+  }
+}
