diff --git a/commerce_shipping.js b/commerce_shipping.js
new file mode 100644
index 0000000..ef05493
--- /dev/null
+++ b/commerce_shipping.js
@@ -0,0 +1,20 @@
+;(function($) {
+  /**
+   * When the "use billing information" checkbox is clicked, disable all fields
+   * in that fieldset (except the checkbox itself).
+   */
+  Drupal.behaviors.commerceShipping = {
+    attach: function (context, settings) {
+      $('#use-billing', context).click(function() {
+        if (this.checked) {
+          $('.customer_profile_shipping input:not(#use-billing)', context).attr('disabled', 'disabled');
+          $('.customer_profile_shipping select', context).attr('disabled', 'disabled');
+        }
+        else {
+           ('.customer_profile_shipping input:not(#use-billing)', context).attr('disabled', false);
+           $('.customer_profile_shipping select', context).attr('disabled', false);
+        }
+      });
+    }
+  }
+})(jQuery);
diff --git a/commerce_shipping.module b/commerce_shipping.module
index c1dabe3..52c1c72 100644
--- a/commerce_shipping.module
+++ b/commerce_shipping.module
@@ -105,6 +105,39 @@ function commerce_shipping_commerce_customer_profile_type_info() {
 }
 
 /**
+ * Implements hook_form_alter().
+ *
+ * Adds functionality to the checkout form that allows billing information to
+ * be reused for shipping.
+ */
+function commerce_shipping_form_alter(&$form, &$form_state, $form_id) {
+  if ($form_id == 'commerce_checkout_form_checkout') {
+    $form['#attached']['js'][] = drupal_get_path('module', 'commerce_shipping') . '/commerce_shipping.js';
+    $form['customer_profile_shipping']['use_billing'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use billing information'),
+      '#id' => 'use-billing',
+      '#weight' => -100,
+    );
+
+    $form['buttons']['continue']['#submit'] = array_merge(array('commerce_shipping_checkout_submit'), $form['buttons']['continue']['#submit']);
+    $form['#submit'] = array_merge(array('commerce_shipping_checkout_submit'), $form['#submit']);
+  }
+}
+
+/**
+ * Submit callback.
+ *
+ * Inserts the billing information into the shipping field, if the user
+ * specified that the billing information should be used.
+ */
+function commerce_shipping_checkout_submit($form, &$form_state) {
+  if ($form_state['values']['customer_profile_shipping']['use_billing']) {
+    $form_state['values']['customer_profile_shipping']['commerce_customer_address'] = $form_state['values']['customer_profile_billing']['commerce_customer_address'];
+  }
+}
+
+/**
  * Ensures the shipping line item type contains a field for shippong method.
  *
  * This function is called by the line item module when it is enabled or this
