diff --git a/date_api/date_api_elements.inc b/date_api/date_api_elements.inc
index fc91205..08b8ac2 100644
--- a/date_api/date_api_elements.inc
+++ b/date_api/date_api_elements.inc
@@ -419,7 +419,7 @@ function date_text_validate($element, &$form_state) {
  */
 function date_text_input_date($element, $input) {
   if (empty($input) || !is_array($input) || !array_key_exists('date', $input) || empty($input['date'])) {
-    return NULL;
+    return is_string($input) && $input === $element['#default_value'] ? date_default_date($element) : NULL;
   }
   $granularity = date_format_order($element['#date_format']);
   $date = new DateObject($input['date'], $element['#date_timezone'], $element['#date_format']);
diff --git a/date_elements.inc b/date_elements.inc
index 8369715..a36e4d3 100644
--- a/date_elements.inc
+++ b/date_elements.inc
@@ -475,7 +475,7 @@ function date_combo_validate($element, &$form_state) {
   $form_input = drupal_array_get_nested_value($form_state['input'], $element['#field_parents']);
 
   // If the whole field is empty and that's OK, stop now.
-  if (empty($form_input[$field_name]) && !$element['#required']) {
+  if (empty($form_input[$field_name])) {
     return;
   }
 
diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module
index e91cc8a..f8973a2 100644
--- a/date_popup/date_popup.module
+++ b/date_popup/date_popup.module
@@ -613,7 +613,7 @@ function date_popup_validate($element, &$form_state) {
  */
 function date_popup_input_date($element, $input, $auto_complete = FALSE) {
   if (empty($input) || !is_array($input) || !array_key_exists('date', $input) || empty($input['date'])) {
-    return NULL;
+    return is_string($input) && $input === $element['#default_value'] ? date_default_date($element) : NULL;
   }
   date_popup_add();
   $granularity = date_format_order($element['#date_format']);
