diff --git a/context.core.inc b/context.core.inc
index 7b9d234..c27c7e7 100644
--- a/context.core.inc
+++ b/context.core.inc
@@ -142,7 +142,10 @@ function context_node_condition(&$node, $op) {
     $plugin->execute($node, $op);
   }
   if (module_exists('taxonomy')) {
-    if ($plugin = context_get_plugin('condition', 'node_taxonomy')) {
+    if ($plugin = context_get_plugin('condition', 'node_taxonomy_term')) {
+      $plugin->execute($node, $op);
+    }
+    if ($plugin = context_get_plugin('condition', 'node_taxonomy_vocabulary')) {
       $plugin->execute($node, $op);
     }
   }
diff --git a/context.plugins.inc b/context.plugins.inc
index 46dfac1..b4ff969 100644
--- a/context.plugins.inc
+++ b/context.plugins.inc
@@ -71,10 +71,15 @@ function _context_context_registry() {
     );
   }
   if (module_exists('taxonomy')) {
-    $registry['conditions']['node_taxonomy'] = array(
-      'title' => t('Taxonomy'),
+    $registry['conditions']['node_taxonomy_term'] = array(
+      'title' => t('Node taxonomy term'),
       'description' => t('Set this context when viewing a node with the selected taxonomy terms.'),
-      'plugin' => 'context_condition_node_taxonomy',
+      'plugin' => 'context_condition_node_taxonomy_term',
+    );
+    $registry['conditions']['node_taxonomy_vocabulary'] = array(
+      'title' => t('Node taxonomy vocabulary'),
+      'description' => t('Set this context when viewing a node with terms from the selected taxonomy vocabularies.'),
+      'plugin' => 'context_condition_node_taxonomy_vocabulary',
     );
     $registry['conditions']['taxonomy_term'] = array(
       'title' => t('Taxonomy term'),
@@ -204,11 +209,19 @@ function _context_context_plugins() {
     ),
   );
   if (module_exists('taxonomy')) {
-    $plugins['context_condition_node_taxonomy'] = array(
+    $plugins['context_condition_node_taxonomy_term'] = array(
       'handler' => array(
-        'path' => drupal_get_path('module', 'context') . '/plugins',
-        'file' => 'context_condition_node_taxonomy.inc',
-        'class' => 'context_condition_node_taxonomy',
+        'path' => drupal_get_path('module', 'context') .'/plugins',
+        'file' => 'context_condition_node_taxonomy_term.inc',
+        'class' => 'context_condition_node_taxonomy_term',
+        'parent' => 'context_condition_node',
+      ),
+    );
+    $plugins['context_condition_node_taxonomy_vocabulary'] = array(
+      'handler' => array(
+        'path' => drupal_get_path('module', 'context') .'/plugins',
+        'file' => 'context_condition_node_taxonomy_vocabulary.inc',
+        'class' => 'context_condition_node_taxonomy_vocabulary',
         'parent' => 'context_condition_node',
       ),
     );
diff --git a/plugins/context_condition_node.inc b/plugins/context_condition_node.inc
index 6c2c534..b6924fb 100644
--- a/plugins/context_condition_node.inc
+++ b/plugins/context_condition_node.inc
@@ -49,7 +49,6 @@ class context_condition_node extends context_condition {
       // Check the node form option.
       $options = $this->fetch_from_context($context, 'options');
       if ($op === 'form') {
-        $options = $this->fetch_from_context($context, 'options');
         if (!empty($options['node_form']) && in_array($options['node_form'], array(CONTEXT_NODE_FORM, CONTEXT_NODE_FORM_ONLY))) {
           $this->condition_met($context, $node->type);
         }
diff --git a/plugins/context_condition_node_taxonomy.inc b/plugins/context_condition_node_taxonomy.inc
deleted file mode 100644
index ec97694..0000000
--- a/plugins/context_condition_node_taxonomy.inc
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/**
- * Expose node taxonomy terms as a context condition.
- */
-class context_condition_node_taxonomy extends context_condition_node {
-  function condition_values() {
-    $values = array();
-    if (module_exists('taxonomy')) {
-      foreach (taxonomy_get_vocabularies() as $vocab) {
-        if (empty($vocab->tags)) {
-          foreach (taxonomy_get_tree($vocab->vid) as $term) {
-            $values[$term->tid] = check_plain($term->name);
-          }
-        }
-      }
-    }
-    return $values;
-  }
-
-  function condition_form($context) {
-    $form = parent::condition_form($context);
-    $form['#type'] = 'select';
-    $form['#size'] = 12;
-    $form['#multiple'] = TRUE;
-    $vocabularies = taxonomy_get_vocabularies();
-    $options = array();
-    foreach ($vocabularies as $vid => $vocabulary) {
-      $tree = taxonomy_get_tree($vid);
-      if ($tree && (count($tree) > 0)) {
-        $options[$vocabulary->name] = array();
-        foreach ($tree as $term) {
-          $options[$vocabulary->name][$term->tid] = str_repeat('-', $term->depth) . $term->name;
-        }   
-      }   
-    }
-    $form['#options'] = $options;
-    return $form;
-  }
-
-  function execute($node, $op) {
-    // build a list of each taxonomy reference field belonging to the bundle for the current node
-    $fields = field_info_fields();
-    $instance_fields = field_info_instances('node', $node->type);
-    $check_fields = array();
-    foreach ($instance_fields as $key => $field_info) {
-      if ($fields[$key]['type'] == 'taxonomy_term_reference') {
-        $check_fields[] = $key;
-      }
-    }
-
-    if ($this->condition_used() && !empty($check_fields)) {
-      foreach ($check_fields as $field) {
-        if (isset($node->{$field}[$node->language])) {
-          foreach ($node->{$field}[$node->language] as $term) {
-            foreach ($this->get_contexts($term['tid']) as $context) {
-              // Check the node form option.
-              if ($op === 'form') {
-                $options = $this->fetch_from_context($context, 'options');
-                if (!empty($options['node_form'])) {
-                  $this->condition_met($context, $term['tid']);
-                }
-              }
-              else {
-                $this->condition_met($context, $term['tid']);
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/plugins/context_condition_node_taxonomy_term.inc b/plugins/context_condition_node_taxonomy_term.inc
new file mode 100644
index 0000000..44b80e0
--- /dev/null
+++ b/plugins/context_condition_node_taxonomy_term.inc
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * Expose node taxonomy terms as a context condition.
+ */
+class context_condition_node_taxonomy_term extends context_condition_node {
+  function condition_values() {
+    $values = array();
+    foreach (taxonomy_get_vocabularies() as $vocabulary) {
+      if (empty($vocabulary->tags)) {
+        foreach (taxonomy_get_tree($vocabulary->vid) as $term) {
+          $values[$term->tid] = check_plain($term->name);
+        }
+      }
+    }
+    return $values;
+  }
+
+  function condition_form($context) {
+    $form = parent::condition_form($context);
+    $form['#type'] = 'select';
+    $form['#size'] = 12;
+    $form['#multiple'] = TRUE;
+    $vocabularies = taxonomy_get_vocabularies();
+    $options = array();
+    foreach ($vocabularies as $vid => $vocabulary) {
+      $tree = taxonomy_get_tree($vid);
+      if ($tree && (count($tree) > 0)) {
+        $options[$vocabulary->name] = array();
+        foreach ($tree as $term) {
+          $options[$vocabulary->name][$term->tid] = str_repeat('-', $term->depth) . $term->name;
+        }   
+      }   
+    }
+    $form['#options'] = $options;
+    return $form;
+  }
+
+  function execute($node, $op) {
+    // Build a list of each taxonomy reference field belonging to the bundle for the current node.
+    $fields = field_info_fields();
+    $instance_fields = field_info_instances('node', $node->type);
+    $check_fields = array();
+    foreach ($instance_fields as $key => $field_info) {
+      if ($fields[$key]['type'] == 'taxonomy_term_reference') {
+        $check_fields[] = $key;
+      }
+    }
+
+    if ($this->condition_used() && !empty($check_fields)) {
+      foreach ($check_fields as $field) {
+        if (isset($node->{$field}[$node->language])) {
+          foreach ($node->{$field}[$node->language] as $term) {
+            foreach ($this->get_contexts($term['tid']) as $context) {
+              // Check the node form option.
+              $options = $this->fetch_from_context($context, 'options');
+              if ($op === 'form') {
+                if (!empty($options['node_form']) && in_array($options['node_form'], array(CONTEXT_NODE_FORM, CONTEXT_NODE_FORM_ONLY))) {
+                  $this->condition_met($context, $term['tid']);
+                }
+              }
+              elseif (empty($options['node_form']) || $options['node_form'] != CONTEXT_NODE_FORM_ONLY) {
+                $this->condition_met($context, $term['tid']);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/plugins/context_condition_node_taxonomy_vocabulary.inc b/plugins/context_condition_node_taxonomy_vocabulary.inc
new file mode 100644
index 0000000..134993f
--- /dev/null
+++ b/plugins/context_condition_node_taxonomy_vocabulary.inc
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Expose node taxonomy vocabularies as a context condition.
+ */
+class context_condition_node_taxonomy_vocabulary extends context_condition_node {
+  function condition_values() {
+    $values = array();
+    foreach (taxonomy_get_vocabularies() as $vocabulary) {
+      $values[$vocabulary->machine_name] = check_plain($vocabulary->name);
+    }
+    return $values;
+  }
+
+  function execute($node, $op) {
+    // Build a list of each taxonomy reference field belonging to the bundle for the current node.
+    $fields = field_info_fields();
+    $instance_fields = field_info_instances('node', $node->type);
+    $check_fields = array();
+    foreach ($instance_fields as $key => $field_info) {
+      if ($fields[$key]['type'] == 'taxonomy_term_reference') {
+        $check_fields[] = $key;
+      }
+    }
+
+    if ($this->condition_used() && !empty($check_fields)) {
+      foreach ($check_fields as $field) {
+        if (isset($node->{$field}[$node->language])) {
+          foreach ($node->{$field}[$node->language] as $term) {
+            $term = taxonomy_term_load($term['tid']);
+            foreach ($this->get_contexts($term->vocabulary_machine_name) as $context) {
+              // Check the node form option.
+              $options = $this->fetch_from_context($context, 'options');
+              if ($op === 'form') {
+                if (!empty($options['node_form']) && in_array($options['node_form'], array(CONTEXT_NODE_FORM, CONTEXT_NODE_FORM_ONLY))) {
+                  $this->condition_met($context, $term->vocabulary_machine_name);
+                }
+              }
+              elseif (empty($options['node_form']) || $options['node_form'] != CONTEXT_NODE_FORM_ONLY) {
+                $this->condition_met($context, $term->vocabulary_machine_name);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/tests/context.conditions.test b/tests/context.conditions.test
index 7ad3860..77fbbd4 100644
--- a/tests/context.conditions.test
+++ b/tests/context.conditions.test
@@ -151,7 +151,7 @@ class ContextConditionNodeTaxonomyTest extends DrupalWebTestCase {
     ctools_include('export');
     $this->context = ctools_export_new_object('context');
     $this->context->name = 'testcontext';
-    $this->context->conditions = array('node_taxonomy' => array('values' => array($this->terms['apples']->tid)));
+    $this->context->conditions = array('node_taxonomy_term' => array('values' => array($this->terms['apples']->tid)));
     $this->context->reactions = array('debug' => array('debug' => TRUE));
     $saved = context_save($this->context);
     $this->assertTrue($saved, "Context 'testcontext' saved.");
-- 
1.7.4.msysgit.0

