diff --git a/apachesolr.api.php b/apachesolr.api.php
old mode 100644
new mode 100755
index 46b1afb..f0e9c96
--- a/apachesolr.api.php
+++ b/apachesolr.api.php
@@ -270,6 +270,13 @@ function hook_apachesolr_entity_info_alter(&$entity_info) {
   $entity_info['node']['cron_check'] = 'apachesolr_index_node_check_table';
   // Specific output processing for the results
   $entity_info['node']['apachesolr']['result callback'] = 'apachesolr_search_node_result';
+
+  // BUNDLE SPECIFIC OVERRIDES
+  // The following can be overridden on a per-bundle basis.
+  // The bundle-specific settings will take precedence over the entity settings.
+  $entity_info['node']['bundles']['page']['apachesolr']['result callback'] = 'apachesolr_search_node_result';
+  $entity_info['node']['bundles']['page']['apachesolr']['status callback'][] = 'apachesolr_index_node_status_callback';
+  $entity_info['node']['bundles']['page']['apachesolr']['document callback'][] = 'apachesolr_index_node_solr_document';
 }
 
 
diff --git a/apachesolr.index.inc b/apachesolr.index.inc
index bd89326..c168ba5 100644
--- a/apachesolr.index.inc
+++ b/apachesolr.index.inc
@@ -148,7 +148,7 @@ function apachesolr_index_entity_to_documents($item, $env_id) {
   $document = _apachesolr_index_process_entity_get_document($entity, $entity_type);
 
   //Get the callback array to add stuff to the document
-  $callbacks = apachesolr_entity_get_callback($entity_type, 'document callback');
+  $callbacks = apachesolr_entity_get_callback($entity_type, 'document callback', $bundle);
   $documents = array();
   foreach ($callbacks as $callback) {
     // Call a type-specific callback to add stuff to the document.
diff --git a/apachesolr.module b/apachesolr.module
index e201fe9..d8674fe 100644
--- a/apachesolr.module
+++ b/apachesolr.module
@@ -1805,7 +1805,7 @@ function apachesolr_entity_update($entity, $type) {
     list($id, $vid, $bundle) = entity_extract_ids($type, $entity);
 
     // Check status callback before sending to the index
-    $status_callbacks = apachesolr_entity_get_callback($type, 'status callback');
+    $status_callbacks = apachesolr_entity_get_callback($type, 'status callback', $bundle);
 
     $status = TRUE;
     if (is_array($status_callbacks)) {
diff --git a/apachesolr_search.module b/apachesolr_search.module
index 1a01ffa..9b86866 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -1206,8 +1206,9 @@ function apachesolr_search_process_response($response, DrupalSolrQueryInterface
         }
       }
       $hook = 'apachesolr_search_snippets__' . $doc->entity_type;
-      if (!empty($doc->bundle)) {
-        $hook .= '__' . $doc->bundle;
+      $bundle = !empty($doc->bundle) ? $doc->bundle : NULL;
+      if ($bundle) {
+        $hook .= '__' . $bundle;
       }
       $snippet = theme($hook, array('doc' => $doc, 'snippets' => $snippets));
 
@@ -1266,11 +1267,11 @@ function apachesolr_search_process_response($response, DrupalSolrQueryInterface
         'snippet' => $snippet,
         'fields' => $fields,
         'entity_type' => $doc->entity_type,
-        'bundle' => $doc->bundle,
+        'bundle' => $bundle,
       );
 
       // Call entity-type-specific callbacks for extra handling.
-      $function = apachesolr_entity_get_callback($doc->entity_type, 'result callback');
+      $function = apachesolr_entity_get_callback($doc->entity_type, 'result callback', $bundle);
       if (is_callable($function)) {
         $function($doc, $result, $extra);
       }
