diff --git a/blockreference.module b/blockreference.module
index 10c820e..4f05e36 100644
--- a/blockreference.module
+++ b/blockreference.module
@@ -537,6 +537,7 @@ function _blockreference_potential_references($field, $current_bids = array(), $
  */
 function _blockreference_potential_references_standard($field, $current_bids = array(), $return_full_blocks = FALSE, $string = '', $exact_string = FALSE) {
   static $block_info = array();
+  global $theme_key;
   $related_regions = array();
   $related_modules = array();
   $related_clauses = array();
@@ -579,47 +580,65 @@ function _blockreference_potential_references_standard($field, $current_bids = a
 
   $args[':themes'] = blockreference_field_referenceable_themes($field);
 
-  // Assemble the query.
+  // Assemble and execute the query.
   $result = db_query(
-    'SELECT bid, module, delta, title, region, theme ' .
+    'SELECT * ' .
     'FROM {block} ' .
     "WHERE theme IN (:themes) " .
     $related_clause,
     $args
   );
 
-  // Execute the query, test each row, and return the blocks or block info.
-  $rows = array();
+  // Iterate and organize the results
+  $blocks = array();
   foreach ($result as $block) {
-    if (count($args[':themes']) <= 1) {
-      // If there were not multiple themes, don't track the theme.
-      unset($block->theme);
-    }
+    // Generate the block info for this module, if we haven't yet
     if (!isset($block_info[$block->module])) {
       $block_info[$block->module] = module_invoke($block->module, 'block_info');
     }
-    if (isset($block_info[$block->module][$block->delta]['info'])) {
-      $block->info = $block_info[$block->module][$block->delta]['info'];
-      if (
-        (
-          $exact_string &&
-          !empty($string) &&
-          $string == $block->info
-        ) ||
-        (
-          !empty($string) &&
+
+    // Set the info
+    $block->info = $block_info[$block->module][$block->delta]['info'];
+
+    // Store the block
+    $blocks[$block->module][$block->delta] = (array) $block;
+  }
+
+  // Allow module to alter the blocks via the core block alter hook
+  drupal_alter('block_info', $blocks, $theme_key, $block_info);
+
+  // Execute the query, test each row, and return the blocks or block info.
+  $rows = array();
+  foreach ($blocks as $module => $bids) {
+    foreach ($bids as $bid => $block) {
+      $block = (object) $block;
+
+      if (count($args[':themes']) <= 1) {
+        // If there were not multiple themes, don't track the theme.
+        unset($block->theme);
+      }
+      if (isset($block_info[$block->module][$block->delta]['info'])) {
+        if (
           (
-            (!empty($block->info) && stripos($block->info, $string) !== FALSE) ||
-            (!empty($block->title) && stripos($block->title, $string) !== FALSE) ||
-            (!empty($block->module) && stripos($block->module . ' ' . $block->delta, $string) !== FALSE) ||
-            (!empty($block->bid) && stripos($block->bid, $string) !== FALSE)
+            $exact_string &&
+            !empty($string) &&
+            $string == $block->info
+          ) ||
+          (
+            !empty($string) &&
+            (
+              (!empty($block->info) && stripos($block->info, $string) !== FALSE) ||
+              (!empty($block->title) && stripos($block->title, $string) !== FALSE) ||
+              (!empty($block->module) && stripos($block->module . ' ' . $block->delta, $string) !== FALSE) ||
+              (!empty($block->bid) && stripos($block->bid, $string) !== FALSE)
+            )
+          ) ||
+          (
+            empty($string)
           )
-        ) ||
-        (
-          empty($string)
-        )
-      ) {
-        $rows[$block->bid] = $return_full_blocks ? $block : $block->info;
+        ) {
+          $rows[$block->bid] = $return_full_blocks ? $block : $block->info;
+        }
       }
     }
   }
