diff --git a/shipping/uc_flatrate/uc_flatrate.admin.inc b/shipping/uc_flatrate/uc_flatrate.admin.inc
index 5b6bed5..4d9cf0b 100644
--- a/shipping/uc_flatrate/uc_flatrate.admin.inc
+++ b/shipping/uc_flatrate/uc_flatrate.admin.inc
@@ -98,15 +98,6 @@ function uc_flatrate_admin_method_edit_form_submit($form, &$form_state) {
   }
   else {
     drupal_write_record('uc_flatrate_methods', $form_state['values']);
-    $mid = $form_state['values']['mid'];
-
-    $enabled = variable_get('uc_quote_enabled', array());
-    $enabled['flatrate_' . $mid] = TRUE;
-    variable_set('uc_quote_enabled', $enabled);
-
-    $weight = variable_get('uc_quote_method_weight', array());
-    $weight['flatrate_' . $mid] = 0;
-    variable_set('uc_quote_method_weight', $weight);
 
     // Ensure Rules picks up the new condition.
     entity_flush_caches();
@@ -153,14 +144,6 @@ function uc_flatrate_admin_method_confirm_delete_submit($form, &$form_state) {
 
   rules_config_delete(array('get_quote_from_flatrate_' . $mid));
 
-  $enabled = variable_get('uc_quote_enabled', array());
-  unset($enabled['flatrate_' . $mid]);
-  variable_set('uc_quote_enabled', $enabled);
-
-  $weight = variable_get('uc_quote_method_weight', array());
-  unset($weight['flatrate_' . $mid]);
-  variable_set('uc_quote_method_weight', $weight);
-
   drupal_set_message(t('Flat rate shipping method deleted.'));
   $form_state['redirect'] = 'admin/store/settings/quotes/methods';
 }
diff --git a/shipping/uc_flatrate/uc_flatrate.module b/shipping/uc_flatrate/uc_flatrate.module
index f15e4a9..f6f3d28 100644
--- a/shipping/uc_flatrate/uc_flatrate.module
+++ b/shipping/uc_flatrate/uc_flatrate.module
@@ -164,15 +164,8 @@ function uc_flatrate_node_revision_delete($node) {
 function uc_flatrate_uc_shipping_method() {
   $methods = array();
 
-  $enabled = variable_get('uc_quote_enabled', array());
-  $weight = variable_get('uc_quote_method_weight', array());
-
   $result = db_query("SELECT mid, title, label, base_rate, product_rate FROM {uc_flatrate_methods}");
   foreach ($result as $method) {
-    // Ensure default values are set.
-    $enabled += array('flatrate_' . $method->mid => TRUE);
-    $weight += array('flatrate_' . $method->mid => 0);
-
     $methods['flatrate_' . $method->mid] = array(
       'id' => 'flatrate_' . $method->mid,
       'module' => 'uc_flatrate',
@@ -188,7 +181,6 @@ function uc_flatrate_uc_shipping_method() {
           'href' => 'admin/store/settings/quotes/flatrate/' . $method->mid . '/delete',
         ),
       ),
-      'enabled' => $enabled['flatrate_' . $method->mid],
       'quote' => array(
         'type' => 'order',
         'callback' => 'uc_flatrate_quote',
@@ -196,7 +188,7 @@ function uc_flatrate_uc_shipping_method() {
           $method->label,
         ),
       ),
-      'weight' => $weight['flatrate_' . $method->mid],
+      'enabled' => TRUE,
     );
   }
 
diff --git a/shipping/uc_quote/uc_quote.admin.inc b/shipping/uc_quote/uc_quote.admin.inc
index 1934d09..b84f4c4 100644
--- a/shipping/uc_quote/uc_quote.admin.inc
+++ b/shipping/uc_quote/uc_quote.admin.inc
@@ -122,30 +122,21 @@ function uc_quote_method_settings($form, &$form_state) {
     '#tree' => TRUE,
   );
 
-  $enabled = variable_get('uc_quote_enabled', array());
-  $weight = variable_get('uc_quote_method_weight', array());
-  $methods = module_invoke_all('uc_shipping_method');
-  uasort($methods, '_uc_quote_type_sort');
-
-  foreach ($methods as $method) {
+  foreach (uc_quote_methods(TRUE) as $method) {
     if (isset($method['quote'])) {
       $id = $method['id'];
 
-      // Ensure default values are set.
-      $enabled += array($id => FALSE);
-      $weight += array($id => 0);
-
       $form['methods'][$id]['uc_quote_enabled'] = array(
         '#type' => 'checkbox',
         '#title' => $method['title'],
-        '#default_value' => $enabled[$id],
+        '#default_value' => $method['enabled'],
       );
       $form['methods'][$id]['description'] = array(
         '#markup' => isset($method['description']) ? $method['description'] : '',
       );
       $form['methods'][$id]['uc_quote_method_weight'] = array(
         '#type' => 'weight',
-        '#default_value' => $weight[$id],
+        '#default_value' => $method['weight'],
         '#attributes' => array('class' => array('uc-quote-method-weight')),
       );
       $form['methods'][$id]['operations'] = array(
diff --git a/shipping/uc_quote/uc_quote.api.php b/shipping/uc_quote/uc_quote.api.php
index 179155d..8595fe8 100644
--- a/shipping/uc_quote/uc_quote.api.php
+++ b/shipping/uc_quote/uc_quote.api.php
@@ -13,55 +13,55 @@
 /**
  * Defines callbacks and service options for shipping methods.
  *
- * The shipping quote controller module, uc_quote, expects a very specific
- * structured array of methods from the implementations of this hook.
- *
- * The weights and enabled flags for shipping methods and types are set at the
- * Shipping Quote Settings page under Store Configuration. They keys of the
- * variables are the ids of the shipping methods. The "quote" and "ship" arrays
- * of the method are both optional.
- *
  * @return
- *   An array of shipping methods which have the following keys:
- *   - type: The quote and shipping types are ids of the product shipping type
- *     that these methods apply to. type may also be 'order' which indicates
- *     that the quote applies to the entire order, regardless of the shipping
- *     types of its products. This is used by quote methods that are based on
- *     the location of the customer rather than their purchase.
- *   - callback: The function that is called by uc_quote when a shipping quote
- *     is requested. Its arguments are the array of products and an array of
- *     order details (the shipping address). The return value is an array
- *     representing the rates quoted and errors returned (if any) for each
- *     option in the accessorials array.
- *   - accessorials: This array represents the different options the customer
- *     may choose for their shipment. The callback function should generate a
- *     quote for each option in accessorials and return them via an array.
- *     drupal_json_encode() is very useful for this.
- *     @code
+ *   An array of shipping methods, keyed by the unique method ID, and with the
+ *   following members:
+ *   - id: The unique method ID, the same as the array key for this method.
+ *   - module: The name of the implementing module.
+ *   - title: The shipping method title.
+ *   - description: (optional) A short description of the shipping method.
+ *   - operations: (optional) A set of links that can be used to edit or
+ *     configure the shipping method, suitable for passing to theme_links().
+ *   - quote: (optional) An associative array, with the following members:
+ *     - type: The quote and shipping types are ids of the product shipping type
+ *       that these methods apply to. type may also be 'order' which indicates
+ *       that the quote applies to the entire order, regardless of the shipping
+ *       types of its products. This is used by quote methods that are based on
+ *       the location of the customer rather than their purchase.
+ *     - callback: The function that is called by uc_quote when a shipping quote
+ *       is requested. Its arguments are the array of products and an array of
+ *       order details (the shipping address). The return value is an array
+ *       representing the rates quoted and errors returned (if any) for each
+ *       option in the accessorials array.
+ *     - file: (optional) The name of the file that contains the callback function.
+ *     - accessorials: This array represents the different options the customer
+ *       may choose for their shipment. The callback function should generate a
+ *       quote for each option in accessorials and return them via an array.
+ *       @code
  *       return array(
  *         '03' => array('rate' => 15.75,  'option_label' => t('UPS Ground'),
  *                       'error' => 'Additional handling charge automatically applied.'),
  *         '14' => array('error' => 'Invalid package type.'),
  *         '59' => array('rate' => 26.03, 'option_label' => t('UPS 2nd Day Air A.M.'))
  *       );
- *     @endcode
- *   - pkg_types: The list of package types that the shipping method can handle.
- *     This should be an associative array that can be used as the #options of
- *     a select form element. It is recommended that a function be written to
- *     output this array so the method doesn't need to be found just for the
- *     package types.
+ *       @endcode
+ *     - pkg_types: The list of package types that the shipping method can handle.
+ *       This should be an associative array that can be used as the #options of
+ *       a select form element. It is recommended that a function be written to
+ *       output this array so the method doesn't need to be found just for the
+ *       package types.
+ *   - ship: (optional) An associative array, in the same format as 'quote'.
+ *   - enabled: (optional) Whether the method should be enabled by default.
+ *     Defaults to FALSE.
+ *   - weight: (optional) The default position of the method in the list of
+ *     shipping quotes. Defaults to 0.
  */
 function hook_uc_shipping_method() {
   $methods = array();
 
-  $enabled = variable_get('uc_quote_enabled', array()) + array('ups' => TRUE);
-  $weight = variable_get('uc_quote_method_weight', array()) + array('ups' => 0);
-
   $methods['ups'] = array(
     'id' => 'ups',
     'title' => t('UPS'),
-    'enabled' => $enabled['ups'],
-    'weight' => $weight['ups'],
     'quote' => array(
       'type' => 'small package',
       'callback' => 'uc_ups_quote',
diff --git a/shipping/uc_quote/uc_quote.module b/shipping/uc_quote/uc_quote.module
index e9fb3eb..3d1d61f 100644
--- a/shipping/uc_quote/uc_quote.module
+++ b/shipping/uc_quote/uc_quote.module
@@ -669,7 +669,7 @@ function uc_checkout_pane_quotes($op, &$order, $form = NULL, &$form_state = NULL
         $quote_option = explode('---', $default_option);
         $order->quote['method'] = $quote_option[0];
         $order->quote['accessorials'] = $quote_option[1];
-        $methods = array_filter(module_invoke_all('uc_shipping_method'), '_uc_quote_method_enabled');
+        $methods = uc_quote_methods();
         $method = $methods[$quote_option[0]];
 
         $label = $method['quote']['accessorials'][$quote_option[1]];
@@ -730,7 +730,7 @@ function uc_checkout_pane_quotes($op, &$order, $form = NULL, &$form_state = NULL
       $quote_option = explode('---', $form_state['values']['panes']['quotes']['quotes']['quote_option']);
       $order->quote['method'] = $quote_option[0];
       $order->quote['accessorials'] = $quote_option[1];
-      $methods = array_filter(module_invoke_all('uc_shipping_method'), '_uc_quote_method_enabled');
+      $methods = uc_quote_methods();
       $method = $methods[$quote_option[0]];
 
       $label = $method['quote']['accessorials'][$quote_option[1]];
@@ -845,7 +845,7 @@ function uc_quote_apply_quote_to_order($form, &$form_state) {
       $quote_option = explode('---', $form_state['values']['quotes']['quote_option']);
       $order->quote['method'] = $quote_option[0];
       $order->quote['accessorials'] = $quote_option[1];
-      $methods = array_filter(module_invoke_all('uc_shipping_method'), '_uc_quote_method_enabled');
+      $methods = uc_quote_methods();
       $method = $methods[$quote_option[0]];
 
       $label = $method['quote']['accessorials'][$quote_option[1]];
@@ -1023,10 +1023,37 @@ function theme_uc_quote_returned_rates($variables) {
 }
 
 /**
- * Callback for array_filter().
+ * Returns an array of available shipping quote methods.
+ *
+ * @param $all
+ *   If FALSE, only enabled shipping methods are returned.
  */
-function _uc_quote_method_enabled($method) {
-  return $method['enabled'];
+function uc_quote_methods($all = FALSE) {
+  $enabled = variable_get('uc_quote_enabled', array());
+  $weight = variable_get('uc_quote_method_weight', array());
+
+  $methods = array();
+  foreach (module_invoke_all('uc_shipping_method') as $id => $method) {
+    // Set defaults.
+    $method += array(
+      'enabled' => FALSE,
+      'weight' => 0,
+    );
+
+    // Override defaults with store configuration, if any.
+    if (isset($enabled[$id])) {
+      $method['enabled'] = $enabled[$id];
+    }
+    if (isset($weight[$id])) {
+      $method['weight'] = $weight[$id];
+    }
+
+    if ($all || $method['enabled']) {
+      $methods[$id] = $method;
+    }
+  }
+  uasort($methods, '_uc_quote_type_sort');
+  return $methods;
 }
 
 /**
@@ -1060,19 +1087,6 @@ function uc_quote_price_sort($a, $b) {
 }
 
 /**
- * Returns an array of quote types to be selected in a form.
- */
-function uc_quote_type_options() {
-  $methods = module_invoke_all('uc_shipping_method');
-  foreach ($methods as $method) {
-    if (isset($method['quote'])) {
-      $types[$method['id']] = $method['title'];
-    }
-  }
-  return $types;
-}
-
-/**
  * Returns an options array of shipping types.
  */
 function uc_quote_shipping_type_options() {
diff --git a/shipping/uc_quote/uc_quote.pages.inc b/shipping/uc_quote/uc_quote.pages.inc
index f5a3113..bdebb8e 100644
--- a/shipping/uc_quote/uc_quote.pages.inc
+++ b/shipping/uc_quote/uc_quote.pages.inc
@@ -45,8 +45,7 @@ function uc_quote_assemble_quotes($order) {
       $type_weight = $all_types[$type]['weight'];
     }
   }
-  $methods = array_filter(module_invoke_all('uc_shipping_method'), '_uc_quote_method_enabled');
-  uasort($methods, '_uc_quote_type_sort');
+  $methods = uc_quote_methods();
   foreach ($methods as $id => $method) {
     if ($method['quote']['type'] != 'order' && $method['quote']['type'] != $shipping_type) {
       unset($methods[$id]);
diff --git a/shipping/uc_ups/uc_ups.module b/shipping/uc_ups/uc_ups.module
index 84eb942..63080ee 100644
--- a/shipping/uc_ups/uc_ups.module
+++ b/shipping/uc_ups/uc_ups.module
@@ -250,11 +250,6 @@ function uc_ups_uc_shipping_type() {
  * Implements hook_uc_shipping_method().
  */
 function uc_ups_uc_shipping_method() {
-  $methods = array();
-
-  $enabled = variable_get('uc_quote_enabled', array()) + array('ups' => FALSE);
-  $weight = variable_get('uc_quote_method_weight', array()) + array('ups' => 0);
-
   $methods['ups'] = array(
     'id' => 'ups',
     'module' => 'uc_ups',
@@ -265,7 +260,6 @@ function uc_ups_uc_shipping_method() {
         'href' => 'admin/store/settings/quotes/settings/ups',
       ),
     ),
-    'enabled' => $enabled['ups'],
     'quote' => array(
       'type' => 'small_package',
       'callback' => 'uc_ups_quote',
@@ -278,7 +272,6 @@ function uc_ups_uc_shipping_method() {
       'pkg_types' => _uc_ups_pkg_types(),
     ),
     'cancel' => 'uc_ups_void_shipment',
-    'weight' => $weight['ups'],
   );
 
   return $methods;
diff --git a/shipping/uc_usps/uc_usps.module b/shipping/uc_usps/uc_usps.module
index 0483b37..ec00d2a 100644
--- a/shipping/uc_usps/uc_usps.module
+++ b/shipping/uc_usps/uc_usps.module
@@ -190,19 +190,7 @@ function uc_usps_uc_shipping_type() {
  * Implements hook_uc_shipping_method().
  */
 function uc_usps_uc_shipping_method() {
-  $enabled = variable_get('uc_quote_enabled', array()) + array(
-    'usps_env' => FALSE,
-    'usps' => FALSE,
-    'usps_intl_env' => FALSE,
-    'usps_intl' => FALSE,
-  );
-  $weight = variable_get('uc_quote_method_weight', array()) + array(
-    'usps_env' => 0,
-    'usps' => 0,
-    'usps_intl_env' => 1,
-    'usps_intl' => 1,
-   );
-   $operations = array(
+  $operations = array(
     'configure' => array(
       'title' => t('configure'),
       'href' => 'admin/store/settings/quotes/settings/usps',
@@ -220,8 +208,6 @@ function uc_usps_uc_shipping_method() {
         'callback' => 'uc_usps_quote',
         'accessorials' => _uc_usps_env_services(),
       ),
-      'enabled' => $enabled['usps_env'],
-      'weight' => $weight['usps_env'],
     ),
     'usps' => array(
       'id' => 'usps',
@@ -233,8 +219,6 @@ function uc_usps_uc_shipping_method() {
         'callback' => 'uc_usps_quote',
         'accessorials' => _uc_usps_services(),
       ),
-      'enabled' => $enabled['usps'],
-      'weight' => $weight['usps'],
     ),
     'usps_intl_env' => array(
       'id' => 'usps_intl_env',
@@ -246,8 +230,7 @@ function uc_usps_uc_shipping_method() {
         'callback' => 'uc_usps_quote',
         'accessorials' => _uc_usps_intl_env_services(),
       ),
-      'enabled' => $enabled['usps_intl_env'],
-      'weight' => $weight['usps_intl_env'],
+      'weight' => 1,
     ),
     'usps_intl' => array(
       'id' => 'usps_intl',
@@ -259,8 +242,7 @@ function uc_usps_uc_shipping_method() {
         'callback' => 'uc_usps_quote',
         'accessorials' => _uc_usps_intl_services(),
       ),
-      'enabled' => $enabled['usps_intl'],
-      'weight' => $weight['usps_intl'],
+      'weight' => 1,
     ),
   );
 
diff --git a/shipping/uc_weightquote/uc_weightquote.admin.inc b/shipping/uc_weightquote/uc_weightquote.admin.inc
index 7075416..a0b8f20 100644
--- a/shipping/uc_weightquote/uc_weightquote.admin.inc
+++ b/shipping/uc_weightquote/uc_weightquote.admin.inc
@@ -99,15 +99,6 @@ function uc_weightquote_admin_method_edit_form_submit($form, &$form_state) {
   }
   else {
     drupal_write_record('uc_weightquote_methods', $form_state['values']);
-    $mid = $form_state['values']['mid'];
-
-    $enabled = variable_get('uc_quote_enabled', array());
-    $enabled['weightquote_' . $mid] = TRUE;
-    variable_set('uc_quote_enabled', $enabled);
-
-    $weight = variable_get('uc_quote_method_weight', array());
-    $weight['weightquote_' . $mid] = 0;
-    variable_set('uc_quote_method_weight', $weight);
 
     // Ensure Rules picks up the new condition.
     entity_flush_caches();
@@ -154,14 +145,6 @@ function uc_weightquote_admin_method_confirm_delete_submit($form, &$form_state)
 
   rules_config_delete(array('get_quote_from_weightquote_' . $mid));
 
-  $enabled = variable_get('uc_quote_enabled', array());
-  unset($enabled['weightquote_' . $mid]);
-  variable_set('uc_quote_enabled', $enabled);
-
-  $weight = variable_get('uc_quote_method_weight', array());
-  unset($weight['weightquote_' . $mid]);
-  variable_set('uc_quote_method_weight', $weight);
-
   drupal_set_message(t('Weight quote shipping method deleted.'));
   $form_state['redirect'] = 'admin/store/settings/quotes/methods';
 }
diff --git a/shipping/uc_weightquote/uc_weightquote.module b/shipping/uc_weightquote/uc_weightquote.module
index 53c04ca..c104c8a 100644
--- a/shipping/uc_weightquote/uc_weightquote.module
+++ b/shipping/uc_weightquote/uc_weightquote.module
@@ -165,15 +165,8 @@ function uc_weightquote_node_revision_delete($node) {
 function uc_weightquote_uc_shipping_method() {
   $methods = array();
 
-  $enabled = variable_get('uc_quote_enabled', array());
-  $weight = variable_get('uc_quote_method_weight', array());
-
   $result = db_query("SELECT mid, title, label, base_rate, product_rate FROM {uc_weightquote_methods}");
   foreach ($result as $method) {
-    // Ensure the default values are set.
-    $enabled += array('weightquote_' . $method->mid => FALSE);
-    $weight += array('weightquote_' . $method->mid => 0);
-
     $methods['weightquote_' . $method->mid] = array(
       'id' => 'weightquote_' . $method->mid,
       'module' => 'uc_weightquote',
@@ -189,7 +182,6 @@ function uc_weightquote_uc_shipping_method() {
           'href' => 'admin/store/settings/quotes/weightquote/' . $method->mid . '/delete',
         ),
       ),
-      'enabled' => isset($enabled['weightquote_' . $method->mid]) ? $enabled['weightquote_' . $method->mid] : FALSE,
       'quote' => array(
         'type' => 'order',
         'callback' => 'uc_weightquote_quote',
@@ -197,7 +189,7 @@ function uc_weightquote_uc_shipping_method() {
           $method->label,
         ),
       ),
-      'weight' => isset($weight['weightquote_' . $method->mid]) ? $weight['weightquote_' . $method->mid] : 0,
+      'enabled' => TRUE,
     );
   }
 
