diff --git a/src/Tests/TokenMenuTest.php b/src/Tests/TokenMenuTest.php
index 196c48f..be0985f 100644
--- a/src/Tests/TokenMenuTest.php
+++ b/src/Tests/TokenMenuTest.php
@@ -7,6 +7,8 @@ use Drupal\Core\Url;
 use Drupal\node\Entity\NodeType;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\system\Entity\Menu;
+use Drupal\menu_link_content\Entity\MenuLinkContent;
 
 /**
  * Tests menu tokens.
@@ -331,4 +333,57 @@ class TokenMenuTest extends TokenTestBase {
     // $this->assertTokens('node', ['node' => $node->getTranslation('de')], ['menu-link' => 'German menu title']);
   }
 
+  /**
+   * Tests menu link parents token.
+   */
+  public function testMenuLinkParentsToken() {
+    // Create a menu with a simple link hierarchy :
+    // - parent
+    //   - child-1
+    //      - child-1-1
+    Menu::create(array(
+      'id' => 'menu_test',
+      'label' => 'Test menu',
+    ))->save();
+    $base_options = [
+      'provider' => 'menu_test',
+      'menu_name' => 'menu_test',
+    ];
+    $parent = $base_options + [
+        'title' => 'parent title',
+        'link' => ['uri' => 'internal:/menu-test/hierarchy/parent'],
+    ];
+    $parent = MenuLinkContent::create($parent);
+    $parent->save();
+    $child_1 = $base_options + [
+        'title' => 'child_1 title',
+        'link' => ['uri' => 'internal:/menu-test/hierarchy/parent/child_1'],
+        'parent' => $parent->getPluginId(),
+    ];
+    $child_1 = MenuLinkContent::create($child_1);
+    $child_1->save();
+    $child_1_1 = $base_options + [
+        'title' => 'child_1_1 title',
+        'link' => ['uri' => 'internal:/menu-test/hierarchy/parent/child_1/child_1_1'],
+        'parent' => $child_1->getPluginId(),
+    ];
+    $child_1_1 = MenuLinkContent::create($child_1_1);
+    $child_1_1->save();
+
+    $this->assertTokens('menu-link', ['menu-link' => $child_1_1], ['parents' => 'parent title, child_1 title']);
+
+    // Change the parent of child_1_1 to 'parent' at the entity level.
+    $child_1_1->parent->value = $parent->getPluginId();
+    $child_1_1->save();
+
+    $this->assertTokens('menu-link', ['menu-link' => $child_1_1], ['parents' => 'parent title']);
+
+    // Change the parent of child_1_1 to 'main', at the entity level.
+    $child_1_1->parent->value = '';
+    $child_1_1->save();
+
+    // The token shouldn't have been generated; the menu link has no parent.
+    $this->assertNoTokens('menu-link', ['menu-link' => $child_1_1], ['parents']);
+  }
+
 }
diff --git a/token.module b/token.module
index c3e2954..d2d0699 100644
--- a/token.module
+++ b/token.module
@@ -14,6 +14,7 @@ use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\menu_link_content\Entity\MenuLinkContent;
+use Drupal\menu_link_content\MenuLinkContentInterface;
 use Drupal\node\NodeInterface;
 
 /**
@@ -762,3 +763,10 @@ function token_node_insert(NodeInterface $node) {
     $menu_link->save();
   }
 }
+
+/**
+ * Implements hook_ENTITY_TYPE_presave() for menu_link_content.
+ */
+function token_menu_link_content_presave(MenuLinkContentInterface $menu_link_content) {
+  drupal_static_reset('token_menu_link_load_all_parents');
+}
