Index: webform_pay.component.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform_pay/webform_pay.component.inc,v
retrieving revision 1.3
diff -u -r1.3 webform_pay.component.inc
--- webform_pay.component.inc	27 Dec 2010 21:41:45 -0000	1.3
+++ webform_pay.component.inc	27 Dec 2010 23:39:06 -0000
@@ -69,7 +69,7 @@
   $options = array();
   $info = pay_handlers('pay_method');
   foreach (pay_form::pay_method_list() as $pmid => $pay_method) {
-    $options[$pmid] = $pay_method->title;
+    $options[$pmid] = $pay_method;
   }
 
   $form['extra']['pfid'] = array(
@@ -275,18 +275,27 @@
  * Format the output of data for this component.
  */
 function theme_webform_display_pay($element) {
-  if ($element['#value']['cc_number']) {
-    $value = $element['#value'];
-    $pay_method = pay_method_load($element['#pmid']);
+  $output = array();
+  $value = $element['#value'];
+
+  if (!empty($value['first_name']) || !empty($value['last_name'])) {
+    $name = implode(' ', array($value['first_name'], $value['last_name']));
+    $output[] = ($element['#format'] == 'html') ? check_plain($name) : $name;
+  }
+
+  if ($value['cc_number'] && $pay_method = pay_method_load($value['pmid'])) {
     $payment_types = $pay_method->payment_types();
-    $name = $value['first_name'] . ' ' . $value['last_name'];
-    $value = array(
-      ($element['#format'] == 'html') ? check_plain($name) : $name,
-      t('@card expires @date', array('@card' => $payment_types[$value['cc_type']], '@date' => $value['cc_exp_month'] . '/' . $value['cc_exp_year'])),
-      $value['cc_number'],
-    );
+    $output[] = t('@card expires @date', array('@card' => $payment_types[$value['cc_type']], '@date' => $value['cc_exp_month'] . '/' . $value['cc_exp_year']));
+    $output[] = check_plain($value['cc_number']);
+  }
+
+  if ($value['total']) {
+    $output[] = t('Total: @amount', array('@amount' => sprintf("%01.2f", $value['total'])));
+  }
+
+  if (!empty($output)) {
     $glue = ($element['#format'] == 'html') ? '<br />' : "\n";
-    $output = implode($glue, $value);
+    $output = implode($glue, $output);
   }
   else {
     $output = t('No payment information provided');
Index: webform_pay.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform_pay/webform_pay.inc,v
retrieving revision 1.2
diff -u -r1.2 webform_pay.inc
--- webform_pay.inc	27 Dec 2010 21:41:45 -0000	1.2
+++ webform_pay.inc	27 Dec 2010 23:39:06 -0000
@@ -40,14 +40,21 @@
     foreach ($values['pay_method']['selected'] as $pmid => $status) {
       if (!$status) continue;
       $key = $this->handler();
-      $method_values = $form_state['values'][$key]['pay_method'][$pmid];
-      $method_element = $form[$key]['pay_method'][$pmid];
+
+      // Set the total value in the form state.
+      $method_values =& $form_state['values'][$key]['pay_method'][$pmid];
       if (!$method_values['total']) {
-        form_set_value($method_element['total'], $values['total'], $form_state);
         $method_values['total'] = $values['total'];
       }
-      $pay_method = pay_method_load($method_values);
-      $pay_method->pay_method_validate($form, $form_state, $method_element);
+
+      // Not all payment methods have a payment form (such as the "Custom
+      // payment" method). Only fire the pay form validation handler if needed.
+      if (isset($form[$key]['pay_method'][$pmid])) {
+        $method_element =& $form[$key]['pay_method'][$pmid];
+        $method_element['total']['#value'] = $values['total'];
+        $pay_method = pay_method_load($method_values);
+        $pay_method->pay_method_validate($form, $form_state, $method_element);
+      }
     }
   }
 }
