diff --git a/commerce_usps.info b/commerce_usps.info
index acfe108..7af6043 100644
--- a/commerce_usps.info
+++ b/commerce_usps.info
@@ -4,5 +4,6 @@ package = Commerce (shipping)
 dependencies[] = commerce
 dependencies[] = commerce_shipping
 dependencies[] = commerce_physical
+dependencies[] = commerce_packing
 
-core = 7.x
+core = 7.x
\ No newline at end of file
diff --git a/includes/commerce_usps.xml.inc b/includes/commerce_usps.xml.inc
index 53d9c99..81af1b5 100644
--- a/includes/commerce_usps.xml.inc
+++ b/includes/commerce_usps.xml.inc
@@ -20,7 +20,8 @@ function commerce_usps_rate_v4_request($order, $shipping_address) {
   $rates = array();
   $usps_services = commerce_usps_service_list('domestic');
 
-  $weight = commerce_usps_get_order_weight($order);
+  //$weight = commerce_usps_get_order_weight($order);
+  $containers = commerce_packing_get_packages($order);
 
   $request = new SimpleXMLElement('<RateV4Request/>');
   $request->addAttribute('USERID', variable_get('commerce_usps_user', ''));
@@ -31,17 +32,19 @@ function commerce_usps_rate_v4_request($order, $shipping_address) {
   $i = 1;
 
   foreach (variable_get('commerce_usps_services', array()) as $machine_name => $service) {
-    $package = $request->addChild('Package');
-    $package->addAttribute('ID', $i);
-    $package->addChild('Service', $usps_services[$machine_name]['request_name']);
-    $package->addChild('FirstClassMailType', 'PARCEL');
-    $package->addChild('ZipOrigination', substr(variable_get('commerce_usps_postal_code', ''), 0, 5));
-    $package->addChild('ZipDestination', substr($shipping_address['postal_code'], 0, 5));
-    $package->addChild('Pounds', $weight['pounds']);
-    $package->addChild('Ounces', $weight['ounces']);
-    $package->addChild('Container', 'VARIABLE');
-    $package->addChild('Size', 'REGULAR');
-    $package->addChild('Machinable', 'TRUE');
+    foreach($containers as $key => $container) {
+      $package = $request->addChild('Package');
+      $package->addAttribute('ID', $i .'-'. $key);
+      $package->addChild('Service', $usps_services[$machine_name]['request_name']);
+      $package->addChild('FirstClassMailType', 'PARCEL');
+      $package->addChild('ZipOrigination', substr(variable_get('commerce_usps_postal_code', ''), 0, 5));
+      $package->addChild('ZipDestination', substr($shipping_address['postal_code'], 0, 5));
+      $package->addChild('Pounds', $containers[$key]['weight']['pounds']);
+      $package->addChild('Ounces', $containers[$key]['weight']['ounces']);
+      $package->addChild('Container', 'VARIABLE');
+      $package->addChild('Size', 'REGULAR');
+      $package->addChild('Machinable', 'TRUE');
+    }
     $i++;
   }
 
@@ -62,12 +65,18 @@ function commerce_usps_rate_v4_request($order, $shipping_address) {
 
         // Make sure that the package service is registered.
         if (!empty($usps_service['machine_name'])) {
-          $rates[$usps_service['machine_name']] = array(
-            'amount' => commerce_currency_decimal_to_amount((string) $package->Postage->Rate, commerce_default_currency()),
-            'currency_code' => commerce_default_currency(),
-            'data' => array(),
-          );
+          // if 'amount' key exists, add amount
+          if (isset($rates[$usps_service['machine_name']]) && array_key_exists('amount', $rates[$usps_service['machine_name']])) {
+            $rates[$usps_service['machine_name']]['amount'] = $rates[$usps_service['machine_name']]['amount'] + commerce_currency_decimal_to_amount((string) $package->Postage->Rate, commerce_default_currency());
+          } else {
+            $rates[$usps_service['machine_name']] = array(
+              'amount' => commerce_currency_decimal_to_amount((string) $package->Postage->Rate, commerce_default_currency()),
+              'currency_code' => commerce_default_currency(),
+              'data' => array(),
+            );
+          }
         }
+
       }
     }
   }
