diff -urp /Users/mjarrell/Downloads/webform/includes/webform.pages.inc webform/includes/webform.pages.inc
--- /Users/mjarrell/Downloads/webform/includes/webform.pages.inc	2010-08-18 22:00:45.000000000 -0500
+++ webform/includes/webform.pages.inc	2010-09-21 10:15:45.000000000 -0500
@@ -7,10 +7,13 @@
  * Menu callbacks and functions for configuring and editing webforms.
  */
 
+require_once ('./' . drupal_get_path('module', 'webform') . '/components/date.inc');
+
 /**
  * Main configuration form for editing a webform node.
  */
 function webform_configure_form(&$form_state, $node) {
+  $format = webform_date_format('short');
   $form = array();
 
   drupal_add_css(drupal_get_path('module', 'webform') . '/css/webform-admin.css');
@@ -81,6 +84,25 @@ function webform_configure_form(&$form_s
     '#parents' => array('submit_interval'),
   );
 
+  $form['submission']['start_date'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Submission Start Date'),
+    '#default_value' => strtotime($node->webform['start_date']) ? date($format, strtotime($node->webform['start_date'])) : '',
+    '#description' => t('Begin date for submissions - the form will display "Submissions for this form are currently closed." prior to the date entered. Leaving this field blank will activate the form immediately.'). '<br />' . t('Accepts any date in any <a href="http://www.gnu.org/software/tar/manual/html_chapter/Date-input-formats.html">GNU Date Input Format</a>. Strings such as today, +2 months, and Dec 9 2004 are all valid.'),
+    '#parents' => array('start_date'),
+    '#size' => 60,
+    '#maxlength' => 127,
+  );
+
+  $form['submission']['end_date'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Submission End Date'),
+    '#default_value' => strtotime($node->webform['end_date']) ? date($format, strtotime($node->webform['end_date'])) : '',
+    '#description' => t('End date for submissions - the form will display "Submissions for this form are current closed." after the date entered. Leave this field blank for no expiration.'). '<br />' . t('Accepts any date in any <a href="http://www.gnu.org/software/tar/manual/html_chapter/Date-input-formats.html">GNU Date Input Format</a>. Strings such as today, +2 months, and Dec 9 2004 are all valid.'),
+    '#parents' => array('end_date'),
+    '#size' => 60,
+    '#maxlength' => 127,
+  );
   /* End Edit Form */
 
   /* Start per-role submission control */
@@ -175,12 +197,26 @@ function webform_configure_form_validate
   else {
     form_set_value($form['submission']['redirect_url'], $redirect_url, $form_state);
   }
+
+  if (!empty($form_state['values']['start_date']) && strtotime($form_state['values']['start_date']) === false) {
+    form_error($form['submission']['start_date'], t('Please enter a valid start date.'));
+  }
+  
+  if (!empty($form_state['values']['end_date']) && strtotime($form_state['values']['end_date']) === false) {
+    form_error($form['submission']['end_date'], t('Please enter a valid end date.'));
+  }
+  
+  if (!empty($form_state['values']['start_date']) && !empty($form_state['values']['end_date']) && (strtotime($form_state['values']['end_date']) < strtotime($form_state['values']['start_date']))) {
+    form_error($form['submission']['start_date'], t('Start date cannot be after end date. Please adjust one or the other.'));
+  }
 }
 
 /**
  * Submit handler for webform_configure_form().
  */
 function webform_configure_form_submit($form, &$form_state) {
+  $current_tz = date_default_timezone_get();
+  date_default_timezone_set('UTC');
   $node = node_load($form_state['values']['nid']);
 
   // Save the confirmation.
@@ -209,6 +245,20 @@ function webform_configure_form_submit($
     $node->webform['submit_interval'] = $form_state['values']['submit_interval'];
   }
 
+  if (!empty($form_state['values']['start_date'])) {
+    $node->webform['start_date'] = date('Y/m/d', strtotime($form_state['values']['start_date']));
+  }
+  else {
+    $node->webform['start_date'] = '';
+  }
+  
+  if (!empty($form_state['values']['end_date'])) {
+    $node->webform['end_date'] = date('Y/m/d', strtotime($form_state['values']['end_date']));
+  }
+  else {
+    $node->webform['end_date'] = '';
+  }
+
   // Set submit notice.
   $node->webform['submit_notice'] = $form_state['values']['submit_notice'];
 
diff -urp /Users/mjarrell/Downloads/webform/webform.install webform/webform.install
--- /Users/mjarrell/Downloads/webform/webform.install	2010-08-26 04:33:52.000000000 -0500
+++ webform/webform.install	2010-09-21 10:10:08.000000000 -0500
@@ -1181,6 +1181,29 @@ function webform_update_6318() {
   return $ret;
 }
 
+ /**
+ * Add fields for scheduling open/close of form submissions.
+ */
+function webform_update_6319() {
+  $ret = array();
+
+  // Safety check to prevent re-adding existing column.
+  if (db_column_exists('webform', 'start_date')) {
+    return $ret;
+  }
+  // Safety check to prevent re-adding existing column.
+  if (db_column_exists('webform', 'end_date')) {
+    return $ret;
+  }
+
+  // Add the new start & end date columns.
+  db_add_field($ret, 'webform', 'start_date', array('type' => 'varchar', 'length' => 255, 'default' => 'NULL'));
+  db_add_field($ret, 'webform', 'end_date', array('type' => 'varchar', 'length' => 255, 'default' => 'NULL'));
+
+  return $ret;
+}
+
+
 /**
  * Recursively delete all files and folders in the specified filepath, then
  * delete the containing folder.
diff -urp /Users/mjarrell/Downloads/webform/webform.module webform/webform.module
--- /Users/mjarrell/Downloads/webform/webform.module	2010-08-26 06:56:37.000000000 -0500
+++ webform/webform.module	2010-09-21 10:12:18.000000000 -0500
@@ -898,7 +898,7 @@ function webform_node_update($node) {
   }
 
   // Update the webform entry.
-  db_query("UPDATE {webform} SET confirmation = '%s', confirmation_format = %d, redirect_url = '%s', teaser = %d, allow_draft = %d, submit_notice = %d, submit_text = '%s', submit_limit = %d, submit_interval = %d where nid = %d", $node->webform['confirmation'], $node->webform['confirmation_format'], $node->webform['redirect_url'], $node->webform['teaser'], $node->webform['allow_draft'], $node->webform['submit_notice'], $node->webform['submit_text'], $node->webform['submit_limit'], $node->webform['submit_interval'], $node->nid);
+  db_query("UPDATE {webform} SET confirmation = '%s', confirmation_format = %d, redirect_url = '%s', teaser = %d, allow_draft = %d, submit_notice = %d, submit_text = '%s', submit_limit = %d, submit_interval = %d, start_date = '%s', end_date = '%s' where nid = %d", $node->webform['confirmation'], $node->webform['confirmation_format'], $node->webform['redirect_url'], $node->webform['teaser'], $node->webform['allow_draft'], $node->webform['submit_notice'], $node->webform['submit_text'], $node->webform['submit_limit'], $node->webform['submit_interval'], $node->webform['start_date'], $node->webform['end_date'], $node->nid);
 
   // Compare the webform components and don't do anything if it's not needed.
   $original = node_load($node->nid);
@@ -1155,19 +1155,30 @@ function webform_node_view(&$node, $teas
     $logging_in = TRUE;
   }
 
-  // Check if the user's role can submit this webform.
-  if (variable_get('webform_submission_access_control', 1)) {
-    $allowed_roles = array();
-    foreach ($node->webform['roles'] as $rid) {
-      $allowed_roles[$rid] = isset($user->roles[$rid]) ? TRUE : FALSE;
-    }
-    if (array_search(TRUE, $allowed_roles) === FALSE && $user->uid != 1) {
+  // Make sure that the form isn't expired (having an end date previous to today)
+  // or not yet active (begin date after today)
+  $start = strtotime($node->webform['start_date']); // False if unset.
+  $end = strtotime($node->webform['end_date']);
+  $now = strtotime("now");
+  if (($start && $start > $now) || ($end && $end < $now)){
+      $allowed_roles = array();
       $enabled = FALSE;
-    }
   }
   else {
-    // If not using Webform submission access control, allow for all roles.
-    $allowed_roles = array_keys(user_roles());
+    // Check if the user's role can submit this webform.
+    if (variable_get('webform_submission_access_control', 1)) {
+      $allowed_roles = array();
+      foreach ($node->webform['roles'] as $rid) {
+        $allowed_roles[$rid] = isset($user->roles[$rid]) ? TRUE : FALSE;
+      }
+      if (array_search(TRUE, $allowed_roles) === FALSE && $user->uid != 1) {
+        $enabled = FALSE;
+      }
+    }
+    else {
+      // If not using Webform submission access control, allow for all roles.
+      $allowed_roles = array_keys(user_roles());
+    }
   }
 
   // Check if the user can add another submission.
@@ -1268,7 +1279,7 @@ function theme_webform_view_messages($no
   if (array_search(TRUE, $allowed_roles) === FALSE && $user->uid != 1) {
     if (empty($allowed_roles)) {
       // No roles are allowed to submit the form.
-      $message = t('Submissions for this form are closed.');
+      $message = t('Submissions for this form are currently closed.');
     }
     elseif (isset($allowed_roles[2])) {
       // The "authenticated user" role is allowed to submit and the user is currently logged-out.
