diff --git a/bean_usage/README.TXT b/bean_usage/README.TXT
new file mode 100644
index 0000000..c4f9473
--- /dev/null
+++ b/bean_usage/README.TXT
@@ -0,0 +1,43 @@
+Bean Usage
+==================================
+
+Enable this module to get reports of where a bean is being used on your site. It currently integrates with
+Drupal Core block placement, the Context module, and the Block Reference module.
+
+In order to access any bean usage reports, the current user must have the permission of "View bean usage".
+
+To access a report of all beans, go to admin/reports/bean/usage. Currently this report only looks at block references.
+
+Individual bean usage reports may be accessed by clicking on the "Usage" tab when viewing/editing a bean.
+
+==================================
+Configuration
+==================================
+
+Configuration of the reports may be accomplished at admin/reports/bean/usage/settings.
+
+You may enable or disable, as necessary, integrations with Block Reference, Contexts, or Core at this form. If
+the Block Reference module or Context module is not installed, then the respective check box will not be displayed.
+
+If using the block reference field, you may also enable the "Include Revisioned Fields" check box. This will
+inspect an Entity's revisions to see if the bean was used in other revisions. This is useful if you have revisioning
+workflows as part of your content strategy. Usage in revisions other than the current one is reported only on
+an individual bean usage report, it is not included in the site-wide report.
+
+==================================
+Permissions
+==================================
+
+The module enables the following permissions:
+* View bean usage: Enables the usage reports (site-wide and individual)
+* Administer bean usage: Access to the report's configuration page described in the "Configuration" section.
+* Always Show Core Usage: This may be useful if your site editors need to know where a bean is being used but do not
+  have control over where it is placed. This will show it in the individual usage report even if the user does not
+  have permission to use the core block placement (admin/structure/block). If a user does not this permission and does
+  not have permission to use the core block placement, then no data will be shown.
+* Always Show Context Usage: This may be useful if your site editors need to know where a bean is being used but do not
+  have control over where it is placed using the Context UI module. This will show it in the individual usage report even
+  if the user does not have permission to use the Context UI module. If a user does not this permission and does
+  not have permission to use the Context UI, then no data will be shown. (NOTE: If the context module is not installed,
+  then this permission will not be displayed.)
+
diff --git a/bean_usage/bean_usage.info b/bean_usage/bean_usage.info
index 1b8b6ce..cb23a98 100644
--- a/bean_usage/bean_usage.info
+++ b/bean_usage/bean_usage.info
@@ -4,3 +4,5 @@ core = 7.x
 dependencies[] = bean
 dependencies[] = blockreference
 package = Bean
