diff --git a/payment/uc_google_checkout/uc_google_checkout.module b/payment/uc_google_checkout/uc_google_checkout.module
index 449df39..0dc0ff8 100644
--- a/payment/uc_google_checkout/uc_google_checkout.module
+++ b/payment/uc_google_checkout/uc_google_checkout.module
@@ -190,6 +190,13 @@ function uc_google_checkout_nodeapi(&$node, $op) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_google_checkout_uc_product_node_fields() {
+  return array('gc_salable' => t('Google Checkout policy'));
+}
+
 /******************************************************************************
  * Hook Functions (Ubercart)                                                  *
  ******************************************************************************/
diff --git a/shipping/uc_flatrate/uc_flatrate.module b/shipping/uc_flatrate/uc_flatrate.module
index 909eb92..1476371 100644
--- a/shipping/uc_flatrate/uc_flatrate.module
+++ b/shipping/uc_flatrate/uc_flatrate.module
@@ -122,6 +122,13 @@ function uc_flatrate_nodeapi(&$node, $op) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_flatrate_uc_product_node_fields() {
+  return array('flatrate' => t('Flat rate shipping quotes'));
+}
+
 /******************************************************************************
  * Ubercart Hooks                                                             *
  ******************************************************************************/
diff --git a/shipping/uc_quote/uc_quote.module b/shipping/uc_quote/uc_quote.module
index 5e28d40..e6619ff 100644
--- a/shipping/uc_quote/uc_quote.module
+++ b/shipping/uc_quote/uc_quote.module
@@ -114,10 +114,12 @@ function uc_quote_nodeapi(&$node, $op, $arg3 = NULL, $arg4 = NULL) {
           uc_quote_set_shipping_type('product', $node->nid, $node->shipping_type);
         }
         db_query("DELETE FROM {uc_quote_product_locations} WHERE nid = %d", $node->nid);
