diff --git a/uc_addresses.module b/uc_addresses.module
index 2fcdd2a..883992a 100644
--- a/uc_addresses.module
+++ b/uc_addresses.module
@@ -163,6 +163,71 @@ function uc_addresses_perm() {
 }
 
 /**
+ * Implements hook_token_values().
+ */
+function uc_addresses_token_values($type, $object = NULL, $options = array()) {
+  $tokens = array();
+  
+  if ($type === 'user') {
+    $user = $object;
+    // Retrieve default addresses for the given user from the database and
+    // expand the token values of such.
+    if (isset($user->uid) && $user->uid) {
+      $aid = _uc_addresses_get_default_address_id($user->uid);
+      
+      if ($aid) {
+        $address = (array)uc_addresses_address_load($aid, $user->uid);
+        $exclude = array('aid', 'uid', 'created', 'modified');
+        foreach ($address as $key => $value) {
+          if (in_array($key, $exclude)) {
+            continue;
+          }
+          if ($key === 'country') {
+            $tokens['uc-addresses-' . $key . '-raw'] = uc_country_get_by_id($value);
+            $tokens['uc-addresses-' . $key] = check_plain(uc_country_get_by_id($value));
+          }
+          else if ($key === 'zone') {
+            $tokens['uc-addresses-' . $key . '-raw'] = uc_zone_get_by_id($value);
+            $tokens['uc-addresses-' . $key] = check_plain(uc_zone_get_by_id($value));
+          }
+          else {
+            $tokens['uc-addresses-' . $key . '-raw'] = $value;
+            $tokens['uc-addresses-' . $key] = check_plain($value);
+          }
+          
+          $tokens['uc-addresses-' . $key . '-raw'] = trim($tokens['uc-addresses-' . $key . '-raw']);
+          $tokens['uc-addresses-' . $key] = trim(check_plain($tokens['uc-addresses-' . $key]));
+        }
+      }
+    }
+  }
+  
+  return $tokens;
+}
+
+/**
+ * Implements hook_token_list().
+ */
+function uc_addresses_token_list($type = 'all') {
+  $tokens = array();
+  
+  if ($type === 'user' || $type === 'all') {
+    // List out plain and raw tokens for all columns in the uc_addresses table
+    $schema = drupal_get_schema('uc_addresses');
+    $exclude = array('aid', 'uid', 'created', 'modified');
+    foreach ($schema['fields'] as $key => $field) {
+      if (in_array($key, $exclude)) {
+        continue;
+      }
+      $tokens['user']['uc-addresses-' . $key . '-raw'] = $field['description'] . t('. <em>Warning: Token value contains raw user input.</em>');
+      $tokens['user']['uc-addresses-' . $key] = $field['description'];
+    }
+  }
+  
+  return $tokens;
+}
+
+/**
  * Implementation of hook_user().
  *
  * @param string $op
