diff --git a/context.core.inc b/context.core.inc
index cff0aec..a0a5d89 100644
--- a/context.core.inc
+++ b/context.core.inc
@@ -112,6 +112,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) {
@@ -124,6 +139,22 @@ function context_node_view($node, $view_mode) {
 }
 
 /**
+ * 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().
  */
 function context_form_alter(&$form, $form_state, $form_id) {
diff --git a/context.plugins.inc b/context.plugins.inc
index 6f86559..35179b8 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 (asterisk) as a wildcard and the <code>~</code> character (tilde) to prevent this context from activating if the listed context is active. Other contexts which use context conditions can not be used to exclude this context from activating.'),
       '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..ef127ac
--- /dev/null
+++ b/plugins/context_condition_entity.inc
@@ -0,0 +1,48 @@
+<?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;
+      }
+      // Ignore entities without a view mode, which indicates that the entity
+      // objects cannot be viewed on their own.
+      if (empty($info['view modes'])) {
+        continue;
+      }
+
+      if (!empty($info['bundles'])) {
+        foreach ($info['bundles'] as $bundle => $bundle_info) {
+          if ($info['label'] != $bundle_info['label']) {
+            $values[$type . ';' . $bundle] = $info['label'] . ': ' . $bundle_info['label'];
+          }
+          else {
+            $values[$type] = $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']);
+            }
+          }
+        }
+      }
+    }
+  }
+}
