diff --git a/bean.module b/bean.module
index b2fc35b..8b12283 100644
--- a/bean.module
+++ b/bean.module
@@ -139,7 +139,6 @@ function bean_menu() {
     'weight' => -20,
   );
 
-
   $items['block/%bean_delta/edit'] = array(
     'title' => 'Edit',
     'type' => MENU_LOCAL_TASK,
@@ -151,6 +150,17 @@ function bean_menu() {
     'file' => 'includes/bean.pages.inc',
   );
 
+  $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',
+    'page arguments' => array(1),
+    'access arguments' => array('view bean usage'),
+    'file' => 'includes/bean.admin.inc',
+  );
+
   $items['block/%bean_delta/delete'] = array(
     'title' => 'Delete',
     'page callback' => 'drupal_get_form',
@@ -163,7 +173,6 @@ function bean_menu() {
     'file' => 'includes/bean.pages.inc',
   );
 
-
   $items['admin/content/blocks'] = array(
     'title' => 'Blocks',
     'description' => 'Manage blocks used on your site.',
@@ -173,6 +182,14 @@ function bean_menu() {
     'type' => MENU_LOCAL_TASK | MENU_NORMAL_ITEM,
   );
 
+  $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',
+    'access arguments' => array('view bean usage'),
+    'file' => 'includes/bean.admin.inc',
+  );
+
   if (module_exists('devel')) {
     $devel_path = drupal_get_path('module', 'devel');
     $items['block/%bean_delta/devel'] = array(
@@ -489,6 +506,10 @@ function bean_permission() {
       'title' => t('View Bean page'),
       'description' => t('Visit !url', array('!url' => "block/<delta>")),
     ),
+    'view bean usage' => array(
+      'title' => t('View bean usage'),
+      'description' => t('View a list of Beans (blockreferences) and where they are used.')
+    ),
   );
 
   // Add a Permission for each entity type.
@@ -979,4 +1000,4 @@ function bean_services_resources() {
       ),
     ),
   );
-}
+}
\ No newline at end of file
diff --git a/includes/bean.admin.inc b/includes/bean.admin.inc
index e69de29..674fc43 100644
--- a/includes/bean.admin.inc
+++ b/includes/bean.admin.inc
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * @file
+ * Bean Admin Functions and Display
+ */
+
+/**
+ * Displays a table of Beans and their usage
+ *
+ * @return string - the HTML for the table
+ */
+function bean_usage($bean_delta = NULL) {
+  $output = '';
+  $delta_specific = 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 = db_select('field_config', 'fc')
+    ->fields('fc', array('id', 'field_name', 'data'))
+    ->condition('type', 'blockreference')
+    ->condition('deleted', 0)
+    ->orderBy('id', 'asc')
+    ->execute()
+    ->fetchAllAssoc('id');
+
+  // 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
+        $bid = $field->field_name . '_bid'; // the field name in the $field_data_table
+
+        $field_data = db_select($field_data_table, 'fd')
+          ->fields('fd', array('entity_type', 'entity_id', $bid, 'delta'))
+          ->orderBy('entity_type', 'asc')
+          ->orderBy('delta', 'asc')
+          ->execute()
+          ->fetchAll(0);
+
+        // 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':
+                $q = db_select('node', 'n')
+                  ->fields('n', array('title'))
+                  ->condition('nid', $data->entity_id)
+                  ->execute()
+                  ->fetchAssoc();
+
+                $entity_title = $q['title'];
+                break;
+
+              // If its a user, get the user name
+              case 'user':
+                $q = db_select('user', 'u')
+                  ->fields('u', array('name'))
+                  ->condition('uid', $data->entity_id)
+                  ->execute()
+                  ->fetchAssoc();
+
+                $entity_title = $q['name'];
+                break;
+            }
+
+            // Get the bean label for display
+            $query = db_select('bean', 'b');
+            $query->join('block', 'bl', 'b.bid = bl.delta');
+            $query->fields('b', array('label'));
+            $query->condition('bl.bid', $data->$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($bean_table_data);
+    } // 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;
+}
\ No newline at end of file
