diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index 6d660e3..760a129 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -371,16 +371,15 @@ function webform_results_download_form($form, &$form_state, $node) {
     '#theme' => 'webform_results_download_select_format',
   );
 
-  $csv_components = array(
-    'info' => t('Submission information'),
-    'serial' => '-' . t('Submission Number'),
-    'sid' => '-' . t('Submission ID'),
-    'time' => '-' . t('Time'),
-    'draft' => '-' . t('Draft'),
-    'ip_address' => '-' . t('IP Address'),
-    'uid' => '-' . t('User ID'),
-    'username' => '-' . t('Username'),
-  );
+  $csv_components = array('info' => t('Submission information'));
+  $csv_components += module_invoke_all('webform_submission_information_info');
+  // Prepend information fields with "-" to indent.
+  foreach ($csv_components as $key => &$title) {
+    if ($key !== 'info') {
+      $title = '-' . $title;
+    }
+  }
+
   $csv_components += webform_component_list($node, 'csv', TRUE);
 
   $form['components'] = array(
@@ -642,6 +641,43 @@ function theme_webform_results_download_select_format($variables) {
 }
 
 /**
+ * Implements hook_webform_submission_information_info().
+ */
+function webform_webform_submission_information_info() {
+  return array(
+    'webform_serial' => t('Serial'),
+    'webform_sid' => t('SID'),
+    'webform_time' => t('Time'),
+    'webform_draft' => t('Draft'),
+    'webform_ip_address' => t('IP Address'),
+    'webform_uid' => t('UID'),
+    'webform_username' => t('Username'),
+  );
+}
+
+/**
+ * Implements hook_webform_submission_information_data().
+ */
+function webform_webform_submission_information_data($item, $submission, $sid, $row_count) {
+  switch ($item) {
+    case 'webform_serial':
+      return $row_count;
+    case 'webform_sid':
+      return $sid;
+    case 'webform_time':
+      return format_date($submission->submitted, 'short');
+    case 'webform_draft':
+      return $submission->is_draft;
+    case 'webform_ip_address':
+      return $submission->remote_addr;
+    case 'webform_uid':
+      return $submission->uid;
+    case 'webform_username':
+      return $submission->name;
+  }
+}
+
+/**
  * Generate a Excel-readable CSV file containing all submissions for a Webform.
  *
  * The CSV requires that the data be presented in a flat file.  In order
@@ -678,15 +714,7 @@ function webform_results_export($node, $format = 'delimited', $options = array()
   module_load_include('inc', 'webform', 'includes/webform.export');
   module_load_include('inc', 'webform', 'includes/webform.components');
 
-  $submission_information = array(
-    'serial' => t('Serial'),
-    'sid' => t('SID'),
-    'time' => t('Time'),
-    'draft' => t('Draft'),
-    'ip_address' => t('IP Address'),
-    'uid' => t('UID'),
-    'username' => t('Username'),
-  );
+  $submission_information = module_invoke_all('webform_submission_information_info');
 
   if (empty($options)) {
     $options = array(
@@ -755,26 +783,10 @@ function webform_results_export($node, $format = 'delimited', $options = array()
     $row_count++;
 
     $row = array();
-    if (isset($submission_information['serial'])) {
-      $row[] = $row_count;
-    }
-    if (isset($submission_information['sid'])) {
-      $row[] = $sid;
-    }
-    if (isset($submission_information['time'])) {
-      $row[] = format_date($submission->submitted, 'short');
-    }
-    if (isset($submission_information['draft'])) {
-      $row[] = $submission->is_draft;
-    }
-    if (isset($submission_information['ip_address'])) {
-      $row[] =  $submission->remote_addr;
-    }
-    if (isset($submission_information['uid'])) {
-      $row[] = $submission->uid;
-    }
-    if (isset($submission_information['username'])) {
-      $row[] = $submission->name;
+    // Add submission information.
+    foreach (array_keys($submission_information) as $item) {
+      // implode() to ensure everything from a single value goes into one column, even if more than one module responds to this item.
+      $row[] = implode(', ', module_invoke_all('webform_submission_information_data', $item, $submission, $sid, $row_count));
     }
 
     foreach ($options['components'] as $cid) {
