diff -rupN views_bonus_old/export/views-bonus-export-doc.tpl.php views_bonus/export/views-bonus-export-doc.tpl.php
--- views_bonus_old/export/views-bonus-export-doc.tpl.php	2009-04-03 15:22:22.000000000 +1100
+++ export/views-bonus-export-doc.tpl.php	2009-06-22 11:38:16.000000000 +1000
@@ -18,10 +18,6 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body>
-<?php 
-$table = theme('views_view_table', $view, $nodes, null);
-$table = preg_replace('/<\/?(a|span) ?.*?>/', '', $table); // strip 'a' and 'span' tags
-print $table;
-?>
+    <?php print $table; ?>
   </body>
 </html>
diff -rupN views_bonus_old/export/views_bonus_export.theme.inc views_bonus/export/views_bonus_export.theme.inc
--- views_bonus_old/export/views_bonus_export.theme.inc	2009-05-13 17:06:20.000000000 +1000
+++ export/views_bonus_export.theme.inc	2009-06-22 11:49:25.000000000 +1000
@@ -47,6 +47,20 @@ function template_preprocess_views_bonus
 function template_preprocess_views_bonus_export_doc(&$vars) {
   drupal_set_header('Content-Type: application/msword');
   _views_bonus_export_shared_preprocess($vars);
+  $table = theme('views_view_table', $vars['view'], $vars['options'], $vars['rows'], $vars['title']);
+  $table = preg_replace('/<\/?(a|span) ?.*?>/', '', $table);
+  $vars['table'] = $table;
+}
+
+/**
+ * Preprocess xls output template.
+ */
+function template_preprocess_views_bonus_export_xls(&$vars) {
+  drupal_set_header('Content-Type: application/msexcel');
+  _views_bonus_export_shared_preprocess($vars);
+  $table = theme('views_view_table', $vars['view'], $vars['options'], $vars['rows'], $vars['title']);
+  $table = preg_replace('/<\/?(a|span) ?.*?>/', '', $table);
+  $vars['table'] = $table;
 }
 
 /**
diff -rupN views_bonus_old/export/views_bonus_export.views.inc views_bonus/export/views_bonus_export.views.inc
--- views_bonus_old/export/views_bonus_export.views.inc	2009-05-13 17:06:20.000000000 +1000
+++ export/views_bonus_export.views.inc	2009-06-22 11:51:20.000000000 +1000
@@ -12,6 +12,7 @@ function views_bonus_export_views_plugin
   $path = drupal_get_path('module', 'views_bonus_export');
   return array(
     'style' => array(
+/*
       'views_bonus_export' => array(
         // this isn't really a display but is necessary so the file can
         // be included.
@@ -19,12 +20,12 @@ function views_bonus_export_views_plugin
         'handler' => 'views_bonus_plugin_style_export',
         'path' => $path,
       ),
+*/
       'views_csv' => array(
         'title' => t('CSV file'),
         'help' => t('Display the view as a comma seperated list.'),
         'path' => $path,
         'handler' => 'views_bonus_plugin_style_export_csv',
-        'parent' => 'views_bonus_export',
         'theme' => 'views_bonus_export_csv',
         'theme file' => 'views_bonus_export.theme.inc',
         'uses row plugin' => FALSE,
@@ -37,7 +38,7 @@ function views_bonus_export_views_plugin
         'help' => t('Display the view as a doc file.'),
         'path' => $path,
         'handler' => 'views_bonus_plugin_style_export_doc',
-        'parent' => 'views_bonus_export',
+        'parent' => 'table',
         'theme' => 'views_bonus_export_doc',
         'theme file' => 'views_bonus_export.theme.inc',
         'uses row plugin' => FALSE,
@@ -50,7 +51,6 @@ function views_bonus_export_views_plugin
         'help' => t('Display the view as a txt file.'),
         'path' => $path,
         'handler' => 'views_bonus_plugin_style_export_txt',
-        'parent' => 'views_bonus_export',
         'theme' => 'views_bonus_export_txt',
         'theme file' => 'views_bonus_export.theme.inc',
         'uses row plugin' => FALSE,
@@ -58,12 +58,24 @@ function views_bonus_export_views_plugin
         'uses options' => TRUE,
         'type' => 'feed',
       ),
