diff --git a/addressfield.module b/addressfield.module
old mode 100644
new mode 100755
index 1f2ff87..3da9285
--- a/addressfield.module
+++ b/addressfield.module
@@ -782,3 +782,28 @@ function _addressfield_country_options_list($field = NULL, $instance = NULL) {
 
   return $countries;
 }
+
+/**
+ * Queries the address field column for a distinct list of results to build option / select lists
+ *
+ * @param $field
+ * @param string $tableFieldName
+ * @param string $table
+ * @return array
+ */
+function _addressfield_column_options_list($field, $tableFieldName, $table) {
+
+  $adminAreas = array();
+
+  $query = db_select($table, 'a');
+  $query->addField('a', $tableFieldName);
+  $query->orderBy($tableFieldName);
+  $query->distinct(TRUE);
+
+  $results = $query->execute();
+  foreach($results AS $result) {
+    $adminAreas[$result->{$tableFieldName}] = $result->{$tableFieldName};
+  }
+
+  return $adminAreas;
+}
diff --git a/views/addressfield.views.inc b/views/addressfield.views.inc
index 77a5b45..bb0fe97 100644
--- a/views/addressfield.views.inc
+++ b/views/addressfield.views.inc
@@ -9,16 +9,37 @@ function addressfield_field_views_data($field) {
   // Add a handler for countries.
   foreach ($field['storage']['details']['sql'] as $type => $tables) {
     foreach ($tables as $table_name => $columns) {
-      if (!isset($columns['country'])) {
-        continue;
+      if (isset($columns['country'])) {
+        $column_real_name = $columns['country'];
+        if (isset($data[$table_name][$column_real_name]['filter'])) {
+          $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_country';
+        }
       }
 
-      $column_real_name = $columns['country'];
-      if (!isset($data[$table_name][$column_real_name]['filter'])) {
-        continue;
+      if (isset($columns['administrative_area'])) {
+        $column_real_name = $columns['administrative_area'];
+        if (isset($data[$table_name][$column_real_name]['filter'])) {
+          $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_column';
+        }
+      }
+      if (isset($columns['sub_administrative_area'])) {
+        $column_real_name = $columns['sub_administrative_area'];
+        if (isset($data[$table_name][$column_real_name]['filter'])) {
+          $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_column';
+        }
+      }
+      if (isset($columns['locality'])) {
+        $column_real_name = $columns['locality'];
+        if (isset($data[$table_name][$column_real_name]['filter'])) {
+          $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_column';
+        }
+      }
+      if (isset($columns['dependent_locality'])) {
+        $column_real_name = $columns['dependent_locality'];
+        if (isset($data[$table_name][$column_real_name]['filter'])) {
+          $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_column';
+        }
       }
-
-      $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_country';
     }
   }
 
