diff --git a/alt_login.tokens.inc b/alt_login.tokens.inc
new file mode 100644
index 0000000..a120f0d
--- /dev/null
+++ b/alt_login.tokens.inc
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * @file
+ * Builds placeholder replacement tokens for alt-login-related data.
+ */
+
+/**
+ * Implements hook_token_info().
+ */
+function alt_login_token_info() {
+  $alt_login = array();
+  $alt_login['alt_login'] = array(
+    'name' => 'Alt Login',
+    'description' => 'The alt login value for the user account.',
+  );
+  return array(
+    'tokens' => array('user' => $alt_login),
+  );
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function alt_login_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $sanitize = !empty($options['sanitize']);
+  $replacements = array();
+
+  if ($type == 'user' && !empty($data['user'])) {
+    $account = $data['user'];
+    foreach ($tokens as $name => $original) {
+      switch ($name) {
+        case 'alt_login':
+          $name = $account->alt_login;
+          $replacements[$original] = $sanitize ? check_plain($name) : $name;
+          break;
+      }
+    }
+  }
+
+  if ($type == 'current-user') {
+    $account = user_load($GLOBALS['user']->uid);
+    $replacements += token_generate('user', $tokens, array('user' => $account), $options);
+  }
+
+  return $replacements;
+}
