diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module
index 4c5a550..a03132e 100644
--- a/date_popup/date_popup.module
+++ b/date_popup/date_popup.module
@@ -585,7 +585,7 @@ function date_popup_validate($element, &$form_state) {
   // If something was input but there is no date, the date is invalid.
   // If the field is empty and required, set error message and return.
   $error_field = implode('][', $element['#parents']);
-  if (empty($date) || !empty($date->errors)) {
+  if ((empty($element['#value']['date']) && empty($element['#value']['time']))  || !empty($date->errors)) {
     if (is_object($date) && !empty($date->errors)) {
       $message = t('The value input for field %field is invalid:', array('%field' => $label));
       $message .= '<br />' . implode('<br />', $date->errors);
@@ -618,7 +618,9 @@ 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;
+    //check if there is no time associated in the input variable. This is the exception scenario where the user has entered only time and not date.
+    if(empty($input['time']))
+      return NULL;
   }
   date_popup_add();
   $granularity = date_format_order($element['#date_format']);
@@ -627,9 +629,14 @@ function date_popup_input_date($element, $input, $auto_complete = FALSE) {
 
   $format = date_popup_date_format($element);
   $format .= $has_time ? ' ' . date_popup_time_format($element) : '';
-  $datetime = trim($input['date']);
+  //check if date is empty, if yes, then leave it blank.
+  $datetime = !empty($input['date']) ? trim($input['date']) : '';
   $datetime .= $has_time ? ' ' . trim($input['time']) : '';
   $date = new DateObject($datetime, $element['#date_timezone'], $format);
+  //if the variable is time only then set TimeOnly to TRUE
+  if(empty($input['date']) && !empty($input['time']) ){
+    $date->timeOnly = 'TRUE';
+  }
   if (is_object($date)) {
     $date->limitGranularity($granularity);
     if ($date->validGranularity($granularity, $flexible)) {
