diff --git a/payment/uc_google_checkout/uc_google_checkout.module b/payment/uc_google_checkout/uc_google_checkout.module
index 08d6db0..cc117ca 100644
--- a/payment/uc_google_checkout/uc_google_checkout.module
+++ b/payment/uc_google_checkout/uc_google_checkout.module
@@ -36,33 +36,37 @@ function uc_google_checkout_help($page, $args) {
 function uc_google_checkout_menu() {
   $items = array();
 
-  $items['admin/store/settings/google_checkout'] = array(
-    'title' => 'Google Checkout settings',
-    'description' => 'Set merchant ID and key for Google Checkout.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('uc_google_checkout_settings'),
-    'access arguments' => array('administer store'),
-    'file' => 'uc_google_checkout.admin.inc',
-  );
-  $items['admin/store/settings/google_checkout/account'] = array(
+//  $items['admin/store/settings/google_checkout'] = array(
+//    'title' => 'Google Checkout settings',
+//    'description' => 'Set merchant ID and key for Google Checkout.',
+//    'page callback' => 'drupal_get_form',
+//    'page arguments' => array('uc_google_checkout_settings'),
+//    'access arguments' => array('administer store'),
+//    'file' => 'uc_google_checkout.admin.inc',
+//  );
+  $items['admin/store/settings/payment/method/%uc_payment_method/account'] = array(
     'title' => 'Account',
+    'access callback' => 'uc_google_checkout_method_settings_access',
+    'access arguments' => array(5),
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
-  $items['admin/store/settings/google_checkout/shipping'] = array(
+  $items['admin/store/settings/payment/method/%uc_payment_method/shipping'] = array(
     'title' => 'Shipping',
     'description' => 'Calculate shipping charges for orders through Google Checkout.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('uc_google_checkout_shipping_settings'),
-    'access arguments' => array('administer store'),
+    'access callback' => 'uc_google_checkout_method_settings_access',
+    'access arguments' => array(5),
     'type' => MENU_LOCAL_TASK,
     'file' => 'uc_google_checkout.admin.inc',
   );
-  $items['admin/store/settings/google_checkout/taxes'] = array(
+  $items['admin/store/settings/payment/method/%uc_payment_method/taxes'] = array(
     'title' => 'Taxes',
     'description' => 'Calculate taxes for orders through Google Checkout.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('uc_google_checkout_taxes_settings'),
-    'access arguments' => array('administer store'),
+    'access callback' => 'uc_google_checkout_method_settings_access',
+    'access arguments' => array(5),
     'type' => MENU_LOCAL_TASK,
     'file' => 'uc_google_checkout.admin.inc',
   );
@@ -98,6 +102,10 @@ function uc_google_checkout_terminal_title($order) {
   return t('Google Checkout terminal: Order @order_id', array('@order_id' => $order->order_id));
 }
 
+function uc_google_checkout_method_settings_access($method) {
+  return user_access('administer store') && $method['id'] == 'google_checkout';
+}
+
 /**
  * Implements hook_init().
  */
@@ -365,18 +373,6 @@ function uc_google_checkout_uc_payment_method() {
 }
 
 /**
- * Implements hook_uc_payment_gateway().
- */
-function uc_google_checkout_uc_payment_gateway() {
-  $gateways['google_checkout'] = array(
-    'title' => t('Google Checkout'),
-    'description' => t('Express payment with Google Checkout.'),
-    'google_checkout' => 'uc_google_checkout_charge',
-  );
-  return $gateways;
-}
-
-/**
  * Implements hook_uc_shipment().
  */
 function uc_google_checkout_uc_shipment($op, $shipment) {
@@ -776,11 +772,9 @@ function uc_payment_method_google_checkout($op, &$order) {
 
       return $build;
     case 'settings':
-      $form = array();
-
-      $form['link'] = array(
-        '#markup' => l(t('Click here to go to Google Checkout settings.'), 'admin/store/settings/google_checkout'),
-      );
+      module_load_include('inc', 'uc_google_checkout', 'uc_google_checkout.admin');
+      $form_state = form_state_defaults();
+      $form = uc_google_checkout_settings(array(), $form_state);
 
     return $form;
   }
diff --git a/payment/uc_payment/uc_payment.admin.inc b/payment/uc_payment/uc_payment.admin.inc
index 7f2f8ca..22e5b0e 100644
--- a/payment/uc_payment/uc_payment.admin.inc
+++ b/payment/uc_payment/uc_payment.admin.inc
@@ -8,52 +8,28 @@
 
 
 /**
- * Displays an overview of the payment settings.
+ * Displays an overview of the available payment methods.
  */
-function uc_payment_settings_overview() {
-  // Theme all the pages beneath this path into summary overviews.
-  return array(
-    '#theme' => 'uc_summary_overview',
-    '#summaries' => uc_summarize_child_form_pages('admin/store/settings/payment/edit'),
-  );
-}
-
 function uc_payment_methods_form($form, &$form_state) {
   $methods = _uc_payment_method_list();
+  if (!empty($methods)) {
+    $form['pmtable'] = array(
+      '#theme' => 'uc_payment_method_table',
+    );
 
-  $form['methods_info'] = array(
-    '#markup' => '<div><strong>' . t('Payment methods') . '</strong><br />'
-              . t('The settings forms below are for the payment methods defined by enabled modules. Click a name to expand its options and adjust the settings accordingly. Methods are listed in order of appearance on the checkout screen, determined by the list position setting (current value shown in parentheses).') . '</div><br />',
-  );
-
-  $form['pmtable'] = array(
-    '#theme' => 'uc_payment_method_table',
-    '#summary callback' => 'uc_summarize_form',
-  );
-
-  if (is_array($methods) && count($methods) > 0) {
     foreach ($methods as $id => $method) {
-
-      $form['pmtable'][$id]['#summary callback'] = 'uc_summarize_form';
-
       $form['pmtable'][$id]['uc_payment_method_' . $id . '_checkout'] = array(
         '#type' => 'checkbox',
-        '#summary callback' => 'uc_summarize_checkbox',
-        '#summary arguments' => array(
-          t('@payment is enabled for checkout.', array('@payment' => $method['name'])),
-          t('@payment is disabled for checkout.', array('@payment' => $method['name'])),
-        ),
+        '#title' => $method['name'],
         '#default_value' => variable_get('uc_payment_method_' . $id . '_checkout', $method['checkout']),
       );
-      $form['pmtable'][$id]['name'] = array(
-        '#markup' => $method['name'],
-      );
       $form['pmtable'][$id]['uc_payment_method_' . $id . '_weight'] = array(
         '#type' => 'weight',
         '#default_value' => variable_get('uc_payment_method_' . $id . '_weight', $method['weight']),
+        '#attributes' => array('class' => array('uc-payment-method-weight')),
       );
 
-      if (isset($method['no_gateway']) && $method['no_gateway'] === TRUE) {
+      if (!empty($method['no_gateway'])) {
         $form['pmtable'][$id]['uc_payment_' . $id . '_gateway'] = array(
           '#markup' => '-',
         );
@@ -64,31 +40,25 @@ function uc_payment_methods_form($form, &$form_state) {
         foreach ($gateways as $gateway_id => $gateway) {
           $options[$gateway_id] = $gateway['title'];
         }
-        if (empty($options)) {
-          $options = array('none' => t('None available.'));
+        if ($options) {
+          $form['pmtable'][$id]['uc_payment_method_' . $id . '_checkout']['#title'] .= ' (' . t('includes %gateways', array('%gateways' => implode(', ', $options))) . ')';
         }
-        $form['pmtable'][$id]['uc_payment_' . $id . '_gateway'] = array(
-          '#type' => 'select',
-          '#options' => $options,
-          '#summary callback' => 'uc_summarize_null',
-          '#default_value' => variable_get('uc_payment_' . $id . '_gateway', 'none'),
-        );
       }
 
       $null = NULL;
       $method_settings = $method['callback']('settings', $null, array(), $form_state);
       if (is_array($method_settings)) {
-        $form['method_' . $id] = array(
-          '#type' => 'fieldset',
-          '#summary callback' => 'uc_summarize_null',
-          '#title' => t('!method settings', array('!method' => $method['name'], '!weight' => $method['weight'])),
-          '#collapsible' => TRUE,
-          '#collapsed' => TRUE,
+        $form['pmtable'][$id]['settings'] = array(
+          '#markup' => l(t('settings'), 'admin/store/settings/payment/method/' . $id),
         );
-        $form['method_' . $id] = array_merge($form['method_' . $id], $method_settings);
       }
     }
   }
+  else {
+    $form['pmtable'] = array(
+      '#markup' => t('No payment methods are available.'),
+    );
+  }
 
   return system_settings_form($form);
 }
@@ -99,61 +69,65 @@ function uc_payment_methods_form($form, &$form_state) {
 function theme_uc_payment_method_table($variables) {
   $form = $variables['form'];
 
-  $header = array(t('Enabled'), t('Payment method'), t('List position'), t('Default gateway'));
+  drupal_add_tabledrag('uc-payment-methods', 'order', 'sibling', 'uc-payment-method-weight');
+
+  $header = array(t('Payment method'), t('List position'), t('Operations'));
 
   foreach (element_children($form) as $method) {
-    $rows[] = array(
-      array('data' => drupal_render($form[$method]['uc_payment_method_' . $method . '_checkout']), 'align' => 'center'),
-      drupal_render($form[$method]['name']),
+    $row = array(
+      drupal_render($form[$method]['uc_payment_method_' . $method . '_checkout']),
       drupal_render($form[$method]['uc_payment_method_' . $method . '_weight']),
-      drupal_render($form[$method]['uc_payment_' . $method . '_gateway']),
+      drupal_render($form[$method]['settings']),
     );
-  }
 
-  if (empty($rows)) {
     $rows[] = array(
-      array('data' => t('No payment methods founds.'), 'colspan' => 5),
+      'data' => $row,
+      'class' => array('draggable'),
     );
   }
 
-  return theme('table', array('header' => $header, 'rows' => $rows));
+  return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'uc-payment-methods')));
 }
 
-function uc_payment_gateways_form($form, &$form_state) {
-  $gateways = _uc_payment_gateway_list();
-  $methods = _uc_payment_method_list();
-
-  $form['gateways'] = array(
-    '#summary callback' => '_uc_payment_gateways_summarize',
-    '#summary arguments' => array($gateways),
-  );
-
-  if (is_array($gateways) && count($gateways) > 0) {
-    $form['gateways_info'] = array(
-      '#markup' => '<div><strong>' . t('Payment gateways') . '</strong><br />'
-                . t('Payment gateways are web services that allow you to process various types of payments remotely.  The settings forms below are for the payment gateways you have installed.  Click a name to expand its options and adjust the settings accordingly.') . '</div>',
-      '#weight' => -10,
+/**
+ * Displays settings for a single payment method.
+ */
+function uc_payment_method_settings_form($form, &$form_state, $method) {
+  $form['method_settings'] = $method['callback']('settings', $null, array(), $form_state);
+
+  $gateways = _uc_payment_gateway_list($method['id']);
+  if (count($gateways)) {
+    $form['tabbed']['#type'] = 'vertical_tabs';
+
+    $form['method_settings'] = array_merge($form['method_settings'], array(
+      '#type' => 'fieldset',
+      '#title' => $method['name'],
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#group' => 'tabbed',
+    ));
+
+    $form['method_settings']['uc_payment_' . $method['id'] . '_gateway'] = array(
+      '#type' => 'radios',
+      '#title' => t('Default gateway'),
+      '#options' => array(),
+      '#default_value' => variable_get('uc_payment_' . $method['id'] . '_gateway', 'none'),
+      '#weight' => -50,
     );
 
     foreach ($gateways as $id => $gateway) {
+      if (variable_get('uc_pg_' . $id . '_enabled', TRUE)) {
+        $form['method_settings']['uc_payment_' . $method['id'] . '_gateway']['#options'][$id] = $gateway['title'];
+      }
+
       $form['gateways'][$id] = array(
         '#type' => 'fieldset',
-        '#title' => t('@gateway_name settings', array('@gateway_name' => $gateway['title'])),
+        '#title' => $gateway['title'],
         '#collapsible' => TRUE,
         '#collapsed' => TRUE,
+        '#group' => 'tabbed',
       );
-      $supported_methods = array();
-      foreach ($methods as $method_id => $method) {
-        if (isset($gateway[$method_id]) && function_exists($gateway[$method_id])) {
-          $supported_methods[] = $method['name'];
-        }
-      }
 
-      $form['gateways'][$id]['supported_methods'] = array(
-        '#markup' => '<div>' . t('This gateway supports the following payment methods:')
-                   . '<br />' . implode(',', $supported_methods) . '</div>',
-        '#weight' => -10,
-      );
       $form['gateways'][$id]['uc_pg_' . $id . '_enabled'] = array(
         '#type' => 'checkbox',
         '#title' => t('Enable this payment gateway for use.'),
@@ -169,35 +143,11 @@ function uc_payment_gateways_form($form, &$form_state) {
       }
     }
   }
-  else {
-    $form['gateways_info'] = array(
-      '#markup' => '<div><strong>' . t('Payment gateways') . '</strong><br />'
-                . t('Payment gateways are web services that allow you to process various types of payments remotely. No payment gateways are currently enabled.') . '</div>',
-      '#weight' => -10,
-    );
-  }
 
   return system_settings_form($form);
 }
 
 /**
- * Returns an array of enabled payment gateways for the form summary.
- */
-function _uc_payment_gateways_summarize($form, $gateways) {
-  $items = array();
-
-  foreach ($gateways as $gateway) {
-    $items[] = t('@title is @enabled.', array('@title' => $gateway['title'], '@enabled' => $gateway['enabled'] ? t('enabled') : t('disabled')));
-  }
-
-  if (empty($items)) {
-    $items[] = t('No payment gateway modules are installed.');
-  }
-
-  return $items;
-}
-
-/**
  * Selects a payment gateway to process a payment when multiple gateways
  * exist for a given payment method.
  */
diff --git a/payment/uc_payment/uc_payment.module b/payment/uc_payment/uc_payment.module
index 5268373..67823d9 100644
--- a/payment/uc_payment/uc_payment.module
+++ b/payment/uc_payment/uc_payment.module
@@ -25,46 +25,18 @@ require_once('uc_payment_order_pane.inc');
 function uc_payment_menu() {
   $items['admin/store/settings/payment'] = array(
     'title' => 'Payment settings',
-    'description' => 'Configure the payment settings.',
-    'page callback' => 'uc_payment_settings_overview',
-    'access arguments' => array('administer store'),
-    'file' => 'uc_payment.admin.inc',
-  );
-  $items['admin/store/settings/payment/overview'] = array(
-    'title' => 'Overview',
-    'description' => 'View the payment settings.',
-    'access arguments' => array('administer store'),
-    'weight' => -10,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/store/settings/payment/edit'] = array(
-    'title' => 'Edit',
-    'description' => 'Edit the payment settings.',
+    'description' => 'Configure payment methods.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('uc_payment_methods_form'),
     'access arguments' => array('administer store'),
-    'weight' => -5,
-    'type' => MENU_LOCAL_TASK,
     'file' => 'uc_payment.admin.inc',
   );
-  $items['admin/store/settings/payment/edit/methods'] = array(
-    'title' => 'Payment methods',
-    'description' => 'Edit the payment method settings.',
+  $items['admin/store/settings/payment/method/%uc_payment_method'] = array(
+    'title callback' => 'uc_payment_method_title',
+    'title arguments' => array(5),
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('uc_payment_methods_form'),
-    'access arguments' => array('administer store'),
-    'weight' => -5,
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'uc_payment.admin.inc',
-  );
-  $items['admin/store/settings/payment/edit/gateways'] = array(
-    'title' => 'Payment gateways',
-    'description' => 'Edit the payment gateway settings.',
+    'page arguments' => array('uc_payment_method_settings_form', 5),
     'access arguments' => array('administer store'),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('uc_payment_gateways_form'),
-    'weight' => 0,
-    'type' => MENU_LOCAL_TASK,
     'file' => 'uc_payment.admin.inc',
   );
 
@@ -107,6 +79,13 @@ function uc_payment_menu() {
 }
 
 /**
+ * Title callback for payment method settings.
+ */
+function uc_payment_method_title($method) {
+  return t('!method settings', array('!method' => $method['name']));
+}
+
+/**
  * Implements hook_permission().
  */
 function uc_payment_permission() {
@@ -620,6 +599,14 @@ function _uc_payment_method_list($action = NULL) {
 }
 
 /**
+ * Load a payment method.
+ */
+function uc_payment_method_load($method_id) {
+  $methods = _uc_payment_method_list();
+  return isset($methods[$method_id]) ? $methods[$method_id] : NULL;
+}
+
+/**
  * Return data from a payment method by method ID and the array key.
  */
 function _uc_payment_method_data($method_id, $key) {
