diff --git a/date.api.php b/date.api.php
index 515fc33..d422b80 100644
--- a/date.api.php
+++ b/date.api.php
@@ -123,6 +123,8 @@ function hook_date_popup_pre_validate_alter(&$element, &$form_state, &$input) {
  *   - field: The $field array.
  *   - instance: The $instance array.
  *   - item: The $item array.
+ *
+ * @see date_combo_element_process()
  */
 function hook_date_combo_pre_validate_alter(&$element, &$form_state, $context) {
   if (!empty($context['item']['all_day'])) {
@@ -192,10 +194,15 @@ function hook_date_combo_validate_date_end_alter(&$date, &$form_state, $context)
  *
  * @param array $element
  *   An associative array containing the properties of the date_text element.
+ * @param array $form_state
+ *   A keyed array containing the current state of the form.
+ * @param array $context
+ *   An associative array containing the following keys:
+ *   - form: Nested array of form elements that comprise the form.
  *
  * @see date_text_element_process()
  */
-function hook_date_text_process_alter(&$element) {
+function hook_date_text_process_alter(&$element, &$form_state, $context) {
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '') {
     // All Day handling on text dates works only if the user leaves the time out
@@ -208,10 +215,15 @@ function hook_date_text_process_alter(&$element) {
  *
  * @param array $element
  *   An associative array containing the properties of the date_select element.
+ * @param array $form_state
+ *   A keyed array containing the current state of the form.
+ * @param array $context
+ *   An associative array containing the following keys:
+ *   - form: Nested array of form elements that comprise the form.
  *
  * @see date_select_element_process()
  */
-function hook_date_select_process_alter(&$element) {
+function hook_date_select_process_alter(&$element, &$form_state, $context) {
   // Hide or show the element in reaction to the all_day status for the element.
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '') {
@@ -232,10 +244,15 @@ function hook_date_select_process_alter(&$element) {
  *
  * @param array $element
  *   An associative array containing the properties of the date_popup element.
+ * @param array $form_state
+ *   A keyed array containing the current state of the form.
+ * @param array $context
+ *   An associative array containing the following keys:
+ *   - form: Nested array of form elements that comprise the form.
  *
  * @see date_popup_element_process()
  */
-function hook_date_popup_process_alter(&$element) {
+function hook_date_popup_process_alter(&$element, &$form_state, $context) {
   // Hide or show the element in reaction to the all_day status for the element.
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '' && array_key_exists('time', $element)) {
@@ -292,6 +309,40 @@ function hook_date_combo_process_alter(&$element, &$form_state, $context) {
 }
 
 /**
+ * Alter the date_timezone widget element.
+ *
+ * @param array $element
+ *   An associative array containing the properties of the date_select element.
+ * @param array $form_state
+ *   A keyed array containing the current state of the form.
+ * @param array $context
+ *   An associative array containing the following keys:
+ *   - form: Nested array of form elements that comprise the form.
+ *
+ * @see date_timezone_element_process()
+ */
+function hook_date_timezone_process_alter(&$element, &$form_state, $context) {
+  // @todo.
+}
+
+/**
+ * Alter the date_year_range widget element.
+ *
+ * @param array $element
+ *   An associative array containing the properties of the date_select element.
+ * @param array $form_state
+ *   A keyed array containing the current state of the form.
+ * @param array $context
+ *   An associative array containing the following keys:
+ *   - form: Nested array of form elements that comprise the form.
+ *
+ * @see date_year_range_element_process()
+ */
+function hook_date_year_range_process_alter(&$element, &$form_state, $context) {
+  // @todo.
+}
+
+/**
  * Alter a date field settings form.
  *
  * @param array $form
diff --git a/date_api/date_api_elements.inc b/date_api/date_api_elements.inc
index 202af8f..97c3f41 100644
--- a/date_api/date_api_elements.inc
+++ b/date_api/date_api_elements.inc
@@ -144,7 +144,7 @@ function date_default_date($element) {
 /**
  * Process callback which creates a date_year_range form element.
  */
-function date_year_range_element_process($element, $form_state, $form) {
+function date_year_range_element_process($element, &$form_state, $form) {
   // Year range is stored in the -3:+3 format, but collected as two separate
   // textfields.
   $element['years_back'] = array(
@@ -169,6 +169,11 @@ function date_year_range_element_process($element, $form_state, $form) {
   $element['#tree'] = TRUE;
   $element['#attached']['js'][] = drupal_get_path('module', 'date_api') . '/date_year_range.js';
 
+  $context = array(
+   'form' => $form,
+  );
+  drupal_alter('date_year_range_process', $element, $form_state, $context);
+
   return $element;
 }
 
@@ -225,7 +230,7 @@ function date_timezone_element_value_callback($element, $input = FALSE, &$form_s
  * @return array
  *   the timezone form element
  */
-function date_timezone_element_process($element, $form_state, $form) {
+function date_timezone_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
     return $element;
   }
@@ -248,6 +253,12 @@ function date_timezone_element_process($element, $form_state, $form) {
   else {
     $element['#element_validate'] = array('date_timezone_validate');
   }
+
+  $context = array(
+   'form' => $form,
+  );
+  drupal_alter('date_timezone_process', $element, $form_state, $context);
+
   return $element;
 }
 
@@ -297,7 +308,7 @@ function date_text_element_value_callback($element, $input = FALSE, &$form_state
  * The display of each part comes from #date_format.
  *
  */
-function date_text_element_process($element, $form_state, $form) {
+function date_text_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
     return $element;
   }
@@ -326,7 +337,10 @@ function date_text_element_process($element, $form_state, $form) {
     $element['date']['#value'] = $element['date']['#default_value'];
   }
 
-  drupal_alter('date_text_process', $element, $form_state, $form);
+  $context = array(
+   'form' => $form,
+  );
+  drupal_alter('date_text_process', $element, $form_state, $context);
 
   return $element;
 }
@@ -434,7 +448,7 @@ function date_select_element_value_callback($element, $input = FALSE, &$form_sta
  * The display of each part comes from ['#date_settings']['format'].
  *
  */
-function date_select_element_process($element, $form_state, $form) {
+function date_select_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
     return $element;
   }
@@ -472,7 +486,10 @@ function date_select_element_process($element, $form_state, $form) {
     $element['#element_validate'] = array('date_select_validate');
   }
 
-  drupal_alter('date_select_process', $element);
+  $context = array(
+   'form' => $form,
+  );
+  drupal_alter('date_select_process', $element, $form_state, $context);
 
   return $element;
 }
diff --git a/date_popup/date_popup.module b/date_popup/date_popup.module
index 2caf17a..e3132d7 100644
--- a/date_popup/date_popup.module
+++ b/date_popup/date_popup.module
@@ -261,7 +261,7 @@ function date_popup_element_value_callback($element, $input = FALSE, &$form_stat
  * Javascript popup element processing.
  * Add popup attributes to $element.
  */
-function date_popup_element_process($element, $form_state, $form) {
+function date_popup_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
     return $element;
   }
@@ -289,7 +289,10 @@ function date_popup_element_process($element, $form_state, $form) {
     $element['#element_validate'] = array('date_popup_validate');
   }
 
-  drupal_alter('date_popup_process', $element);
+  $context = array(
+   'form' => $form,
+  );
+  drupal_alter('date_popup_process', $element, $form_state, $context);
 
   return $element;
 }
