diff --git a/payment/uc_payment/uc_payment.admin.inc b/payment/uc_payment/uc_payment.admin.inc
index c5c842a..9b8f514 100644
--- a/payment/uc_payment/uc_payment.admin.inc
+++ b/payment/uc_payment/uc_payment.admin.inc
@@ -329,7 +329,7 @@ function uc_payment_by_order_form($form, &$form_state, $order) {
     foreach ($payments as $payment) {
       $form['payments'][$payment->receipt_id]['#attributes'] = array('valign' => 'top');
       $form['payments'][$payment->receipt_id]['received'] = array(
-        '#markup' => format_date($payment->received, 'custom', variable_get('uc_date_format_default', 'm/d/Y') . '<b\r />H:i:s'),
+        '#markup' => format_date($payment->received, 'custom', variable_get('date_format_uc_store', 'm/d/Y') . '<b\r />H:i:s'),
       );
       $form['payments'][$payment->receipt_id]['user'] = array(
         '#markup' => uc_get_initials($payment->uid),
diff --git a/payment/uc_payment_pack/uc_payment_pack.module b/payment/uc_payment_pack/uc_payment_pack.module
index dddad86..f668dd1 100644
--- a/payment/uc_payment_pack/uc_payment_pack.module
+++ b/payment/uc_payment_pack/uc_payment_pack.module
@@ -404,7 +404,7 @@ function uc_payment_method_check($op, &$order, $form = NULL, &$form_state = NULL
 
       $result = db_query("SELECT clear_date FROM {uc_payment_check} WHERE order_id = :id ", array(':id' => $order->order_id));
       if ($clear_date = $result->fetchField()) {
-        $build['#markup'] = t('Clear Date:') . ' ' . format_date($clear_date, 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
+        $build['#markup'] = t('Clear Date:') . ' ' . format_date($clear_date, 'uc_store');
       }
       else {
         $build['#markup'] = l(t('Receive Check'), 'admin/store/orders/' . $order->order_id . '/receive_check');
@@ -422,7 +422,7 @@ function uc_payment_method_check($op, &$order, $form = NULL, &$form_state = NULL
       $result = db_query("SELECT clear_date FROM {uc_payment_check} WHERE order_id = :id ", array(':id' => $order->order_id));
       if ($clear_date = $result->fetchField()) {
         $build['#markup'] = t('Check received') . '<br />' .
-          t('Expected clear date:') . '<br />' . format_date($clear_date, 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
+          t('Expected clear date:') . '<br />' . format_date($clear_date, 'uc_store');
       }
 
       return $build;
diff --git a/shipping/uc_shipping/uc_shipping.admin.inc b/shipping/uc_shipping/uc_shipping.admin.inc
index c17ccdb..38746c8 100644
--- a/shipping/uc_shipping/uc_shipping.admin.inc
+++ b/shipping/uc_shipping/uc_shipping.admin.inc
@@ -462,8 +462,8 @@ function uc_shipping_order_shipments($order) {
     $row[] = check_plain($shipment->d_first_name) . ' ' . check_plain($shipment->d_last_name);
     $row[] = check_plain($shipment->d_company);
     $row[] = check_plain($shipment->d_city) . ', ' . uc_get_zone_code($shipment->d_zone) . ' ' . check_plain($shipment->d_postal_code);
-    $row[] = format_date($shipment->ship_date, 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
-    $row[] = format_date($shipment->expected_delivery, 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
+    $row[] = format_date($shipment->ship_date, 'uc_store');
+    $row[] = format_date($shipment->expected_delivery, 'uc_store');
     $row[] = is_null($shipment->tracking_number) ? t('n/a') : check_plain($shipment->tracking_number);
     $row[] = l(t('view'), 'admin/store/orders/' . $order->order_id . '/shipments/' . $shipment->sid . '/view');
     $row[] = l(t('edit'), 'admin/store/orders/' . $order->order_id . '/shipments/' . $shipment->sid . '/edit');
@@ -650,8 +650,8 @@ function uc_shipping_shipment_view($order, $shipment) {
   $build['delivery_address'] = array('#markup' => '<div class="order-pane pos-left"><div class="order-pane-title">' . t('Delivery Address:') . '</div>' . $destination . '</div>');
 
   $rows = array();
-  $rows[] = array(t('Ship date:'), format_date($shipment->ship_date, 'custom', 'D, ' . variable_get('uc_date_format_default', 'm/d/Y')));
-  $rows[] = array(t('Expected delivery:'), format_date($shipment->expected_delivery, 'custom', 'D, ' . variable_get('uc_date_format_default', 'm/d/Y')));
+  $rows[] = array(t('Ship date:'), format_date($shipment->ship_date, 'uc_store'));
+  $rows[] = array(t('Expected delivery:'), format_date($shipment->expected_delivery, 'uc_store'));
 
   $build['schedule'] = array(
     '#theme' => 'table',
diff --git a/shipping/uc_ups/uc_ups.admin.inc b/shipping/uc_ups/uc_ups.admin.inc
index aa7befa..e48465c 100644
--- a/shipping/uc_ups/uc_ups.admin.inc
+++ b/shipping/uc_ups/uc_ups.admin.inc
@@ -376,9 +376,9 @@ function theme_uc_ups_confirm_shipment($variables) {
   $output .= '<b>' . $method['ups']['quote']['accessorials'][$_SESSION['ups']['service']] . '</b><br />';
   $output .= '<i>' . check_plain($_SESSION['ups']['rate']['type']) . '</i>: ' . theme('uc_price', array('price' => $_SESSION['ups']['rate']['amount'])) . ' (' . check_plain($_SESSION['ups']['rate']['currency']) . ')<br />';
   $ship_date = $_SESSION['ups']['ship_date'];
-  $output .= 'Ship date: ' . format_date(gmmktime(12, 0, 0, $ship_date['month'], $ship_date['day'], $ship_date['year']), 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
+  $output .= 'Ship date: ' . format_date(gmmktime(12, 0, 0, $ship_date['month'], $ship_date['day'], $ship_date['year']), 'uc_store');
   $exp_delivery = $_SESSION['ups']['expected_delivery'];
-  $output .= '<br />Expected delivery: ' . format_date(gmmktime(12, 0, 0, $exp_delivery['month'], $exp_delivery['day'], $exp_delivery['year']), 'custom', variable_get('uc_date_format_default', 'm/d/Y'));
+  $output .= '<br />Expected delivery: ' . format_date(gmmktime(12, 0, 0, $exp_delivery['month'], $exp_delivery['day'], $exp_delivery['year']), 'uc_store');
   $output .= "</div>\n<br style=\"clear: both;\" />";
   $output .= drupal_render_children($form);
 
diff --git a/uc_file/uc_file.pages.inc b/uc_file/uc_file.pages.inc
index 077bcfe..e04d622 100644
--- a/uc_file/uc_file.pages.inc
+++ b/uc_file/uc_file.pages.inc
@@ -41,7 +41,7 @@ function theme_uc_file_user_downloads($variables) {
   $row = 0;
   foreach ($files as $file) {
     $rows[] = array(
-      array('data' => format_date($file['granted'], 'custom', variable_get('uc_date_format_default', 'm/d/Y')), 'class' => array('date-row'), 'id' => 'date-' . $row),
+      array('data' => format_date($file['granted'], 'uc_store'), 'class' => array('date-row'), 'id' => 'date-' . $row),
       array('data' => $file['link'], 'class' => array('filename-row'), 'id' => 'filename-' . $row),
       array('data' => $file['description'], 'class' => array('description-row'), 'id' => 'description-' . $row),
       array('data' => $file['accessed'] . '/' . ($file['download_limit'] ? $file['download_limit'] : t('Unlimited')), 'class' => array('download-row'), 'id' => 'download-' . $row),
@@ -133,7 +133,7 @@ function uc_file_user_downloads($account) {
 
     // Able to be downloaded.
     else {
-      $file_link = l(basename($file->filename), 'download/' . $file->fid . '/' . $file->file_key, $onclick) . ' (' . t('expires on @date', array('@date' => format_date($file->expiration, 'custom', variable_get('uc_date_format_default', 'm/d/Y')))) . ')';
+      $file_link = l(basename($file->filename), 'download/' . $file->fid . '/' . $file->file_key, $onclick) . ' (' . t('expires on @date', array('@date' => format_date($file->expiration, 'uc_store'))) . ')';
     }
 
     $files[] = array(
diff --git a/uc_order/uc_order.admin.inc b/uc_order/uc_order.admin.inc
index 57cd3c8..275d1ff 100644
--- a/uc_order/uc_order.admin.inc
+++ b/uc_order/uc_order.admin.inc
@@ -438,7 +438,7 @@ function uc_order_admin($query = NULL, $search = FALSE) {
         array('data' => $order->order_id),
         array('data' => check_plain($order_name), 'nowrap' => 'nowrap'),
         array('data' => array('#theme' => 'uc_price', '#price' => $order->order_total), 'align' => 'right'),
-        array('data' => format_date($order->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y')), 'align' => 'center'),
+        array('data' => format_date($order->created, 'uc_store'), 'align' => 'center'),
         array('data' => $order->title),
       ),
       'id' => 'order-' . $order->order_id,
@@ -1042,7 +1042,7 @@ function uc_order_history($user) {
     }
 
     $rows[] = array(
-      array('data' => format_date($order->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y'))),
+      array('data' => format_date($order->created, 'uc_store')),
       array('data' => $link, 'nowrap' => 'nowrap'),
       array('data' => check_plain($order->title)),
       array('data' => (!is_null($order->products) ? $order->products : 0), 'align' => 'center'),
diff --git a/uc_order/uc_order.order_pane.inc b/uc_order/uc_order.order_pane.inc
index 63d421b..3679ff5 100644
--- a/uc_order/uc_order.order_pane.inc
+++ b/uc_order/uc_order.order_pane.inc
@@ -940,7 +940,7 @@ function uc_order_pane_order_comments($op, $order, &$form = NULL, &$form_state =
       $comments = uc_order_comments_load($order->order_id);
       $header = array(t('Date'), t('Status'), array('data' => t('Message'), 'width' => '100%'));
       $rows[] = array(
-        format_date($order->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y')),
+        format_date($order->created, 'uc_store'),
         array('data' => '-', 'align' => 'center'),
         t('Order created.')
       );
@@ -948,7 +948,7 @@ function uc_order_pane_order_comments($op, $order, &$form = NULL, &$form_state =
         foreach ($comments as $comment) {
           $rows[] = array(
             'data' => array(
-              array('data' => format_date($comment->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y')), 'align' => 'center'),
+              array('data' => format_date($comment->created, 'uc_store'), 'align' => 'center'),
               array('data' => $comment->title, 'align' => 'center', 'nowrap' => 'nowrap'),
               check_plain($comment->message),
             ),
@@ -1421,7 +1421,7 @@ function uc_op_order_comments_view_table($comments) {
     foreach ($comments as $comment) {
       $data = array();
       $data['date'] = array(
-        '#markup' => format_date($comment->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y') . '<\b\r />g:i:s A'),
+        '#markup' => format_date($comment->created, 'custom', variable_get('date_format_uc_store', 'm/d/Y') . '<\b\r />g:i:s A'),
         '#cell_attributes' => array('align' => 'center', 'nowrap' => 'true'),
       );
       $data['user'] = array(
@@ -1481,7 +1481,7 @@ function uc_op_admin_comments_view_table($comments) {
     foreach ($comments as $comment) {
       $data = array();
       $data['date'] = array(
-        '#markup' => format_date($comment->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y') . '<\b\r />g:i:s A'),
+        '#markup' => format_date($comment->created, 'custom', variable_get('date_format_uc_store', 'm/d/Y') . '<\b\r />g:i:s A'),
         '#cell_attributes' => array('align' => 'center', 'nowrap' => 'true', 'valign' => 'top'),
       );
       $data['user'] = array(
diff --git a/uc_reports/uc_reports.admin.inc b/uc_reports/uc_reports.admin.inc
index 3fbc2c9..c1b23a0 100644
--- a/uc_reports/uc_reports.admin.inc
+++ b/uc_reports/uc_reports.admin.inc
@@ -692,7 +692,6 @@ function theme_uc_reports_product_table($variables) {
  */
 function uc_reports_sales_summary() {
   $order_statuses = _uc_reports_order_statuses();
-  $format = variable_get('uc_date_format_default', 'm/d/Y');
 
   $date_day_of_month = date('n');
   $month_start = mktime(0, 0, 0, $date_day_of_month, 1);
@@ -707,7 +706,7 @@ function uc_reports_sales_summary() {
   $today = _uc_reports_get_sales($today_start);
 
   $rows[] = array(
-    l(t('Today, !date', array('!date' => format_date($today_start, 'custom', $format))), 'admin/store/orders/search/results/0/0/0/0/0/0/' . $today_start . '/' . $today_end),
+    l(t('Today, !date', array('!date' => format_date($today_start, 'uc_store'))), 'admin/store/orders/search/results/0/0/0/0/0/0/' . $today_start . '/' . $today_end),
     $today['total'],
     array('data' => array('#theme' => 'uc_price', '#price' => $today['income'])),
     array('data' => array('#theme' => 'uc_price', '#price' => $today['average'])),
@@ -717,7 +716,7 @@ function uc_reports_sales_summary() {
   $yesterday = _uc_reports_get_sales($today_start - 86400);
 
   $rows[] = array(
-    l(t('Yesterday, !date', array('!date' => format_date($today_start - 86400, 'custom', $format))), 'admin/store/orders/search/results/0/0/0/0/0/0/' . ($today_start - 86400) . '/' . ($today_end - 86400)),
+    l(t('Yesterday, !date', array('!date' => format_date($today_start - 86400, 'uc_store'))), 'admin/store/orders/search/results/0/0/0/0/0/0/' . ($today_start - 86400) . '/' . ($today_end - 86400)),
     $yesterday['total'],
     array('data' => array('#theme' => 'uc_price', '#price' => $yesterday['income'])),
     array('data' => array('#theme' => 'uc_price', '#price' => $yesterday['average'])),
@@ -980,8 +979,6 @@ function uc_reports_sales_year_form_submit($form, &$form_state) {
  * Displays the custom sales report form and table.
  */
 function uc_reports_sales_custom() {
-  $format = variable_get('uc_date_format_default', 'm/d/Y');
-
   // Use default report parameters if we don't detect values in the URL.
   if (arg(5) == '') {
     $args = array(
@@ -1020,10 +1017,10 @@ function uc_reports_sales_custom() {
 
     // Create the date title for the subreport.
     if ($args['length'] == 'day') {
-      $date = format_date($subreport['start'], 'custom', $format . ' - D');
+      $date = format_date($subreport['start'], 'custom', variable_get('date_format_uc_store', 'm/d/Y') . ' - D');
     }
     else {
-      $date = format_date($subreport['start'], 'custom', $format) . ' - ' . format_date($subreport['end'], 'custom', $format);
+      $date = format_date($subreport['start'], 'uc_store') . ' - ' . format_date($subreport['end'], 'uc_store');
     }
 
     // Build the order data for the subreport.
diff --git a/uc_store/uc_store.admin.inc b/uc_store/uc_store.admin.inc
index 6fb4df6..479ec7c 100644
--- a/uc_store/uc_store.admin.inc
+++ b/uc_store/uc_store.admin.inc
@@ -740,19 +740,6 @@ function uc_store_settings_form($form, &$form_state) {
     );
   }
 
-  $form['date'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Date format'),
-    '#description' => t('Supply a format string using !link syntax.', array('!link' => l(t('PHP date'), 'http://www.php.net/date'))),
-    '#group' => 'store',
-  );
-  $form['date']['uc_date_format_default'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Default format string'),
-    '#default_value' => variable_get('uc_date_format_default', 'm/d/Y'),
-    '#summary' => t('Date format: @date', array('@date' => uc_date_format(8, 18, 2007))),
-  );
-
   $form['display'] = array(
     '#type' => 'fieldset',
     '#title' => t('Display settings'),
@@ -895,7 +882,7 @@ function uc_store_customer_orders($uid) {
       'data' => array(
         array('data' => $icons),
         array('data' => $order->order_id),
-        array('data' => format_date($order->created, 'custom', variable_get('uc_date_format_default', 'm/d/Y'))),
+        array('data' => format_date($order->created, 'uc_store')),
         array('data' => check_plain($bname)),
         array('data' => check_plain($sname)),
         array('data' => $item_count['COUNT(*)']),
diff --git a/uc_store/uc_store.install b/uc_store/uc_store.install
index 92440e4..4ae8dfd 100644
--- a/uc_store/uc_store.install
+++ b/uc_store/uc_store.install
@@ -144,6 +144,9 @@ function uc_store_install() {
     )
   );
 
+  // Set the default store date format.
+  variable_set('date_format_uc_store', 'm/d/Y');
+
   // Install United States and Canada by default.
   $path = drupal_get_path('module', 'uc_store');
   require_once($path . '/countries/united_states_840_1.cif');
@@ -170,7 +173,7 @@ function uc_store_uninstall() {
 
   variable_del('uc_customer_list_address');
   variable_del('uc_sign_after_amount');
-  variable_del('uc_date_format_default');
+  variable_del('date_format_uc_store');
   variable_del('uc_address_fields');
   variable_del('uc_address_fields_required');
   variable_del('uc_footer_message');
@@ -236,3 +239,11 @@ function uc_store_update_7004() {
     )
   );
 }
+
+/**
+ * Change date formatting to use D7 API.
+ */
+function uc_store_update_7005() {
+  variable_set('date_format_uc_store', variable_get('uc_date_format_default', 'm/d/Y'));
+  variable_del('uc_date_format_default');
+}
diff --git a/uc_store/uc_store.module b/uc_store/uc_store.module
index 86228ba..3b0c10d 100644
--- a/uc_store/uc_store.module
+++ b/uc_store/uc_store.module
@@ -329,6 +329,46 @@ function uc_store_permission() {
 }
 
 /**
+ * Implements hook_date_formats().
+ */
+function uc_store_date_formats() {
+  return array(
+    array(
+      'type' => 'uc_store',
+      'format' => 'Y-m-d',
+      'locales' => array(),
+    ),
+    array(
+      'type' => 'uc_store',
+      'format' => 'm/d/Y',
+      'locales' => array('en-us'),
+    ),
+    array(
+      'type' => 'uc_store',
+      'format' => 'd/m/Y',
+      'locales' => array('en-gb', 'en-hk', 'en-ie', 'el-gr', 'es-es', 'fr-be', 'fr-fr', 'fr-lu', 'it-it', 'nl-be', 'pt-pt'),
+    ),
+    array(
+      'type' => 'uc_store',
+      'format' => 'Y/m/d',
+      'locales' => array('en-ca', 'fr-ca', 'no-no', 'sv-se'),
+    ),
+    array(
+      'type' => 'uc_store',
+      'format' => 'd.m.Y',
+      'locales' => array('de-ch', 'de-de', 'de-lu', 'fi-fi', 'fr-ch', 'is-is', 'pl-pl', 'ro-ro', 'ru-ru'),
+    ),
+  );
+}
+
+/**
+ * Implements hook_date_format_types().
+ */
+function uc_store_date_format_types() {
+  return array('uc_store' => t('Ubercart'));
+}
+
+/**
  * Implements hook_page_alter().
  */
 function uc_store_page_alter(&$page) {
diff --git a/uc_tax_report/uc_tax_report.module b/uc_tax_report/uc_tax_report.module
index 89bf32e..5ffe8dd 100644
--- a/uc_tax_report/uc_tax_report.module
+++ b/uc_tax_report/uc_tax_report.module
@@ -27,7 +27,6 @@ function uc_tax_report_menu() {
 function uc_tax_report_report_page($start_date = NULL, $end_date = NULL, $status = NULL) {
   $timezone = _uc_reports_timezone_offset();
   $timezone_offset = REQUEST_TIME + $timezone;
-  $format = variable_get('uc_date_format_default', 'm/d/Y');
 
   // Use default report parameters if we don't detect values in the URL.
   if ($start_date == '') {
