diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module
index a6e400b..bf33da0 100644
--- a/date_popup/date_popup.module
+++ b/date_popup/date_popup.module
@@ -226,11 +226,42 @@ function date_popup_process($element, $edit, $form_state, $form) {
   $granularity = date_format_order($element['#date_format']);
 
   if (!empty($edit) && is_array($edit) && !empty($edit['date'])) {
-    $input = $edit['date'] . (!empty($edit['time']) ? ' '. $edit['time'] : '');
-    $datetime = date_convert_from_custom($input, $element['#date_format']);
+    $input_to_convert = array();
+    $input_to_convert['#date_format'] = $element['#date_format'];
+    $input_to_convert['#date_timezone'] = $element['#date_timezone'];
+    $input_to_convert['#value'] = $edit;
+    $datetime = date_popup_input_value($input_to_convert);
     $date = date_make_date($datetime, $element['#date_timezone'], DATE_DATETIME, $granularity);
   }
-  elseif (!empty($element['#value'])) {
+  elseif (!empty($element['#value']) && !empty($element['#post'])) {
+    $field_name = $element['#field']['field_name'];
+    $delta = $element['#delta'];
+    $group = $element['#field']['display_settings']['parent'];
+    if (!empty($group)) {
+      $posted = $element['#post'][$group][$delta][$field_name];
+      $to_name = $group.'['.$delta.']'.'['.$field_name.']'.'[value2]';
+    }
+    else {
+      if (!isset($element['#post'][$field_name][$delta]) && isset($element['#post'][$field_name]['rrule'])) {
+        $posted = $element['#post'][$field_name];
+        $to_name = $field_name.'[value2]';
+      }
+      else {
+        $posted = $element['#post'][$field_name][$delta];
+        $to_name = $field_name.'['.$delta.']'.'[value2]';
+      }
+    }
+    if ($element['#name'] == $to_name) {
+      $merged_date = array();
+      foreach ($posted['value2'] as $part => $value) {
+        $merged_date[$part] = empty($value) && !is_numeric($value) ? $posted['value'][$part] : $value;
+      }
+    $element['#value'] = $merged_date;
+    $datetime = date_popup_input_value($element);
+    $date = date_make_date($datetime, $element['#date_timezone'], DATE_DATETIME, $granularity);
+    }
+  }
+  else {
     $date = date_make_date($element['#value'], $element['#date_timezone'], DATE_DATETIME, $granularity);
   }
 
