diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 4a78495..02698d7 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -338,6 +338,7 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
       '#default_value' => $path,
       '#description' => t('The path for this menu link. This can be an internal Drupal path such as %add-node or an external URL such as %drupal. Enter %front to link to the front page.', array('%front' => '<front>', '%add-node' => 'node/add', '%drupal' => 'http://drupal.org')),
       '#required' => TRUE,
+      '#autocomplete_path' => 'node/autocomplete',
     );
     $form['actions']['delete'] = array(
       '#type' => 'submit',
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index d56bee5..bb50e79 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1796,6 +1796,16 @@ function node_menu() {
     'access arguments' => array(3, 'delete'),
     'file' => 'node.pages.inc',
   );
+
+  $items['node/autocomplete'] = array(
+    'title' => 'Node autocomplete',
+    'page callback' => 'node_autocomplete',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+    'file' => 'node.pages.inc',
+  );
+
   return $items;
 }
 
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index 245fef7..7282888 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -9,9 +9,28 @@
  * @see node_menu()
  */
 
+use Symfony\Component\HttpFoundation\JsonResponse;
 use Drupal\node\Plugin\Core\Entity\Node;
 
 /**
+ * Menu callback; Retrieve a JSON object containing autocomplete suggestions for existing content.
+ */
+function node_autocomplete() {
+  $matches = array();
+  if ($string = drupal_container()->get('request')->query->get('q')) {
+    $result = db_select('node')->fields('node', array('nid'))->condition('title', '%' . db_like($string) . '%', 'LIKE')->range(0, 10)->execute();
+    foreach ($result as $node_item) {
+      $node = node_load($node_item->nid);
+      if (node_access('view', $node)) {
+        $matches['node/' . $node->nid] = check_plain($node->title);
+      }
+    }
+  }
+
+  return new JsonResponse($matches);
+}
+
+/**
  * Page callback: Presents the node editing form.
  *
  * @param object $node
diff --git a/core/modules/path/path.admin.inc b/core/modules/path/path.admin.inc
index 0535454..55a5745 100644
--- a/core/modules/path/path.admin.inc
+++ b/core/modules/path/path.admin.inc
@@ -137,6 +137,7 @@ function path_admin_form($form, &$form_state, $path = array('source' => '', 'ali
     '#description' => t('Specify the existing path you wish to alias. For example: node/28, forum/1, taxonomy/term/1.'),
     '#field_prefix' => url(NULL, array('absolute' => TRUE)),
     '#required' => TRUE,
+    '#autocomplete_path' => 'node/autocomplete',
   );
   $form['alias'] = array(
     '#type' => 'textfield',
diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc
index 18ec1c3..077e192 100644
--- a/core/modules/shortcut/shortcut.admin.inc
+++ b/core/modules/shortcut/shortcut.admin.inc
@@ -450,6 +450,7 @@ function _shortcut_link_form_elements($shortcut_link = NULL) {
     '#maxlength' => 255,
     '#field_prefix' => url(NULL, array('absolute' => TRUE)),
     '#default_value' => $shortcut_link['link_path'],
+    '#autocomplete_path' => 'node/autocomplete',
   );
 
   $form['#validate'][] = 'shortcut_link_edit_validate';