+      'views_xls' => array(
+        'title' => t('XLS file'),
+        'help' => t('Display the view as a xls file.'),
+        'path' => $path,
+        'handler' => 'views_bonus_plugin_style_export_xls',
+        'parent' => 'table',
+        'theme' => 'views_bonus_export_xls',
+        'theme file' => 'views_bonus_export.theme.inc',
+        'uses row plugin' => FALSE,
+        'uses fields' => TRUE,
+        'uses options' => TRUE,
+        'type' => 'feed',
+      ),
       'views_xml' => array(
         'title' => t('XML file'),
         'help' => t('Display the view as a txt file.'),
         'path' => $path,
         'handler' => 'views_bonus_plugin_style_export_xml',
-        'parent' => 'views_bonus_export',
         'theme' => 'views_bonus_export_xml',
         'theme file' => 'views_bonus_export.theme.inc',
         'uses row plugin' => FALSE,
diff -rupN views_bonus_old/export/views-bonus-export-xls.tpl.php views_bonus/export/views-bonus-export-xls.tpl.php
--- views_bonus_old/export/views-bonus-export-xls.tpl.php	1970-01-01 10:00:00.000000000 +1000
+++ export/views-bonus-export-xls.tpl.php	2009-06-18 17:03:48.000000000 +1000
@@ -0,0 +1,23 @@
+<?php
+// $Id$
+/**
+ * @file views-view-table.tpl.php
+ * Template to display a view as a table.
+ *
+ * - $title : The title of this group of rows.  May be empty.
+ * - $rows: An array of row items. Each row is an array of content
+ *   keyed by field ID.
+ * - $header: an array of haeaders(labels) for fields.
+ * - $themed_rows: a array of rows with themed fields.
+ * @ingroup views_templates
+ */
+
+?>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  </head>
+  <body>
+  <?php print $table; ?>
+  </body>
+</html>
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export_csv.inc views_bonus/export/views_bonus_plugin_style_export_csv.inc
--- views_bonus_old/export/views_bonus_plugin_style_export_csv.inc	2009-05-10 06:52:10.000000000 +1000
+++ export/views_bonus_plugin_style_export_csv.inc	2009-06-22 11:44:49.000000000 +1000
@@ -10,7 +10,7 @@
  *
  * @ingroup views_style_plugins
  */
-class views_bonus_plugin_style_export_csv extends views_bonus_plugin_style_export {
+class views_bonus_plugin_style_export_csv extends views_plugin_style {
   /**
    * Initialize plugin.
    *
@@ -86,4 +86,20 @@ class views_bonus_plugin_style_export_cs
       '#default_value' => !empty($this->options['header']),
     );
   }
+
+  /**
+   * Attach this view to another display as a feed.
+   *
+   * Provide basic functionality for all export style views like attaching a
+   * feed image link.
+   */
+  function attach_to($display_id, $path, $title) {
+    $url_options = array('html' => true);
+    $input = $this->view->get_exposed_input();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $image = theme('image', $this->feed_image);
+    $this->view->feed_icon .= l($image, $this->view->get_url(NULL, $path), $url_options);
+  }
 }
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export_doc.inc views_bonus/export/views_bonus_plugin_style_export_doc.inc
--- views_bonus_old/export/views_bonus_plugin_style_export_doc.inc	2008-12-28 14:47:37.000000000 +1100
+++ export/views_bonus_plugin_style_export_doc.inc	2009-06-22 11:46:15.000000000 +1000
@@ -10,7 +10,7 @@
  *
  * @ingroup views_style_plugins
  */
-class views_bonus_plugin_style_export_doc extends views_bonus_plugin_style_export {
+class views_bonus_plugin_style_export_doc extends views_plugin_style_table {
   /**
    * Initialize plugin.
    *
@@ -51,11 +51,27 @@ class views_bonus_plugin_style_export_do
   function options_form(&$form, &$form_state) {
     $form['filename'] = array(
       '#type' => 'textfield',
-      '#title' => t('CSV filename'),
+      '#title' => t('DOC filename'),
       '#default_value' => $this->options['filename'],
       '#description' => t('The filename that will be suggested to the browser for downloading purposes. %view will be replaced with the view name.'),
       '#process' => array('views_process_dependency'),
       '#dependency' => array('edit-style-options-override' => array(FALSE)),
     );
   }
+
+  /**
+   * Attach this view to another display as a feed.
+   *
+   * Provide basic functionality for all export style views like attaching a
+   * feed image link.
+   */
+  function attach_to($display_id, $path, $title) {
+    $url_options = array('html' => true);
+    $input = $this->view->get_exposed_input();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $image = theme('image', $this->feed_image);
+    $this->view->feed_icon .= l($image, $this->view->get_url(NULL, $path), $url_options);
+  }
 }
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export.inc views_bonus/export/views_bonus_plugin_style_export.inc
--- views_bonus_old/export/views_bonus_plugin_style_export.inc	2009-05-06 05:47:09.000000000 +1000
+++ export/views_bonus_plugin_style_export.inc	1970-01-01 10:00:00.000000000 +1000
@@ -1,30 +0,0 @@
-<?php
-// $Id: views_bonus_plugin_style_export.inc,v 1.6 2009/05/05 19:47:09 neclimdul Exp $
-/**
- * @file
- * Plugin include file for export style plugin.
- */
-
-/**
- * Generalized style plugin for export plugins.
- *
- * @ingroup views_style_plugins
- */
-class views_bonus_plugin_style_export extends views_plugin_style {
-
-  /**
-   * Attach this view to another display as a feed.
-   *
-   * Provide basic functionality for all export style views like attaching a
-   * feed image link.
-   */
-  function attach_to($display_id, $path, $title) {
-    $url_options = array('html' => true);
-    $input = $this->view->get_exposed_input();
-    if ($input) {
-      $url_options['query'] = $input;
-    }
-    $image = theme('image', $this->feed_image);
-    $this->view->feed_icon .= l($image, $this->view->get_url(NULL, $path), $url_options);
-  }
-}
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export_txt.inc views_bonus/export/views_bonus_plugin_style_export_txt.inc
--- views_bonus_old/export/views_bonus_plugin_style_export_txt.inc	2008-12-28 14:47:37.000000000 +1100
+++ export/views_bonus_plugin_style_export_txt.inc	2009-06-22 11:48:26.000000000 +1000
@@ -10,7 +10,7 @@
  *
  * @ingroup views_style_plugins
  */
-class views_bonus_plugin_style_export_txt extends views_bonus_plugin_style_export {
+class views_bonus_plugin_style_export_txt extends views_plugin_style {
   /**
    * Initialize plugin.
    *
@@ -51,11 +51,27 @@ class views_bonus_plugin_style_export_tx
   function options_form(&$form, &$form_state) {
     $form['filename'] = array(
       '#type' => 'textfield',
-      '#title' => t('CSV filename'),
+      '#title' => t('TXT filename'),
       '#default_value' => $this->options['filename'],
       '#description' => t('The filename that will be suggested to the browser for downloading purposes. %view will be replaced with the view name.'),
       '#process' => array('views_process_dependency'),
       '#dependency' => array('edit-style-options-override' => array(FALSE)),
     );
   }
+
+  /**
+   * Attach this view to another display as a feed.
+   *
+   * Provide basic functionality for all export style views like attaching a
+   * feed image link.
+   */
+  function attach_to($display_id, $path, $title) {
+    $url_options = array('html' => true);
+    $input = $this->view->get_exposed_input();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $image = theme('image', $this->feed_image);
+    $this->view->feed_icon .= l($image, $this->view->get_url(NULL, $path), $url_options);
+  }
 }
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export_xls.inc views_bonus/export/views_bonus_plugin_style_export_xls.inc
--- views_bonus_old/export/views_bonus_plugin_style_export_xls.inc	1970-01-01 10:00:00.000000000 +1000
+++ export/views_bonus_plugin_style_export_xls.inc	2009-06-18 17:08:16.000000000 +1000
@@ -0,0 +1,77 @@
+<?php
+// $Id$
+/**
+ * @file
+ * Plugin include file for export style plugin.
+ */
+
+/**
+ * Generalized style plugin for export plugins.
+ *
+ * @ingroup views_style_plugins
+ */
+class views_bonus_plugin_style_export_xls extends views_plugin_style_table {
+  /**
+   * Initialize plugin.
+   *
+   * Set feed image for shared rendering later.
+   */
+  function init(&$view, &$display, $options = NULL) {
+    parent::init($view, $display, $options = NULL);
+    $this->feed_image = drupal_get_path('module', 'views_bonus_export') . '/images/xls.png';
+  }
+
+  /**
+   * Set options fields and default values.
+   *
+   * @return
+   * An array of options information.
+   */
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['filename'] = array(
+      'default' => 'view-%view.xls',
+      'translatable' => FALSE,
+    );
+
+    return $options;
+  }
+
+  /**
+   * Options form mini callback.
+   *
+   * @param $form
+   * Form array to add additional fields to.
+   * @param $form_state
+   * State of the form.
+   * @return
+   * None.
+   */
+  function options_form(&$form, &$form_state) {
+    $form['filename'] = array(
+      '#type' => 'textfield',
+      '#title' => t('XLS filename'),
+      '#default_value' => $this->options['filename'],
+      '#description' => t('The filename that will be suggested to the browser for downloading purposes. %view will be replaced with the view name.'),
+      '#process' => array('views_process_dependency'),
+      '#dependency' => array('edit-style-options-override' => array(FALSE)),
+    );
+  }
+
+  /**
+   * Attach this view to another display as a feed.
+   *
+   * Provide basic functionality for all export style views like attaching a
+   * feed image link.
+   */
+  function attach_to($display_id, $path, $title) {
+    $url_options = array('html' => true);
+    $input = $this->view->get_exposed_input();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $image = theme('image', $this->feed_image);
+    $this->view->feed_icon .= l($image, $path, $url_options);
+  }
+}
diff -rupN views_bonus_old/export/views_bonus_plugin_style_export_xml.inc views_bonus/export/views_bonus_plugin_style_export_xml.inc
--- views_bonus_old/export/views_bonus_plugin_style_export_xml.inc	2009-05-11 16:58:06.000000000 +1000
+++ export/views_bonus_plugin_style_export_xml.inc	2009-06-22 11:49:09.000000000 +1000
@@ -10,7 +10,7 @@
  *
  * @ingroup views_style_plugins
  */
-class views_bonus_plugin_style_export_xml extends views_bonus_plugin_style_export {
+class views_bonus_plugin_style_export_xml extends views_plugin_style {
   /**
    * Initialize plugin.
    *
@@ -73,4 +73,20 @@ class views_bonus_plugin_style_export_xm
       ),
     );
   }
+
+  /**
+   * Attach this view to another display as a feed.
+   *
+   * Provide basic functionality for all export style views like attaching a
+   * feed image link.
+   */
+  function attach_to($display_id, $path, $title) {
+    $url_options = array('html' => true);
+    $input = $this->view->get_exposed_input();
+    if ($input) {
+      $url_options['query'] = $input;
+    }
+    $image = theme('image', $this->feed_image);
+    $this->view->feed_icon .= l($image, $this->view->get_url(NULL, $path), $url_options);
+  }
 }
