diff --git a/bean.module b/bean.module
index b2fc35b..2811e69 100644
--- a/bean.module
+++ b/bean.module
@@ -199,6 +199,7 @@ function bean_menu() {
       'type' => MENU_LOCAL_TASK,
       'weight' => 100,
     );
+
   }
 
   return $items;
diff --git a/bean_usage/bean_usage.info b/bean_usage/bean_usage.info
index e69de29..2f6f071 100644
--- a/bean_usage/bean_usage.info
+++ b/bean_usage/bean_usage.info
@@ -0,0 +1,5 @@
+name = Bean Usage
+description = View Bean (Block Entities) Usage
+core = 7.x
+dependencies[] = blockreference
+package = Bean
diff --git a/bean_usage/bean_usage.module b/bean_usage/bean_usage.module
index e69de29..0730494 100644
--- a/bean_usage/bean_usage.module
+++ b/bean_usage/bean_usage.module
@@ -0,0 +1,286 @@
+<?php
+
+/*
+ * @file
+ * Show where Beans are used.
+ * Currently limited to beans displayed with blockreference.
+ *
+ */
+
+/**
+ * Implements hook_menu()
+ *
+ * @return array
+ */
+function bean_usage_menu() {
+  $items = array();
+
+  // Todo: beans can be placed via context and block admin - we should account for those as well.
+  // usage tab on bean view
+  $items['block/%bean_delta/usage'] = array(
+      'title' => 'Usage',
+      'description' => 'Displays a list of entities where this bean is used.',
+      'type' => MENU_LOCAL_TASK,
+      'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+      'page callback' => 'bean_usage_output',
+      'page arguments' => array(1),
+      'access arguments' => array('view bean usage'),
+);
+
+  // bean usage report
+  $items['admin/reports/bean/usage'] = array(
+      'title' => 'Bean Usage',
+      'description' => 'Displays a list of Beans (blockreferences) and where they are used.',
+      'page callback' => 'bean_usage_output',
+      'access arguments' => array('view bean usage'),
+);
+  return $items;
+}
+
+/**
+ * Implements hook_permission()
+ *
+ * @return array
+ */
+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.'),
+    ),
+  );
+
+  return $perms;
+}
+
+/**
+ * @file
+ * Bean Admin Functions and Display
+ */
+
+/**
+ * Displays a table of Beans and their usage
+ *
+ * @return string - the HTML for the table
+ */
+function bean_usage_output($bean_delta = NULL) {
+  $output = '';
+  $delta_specific = $delta_found = FALSE;
+
+  if (!empty($bean_delta) && is_object($bean_delta)) {
+    $delta_specific = TRUE;
+    drupal_set_title($bean_delta->label . ' Usage');
+    $bean_delta = $bean_delta->delta;
+  }
+
+  // Get all fields that are of type blockreference and not deleted
+  $fields = bean_usage_blockreference_fields();
+
+  // if we have something to work with
+  if (!empty($fields)) {
+    if ($delta_specific) {
+      $delta_found = FALSE;
+    }
+
+    // An array to hold the usage data for processing ad display
+    $usage = array();
+
+    // Get data from the data specific tables
+    foreach ($fields as $field) {
+      if (!$delta_found) {
+        // easier to do this here than in the db_select
+        $field_data_table = 'field_data_' . $field->field_name;
+
+        // the field name in the $field_data_table
+        $field_bid = $field->field_name . '_bid'; // the field name in the $field_data_table
+
+        $field_data = _bean_usage_field_data($field_bid, $field_data_table);
+
+        // If we have field data to work with
+        if (!empty($field_data)) {
+          foreach ($field_data as $data) {
+            // We want to link to display the entity type title/name
+            $entity_title = '';
+            switch ($data->entity_type) {
+              // If its a node, get the node title
+              case 'node':
+                $entity_title = _bean_usage_entity_display('node', $data->entity_id, 'nid', 'title');
+                break;
+
+              // If its a user, get the user name
+              case 'user':
+                $entity_title = _bean_usage_entity_display('user', $data->entity_id, 'uid', 'name');
+                break;
+            }
+
+            // Get the bean label for display
+            $query = db_select('bean', 'b');
+            $query->join('block', 'bl', 'b.delta = bl.delta');
+            $query->fields('b', array('label'));
+            $query->condition('bl.bid', $data->$field_bid);
+
+            if (!empty($bean_delta)) {
+              $query->condition('b.delta', $bean_delta);
+            }
+
+            $bean = $query->execute()->fetchAssoc();
+
+            // Save he data to the usage array for processing and display
+            if (!empty($bean['label'])) {
+              $usage[$bean['label']][$data->entity_type][$data->delta]['entity_id'] = $data->entity_id;
+              $usage[$bean['label']][$data->entity_type][$data->delta]['entity_title'] = $entity_title;
+
+              if ($delta_specific) {
+                $delta_found = TRUE;
+              }
+            }
+          }
+        } // foreach (result)
+      } // if (!empty($results))
+    } // foreach (fields)
+
+    // If we have any usage data create and display the table of data
+    if (!empty($usage)) {
+      $bean_table_data = array(
+        'rows' => array(),
+      );
+
+      if (empty($bean_delta)) {
+        $bean_table_data['header'] = array(
+          0 => array(
+            'data' => 'Bean label'
+          ),
+          1 => array(
+            'data' => 'Used in',
+          ),
+        );
+      }
+      else {
+        $bean_table_data['header'] = array(
+          0 => array(
+            'data' => 'Used in',
+          ),
+        );
+      }
+
+      foreach ($usage as $bean_label => $entity_data) {
+        foreach ($entity_data as $entity_type => $delta) {
+          // we create the row with the bean name first and set the rowspan to however many deltas there are
+          if (empty($bean_delta)) {
+            $bean_row = array(
+              'data'    => $bean_label,
+              'rowspan' => count($delta),
+            );
+          }
+
+          foreach ($delta as $entity) {
+            // We want to prefix the entity title with the entity id
+            // We also want the entity title to link back the to the entity page
+            $link_prefix = '';
+            $text_prefix = '';
+            switch ($entity_type) {
+              case 'node':
+                $text_prefix = '[nid:' . $entity['entity_id'] . '] ';
+                $link_prefix = 'node/';
+                break;
+              case 'user':
+                $text_prefix = '[uid:' . $entity['entity_id'] . '] ';
+                $link_prefix = 'user/';
+                break;
+            } // switch ($entity_type)
+
+            // 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_row)) {
+              $bean_table_data['rows'][] = array(
+                $bean_row,
+                $text_prefix . l($entity['entity_title'], drupal_get_path_alias($link_prefix . $entity['entity_id'])),
+              );
+            } // if (!empty($bean_row))
+            else {
+              $bean_table_data['rows'][] = array(
+                $text_prefix . l(
+                  t($entity['entity_title']),
+                  drupal_get_path_alias($link_prefix . $entity['entity_id']),
+                  array(
+                    'attributes' => array(
+                      'title'  => $entity['entity_title'],
+                      'target' => '_blank'
+                    ),
+                  )
+                ),
+              );
+            } // else
+            // empty out the $bean_row so that it doesn't display more than one if there are multiple deltas for the block
+            $bean_row = '';
+          } // foreach ($delta)
+        } // foreach ($entity_data)
+      } // foreach ($usage)
+      // Set the output using theme_table with the header and rows created above
+      $output = theme('table', array('header' => $bean_table_data['header'], 'rows' => $bean_table_data['rows']));
+    } // if (!empty($usage))
+    else {
+      $output = '<p>' . t('This bean is not used anywhere on the site.') . '</p>';
+    } // else
+  } // if (!empty($fields))
+
+  // return the output for page rendering
+  return $output;
+}
+
+/**
+ * Get all fields that are of type blockreference and not deleted
+ *
+ * @return mixed
+ */
+function bean_usage_blockreference_fields() {
+  $fields = &drupal_static(__FUNCTION__);
+
+  if (!isset($fields)) {
+    $fields = db_select('field_config', 'fc')
+      ->fields('fc', array('id', 'field_name', 'data'))
+      ->condition('type', 'blockreference')
+      ->condition('deleted', 0)
+      ->orderBy('id', 'asc')
+      ->execute()
+      ->fetchAllAssoc('id');
+  }
+  return $fields;
+}
+
+/**
+ * Helper function to grab field data from a given field data table by block id
+ *
+ * @param $field_bid
+ * @param $field_data_table
+ * @return mixed
+ */
+function _bean_usage_field_data($field_bid, $field_data_table) {
+  $field_data = db_select($field_data_table, 'fd')
+    ->fields('fd', array('entity_type', 'entity_id', $field_bid, 'delta'))
+    ->orderBy('entity_type', 'asc')
+    ->orderBy('delta', 'asc')
+    ->execute()
+    ->fetchAll(0);
+
+  return $field_data;
+}
+
+/**
+ * Helper function to display an entity on the report
+ *
+ * @param $table
+ * @param $value
+ * @param $key
+ * @param $column
+ * @return mixed
+ */
+function _bean_usage_entity_display($table, $value, $key, $column) {
+  $query = db_select($table, 't')
+    ->fields('t', array($column))
+    ->condition($key, $value)
+    ->execute()
+    ->fetchAssoc();
+
+  return $query[$column];
+}
\ No newline at end of file
