diff --git a/webform_report.inc b/webform_report.inc
index bcc4901..1955660 100644
--- a/webform_report.inc
+++ b/webform_report.inc
@@ -87,6 +87,66 @@ function _webform_report_get_columns($node, $components) {
 }
 
 /**
+ * return an associative array containing every column in a webform,
+ * as well as the added webform report meta fields.
+ *
+ * @param node
+ *   the webform report node
+ * @param components
+ *   array of webform components
+ * @return
+ *   an associative array of webform report columns
+ */
+function _webform_report_get_all_columns($node, $components) {
+
+  // get format and options for columns included in webform report
+  $report_columns = array();
+  foreach ($node->columns as $column) {
+    $report_columns[$column['cid']] = array(
+      'format' => $column['format'],
+      'option' => $column['option'],
+      'hidden' => $column['hidden'],
+    );
+  }
+
+  $all_columns = array();
+  foreach ($components as $cid => $component) {
+
+    // exclude webform pagebreaks, markup fields and view/edit/delete links
+    if ($component['type'] != 'pagebreak' && $component['type'] != 'markup' && $cid > -5) {
+
+      // default formatting so dates don't get mangled
+      switch ($component['type']) {
+        case 'date':
+          $format = 'Y/m/d';
+          break;
+        case 'time':
+          $format = 'H:m';
+          break;
+        default:
+          $format = 'VALUE';
+      }
+
+      // allow the report to override default format
+      if (isset($report_columns[$cid]['format'])) {
+        $format = $report_columns[$cid]['format'];
+      }
+
+      $all_columns[] = array(
+        'name' => $component['name'],
+        'type' => $component['type'],
+        'format' => $format,
+        'option' => isset($report_columns[$cid]['option']) ? $report_columns[$cid]['option'] : '',
+        'cid' => $cid,
+        'hidden' => isset($report_columns[$cid]['hidden']) ? $report_columns[$cid]['hidden'] : FALSE,
+      );
+    }
+  }
+
+  return $all_columns;
+}
+
+/**
  * return an associative array containing the webform report filters
  *
  * @param node
@@ -319,14 +379,18 @@ function _webform_report_get_body_content($node, $teaser=FALSE, $page=FALSE) {
  * @return 
  *   report array - keys 'headers' = report headers, 'rows' = report rows
  */
-function _webform_report_get_report_data($node) {
+function _webform_report_get_report_data($node, $all_columns = FALSE) {
 
   $report = array();
   
   // get report criteria
   $components = _webform_report_get_components($node->wnid);
-  $columns = _webform_report_get_columns($node, $components);
-    
+  if ($all_columns) {
+    $columns = _webform_report_get_all_columns($node, $components);
+  } else {
+    $columns = _webform_report_get_columns($node, $components);
+  }
+
   // if any columns
   if (count($columns) > 0) {
     
@@ -1381,8 +1445,12 @@ function webform_report_export_form_submit($form_id, $form_state) {
   
   $node = node_load($nid);
 
-  $report = _webform_report_get_report_data($node);
-  
+  // check to see if CSV has been set to export all columns
+  if ($node->options['csv_export_all']) {
+    $all_columns = TRUE;
+  }
+  $report = _webform_report_get_report_data($node, $all_columns);
+
   if (isset($report['headers']) && isset($report['rows'])) {
       
     $output = _webform_report_output_csv($report['headers'], $report['rows'], $format, $delim);
diff --git a/webform_report_criteria.inc b/webform_report_criteria.inc
index 210483e..3102bb7 100644
--- a/webform_report_criteria.inc
+++ b/webform_report_criteria.inc
@@ -311,6 +311,17 @@ function webform_report_criteria_form($form_state, $node) {
       '#title' => t('Hide CSV Download option'),
       '#default_value' => $default,
     );
+
+    $default = FALSE;
+    if (is_array($node->options) && array_key_exists('csv_export_all', $node->options)) {
+      $default = $node->options['csv_export_all'];
+    }
+    $form['options']['csv_export_all'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Include all webform components in the CSV export'),
+      '#default_value' => $default,
+      '#description' => t('Checking this option will include all components from the webform in CSV exports, instead of only the columns specified in the report. You can exclude columns from these exports by adding hidden fields to the report columns.')
+    );
     
     $default = FALSE;  
     if (is_array($node->options) && array_key_exists('search_form', $node->options)) {
@@ -937,6 +948,7 @@ function webform_report_criteria_form_submit($form_id, $form_state) {
   // update options
   $node->options['results_per_page'] = $form_state['values']['results_per_page'];
   $node->options['hide_csv'] = $form_state['values']['hide_csv'];
+  $node->options['csv_export_all'] = $form_state['values']['csv_export_all'];
   $node->options['search_form'] = $form_state['values']['search_form'];
   $node->options['layout'] = $form_state['values']['layout'];
   if (user_access('use PHP code in webform reports') && isset($form_state['values']['php_code'])) {

