diff --git a/includes/webform.emails.inc b/includes/webform.emails.inc
index 5feb2a2..7c606aa 100644
--- a/includes/webform.emails.inc
+++ b/includes/webform.emails.inc
@@ -287,20 +287,36 @@ function webform_email_edit_form($form_state, $node, $email = array()) {
     '#value' => theme('webform_token_help', 'all'),
   );
 
-  $form['template']['components'] = array(
+  $form['template']['values'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('E-mail values'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#tree' => FALSE,
+  );
+
+  // Get exclude empty components boolean off excluded components array.
+  $exclude_empty = array_pop($email['excluded_components']);
+  $form['template']['values']['components'] = array(
     '#type' => 'select',
     '#title' => t('Included e-mail values'),
     '#options' => webform_component_list($node, 'email', TRUE),
     '#default_value' => array_diff(array_keys($node->webform['components']), $email['excluded_components']),
     '#multiple' => TRUE,
     '#size' => 10,
-    '#description' => t('The selected components will be included in the %email_values token. Individual values may still be printed if explicitly specified as a %email[key] in the template.'),
+    '#description' => t('The selected components will be included in the %email_values token. Individual values may still be printed if explicitly specified as a %email[key] in the template. You may optionally exclude empty components from the %email_values token.'),
     '#process' => array('webform_component_select'),
   );
 
+  $form['template']['values']['empty'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Exclude empty components'),
+    '#default_value' => $exclude_empty,
+  );
+
   // TODO: Allow easy re-use of existing templates.
-  $form['templates']['#tree'] = TRUE;
-  $form['templates']['default'] = array(
+  $form['templates']['values']['#tree'] = TRUE;
+  $form['templates']['values']['default'] = array(
     '#type' => 'textarea',
     '#value' => $default_template,
     '#resizable' => FALSE,
@@ -439,6 +455,8 @@ function webform_email_edit_form_submit($form, &$form_state) {
   // default to being included in the %email_values token until unchecked.
   $included = array_keys(array_filter((array) $form_state['values']['components']));
   $excluded = array_diff(array_keys($node->webform['components']), $included);
+  // Add boolean for include/exclude empty components to end of excluded components array.
+  $excluded[] = empty($form_state['values']['empty']) ? 0 : 1;
   $email['excluded_components'] = $excluded;
 
   if (empty($form_state['values']['eid'])) {
diff --git a/includes/webform.submissions.inc b/includes/webform.submissions.inc
index d588eca..dd7967f 100644
--- a/includes/webform.submissions.inc
+++ b/includes/webform.submissions.inc
@@ -522,6 +522,8 @@ function webform_submission_render($node, $submission, $email, $format) {
   $renderable = array();
   $page_count = 1;
   $excluded_components = isset($email) ? $email['excluded_components'] : array();
+  // Get exclude empty components boolean off excluded components array.
+  $exclude_empty = array_pop($excluded_components);
 
   // Meta data that may be useful for modules implementing
   // hook_webform_submission_render_alter().
@@ -539,6 +541,15 @@ function webform_submission_render($node, $submission, $email, $format) {
     unset($components[$cid]);
   }
 
+  // Remove empty components.
+  if ($exclude_empty){
+    foreach($submission->data as $cid => $data) {
+      if ($data['value'][0] == '' || !isset($data['value'][0])) {
+        unset($components[$cid]);
+      }
+    }
+  }
+
   _webform_components_tree_build($components, $component_tree, 0, $page_count);
 
   // Make sure at least one field is available
