diff --git a/README.txt b/README.txt
index eb3da36..46eedf7 100644
--- a/README.txt
+++ b/README.txt
@@ -41,9 +41,7 @@ Standard usage scenario
 2. Open admin/structure/metatag_defaults.
 3. Adjust global and entity defaults. Fill in reasonable default values for any
    of the meta tags that need to be customized. Tokens may be used to
-   automatically assign values. If the Token module is enabled there will be a
-   "Browse available tokens" link that opens a popup to list & insert the
-   available tokens.
+   automatically assign values.
 4. You can add bundle defaults by clicking on "Add metatag defaults" and filling
    out the form.
 5. If you want to adjust metatags for a specific entity, then you need to add
@@ -75,9 +73,9 @@ meta tag plugin and add it to a module.
 
 Related modules
 --------------------------------------------------------------------------------
-Some modules are available that extend Metatag with additional functionality:
+Some modules are available to extend Metatag with additional functionality:
 
-* Token
+* Token (required)
   https://www.drupal.org/project/token
   Provides a popup browser to see the available tokens for use in meta tag
   fields.
diff --git a/metatag.info.yml b/metatag.info.yml
index 04c78ea..df00512 100644
--- a/metatag.info.yml
+++ b/metatag.info.yml
@@ -5,3 +5,4 @@ core: 8.x
 package: SEO
 dependencies:
   - field
+  - token
diff --git a/metatag.services.yml b/metatag.services.yml
index 85a5850..ab98d77 100644
--- a/metatag.services.yml
+++ b/metatag.services.yml
@@ -9,7 +9,7 @@ services:
 
   metatag.token:
     class: Drupal\metatag\MetatagToken
-    arguments: ['@module_handler', '@token']
+    arguments: ['@token']
 
   metatag.manager:
     class: Drupal\metatag\MetatagManager
diff --git a/src/MetatagManager.php b/src/MetatagManager.php
index b7281e9..9c030db 100644
--- a/src/MetatagManager.php
+++ b/src/MetatagManager.php
@@ -294,7 +294,7 @@ class MetatagManager implements MetatagManagerInterface {
         // that needs to be filtered and converted to a string.
         // @see @Robots::setValue().
         $tag->setValue($value);
-        $processed_value = $this->tokenService->tokenReplace($tag->value(), $token_replacements);
+        $processed_value = $this->tokenService->replace($tag->value(), $token_replacements);
 
         // Now store the value with processed tokens back into the plugin.
         $tag->setValue($processed_value);
diff --git a/src/MetatagToken.php b/src/MetatagToken.php
index 2f46958..eb8ad7a 100644
--- a/src/MetatagToken.php
+++ b/src/MetatagToken.php
@@ -6,7 +6,6 @@
  */
 
 namespace Drupal\metatag;
-use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Utility\Token;
 
 /**
@@ -15,30 +14,20 @@ use Drupal\Core\Utility\Token;
 class MetatagToken {
 
   /**
-   * Module handler service.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
    * Token service.
    *
    * @var \Drupal\Core\Utility\Token
    */
-  protected $coreToken;
+  protected $token;
 
   /**
    * Constructs a new MetatagToken object.
    *
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   Module handler service.
    * @param \Drupal\Core\Utility\Token $token
    *   Token service.
    */
-  public function __construct(ModuleHandlerInterface $module_handler, Token $token) {
-    $this->coreToken = $token;
-    $this->moduleHandler = $module_handler;
+  public function __construct(Token $token) {
+    $this->token = $token;
   }
 
   /**
@@ -49,83 +38,42 @@ class MetatagToken {
    * @param array $settings
    * @return mixed|string $string
    */
-  public function tokenReplace($string, $data, $settings = array()){
-    if ($this->moduleHandler->moduleExists('token')) {
-      return $this->contribReplace($string, $data, $settings);
-    }
-    else {
-      return $this->coreReplace($string, $data, $settings);
-    }
+  public function replace($string, $data, $settings = array()){
+    $options = array('clear' => TRUE);
+
+    $replaced = $this->token->replace($string, $data, $options);
+
+    // Ensure that there are no double-slash sequences due to empty token values.
+    $replaced = preg_replace('/(?<!:)\/+\//', '/', $replaced);
+
+    return $replaced;
   }
 
   /**
    * Gatekeeper function to direct to either the core or contributed Token.
    *
    * @return array
-   *   If token module is installed, a popup browser plus a help text. If not
-   *   only the help text.
+   *   The token browser.
    */
   public function tokenBrowser() {
     $form = array();
-    $token_tree_hint = '';
-    if ($this->moduleHandler->moduleExists('token')) {
-      // Add the token popup to the top of the fieldset.
-      $form['tokens'] = array(
-        '#theme' => 'token_tree',
-        '#token_types' => 'all',
-        '#global_types' => TRUE,
-        '#click_insert' => TRUE,
-        '#show_restricted' => FALSE,
-        '#recursion_limit' => 3,
-        '#dialog' => TRUE,
-      );
-      $token_tree_hint = '(see the "Browse available tokens" popup)';
-    }
+
+    // Add the token popup to the top of the fieldset.
+    $form['tokens'] = array(
+      '#theme' => 'token_tree',
+      '#token_types' => 'all',
+      '#global_types' => TRUE,
+      '#click_insert' => TRUE,
+      '#show_restricted' => FALSE,
+      '#recursion_limit' => 3,
+      '#dialog' => TRUE,
+    );
 
     $form['intro_text'] = array(
-      '#markup' => '<p>' . t('Configure the meta tags below. Use tokens @token_tree_hint to avoid redundant meta data and search engine penalization. For example, a \'keyword\' value of "example" will be shown on all content using this configuration, whereas using the [node:field_keywords] automatically inserts the "keywords" values from the current entity (node, term, etc).', array('@token_tree_hint' => $token_tree_hint)) . '</p>',
+      '#markup' => '<p>' . t('Configure the meta tags below. Use tokens (see the "Browse available tokens" popup) to avoid redundant meta data and search engine penalization. For example, a \'keyword\' value of "example" will be shown on all content using this configuration, whereas using the [node:field_keywords] automatically inserts the "keywords" values from the current entity (node, term, etc).') . '</p>',
     );
 
     return $form;
   }
 
-  /**
-   * Replace tokens with their values using the core token service.
-   *
-   * @param $string
-   * @param $data
-   * @param array $settings
-   * @return mixed|string
-   */
-  private function coreReplace($string, $data, $settings = array()) {
-    // @TODO: Remove this temp code.
-    // This is just here as a way to see all available tokens in debugger.
-    $tokens = $this->coreToken->getInfo();
-
-    $options = array('clear' => TRUE);
-
-    // Replace tokens with core Token service.
-    $replaced = $this->coreToken->replace($string, $data, $options);
-
-    // Ensure that there are no double-slash sequences due to empty token values.
-    $replaced = preg_replace('/(?<!:)\/+\//', '/', $replaced);
-
-    return $replaced;
-  }
-
-  /**
-   * Replace tokens with their values using the contributed token module.
-   *
-   * @param $string
-   * @param $data
-   * @param array $settings
-   * @return mixed|string
-   */
-  private function contribReplace($string, $data, $settings = array()) {
-    // @TODO: Add contrib Token integration when it is ready.
-    // For now, just redirect to the core replacement to avoid breaking sites
-    // where Token is installed.
-    return $this->coreReplace($string, $data, $settings);
-  }
-
 }
