diff --git a/includes/webform.pages.inc b/includes/webform.pages.inc
index 97c9395..3fdb39e 100644
--- a/includes/webform.pages.inc
+++ b/includes/webform.pages.inc
@@ -89,12 +89,22 @@ function webform_configure_form($form, &$form_state, $node) {
     '#title' => t('Total submissions limit'),
     '#theme' => 'webform_advanced_total_submit_limit_form',
     '#description' => t('Limit the total number of allowed submissions.'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['total_submit_limit']['enforce_total_limit'] = array(
     '#type' => 'radios',
     '#options' => array('no' => t('Unlimited'), 'yes' => 'Limit to !count total submission(s) !timespan'),
     '#default_value' => $node->webform['total_submit_limit'] == -1 ? 'no' : 'yes',
     '#parents' => array('enforce_total_limit'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['total_submit_limit']['total_submit_limit'] = array(
     '#type' => 'textfield',
@@ -102,6 +112,11 @@ function webform_configure_form($form, &$form_state, $node) {
     '#size' => 8,
     '#default_value' => $node->webform['total_submit_limit'] != -1 ? $node->webform['total_submit_limit'] : '',
     '#parents' => array('total_submit_limit'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['total_submit_limit']['total_submit_interval'] = array(
     '#type' => 'select',
@@ -113,6 +128,11 @@ function webform_configure_form($form, &$form_state, $node) {
     ),
     '#default_value' => $node->webform['total_submit_interval'],
     '#parents' => array('total_submit_interval'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
 
   // Submission limit per user settings.
@@ -121,12 +141,22 @@ function webform_configure_form($form, &$form_state, $node) {
     '#title' => t('Per user submission limit'),
     '#theme' => 'webform_advanced_submit_limit_form',
     '#description' => t('Limit the number of submissions <em>per user</em>. A user is identified by their user login if logged-in, or by their IP Address and Cookie if anonymous. Use of cookies may be modified in the global <a href="!url">Webform settings</a>.', array('!url' => url('admin/config/content/webform'))),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['submit_limit']['enforce_limit'] = array(
     '#type' => 'radios',
     '#options' => array('no' => t('Unlimited'), 'yes' => 'Limit each user to !count submission(s) !timespan'),
     '#default_value' => $node->webform['submit_limit'] == -1 ? 'no' : 'yes',
     '#parents' => array('enforce_limit'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['submit_limit']['submit_limit'] = array(
     '#type' => 'textfield',
@@ -134,6 +164,11 @@ function webform_configure_form($form, &$form_state, $node) {
     '#size' => 2,
     '#default_value' => $node->webform['submit_limit'] != -1 ? $node->webform['submit_limit'] : '',
     '#parents' => array('submit_limit'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
   $form['submission']['submit_limit']['submit_interval'] = array(
     '#type' => 'select',
@@ -145,6 +180,11 @@ function webform_configure_form($form, &$form_state, $node) {
     ),
     '#default_value' => $node->webform['submit_interval'],
     '#parents' => array('submit_interval'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_meta_data"]' => array('checked' => TRUE),
+      ),
+    ),
   );
 
   $form['submission']['status'] = array(
@@ -222,6 +262,23 @@ function webform_configure_form($form, &$form_state, $node) {
     '#default_value' => $node->webform['submit_notice'],
     '#description' => t('Show the previous submissions notification that appears when users have previously submitted this form.'),
   );
+  $form['advanced']['no_storage'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Do not store submitted data.'),
+    '#default_value' => $node->webform['no_storage'],
+    '#description' => t('No submitted data will be stored in the database. Will automatically disable saving as draft.'),
+  );
+  $form['advanced']['no_meta_data'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Do not store submission meta-data.'),
+    '#default_value' => $node->webform['no_meta_data'],
+    '#description' => t('If left unchecked, Webform will store the date and time that a submission was made, the user who made submission and the IP address the submission came from (no submitted data will be stored). Will automatically disable any submission limit settings if checked.'),
+    '#states' => array(
+      'invisible' => array(
+       'input[name="no_storage"]' => array('checked' => FALSE),
+      ),
+    ),
+  );
   $form['advanced']['submit_text'] = array(
     '#type' => 'textfield',
     '#title' => t('Submit button text'),
@@ -334,6 +391,29 @@ function webform_configure_form_submit($form, &$form_state) {
   // Set submit notice.
   $node->webform['submit_notice'] = $form_state['values']['submit_notice'];
 
+  // Set no storage.
+  $node->webform['no_storage'] = $form_state['values']['no_storage'];
+
+  // Disable saving as draft when not storing submissions.
+  if ($node->webform['no_storage']) {
+    // Unset any draft settings.
+    $node->webform['allow_draft'] = '';
+    $node->webform['auto_save'] = '';
+    // Set no meta data.
+    $node->webform['no_meta_data'] = $form_state['values']['no_meta_data'];
+    if ($node->webform['no_meta_data']) {
+      // Disable any submission limit settings.
+      $node->webform['submit_limit'] = -1;
+      $node->webform['submit_interval'] = -1;
+      $node->webform['total_submit_limit'] = -1;
+      $node->webform['total_submit_interval'] = -1;
+    }
+  }
+  else {
+    // Unset no meta data.
+    $node->webform['no_meta_data'] = FALSE;
+  }
+
   // Set submit button text.
   $node->webform['submit_text'] = $form_state['values']['submit_text'];
 }
diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index 8fc1d03..2ff4390 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -51,24 +51,35 @@ function webform_results_submissions($node, $user_filter, $pager_count) {
       $row[] = theme('username', array('account' => $submission));
       $row[] = $submission->remote_addr;
     }
-    $row[] = l(t('View'), "node/$node->nid/submission/$sid");
-    $operation_count = 1;
     // No need to call this multiple times, just reference this in a variable.
     $destination = drupal_get_destination();
-    if (webform_submission_access($node, $submission, 'edit', $user)) {
-      $row[] = l(t('Edit'), "node/$node->nid/submission/$sid/edit", array('query' => $destination));
-      $operation_count++;
+    if ($node->webform['no_storage']) {
+      $row[] = array('data' => l(t('Delete'), "node/$node->nid/submission/$sid/delete", array('query' => $destination)), 'colspan' => 1);
     }
-    if (webform_submission_access($node, $submission, 'delete', $user)) {
-      $row[] = l(t('Delete'), "node/$node->nid/submission/$sid/delete", array('query' => $destination));
-      $operation_count++;
-    }
-    if ($operation_count < $operation_total) {
-      $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => $operation_total - $operation_count + 1);
+    else {
+      $row[] = l(t('View'), "node/$node->nid/submission/$sid");
+      $operation_count = 1;
+      if (webform_submission_access($node, $submission, 'edit', $user)) {
+        $row[] = l(t('Edit'), "node/$node->nid/submission/$sid/edit", array('query' => $destination));
+        $operation_count++;
+      }
+      if (webform_submission_access($node, $submission, 'delete', $user)) {
+        $row[] = l(t('Delete'), "node/$node->nid/submission/$sid/delete", array('query' => $destination));
+        $operation_count++;
+      }
+      if ($operation_count < $operation_total) {
+        $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => $operation_total - $operation_count + 1);
+      }
+      if ($operation_count < $operation_total) {
+        $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => $operation_total - $operation_count + 1);
+      }
     }
     $rows[] = $row;
   }
 
+  // Check if we need to alert user that this form stores no data.
+  webform_no_storage_message($node);
+
   $element['#theme'] = 'webform_results_submissions';
   $element['#node'] = $node;
   $element['#submissions'] = $submissions;
@@ -185,6 +196,10 @@ function webform_results_table($node, $pager_count = 0) {
   if ($pager_count) {
     $output .= theme('pager');
   }
+
+  // Check if we need to alert user that this form stores no data.
+  webform_no_storage_message($node);
+
   return $output;
 }
 
@@ -230,7 +245,7 @@ function theme_webform_results_table($variables) {
 
   // Generate a row for each submission.
   foreach ($submissions as $sid => $submission) {
-    $cell[] = l($sid, 'node/' . $node->nid . '/submission/' . $sid);
+    $cell[] = $node->webform['no_storage'] ? $sid : l($sid, 'node/' . $node->nid . '/submission/' . $sid);
     $cell[] = format_date($submission->submitted, 'small');
     $cell[] = theme('username', array('account' => $submission));
     $cell[] = $submission->remote_addr;
@@ -245,7 +260,6 @@ function theme_webform_results_table($variables) {
         $cell[] = $submission_output;
       }
     }
-
     $rows[] = $cell;
     unset($cell);
   }
@@ -255,9 +269,10 @@ function theme_webform_results_table($variables) {
 
   if (count($rows) == 0) {
     $rows[] = array(array('data' => t('There are no submissions for this form. <a href="!url">View this form</a>.', array('!url' => url('node/' . $node->nid))), 'colspan' => 4));
+    // Check if we need to alert user that this form stores no data.
+    webform_no_storage_message($node);
   }
 
-
   $output = '';
   $output .= theme('webform_results_per_page', array('total_count' => $total_count, 'pager_count' => $pager_count));
   $output .= theme('table', array('header' => $header, 'rows' => $rows));
@@ -447,6 +462,9 @@ function webform_results_download_form($form, &$form_state, $node) {
     '#value' => t('Download'),
   );
 
+  // Check if we need to alert user that this form stores no data.
+  webform_no_storage_message($node);
+
   return $form;
 }
 
@@ -924,6 +942,9 @@ function theme_webform_results_analysis($variables) {
     $rows[] = array(array('data' => t('There are no submissions for this form. <a href="!url">View this form</a>.', array('!url' => url('node/' . $node->nid))), 'colspan' => 20));
   }
 
+  // Check if we need to alert user that this form stores no data.
+  webform_no_storage_message($node);
+
   return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('webform-results-analysis'))));
 }
 
diff --git a/includes/webform.submissions.inc b/includes/webform.submissions.inc
index 925aff5..f73a92c 100644
--- a/includes/webform.submissions.inc
+++ b/includes/webform.submissions.inc
@@ -103,20 +103,24 @@ function webform_submission_insert($node, $submission) {
       $function($node, $submission);
     }
     $submission->nid = $node->webform['nid'];
-    drupal_write_record('webform_submissions', $submission);
+    if (!$node->webform['no_meta_data']) {
+      drupal_write_record('webform_submissions', $submission);
+    }
     $is_new = TRUE;
   }
 
-  foreach ($submission->data as $cid => $values) {
-    foreach ($values['value'] as $delta => $value) {
-      $data = array(
-        'nid' => $node->webform['nid'],
-        'sid' => $submission->sid,
-        'cid' => $cid,
-        'no' => $delta,
-        'data' => is_null($value) ? '' : $value,
-      );
-      drupal_write_record('webform_submitted_data', $data);
+  if (!$node->webform['no_storage']) {
+    foreach ($submission->data as $cid => $values) {
+      foreach ($values['value'] as $delta => $value) {
+        $data = array(
+          'nid' => $node->webform['nid'],
+          'sid' => $submission->sid,
+          'cid' => $cid,
+          'no' => $delta,
+          'data' => is_null($value) ? '' : $value,
+        );
+        drupal_write_record('webform_submitted_data', $data);
+      }
     }
   }
 
@@ -705,6 +709,43 @@ function webform_get_submissions($filters = array(), $header = NULL, $pager_coun
     $previous = $row->sid;
   }
 
+  // If $previous is unset, obtain submission meta-data only (form does not store submitted data).
+  if ($previous === 0) {
+    // Query the required submission data.
+    $query = db_select('webform_submissions', 's');
+    $query->leftJoin('users', 'u', 'u.uid = s.uid');
+    $query
+      ->fields('s')
+      ->fields('u', array('name'))
+      ->condition('s.sid', $sids, 'IN')
+      ->orderBy('s.sid', 'ASC');
+
+    // By adding the NID to this query we allow MySQL to use the primary key on
+    // in webform_submitted_data for sorting (nid_sid_cid_no).
+    if (isset($filters['nid'])) {
+      $query->condition('s.nid', $filters['nid']);
+    }
+
+    $result = $query->execute();
+
+    // Convert the queried rows into submissions.
+    $previous = 0;
+    foreach ($result as $row) {
+      if ($row->sid != $previous) {
+        $submissions[$row->sid] = new stdClass();
+        $submissions[$row->sid]->sid = $row->sid;
+        $submissions[$row->sid]->nid = $row->nid;
+        $submissions[$row->sid]->submitted = $row->submitted;
+        $submissions[$row->sid]->remote_addr = $row->remote_addr;
+        $submissions[$row->sid]->uid = $row->uid;
+        $submissions[$row->sid]->name = $row->name;
+        $submissions[$row->sid]->is_draft = $row->is_draft;
+        $submissions[$row->sid]->data = array();
+      }
+      $previous = $row->sid;
+    }
+  }
+
   foreach (module_implements('webform_submission_load') as $module) {
     $function = $module . '_webform_submission_load';
     $function($submissions);
diff --git a/webform.install b/webform.install
index 19dacf4..9ea7db4 100644
--- a/webform.install
+++ b/webform.install
@@ -109,6 +109,20 @@ function webform_schema() {
         'not null' => TRUE,
         'default' => -1,
       ),
+      'no_storage' => array(
+        'description' => 'Boolean value for whether to not store submitted data.',
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'no_meta_data' => array(
+        'description' => 'Boolean value for whether to not store submission met-data (in conjunction with no_storage).',
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
     ),
     'primary key' => array('nid'),
   );
@@ -831,3 +845,16 @@ function webform_update_7319(&$sandbox) {
 function webform_update_7320() {
   db_query("UPDATE {file_managed} SET status = 1 WHERE fid IN (SELECT fid FROM {file_usage} WHERE module = :module_name)", array(':module_name' => 'webform'));
 }
+
+/**
+ * Add additional columns for control of not storing submitted data.
+ */
+function webform_update_7321() {
+  if (!db_field_exists('webform', 'no_storage')) {
+    db_add_field('webform', 'no_storage', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+  }
+
+  if (!db_field_exists('webform', 'no_meta_data')) {
+    db_add_field('webform', 'no_meta_data', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+  }
+}
diff --git a/webform.module b/webform.module
index 050f949..65a9c22 100644
--- a/webform.module
+++ b/webform.module
@@ -364,6 +364,11 @@ function webform_menu_load($nid) {
   if (!isset($node->type) || !in_array($node->type, webform_variable_get('webform_node_types'))) {
     return FALSE;
   }
+  else {
+    if ($node->webform['no_storage'] && db_query('SELECT COUNT(eid) FROM {webform_emails} WHERE nid = :nid', array(':nid' => $nid))->fetchField() == 0) {
+      drupal_set_message(t('The form %title is not saving submissions and no e-mails have been configured - data may be lost!', array('%title' => $node->title)), 'warning', FALSE);
+    }
+  }
   return $node;
 }
 
@@ -2504,7 +2509,10 @@ function webform_client_form_submit($form, &$form_state) {
 
   // Check if this form is sending an email.
   if (!$is_draft && !$form_state['values']['details']['finished']) {
-    $submission = webform_get_submission($node->webform['nid'], $sid, TRUE);
+    // Don't reset submission data if not storing submitted data.
+    if (!$node->webform['no_storage']) {
+      $submission = webform_get_submission($node->webform['nid'], $sid, TRUE);
+    }
     webform_submission_send_mail($node, $submission);
   }
 
@@ -3885,3 +3893,22 @@ function webform_mollom_form_info($form_id) {
 
   return $form_info;
 }
+
+/**
+ * Set a message warning user that form is not storing data.
+ *
+ * @param $node
+ *   The Webform node.
+ */
+function webform_no_storage_message($node) {
+  global $user;
+  $account = isset($account) ? $account : $user;
+  // Show warning on Submissions, Table, Download, and Analysis pages.
+  if ($node->webform['no_storage']) {
+    $no_storage_msg = t('The form %title does not have any results displayed because it is not saving submitted data.', array('%title' => $node->title));
+    if (node_access('update', $node, $account)) {
+      $no_storage_msg .= ' ' . t('This option may be changed under the <a href="!url">Webform advanced settings</a>', array('!url' => url('node/' . $node->nid . '/webform/configure')));
+    }
+    drupal_set_message($no_storage_msg, 'warning', FALSE);
+  }
+}
