diff -u addressfield/addressfield.tokens.inc addressfield-new/addressfield.tokens.inc
--- addressfield/addressfield.tokens.inc	2015-10-07 15:31:02.000000000 -0400
+++ addressfield-new/addressfield.tokens.inc	2016-05-03 11:38:26.715965051 -0400
@@ -77,7 +77,6 @@
     'name' => t('Address formatted for MailChimp'),
     'description' => t('The full address formatted for import into MailChimp.'),
   );
-
   return array(
     'types' => array('address-field' => $type),
     'tokens' => array('address-field' => $info),
@@ -90,7 +89,7 @@
 function addressfield_token_info_alter(&$data) {
   // Loop over every address field on the site.
   foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) {
-    foreach ($data['tokens'] as $group => $token){
+    foreach ($data['tokens'] as $group => $token) {
       if (isset($data['tokens'][$group][$field_name]) && is_array($data['tokens'][$group][$field_name])) {
         // Set the token type for the field to use the addressfield child tokens.
         $data['tokens'][$group][$field_name]['type'] = 'address-field';
@@ -103,19 +102,18 @@
  * Implements hook_tokens().
  */
 function addressfield_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  if (isset($options['language'])) {
-    $language_code = $options['language']->language;
-  }
-  else {
-    $language_code = LANGUAGE_NONE;
+  if(isset($data['entity']->language)){
+    $language_code = $data['entity']->language;
   }
+  else  {
+      $language_code = LANGUAGE_NONE;
 
+  }
   $sanitize = !empty($options['sanitize']);
-
   $replacements = array();
-
   // If we're generating tokens for an address field, extract the address data
   // from the field value array and generate the necessary replacements.
+
   if ($type == 'address-field' && !empty($data['address-field'][$language_code]) && is_array($data['address-field'][$language_code])) {
     $address = reset($data['address-field'][$language_code]);
 
@@ -191,7 +189,14 @@
         case 'format-mailchimp':
           $components = array();
 
-          foreach (array('thoroughfare', 'premise', 'locality', 'administrative_area', 'postal_code', 'country') as $component) {
+          foreach (array(
+                     'thoroughfare',
+                     'premise',
+                     'locality',
+                     'administrative_area',
+                     'postal_code',
+                     'country'
+                   ) as $component) {
             if (!empty($address[$component])) {
               $components[] = $address[$component];
             }
@@ -202,6 +207,89 @@
           break;
       }
     }
+    $addresses = $data['address-field'][$language_code];
+    if (count($addresses) != 1) {
+      foreach ($addresses as $key => $address) {
+
+        $values[$key] = $address;
+        foreach ($tokens as $name => $original) {
+          switch ($name) {
+            case $key . ':country':
+              //dsm($tokens);
+              //
+              if(isset($tokens[$key])){
+                $replacements[$original] = $sanitize ? check_plain(join(" ", $values[$key])) : join(" ", $values[$key]);
+              }
+              else {
+                $countries = _addressfield_country_options_list();
+                $replacements[$original] = $sanitize ? check_plain($countries[$values[$key]['country']]) : $countries[$values[$key]['country']];
+              }
+              break;
+
+            case $key . ':country-code':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['country']) : $values[$key]['country'];
+              break;
+
+            case $key . ':administrative-area':
+              // If we received format handlers in the data array, generate the form
+              // for the address field to see if the administrative area should be
+              // expanded from an abbreviation to a related name.
+              $administrative_area = $values[$key]['administrative_area'];
+
+              if (!empty($data['format_handlers'])) {
+                $form = addressfield_generate($address, $data['format_handlers'], array('mode' => 'form'));
+
+                if (!empty($form['locality_block']['administrative_area']['#options'][$administrative_area])) {
+                  $administrative_area = $form['locality_block']['administrative_area']['#options'][$administrative_area];
+                }
+              }
+
+              $replacements[$original] = $sanitize ? check_plain($administrative_area) : $administrative_area;
+              break;
+
+            case $key . ':administrative-area-raw':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['administrative_area']) : $values[$key]['administrative_area'];
+              break;
+
+            case $key . ':locality':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['locality']) : $values[$key]['locality'];
+              break;
+
+            case $key . ':postal-code':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['postal_code']) : $values[$key]['postal_code'];
+              break;
+
+            case $key . ':thoroughfare':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['thoroughfare']) : $values[$key]['thoroughfare'];
+              break;
+
+            case $key . ':premise':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['premise']) : $values[$key]['premise'];
+              break;
+
+            case $key . ':sub_premise':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['sub_premise']) : $address['sub_premise'];
+              break;
+
+            case $key . ':organisation':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['organisation_name']) : $address['organisation_name'];
+              break;
+
+            case $key . ':name-line':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['name_line']) : $values[$key]['name_line'];
+              break;
+
+            case $key . ':first-name':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['first_name']) : $values[$key]['first_name'];
+              break;
+
+            case $key . ':last-name':
+              $replacements[$original] = $sanitize ? check_plain($values[$key]['last_name']) : $values[$key]['last_name'];
+              break;
+          }
+        }
+      }
+    }
   }
 
   // The Token module extends direct token generation by using a generic entity
@@ -223,8 +311,13 @@
           $format_handlers = $instance['widget']['settings']['format_handlers'];
         }
 
-        // Generate the necessary address field tokens for the entity.
-        $replacements += token_generate('address-field', $addressfield_tokens, array('address-field' => $data['entity']->$field_name, 'format_handlers' => $format_handlers), $options);
+        if (property_exists($data['entity'], $field_name)) {
+          // Generate the necessary address field tokens for the entity.
+          $replacements += token_generate('address-field', $addressfield_tokens, array(
+            'address-field' => $data['entity']->$field_name,
+            'format_handlers' => $format_handlers
+          ), $options);
+        }
       }
     }
   }
Common subdirectories: addressfield/example and addressfield-new/example
Common subdirectories: addressfield/plugins and addressfield-new/plugins
Common subdirectories: addressfield/views and addressfield-new/views
