diff --git a/shipping/uc_quote/uc_quote.module b/shipping/uc_quote/uc_quote.module
index 85e70a2..6ef1d6d 100644
--- a/shipping/uc_quote/uc_quote.module
+++ b/shipping/uc_quote/uc_quote.module
@@ -115,6 +115,7 @@ function uc_quote_node_update($node) {
           'zone' => $node->zone,
           'postal_code' => $node->postal_code,
           'country' => $node->country,
+          'phone' => $node->phone,
         ))
         ->execute();
     }
@@ -505,7 +506,7 @@ function uc_product_get_shipping_type($product) {
  *   An address object.
  */
 function uc_quote_get_default_shipping_address($nid) {
-  $address = db_query("SELECT first_name, last_name, company, street1, street2, city, zone, postal_code, country, phone FROM {uc_quote_product_locations} WHERE nid = :nid", array(':nid' => $nid), array('fetch' => 'UcAddress'))->fetchObject();
+  $address = db_query("SELECT first_name, last_name, company, street1, street2, city, zone, postal_code, country, phone FROM {uc_quote_product_locations} WHERE nid = :nid", array(':nid' => $nid))->fetchObject('UcAddress');
 
   if (empty($address)) {
     $address = variable_get('uc_quote_store_default_address', new UcAddress());
diff --git a/shipping/uc_ups/uc_ups.module b/shipping/uc_ups/uc_ups.module
index 7c6031b..dacff8d 100644
--- a/shipping/uc_ups/uc_ups.module
+++ b/shipping/uc_ups/uc_ups.module
@@ -566,17 +566,17 @@ function uc_ups_quote($products, $details, $method) {
         // shipped. We will keep track of the different addresses in an array
         // and use their keys for the array of packages.
 
+        $key = NULL;
         $address = uc_quote_get_default_shipping_address($product->nid);
-        if (in_array($address, $addresses)) {
-          // This is an existing address.
-          foreach ($addresses as $index => $value) {
-            if ($address == $value) {
-              $key = $index;
-              break;
-            }
+        foreach ($addresses as $index => $value) {
+          if ($address->isSamePhysicalLocation($value)) {
+            // This is an existing address.
+            $key = $index;
+            break;
           }
         }
-        else {
+
+        if (!isset($key)) {
           // This is a new address. Increment the address counter $last_key
           // instead of using [] so that it can be used in $packages and
           // $addresses.
diff --git a/shipping/uc_usps/uc_usps.module b/shipping/uc_usps/uc_usps.module
index b20fada..c55a7fd 100644
--- a/shipping/uc_usps/uc_usps.module
+++ b/shipping/uc_usps/uc_usps.module
@@ -664,17 +664,17 @@ function _uc_usps_package_products($products, &$addresses) {
         // shipped. We will keep track of the different addresses in an array
         // and use their keys for the array of packages.
 
+        $key = NULL;
         $address = uc_quote_get_default_shipping_address($product->nid);
-        if (in_array($address, $addresses)) {
-          // This is an existing address.
-          foreach ($addresses as $index => $value) {
-            if ($address == $value) {
-              $key = $index;
-              break;
-            }
+        foreach ($addresses as $index => $value) {
+          if ($address->isSamePhysicalLocation($value)) {
+            // This is an existing address.
+            $key = $index;
+            break;
           }
         }
-        else {
+
+        if (!isset($key)) {
           // This is a new address. Increment the address counter $last_key
           // instead of using [] so that it can be used in $packages and
           // $addresses.
diff --git a/uc_store/classes/address.inc b/uc_store/classes/address.inc
index fa89a4d..1834c34 100644
--- a/uc_store/classes/address.inc
+++ b/uc_store/classes/address.inc
@@ -26,4 +26,14 @@ class UcAddress {
     $this->country = variable_get('uc_store_country', 840);
   }
 
+  function isSamePhysicalLocation($obj){
+    $physicalAttributes = array('street1', 'street2', 'city', 'zone', 'country', 'postal_code');
+    foreach ($physicalAttributes as $attr) {
+      if ($this->$attr != $obj->$attr) {
+        return FALSE;
+      }
+    }
+    return TRUE;
+  }
+
 }
