diff --git a/src/Tests/TokenMenuTest.php b/src/Tests/TokenMenuTest.php
index 196c48f..1dfa492 100644
--- a/src/Tests/TokenMenuTest.php
+++ b/src/Tests/TokenMenuTest.php
@@ -331,4 +331,55 @@ class TokenMenuTest extends TokenTestBase {
     // $this->assertTokens('node', ['node' => $node->getTranslation('de')], ['menu-link' => 'German menu title']);
   }
 
+  /**
+   * Tests menu link parent token.
+   *
+   * Regression test for https://www.drupal.org/node/2769299
+   */
+  public function testMenuLinkParentToken() {
+    // Create the page content type.
+    $node_type = NodeType::create([
+      'type' => 'page',
+    ]);
+    $node_type->save();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'create page content',
+      'edit any page content',
+      'administer menu',
+      'administer nodes',
+      'administer content types',
+      'access administration pages',
+    ]));
+
+    // Create nodes.
+    $node1 = $this->drupalCreateNode(['type' => 'page', 'title' => 'test-node-1']);
+    $node2 = $this->drupalCreateNode(['type' => 'page', 'title' => 'test-node-2']);
+
+    // Enable a menu link for both nodes.
+    $edit = ['menu[enabled]' => 1];
+    $this->drupalGet('node/1/edit');
+    $this->drupalPostForm(NULL, $edit + ['menu[title]' => 'test-node-1'], 'Save and keep published');
+    $this->drupalGet('node/2/edit');
+    $this->drupalPostForm(NULL, $edit + ['menu[title]' => 'test-node-2'], 'Save and keep published');
+
+    // Both nodes are by default the top level menu link item, so there should
+    // not be a parent token.
+    $this->assertNoTokens('node', ['node' => $node1], ['menu-link:parent']);
+    $this->assertNoTokens('node', ['node' => $node2], ['menu-link:parent']);
+
+    // Change the parent menu item of the second node to be the first node.
+    $this->drupalGet('node/2/edit');
+    $link = menu_ui_get_menu_link_defaults($node1);
+    $this->drupalPostForm(NULL, ['menu[menu_parent]' => 'main:' . $link['id']], 'Save and keep published');
+    $this->assertNoTokens('node', ['node' => $node1], ['menu-link:parent']);
+    $this->assertTokens('node', ['node' => $node2], ['menu-link:parent' => 'test-node-1']);
+
+    // Change the parent menu item back to root.
+    $this->drupalGet('node/2/edit');
+    $this->drupalPostForm(NULL, ['menu[menu_parent]' => 'main:'], 'Save and keep published');
+    $this->assertNoTokens('node', ['node' => $node1], ['menu-link:parent']);
+    $this->assertNoTokens('node', ['node' => $node2], ['menu-link:parent']);
+  }
+
 }
diff --git a/token.module b/token.module
index c3e2954..81d05e0 100644
--- a/token.module
+++ b/token.module
@@ -744,6 +744,15 @@ function token_node_menu_link_submit($entity_type, NodeInterface $node, &$form,
       $entity->parent->value = $values['parent'];
       $entity->weight->value = isset($values['weight']) ? $values['weight'] : 0;
       $entity->save();
+
+      // Updates the menu link plugin's definition.
+      $plugin_id = $entity->getPluginId();
+      /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
+      $menu_link_manager = \Drupal::service('plugin.manager.menu.link');
+      if ($menu_link_manager->hasDefinition($plugin_id)) {
+        $menu_link_manager->updateDefinition($plugin_id, ['parent' => $values['parent']]);
+      }
+
       $node->menu_link = $entity;
       // Leave this for _menu_ui_node_save() to pick up so we don't end up with
       // duplicate menu-links.
