diff --git a/uc_addresses.api.php b/uc_addresses.api.php
index 17b3998..9ea3de8 100644
--- a/uc_addresses.api.php
+++ b/uc_addresses.api.php
@@ -49,6 +49,7 @@ function hook_uc_addresses_field_handlers() {
  * @return array
  *   An associative array containing:
  *   - title: the title of the field, safe for output.
+ *   - type: (optional) The data type of the property.
  *   - handler: handler class, registered through hook_uc_addresses_field_handlers().
  *   - display_settings: (optional) An array of contexts to show or hide the
  *     field on:
@@ -80,6 +81,7 @@ function hook_uc_addresses_fields() {
   return array(
     'myfield' => array(
       'title' => t('My field'),
+      'type' => 'text',
       'handler' => 'MyCustomFieldHandler',
       'display_settings' => array(
         'default' => TRUE, // Display it by default
diff --git a/uc_addresses.module b/uc_addresses.module
index f087046..8b2e248 100644
--- a/uc_addresses.module
+++ b/uc_addresses.module
@@ -1013,29 +1013,19 @@ function uc_addresses_get_address_fields() {
     foreach ($fields as $fieldname => $fielddata) {
       // Add name for the field (never set manually).
       $fields[$fieldname]['name'] = $fieldname;
-      // Add title if not set.
-      if (!isset($fielddata['title'])) {
-        $fields[$fieldname]['title'] = check_plain($fieldname);
-      }
-      // Add description if not set.
-      if (!isset($fielddata['description'])) {
-        $fields[$fieldname]['description'] = '';
-      }
-      // Add display settings array
-      if (!isset($fielddata['display_settings'])) {
-        $fields[$fieldname]['display_settings'] = array();
-      }
-      if (!isset($fielddata['display_settings']['default'])) {
-        $fields[$fieldname]['display_settings']['default'] = TRUE;
-      }
-      // Add compare setting
-      if (!isset($fielddata['compare'])) {
-        $fields[$fieldname]['compare'] = TRUE;
-      }
-      // Add hidden setting (only applies for address field settings page)
-      if (!isset($fielddata['hidden'])) {
-        $fields[$fieldname]['hidden'] = FALSE;
-      }
+      // Add default values for properties that are not set.
+      $fields[$fieldname] += array(
+        'type' => 'text',
+        'title' => check_plain($fieldname),
+        'description' => '',
+        'display_settings' => array(),
+        'compare' => TRUE,
+        // The hidden setting only applies for the address field settings page.
+        'hidden' => FALSE,
+      );
+      $fields[$fieldname]['display_settings'] += array(
+        'default' => TRUE,
+      );
     }
   }
   return $fields;
diff --git a/uc_addresses.uc_addresses_fields.inc b/uc_addresses.uc_addresses_fields.inc
index 4017f38..72c2671 100644
--- a/uc_addresses.uc_addresses_fields.inc
+++ b/uc_addresses.uc_addresses_fields.inc
@@ -179,11 +179,13 @@ function uc_addresses_uc_addresses_fields() {
     'description' => t('The addressee\'s country of residence'),
     'handler' => 'UcAddressesUcCountryFieldHandler',
     'display_settings' => $ubercart_display_settings,
+    'options list' => 'uc_country_option_list',
   );
   $data['zone'] = array(
     'description' => t('The addressee\'s zone of residence'),
     'handler' => 'UcAddressesUcZoneFieldHandler',
     'display_settings' => $ubercart_display_settings,
+    'options list' => 'uc_zone_option_list',
   );
   $data['postal_code'] = array(
     'description' => t('The addressee\'s postal code'),
@@ -207,6 +209,7 @@ function uc_addresses_uc_addresses_fields() {
   );
   $data['default_shipping'] = array(
     'title' => t('Default shipping address'),
+    'type' => 'boolean',
     'description' => t('If the address is the default shipping address'),
     'handler' => 'UcAddressesDefaultAddressFieldHandler',
     'display_settings' => array(
@@ -223,6 +226,7 @@ function uc_addresses_uc_addresses_fields() {
   );
   $data['default_billing'] = array(
     'title' => t('Default billing address'),
+    'type' => 'boolean',
     'description' => t('If the address is the default billing address'),
     'handler' => 'UcAddressesDefaultAddressFieldHandler',
     'display_settings' => array(
@@ -250,6 +254,7 @@ function uc_addresses_uc_addresses_fields() {
   );
   $data['uid'] = array(
     'title' => t('User ID'),
+    'type' => 'user',
     'description' => t('The ID of the user who owns this address'),
     'handler' => 'UcAddressesHiddenFieldHandler',
     'display_settings' => array(
@@ -260,6 +265,7 @@ function uc_addresses_uc_addresses_fields() {
   );
   $data['created'] = array(
     'title' => t('Created'),
+    'type' => 'date',
     'description' => t('The date this address was created'),
     'handler' => 'UcAddressesDateFieldHandler',
     'display_settings' => array(
@@ -270,6 +276,7 @@ function uc_addresses_uc_addresses_fields() {
   );
   $data['modified'] = array(
     'title' => t('Modified'),
+    'type' => 'date',
     'description' => t('The date this address was last modified'),
     'handler' => 'UcAddressesDateFieldHandler',
     'display_settings' => array(
