Index: webform_pay.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform_pay/webform_pay.inc,v
retrieving revision 1.3
diff -u -r1.3 webform_pay.inc
--- webform_pay.inc	27 Dec 2010 23:44:46 -0000	1.3
+++ webform_pay.inc	28 Dec 2010 21:32:12 -0000
@@ -42,7 +42,7 @@
       $key = $this->handler();
 
       // Set the total value in the form state.
-      $method_values =& $form_state['values'][$key]['pay_method'][$pmid];
+      $method_values = &$form_state['values'][$key]['pay_method'][$pmid];
       if (!$method_values['total']) {
         $method_values['total'] = $values['total'];
       }
@@ -50,12 +50,21 @@
       // 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 = &$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);
       }
     }
   }
+
+  /**
+   * Override of pay_form::form_submit().
+   */
+  function form_submit($form, &$form_state) {
+    if ($form['details']['page_num']['#value'] == $form['details']['page_count']['#value']) {
+      parent::form_submit($form, $form_state);
+    }
+  }
 }
 
Index: webform_pay.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform_pay/webform_pay.module,v
retrieving revision 1.3
diff -u -r1.3 webform_pay.module
--- webform_pay.module	20 Oct 2010 03:04:47 -0000	1.3
+++ webform_pay.module	28 Dec 2010 21:32:12 -0000
@@ -116,8 +116,21 @@
     $pay_cid = $node->webform_pay_cid;
     $component = $node->webform['components'][$pay_cid];
 
+    // Check if the pay component is on this page of the webform.
+    $parent_keys = webform_component_parent_keys($node, $component);
+    $element = $form['submitted'];
+    foreach ($parent_keys as $form_key) {
+      if (isset($element[$form_key])) {
+        $element = $element[$form_key];
+      }
+      else {
+        $element = FALSE;
+        break;
+      }
+    }
+
     // Initialize the form for the selected payment method.
-    if ($pay_form = pay_form_load($component['extra']['pfid'])) {
+    if ($element && $pay_form = pay_form_load($component['extra']['pfid'])) {
       $form['#pre_render'][] = 'webform_pay_prerender';
       $form['#validate'][] = 'webform_pay_validate';
       $pay_form->form($form, $form_state, 'webform');
@@ -235,7 +248,12 @@
   foreach ($component['extra']['price_components'] as $cid => $enabled) {
     if ($enabled && isset($node->webform['components'][$cid])) {
       $price_component = $node->webform['components'][$cid];
+      // Find the price value if on the current page.
       $price_value = _webform_pay_component_value($node, $price_component, $form_state['values']['submitted']);
+      // Find the price value from any previous pages.
+      if ($price_value === FALSE && isset($form_state['storage']['submitted'])) {
+        $price_value = _webform_pay_component_value($node, $price_component, $form_state['storage']['submitted']);
+      }
       $price_parents = webform_component_parent_keys($node, $price_component);
       if (!empty($price_value) && !is_numeric($price_value)) {
         form_set_error('submitted][' . implode('][', $price_parents), t('The value for @name needs to be a valid amount.', array('@name' => $price_component['name'])));
@@ -251,7 +269,12 @@
   foreach ($component['extra']['other_components'] as $key => $cid) {
     if (isset($node->webform['components'][$cid])) {
       $other_component = $node->webform['components'][$cid];
+      // Find the component value from the current page.
       $other_value = _webform_pay_component_value($node, $other_component, $form_state['values']['submitted']);
+      // Find the component value from any previous pages.
+      if ($other_value === FALSE && isset($form_state['storage']['submitted'])) {
+        $other_value = _webform_pay_component_value($node, $other_component, $form_state['storage']['submitted']);
+      }
       // TODO: Find a cleaner way of separating out billing information?
       if (in_array($key, array('street1', 'street2', 'city', 'state', 'zip', 'country', 'phone'))) {
         $other_values['billto'][$key] = $other_value;
@@ -282,7 +305,7 @@
   // Add in extra properties for the payment handler from other components.
   $form_state['values'][$pay_handler]['pay_method'][$pay_method->pmid] = array_merge($form_state['values'][$pay_handler]['pay_method'][$pay_method->pmid], $other_values);
 
-  // Drill down to the element.
+  // Drill down to the pay form element.
   $parent_keys = webform_component_parent_keys($node, $component);
   $element = &$form['submitted'];
   foreach ($parent_keys as $form_key) {
@@ -296,7 +319,13 @@
 function _webform_pay_component_value($node, $component, $values) {
   $parent_keys = webform_component_parent_keys($node, $component);
   foreach ($parent_keys as $form_key) {
-    $values = $values[$form_key];
+    if (isset($values[$form_key])) {
+      $values = $values[$form_key];
+    }
+    else {
+      $values = FALSE;
+      break;
+    }
   }
   return $values;
 }
