diff --git a/components/select.inc b/components/select.inc
index 801348a..c28261c 100644
--- a/components/select.inc
+++ b/components/select.inc
@@ -279,6 +279,12 @@ function _webform_render_select($component, $value = NULL, $filter = TRUE) {
     _webform_shuffle_options($options);
   }
 
+  // Add default options if using a select list with no default. This trigger's
+  // Drupal 7's adding of the option for us. See @form_process_select().
+  if ($component['extra']['aslist'] && !$component['extra']['multiple'] && $default_value === '') {
+    $element['#empty_value'] = '';
+  }
+
   // Set the component options.
   $element['#options'] = $options;
 
diff --git a/tests/submission.test b/tests/submission.test
index f07fb01..6281bf1 100644
--- a/tests/submission.test
+++ b/tests/submission.test
@@ -43,6 +43,9 @@ class WebformSubmissionTestCase extends WebformTestCase {
     $this->drupalLogout();
   }
 
+  /**
+   * Test a submission that uses default values, and check database integrity.
+   */
   function testWebformSubmissionDefault() {
     $this->drupalLogin($this->webform_users['admin']);
     $this->webformReset();
@@ -51,6 +54,38 @@ class WebformSubmissionTestCase extends WebformTestCase {
   }
 
   /**
+   * Test that required fields with no default value can't be submitted as-is.
+   */
+  function testWebformSubmissionRequiredComponents() {
+    $this->drupalLogin($this->webform_users['admin']);
+    $this->webformReset();
+
+    // Create the Webform test node, and set all components to be mandatory
+    // with no default value.
+    $node = $this->testWebformForm();
+    $node = node_load($node->nid);
+    foreach ($node->webform['components'] as &$component) {
+      $component['value'] = '';
+      $component['mandatory'] = '1';
+    }
+    node_save($node);
+
+    // Submit the webform with no data. We should get a message that all the
+    // components are required. (The exceptions are hidden fields, which can't
+    // be made mandatory, and date fields, which default to the current date
+    // when no default value is provided; therefore, we don't expect a message
+    // for those.)
+    $this->drupalPost('node/' . $node->nid, array(), 'Submit');
+    foreach ($node->webform['components'] as $component) {
+      if ($component['type'] != 'hidden' && $component['type'] != 'date') {
+        $this->assertText(t('!name field is required.', array('!name' => $component['name'])));
+      }
+    }
+
+    $this->drupalLogout();
+  }
+
+  /**
    * Execute the submission test.
    *
    * @param $value_type
diff --git a/tests/webform.test b/tests/webform.test
index 18ccd1c..5da2272 100644
--- a/tests/webform.test
+++ b/tests/webform.test
@@ -278,7 +278,7 @@ class WebformTestCase extends DrupalWebTestCase {
       'select_zero' => array(
         'component' => array(
           'form_key' => 'select_zero',
-          'name' => 'Select',
+          'name' => 'Select zero',
           'type' => 'select',
           'value' => '0',
           'extra' => array(
@@ -297,6 +297,50 @@ class WebformTestCase extends DrupalWebTestCase {
         'database values' => array('0'),
         'database default values' => array('0'),
       ),
+      'select_no_default' => array(
+        'component' => array(
+          'form_key' => 'select_no_default',
+          'name' => 'Select no default',
+          'type' => 'select',
+          'value' => '',
+          'extra' => array(
+            'description' => '<p>Description here</p>',
+            'items' => "one|one\ntwo|two\nthree|three\nfour|four\nfive|five\nsix|six",
+            'aslist' => 1,
+            'email' => 0,
+          ),
+          'mandatory' => '0',
+          'email' => '1',
+          'pid' => '0',
+          'weight' => '-15',
+          'page_num' => 1,
+        ),
+        'sample values' => 'two',
+        'database values' => array('two'),
+        'database default values' => array(''),
+      ),
+      'select_no_default_zero' => array(
+        'component' => array(
+          'form_key' => 'select_no_default_zero',
+          'name' => 'Select no default zero',
+          'type' => 'select',
+          'value' => '',
+          'extra' => array(
+            'description' => '<p>Tests saving zero as a value.</p>',
+            'items' => "0|zero\n1|one\n2|two",
+            'aslist' => 1,
+            'email' => 0,
+          ),
+          'mandatory' => '0',
+          'email' => '1',
+          'pid' => '0',
+          'weight' => '-15',
+          'page_num' => 1,
+        ),
+        'sample values' => '0',
+        'database values' => array('0'),
+        'database default values' => array(''),
+      ),
       'select_optgroup' => array(
         'component' => array(
           'form_key' => 'select_optgroup',
