diff --git a/modules/ds_search/ds_search.module b/modules/ds_search/ds_search.module
index bc2e1f8..90fc28e 100644
--- a/modules/ds_search/ds_search.module
+++ b/modules/ds_search/ds_search.module
@@ -537,7 +537,12 @@ function ds_search_apachesolr_update_index(&$document, $node) {
   }
   // Creme de la creme: Put the full node object in the index,
   // so no node_loads are needed for results in the Apache Solr engine.
-  $document->addField('tm_node', urlencode(serialize(node_load($node->nid))));
+  //
+  // We are using xs_node because this field is not indexed by apachesolr and it
+  // is a single.
+  // @todo It takes 33% more space in the database of solr and is more
+  // processor demanding, maybe add a new field to schema.xml?
+  $document->addField('xs_node', base64_encode(node_load($node->nid)));
 }
 
 /**
@@ -546,7 +551,7 @@ function ds_search_apachesolr_update_index(&$document, $node) {
 function ds_search_apachesolr_query_alter($query) {
 
   // Get the node from the index.
-  $query->addParam('fl', 'tm_node');
+  $query->addParam('fl', 'xs_node');
 
   // Apache Solr multisite support.
   if (variable_get('ds_search_apachesolr_multisite') && variable_get('ds_search_type', 'node') == 'apachesolr_search') {
@@ -625,41 +630,55 @@ function apachesolr_search_ds_search_execute($keys = NULL, $conditions = NULL) {
   if (isset($find['apachesolr_search_browse'])) {
     unset($find['apachesolr_search_browse']);
   }
-
   if (empty($find)) {
     return array();
   }
+  $results = ds_search_process_results($find);
+  return $results;
+}
 
-  foreach ($find as $item) {
-
-    // Unserialize tm_node field.
-    $node = @unserialize(urldecode($item['fields']['tm_node'][0]));
-    if (!isset($node->nid)) {
-      $node = node_load($item['node']->entity_id);
-    }
+function ds_search_process_results($results) {
+  if(is_array($results) && !empty($results)) {
+    $processed_results = array();
+    foreach ($results as $result) {
+      // Unserialize xs_node field.
+      $node = @base64_decode($result['fields']['xs_node'][0]);
+      if (!isset($node->nid)) {
+        $node = node_load($result['node']->entity_id);
+      }
 
-    // Add the snippet, url and extra info on the object.
-    $node->search_snippet = $item['snippet'];
-    $node->search_extra = $item['extra'];
-    $node->search_as_url = $item['fields']['url'];
-
-    // Apache Solr multisite support.
-    if (variable_get('ds_search_apachesolr_multisite')) {
-      // Pass along the uri path in case some people want to
-      // do cool stuff themselves.
-      $node->uri['path'] = $node->search_as_url;
-      $node->uri['options'] = array();
-      // Prefix with site hash so we don't override same id's.
-      $markup = $item['fields']['tm_ds_search_result'][0];
-      $results[$item['fields']['id'] . '-' . $item['node']->entity_id] = array(
-       '#markup' => $markup,
-        '#site_hash' => $item['fields']['hash'],
-      );
-    }
-    else {
-      $results[$item['node']->entity_id] = $node;
+      // Add the snippet, url and extra info on the object.
+      $node->search_snippet = $result['snippet'];
+      $node->search_extra = $result['extra'];
+      $node->search_as_url = $result['fields']['url'];
+
+      // Apache Solr multisite support.
+      if (variable_get('ds_search_apachesolr_multisite')) {
+        // Pass along the uri path in case some people want to
+        // do cool stuff themselves.
+        $node->uri['path'] = $node->search_as_url;
+        $node->uri['options'] = array();
+        // Prefix with site hash so we don't override same id's.
+        $markup = $result['fields']['tm_ds_search_result'][0];
+        $processed_results[$result['fields']['id'] . '-' . $result['node']->entity_id] = array(
+         '#markup' => $markup,
+          '#site_hash' => $result['fields']['hash'],
+        );
+      }
+      else {
+        $processed_results[$result['node']->entity_id] = $node;
+      }
     }
   }
-
-  return $results;
+  return $processed_results;
+}
+/*
+ * Implements hook_apachesolr_search_page_alter(&$build, $search_page).
+ */
+function ds_search_apachesolr_search_page_alter(&$build, $search_page) {
+  if (!empty($build['search_results']['#results'])) {
+    $results = $build['search_results']['#results'];
+    $results = ds_search_process_results($results);
+    $build['search_results'] = ds_search_search_page($results);
+  }
 }
