--- shipping/uc_usps/uc_usps.module.orig	2011-07-25 02:58:10.000000000 -0400
+++ shipping/uc_usps/uc_usps.module	2011-08-27 18:27:28.727908000 -0400
@@ -663,11 +663,11 @@ function _uc_usps_package_products($prod
         // shipped. We will keep track of the different addresses in an array
         // and use their keys for the array of packages.
 
-        $address = uc_quote_get_default_shipping_address($product->nid);
-        if (in_array($address, $addresses)) {
+        $productAddress = uc_quote_get_default_shipping_address($product->nid);
+        if ($productAddress->isPhysicalLocationInArray($addresses)) {
           // This is an existing address.
           foreach ($addresses as $index => $value) {
-            if ($address == $value) {
+            if ($value->isSamePhysicalLocation($productAddress)) {
               $key = $index;
               break;
             }
@@ -677,7 +677,7 @@ function _uc_usps_package_products($prod
           // This is a new address. Increment the address counter $last_key
           // instead of using [] so that it can be used in $packages and
           // $addresses.
-          $addresses[++$last_key] = $address;
+          $addresses[++$last_key] = $productAddress;
           $key = $last_key;
           $packages[$key] = array(0 => _uc_usps_new_package());
         }

--- shipping/uc_quote/uc_quote.module.orig	2011-07-25 02:58:10.000000000 -0400
+++ shipping/uc_quote/uc_quote.module	2011-08-27 18:25:04.071005000 -0400
@@ -493,12 +493,17 @@ function uc_product_get_shipping_type($p
  *   A product node id.
  *
  * @return
- *   An address object.
+ *   A UcAddress 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();
-
-  if (empty($address)) {
+  $record = 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))->fetchAssoc();
+  if(count($record)){
+    $address = new UcAddress();
+    foreach($record as $key => $val){
+      $address->$key = $val;
+    }
+  }
+  else{
     $address = variable_get('uc_quote_store_default_address', new UcAddress());
   }
 
--- uc_store/classes/address.inc.orig	2011-07-25 02:58:10.000000000 -0400
+++ uc_store/classes/address.inc	2011-08-27 18:25:54.550509000 -0400
@@ -26,4 +26,21 @@ 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;
+  }
+
+  function isPhysicalLocationInArray($array){
+    foreach($array as $key => $addressObj){
+      if($this->isSamePhysicalLocation($addressObj)){
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
 }
