diff -dur rules.orig/rules/modules/taxonomy.rules_forms.inc rules/rules/modules/taxonomy.rules_forms.inc
--- rules.orig/rules/modules/taxonomy.rules_forms.inc	2009-05-15 06:03:12.000000000 -0700
+++ rules/rules/modules/taxonomy.rules_forms.inc	2009-06-13 13:17:59.000000000 -0700
@@ -10,6 +10,41 @@
  */
 
 /**
+ * Condition Taxonomy: form to enter a term to check
+ */
+function rules_condition_term_exists_form($settings, &$form) {
+  $form['settings']['term_exists'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Vocabulary and term definition'),
+  );
+  $options = _rules_action_taxonomy_get_vocab();
+  $options[0] = t('None');
+  $form['settings']['term_exists']['vocab_select'] = array(
+    '#type' => 'select',
+    '#title' => t('Select a vocabulary'),
+    '#options' => $options,
+    '#default_value' => !empty($settings['term_exists']['vocab_select']) ? $settings['term_exists']['vocab_select'] : '',
+    '#description' => t('Select None if any term from any vocabulary is acceptable. Otherwise select the exact vocabulary.'),
+    '#required' => TRUE,
+    '#disabled' => empty($options),
+  );
+  $form['settings']['term_exists']['vocab_text'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Select by vocabulary id'),
+    '#default_value' => !empty($settings['term_exists']['vocab_text']) ? $settings['term_exists']['vocab_text'] : '',
+    '#disabled' => empty($options),
+    '#description' => t('Optional: Enter the vocabulary id (<em>not the vocabulary name</em>) that should be loaded. If this field is used, the "Select a vocabulary" field will be ignored.'),
+  );
+  $form['settings']['term_exists']['term_text'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Enter the name of the term'),
+    '#default_value' => !empty($settings['term_exists']['term_text']) ? $settings['term_exists']['term_text'] : '',
+    '#disabled' => empty($options),
+    '#description' => t('Enter the name of the term to search for. Remember that the case is ignored.'),
+  );
+}
+
+/**
  * Action: Load a term configuration form.
  *
  * Multistep form.
diff -dur rules.orig/rules/modules/taxonomy.rules.inc rules/rules/modules/taxonomy.rules.inc
--- rules.orig/rules/modules/taxonomy.rules.inc	2009-05-28 03:51:35.000000000 -0700
+++ rules/rules/modules/taxonomy.rules.inc	2009-06-13 13:19:12.000000000 -0700
@@ -28,6 +28,76 @@
 }
 
 /**
+ * Implementation of hook_rules_condition_info().
+ */
+function taxonomy_rules_condition_info() {
+  return array(
+    // I suppose this cannot be achieved yet...
+    // It could be used to compare the parent of two distinct terms...
+    'rules_condition_term_comparison' => array(
+      'label' => t('Compare two terms'),
+      'arguments' => array(
+        'term1' => array(
+          'type' => 'taxonomy_term',
+          'label' => t('Term 1')
+        ),
+        'term2' => array(
+          'type' => 'taxonomy_term',
+          'label' => t('Term 2')
+        ),
+      ),
+      'help' => t('Evaluates to TRUE when both terms are the same.'),
+      'module' => 'Taxonomy',
+    ),
+    'rules_condition_term_exists' => array(
+      'label' => t('Term exists'),
+      'eval input' => array('term_exists|vocab_text', 'term_exists|term_text'),
+      'help' => t('Check whether the specified term exists.'),
+      'module' => 'Taxonomy',
+    ),
+  );
+}
+
+/**
+ * A simple user comparison
+ */
+function rules_condition_term_comparison($term1, $term2) {
+  return $term1->tid == $term2->tid;
+}
+
+/**
+ * Condition user: condition to check whether user has particular roles
+ */
+function rules_condition_term_exists($settings) {
+  // TODO: add support for named vocabularies
+  if ($settings['vocabulary']['vocab_text'] == 'any') {
+    $vid = 0;
+  }
+  else if (!empty($settings['vocabulary']['vocab_text'])) {
+    $vid = $settings['vocabulary']['vocab_text'];
+  }
+  else {
+    $vid = $settings['vocabulary']['vocab_select'];
+  }
+
+  $term_text = $settings['term_exists']['term_text'];
+  $terms = taxonomy_get_term_by_name($term_text);
+
+  if (!$vid) {
+    // term of any vocabulary is a match
+    return count($terms) > 0;
+  }
+
+  foreach ($terms as $term) {
+    if ($term->vid == $vid) {
+      return TRUE;
+    }
+  }
+
+  return FALSE;
+}
+
+/**
  * Returns some arguments suitable for using it with a term
  */
 function rules_events_hook_taxonomy_term_arguments($term_label, $update = FALSE) {
