diff --git a/addressfield.module b/addressfield.module
index 177d92b..148efe4 100644
--- a/addressfield.module
+++ b/addressfield.module
@@ -311,6 +311,22 @@ function addressfield_field_info() {
   return $fields;
 }
 
+function addressfield_field_settings_form($field, $instance, $has_data) {
+  $form = array();
+  $options = array();
+  foreach($field['columns'] as $name => $info) {
+    $options[$name] = $info['description'];
+  }
+  $form['non_empty_fields'] = array(
+    '#title' => t('Required field for non-empty address'),
+    '#description' => t('Select the fields that trigger an non-empty value. At least one of these fields should be filled for an address to be considered non-empty.'),
+    '#options' => $options,
+    '#type' => 'checkboxes',
+    '#default_value' => !empty($field['settings']['non_empty_fields']) ? $field['settings']['non_empty_fields'] : array('country'),
+  );
+  return $form;
+}
+
 /**
  * Returns an array of default values for the addressfield form elements.
  */
@@ -348,9 +364,9 @@ function addressfield_default_values($available_countries = NULL) {
  * Implements hook_field_is_empty().
  */
 function addressfield_field_is_empty($item, $field) {
-  // Every address field must have at least a country value or it is considered
-  // empty, even if it has name information.
-  return empty($item['country']);
+  $non_empty_fields = !empty($field['settings']['non_empty_fields']) ? array_filter($field['settings']['non_empty_fields']) : array('country' => 'country');
+  $filtered_item = array_filter(array_intersect_key($item, $non_empty_fields));
+  return empty($filtered_item);
 }
 
 /**
