diff --git a/context_condition_node_field.inc b/context_condition_node_field.inc
new file mode 100644
index 0000000..f37f05b
--- /dev/null
+++ b/context_condition_node_field.inc
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * Expose node fields as a context condition.
+ *
+ * @todo: Handle any additional core field types that don't have a 'value' member.
+ *
+ */
+class context_condition_node_field extends context_condition {
+  function condition_values() {
+    $values = array('test' => 'foo');
+    return $values;
+  }
+
+  function condition_form($context) {
+    $form = array(
+      'description' => array(
+        '#markup' => $this->description,
+      ),
+    );
+
+    $defaults = $this->fetch_from_context($context, 'values');
+
+    // Generate a select filled with available node fields.
+    $instance_fields = field_info_instances('node');
+    $options = array();
+
+    if (isset($context->conditions['node']['values'])) {
+      foreach ($instance_fields as $node_type => $fields) {
+        if (array_key_exists($node_type, $context->conditions['node']['values'])) { // Only load the fields for the selected node types.
+          foreach ($fields as $key => $field_info) {
+            $options[$key] = $field_info['label'];
+          }
+        }
+      }
+    }
+    else { // Load all fields
+      foreach ($instance_fields as $node_type => $fields) {
+        foreach ($fields as $key => $field_info) { // Only load the fields for the selected node types.
+          $options[$key] = $field_info['label'];
+        }
+      }
+    }
+    $default = isset($defaults['node_field']) ? $defaults['node_field'] : FALSE;
+    $form['node_field'] = array(
+      '#title' => 'Field',
+      '#type' => 'select',
+      '#options' => $options,
+      '#default_value' => $default,
+      '#description' => 'Select which field in the node you want to compare',
+    );
+
+    $default = isset($defaults['value']) ? $defaults['value'] : '';
+    $form['value'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Value',
+      '#default_value' => $default,
+      '#description' => 'Enter text or a term name to compare for text or term reference fields. You may also use the keywords "&lt;empty&gt;" or "&lt;not-empty&gt;", which will apply to most field types. For multiple value fields, only the first value is compared.',
+    );
+
+    return $form;
+  }
+
+  function condition_form_submit($values) {
+    return $values;
+  }
+
+  function execute($node, $op) {
+    if ($op == 'view') {
+      foreach ($this->get_contexts() as $context) {
+        if (isset($context->conditions['node_field']['values']['node_field'])) {
+          $field_name = $context->conditions['node_field']['values']['node_field'];
+          $field_value = $context->conditions['node_field']['values']['value'];
+
+          if ($field_value == '<empty>') { // Check if the field is not set/empty.
+            if (isset($node->{$field_name})) {
+              if (count($node->{$field_name}) == 0) {
+                $this->condition_met($context);
+              }
+              elseif (array_key_exists('value', $node->{$field_name}[$node->language][0])) {
+                if (array_key_exists('value', $node->{$field_name}[$node->language][0]['value'])) {
+                  if ($node->{$field_name}[$node->language][0]['value'] == '') {
+                    $this->condition_met($context);
+                  }
+                }
+              }
+            }
+          }
+          elseif ($field_value == '<not-empty>') { // Check if the field is not set/empty.
+            if (isset($node->{$field_name})) {
+              if (array_key_exists($node->language, $node->{$field_name})) {
+                if (isset($node->{$field_name}[$node->language][0])) {
+                  $met = FALSE;
+                  if ($node->{$field_name}[$node->language][0]['type'] == 'image' && $node->{$field_name}[$node->language][0]['fid'] > 0) {
+                    $met = TRUE;
+                  }
+                  elseif (isset($node->{$field_name}[$node->language][0]['tid']) && $node->{$field_name}[$node->language][0]['tid'] > 0) {
+                    $met = TRUE;
+                  }
+                  elseif (isset($node->{$field_name}[$node->language][0]['value']) && $node->{$field_name}[$node->language][0]['value'] != '') {
+                    $met = TRUE;
+                  }
+                  if ($met) {
+                    $this->condition_met($context);
+                  }
+                }
+              }
+            }
+          }
+          else { // Test the value.
+            if (array_key_exists($node->language, $node->{$field_name})) {
+              if (isset($node->{$field_name}[$node->language][0])) {
+                $met = FALSE;
+                if (isset($node->{$field_name}[$node->language][0]['tid']) && $node->{$field_name}[$node->language][0]['tid'] > 0) {
+                  // Load the taxonomy term.
+                  $term = taxonomy_term_load($node->{$field_name}[$node->language][0]['tid']);
+                  if (is_object($term) && ($term->name == $field_value)) {
+                    $met = TRUE;
+                  }
+                }
+                elseif (isset($node->{$field_name}[$node->language][0]['value']) && $node->{$field_name}[$node->language][0]['value'] != '') {
+                  if ($node->{$field_name}[$node->language][0]['value'] == $field_value) {
+                    $met = TRUE;
+                  }
+                }
+                if ($met) {
+                  $this->condition_met($context);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
