diff --git a/core/includes/form.inc b/core/includes/form.inc
index c793f11..62bc915 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -4087,7 +4087,18 @@ function theme_vertical_tabs($variables) {
  *     autocomplete JavaScript library.
  */
 function form_process_autocomplete($element, &$form_state) {
-  if (!empty($element['#autocomplete_path']) && drupal_valid_path($element['#autocomplete_path'])) {
+  $access = FALSE;
+  if (!empty($element['#autocomplete_route_name'])) {
+    $route_name = $element['#autocomplete_route_name'];
+    $parameters = isset($element['#autocomplete_route_parameters']) ? $element['#autocomplete_route_parameters'] : array();
+
+    $access = Drupal::service('access_manager')->checkNamedRoute($route_name, $parameters);
+    $path = Drupal::urlGenerator()->generate($route_name, $parameters);
+  }
+  else {
+    $path = url($element['#autocomplete_path'], array('absolute' => TRUE));
+  }
+  if ($access || !empty($element['#autocomplete_path']) && drupal_valid_path($element['#autocomplete_path'])) {
     $element['#attributes']['class'][] = 'form-autocomplete';
     $element['#attached']['library'][] = array('system', 'drupal.autocomplete');
     // Provide a hidden element for the JavaScript behavior to bind to. Since
@@ -4097,7 +4108,7 @@ function form_process_autocomplete($element, &$form_state) {
     $element['autocomplete'] = array(
       '#type' => 'hidden',
       '#input' => FALSE,
-      '#value' => url($element['#autocomplete_path'], array('absolute' => TRUE)),
+      '#value' => $path,
       '#disabled' => TRUE,
       '#attributes' => array(
         'class' => array('autocomplete'),
diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
index d5a4a50..478e2e3 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -87,7 +87,7 @@ public function form(array $form, array &$form_state) {
     if ($is_admin) {
       $form['author']['name']['#title'] = t('Authored by');
       $form['author']['name']['#description'] = t('Leave blank for %anonymous.', array('%anonymous' => \Drupal::config('user.settings')->get('anonymous')));
-      $form['author']['name']['#autocomplete_path'] = 'user/autocomplete';
+      $form['author']['name']['#autocomplete_route_name'] = 'user_autocomplete';
     }
     elseif ($user->isAuthenticated()) {
       $form['author']['name']['#type'] = 'item';
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php b/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
index 08cc693..3374ddf 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/ContentTranslationController.php
@@ -274,7 +274,7 @@ public function entityFormAlter(array &$form, array &$form_state, EntityInterfac
         '#type' => 'textfield',
         '#title' => t('Authored by'),
         '#maxlength' => 60,
-        '#autocomplete_path' => 'user/autocomplete',
+        '#autocomplete_route_name' => 'user_autocomplete',
         '#default_value' => $name,
         '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))),
       );
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index ccc1dcc..58010a9 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -190,7 +190,7 @@ public function form(array $form, array &$form_state) {
       '#type' => 'textfield',
       '#title' => t('Authored by'),
       '#maxlength' => 60,
-      '#autocomplete_path' => 'user/autocomplete',
+      '#autocomplete_route_name' => 'user_autocomplete',
       '#default_value' => !empty($node->name) ? $node->name : '',
       '#weight' => -1,
       '#description' => t('Leave blank for %anonymous.', array('%anonymous' => $user_config->get('anonymous'))),
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Action/AssignOwnerNode.php b/core/modules/node/lib/Drupal/node/Plugin/Action/AssignOwnerNode.php
index 59255e2..7a2753c 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Action/AssignOwnerNode.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Action/AssignOwnerNode.php
@@ -107,7 +107,7 @@ public function buildConfigurationForm(array $form, array &$form_state) {
         '#type' => 'textfield',
         '#title' => t('Username'),
         '#default_value' => $owner_name,
-        '#autocomplete_path' => 'user/autocomplete',
+        '#autocomplete_route_name' => 'user_autocomplete',
         '#size' => '6',
         '#maxlength' => '60',
         '#description' => $description,
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
index e3521cc..cd83a77 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
@@ -126,4 +126,29 @@ function testGroupElements() {
     $elements = $this->xpath('//div[@class="vertical-tabs-panes"]//details[@id="edit-meta-2"]//label');
     $this->assertTrue(count($elements) == 1);
   }
+
+
+  /**
+   * Tests a form with a autocomplete setting..
+   */
+  public function testFormAutocomplete() {
+    $this->drupalGet('form-test/autocomplete');
+
+    $result = $this->xpath('//input[@id = "edit-autocomplete-1-autocomplete"]');
+    $this->assertEqual(count($result), 0, 'Ensure that the user does not have access to the autocompletion');
+    $result = $this->xpath('//input[@id = "edit-autocomplete-2-autocomplete"]');
+    $this->assertEqual(count($result), 0, 'Ensure that the user did not had access to the autocompletion');
+
+    $user = $this->drupalCreateUser(array('access autocomplete test'));
+    $this->drupalLogin($user);
+    $this->drupalGet('form-test/autocomplete');
+
+    $result = $this->xpath('//input[@id = "edit-autocomplete-1-autocomplete"]');
+    $this->assertEqual((string) $result[0]['value'], url('form-test/autocomplete-1'));
+    $this->assertEqual(count($result), 1, 'Ensure that the user does have access to the autocompletion');
+    $result = $this->xpath('//input[@id = "edit-autocomplete-2-autocomplete"]');
+    $this->assertEqual((string) $result[0]['value'], url('form-test/autocomplete-2/value'));
+    $this->assertEqual(count($result), 1, 'Ensure that the user does have access to the autocompletion');
+  }
+
 }
diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index 762d7fc..fa16bf9 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -376,6 +376,9 @@ function form_test_permission() {
     'access vertical_tab_test tabs' => array(
       'title' => t('Access vertical_tab_test tabs'),
     ),
+    'access autocomplete test' => array(
+      'title' => t('Access autocomplete test'),
+    ),
   );
   return $perms;
 }
diff --git a/core/modules/system/tests/modules/form_test/form_test.routing.yml b/core/modules/system/tests/modules/form_test/form_test.routing.yml
index 0091561..34e437d 100644
--- a/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -46,3 +46,24 @@ form_test.route7:
     _form: '\Drupal\form_test\ConfirmFormArrayPathTestForm'
   requirements:
     _access: 'TRUE'
+
+form_test.route8:
+  pattern: '/form-test/autocomplete'
+  defaults:
+    _form: '\Drupal\form_test\FormTestAutocompleteForm'
+  requirements:
+    _access: 'TRUE'
+
+form_test.autocomplete_1:
+  pattern: '/form-test/autocomplete-1'
+  defaults:
+    controller: '\Drupal\form_test\AutocompleteController::autocomplete1'
+  requirements:
+    _permission: 'access autocomplete test'
+
+form_test.autocomplete_2:
+  pattern: '/form-test/autocomplete-2/{param}'
+  defaults:
+    controller: '\Drupal\form_test\AutocompleteController::autocomplete1'
+  requirements:
+    _permission: 'access autocomplete test'
diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/AutocompleteController.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/AutocompleteController.php
new file mode 100644
index 0000000..a08a3ba
--- /dev/null
+++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/AutocompleteController.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\form_test\AutocompleteController.
+ */
+
+namespace Drupal\form_test;
+
+class AutocompleteController {
+
+  /**
+   * Returns
+   */
+
+} 
diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/FormTestAutocompleteForm.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/FormTestAutocompleteForm.php
new file mode 100644
index 0000000..5d881e7
--- /dev/null
+++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/FormTestAutocompleteForm.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\form_test\FormTestAutocompleteForm.
+ */
+
+namespace Drupal\form_test;
+
+use Drupal\Core\Form\FormInterface;
+
+/**
+ * Defines a test form using autocomplete textfields.
+ */
+class FormTestAutocompleteForm implements FormInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormID() {
+    return 'form_test_autocomplete';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, array &$form_state) {
+    $form['autocomplete_1'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Autocomplete 1',
+      '#autocomplete_route_name' => 'form_test.autocomplete_1',
+    );
+    $form['autocomplete_2'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Autocomplete 2',
+      '#autocomplete_route_name' => 'form_test.autocomplete_2',
+      '#autocomplete_route_parameters' => array('param' => 'value'),
+    );
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, array &$form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, array &$form_state) {
+  }
+
+} 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
index 3742917..0f633a6 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Name.php
@@ -42,7 +42,7 @@ protected function valueForm(&$form, &$form_state) {
       '#title' => t('Usernames'),
       '#description' => t('Enter a comma separated list of user names.'),
       '#default_value' => $default_value,
-      '#autocomplete_path' => 'user/autocomplete/anonymous',
+      '#autocomplete_route_name' => 'user_autocomplete_anonymous',
     );
 
     if (!empty($form_state['exposed']) && !isset($form_state['input'][$this->options['expose']['identifier']])) {