+
+
diff --git a/bean_usage/bean_usage.module b/bean_usage/bean_usage.module
index 6042046..3e7cb69 100644
--- a/bean_usage/bean_usage.module
+++ b/bean_usage/bean_usage.module
@@ -29,7 +29,7 @@ function bean_usage_menu() {
   // bean usage report
   $items['admin/reports/bean/usage'] = array(
     'title' => t('Bean usage'),
-    'description' => 'Displays a list of Beans (blockreferences) and where they are used.',
+    'description' => 'Displays a list of Beans and where they are used.',
     'page callback' => 'bean_usage_output',
     'page arguments' => array(4),
     'access arguments' => array('view bean usage'),
@@ -37,7 +37,7 @@ function bean_usage_menu() {
 
   $items['admin/reports/bean/usage/list'] = array(
     'title' => t('Usage'),
-    'description' => 'Displays a list of Beans (blockreferences) and where they are used.',
+    'description' => 'Displays a list of Beans and where they are used.',
     'weight' => 0,
     'page callback' => 'bean_usage_output',
     'page arguments' => array(5),
@@ -47,7 +47,7 @@ function bean_usage_menu() {
 
   $items['admin/reports/bean/usage/settings'] = array(
     'title' => t('Settings'),
-    'description' => t('Displays a list of Beans (blockreferences) and where they are used.'),
+    'description' => t('Displays a list of Beans and where they are used.'),
     'weight' => 1,
     'page callback' => 'drupal_get_form',
     'page arguments' => array('bean_usage_settings'),
@@ -68,14 +68,27 @@ function bean_usage_permission() {
   $perms = array(
     'view bean usage' => array(
       'title' => t('View bean usage'),
-      'description' => t('View a list of Beans (blockreferences) and where they are used.'),
+      'description' => t('View a list of Beans and where they are used.'),
     ),
     'administer bean usage' => array(
       'title' => t('Administer bean usage'),
       'description' => t('Administer settings for the bean usage page.'),
     ),
+    'always show core' => array(
+      'title' => t('Always show core usage'),
+      'description' => t('Always show the Drupal Core block placement usage for the bean even if the user does not have block administration rights.'),
+    ),
   );
+
+  if (module_exists("context")) {
+    $perms['always show context'] = array(
+      'title' => t('Always show context usage'),
+      'description' => t('Always show the context usage for the bean even if the user does not have context administration rights.'),
+    );
+  }
+
   return $perms;
+
 }
 
 /**
@@ -95,6 +108,11 @@ function bean_usage_output($bean = NULL) {
   $delta_specific = $delta_found = FALSE;
   $bean_usage_form = drupal_get_form('bean_usage_filters');
 
+  // This variable is used when it's just one bean being displayed
+  // and will hold the db query so that extra results can be displayed
+  // later.
+  $delta_specific_db_result = NULL;
+
   if (!empty($bean) && is_object($bean)) {
     $delta_specific = TRUE;
   } else if (is_numeric($bean)) {
@@ -133,8 +151,10 @@ function bean_usage_output($bean = NULL) {
           $query->union(_bean_usage_field_data($data_table, $i, $field_name, $entity_types, $bundles, $filters, $delta_specific, $bean));
         }
       }
+
     }
 
+
     // Get the data
     $data = $query->execute()->fetchAll(0);
 
@@ -177,17 +197,41 @@ function bean_usage_output($bean = NULL) {
             break;
         }
 
-        $content[$bean_data->label][$bean_data->entity_type][$bean_data->entity_id]['bean_title'] = $bean_data->title;
-        $content[$bean_data->label][$bean_data->entity_type][$bean_data->entity_id]['bean_type'] = $bean_data->type;
-        $content[$bean_data->label][$bean_data->entity_type][$bean_data->entity_id]['entity_id'] = $bean_data->entity_id;
-        $content[$bean_data->label][$bean_data->entity_type][$bean_data->entity_id]['entity_title'] = $entity_title;
-
-        if ($delta_specific) {
-          $delta_found = TRUE;
+        if ($delta_specific == TRUE &&
+          variable_get('bean_usage_include_field_revisions', FALSE)) {
+            // test to see if this revision is still available. It may not necessarily be available
+            // due to workflow and other issues.
+            $revision = node_load($bean_data->entity_id, $bean_data->revision_id);
+            if ($revision != NULL) {
+              $content[$bean_data->entity_id . $bean_data->revision_id][$bean_data->entity_type][$bean_data->entity_id]['bean_title'] = $bean_data->title;
+              $content[$bean_data->entity_id . $bean_data->revision_id][$bean_data->entity_type][$bean_data->entity_id]['bean_type'] = $bean_data->type;
+              $content[$bean_data->entity_id . $bean_data->revision_id][$bean_data->entity_type][$bean_data->entity_id]['entity_id'] = "$bean_data->entity_id:{$bean_data->revision_id}";
+              $content[$bean_data->entity_id . $bean_data->revision_id][$bean_data->entity_type][$bean_data->entity_id]['entity_title'] = $entity_title;
+              $content[$bean_data->entity_id . $bean_data->revision_id][$bean_data->entity_type][$bean_data->entity_id]['path'] = "{$bean_data->entity_id}/revisions/{$bean_data->revision_id}/view";
+            }
+        } else {
+          $content[$bean_data->entity_id][$bean_data->entity_type][$bean_data->entity_id]['bean_title'] = $bean_data->title;
+          $content[$bean_data->entity_id][$bean_data->entity_type][$bean_data->entity_id]['bean_type'] = $bean_data->type;
+          $content[$bean_data->entity_id][$bean_data->entity_type][$bean_data->entity_id]['entity_id'] = $bean_data->entity_id;
+          $content[$bean_data->entity_id][$bean_data->entity_type][$bean_data->entity_id]['entity_title'] = $entity_title;
+          $content[$bean_data->entity_id][$bean_data->entity_type][$bean_data->entity_id]['path'] = $bean_data->entity_id;
         }
       }
     }
 
+    // Set up output table
+    $bean_table_data = array(
+      '#theme' => 'table',
+      '#attributes' => array( // set table attributes
+        'width' => '100%', // width
+        'id' => 'bean-usage-block-reference',
+      ),
+      '#header' => _bean_usage_table_headers($bean_delta),
+      '#rows' => array(), // table rows
+      '#empty' => t("No usage to report."),
+      '#caption' => t("Uses of this Bean."),
+    );
+
     // If we have any usage data create and display the table of data
     if (!empty($content)) {
       $rows = count($content);
@@ -195,17 +239,12 @@ function bean_usage_output($bean = NULL) {
       // set up pager variables
       pager_default_initialize($rows, $results_per_page, $element = 0);
 
-      // Set up output table
-      $bean_table_data = array(
-        'attributes' => array( // set table attributes
-          'width' => '100%' // width
-        ),
-        'header' => _bean_usage_table_headers($bean_delta),
-        'rows' => array(), // table rows
-      );
 
-      if ($filters) {
-        $bean_table_data['caption'] = t('Filters: ') . $filters;
+
+      if (!$delta_specific && count($filters) == 0) {
+        $bean_table_data['#caption'] = t("No Filters");
+      } elseif ($delta_specific && variable_get('bean_usage_include_field_revisions', FALSE)) {
+        $bean_table_data['#caption'] = t("This report includes past revisions.");
       }
 
       // Get the result subset for the current page
@@ -265,22 +304,22 @@ function bean_usage_output($bean = NULL) {
             // add the usage data to the table
             // We only need to add the Bean label once per delta, Since we set it above we check for its emptiness
             if (!empty($bean_label_cell)) {
-              $bean_table_data['rows'][] = array(
+              $bean_table_data['#rows'][] = array(
                 0 => $bean_label_cell,
                 1 => $bean_title_cell,
                 2 => $bean_type_cell,
                 3 => array(
-                  'data' => $text_prefix . l($entity['entity_title'], $link_prefix . $entity['entity_id']),
+                  'data' => $text_prefix . l($entity['entity_title'], $link_prefix . $entity['path']),
                   'width' => '30%',
                   'no_striping' => TRUE
                 ),
               );
             } // if (!empty($bean_label_cell))
             else {
-              $bean_table_data['rows'][] = array(
+              $bean_table_data['#rows'][] = array(
                 $text_prefix . l(
                   t($entity['entity_title']),
-                  $link_prefix . $entity['entity_id'],
+                  $link_prefix . $entity['path'],
                   array(
                     'attributes' => array(
                       'title'  => $entity['entity_title'],
@@ -296,23 +335,25 @@ function bean_usage_output($bean = NULL) {
         } //foreach ($entity_type)
       } // foreach ($usage)
       // Set the output using theme_table with the header and rows created above
-      if (!$delta_specific) {
-        $output .= drupal_render($bean_usage_form);
-      }
-      $output .= theme('table', $bean_table_data);
-      $output .= theme('pager');
     } // if (!empty($usage))
-    else {
-      if ($delta_specific) {
-        $output = '<p>' . t('This bean is not used anywhere on the site.') . '</p>';
-      }
-      else {
-        $output .= $bean_usage_form;
-        $output .= 'There is no bean usage to report for '. $filters;
-      }
-    } // else
+    if (!$delta_specific) {
+      $output['bean_filters'] = $bean_usage_form;
+    }
+    if (is_array($bean_table_data)) {
+      $output['bean_table_data'] = $bean_table_data;
+
+      $output['bean_table_pager'] = array(
+        '#theme' => 'pager',
+      );
+    }
   } // if (!empty($fields))
 
+  // On an individual bean page, also show the the context and core pages.
+  if ($delta_specific) {
+    $output['bean_usage_context'] = _bean_usage_get_context_usage($bean);
+    $output['bean_usage_core'] = _bean_usage_get_core($bean);
+  }
+
   // return the output for page rendering
   return $output;
 }
@@ -422,6 +463,7 @@ function _bean_usage_field_data( $data_table, $i, $field_name, $entity_types, $b
   $query->join('bean', 'b', 'b.delta = bl.delta');
   $query->fields('b', array('bid', 'label', 'title', 'type'));
   $query->fields('fd'. $i, array('entity_id', 'delta', 'entity_type'));
+  $query->addField('b', 'delta', 'bean_delta');
   $query->addField('fd'. $i, $field_name . '_bid', 'bid');
   $query_and = db_and();
   $query_and->condition('bl.module', 'bean');
@@ -446,6 +488,19 @@ function _bean_usage_field_data( $data_table, $i, $field_name, $entity_types, $b
   }
 
   $query->condition($query_and);
+
+  // This will check the revision table if the appropriate option
+  // is set and it's a delta-specific request.
+  if ($delta_specific && variable_get('bean_usage_include_field_revisions', FALSE)) {
+    $revision_table = "field_revision_" . $field_name;
+    $query->addField('fr'. $i, "revision_id", 'revision_id');
+    $query->leftJoin($revision_table,
+      'fr' . $i,
+      "fr$i.{$field_name}_bid = fd$i.{$field_name}_bid");
+    $query->condition("fr$i.entity_type", "node");
+  }
+
+
   return $query;
 }
 
@@ -523,3 +578,121 @@ function bean_usage_sort_by_title($a, $b) {
 function bean_usage_sort_by_type($a, $b) {
   return strcmp($a->type, $b->type);
 }
+
+  /**
+   * Helper function to get context usage. We are just going to inspect
+   * each context to see if this block is present in the context.
+   * @param $bean
+   * @return array
+   */
+  function _bean_usage_get_context_usage($bean) {
+    $retval = array();
+    if (module_exists("context") && variable_get("bean_usage_show_context", TRUE)) {
+      $admin_context = user_access("administer contexts");
+      $show_context = user_access("always show context");
+      // If the user cannot administer the context UI and does not have
+      // rights to see context placements in the report, then return immediately.
+      if (!$admin_context && !$show_context) { return $retval; }
+      $modules["context"] = t("Context");
+      $rows = array();
+      $contexts = context_context_list();
+      foreach ($contexts as $context) {
+        $this_context = context_load($context);
+        if (isset($this_context->reactions['block'])) {
+          if (isset($this_context->reactions['block']['blocks'])) {
+            foreach ($this_context->reactions['block']['blocks'] as $block) {
+              if ($block['module'] == 'bean' && $block['delta'] == $bean->delta) {
+                $link = l("Edit", "admin/structure/context/list/{$this_context->name}/edit");
+                if (!$admin_context && $show_context) {
+                  $link = "";
+                }
+                $rows[] = array(
+                  $this_context->name,
+                  $block['region'],
+                  $link,
+                );
+              }
+            }
+          }
+        }
+      }
+
+      $header = array(
+        array(
+          "data" => t("Context"),
+        ),
+        array(
+          "data" => t("Theme Region"),
+        ),
+        array(
+          "data" => t("Link"),
+        ),
+      );
+
+      $retval = array(
+        '#theme' => 'table',
+        '#header' => $header,
+        '#rows' => $rows,
+        "#attributes" => array("width" => "100%", 'id' => 'bean-usage-context'),
+        "#sticky" => TRUE,
+        '#empty' => t("This bean is not used in any block context reactions."),
+        '#caption' => t("Context"),
+      );
+    }
+    return $retval;
+
+  }
+
+  function _bean_usage_get_core($bean) {
+    $retval = "";
+
+
+    if (variable_get("bean_usage_show_core", TRUE)) {
+      $admin_context = user_access("administer blocks");
+      $show_context = user_access("always show core");
+
+      if (!$admin_context && !$show_context) { return $retval; }
+
+      $link_title = l("Drupal Block Settings", "admin/structure/block/manage/bean/{$bean->delta}/configure");
+      // Don't print a link to the block settings if the user does not have permission
+      if (!$admin_context && $show_context) {
+        $link_title = "Drupal Block Settings";
+      }
+
+      $rows = array();
+      $sql = "select * from {block} where module='bean' and region <> -1 and delta=:delta";
+      $results = db_query($sql, array(":delta" => $bean->delta));
+      foreach ($results as $result) {
+        // If the region property is empty it then means that this block
+        // was previously assigned to a region but it no longer is, so
+        // we can safely ignore it.
+        if (empty($result->region)) { continue; }
+        $rows[] = array(
+          "data" => array($result->theme, $result->region),
+        );
+      }
+
+
+      $header = array(
+        array(
+          "data" => t("Theme"),
+        ),
+        array(
+          "data" => t("Theme Region"),
+        ),
+      );
+
+
+      $retval['blocktable'] = array(
+        '#theme' => 'table',
+        '#header' => $header,
+        '#rows' => $rows,
+        "#attributes" => array("width" => "100%", 'id' => 'bean-usage-core',),
+        "#sticky" => TRUE,
+        '#empty' => t("This bean is not used in any Drupal block settings."),
+        "#caption" => $link_title,
+      );
+
+    }
+    return $retval;
+  }
\ No newline at end of file
diff --git a/bean_usage/includes/bean_usage.forms.inc b/bean_usage/includes/bean_usage.forms.inc
index 28210ee..7c6ecb8 100644
--- a/bean_usage/includes/bean_usage.forms.inc
+++ b/bean_usage/includes/bean_usage.forms.inc
@@ -9,26 +9,61 @@ function bean_usage_settings() {
     '#collapsible' => FALSE,
   );
 
-  $form['bean_usage_results']['bean_usage_results_per_page'] = array(
-    '#title' => t('Results per page'),
-    '#description' => t('How many results display per page on the bean usage page'),
-    '#type' => 'select',
-    '#options' => array(
-      '5' => 5,
-      '10' => 10,
-      '15' => 15,
-      '20' => 20,
-      '25' => 25,
-      '30' => 30,
-      '35' => 35,
-      '40' => 40,
-      '45' => 45,
-      '50' => 50,
-    ),
-    '#default_value' => variable_get('bean_usage_results_per_page', 30),
+  if (module_exists("blockreference")) {
+
+    $form['bean_usage_results']['bean_usage_show_blockreference'] = array(
+      '#title' => t("Inspect Blockreference"),
+      '#description' => t("Allow Bean Usage to inspect Block Reference fields for usage"),
+      '#type' => 'checkbox',
+      '#default_value' => variable_get("bean_usage_show_blockreference", TRUE),
+    );
+
+    $form['bean_usage_results']['bean_usage_results_per_page'] = array(
+      '#title' => t('Results per page'),
+      '#description' => t('How many results display per page on the bean usage page'),
+      '#type' => 'select',
+      '#options' => array(
+        '5' => 5,
+        '10' => 10,
+        '15' => 15,
+        '20' => 20,
+        '25' => 25,
+        '30' => 30,
+        '35' => 35,
+        '40' => 40,
+        '45' => 45,
+        '50' => 50,
+      ),
+      '#default_value' => variable_get('bean_usage_results_per_page', 30),
+    );
+
+    $form['bean_usage_results']['bean_usage_include_field_revisions'] = array(
+      '#title' => t("Include Revisioned Fields"),
+      '#description' => t("Inspect an entity's field revisions for prior usage of bean. Only usable on an individual bean's history page."),
+      '#type' => 'checkbox',
+      '#default_value' => variable_get('bean_usage_include_field_revisions', FALSE),
+    );
+
+  }
+
+  if (module_exists("context"))  {
+    $form['bean_usage_results']['bean_usage_show_context'] = array(
+      '#title' => t("Inspect Contexts"),
+      '#description' => t("Allow Bean Usage to inspect Context for usage"),
+      '#type' => 'checkbox',
+      '#default_value' => variable_get("bean_usage_show_context", TRUE),
+    );
+  }
+
+  $form['bean_usage_results']['bean_usage_show_core'] = array(
+    '#title' => t("Inspect Core"),
+    '#description' => t("Allow Bean Usage to inspect the core Drupal block placement for usage"),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get("bean_usage_show_core", TRUE),
   );
 
   return system_settings_form($form);
+
 }
 
 /**
@@ -75,14 +110,14 @@ function bean_usage_filters() {
     '#title' => t('Title'),
     '#prefix' => '<div style="margin-right:10px; position:relative; float:left;">',
     '#suffix' => '</div>',
-    '#default_value' => $filters['title'],
+    '#default_value' => isset($filters['title']) ? $filters['title'] : '',
   );
   $form['bean_usage_filter']['bean_usage_filter_label'] = array(
     '#type' => 'textfield',
     '#title' => t('Label'),
     '#prefix' => '<div style="margin-right:10px; position:relative; float:left;">',
     '#suffix' => '</div>',
-    '#default_value' => $filters['label'],
+    '#default_value' => isset($filters['label']) ? $filters['label'] : '',
   );
 
   $form['bean_usage_filter']['actions'] = array(
