diff --git a/shipping/uc_quote/uc_quote.module b/shipping/uc_quote/uc_quote.module
index c8c4325..11eb179 100644
--- a/shipping/uc_quote/uc_quote.module
+++ b/shipping/uc_quote/uc_quote.module
@@ -563,6 +563,11 @@ function uc_checkout_pane_quotes($op, &$order, $form = NULL, &$form_state = NULL
         '#weight' => 1,
       );
 
+      // If this was an Ajax request, we reinvoke the 'prepare' op to ensure
+      // that we catch any changes in panes heavier than this one.
+      if (isset($form_state['triggering_element'])) {
+        uc_checkout_pane_quotes('prepare', $order, $form, $form_state);
+      }
       $contents['quotes'] += $order->quote_form;
 
       $form_state['uc_ajax']['uc_quote']['panes][quotes][quote_button'] = array(
diff --git a/uc_cart/uc_cart_checkout_pane.inc b/uc_cart/uc_cart_checkout_pane.inc
index f9130b1..ba35390 100644
--- a/uc_cart/uc_cart_checkout_pane.inc
+++ b/uc_cart/uc_cart_checkout_pane.inc
@@ -256,6 +256,8 @@ function uc_checkout_pane_address($pane, $op, $order, &$form_state, $description
         $contents['address']['#hidden'] = variable_get('uc_cart_default_same_address', FALSE);
       }
 
+      // If this was an Ajax request, update form input values for the
+      // copy and select address features.
       if (isset($form_state['triggering_element'])) {
         $element = &$form_state['triggering_element'];
 
@@ -265,7 +267,6 @@ function uc_checkout_pane_address($pane, $op, $order, &$form_state, $description
             if (substr($field, 0, strlen($source)) == $source) {
               $field = str_replace($source, $pane, $field);
               $form_state['input']['panes'][$pane][$field] = $value;
-              $order->$field = $value;
             }
           }
         }
@@ -274,7 +275,6 @@ function uc_checkout_pane_address($pane, $op, $order, &$form_state, $description
           $address = $addresses[$element['#value']];
           foreach ($address as $field => $value) {
             $form_state['input']['panes'][$pane][$pane . '_' . $field] = $value;
-            $order->{$pane . '_' . $field} = $value;
           }
         }
 
@@ -295,6 +295,13 @@ function uc_checkout_pane_address($pane, $op, $order, &$form_state, $description
           $order->$field = $value;
         }
       }
+      if (!empty($panes[$pane]['select_address'])) {
+        $addresses = uc_select_addresses($user->uid, $pane);
+        $address = $addresses[$panes[$pane]['select_address']];
+        foreach ($address as $field => $value) {
+          $order->{$pane . '_' . $field} = $value;
+        }
+      }
       return TRUE;
 
     case 'review':
