diff --git a/all/modules/contrib/addresses/addresses_cck/addresses_cck.module b/all/modules/contrib/addresses/addresses_cck/addresses_cck.module
index cdfbb2e..2b7babf 100755
--- a/all/modules/contrib/addresses/addresses_cck/addresses_cck.module
+++ b/all/modules/contrib/addresses/addresses_cck/addresses_cck.module
@@ -295,4 +295,61 @@ function addresses_cck_widget_info() {
   );
 }
 
+/**
+ * Implementation of hook_token_list().
+ */
+function addresses_cck_token_list($type = 'all') {
+  if ($type == 'field' || $type == 'all') {
+    $tokens = array();
+
+    $fields = module_invoke_all('addressesfieldapi', 'fields');
+
+    foreach ($fields as $field => $field_data) {
+      if (isset($field_data['theme'])) {
+
+        foreach ($field_data['theme'] as $theme => $theme_title) {
+          $tokens['addresses'][$field .'_'. $theme] = $theme_title;
+        }
+      }
+    }
+    return $tokens;
+  }
+}
+/**
+ * Implementation of hook_token_values().
+ */
+function addresses_cck_token_values($type, $object = NULL) {
+  if ($type == 'field') {
+    $tokens = array();
+    $item = $object[0];
+
+    $fields = module_invoke_all('addressesfieldapi', 'fields');
+
+    foreach ($fields as $field => $field_data) {
+      if (isset($field_data['theme'])) {
+        foreach (array_keys($field_data['theme']) as $format) {
+          // Sub-modules such as addresses_phone add a module specification to
+          // avoid clashes between modules.
+          if (!empty($field_data['module'])) {
+            $module = $field_data['module'] . '_';
+          }
+          else {
+            $module = '';
+          }
+
+          if (isset($field_data['theme'])) {
+
+            foreach ($field_data['theme'] as $theme => $theme_title) {
+              $tokens[$field .'_'. $theme] = theme('addresses_'. $module . $field, $item, $format);
+            }
+          }
+
+        }
+      }
+    }
+
+    return $tokens;
+  }
+}
+
 // vim: ts=2 sw=2 et syntax=php
