diff --git a/addressfield.module b/addressfield.module
index 177d92b..f22b5db 100644
--- a/addressfield.module
+++ b/addressfield.module
@@ -133,6 +133,11 @@ function addressfield_generate($address, array $handlers, array $context = array
     $format['#pre_render'][] = 'addressfield_render_address';
   }
 
+  // Set default country if delta is not zero.
+  if ($context['delta'] != 0 && !isset($format['#address']['country'])) {
+    $format['#address']['country'] = variable_get('site_default_country', 0);
+  }
+
   return $format;
 }
 
@@ -647,6 +652,48 @@ function addressfield_property_info_callback(&$info, $entity_type, $field, $inst
   unset($property['query callback']);
 }
 
+
+/**
+ * Implements hook_entity_presave().
+ */
+function addressfield_entity_presave($entity, $type) {
+  // Remove empty additional locations before saving.
+  $info = entity_get_info($type);
+  if (empty($info['entity keys']['bundle'])) {
+    $bundle = $type;
+  }
+  else {
+    $bundle = $entity->{$info['entity keys']['bundle']};
+  }
+  $instances = field_info_instances($type, $bundle);
+
+  foreach ($instances as $field_name => $instance) {
+    $field = field_info_field($field_name);
+    // If this isn't an addressfield OR if the field is not a multiple field,
+    // move on to the next field.
+    if ($field['type'] != 'addressfield' || !($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $field['cardinality'] > 1)) {
+      continue;
+    }
+
+    $lang = field_language($type, $entity, $field_name);
+    if (isset($entity->{$field_name}[$lang]) && is_array($entity->{$field_name}[$lang])) {
+      foreach ($entity->{$field_name}[$lang] as $delta => $location) {
+        if (   empty($location['thoroughfare'])
+            && empty($location['premise'])
+            && empty($location['locality'])
+            && empty($location['administrative_area'])
+            && empty($location['postal_code'])
+              ) {
+          // Remove entry if delta is blank.
+          unset($entity->{$field_name}[$lang][$delta]);
+        }
+      }
+      // Normalize the array.
+      $entity->{$field_name}[$lang] = array_values($entity->{$field_name}[$lang]);
+    }
+  }
+}
+
 /**
  * Defines info for the properties of the address field data structure.
  */
