diff --git modules/search.views.inc modules/search.views.inc
index ea0f6b0..ee4831c 100644
--- modules/search.views.inc
+++ modules/search.views.inc
@@ -160,8 +160,6 @@ function search_views_handlers() {
  * Implementation of hook_views_plugins
  */
 function search_views_plugins() {
-  return;
-  // DISABLED. This currently doesn't work.
   return array(
     'module' => 'views', // This just tells our themes are elsewhere.
     'row' => array(
@@ -170,61 +168,15 @@ function search_views_plugins() {
         'help' => t('Display the results with standard search view.'),
         'handler' => 'views_plugin_row_search_view',
         'path' => drupal_get_path('module', 'views') . '/modules/search', // not necessary for most modules
-        'theme' => 'views_view_row_search',
+        'theme' => 'search_result',
         'base' => array('node'), // only works with 'node' as base.
         'type' => 'normal',
+        'uses options' => TRUE,
       ),
     ),
   );
 }
 
 /**
- * Template helper for theme_views_view_row_search
- */
-function template_preprocess_views_view_row_search(&$vars) {
-  $vars['node'] = ''; // make sure var is defined.
-  $nid = $vars['row']->nid;
-  if (!is_numeric($nid)) {
-    return;
-  }
-
-  $node = node_load($nid);
-
-  if (empty($node)) {
-    return;
-  }
-
-  // Build the node body.
-  $node = node_build_content($node, FALSE, FALSE);
-  $node->body = drupal_render($node->content);
-
-  // Fetch comments for snippet
-  $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
-
-  // Fetch terms for snippet
-  $node->body .= module_invoke('taxonomy', 'nodeapi', $node, 'update index');
-
-  $vars['url'] = url('node/' . $nid);
-  $vars['title'] = check_plain($node->title);
-
-  $info = array();
-  $info['type'] = node_get_types('name', $node);
-  $info['user'] = theme('username', $node);
-  $info['date'] = format_date($node->changed, 'small');
-  $extra = node_invoke_nodeapi($node, 'search result');
-  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);
-}
-
-
-/**
  * @}
  */
diff --git modules/search/views_plugin_row_search_view.inc modules/search/views_plugin_row_search_view.inc
index bae266d..29d6cc1 100644
--- modules/search/views_plugin_row_search_view.inc
+++ 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();
 
@@ -29,6 +33,66 @@ class views_plugin_row_search_view extends views_plugin_row {
    * Override the behavior of the render() function.
    */
   function render($row) {
-    return theme($this->theme_functions(), $this->view, $this->options, $row);
+    $type = 'node';
+
+    $result['view'] = $this->view;
+    $result['row'] = $row;
+    $result['options'] = $this->options;
+
+    // Prepare the data like node_search('search') does it.
+    // Make sure we have a node.
+    $node = NULL;
+    $nid = $row->nid;
+    if (!is_numeric($nid)) {
+      return;
+    }
+
+    // Fetch the node
+    $node = node_load($nid);
+    if (empty($node)) {
+      return;
+    }
+
+    // Build the node body.
+    $node->build_mode = NODE_BUILD_SEARCH_RESULT;
+    $node = node_build_content($node, FALSE, FALSE);
+    $node->body = drupal_render($node->content);
+
+    // Fetch comments for snippet.
+    $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
+    // Fetch terms for snippet.
+    $node->body .= module_invoke('taxonomy', 'nodeapi', $node, 'update index');
+
+    // Get filter keys from views object
+    // Identifier is configurable so get the search 'keys' options first
+    if ($filter_options = $this->view->display_handler->handlers['filter']['keys']) {
+      // Set search identifier
+      $identifier = $filter_options->options['expose']['identifier'];
+    }
+
+    $score = 0
+    if ($this->options['score']) {
+      if ($total = db_result(db_query('SELECT COUNT(*) FROM {node} WHERE status = 1'))) {
+        $score = $row->score / $total;
+      }
+    }
+
+    // Use this value for highlighting search term
+    $snippet = search_excerpt($this->view->exposed_data[$identifier], $node->body);
+
+    $extra = node_invoke_nodeapi($node, 'search result');
+    $result = array(
+      'link' => url('node/' . $nid, array('absolute' => TRUE)),
+      'type' => check_plain(node_get_types('name', $node)),
+      'title' => $node->title,
+      'user' => theme('username', $node),
+      'date' => $node->changed,
+      'node' => $node,
+      'extra' => $extra,
+      'score' => $score,
+      'snippet' => $snippet,
+    );
+  
+    return theme($this->theme_functions(), $result, $type);
   }
 }
