diff --git a/webform_pay.module b/webform_pay.module
index 974b8b3..c40e62f 100644
--- a/webform_pay.module
+++ b/webform_pay.module
@@ -253,10 +253,10 @@ function webform_pay_validate(&$form, &$form_state) {
     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($price_component, $form_state['values']['submitted']);
+      $price_value = _webform_pay_component_value($node, $price_component, $form_state['values']['submitted'], TRUE);
       // Find the price value from any previous pages.
       if ($price_value === FALSE && isset($form_state['storage']['submitted'])) {
-        $price_value = _webform_pay_component_value($price_component, $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)) {
@@ -274,10 +274,10 @@ function webform_pay_validate(&$form, &$form_state) {
     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($other_component, $form_state['values']['submitted']);
+      $other_value = _webform_pay_component_value($node, $other_component, $form_state['values']['submitted'], TRUE);
       // Find the component value from any previous pages.
       if ($other_value === FALSE && isset($form_state['storage']['submitted'])) {
-        $other_value = _webform_pay_component_value($other_component, $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'))) {
@@ -323,20 +323,40 @@ function webform_pay_validate(&$form, &$form_state) {
 /**
  * Helper function to return the value of a component if it exists.
  *
+ * @param $node
+ *   The Webform node.
  * @param $component
  *   The Webform component to check for.
  * @param $values
  *   An array of webform values keyed by component ID.
+ * @param $nested_tree
+ *   Whether or not this function should treat the $values parameter as a tree.
+ *   On same-page validation the form value is in a tree. On multiple page forms
+ *   or on submission, the values are flattened by Webform.
  *
  * @return
  *   The submitted value of the component, or FALSE if the component was not
  *   contained in $values.
  */
-function _webform_pay_component_value($component, $values) {
-  $cid = $component['cid'];
-  if (isset($values[$cid])) {
-    return $values[$cid];
-   }
+function _webform_pay_component_value($node, $component, $values, $nested_tree = FALSE) {
+  $component_value = FALSE;
+  if ($nested_tree) {
+    $parent_keys = webform_component_parent_keys($node, $component);
+    $component_value = $values;
+    foreach ($parent_keys as $form_key) {
+      if (isset($component_value[$form_key])) {
+        $component_value = $component_value[$form_key];
+      }
+      else {
+        $component_value = FALSE;
+        break;
+      }
+    }
+  }
+  else {
+    $cid = $component['cid'];
+    $component_value = isset($values[$cid]) ? $values[$cid] : FALSE;
+  }
 
-  return FALSE;
+  return $component_value;
 }
