diff --git a/context.core.inc b/context.core.inc
index 5a85e8a..c4e3855 100644
--- a/context.core.inc
+++ b/context.core.inc
@@ -106,6 +106,21 @@ function context_entity_prepare_view($prepare, $entity_type) {
 }
 
 /**
+ * Implements hook_entity_view_alter().
+ */
+function context_entity_view_alter(&$build, $type) {
+  $object = menu_get_object($type);
+  if ($object && isset($build['#entity'])) {
+    list($object_id) = entity_extract_ids($type, $object);
+    list($entity_id) = entity_extract_ids($type, $build['#entity']);
+
+    if (isset($object_id) && $object_id == $entity_id) {
+      context_entity_condition($build['#entity'], $type, 'view');
+    }
+  }
+}
+
+/**
  * Implementation of hook_node_view().
  */
 function context_node_view($node, $view_mode) {
@@ -166,6 +181,23 @@ function context_node_condition(&$node, $op) {
 }
 
 /**
+ * Centralized entity condition call function.
+ */
+function context_entity_condition(&$entity, $type, $op) {
+  if ($plugin = context_get_plugin('condition', 'entity')) {
+    $plugin->execute($entity, $type, $op);
+  }
+  if (module_exists('taxonomy')) {
+    if ($plugin = context_get_plugin('condition', 'entity_taxonomy')) {
+      $plugin->execute($entity, $type, $op);
+    }
+  }
+  // Allow other plugins to easily be triggered on node-related events.
+  drupal_alter('context_entity_condition', $entity, $type, $op);
+}
+
+
+/**
  * Implementation of hook_form_alter() for system_modules_form.
  */
 function context_form_system_modules_form_alter(&$form, $form_state) {
diff --git a/context.plugins.inc b/context.plugins.inc
index 46dfac1..176790c 100644
--- a/context.plugins.inc
+++ b/context.plugins.inc
@@ -11,6 +11,11 @@ function _context_context_registry() {
       'description' => t('Set this context on the basis of other active contexts. Put each context on a separate line. You can use the <code>*</code> character as a wildcard and <code>~</code> to exclude one or more contexts.'),
       'plugin' => 'context_condition_context',
     ),
+    'entity' => array(
+      'title' => t('Entity type'),
+      'description' => t('Set this context when viewing an entity page of a specific entity type and bundle.'),
+      'plugin' => 'context_condition_entity',
+    ),
     'node' => array(
       'title' => t('Node type'),
       'description' => t('Set this context when viewing a node page or using the add/edit form of one of these content types.'),
@@ -71,8 +76,13 @@ function _context_context_registry() {
     );
   }
   if (module_exists('taxonomy')) {
+    $registry['conditions']['entity_taxonomy'] = array(
+      'title' => t('Entity Taxonomy'),
+      'description' => t('Set this context when viewing an entity with the selected taxonomy terms.'),
+      'plugin' => 'context_condition_entity_taxonomy',
+    );
     $registry['conditions']['node_taxonomy'] = array(
-      'title' => t('Taxonomy'),
+      'title' => t('Node Taxonomy'),
       'description' => t('Set this context when viewing a node with the selected taxonomy terms.'),
       'plugin' => 'context_condition_node_taxonomy',
     );
@@ -155,6 +165,14 @@ function _context_context_plugins() {
       'parent' => 'context_condition_path',
     ),
   );
+  $plugins['context_condition_entity'] = array(
+    'handler' => array(
+      'path' => drupal_get_path('module', 'context') . '/plugins',
+      'file' => 'context_condition_entity.inc',
+      'class' => 'context_condition_entity',
+      'parent' => 'context_condition',
+    ),
+  );
   $plugins['context_condition_node'] = array(
     'handler' => array(
       'path' => drupal_get_path('module', 'context') . '/plugins',
@@ -204,6 +222,14 @@ function _context_context_plugins() {
     ),
   );
   if (module_exists('taxonomy')) {
+    $plugins['context_condition_entity_taxonomy'] = array(
+      'handler' => array(
+        'path' => drupal_get_path('module', 'context') . '/plugins',
+        'file' => 'context_condition_entity_taxonomy.inc',
+        'class' => 'context_condition_entity_taxonomy',
+        'parent' => 'context_condition_entity',
+      ),
+    );
     $plugins['context_condition_node_taxonomy'] = array(
       'handler' => array(
         'path' => drupal_get_path('module', 'context') . '/plugins',
diff --git a/plugins/context_condition_entity.inc b/plugins/context_condition_entity.inc
new file mode 100644
index 0000000..23ad20f
--- /dev/null
+++ b/plugins/context_condition_entity.inc
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Expose entity view of a specific entity type as a context condition.
+ */
+class context_condition_entity extends context_condition {
+  function condition_values() {
+    $values = array();
+    foreach (entity_get_info() as $type => $info) {
+      // Ignore configuration entities.
+      if (!empty($info['configuration'])) {
+        continue;
+      }
+
+      if (!empty($info['bundles'])) {
+        foreach ($info['bundles'] as $bundle => $bundle_info) {
+          $values[$type . ';' . $bundle] = $info['label'] . ' (' . $bundle_info['label'] . ')';
+        }
+      }
+      else {
+        $values[$type] = $info['label'];
+      }
+    }
+    return $values;
+  }
+
+  function execute($entity, $type, $op) {
+    list($id, $vid, $bundle) = entity_extract_ids($type, $entity);
+    // If the entity has bundles, add the current bundle to the comparison.
+    if (isset($bundle)) {
+      $type .= ';' . $bundle;
+    }
+
+    foreach ($this->get_contexts($type) as $context) {
+      $this->condition_met($context, $type);
+    }
+  }
+}
diff --git a/plugins/context_condition_entity_taxonomy.inc b/plugins/context_condition_entity_taxonomy.inc
new file mode 100644
index 0000000..2df71f6
--- /dev/null
+++ b/plugins/context_condition_entity_taxonomy.inc
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Expose entity taxonomy terms as a context condition.
+ */
+class context_condition_entity_taxonomy extends context_condition_entity {
+  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($entity, $type, $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($type);
+    $check_fields = array();
+    foreach ($instance_fields as $bundle => $bundle_fields) {
+      foreach ($bundle_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 ($terms = field_get_items($type, $entity, $field)) {
+          foreach ($terms as $term) {
+            foreach ($this->get_contexts($term['tid']) as $context) {
+              $this->condition_met($context, $term['tid']);
+            }
+          }
+        }
+      }
+    }
+  }
+}