-        if ($node->street1) {
-          db_query("INSERT INTO {uc_quote_product_locations} (nid, first_name, last_name, company, street1, street2, city, zone, postal_code, country, phone) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, '%s')",
-            $node->nid, $node->first_name, $node->last_name, $node->company, $node->street1, $node->street2, $node->city, $node->zone, $node->postal_code, $node->country, $node->phone
-          );
+        if (isset($node->shipping_address)) {
+          $address = (object) $node->shipping_address;
+          if ($address->street1) {
+            $address->nid = $node->nid;
+            drupal_write_record('uc_quote_product_locations', $address);
+          }
         }
       break;
       case 'load':
@@ -190,23 +192,24 @@ function uc_quote_form_alter(&$form, $form_state, $form_id) {
     );
 
     // Add the default pickup address fieldset.
-    $form['shipping']['default_address'] = array(
+    $form['shipping']['shipping_address'] = array(
       '#type' => 'fieldset',
       '#title' => t('Default product pickup address'),
       '#description' => t('When delivering products to customers, the original location of the product must be known in order to accurately quote the shipping cost and set up a delivery. If this pickup address is left blank, this product will default to the <a href="!url">store pickup address</a>.', array('!url' => url('admin/store/settings/quotes'))),
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
       '#weight' => -6,
+      '#tree' => TRUE,
     );
-    $form['shipping']['default_address']['first_name'] = uc_textfield(uc_get_field_name('first_name'), $address->first_name, FALSE);
-    $form['shipping']['default_address']['last_name'] = uc_textfield(uc_get_field_name('last_name'), $address->last_name, FALSE);
-    $form['shipping']['default_address']['company'] = uc_textfield(uc_get_field_name('company'), $address->company, FALSE);
-    $form['shipping']['default_address']['street1'] = uc_textfield(uc_get_field_name('street1'), $address->street1, FALSE, NULL, 64);
-    $form['shipping']['default_address']['street2'] = uc_textfield(uc_get_field_name('street2'), $address->street2, FALSE, NULL, 64);
-    $form['shipping']['default_address']['city'] = uc_textfield(uc_get_field_name('city'), $address->city, FALSE);
-    $form['shipping']['default_address']['zone'] = uc_zone_select(uc_get_field_name('zone'), $address->zone, NULL, $country);
-    $form['shipping']['default_address']['postal_code'] = uc_textfield(uc_get_field_name('postal_code'), $address->postal_code, FALSE, NULL, 10, 10);
-    $form['shipping']['default_address']['country'] = uc_country_select(uc_get_field_name('country'), $address->country);
+    $form['shipping']['shipping_address']['first_name'] = uc_textfield(uc_get_field_name('first_name'), $address->first_name, FALSE);
+    $form['shipping']['shipping_address']['last_name'] = uc_textfield(uc_get_field_name('last_name'), $address->last_name, FALSE);
+    $form['shipping']['shipping_address']['company'] = uc_textfield(uc_get_field_name('company'), $address->company, FALSE);
+    $form['shipping']['shipping_address']['street1'] = uc_textfield(uc_get_field_name('street1'), $address->street1, FALSE, NULL, 64);
+    $form['shipping']['shipping_address']['street2'] = uc_textfield(uc_get_field_name('street2'), $address->street2, FALSE, NULL, 64);
+    $form['shipping']['shipping_address']['city'] = uc_textfield(uc_get_field_name('city'), $address->city, FALSE);
+    $form['shipping']['shipping_address']['zone'] = uc_zone_select(uc_get_field_name('zone'), $address->zone, NULL, $country);
+    $form['shipping']['shipping_address']['postal_code'] = uc_textfield(uc_get_field_name('postal_code'), $address->postal_code, FALSE, NULL, 10, 10);
+    $form['shipping']['shipping_address']['country'] = uc_country_select(uc_get_field_name('country'), $address->country);
   }
   // Add quote selection form handlers to the checkout form.
   if ($form_id == 'uc_cart_checkout_form' && isset($form['panes']['quotes'])) {
@@ -215,6 +218,13 @@ function uc_quote_form_alter(&$form, $form_state, $form_id) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_quote_uc_product_node_fields() {
+  return array('shipping_address' => t('Default product pickup address'));
+}
+
 /******************************************************************************
  * CCK Hooks                                                                  *
  ******************************************************************************/
diff --git a/shipping/uc_ups/uc_ups.module b/shipping/uc_ups/uc_ups.module
index 71a7782..38502e2 100644
--- a/shipping/uc_ups/uc_ups.module
+++ b/shipping/uc_ups/uc_ups.module
@@ -149,6 +149,13 @@ function uc_ups_nodeapi(&$node, $op) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_ups_uc_product_node_fields() {
+  return array('ups' => t('UPS package type'));
+}
+
 /******************************************************************************
  * Conditional Actions Hooks                                                  *
  ******************************************************************************/
diff --git a/shipping/uc_usps/uc_usps.module b/shipping/uc_usps/uc_usps.module
index 23e6176..19227b5 100644
--- a/shipping/uc_usps/uc_usps.module
+++ b/shipping/uc_usps/uc_usps.module
@@ -100,6 +100,13 @@ function uc_usps_nodeapi(&$node, $op) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_usps_uc_product_node_fields() {
+  return array('usps' => t('USPS package type'));
+}
+
 /******************************************************************************
  * Conditional Actions Hooks                                                  *
  ******************************************************************************/
diff --git a/shipping/uc_weightquote/uc_weightquote.module b/shipping/uc_weightquote/uc_weightquote.module
index e633e70..49fed71 100644
--- a/shipping/uc_weightquote/uc_weightquote.module
+++ b/shipping/uc_weightquote/uc_weightquote.module
@@ -124,6 +124,13 @@ function uc_weightquote_nodeapi(&$node, $op) {
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ */
+function uc_weightquote_uc_product_node_fields() {
+  return array('weightquote' => t('Shipping quotes by weight'));
+}
+
 /******************************************************************************
  * Ubercart Hooks                                                             *
  ******************************************************************************/
diff --git a/uc_product/uc_product.module b/uc_product/uc_product.module
index 576485c..62bd41a 100644
--- a/uc_product/uc_product.module
+++ b/uc_product/uc_product.module
@@ -980,24 +980,33 @@ function uc_product_form_node_type_form_alter(&$form, &$form_state) {
 function uc_product_i18nsync_fields_alter($fields, $type) {
   if (uc_product_is_product($type)) {
     $fields['uc_products']['#title'] = t('Product fields');
-    $fields['uc_products']['#options'] = array (
-      'model' => t('SKU'),
-      'list_price' => t('List price'),
-      'cost' => t('Cost'),
-      'sell_price' => t('Sell price'),
-      'weight' => t('Weight'),
-      'weight_units' => t('Weight units'),
-      'dim_length' => t('Length'),
-      'dim_width' => t('Width'),
-      'dim_height' => t('Height'),
-      'length_units' => t('Dimension units'),
-      'pkg_qty' => t('Package quantity'),
-      'default_qty' => t('Default quantity to add to cart'),
-      'ordering' => t('List position'),
-    );
+    $fields['uc_products']['#options'] = module_invoke_all('uc_product_node_fields');
   }
 }
 
+/**
+ * Implementation of hook_uc_product_node_fields().
+ *
+ * Returns an array of fields describing fields Ubercart adds to nodes.
+ */
+function uc_product_uc_product_node_fields() {
+  return array(
+    'model' => t('SKU'),
+    'list_price' => t('List price'),
+    'cost' => t('Cost'),
+    'sell_price' => t('Sell price'),
+    'weight' => t('Weight'),
+    'weight_units' => t('Weight units'),
+    'dim_length' => t('Length'),
+    'dim_width' => t('Width'),
+    'dim_height' => t('Height'),
+    'length_units' => t('Dimension units'),
+    'pkg_qty' => t('Package quantity'),
+    'default_qty' => t('Default quantity to add to cart'),
+    'ordering' => t('List position'),
+  );
+}
+
 /******************************************************************************
  * CCK Hooks                                                                  *
  ******************************************************************************/
