diff --git a/modules/search.views.inc b/modules/search.views.inc
index dad84bb..da951eb 100644
--- a/modules/search.views.inc
+++ b/modules/search.views.inc
@@ -23,6 +23,10 @@ function search_views_data() {
       'left_field' => 'nid',
       'field' => 'sid',
     ),
+    'users' => array(
+      'left_field' => 'uid',
+      'field' => 'sid',
+    ),
   );
 
   $data['search_total']['table']['join'] = array(
@@ -133,7 +137,7 @@ function search_views_data() {
  * Implements hook_views_plugins().
  */
 function search_views_plugins() {
-  return;
+  // return;
   // DISABLED. This currently doesn't work.
   return array(
     'module' => 'views', // This just tells our themes are elsewhere.
@@ -147,9 +151,11 @@ function search_views_plugins() {
         'base' => array('node'), // only works with 'node' as base.
         'type' => 'normal',
       ),
+      /*
       'views_handler_argument_search' => array(
         'parent' => 'views_handler_argument',
       ),
+      */
     ),
   );
 }
@@ -157,7 +163,15 @@ function search_views_plugins() {
 /**
  * Template helper for theme_views_view_row_search
  */
-function template_preprocess_views_view_row_search(&$vars) {
+function template_preprocess_views_view_row_search(&$vars) {  
+  if (!isset($vars['filter_options'])) {
+    $vars['filter_options'] = $vars['view']->display_handler->handlers['filter']['keys'];
+  }
+  if (isset($vars['filter_options']->view)) {
+    unset($vars['filter_options']->view);
+  }
+  $vars['identifier'] = $vars['filter_options']->options['expose']['identifier'];
+  
   $vars['node'] = ''; // make sure var is defined.
   $nid = $vars['row']->nid;
   if (!is_numeric($nid)) {
@@ -166,37 +180,49 @@ function template_preprocess_views_view_row_search(&$vars) {
 
   // @todo: Once the search row is fixed this node_load should be replace by a node_load_multiple
   $node = node_load($nid);
-
+  $text = '';
+  
   if (empty($node)) {
     return;
   }
 
   // Build the node body.
-  $node = node_build_content($node, FALSE, FALSE);
-  $node->body = drupal_render($node->content);
+  // node_build_content($node, FALSE, FALSE);
+  $elements = node_view($node, 'full');    
+  $elements['links']['#access'] = FALSE;  
+  $children = element_children($elements, TRUE);
+  if ($children) {
+    foreach ($children as $key) {
+      $output = drupal_render($elements[$key]);
+      if (!is_array($output)) {
+        $text .= $output;
+      }
+    }
+  }
 
   // Fetch comments for snippet
-  $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
+  // $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
 
   // Fetch terms for snippet
-  $node->body .= module_invoke('taxonomy', 'nodeapi', $node, 'update index');
+  // $node->body .= module_invoke('taxonomy', 'nodeapi', $node, 'update index');
 
-  $vars['url'] = url('node/' . $nid);
+  $vars['url'] = url('node/' . $nid);  
   $vars['title'] = check_plain($node->title);
 
   $info = array();
-  $info['type'] = node_type_get_name($node);
-  $info['user'] = theme('username', array('acccount' => $node));
+  $info['type'] = node_type_get_name($node);  
+  $info['user'] = theme('username', array('account' => $node));
   $info['date'] = format_date($node->changed, 'small');
   $extra = module_invoke_all('node_search_result', $node);
   if (isset($extra) && is_array($extra)) {
     $info = array_merge($info, $extra);
   }
   $vars['info_split'] = $info;
-  $vars['info'] = implode(' - ', $info);
-
-  $vars['node'] = $node;
-  // @todo: get score from ???
-//$vars['score'] = $item->score;
-  $vars['snippet'] = search_excerpt($vars['view']->value, $node->body);
+  $vars['info']  = implode(' - ', $info);
+  $vars['node']  = $node;
+  if (isset($vars['row']->score)) {
+    $vars['score'] = $vars['row']->score;
+    // $vars['score'] = $vars['row']->{$vars['filter_options']->search_score}; //score;
+  }  
+  $vars['snippet'] = search_excerpt($vars['view']->exposed_data[$vars['identifier']], $text);
 }
diff --git a/modules/search/views_handler_argument_search.inc b/modules/search/views_handler_argument_search.inc
index f0a4a44..959a25a 100644
--- a/modules/search/views_handler_argument_search.inc
+++ b/modules/search/views_handler_argument_search.inc
@@ -56,7 +56,7 @@ class views_handler_argument_search extends views_handler_argument {
       $join->construct('search_total', $search_index, 'word', 'word');
       $search_total = $this->query->add_relationship('search_total', $join, $search_index);
 
-      $this->search_score = $this->query->add_field('', "SUM($search_index.score * $search_total.count)", 'score', array('aggregate' => TRUE));
+      $this->search_score = $this->query->add_field('', "$search_index.score * $search_total.count", 'score', array('aggregate' => TRUE, 'function' => 'sum'));
 
       if (empty($this->query->relationships[$this->relationship])) {
         $base_table = $this->query->base_table;
diff --git a/modules/search/views_handler_filter_search.inc b/modules/search/views_handler_filter_search.inc
index 16515a7..368beb5 100644
--- a/modules/search/views_handler_filter_search.inc
+++ b/modules/search/views_handler_filter_search.inc
@@ -50,7 +50,6 @@ class views_handler_filter_search extends views_handler_filter {
     );
   }
 
-
   /**
    * Provide simple equality operator
    */
@@ -150,7 +149,7 @@ class views_handler_filter_search extends views_handler_filter {
         $join->construct('search_total', $search_index, 'word', 'word');
         $search_total = $this->query->add_relationship('search_total', $join, $search_index);
 
-        $this->search_score = $this->query->add_field('', "SUM($search_index.score * $search_total.count)", 'score', array('aggregate' => TRUE));
+        $this->search_score = $this->query->add_field('', "$search_index.score * $search_total.count", 'score', array('aggregate' => TRUE, 'function' => 'sum'));
       }
 
       if (empty($this->query->relationships[$this->relationship])) {
diff --git a/modules/search/views_plugin_row_search_view.inc b/modules/search/views_plugin_row_search_view.inc
index e4aacdc..a698ada 100644
--- a/modules/search/views_plugin_row_search_view.inc
+++ b/modules/search/views_plugin_row_search_view.inc
@@ -9,6 +9,10 @@
  * Plugin which performs a node_view on the resulting object.
  */
 class views_plugin_row_search_view extends views_plugin_row {
+  // Basic properties that let the row style follow relationships.
+  var $base_table = 'node';
+  var $base_field = 'nid';
+  
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/theme/views-view-row-search.tpl.php b/theme/views-view-row-search.tpl.php
new file mode 100644
index 0000000..784b506
--- /dev/null
+++ b/theme/views-view-row-search.tpl.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file search-result.tpl.php
+ * Default theme implementation for displaying a single search result.
+ *
+ * This template renders a single search result and is collected into
+ * search-results.tpl.php. This and the parent template are
+ * dependent to one another sharing the markup for definition lists.
+ *
+ * Available variables:
+ * - $url: URL of the result.
+ * - $title: Title of the result.
+ * - $snippet: A small preview of the result. Does not apply to user searches.
+ * - $info: String of all the meta information ready for print. Does not apply
+ *   to user searches.
+ * - $info_split: Contains same data as $info, split into a keyed array.
+ * - $type: The type of search, e.g., "node" or "user".
+ *
+ * Default keys within $info_split:
+ * - $info_split['type']: Node type.
+ * - $info_split['user']: Author of the node linked to users profile. Depends
+ *   on permission.
+ * - $info_split['date']: Last update of the node. Short formatted.
+ * - $info_split['comment']: Number of comments output as "% comments", %
+ *   being the count. Depends on comment.module.
+ * - $info_split['upload']: Number of attachments output as "% attachments", %
+ *   being the count. Depends on upload.module.
+ *
+ * Since $info_split is keyed, a direct print of the item is possible.
+ * This array does not apply to user searches so it is recommended to check
+ * for their existance before printing. The default keys of 'type', 'user' and
+ * 'date' always exist for node searches. Modules may provide other data.
+ *
+ *   <?php if (isset($info_split['comment'])) : ?>
+ *     <span class="info-comment">
+ *       <?php print $info_split['comment']; ?>
+ *     </span>
+ *   <?php endif; ?>
+ *
+ * To check for all available data within $info_split, use the code below.
+ *
+ *   <?php print '<pre>'. check_plain(print_r($info_split, 1)) .'</pre>'; ?>
+ *
+ * @see template_preprocess_search_result()
+ */
+?>
+<dt class="title">
+  <a href="<?php print $url; ?>"><?php print $title; ?></a>
+</dt>
+<dd>
+  <?php if ($snippet) : ?>
+    <p class="search-snippet"><?php print $snippet; ?></p>
+  <?php endif; ?>
+  <?php if ($info) : ?>
+  <p class="search-info"><?php print $info; ?></p>
+  <?php endif; ?>
+</dd>
\ No newline at end of file