@@ -88,48 +97,59 @@ function commerce_usps_rate_v4_request($order, $shipping_address) {
 function commerce_usps_intl_rate_v2_request($order, $shipping_address) {
   $rates = array();
 
-  $weight = commerce_usps_get_order_weight($order);
+  //$weight = commerce_usps_get_order_weight($order);
+  $containers = commerce_packing_get_packages($order);
 
   $request = new SimpleXMLElement('<IntlRateV2Request/>');
   $request->addAttribute('USERID', variable_get('commerce_usps_user', ''));
   $shipment_value = commerce_usps_get_shipment_value($order);
 
   // @TODO: Support multiple packages based on physical attributes.
-  $package = $request->addChild('Package');
-  $package->addAttribute('ID', 1);
-  $package->addChild('Pounds', $weight['pounds']);
-  $package->addChild('Ounces', $weight['ounces']);
-  $package->addChild('Machinable', 'True');
-  $package->addChild('MailType', 'Package');
-  $package->addChild('ValueOfContents', commerce_currency_amount_to_decimal($shipment_value, commerce_default_currency()));
-  $package->addChild('Country', commerce_usps_country_get_predefined_list($shipping_address['country']));
-  $package->addChild('Container', 'RECTANGULAR');
-  $package->addChild('Size', 'REGULAR');
-  $package->addChild('Width', '');
-  $package->addChild('Length', '');
-  $package->addChild('Height', '');
-  $package->addChild('Girth', '');
-  $package->addChild('CommercialFlag', 'N');
+  foreach($containers as $key => $container) {
+    $package = $request->addChild('Package');
+    $package->addAttribute('ID', $key);
+    $package->addChild('Pounds', $containers[$key]['weight']['pounds']);
+    $package->addChild('Ounces', $containers[$key]['weight']['ounces']);
+    $package->addChild('Machinable', 'True');
+    $package->addChild('MailType', 'Package');
+    //$package->addChild('ValueOfContents', commerce_currency_amount_to_decimal($shipment_value, commerce_default_currency()));
+    $package->addChild('ValueOfContents', commerce_currency_amount_to_decimal($containers[$key]['total_value'], commerce_default_currency()));
+    $package->addChild('Country', commerce_usps_country_get_predefined_list($shipping_address['country']));
+    $package->addChild('Container', 'RECTANGULAR');
+    $package->addChild('Size', 'REGULAR');
+    $package->addChild('Width', '');
+    $package->addChild('Length', '');
+    $package->addChild('Height', '');
+    $package->addChild('Girth', '');
+    $package->addChild('CommercialFlag', 'N');
+  }
 
   drupal_alter('commerce_usps_intl_rate_v2_request', $request);
 
   // Submit the rate request to USPS.
   $response = commerce_usps_api_request('API=IntlRateV2&XML=' . $request->asXML());
 
-  if (!empty($response->Package->Service)) {
-    foreach ($response->Package->Service as $service) {
-      $id = (string) $service->attributes()->{'ID'};
+  if (!empty($response->Package)) {
+    foreach($response->Package as $package) {
+      foreach ($package->Service as $service) {
+        $id = (string) $service->attributes()->{'ID'};
 
-      // Look up the shipping service by it's id.
-      $usps_service = commerce_usps_service_by_id($id, 'international');
+        // Look up the shipping service by it's id.
+        $usps_service = commerce_usps_service_by_id($id, 'international');
 
-      // Make sure that the package service is registered.
-      if (!empty($usps_service['machine_name'])) {
-        $rates[$usps_service['machine_name']] = array(
-          'amount' => commerce_currency_decimal_to_amount((string) $service->Postage, commerce_default_currency()),
-          'currency_code' => commerce_default_currency(),
-          'data' => array(),
-        );
+        // Make sure that the package service is registered.
+        if (!empty($usps_service['machine_name'])) {
+          // if 'amount' key exists, add amount
+          if (isset($rates[$usps_service['machine_name']]) && array_key_exists('amount', $rates[$usps_service['machine_name']])) {
+            $rates[$usps_service['machine_name']]['amount'] = $rates[$usps_service['machine_name']]['amount'] + commerce_currency_decimal_to_amount((string) $service->Postage, commerce_default_currency());
+          } else {
+            $rates[$usps_service['machine_name']] = array(
+              'amount' => commerce_currency_decimal_to_amount((string) $service->Postage, commerce_default_currency()),
+              'currency_code' => commerce_default_currency(),
+              'data' => array(),
+            );
+          }
+        }
       }
     }
   }
