diff --git a/shorten.admin.inc b/shorten.admin.inc
index 187051a..dcecd7e 100644
--- a/shorten.admin.inc
+++ b/shorten.admin.inc
@@ -95,16 +95,6 @@ function shorten_admin($form, $form_state) {
       '#description' => t('Allow users to choose which service to use in the Shorten URLs block and page.'),
     );
   }
-  if (module_exists('token')) {
-    $form['shorten_generate_token'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Generate a shortened URL for nodes for use as tokens'),
-      '#description' => t('This option could create a lot of little-used short URLs.') . ' ' .
-        t('However, performance load is minimized because the shortened URLs are cached.') . ' ' .
-        t('Note that if you turn this off, you should not use the [node:url] token.'),
-      '#default_value' => variable_get('shorten_generate_token', 1),
-    );
-  }
   $form['shorten_use_alias'] = array(
     '#type' => 'checkbox',
     '#title' => t('Shorten aliased URLs where possible'),
diff --git a/shorten.install b/shorten.install
index bfba6cc..15e033a 100644
--- a/shorten.install
+++ b/shorten.install
@@ -15,11 +15,11 @@ function shorten_schema() {
 }
 
 /**
- * Implementation of hook_update_N().
+ * Remove shorten_generate_token variable.
  */
-function shorten_update_6001() {
+function shorten_update_7001() {
   // The settings pages moved, so we need to rebuild the menu router cache.
-  menu_cache_clear_all();
+  variable_del('shorten_generate_token');
 }
 
 /**
@@ -45,7 +45,6 @@ function shorten_uninstall() {
   variable_del('shorten_adjix_custom');
   variable_del('shorten_show_service');
   variable_del('shorten_cache_duration');
-  variable_del('shorten_generate_token');
   variable_del('shorten_service_backup');
   variable_del('shorten_cache_clear_all');
   variable_del('shorten_invisible_services');
diff --git a/shorten.module b/shorten.module
index 178cec1..6056dda 100644
--- a/shorten.module
+++ b/shorten.module
@@ -698,29 +698,68 @@ function _shorten_method_default() {
  * Implements hook_token_info().
  */
 function shorten_token_info() {
-  if (variable_get('shorten_generate_token', 1)) {
-    $return['tokens']['node']['short-url'] = array(
-      'name' => t('Short Url'),
-      'description' => t('The shortened URL for the node.'),
-    );
-    return $return;
-  }
+  $info = array();
+
+  // @TODO: Deprecated for the wider URL token, eventually remove, although probably on 8.x
+  $info['tokens']['node']['short-url'] = array(
+    'name' => t('Short Url'),
+    'description' => t('The shortened URL for the node. <b>Deprecated:</b> use [node:url:shorten] or [node:url:unaliased:shorten].'),
+  );
+
+  $info['tokens']['url']['shorten'] = array(
+   'name' => t('Shorten'),
+    'description' => t("Shorten URL using the default service."),
+  );
+
+  return $info;
 }
 
 /**
  * Implements hook_tokens().
  */
 function shorten_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  // @TODO: Deprecated for the wider URL token, eventually remove, although probably on 8.x
   $replacements = array();
   if ($type == 'node'
   && !empty($data['node'])
-  && isset($tokens['short-url'])
-  && variable_get('shorten_generate_token', 1)) {
+  && isset($tokens['short-url'])) {
     $node = (object) $data['node'];
     $replacements[$tokens['short-url']] = shorten_url(url('node/' . $node->nid, array(
       'absolute' => TRUE,
       'alias' => variable_get('shorten_use_alias', 1),
     )));
   }
+
+  // General URL token replacement
+  $url_options = array('absolute' => TRUE);
+  if (isset($options['language'])) {
+    $url_options['language'] = $options['language'];
+    $language_code = $options['language']->language;
+  }
+  else {
+    $language_code = NULL;
+  }
+
+  $sanitize = !empty($options['sanitize']);
+
+  // URL tokens.
+  if ($type == 'url' && !empty($data['path'])) {
+    $path = $data['path'];
+
+    if (isset($data['options'])) {
+      // Merge in the URL options if available.
+      $url_options = $data['options'] + $url_options;
+    }
+
+    foreach ($tokens as $name => $original) {
+      switch ($name) {
+        case 'shorten':
+          $value = url($path, $url_options);
+          $replacements[$original] = shorten_url($value);
+          break;
+      }
+    }
+  }
+
   return $replacements;
 }
