diff --git a/date_single_day.module b/date_single_day.module
index a6c1fdc..5068f2b 100644
--- a/date_single_day.module
+++ b/date_single_day.module
@@ -5,6 +5,35 @@
  */
 
 /**
+ * Implementation of hook_elements().
+ */
+function date_single_day_elements() {
+  // It's okay to return data for elements defined elsewhere, as _element_info()
+  // merges the returned arrays recursively.
+  $type['date_combo'] = array(
+    // Add our processor.
+    '#process' => array('date_single_day_process'),
+    // Add our own key.
+    '#single_day' => FALSE,
+  );
+  return $type;
+}
+
+/**
+ * Extra form processor for date_combo elements.
+ *
+ * Adds in our after_build and theme if single day is requested.
+ */
+function date_single_day_process($element, $edit, $form_state, $form) {
+  if ($element['#single_day']) {
+    $element['#after_build'][] = 'date_single_day_after_build';
+    $element['#theme'][] = 'date_single_day_element';
+  }
+
+  return $element;
+}
+
+/**
  * Implementation of hook_widget_settings_alter().
  *
  * Add our checkbox to date popup field settings.
@@ -33,6 +62,8 @@ function date_single_day_widget_settings_alter(&$settings, $op, $widget) {
 
 /**
  * Implementation of hook_form_alter().
+ *
+ * Set #single_day on CCK date fields that request it.
  */
 function date_single_day_form_alter(&$form, $form_state, $form_id) {  
   // Alter node edit forms.
@@ -55,15 +86,13 @@ function date_single_day_form_alter(&$form, $form_state, $form_id) {
               // 'add more' button.
               foreach (array_keys($form[$field_name]) as $key) {
                 if (is_numeric($key)) {
-                  $form[$field_name][$key]['#after_build'][] = 'date_single_day_after_build';
-                  $form[$field_name][$key]['#theme'][] = 'date_single_day_element';
+                  $form[$field_name][$key]['#single_day'] = TRUE;
                 }
               }
               break;
             case 'date_popup_repeat':
               // Date pop-up with repeat options.
-              $form[$field_name]['#after_build'][] = 'date_single_day_after_build';
-              $form[$field_name]['#theme'][] = 'date_single_day_element';
+              $form[$field_name]['#single_day'] = TRUE;
           }
         }
       }
@@ -77,8 +106,7 @@ function date_single_day_form_alter(&$form, $form_state, $form_id) {
           if (isset($form[$field_name][$key]['#type']) && in_array($form[$field_name][$key]['#type'], array('date_popup', 'date_combo'))) {
             $content_fields = content_fields(NULL, $form[$field_name][$key]['#type']);
             if (!empty($content_fields[$field_name]['widget']['single_day'])) {
-              $form[$field_name][$key]['#after_build'][] = 'date_single_day_after_build';
-              $form[$field_name][$key]['#theme'][] = 'date_single_day_element';
+              $form[$field_name][$key]['#single_day'] = TRUE;
             }
           }
         }
