diff --git a/payment/uc_payment/uc_payment.admin.inc b/payment/uc_payment/uc_payment.admin.inc
index 7f2f8ca..7652f54 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,63 @@ 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'], TRUE);
+  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) {
+      $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 +141,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 1dc5048..a6d9bd8 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() {
@@ -621,6 +600,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) {
