diff --git a/date.field.inc b/date.field.inc
index b104702..24a1952 100644
--- a/date.field.inc
+++ b/date.field.inc
@@ -452,6 +452,28 @@ function date_field_widget_settings_form($field, $instance) {
 }
 
 /**
+ * Form validation handler for _date_field_widget_settings_form().
+ */
+function date_field_widget_settings_form_validate(&$form, &$form_state) {
+  // The widget settings are in the wrong place in the form because of #tree on
+  // the top level.
+  $settings = $form_state['values']['instance']['widget']['settings'];
+  $settings = array_merge($settings, $settings['advanced']);
+  unset($settings['advanced']);
+  form_set_value(array('#parents' => array('instance', 'widget', 'settings')), $settings, $form_state);
+
+  $widget = &$form_state['values']['instance']['widget'];
+  // Munge the table display for text parts back into an array of text parts.
+  if (is_array($widget['settings']['text_parts'])) {
+    form_set_value($form['text_parts'], array_keys(array_filter($widget['settings']['text_parts'])), $form_state);
+  }
+
+  if ($widget['settings']['input_format'] === 'custom' && empty($widget['settings']['input_format_custom'])) {
+    form_set_error('instance][widget][settings][input_format_custom', t('Please enter a custom date format, or choose one of the preset formats.'));
+  }
+}
+
+/**
  * Implements hook_field_settings_form().
  */
 function date_field_settings_form($field, $instance, $has_data) {
@@ -460,6 +482,69 @@ function date_field_settings_form($field, $instance, $has_data) {
 }
 
 /**
+ * Form validation handler for _date_field_settings_form().
+ */
+function date_field_settings_validate(&$form, &$form_state) {
+  $field = &$form_state['values']['field'];
+
+  if ($field['settings']['tz_handling'] == 'none') {
+    form_set_value($form['timezone_db'], '', $form_state);
+  }
+  else {
+    form_set_value($form['timezone_db'], date_get_timezone_db($field['settings']['tz_handling']), $form_state);
+  }
+
+  if ($field['settings']['tz_handling'] != 'none' && !in_array('hour', array_filter($field['settings']['granularity']))) {
+    form_set_error('field[settings][tz_handling]', t('Dates without hours granularity must not use any timezone handling.'));
+  }
+
+  // Extract the correct 'todate' value out of the two end date checkboxes.
+  if ($field['settings']['enddate_get']) {
+    if ($field['settings']['enddate_required']) {
+      $field['settings']['todate'] = 'required';
+    }
+    else {
+      $field['settings']['todate'] = 'optional';
+    }
+  }
+  else {
+    $field['settings']['todate'] = '';
+  }
+
+  // Don't save the pseudo values created in the UI.
+  unset($field['settings']['enddate_get'], $field['settings']['enddate_required']);
+
+  if (!empty($field['settings']['cache_enabled'])) {
+    if (!is_numeric($field['settings']['cache_count'])) {
+      form_set_error('field[settings][cache_count]', t('The number of cache values must be a number.'));
+    }
+    elseif ($field['settings']['cache_count'] < 0) {
+      form_set_error('field[settings][cache_count]', t('The number of cache values must be a number 0 or greater.'));
+    }
+  }
+}
+
+/**
+ * Form validation handler for _date_field_instance_settings_form().
+ */
+function date_field_instance_settings_form_validate(&$form, &$form_state) {
+  $settings = $form_state['values']['instance']['settings'];
+
+  if ($settings['default_value'] == 'strtotime') {
+    $is_strtotime = @strtotime($settings['default_value_code']);
+    if (!$is_strtotime) {
+      form_set_error('instance][settings][default_value_code', t('The Strtotime default value is invalid.'));
+    }
+  }
+  if (isset($settings['default_value2']) && $settings['default_value2'] == 'strtotime') {
+    $is_strtotime = @strtotime($settings['default_value_code2']);
+    if (!$is_strtotime) {
+      form_set_error('instance][settings][default_value_code2', t('The Strtotime default value for the End Date is invalid.'));
+    }
+  }
+}
+
+/**
  * Implements hook_content_migrate_field_alter().
  *
  * Use this to tweak the conversion of field settings from the D6 style to the
diff --git a/date_admin.inc b/date_admin.inc
index 993aa09..c293af5 100644
--- a/date_admin.inc
+++ b/date_admin.inc
@@ -242,26 +242,6 @@ function _date_field_instance_settings_form($field, $instance) {
 }
 
 /**
- * Form validation handler for _date_field_instance_settings_form().
- */
-function date_field_instance_settings_form_validate(&$form, &$form_state) {
-  $settings = $form_state['values']['instance']['settings'];
-
-  if ($settings['default_value'] == 'strtotime') {
-    $is_strtotime = @strtotime($settings['default_value_code']);
-    if (!$is_strtotime) {
-      form_set_error('instance][settings][default_value_code', t('The Strtotime default value is invalid.'));
-    }
-  }
-  if (isset($settings['default_value2']) && $settings['default_value2'] == 'strtotime') {
-    $is_strtotime = @strtotime($settings['default_value_code2']);
-    if (!$is_strtotime) {
-      form_set_error('instance][settings][default_value_code2', t('The Strtotime default value for the End Date is invalid.'));
-    }
-  }
-}
-
-/**
  * Helper function for date_field_widget_settings_form().
  *
  * @see date_field_widget_settings_form_validate()
@@ -413,28 +393,6 @@ function _date_field_widget_settings_form($field, $instance) {
 }
 
 /**
- * Form validation handler for _date_field_widget_settings_form().
- */
-function date_field_widget_settings_form_validate(&$form, &$form_state) {
-  // The widget settings are in the wrong place in the form because of #tree on
-  // the top level.
-  $settings = $form_state['values']['instance']['widget']['settings'];
-  $settings = array_merge($settings, $settings['advanced']);
-  unset($settings['advanced']);
-  form_set_value(array('#parents' => array('instance', 'widget', 'settings')), $settings, $form_state);
-
-  $widget = &$form_state['values']['instance']['widget'];
-  // Munge the table display for text parts back into an array of text parts.
-  if (is_array($widget['settings']['text_parts'])) {
-    form_set_value($form['text_parts'], array_keys(array_filter($widget['settings']['text_parts'])), $form_state);
-  }
-
-  if ($widget['settings']['input_format'] === 'custom' && empty($widget['settings']['input_format_custom'])) {
-    form_set_error('instance][widget][settings][input_format_custom', t('Please enter a custom date format, or choose one of the preset formats.'));
-  }
-}
-
-/**
  * Helper function for date_field_settings_form().
  *
  * @see date_field_settings_validate()
@@ -543,49 +501,6 @@ function _date_field_settings_form($field, $instance, $has_data) {
 }
 
 /**
- * Form validation handler for _date_field_settings_form().
- */
-function date_field_settings_validate(&$form, &$form_state) {
-  $field = &$form_state['values']['field'];
-
-  if ($field['settings']['tz_handling'] == 'none') {
-    form_set_value($form['timezone_db'], '', $form_state);
-  }
-  else {
-    form_set_value($form['timezone_db'], date_get_timezone_db($field['settings']['tz_handling']), $form_state);
-  }
-
-  if ($field['settings']['tz_handling'] != 'none' && !in_array('hour', array_filter($field['settings']['granularity']))) {
-    form_set_error('field[settings][tz_handling]', t('Dates without hours granularity must not use any timezone handling.'));
-  }
-
-  // Extract the correct 'todate' value out of the two end date checkboxes.
-  if ($field['settings']['enddate_get']) {
-    if ($field['settings']['enddate_required']) {
-      $field['settings']['todate'] = 'required';
-    }
-    else {
-      $field['settings']['todate'] = 'optional';
-    }
-  }
-  else {
-    $field['settings']['todate'] = '';
-  }
-
-  // Don't save the pseudo values created in the UI.
-  unset($field['settings']['enddate_get'], $field['settings']['enddate_required']);
-
-  if (!empty($field['settings']['cache_enabled'])) {
-    if (!is_numeric($field['settings']['cache_count'])) {
-      form_set_error('field[settings][cache_count]', t('The number of cache values must be a number.'));
-    }
-    elseif ($field['settings']['cache_count'] < 0) {
-      form_set_error('field[settings][cache_count]', t('The number of cache values must be a number 0 or greater.'));
-    }
-  }
-}
-
-/**
  * Timezone handling options.
  *
  * The 'none' option will do no timezone conversions and will store and display
