diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index c167bd4..ac5fdfe 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -5,6 +5,7 @@
  * Entity API for handling entities like nodes or users.
  */
 
+use Drupal\entity\EntityFieldQuery;
 use Drupal\entity\EntityMalformedException;
 
 /**
@@ -21,6 +22,100 @@ function entity_help($path, $arg) {
 }
 
 /**
+ * Implements hook_menu().
+ */
+function entity_menu() {
+  $items['entity/autocomplete'] = array(
+    'title' => 'Autocomplete entities',
+    'page callback' => 'entity_autocomplete',
+    'access callback' => 'entity_autocomplete_access',
+    'access arguments' => array(2),
+    'type' => MENU_CALLBACK,
+  );
+  return $items;
+}
+
+/**
+ * Access callback for entity autocomplete.
+ *
+ * Until Drupal ships with a generic entity access API we need to hard-code the
+ * permission checks for the core entity types here.
+ *
+ * @param string $entity_type
+ *   The entity type, e.g. node, for which the access permission should be
+ *   checked.
+ *
+ * @see entity_autocomplete()
+ */
+function entity_autocomplete_access($entity_type) {
+  switch ($entity_type) {
+    case 'comment':
+      return user_access('access comments');
+
+    case 'node':
+      return user_access('access content');
+
+    case 'taxonomy_term':
+    case 'taxonomy_vocabulary':
+      // There is no specific permission to allow access to vocabularies or
+      // terms so return TRUE.
+      return TRUE;
+
+    case 'user':
+      return user_access('access user profiles');
+
+    default:
+      // Deny access for every other entity type.
+      return FALSE;
+  }
+}
+
+/**
+ * Page callback: Outputs JSON for entity autocomplete suggestions.
+ *
+ * @param string $entity_type
+ *   The entity type, e.g. node.
+ * @param string $title_types
+ *   The text to search for.
+ *
+ * @return string
+ *   Prints a list of matching entities as JSON-encoded string.
+ *
+ * @see entity_autocomplete_access()
+ */
+function entity_autocomplete($entity_type, $title_typed) {
+  $matches = array();
+
+  if ($title_typed !== '') {
+    $entity_info = entity_get_info($entity_type);
+    // Only use entities that define a label key.
+    // Without a label key its not possible to know which metadata of the entity
+    // to apply the filter on and which data to display to the user.
+    if (isset($entity_info['entity keys']['label'])) {
+      $query = new EntityFieldQuery();
+      $result = $query
+        ->entityCondition('entity_type', $entity_type)
+        ->entityCondition($entity_info['entity keys']['label'], '%' . db_like($title_typed) . '%', 'LIKE')
+        ->range(0, 10)
+        ->addTag('node_access')
+        ->addTag('translatable')
+        ->execute();
+      if (isset($result[$entity_type])) {
+        $entities = entity_load_multiple($entity_type, array_keys($result[$entity_type]));
+        foreach ($entities as $entity) {
+          $entity_uri = $entity->uri();
+          if (!empty($entity_uri['path'])) {
+            $matches[$entity_uri['path']] = check_plain($entity->label());
+          }
+        }
+      }
+    }
+  }
+
+  drupal_json_output($matches);
+}
+
+/**
  * Implements hook_modules_preenable().
  */
 function entity_modules_preenable() {
diff --git a/core/modules/entity/tests/entity.test b/core/modules/entity/tests/entity.test
index 1047279..2b2bd86 100644
--- a/core/modules/entity/tests/entity.test
+++ b/core/modules/entity/tests/entity.test
@@ -246,3 +246,46 @@ class EntityAPIInfoTestCase extends WebTestBase  {
     $this->assertEqual($info['controller class'], 'Drupal\entity\EntityController', 'Entity controller class info is correct.');
   }
 }
+
+/**
+ * Tests Entity autocompletion.
+ */
+class EntityAutocompleteTestCase extends WebTestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Entity autocomplete',
+      'description' => 'Tests basic autocomplete functionality.',
+      'group' => 'Entity API',
+    );
+  }
+
+  function setUp() {
+    $modules = func_get_args();
+    if (isset($modules[0]) && is_array($modules[0])) {
+      $modules = $modules[0];
+    }
+    $modules[] = 'node';
+    // Ensure node module is loaded and configured.
+    parent::setUp($modules);
+
+    // Create Article node type.
+    if ($this->profile != 'standard') {
+      $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
+    }
+  }
+
+  /**
+   * Tests autocompletion for entity type "node".
+   */
+  function testEntityAutocompleteNode() {
+    $user1 = $this->drupalCreateUser(array('edit own article content', 'create article content'));
+    $this->drupalLogin($user1);
+
+    $this->drupalCreateNode(array('title' => 'invisibleink and Ron Williams'));
+    $expected = '{"node\/1":"invisibleink and Ron Williams"}';
+    $result = $this->drupalGet('entity/autocomplete/node/invis');
+    $this->assertIdentical($result, $expected, t('The autocomplete path returned the proper JSON object when acessing autocomplete URL'));
+  }
+
+}
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 2e1725d..6bee9ce 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -298,7 +298,8 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
       '#title' => t('Path'),
       '#maxlength' => 255,
       '#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')),
+      '#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. You may enter the title of the node you would like to link to to get a list of possible matches.', array('%front' => '<front>', '%add-node' => 'node/add', '%drupal' => 'http://drupal.org')),
+      '#autocomplete_path' => 'entity/autocomplete/node',
       '#required' => TRUE,
     );
     $form['actions']['delete'] = array(
