diff --git a/uc_addresses.css b/uc_addresses.css
index 1af82a3..a836aa3 100644
--- a/uc_addresses.css
+++ b/uc_addresses.css
@@ -95,3 +95,20 @@
   display: inline;
 }
 /* @end */
+
+/* @group Order admin */
+form input.uc-addresses-button {
+  width : 20px;
+  height :16px;
+  border : none;
+  color : transparent;
+  font-size : 0;
+  padding: 5px;
+}
+form input.uc-addresses-select-address-button {
+  background : url("images/address_book.gif") no-repeat center center;
+}
+form input.uc-addresses-copy-button {
+  background : url("images/copy.gif") no-repeat center center;
+}
+/* @end */
diff --git a/uc_addresses.ubercart.inc b/uc_addresses.ubercart.inc
index 2a1d019..8d793c4 100644
--- a/uc_addresses.ubercart.inc
+++ b/uc_addresses.ubercart.inc
@@ -281,10 +281,12 @@ function uc_addresses_order_pane_address($type, $op, $order, &$form = NULL, &$fo
   if ($type == 'shipping') {
     $other_pane = 'billing';
     $pane = 'delivery';
+    $copy_text = t('Copy billing information');
   }
   else {
     $other_pane = 'delivery';
     $pane = 'billing';
+    $copy_text = t('Copy shipping information');
   }
 
   switch ($op) {
@@ -320,8 +322,110 @@ function uc_addresses_order_pane_address($type, $op, $order, &$form = NULL, &$fo
         $address = UcAddressesAddress::newAddress();
       }
 
-      if ($select = uc_addresses_select_addresses($order->uid, 'order_form', $pane)) {
-        $form[$pane]['select_address'] = $select + array(
+      // Hide the address book selector by default.
+      $select_address = !empty($form_state['values'][$pane]['select']['shown']);
+
+      // Order pane icons
+      $form[$pane]['buttons_prefix'] = array(
+        '#type' => 'markup',
+        '#markup' => '<div class="order-pane-icons">',
+      );
+      $form[$pane]['select_address_button'] = array(
+        '#type' => 'button',
+        '#name' => $pane . '_select_address_button',
+        '#value' => t('Select from address book.'),
+        '#ajax' => array(
+          'callback' => 'uc_addresses_order_pane_select_address_render',
+          'wrapper' => $pane . '-select-address',
+          'progress' => array(
+            'type' => 'throbber',
+          ),
+        ),
+        '#uc_addresses_info' => array(
+          'pane' => $pane,
+          'button' => 'select_address_button',
+        ),
+        '#attributes' => array(
+          'class' => array('uc-addresses-button', 'uc-addresses-select-address-button'),
+          'title' => t('Select from address book.'),
+        ),
+      );
+      $form[$pane]['copy'] = array(
+        '#type' => 'button',
+        '#name' => $pane . '_copy',
+        '#value' => $copy_text,
+        '#ajax' => array(
+          'callback' => 'uc_checkout_pane_address_render',
+          'wrapper' => $pane . '-address-pane',
+          'progress' => array(
+            'type' => 'throbber',
+          ),
+        ),
+        '#uc_addresses_info' => array(
+          'pane' => $pane,
+          'button' => 'copy',
+        ),
+        '#attributes' => array(
+          'class' => array('uc-addresses-button', 'uc-addresses-copy-button'),
+          'title' => $copy_text,
+        ),
+      );
+      $form[$pane]['buttons_suffix'] = array(
+        '#type' => 'markup',
+        '#markup' => '</div>',
+      );
+
+      if (isset($form_state['triggering_element'])) {
+        $element = &$form_state['triggering_element'];
+        if (isset($element['#uc_addresses_info']) && $element['#uc_addresses_info']['pane'] == $pane) {
+          // On one of the order pane icons is clicked.
+          switch ($element['#uc_addresses_info']['button']) {
+            case 'select_address_button':
+              // The address book selector may be shown.
+              $select_address = TRUE;
+              break;
+            case 'select_address_close_button':
+              // The address book selector may NOT be shown.
+              $select_address = FALSE;
+              break;
+            case 'copy':
+              // Copy over address information from the other address pane
+              // if the other address pane exists.
+              if (isset($form_state['input'][$other_pane])) {
+                foreach ($form_state['input'][$other_pane]['address'] as $source_fieldname => $value) {
+                  // Substract prefix from fieldname.
+                  $fieldname = substr($source_fieldname, strlen($other_pane) + 1);
+                  $target_fieldname = $pane . '_' . $fieldname;
+                  // Copy over value to current address pane if the fieldname is not 'aid'.
+                  if ($fieldname != 'aid' && isset($order->$target_fieldname)) {
+                    // Copy.
+                    $value = $form_state['input'][$other_pane]['address'][$source_fieldname];
+                    if ($address->fieldExists($fieldname)) {
+                      $address->setField($fieldname, $value);
+                    }
+                    $order->$target_fieldname = $value;
+                    $form_state['input'][$pane]['address'][$target_fieldname] = $value;
+                  }
+                }
+              }
+              break;
+          }
+        }
+
+        // Forget any previous Ajax submissions, as we send new default values.
+        unset($form_state['uc_addresses_address']);
+      }
+
+      // Address book selector.
+      $form[$pane]['select'] = array(
+        '#type' => 'container',
+        '#prefix' => '<div id="' . $pane . '-select-address">',
+        '#suffix' => '</div>',
+        '#tree' => TRUE,
+      );
+      if ($select_address && $select = uc_addresses_select_addresses($order->uid, 'order_form', $pane)) {
+        $form[$pane]['select']['#prefix'] = '<div id="' . $pane . '-select-address" class="address-select-box">';
+        $form[$pane]['select']['select_address'] = $select + array(
           '#ajax' => array(
             'callback' => 'uc_addresses_address_render',
             'wrapper' => $pane . '-address-pane',
@@ -334,28 +438,35 @@ function uc_addresses_order_pane_address($type, $op, $order, &$form = NULL, &$fo
           '#uc_addresses_address_input' => array('panes', $pane, 'address'),
           '#default_value' => $address,
         );
+        $form[$pane]['select']['shown'] = array(
+          '#type' => 'hidden',
+          '#value' => 1,
+        );
+        $form[$pane]['select']['close'] = array(
+          '#type' => 'button',
+          '#value' => t('Close'),
+          '#name' => $pane . '_select_address_close_button',
+          '#ajax' => array(
+            'callback' => 'uc_addresses_order_pane_select_address_render',
+            'wrapper' => $pane . '-select-address',
+            'progress' => array(
+              'type' => 'throbber',
+            ),
+          ),
+          '#uc_addresses_info' => array(
+            'pane' => $pane,
+            'button' => 'select_address_close_button',
+          ),
+        );
       }
-
-      if (isset($form_state['triggering_element'])) {
-        $element = &$form_state['triggering_element'];
-
-        if ($element['#name'] == $pane . '[select_address]') {
-          $address_id = $element['#value'];
-          $address_source = UcAddressesAddressBook::get($order->uid)->getAddressById($address_id);
-          if ($address_source instanceof UcAddressesAddress) {
-            $address = $address_source->copyAddress(UcAddressesAddressBook::get(0));
-            $address_data = $address->getRawFieldData();
-            foreach ($address_data as $field => $value) {
-              if (isset($order->{$pane . '_' . $field})) {
-                $form_state['input'][$pane]['address'][$pane . '_' . $field] = $value;
-                $order->{$pane . '_' . $field} = $value;
-              }
-            }
-          }
-        }
-
-        // Forget any previous Ajax submissions, as we send new default values.
-        unset($form_state['uc_addresses_address']);
+      else {
+        $form[$pane]['select']['select_address'] = array(
+          '#markup' => '',
+        );
+        $form[$pane]['select']['shown'] = array(
+          '#type' => 'hidden',
+          '#value' => 0,
+        );
       }
 
       // View the address form
@@ -405,3 +516,11 @@ function uc_addresses_order_pane_address($type, $op, $order, &$form = NULL, &$fo
       return $changes;
   }
 }
+
+/**
+ * Ajax callback to re-render the select address field.
+ */
+function uc_addresses_order_pane_select_address_render($form, &$form_state) {
+  $pane = $form_state['triggering_element']['#uc_addresses_info']['pane'];
+  return $form[$pane]['select'];
+}
