diff --git a/core/lib/Drupal/Core/Access/AccessManager.php b/core/lib/Drupal/Core/Access/AccessManager.php
index 625d891..27d76ac 100644
--- a/core/lib/Drupal/Core/Access/AccessManager.php
+++ b/core/lib/Drupal/Core/Access/AccessManager.php
@@ -194,13 +194,13 @@ public function checkNamedRoute($route_name, array $parameters = array(), Accoun
     }
     catch (RouteNotFoundException $e) {
       // Cacheable until extensions change.
-      $result = AccessResult::forbidden()->addCacheTags(array('extension' => TRUE));
+      $result = AccessResult::createForbidden()->addCacheTags(array('extension' => TRUE));
       return $return_as_object ? $result : $result->isAllowed();
     }
     catch (ParamNotConvertedException $e) {
       // Uncacheable because conversion of the parameter may not have been
       // possible due to dynamic circumstances.
-      $result = AccessResult::forbidden()->setCacheable(FALSE);
+      $result = AccessResult::createForbidden()->setCacheable(FALSE);
       return $return_as_object ? $result : $result->isAllowed();
     }
   }
@@ -229,7 +229,7 @@ public function check(RouteMatchInterface $route_match, AccountInterface $accoun
       $checks = array_diff($checks, $this->checkNeedsRequest);
     }
 
-    $result = AccessResult::create();
+    $result = AccessResult::createNeutral();
     if (!empty($checks)) {
       $arguments_resolver = $this->argumentsResolverFactory->getArgumentsResolver($route_match, $account, $request);
       if ($conjunction == static::ACCESS_MODE_ALL) {
@@ -274,13 +274,13 @@ protected function checkAll(array $checks, ArgumentsResolverInterface $arguments
 
     if (empty($results)) {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
     else {
       /** @var \Drupal\Core\Access\AccessResultInterface $result */
       $result = array_shift($results);
       foreach ($results as $other) {
-        $result->andIf($other);
+        $result = $result->andIf($other);
       }
       return $result;
     }
@@ -301,7 +301,7 @@ protected function checkAll(array $checks, ArgumentsResolverInterface $arguments
    */
   protected function checkAny(array $checks, ArgumentsResolverInterface $arguments_resolver) {
     // No opinion by default.
-    $result = AccessResult::create();
+    $result = AccessResult::createNeutral();
 
     foreach ($checks as $service_id) {
       if (empty($this->checks[$service_id])) {
diff --git a/core/lib/Drupal/Core/Access/AccessResult.php b/core/lib/Drupal/Core/Access/AccessResult.php
index c87b80f..b7c5532 100644
--- a/core/lib/Drupal/Core/Access/AccessResult.php
+++ b/core/lib/Drupal/Core/Access/AccessResult.php
@@ -17,31 +17,7 @@
  * When using ::orIf() and ::andIf(), cacheability metadata will be merged
  * accordingly as well.
  */
-class AccessResult implements AccessResultInterface, CacheableInterface {
-
-  /**
-   * The value that explicitly allows access.
-   */
-  const ALLOW = 'ALLOW';
-
-  /**
-   * The value that neither explicitly allows nor explicitly forbids access.
-   */
-  const DENY = 'DENY';
-
-  /**
-   * The value that explicitly forbids access.
-   */
-  const KILL = 'KILL';
-
-  /**
-   * The access result value.
-   *
-   * A \Drupal\Core\Access\AccessResultInterface constant value.
-   *
-   * @var string
-   */
-  protected $value;
+abstract class AccessResult implements AccessResultInterface, CacheableInterface {
 
   /**
    * Whether the access result is cacheable.
@@ -78,7 +54,6 @@ class AccessResult implements AccessResultInterface, CacheableInterface {
    * Constructs a new AccessResult object.
    */
   public function __construct() {
-    $this->resetAccess();
     $this->setCacheable(TRUE)
       ->resetCacheContexts()
       ->resetCacheTags()
@@ -88,7 +63,7 @@ public function __construct() {
   }
 
   /**
-   * Instantiates a new AccessResult object.
+   * Creates an AccessResultInterface object wth isNeutral() === TRUE.
    *
    * This factory method exists to improve DX; it allows developers to fluently
    * create access results.
@@ -97,55 +72,62 @@ public function __construct() {
    * explicitly forbids access.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   isNeutral() will be TRUE.
    */
-  public static function create() {
-    return new static();
+  public static function createNeutral() {
+    return new AccessResultNeutral();
   }
 
   /**
-   * Convenience method, creates an AccessResult object and calls allow().
+   * Creates an AccessResultInterface object wth isAllowed() === TRUE.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   isAllowed() will be TRUE.
    */
-  public static function allowed() {
-    return static::create()->allow();
+  public static function createAllowed() {
+    return new AccessResultAllowed();
   }
 
   /**
-   * Convenience method, creates an AccessResult object and calls forbid().
+   * Creates a forbidden access result.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   isForbidden() will be TRUE.
    */
-  public static function forbidden() {
-    return static::create()->forbid();
+  public static function createForbidden() {
+    return new AccessResultForbidden();
   }
 
   /**
-   * Convenience method, creates an AccessResult object and calls allowIf().
+   * Creates an allowed or neutral access result.
    *
    * @param bool $condition
-   *   The condition to evaluate. If TRUE, ::allow() will be called.
+   *   The condition to evaluate.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   If $condition is TRUE, isAlowed() will be TRUE, otherwise isNeutral()
+   *   will be TRUE.
    */
   public static function allowedIf($condition) {
-    return static::create()->allowIf($condition);
+    return $condition ? static::createAllowed() : static::createNeutral();
   }
 
   /**
-   * Convenience method, creates an AccessResult object and calls forbiddenIf().
+   * Creates a forbidden or neutral access result.
    *
    * @param bool $condition
-   *   The condition to evaluate. If TRUE, ::forbid() will be called.
+   *   The condition to evaluate.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   If $condition is TRUE, isForbidden() will be TRUE, otherwise isNeutral()
+   *   will be TRUE.
    */
   public static function forbiddenIf($condition) {
-    return static::create()->forbidIf($condition);
+    return $condition ? static::createForbidden(): static::createNeutral();
   }
 
   /**
-   * Convenience method, creates an AccessResult object and calls allowIfHasPermission().
+   * Creates an allowed access result if the permission is present, neutral otherwise.
    *
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The account for which to check a permission.
@@ -153,83 +135,32 @@ public static function forbiddenIf($condition) {
    *   The permission to check for.
    *
    * @return \Drupal\Core\Access\AccessResult
+   *   If the account has the permission, isAlowed() will be TRUE, otherwise
+   *   isNeutral() will be TRUE.
    */
   public static function allowedIfHasPermission(AccountInterface $account, $permission) {
-    return static::create()->allowIfHasPermission($account, $permission);
+    return static::allowedIf($account->hasPermission($permission))->cachePerRole();
   }
 
   /**
    * {@inheritdoc}
    */
   public function isAllowed() {
-    return $this->value === static::ALLOW;
+    return FALSE;
   }
 
   /**
    * {@inheritdoc}
    */
   public function isForbidden() {
-    return $this->value === static::KILL;
+    return FALSE;
   }
 
   /**
-   * Explicitly allows access.
-   *
-   * @return $this
+   * {@inheritdoc}
    */
-  public function allow() {
-    $this->value = static::ALLOW;
-    return $this;
-  }
-
-  /**
-   * Explicitly forbids access.
-   *
-   * @return $this
-   */
-  public function forbid() {
-    $this->value = static::KILL;
-    return $this;
-  }
-
-  /**
-   * Neither explicitly allows nor explicitly forbids access.
-   *
-   * @return $this
-   */
-  public function resetAccess() {
-    $this->value = static::DENY;
-    return $this;
-  }
-
-  /**
-   * Conditionally calls ::allow().
-   *
-   * @param bool $condition
-   *   The condition to evaluate. If TRUE, ::allow() will be called.
-   *
-   * @return $this
-   */
-  public function allowIf($condition) {
-    if ($condition) {
-      $this->allow();
-    }
-    return $this;
-  }
-
-  /**
-   * Conditionally calls ::forbid().
-   *
-   * @param bool $condition
-   *   The condition to evaluate. If TRUE, ::forbid() will be called.
-   *
-   * @return $this
-   */
-  public function forbidIf($condition) {
-    if ($condition) {
-      $this->forbid();
-    }
-    return $this;
+  public function isNeutral() {
+    return FALSE;
   }
 
   /**
@@ -392,67 +323,43 @@ public function cacheUntilEntityChanges(EntityInterface $entity) {
   }
 
   /**
-   * Convenience method, checks permission and calls ::cachePerRole().
-   *
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The account for which to check a permission.
-   * @param string $permission
-   *   The permission to check for.
-   *
-   * @return $this
-   */
-  public function allowIfHasPermission(AccountInterface $account, $permission) {
-    $this->allowIf($account->hasPermission($permission))->cachePerRole();
-    return $this;
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function orIf(AccessResultInterface $other) {
-    // If this AccessResult already is forbidden, then that already is the
-    // conclusion. We can completely disregard $other.
-    if ($this->isForbidden()) {
-      return $this;
+    if ($this->isForbidden() || $other->isForbidden()) {
+      $result = static::createForbidden();
+    }
+    elseif ($this->isAllowed() || $other->isAllowed()) {
+      $result = static::createAllowed();
     }
-    // Otherwise, we make this AccessResult forbidden if the other is, or
-    // allowed if the other is, and we merge in the cacheability metadata if the
-    // other access result also has cacheability metadata.
     else {
-      if ($other->isForbidden()) {
-        $this->forbid();
-      }
-      else if ($other->isAllowed()) {
-        $this->allow();
-      }
-      $this->mergeCacheabilityMetadata($other);
-      return $this;
+      $result = static::createNeutral();
     }
+    $result->mergeCacheabilityMetadata($this);
+    if (!$this->isForbidden()) {
+      $result->mergeCacheabilityMetadata($other);
+    }
+    return $result;
   }
 
   /**
    * {@inheritdoc}
    */
   public function andIf(AccessResultInterface $other) {
-    // If this AccessResult already is forbidden or is merely not explicitly
-    // allowed, then that already is the conclusion. We can completely disregard
-    // $other.
-    if ($this->isForbidden() || !$this->isAllowed()) {
-      return $this;
+    if ($this->isForbidden() || $other->isForbidden()) {
+      $result = static::createForbidden();
+    }
+    elseif ($this->isAllowed() && $other->isAllowed()) {
+      $result = static::createAllowed();
     }
-    // Otherwise, we make this AccessResult forbidden if the other is, or not
-    // explicitly allowed if the other isn't, and we merge in the cacheability
-    // metadata if the other access result also has cacheability metadata.
     else {
-      if ($other->isForbidden()) {
-        $this->forbid();
-      }
-      else if (!$other->isAllowed()) {
-        $this->resetAccess();
-      }
-      $this->mergeCacheabilityMetadata($other);
-      return $this;
+      $result = static::createNeutral();
     }
+    $result->mergeCacheabilityMetadata($this);
+    if ($this->isAllowed()) {
+      $result->mergeCacheabilityMetadata($other);
+    }
+    return $result;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Access/AccessResultAllowed.php b/core/lib/Drupal/Core/Access/AccessResultAllowed.php
new file mode 100644
index 0000000..f9e892c
--- /dev/null
+++ b/core/lib/Drupal/Core/Access/AccessResultAllowed.php
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Access\AccessResultAllowed.
+ */
+
+namespace Drupal\Core\Access;
+
+class AccessResultAllowed extends AccessResult {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isAllowed() {
+    return TRUE;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Access/AccessResultForbidden.php b/core/lib/Drupal/Core/Access/AccessResultForbidden.php
new file mode 100644
index 0000000..ca57d77
--- /dev/null
+++ b/core/lib/Drupal/Core/Access/AccessResultForbidden.php
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Access\AccessResultForbidden.
+ */
+
+namespace Drupal\Core\Access;
+
+class AccessResultForbidden extends AccessResult {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isForbidden() {
+    return TRUE;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Access/AccessResultInterface.php b/core/lib/Drupal/Core/Access/AccessResultInterface.php
index 5e6f5bc..678a256 100644
--- a/core/lib/Drupal/Core/Access/AccessResultInterface.php
+++ b/core/lib/Drupal/Core/Access/AccessResultInterface.php
@@ -23,12 +23,10 @@
  * would never enter the else-statement and hence introduce a critical security
  * issue.
  *
- * Note: you can check whether access is neither explicitly allowed nor
- * explicitly forbidden:
- *
- * @code
- * $no_opinion = !$access->isAllowed() && !$access->isForbidden();
- * @endcode
+ * Objects implementing this interface are using Kleene's weak three-valued
+ * logic with the isAllowed() state being TRUE, the isForbidden() state being
+ * the intermediate truth value and isNeutral() being FALSE. See
+ * http://en.wikipedia.org/wiki/Many-valued_logic for more.
  */
 interface AccessResultInterface {
 
@@ -36,43 +34,56 @@
    * Checks whether this access result indicates access is explicitly allowed.
    *
    * @return bool
+   *   When TRUE then isForbidden() and isNeutral() is FALSE.
    */
   public function isAllowed();
 
   /**
    * Checks whether this access result indicates access is explicitly forbidden.
    *
+   * This is a kill switch -- both orIf and andIf will result in isForbidden()
+   * if either results are isForbidden().
+   *
    * @return bool
+   *   When TRUE then isAllowed() and isNeutral() is FALSE.
    */
   public function isForbidden();
 
   /**
+   * Checks whether this access result indicates access is not yet determined.
+   *
+   * @return bool
+   *   When TRUE then isAllowed() and isForbidden() is FALSE.
+   */
+  public function isNeutral();
+
+  /**
    * Combine this access result with another using OR.
    *
    * When OR-ing two access results, the result is:
    * - isForbidden() in either ⇒ isForbidden()
-   * - isAllowed() in either ⇒ isAllowed()
-   * - neither isForbidden() nor isAllowed() => !isAllowed() && !isForbidden()
+   * - otherwise if isAllowed() in either ⇒ isAllowed()
+   * - otherwise both must be isNeutral() ⇒ isNeutral()
    *
    * @param \Drupal\Core\Access\AccessResultInterface $other
    *   The other access result to OR this one with.
    *
-   * @return $this
+   * @return \Drupal\Core\Access\AccessResultInterface
    */
   public function orIf(AccessResultInterface $other);
 
   /**
    * Combine this access result with another using AND.
    *
-   * When OR-ing two access results, the result is:
+   * When AND-ing two access results, the result is:
    * - isForbidden() in either ⇒ isForbidden()
-   * - isAllowed() in both ⇒ isAllowed()
-   * - neither isForbidden() nor isAllowed() => !isAllowed() && !isForbidden()
+   * - otherwise, if isAllowed() in both ⇒ isAllowed()
+   * - otherwise, one of them is isNeutral()  ⇒ isNeutral()
    *
    * @param \Drupal\Core\Access\AccessResultInterface $other
    *   The other access result to AND this one with.
    *
-   * @return $this
+   * @return \Drupal\Core\Access\AccessResultInterface
    */
   public function andIf(AccessResultInterface $other);
 
diff --git a/core/lib/Drupal/Core/Access/AccessResultNeutral.php b/core/lib/Drupal/Core/Access/AccessResultNeutral.php
new file mode 100644
index 0000000..030ebda
--- /dev/null
+++ b/core/lib/Drupal/Core/Access/AccessResultNeutral.php
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Access\AccessResultNeutral.
+ */
+
+namespace Drupal\Core\Access;
+
+class AccessResultNeutral extends AccessResult {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isNeutral() {
+    return TRUE;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Access/CsrfAccessCheck.php b/core/lib/Drupal/Core/Access/CsrfAccessCheck.php
index 9ab1911..8052d9b 100644
--- a/core/lib/Drupal/Core/Access/CsrfAccessCheck.php
+++ b/core/lib/Drupal/Core/Access/CsrfAccessCheck.php
@@ -49,17 +49,16 @@ public function __construct(CsrfTokenGenerator $csrf_token) {
    *   The access result.
    */
   public function access(Route $route, Request $request) {
-    // Not cacheable because the CSRF token is highly dynamic.
-    $access = AccessResult::create()->setCacheable(FALSE);
     // @todo Remove dependency on the internal _system_path attribute:
     //   https://www.drupal.org/node/2293501.
     if ($this->csrfToken->validate($request->query->get('token'), $request->attributes->get('_system_path'))) {
-      $access->allow();
+      $result = AccessResult::createAllowed();
     }
     else {
-      $access->forbid();
+      $result = AccessResult::createForbidden();
     }
-    return $access;
+    // Not cacheable because the CSRF token is highly dynamic.
+    return $result->setCacheable(FALSE);
   }
 
 }
diff --git a/core/lib/Drupal/Core/Access/DefaultAccessCheck.php b/core/lib/Drupal/Core/Access/DefaultAccessCheck.php
index 6e27a51..96ce23a 100644
--- a/core/lib/Drupal/Core/Access/DefaultAccessCheck.php
+++ b/core/lib/Drupal/Core/Access/DefaultAccessCheck.php
@@ -26,13 +26,13 @@ class DefaultAccessCheck implements RoutingAccessInterface {
    */
   public function access(Route $route) {
     if ($route->getRequirement('_access') === 'TRUE') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     elseif ($route->getRequirement('_access') === 'FALSE') {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
     else {
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/lib/Drupal/Core/Block/BlockBase.php b/core/lib/Drupal/Core/Block/BlockBase.php
index 6266502..c3a178f 100644
--- a/core/lib/Drupal/Core/Block/BlockBase.php
+++ b/core/lib/Drupal/Core/Block/BlockBase.php
@@ -170,7 +170,7 @@ public function access(AccountInterface $account) {
     // in order to fix that, we need condition plugins to return cache contexts,
     // otherwise it will be impossible to determine by which cache contexts the
     // result should be varied.
-    $access = AccessResult::create()->setCacheable(FALSE);
+    $access = AccessResult::createNeutral()->setCacheable(FALSE);
     if ($this->resolveConditions($conditions, 'and', $contexts, $mappings) === FALSE) {
       $access->forbid();
       return $access;
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
index 855be68..e85db56 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
@@ -55,7 +55,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
     }
     // No opinion, so other access checks should decide if access should be
     // allowed or not.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
index e655880..e08e27e 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
@@ -76,7 +76,7 @@ public function access(EntityInterface $entity, $operation, $langcode = Language
     );
 
     $return = $this->processAccessHookResults($access);
-    if (!$return->isAllowed() && !$return->isForbidden()) {
+    if ($return->isNeutral()) {
       // No module had an opinion about the access, so let's the access
       // handler check access.
       $return->orIf($this->checkAccess($entity, $operation, $langcode, $account));
@@ -102,7 +102,7 @@ public function access(EntityInterface $entity, $operation, $langcode = Language
   protected function processAccessHookResults(array $access) {
     // No results means no opinion.
     if (empty($access)) {
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
 
     /** @var \Drupal\Core\Access\AccessResultInterface $result */
@@ -134,14 +134,14 @@ protected function processAccessHookResults(array $access) {
    */
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation == 'delete' && $entity->isNew()) {
-      return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+      return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
     }
     if ($admin_permission = $this->entityType->getAdminPermission()) {
       return AccessResult::allowedIfHasPermission($account, $this->entityType->getAdminPermission());
     }
     else {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
@@ -231,7 +231,7 @@ public function createAccess($entity_bundle = NULL, AccountInterface $account =
     );
 
     $return = $this->processAccessHookResults($access);
-    if (!$return->isAllowed() && !$return->isForbidden()) {
+    if ($return->isNeutral()) {
       // No module had an opinion about the access, so let's the access
       // handler check create access.
       $return->orIf($this->checkCreateAccess($account, $context, $entity_bundle));
@@ -263,7 +263,7 @@ protected function checkCreateAccess(AccountInterface $account, array $context,
     }
     else {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
@@ -290,7 +290,7 @@ public function fieldAccess($operation, FieldDefinitionInterface $field_definiti
     $account = $this->prepareUser($account);
 
     // Get the default access restriction that lives within this field.
-    $default = $items ? $items->defaultAccess($operation, $account) : AccessResult::allowed();
+    $default = $items ? $items->defaultAccess($operation, $account) : AccessResult::createAllowed();
 
     // Get the default access restriction as specified by the access control
     // handler.
@@ -339,7 +339,7 @@ public function fieldAccess($operation, FieldDefinitionInterface $field_definiti
    *   TRUE if access is allowed, FALSE otherwise.
    */
   protected function checkFieldAccess($operation, FieldDefinitionInterface $field_definition, AccountInterface $account, FieldItemListInterface $items = NULL) {
-    return AccessResult::allowed();
+    return AccessResult::createAllowed();
   }
 
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
index 830cf8f..0bc5e02 100644
--- a/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
@@ -67,7 +67,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
       }
       // If we were unable to replace all placeholders, deny access.
       if (strpos($bundle, '{') !== FALSE) {
-        return AccessResult::create();
+        return AccessResult::createNeutral();
       }
     }
     return $this->entityManager->getAccessControlHandler($entity_type)->createAccess($bundle, $account, [], TRUE);
diff --git a/core/lib/Drupal/Core/Field/FieldItemList.php b/core/lib/Drupal/Core/Field/FieldItemList.php
index 69daf67..3518cf3 100644
--- a/core/lib/Drupal/Core/Field/FieldItemList.php
+++ b/core/lib/Drupal/Core/Field/FieldItemList.php
@@ -198,7 +198,7 @@ public function access($operation = 'view', AccountInterface $account = NULL, $r
    */
   public function defaultAccess($operation = 'view', AccountInterface $account = NULL) {
     // Grant access per default.
-    return AccessResult::allowed();
+    return AccessResult::createAllowed();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkBase.php b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
index b09bfa9..1311336 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkBase.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
@@ -77,7 +77,7 @@ public function isExpanded() {
    * {@inheritdoc}
    */
   public function isResettable() {
-    return AccessResult::forbidden();
+    return AccessResult::createForbidden();
   }
 
   /**
diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index 43f03e9..8f86511 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -159,7 +159,7 @@ function hook_block_access(\Drupal\block\Entity\Block $block, $operation, \Drupa
   }
 
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
diff --git a/core/modules/block/src/BlockAccessControlHandler.php b/core/modules/block/src/BlockAccessControlHandler.php
index 8bfa365..e0b1801 100644
--- a/core/modules/block/src/BlockAccessControlHandler.php
+++ b/core/modules/block/src/BlockAccessControlHandler.php
@@ -30,7 +30,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
 
     // Don't grant access to disabled blocks.
     if (!$entity->status()) {
-      return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+      return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
     }
     else {
       // Delegate to the plugin.
diff --git a/core/modules/block_content/src/BlockContentAccessControlHandler.php b/core/modules/block_content/src/BlockContentAccessControlHandler.php
index e886432..9704de5 100644
--- a/core/modules/block_content/src/BlockContentAccessControlHandler.php
+++ b/core/modules/block_content/src/BlockContentAccessControlHandler.php
@@ -24,7 +24,7 @@ class BlockContentAccessControlHandler extends EntityAccessControlHandler {
    */
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation === 'view') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     return parent::checkAccess($entity, $operation, $langcode, $account);
   }
diff --git a/core/modules/comment/src/CommentAccessControlHandler.php b/core/modules/comment/src/CommentAccessControlHandler.php
index a31f5d7..2fa157c 100644
--- a/core/modules/comment/src/CommentAccessControlHandler.php
+++ b/core/modules/comment/src/CommentAccessControlHandler.php
@@ -26,7 +26,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     /** @var \Drupal\Core\Entity\EntityInterface|\Drupal\user\EntityOwnerInterface $entity */
 
     if ($account->hasPermission('administer comments')) {
-      $access = AccessResult::allowed()->cachePerRole();
+      $access = AccessResult::createAllowed()->cachePerRole();
       return ($operation != 'view') ? $access : $access->andIf($entity->getCommentedEntity()->access($operation, $account, TRUE));
     }
 
@@ -40,7 +40,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
 
       default:
         // No opinion.
-        return AccessResult::create()->cachePerRole();
+        return AccessResult::createNeutral()->cachePerRole();
     }
   }
 
diff --git a/core/modules/config/tests/config_test/src/ConfigTestAccessControlHandler.php b/core/modules/config/tests/config_test/src/ConfigTestAccessControlHandler.php
index 4508ce2..d756cdf 100644
--- a/core/modules/config/tests/config_test/src/ConfigTestAccessControlHandler.php
+++ b/core/modules/config/tests/config_test/src/ConfigTestAccessControlHandler.php
@@ -23,14 +23,14 @@ class ConfigTestAccessControlHandler extends EntityAccessControlHandler {
    * {@inheritdoc}
    */
   public function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
-    return AccessResult::allowed();
+    return AccessResult::createAllowed();
   }
 
   /**
    * {@inheritdoc}
    */
   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
-    return AccessResult::allowed();
+    return AccessResult::createAllowed();
   }
 
 }
diff --git a/core/modules/contact/src/Access/ContactPageAccess.php b/core/modules/contact/src/Access/ContactPageAccess.php
index 0a7eae7..c4d3595 100644
--- a/core/modules/contact/src/Access/ContactPageAccess.php
+++ b/core/modules/contact/src/Access/ContactPageAccess.php
@@ -62,16 +62,16 @@ public function access(UserInterface $user, AccountInterface $account) {
 
     // Anonymous users cannot have contact forms.
     if ($contact_account->isAnonymous()) {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     // Users may not contact themselves.
     if ($account->id() == $contact_account->id()) {
-      return AccessResult::forbidden()->cachePerUser();
+      return AccessResult::createForbidden()->cachePerUser();
     }
 
     // User administrators should always have access to personal contact forms.
-    $access = AccessResult::create()->cachePerRole();
+    $access = AccessResult::createNeutral()->cachePerRole();
     if ($account->hasPermission('administer users')) {
       return $access->allow();
     }
diff --git a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
index 37349b9..ac16957 100644
--- a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
+++ b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
@@ -106,7 +106,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/modules/content_translation/src/Access/ContentTranslationOverviewAccess.php b/core/modules/content_translation/src/Access/ContentTranslationOverviewAccess.php
index 2151c82..d5f1f9b 100644
--- a/core/modules/content_translation/src/Access/ContentTranslationOverviewAccess.php
+++ b/core/modules/content_translation/src/Access/ContentTranslationOverviewAccess.php
@@ -78,6 +78,6 @@ public function access(RouteMatchInterface $route_match, AccountInterface $accou
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 }
diff --git a/core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php b/core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php
index 7ea7546..20c57d2 100644
--- a/core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php
+++ b/core/modules/content_translation/tests/src/Unit/Access/ContentTranslationManageAccessCheckTest.php
@@ -32,7 +32,7 @@ public function testCreateAccess() {
     $translation_handler = $this->getMock('\Drupal\content_translation\ContentTranslationHandlerInterface');
     $translation_handler->expects($this->once())
       ->method('getTranslationAccess')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
 
     $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
     $entity_manager->expects($this->once())
diff --git a/core/modules/field/src/FieldInstanceConfigAccessControlHandler.php b/core/modules/field/src/FieldInstanceConfigAccessControlHandler.php
index eb4a37f..efe0964 100644
--- a/core/modules/field/src/FieldInstanceConfigAccessControlHandler.php
+++ b/core/modules/field/src/FieldInstanceConfigAccessControlHandler.php
@@ -26,7 +26,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     if ($operation == 'delete') {
       $field_storage_entity = $entity->getFieldStorageDefinition();
       if ($field_storage_entity->isLocked()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($field_storage_entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($field_storage_entity);
       }
       else {
         return AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->entity_type . ' fields')->cacheUntilEntityChanges($field_storage_entity);
diff --git a/core/modules/field/tests/modules/field_test/field_test.field.inc b/core/modules/field/tests/modules/field_test/field_test.field.inc
index b1a5589..6b3d1d4 100644
--- a/core/modules/field/tests/modules/field_test/field_test.field.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.field.inc
@@ -41,7 +41,7 @@ function field_test_default_value(ContentEntityInterface $entity, FieldDefinitio
  */
 function field_test_entity_field_access($operation, FieldDefinitionInterface $field_definition, AccountInterface $account, FieldItemListInterface $items = NULL) {
   if ($field_definition->getName() == "field_no_{$operation}_access") {
-    return AccessResult::forbidden();
+    return AccessResult::createForbidden();
   }
 
   // Only grant view access to test_view_field fields when the user has
@@ -50,5 +50,5 @@ function field_test_entity_field_access($operation, FieldDefinitionInterface $fi
     return AccessResult::forbiddenIf(!$account->hasPermission('view test_view_field content'))->cachePerRole();
   }
 
-  return AccessResult::allowed();
+  return AccessResult::createAllowed();
 }
diff --git a/core/modules/field_ui/src/Access/FormModeAccessCheck.php b/core/modules/field_ui/src/Access/FormModeAccessCheck.php
index c0afbb4..a0e15e6 100644
--- a/core/modules/field_ui/src/Access/FormModeAccessCheck.php
+++ b/core/modules/field_ui/src/Access/FormModeAccessCheck.php
@@ -76,7 +76,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
         $visibility = $entity_display->status();
       }
 
-      $access = AccessResult::create();
+      $access = AccessResult::createNeutral();
       if ($form_mode_name != 'default' && $entity_display) {
         $access->cacheUntilEntityChanges($entity_display);
       }
@@ -89,7 +89,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
     }
     else {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/field_ui/src/Access/ViewModeAccessCheck.php b/core/modules/field_ui/src/Access/ViewModeAccessCheck.php
index 3fe035f..73522e5 100644
--- a/core/modules/field_ui/src/Access/ViewModeAccessCheck.php
+++ b/core/modules/field_ui/src/Access/ViewModeAccessCheck.php
@@ -76,7 +76,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
         $visibility = $entity_display->status();
       }
 
-      $access = AccessResult::create();
+      $access = AccessResult::createNeutral();
       if ($view_mode_name != 'default' && $entity_display) {
         $access->cacheUntilEntityChanges($entity_display);
       }
@@ -89,7 +89,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
     }
     else {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/file/src/FileAccessControlHandler.php b/core/modules/file/src/FileAccessControlHandler.php
index cd87b19..c3ef43f 100644
--- a/core/modules/file/src/FileAccessControlHandler.php
+++ b/core/modules/file/src/FileAccessControlHandler.php
@@ -38,7 +38,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
   /**
diff --git a/core/modules/filter/src/FilterFormatAccessControlHandler.php b/core/modules/filter/src/FilterFormatAccessControlHandler.php
index 025cb87..9534ab8 100644
--- a/core/modules/filter/src/FilterFormatAccessControlHandler.php
+++ b/core/modules/filter/src/FilterFormatAccessControlHandler.php
@@ -28,7 +28,7 @@ protected function checkAccess(EntityInterface $filter_format, $operation, $lang
     // All users are allowed to use the fallback filter.
     if ($operation == 'use') {
       if ($filter_format->isFallbackFormat()) {
-        return AccessResult::allowed();
+        return AccessResult::createAllowed();
       }
       else {
         return AccessResult::allowedIfHasPermission($account, $filter_format->getPermissionName());
@@ -37,13 +37,13 @@ protected function checkAccess(EntityInterface $filter_format, $operation, $lang
 
     // The fallback format may not be disabled.
     if ($operation == 'disable' && $filter_format->isFallbackFormat()) {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     // We do not allow filter formats to be deleted through the UI, because that
     // would render any content that uses them unusable.
     if ($operation == 'delete') {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     if (in_array($operation, array('disable', 'update'))) {
@@ -51,7 +51,7 @@ protected function checkAccess(EntityInterface $filter_format, $operation, $lang
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/modules/filter/src/Tests/FilterFormatAccessTest.php b/core/modules/filter/src/Tests/FilterFormatAccessTest.php
index b3d7b55..7f7155d 100644
--- a/core/modules/filter/src/Tests/FilterFormatAccessTest.php
+++ b/core/modules/filter/src/Tests/FilterFormatAccessTest.php
@@ -123,11 +123,11 @@ function testFormatPermissions() {
     // which they were granted access.
     $fallback_format = entity_load('filter_format', filter_fallback_format());
     $this->assertTrue($this->allowed_format->access('use', $this->web_user), 'A regular user has access to use a text format they were granted access to.');
-    $this->assertEqual(AccessResult::allowed()->cachePerRole(), $this->allowed_format->access('use', $this->web_user, TRUE), 'A regular user has access to use a text format they were granted access to.');
+    $this->assertEqual(AccessResult::createAllowed()->cachePerRole(), $this->allowed_format->access('use', $this->web_user, TRUE), 'A regular user has access to use a text format they were granted access to.');
     $this->assertFalse($this->disallowed_format->access('use', $this->web_user), 'A regular user does not have access to use a text format they were not granted access to.');
-    $this->assertEqual(AccessResult::create()->cachePerRole(), $this->disallowed_format->access('use', $this->web_user, TRUE), 'A regular user does not have access to use a text format they were not granted access to.');
+    $this->assertEqual(AccessResult::createNeutral()->cachePerRole(), $this->disallowed_format->access('use', $this->web_user, TRUE), 'A regular user does not have access to use a text format they were not granted access to.');
     $this->assertTrue($fallback_format->access('use', $this->web_user), 'A regular user has access to use the fallback format.');
-    $this->assertEqual(AccessResult::allowed(), $fallback_format->access('use', $this->web_user, TRUE), 'A regular user has access to use the fallback format.');
+    $this->assertEqual(AccessResult::createAllowed(), $fallback_format->access('use', $this->web_user, TRUE), 'A regular user has access to use the fallback format.');
 
     // Perform similar checks as above, but now against the entire list of
     // available formats for this user.
diff --git a/core/modules/language/src/LanguageAccessControlHandler.php b/core/modules/language/src/LanguageAccessControlHandler.php
index e0d0ace..3067874 100644
--- a/core/modules/language/src/LanguageAccessControlHandler.php
+++ b/core/modules/language/src/LanguageAccessControlHandler.php
@@ -31,7 +31,7 @@ public function checkAccess(EntityInterface $entity, $operation, $langcode, Acco
 
       default:
         // No opinion.
-        return AccessResult::create();
+        return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
index f562cfb..8bd9446 100644
--- a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
+++ b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
@@ -55,14 +55,14 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     switch ($operation) {
       case 'view':
         // There is no direct view.
-        return AccessResult::create();
+        return AccessResult::createNeutral();
 
       case 'update':
         if (!$account->hasPermission('administer menu')) {
-          return AccessResult::create()->cachePerRole();
+          return AccessResult::createNeutral()->cachePerRole();
         }
         else {
-          $access = AccessResult::create()->cachePerRole()->cacheUntilEntityChanges($entity);
+          $access = AccessResult::createNeutral()->cachePerRole()->cacheUntilEntityChanges($entity);
           // If there is a URL, this is an external link so always accessible.
           if ($entity->getUrl()) {
             return $access->allow();
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index 3fecffa..92455b5 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -332,7 +332,7 @@ function hook_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Se
 
     case 'update':
       if ($account->hasPermission('edit any ' . $type . ' content', $account)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
       else {
         return AccessResult::allowedIf($account->hasPermission('edit own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
@@ -340,7 +340,7 @@ function hook_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Se
 
     case 'delete':
       if ($account->hasPermission('delete any ' . $type . ' content', $account)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
       else {
         return AccessResult::allowedIf($account->hasPermission('delete own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
@@ -348,7 +348,7 @@ function hook_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Se
 
     default:
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
   }
 }
 
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index e252d7e..b80b02e 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1027,7 +1027,7 @@ function node_node_access(NodeInterface $node, $op, $account) {
 
     case 'update':
       if ($account->hasPermission('edit any ' . $type . ' content', $account)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
       else {
         return AccessResult::allowedIf($account->hasPermission('edit own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
@@ -1035,7 +1035,7 @@ function node_node_access(NodeInterface $node, $op, $account) {
 
     case 'delete':
       if ($account->hasPermission('delete any ' . $type . ' content', $account)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
       else {
         return AccessResult::allowedIf($account->hasPermission('delete own ' . $type . ' content', $account) && ($account->id() == $node->getOwnerId()))->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
@@ -1043,7 +1043,7 @@ function node_node_access(NodeInterface $node, $op, $account) {
 
     default:
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
   }
 }
 
diff --git a/core/modules/node/src/Access/NodeAddAccessCheck.php b/core/modules/node/src/Access/NodeAddAccessCheck.php
index 5d82dac..9015ae5 100644
--- a/core/modules/node/src/Access/NodeAddAccessCheck.php
+++ b/core/modules/node/src/Access/NodeAddAccessCheck.php
@@ -61,7 +61,7 @@ public function access(AccountInterface $account, NodeTypeInterface $node_type =
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/modules/node/src/NodeAccessControlHandler.php b/core/modules/node/src/NodeAccessControlHandler.php
index 2268a60..f02c348 100644
--- a/core/modules/node/src/NodeAccessControlHandler.php
+++ b/core/modules/node/src/NodeAccessControlHandler.php
@@ -63,11 +63,11 @@ public function access(EntityInterface $entity, $operation, $langcode = Language
     $account = $this->prepareUser($account);
 
     if ($account->hasPermission('bypass node access')) {
-      $result = AccessResult::allowed()->cachePerRole();
+      $result = AccessResult::createAllowed()->cachePerRole();
       return $return_as_object ? $result : $result->isAllowed();
     }
     if (!$account->hasPermission('access content')) {
-      $result = AccessResult::forbidden()->cachePerRole();
+      $result = AccessResult::createForbidden()->cachePerRole();
       return $return_as_object ? $result : $result->isAllowed();
     }
     $result = parent::access($entity, $operation, $langcode, $account, TRUE)->cachePerRole();
@@ -81,11 +81,11 @@ public function createAccess($entity_bundle = NULL, AccountInterface $account =
     $account = $this->prepareUser($account);
 
     if ($account->hasPermission('bypass node access')) {
-      $result = AccessResult::allowed()->cachePerRole();
+      $result = AccessResult::createAllowed()->cachePerRole();
       return $return_as_object ? $result : $result->isAllowed();
     }
     if (!$account->hasPermission('access content')) {
-      $result = AccessResult::forbidden()->cachePerRole();
+      $result = AccessResult::createForbidden()->cachePerRole();
       return $return_as_object ? $result : $result->isAllowed();
     }
 
@@ -106,7 +106,7 @@ protected function checkAccess(EntityInterface $node, $operation, $langcode, Acc
 
     // Check if authors can view their own unpublished nodes.
     if ($operation === 'view' && !$status && $account->hasPermission('view own unpublished content') && $account->isAuthenticated() && $account->id() == $uid) {
-      return AccessResult::allowed()->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
+      return AccessResult::createAllowed()->cachePerRole()->cachePerUser()->cacheUntilEntityChanges($node);
     }
 
     // If no module specified either ALLOW or KILL, we fall back to the
@@ -123,7 +123,7 @@ protected function checkAccess(EntityInterface $node, $operation, $langcode, Acc
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
   /**
@@ -147,14 +147,14 @@ protected function checkFieldAccess($operation, FieldDefinitionInterface $field_
     // No user can change read only fields.
     $read_only_fields = array('changed', 'revision_timestamp', 'revision_uid');
     if ($operation == 'edit' && in_array($field_definition->getName(), $read_only_fields)) {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     // Users have access to the revision_log field either if they have
     // administrative permissions or if the new revision option is enabled.
     if ($operation == 'edit' && $field_definition->getName() == 'revision_log') {
       if ($account->hasPermission('administer nodes')) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
       return AccessResult::allowedIf($items->getEntity()->type->entity->isNewRevision())->cachePerRole();
     }
diff --git a/core/modules/node/src/NodeGrantDatabaseStorage.php b/core/modules/node/src/NodeGrantDatabaseStorage.php
index 78b96b5..d324c99 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorage.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorage.php
@@ -59,7 +59,7 @@ public function access(NodeInterface $node, $operation, $langcode, AccountInterf
     // no point in querying the database for access grants.
     if (!$this->moduleHandler->getImplementations('node_grants') || !$node->id()) {
       // No opinion.
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
 
     // Check the database for potential access grants.
@@ -94,10 +94,10 @@ public function access(NodeInterface $node, $operation, $langcode, AccountInterf
     // it is theoretically cacheable, because we don't have the necessary meta-
     // data to know it for a fact.
     if ($query->execute()->fetchField()) {
-      return AccessResult::allowed()->setCacheable(FALSE);
+      return AccessResult::createAllowed()->setCacheable(FALSE);
     }
     else {
-      return AccessResult::forbidden()->setCacheable(FALSE);
+      return AccessResult::createForbidden()->setCacheable(FALSE);
     }
   }
 
diff --git a/core/modules/node/src/NodeTypeAccessControlHandler.php b/core/modules/node/src/NodeTypeAccessControlHandler.php
index b358944..f2f56fa 100644
--- a/core/modules/node/src/NodeTypeAccessControlHandler.php
+++ b/core/modules/node/src/NodeTypeAccessControlHandler.php
@@ -25,7 +25,7 @@ class NodeTypeAccessControlHandler extends EntityAccessControlHandler {
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation == 'delete') {
       if ($entity->isLocked()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
       }
       else {
         return parent::checkAccess($entity, $operation, $langcode, $account)->cacheUntilEntityChanges($entity);
diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module
index 86fdbf1..fb7e14b 100644
--- a/core/modules/node/tests/modules/node_access_test/node_access_test.module
+++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module
@@ -164,8 +164,8 @@ function node_access_test_node_access(\Drupal\node\NodeInterface $node, $op, \Dr
   $secret_catalan = \Drupal::state()->get('node_access_test_secret_catalan') ?: 0;
   if ($secret_catalan && $langcode == 'ca') {
     // Make all Catalan content secret.
-    return AccessResult::forbidden()->setCacheable(FALSE);
+    return AccessResult::createForbidden()->setCacheable(FALSE);
   }
   // No opinion.
-  return AccessResult::create()->setCacheable(FALSE);
+  return AccessResult::createNeutral()->setCacheable(FALSE);
 }
diff --git a/core/modules/path/src/Plugin/Field/FieldType/PathFieldItemList.php b/core/modules/path/src/Plugin/Field/FieldType/PathFieldItemList.php
index 20c3810..5eca1df 100644
--- a/core/modules/path/src/Plugin/Field/FieldType/PathFieldItemList.php
+++ b/core/modules/path/src/Plugin/Field/FieldType/PathFieldItemList.php
@@ -21,7 +21,7 @@ class PathFieldItemList extends FieldItemList {
    */
   public function defaultAccess($operation = 'view', AccountInterface $account = NULL) {
     if ($operation == 'view') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     return AccessResult::allowedIf($account->hasPermission('create url aliases') || $account->hasPermission('administer url aliases'))->cachePerRole();
   }
diff --git a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
index 813ba45..1c33ae3 100644
--- a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
+++ b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
@@ -36,7 +36,7 @@ class EditEntityFieldAccessCheck implements AccessInterface, EditEntityFieldAcce
    */
   public function access(EntityInterface $entity, $field_name, $langcode, AccountInterface $account) {
     if (!$this->validateRequestAttributes($entity, $field_name, $langcode)) {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     return $this->accessEditEntityField($entity, $field_name);
diff --git a/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php b/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
index 7f5c4aa..ec89a5f 100644
--- a/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
+++ b/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
@@ -44,31 +44,31 @@ public function providerTestAccess() {
     $editable_entity = $this->createMockEntity();
     $editable_entity->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::allowed()->cachePerRole()));
+      ->will($this->returnValue(AccessResult::createAllowed()->cachePerRole()));
 
     $non_editable_entity = $this->createMockEntity();
     $non_editable_entity->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::create()->cachePerRole()));
+      ->will($this->returnValue(AccessResult::createNeutral()->cachePerRole()));
 
     $field_storage_with_access = $this->getMockBuilder('Drupal\field\Entity\FieldStorageConfig')
       ->disableOriginalConstructor()
       ->getMock();
     $field_storage_with_access->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $field_storage_without_access = $this->getMockBuilder('Drupal\field\Entity\FieldStorageConfig')
       ->disableOriginalConstructor()
       ->getMock();
     $field_storage_without_access->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::create()));
+      ->will($this->returnValue(AccessResult::createNeutral()));
 
     $data = array();
-    $data[] = array($editable_entity, $field_storage_with_access, AccessResult::allowed()->cachePerRole());
-    $data[] = array($non_editable_entity, $field_storage_with_access, AccessResult::create()->cachePerRole());
-    $data[] = array($editable_entity, $field_storage_without_access, AccessResult::create()->cachePerRole());
-    $data[] = array($non_editable_entity, $field_storage_without_access, AccessResult::create()->cachePerRole());
+    $data[] = array($editable_entity, $field_storage_with_access, AccessResult::createAllowed()->cachePerRole());
+    $data[] = array($non_editable_entity, $field_storage_with_access, AccessResult::createNeutral()->cachePerRole());
+    $data[] = array($editable_entity, $field_storage_without_access, AccessResult::createNeutral()->cachePerRole());
+    $data[] = array($non_editable_entity, $field_storage_without_access, AccessResult::createNeutral()->cachePerRole());
 
     return $data;
   }
@@ -110,7 +110,7 @@ public function testAccess(EntityInterface $entity, FieldStorageConfigInterface
   public function testAccessForbidden($field_name, $langcode) {
     $account = $this->getMock('Drupal\Core\Session\AccountInterface');
     $entity = $this->createMockEntity();
-    $this->assertEquals(AccessResult::forbidden(), $this->editAccessCheck->access($entity, $field_name, $langcode, $account));
+    $this->assertEquals(AccessResult::createForbidden(), $this->editAccessCheck->access($entity, $field_name, $langcode, $account));
   }
 
   /**
diff --git a/core/modules/rest/src/Access/CSRFAccessCheck.php b/core/modules/rest/src/Access/CSRFAccessCheck.php
index 563a0a4..be8597c 100644
--- a/core/modules/rest/src/Access/CSRFAccessCheck.php
+++ b/core/modules/rest/src/Access/CSRFAccessCheck.php
@@ -66,10 +66,10 @@ public function access(Request $request, AccountInterface $account) {
     ) {
       $csrf_token = $request->headers->get('X-CSRF-Token');
       if (!\Drupal::csrfToken()->validate($csrf_token, 'rest')) {
-        return AccessResult::forbidden()->setCacheable(FALSE);
+        return AccessResult::createForbidden()->setCacheable(FALSE);
       }
     }
     // Let other access checkers decide if the request is legit.
-    return AccessResult::allowed()->setCacheable(FALSE);
+    return AccessResult::createAllowed()->setCacheable(FALSE);
   }
 }
diff --git a/core/modules/search/src/SearchPageAccessControlHandler.php b/core/modules/search/src/SearchPageAccessControlHandler.php
index a0b9a97..f15ef2a 100644
--- a/core/modules/search/src/SearchPageAccessControlHandler.php
+++ b/core/modules/search/src/SearchPageAccessControlHandler.php
@@ -27,7 +27,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     /** @var $entity \Drupal\search\SearchPageInterface */
     if (in_array($operation, array('delete', 'disable'))) {
       if ($entity->isDefaultSearch()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
       }
       else {
         return parent::checkAccess($entity, $operation, $langcode, $account)->cacheUntilEntityChanges($entity);
@@ -35,13 +35,13 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     }
     if ($operation == 'view') {
       if (!$entity->status()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
       }
       $plugin = $entity->getPlugin();
       if ($plugin instanceof AccessibleInterface) {
         return $plugin->access($operation, $account, TRUE)->cacheUntilEntityChanges($entity);
       }
-      return AccessResult::allowed()->cacheUntilEntityChanges($entity);
+      return AccessResult::createAllowed()->cacheUntilEntityChanges($entity);
     }
     return parent::checkAccess($entity, $operation, $langcode, $account);
   }
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index 4954887..5ea8132 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -82,7 +82,7 @@ function shortcut_set_edit_access(ShortcutSetInterface $shortcut_set = NULL) {
 
   // Shortcut administrators can edit any set.
   if ($account->hasPermission('administer shortcuts')) {
-    return AccessResult::allowed()->cachePerRole();
+    return AccessResult::createAllowed()->cachePerRole();
   }
 
   // Sufficiently-privileged users can edit their currently displayed shortcut
@@ -107,30 +107,30 @@ function shortcut_set_switch_access($account = NULL) {
 
   if ($user->hasPermission('administer shortcuts')) {
     // Administrators can switch anyone's shortcut set.
-    return AccessResult::allowed()->cachePerRole();
+    return AccessResult::createAllowed()->cachePerRole();
   }
 
   if (!$user->hasPermission('access shortcuts')) {
     // The user has no permission to use shortcuts.
-    return AccessResult::create()->cachePerRole();
+    return AccessResult::createNeutral()->cachePerRole();
   }
 
   if (!$user->hasPermission('switch shortcut sets')) {
     // The user has no permission to switch anyone's shortcut set.
-    return AccessResult::create()->cachePerRole();
+    return AccessResult::createNeutral()->cachePerRole();
   }
 
   // Users with the 'switch shortcut sets' permission can switch their own
   // shortcuts sets.
   if (!isset($account)) {
-    return AccessResult::allowed()->cachePerRole();
+    return AccessResult::createAllowed()->cachePerRole();
   }
   else if ($user->id() == $account->id()) {
-    return AccessResult::allowed()->cachePerRole()->cachePerUser();
+    return AccessResult::createAllowed()->cachePerRole()->cachePerUser();
   }
 
   // No opinion.
-  return AccessResult::create()->cachePerRole();
+  return AccessResult::createNeutral()->cachePerRole();
 }
 
 /**
diff --git a/core/modules/shortcut/src/ShortcutAccessControlHandler.php b/core/modules/shortcut/src/ShortcutAccessControlHandler.php
index aee649c..1ae6770 100644
--- a/core/modules/shortcut/src/ShortcutAccessControlHandler.php
+++ b/core/modules/shortcut/src/ShortcutAccessControlHandler.php
@@ -61,7 +61,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     }
     // @todo Fix this bizarre code: how can a shortcut exist without a shortcut
     // set? The above if-test is unnecessary. See https://www.drupal.org/node/2339903.
-    return AccessResult::create()->cacheUntilEntityChanges($entity);
+    return AccessResult::createNeutral()->cacheUntilEntityChanges($entity);
   }
 
   /**
@@ -73,7 +73,7 @@ protected function checkCreateAccess(AccountInterface $account, array $context,
     }
     // @todo Fix this bizarre code: how can a shortcut exist without a shortcut
     // set? The above if-test is unnecessary. See https://www.drupal.org/node/2339903.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/modules/shortcut/src/ShortcutSetAccessControlHandler.php b/core/modules/shortcut/src/ShortcutSetAccessControlHandler.php
index 4968f04..cf4bcea 100644
--- a/core/modules/shortcut/src/ShortcutSetAccessControlHandler.php
+++ b/core/modules/shortcut/src/ShortcutSetAccessControlHandler.php
@@ -26,10 +26,10 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     switch ($operation) {
       case 'update':
         if ($account->hasPermission('administer shortcuts')) {
-          return AccessResult::allowed()->cachePerRole();
+          return AccessResult::createAllowed()->cachePerRole();
         }
         if (!$account->hasPermission('access shortcuts')) {
-          return AccessResult::create()->cachePerRole();
+          return AccessResult::createNeutral()->cachePerRole();
         }
         return AccessResult::allowedIf($account->hasPermission('customize shortcut links') && $entity == shortcut_current_displayed_set($account))->cachePerRole()->cacheUntilEntityChanges($entity);
 
@@ -38,7 +38,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
 
       default:
         // No opinion.
-        return AccessResult::create();
+        return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 09860a6..e8ac9e9 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -532,7 +532,7 @@
  */
 function hook_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account, $langcode) {
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -558,7 +558,7 @@ function hook_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operat
  */
 function hook_ENTITY_TYPE_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account, $langcode) {
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -584,7 +584,7 @@ function hook_ENTITY_TYPE_access(\Drupal\Core\Entity\EntityInterface $entity, $o
  */
 function hook_entity_create_access(\Drupal\Core\Session\AccountInterface $account, array $context, $entity_bundle) {
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -610,7 +610,7 @@ function hook_entity_create_access(\Drupal\Core\Session\AccountInterface $accoun
  */
 function hook_ENTITY_TYPE_create_access(\Drupal\Core\Session\AccountInterface $account, array $context, $entity_bundle) {
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
diff --git a/core/modules/system/src/Access/CronAccessCheck.php b/core/modules/system/src/Access/CronAccessCheck.php
index acb1401..9587477 100644
--- a/core/modules/system/src/Access/CronAccessCheck.php
+++ b/core/modules/system/src/Access/CronAccessCheck.php
@@ -27,12 +27,12 @@ class CronAccessCheck implements AccessInterface {
   public function access($key) {
     if ($key != \Drupal::state()->get('system.cron_key')) {
       \Drupal::logger('cron')->notice('Cron could not run because an invalid key was used.');
-      return AccessResult::forbidden()->setCacheable(FALSE);
+      return AccessResult::createForbidden()->setCacheable(FALSE);
     }
     elseif (\Drupal::state()->get('system.maintenance_mode')) {
       \Drupal::logger('cron')->notice('Cron could not run because the site is in maintenance mode.');
-      return AccessResult::forbidden()->setCacheable(FALSE);
+      return AccessResult::createForbidden()->setCacheable(FALSE);
     }
-    return AccessResult::allowed()->setCacheable(FALSE);
+    return AccessResult::createAllowed()->setCacheable(FALSE);
   }
 }
diff --git a/core/modules/system/src/Access/DbUpdateAccessCheck.php b/core/modules/system/src/Access/DbUpdateAccessCheck.php
index 5225a18..7eb829d 100644
--- a/core/modules/system/src/Access/DbUpdateAccessCheck.php
+++ b/core/modules/system/src/Access/DbUpdateAccessCheck.php
@@ -29,14 +29,14 @@ class DbUpdateAccessCheck implements AccessInterface {
   public function access(AccountInterface $account) {
     // Allow the global variable in settings.php to override the access check.
     if (Settings::get('update_free_access')) {
-      return AccessResult::allowed()->setCacheable(FALSE);
+      return AccessResult::createAllowed()->setCacheable(FALSE);
     }
 
     if ($account->hasPermission('administer software updates')) {
-      return AccessResult::allowed()->cachePerRole();
+      return AccessResult::createAllowed()->cachePerRole();
     }
     else {
-      return AccessResult::forbidden()->cachePerRole();
+      return AccessResult::createForbidden()->cachePerRole();
     }
   }
 }
diff --git a/core/modules/system/src/DateFormatAccessControlHandler.php b/core/modules/system/src/DateFormatAccessControlHandler.php
index 83009fc..d4a7ef2 100644
--- a/core/modules/system/src/DateFormatAccessControlHandler.php
+++ b/core/modules/system/src/DateFormatAccessControlHandler.php
@@ -25,12 +25,12 @@ class DateFormatAccessControlHandler extends EntityAccessControlHandler {
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     // There are no restrictions on viewing a date format.
     if ($operation == 'view') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     // Locked date formats cannot be updated or deleted.
     elseif (in_array($operation, array('update', 'delete'))) {
       if ($entity->isLocked()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
       }
       else {
         return parent::checkAccess($entity, $operation, $langcode, $account)->cacheUntilEntityChanges($entity);
diff --git a/core/modules/system/src/MenuAccessControlHandler.php b/core/modules/system/src/MenuAccessControlHandler.php
index fba0183..ba620aa 100644
--- a/core/modules/system/src/MenuAccessControlHandler.php
+++ b/core/modules/system/src/MenuAccessControlHandler.php
@@ -24,12 +24,12 @@ class MenuAccessControlHandler extends EntityAccessControlHandler {
    */
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation === 'view') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     // Locked menus could not be deleted.
     elseif ($operation == 'delete') {
       if ($entity->isLocked()) {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
       }
       else {
         return parent::checkAccess($entity, $operation, $langcode, $account)->cacheUntilEntityChanges($entity);
diff --git a/core/modules/system/src/Tests/Entity/FieldAccessTest.php b/core/modules/system/src/Tests/Entity/FieldAccessTest.php
index e87eb44..aff5669 100644
--- a/core/modules/system/src/Tests/Entity/FieldAccessTest.php
+++ b/core/modules/system/src/Tests/Entity/FieldAccessTest.php
@@ -67,7 +67,7 @@ function testFieldAccess() {
     $account = entity_create('user', $values);
 
     $this->assertFalse($entity->field_test_text->access('view', $account), 'Access to the field was denied.');
-    $expected = AccessResult::forbidden()->cacheUntilEntityChanges($entity);
+    $expected = AccessResult::createForbidden()->cacheUntilEntityChanges($entity);
     $this->assertEqual($expected, $entity->field_test_text->access('view', $account, TRUE), 'Access to the field was denied.');
 
     $entity->field_test_text = 'access alter value';
@@ -76,6 +76,6 @@ function testFieldAccess() {
 
     $entity->field_test_text = 'standard value';
     $this->assertTrue($entity->field_test_text->access('view', $account), 'Access to the field was granted.');
-    $this->assertEqual(AccessResult::allowed(), $entity->field_test_text->access('view', $account, TRUE), 'Access to the field was granted.');
+    $this->assertEqual(AccessResult::createAllowed(), $entity->field_test_text->access('view', $account, TRUE), 'Access to the field was granted.');
   }
 }
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index 835b9d5..f46164a 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -338,15 +338,15 @@ function entity_test_entity_field_access($operation, FieldDefinitionInterface $f
   if ($field_definition->getName() == 'field_test_text') {
     if ($items) {
       if ($items[0]->value == 'no access value') {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($items->getEntity());
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($items->getEntity());
       }
       elseif ($operation == 'delete' && $items[0]->value == 'no delete access value') {
-        return AccessResult::forbidden()->cacheUntilEntityChanges($items->getEntity());
+        return AccessResult::createForbidden()->cacheUntilEntityChanges($items->getEntity());
       }
     }
   }
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -503,7 +503,7 @@ function entity_test_entity_test_access(EntityInterface $entity, $operation, Acc
   \Drupal::state()->set('entity_test_entity_test_access', TRUE);
 
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -513,7 +513,7 @@ function entity_test_entity_create_access(AccountInterface $account, $context, $
   \Drupal::state()->set('entity_test_entity_create_access', TRUE);
 
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
 
 /**
@@ -523,5 +523,5 @@ function entity_test_entity_test_create_access(AccountInterface $account, $conte
   \Drupal::state()->set('entity_test_entity_test_create_access', TRUE);
 
   // No opinion.
-  return AccessResult::create();
+  return AccessResult::createNeutral();
 }
diff --git a/core/modules/system/tests/modules/entity_test/src/EntityTestAccessControlHandler.php b/core/modules/system/tests/modules/entity_test/src/EntityTestAccessControlHandler.php
index 95efd80..ae03989 100644
--- a/core/modules/system/tests/modules/entity_test/src/EntityTestAccessControlHandler.php
+++ b/core/modules/system/tests/modules/entity_test/src/EntityTestAccessControlHandler.php
@@ -41,7 +41,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
 
   }
 
diff --git a/core/modules/system/tests/modules/router_test_directory/src/Access/DefinedTestAccessCheck.php b/core/modules/system/tests/modules/router_test_directory/src/Access/DefinedTestAccessCheck.php
index b435a39..482cf43 100644
--- a/core/modules/system/tests/modules/router_test_directory/src/Access/DefinedTestAccessCheck.php
+++ b/core/modules/system/tests/modules/router_test_directory/src/Access/DefinedTestAccessCheck.php
@@ -27,13 +27,13 @@ class DefinedTestAccessCheck implements AccessInterface {
    */
   public function access(Route $route) {
     if ($route->getRequirement('_test_access') === 'TRUE') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     elseif ($route->getRequirement('_test_access') === 'FALSE') {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
     else {
-      return AccessResult::create();
+      return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/system/tests/modules/router_test_directory/src/Access/TestAccessCheck.php b/core/modules/system/tests/modules/router_test_directory/src/Access/TestAccessCheck.php
index 45ab4b5..56edad4 100644
--- a/core/modules/system/tests/modules/router_test_directory/src/Access/TestAccessCheck.php
+++ b/core/modules/system/tests/modules/router_test_directory/src/Access/TestAccessCheck.php
@@ -24,6 +24,6 @@ class TestAccessCheck implements AccessInterface {
   public function access() {
     // No opinion, so other access checks should decide if access should be
     // allowed or not.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 }
diff --git a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
index 62488f4..0a18910 100644
--- a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
+++ b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
@@ -327,7 +327,7 @@ public function testBuildWithUserPath() {
   public function setupAccessManagerToAllow() {
     $this->accessManager->expects($this->any())
       ->method('checkRequest')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
   }
 
   protected function setupStubPathProcessor() {
diff --git a/core/modules/taxonomy/src/TermAccessControlHandler.php b/core/modules/taxonomy/src/TermAccessControlHandler.php
index 2ecd3a6..e4561f9 100644
--- a/core/modules/taxonomy/src/TermAccessControlHandler.php
+++ b/core/modules/taxonomy/src/TermAccessControlHandler.php
@@ -38,7 +38,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
 
       default:
         // No opinion.
-        return AccessResult::create();
+        return AccessResult::createNeutral();
     }
   }
 
diff --git a/core/modules/user/src/Access/RoleAccessCheck.php b/core/modules/user/src/Access/RoleAccessCheck.php
index ebfaa808..86fe4b0 100644
--- a/core/modules/user/src/Access/RoleAccessCheck.php
+++ b/core/modules/user/src/Access/RoleAccessCheck.php
@@ -40,19 +40,19 @@ public function access(Route $route, AccountInterface $account) {
     if (count($explode_and) > 1) {
       $diff = array_diff($explode_and, $account->getRoles());
       if (empty($diff)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
     }
     else {
       $explode_or = array_filter(array_map('trim', explode(',', $rid_string)));
       $intersection = array_intersect($explode_or, $account->getRoles());
       if (!empty($intersection)) {
-        return AccessResult::allowed()->cachePerRole();
+        return AccessResult::createAllowed()->cachePerRole();
       }
     }
 
     // If there is no allowed role, give other access checks a chance.
-    return AccessResult::create()->cachePerRole();
+    return AccessResult::createNeutral()->cachePerRole();
   }
 
 }
diff --git a/core/modules/user/src/RoleAccessControlHandler.php b/core/modules/user/src/RoleAccessControlHandler.php
index 52f590d..e46f5a5 100644
--- a/core/modules/user/src/RoleAccessControlHandler.php
+++ b/core/modules/user/src/RoleAccessControlHandler.php
@@ -26,7 +26,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     switch ($operation) {
       case 'delete':
         if ($entity->id() == DRUPAL_ANONYMOUS_RID || $entity->id() == DRUPAL_AUTHENTICATED_RID) {
-          return AccessResult::forbidden();
+          return AccessResult::createForbidden();
         }
 
       default:
diff --git a/core/modules/user/src/UserAccessControlHandler.php b/core/modules/user/src/UserAccessControlHandler.php
index aab5f3b..bf4deba 100644
--- a/core/modules/user/src/UserAccessControlHandler.php
+++ b/core/modules/user/src/UserAccessControlHandler.php
@@ -27,23 +27,23 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
 
     // The anonymous user's profile can neither be viewed, updated nor deleted.
     if ($entity->isAnonymous()) {
-      return AccessResult::forbidden();
+      return AccessResult::createForbidden();
     }
 
     // Administrators can view/update/delete all user profiles.
     if ($account->hasPermission('administer users')) {
-      return AccessResult::allowed()->cachePerRole();
+      return AccessResult::createAllowed()->cachePerRole();
     }
 
     switch ($operation) {
       case 'view':
         // Only allow view access if the account is active.
         if ($account->hasPermission('access user profiles') && $entity->isActive()) {
-          return AccessResult::allowed()->cachePerRole()->cacheUntilEntityChanges($entity);
+          return AccessResult::createAllowed()->cachePerRole()->cacheUntilEntityChanges($entity);
         }
         // Users can view own profiles at all times.
         else if ($account->id() == $entity->id()) {
-          return AccessResult::allowed()->cachePerUser();
+          return AccessResult::createAllowed()->cachePerUser();
         }
         break;
 
@@ -57,7 +57,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
     }
 
     // No opinion.
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
 }
diff --git a/core/modules/views/src/ViewAccessControlHandler.php b/core/modules/views/src/ViewAccessControlHandler.php
index 96d130e..672a15e 100644
--- a/core/modules/views/src/ViewAccessControlHandler.php
+++ b/core/modules/views/src/ViewAccessControlHandler.php
@@ -24,7 +24,7 @@ class ViewAccessControlHandler extends EntityAccessControlHandler {
    */
   public function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation == 'view') {
-      return AccessResult::allowed();
+      return AccessResult::createAllowed();
     }
     else {
       return parent::checkAccess($entity, $operation, $langcode, $account);
diff --git a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
index 717e8fc..19c34e6 100644
--- a/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/AccessManagerTest.php
@@ -186,7 +186,7 @@ public function testCheck() {
     // Check route access without any access checker defined yet.
     foreach ($route_matches as $route_match) {
       $this->assertEquals(FALSE, $this->accessManager->check($route_match, $this->account));
-      $this->assertEquals(AccessResult::create(), $this->accessManager->check($route_match, $this->account, NULL, TRUE));
+      $this->assertEquals(AccessResult::createNeutral(), $this->accessManager->check($route_match, $this->account, NULL, TRUE));
     }
 
     $this->setupAccessChecker();
@@ -195,7 +195,7 @@ public function testCheck() {
     // setChecks.
     foreach ($route_matches as $route_match) {
       $this->assertEquals(FALSE, $this->accessManager->check($route_match, $this->account));
-      $this->assertEquals(AccessResult::create(), $this->accessManager->check($route_match, $this->account, NULL, TRUE));
+      $this->assertEquals(AccessResult::createNeutral(), $this->accessManager->check($route_match, $this->account, NULL, TRUE));
     }
 
     // Now applicable access checks have been saved on each route object.
@@ -206,10 +206,10 @@ public function testCheck() {
     $this->assertEquals(TRUE, $this->accessManager->check($route_matches['test_route_2'], $this->account));
     $this->assertEquals(FALSE, $this->accessManager->check($route_matches['test_route_3'], $this->account));
     $this->assertEquals(TRUE, $this->accessManager->check($route_matches['test_route_4'], $this->account));
-    $this->assertEquals(AccessResult::create(), $this->accessManager->check($route_matches['test_route_1'], $this->account, NULL, TRUE));
-    $this->assertEquals(AccessResult::allowed(), $this->accessManager->check($route_matches['test_route_2'], $this->account, NULL, TRUE));
-    $this->assertEquals(AccessResult::forbidden(), $this->accessManager->check($route_matches['test_route_3'],  $this->account, NULL, TRUE));
-    $this->assertEquals(AccessResult::allowed(), $this->accessManager->check($route_matches['test_route_4'],  $this->account, NULL, TRUE));
+    $this->assertEquals(AccessResult::createNeutral(), $this->accessManager->check($route_matches['test_route_1'], $this->account, NULL, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessManager->check($route_matches['test_route_2'], $this->account, NULL, TRUE));
+    $this->assertEquals(AccessResult::createForbidden(), $this->accessManager->check($route_matches['test_route_3'],  $this->account, NULL, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessManager->check($route_matches['test_route_4'],  $this->account, NULL, TRUE));
   }
 
   /**
@@ -241,9 +241,9 @@ public function testCheckWithNullAccount() {
    * @see \Drupal\Tests\Core\Access\AccessManagerTest::testCheckConjunctions()
    */
   public function providerTestCheckConjunctions() {
-    $access_allow = AccessResult::allowed();
-    $access_deny = AccessResult::create();
-    $access_kill = AccessResult::forbidden();
+    $access_allow = AccessResult::createAllowed();
+    $access_deny = AccessResult::createNeutral();
+    $access_kill = AccessResult::createForbidden();
 
     $access_configurations = array();
     $access_configurations[] = array(
@@ -435,9 +435,9 @@ public function testCheckNamedRoute() {
 
     // Tests the access with routes with parameters without given request.
     $this->assertEquals(TRUE, $this->accessManager->checkNamedRoute('test_route_2', array(), $this->account));
-    $this->assertEquals(AccessResult::allowed(), $this->accessManager->checkNamedRoute('test_route_2', array(), $this->account, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessManager->checkNamedRoute('test_route_2', array(), $this->account, TRUE));
     $this->assertEquals(TRUE, $this->accessManager->checkNamedRoute('test_route_4', array('value' => 'example'), $this->account));
-    $this->assertEquals(AccessResult::allowed(), $this->accessManager->checkNamedRoute('test_route_4', array('value' => 'example'), $this->account, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessManager->checkNamedRoute('test_route_4', array('value' => 'example'), $this->account, TRUE));
   }
 
   /**
@@ -479,7 +479,7 @@ public function testCheckNamedRouteWithUpcastedValues() {
       ->will($this->returnValue(TRUE));
     $access_check->expects($this->atLeastOnce())
       ->method('access')
-      ->will($this->returnValue(AccessResult::forbidden()));
+      ->will($this->returnValue(AccessResult::createForbidden()));
 
     $this->container->set('test_access', $access_check);
 
@@ -487,7 +487,7 @@ public function testCheckNamedRouteWithUpcastedValues() {
     $this->accessManager->setChecks($this->routeCollection);
 
     $this->assertEquals(FALSE, $this->accessManager->checkNamedRoute('test_route_1', array('value' => 'example'), $this->account));
-    $this->assertEquals(AccessResult::forbidden(), $this->accessManager->checkNamedRoute('test_route_1', array('value' => 'example'), $this->account, TRUE));
+    $this->assertEquals(AccessResult::createForbidden(), $this->accessManager->checkNamedRoute('test_route_1', array('value' => 'example'), $this->account, TRUE));
   }
 
   /**
@@ -529,7 +529,7 @@ public function testCheckNamedRouteWithDefaultValue() {
       ->will($this->returnValue(TRUE));
     $access_check->expects($this->atLeastOnce())
       ->method('access')
-      ->will($this->returnValue(AccessResult::forbidden()));
+      ->will($this->returnValue(AccessResult::createForbidden()));
 
     $this->container->set('test_access', $access_check);
 
@@ -537,7 +537,7 @@ public function testCheckNamedRouteWithDefaultValue() {
     $this->accessManager->setChecks($this->routeCollection);
 
     $this->assertEquals(FALSE, $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account));
-    $this->assertEquals(AccessResult::forbidden(), $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account, TRUE));
+    $this->assertEquals(AccessResult::createForbidden(), $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account, TRUE));
   }
 
   /**
@@ -553,7 +553,7 @@ public function testCheckNamedRouteWithNonExistingRoute() {
     $this->setupAccessChecker();
 
     $this->assertEquals(FALSE, $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account), 'A non existing route lead to access.');
-    $this->assertEquals(AccessResult::forbidden()->addCacheTags(array('extension' => TRUE)), $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account, TRUE), 'A non existing route lead to access.');
+    $this->assertEquals(AccessResult::createForbidden()->addCacheTags(array('extension' => TRUE)), $this->accessManager->checkNamedRoute('test_route_1', array(), $this->account, TRUE), 'A non existing route lead to access.');
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
index 67d25d5..5b890b1 100644
--- a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\Core\Access;
 
 use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Access\AccessResultNeutral;
 use Drupal\Core\Cache\Cache;
 use Drupal\Tests\UnitTestCase;
 
@@ -40,11 +41,11 @@ public function testConstruction() {
     };
 
     // Verify the object when using the constructor.
-    $a = new AccessResult();
+    $a = new AccessResultNeutral();
     $verify($a);
 
     // Verify the object when using the ::create() convenience method.
-    $b = AccessResult::create();
+    $b = AccessResult::createNeutral();
     $verify($b);
 
     $this->assertEquals($a, $b);
@@ -63,15 +64,9 @@ public function testAccessAllowed() {
       $this->assertDefaultCacheability($access);
     };
 
-    // Verify the object when using the ::allow() instance method.
-    $a = AccessResult::create()->allow();
-    $verify($a);
-
     // Verify the object when using the ::allowed() convenience static method.
-    $b = AccessResult::allowed();
+    $b = AccessResult::createAllowed();
     $verify($b);
-
-    $this->assertEquals($a, $b);
   }
 
   /**
@@ -87,36 +82,9 @@ public function testAccessForbidden() {
       $this->assertDefaultCacheability($access);
     };
 
-    // Verify the object when using the ::forbid() instance method.
-    $a = AccessResult::create()->forbid();
-    $verify($a);
-
     // Verify the object when using the ::forbidden() convenience static method.
-    $b = AccessResult::forbidden();
+    $b = AccessResult::createForbidden();
     $verify($b);
-
-    $this->assertEquals($a, $b);
-  }
-
-  /**
-   * @covers ::reset
-   * @covers ::isAllowed
-   * @covers ::isForbidden
-   */
-  public function testAccessReset() {
-    $verify = function (AccessResult $access) {
-      $this->assertFalse($access->isAllowed());
-      $this->assertFalse($access->isForbidden());
-      $this->assertDefaultCacheability($access);
-    };
-
-    $a = AccessResult::allowed()->resetAccess();
-    $verify($a);
-
-    $b = AccessResult::forbidden()->resetAccess();
-    $verify($b);
-
-    $this->assertEquals($a, $b);
   }
 
   /**
@@ -132,26 +100,10 @@ public function testAccessConditionallyAllowed() {
       $this->assertDefaultCacheability($access);
     };
 
-    // Verify the object when using the ::allowIf() instance method.
-    $a1 = AccessResult::create()->allowIf(TRUE);
-    $verify($a1, TRUE);
-    $a2 = AccessResult::create()->allowIf(FALSE);
-    $verify($a2, FALSE);
-
     $b1 = AccessResult::allowedIf(TRUE);
     $verify($b1, TRUE);
     $b2 = AccessResult::allowedIf(FALSE);
     $verify($b2, FALSE);
-
-    $this->assertEquals($a1, $b1);
-    $this->assertEquals($a2, $b2);
-
-    // Verify that ::allowIf() does not overwrite an existing value when the
-    // condition does not evaluate to TRUE.
-    $a1 = AccessResult::forbidden()->allowIf(TRUE);
-    $verify($a1, TRUE);
-    $a2 = AccessResult::forbidden()->allowIf(FALSE);
-    $verify($a2, FALSE, TRUE);
   }
 
   /**
@@ -167,70 +119,87 @@ public function testAccessConditionallyForbidden() {
       $this->assertDefaultCacheability($access);
     };
 
-    // Verify the object when using the ::allowIf() instance method.
-    $a1 = AccessResult::create()->forbidIf(TRUE);
-    $verify($a1, TRUE);
-    $a2 = AccessResult::create()->forbidIf(FALSE);
-    $verify($a2, FALSE);
-
     $b1 = AccessResult::forbiddenIf(TRUE);
     $verify($b1, TRUE);
     $b2 = AccessResult::forbiddenIf(FALSE);
     $verify($b2, FALSE);
-
-    $this->assertEquals($a1, $b1);
-    $this->assertEquals($a2, $b2);
-
-    // Verify that ::forbidIf() does not overwrite an existing value when the
-    // condition does not evaluate to TRUE.
-    $a1 = AccessResult::allowed()->forbidIf(TRUE);
-    $verify($a1, TRUE);
-    $a2 = AccessResult::allowed()->forbidIf(FALSE);
-    $verify($a2, FALSE, TRUE);
   }
 
   /**
    * @covers ::andIf
    */
   public function testAndIf() {
-    $no_opinion = AccessResult::create();
-    $allowed = AccessResult::allowed();
-    $forbidden = AccessResult::forbidden();
+    $no_opinion = AccessResult::createNeutral();
+    $allowed = AccessResult::createAllowed();
+    $forbidden = AccessResult::createForbidden();
     $unused_access_result_due_to_lazy_evaluation = $this->getMock('\Drupal\Core\Access\AccessResultInterface');
     $unused_access_result_due_to_lazy_evaluation->expects($this->never())
       ->method($this->anything());
 
     // ALLOW && ALLOW === ALLOW.
-    $access = clone $allowed;
-    $access->andIf($allowed);
+    $access = $allowed->andIf($allowed);
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // ALLOW && DENY === DENY.
-    $access = clone $allowed;
-    $access->andIf($no_opinion);
+    $access = $allowed->andIf($no_opinion);
     $this->assertFalse($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // ALLOW && KILL === KILL.
-    $access = clone $allowed;
-    $access->andIf($forbidden);
+    $access = $allowed->andIf($forbidden);
+    $this->assertFalse($access->isAllowed());
+    $this->assertTrue($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // DENY && ALLOW == DENY
+    $access = $no_opinion->andIf($allowed);
+    $this->assertFalse($access->isAllowed());
+    $this->assertFalse($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // DENY && DENY === DENY.
+    $access = $no_opinion->andIf($no_opinion);
+    $this->assertFalse($access->isAllowed());
+    $this->assertFalse($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // DENY && KILL === KILL.
+    $access = $no_opinion->andIf($forbidden);
+    $this->assertFalse($access->isAllowed());
+    $this->assertTrue($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // KILL && ALLOW = KILL
+    $access = $forbidden->andif($allowed);
+    $this->assertFalse($access->isAllowed());
+    $this->assertTrue($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // KILL && DENY = KILL
+    $access = $forbidden->andif($no_opinion);
+    $this->assertFalse($access->isAllowed());
+    $this->assertTrue($access->isForbidden());
+    $this->assertDefaultCacheability($access);
+
+    // KILL && KILL = KILL
+    $access = $forbidden->andif($forbidden);
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // DENY && * === DENY.
-    $access = clone $no_opinion;
-    $access->andIf($unused_access_result_due_to_lazy_evaluation);
+    /*
+    $access = $no_opinion->andIf($unused_access_result_due_to_lazy_evaluation);
     $this->assertFalse($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
+    */
 
     // KILL && * === KILL.
-    $access = clone $forbidden;
-    $access->andIf($unused_access_result_due_to_lazy_evaluation);
+    $access = $forbidden->andIf($unused_access_result_due_to_lazy_evaluation);
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertDefaultCacheability($access);
@@ -240,58 +209,51 @@ public function testAndIf() {
    * @covers ::orIf
    */
   public function testOrIf() {
-    $no_opinion = AccessResult::create();
-    $allowed = AccessResult::allowed();
-    $forbidden = AccessResult::forbidden();
+    $no_opinion = AccessResult::createNeutral();
+    $allowed = AccessResult::createAllowed();
+    $forbidden = AccessResult::createForbidden();
     $unused_access_result_due_to_lazy_evaluation = $this->getMock('\Drupal\Core\Access\AccessResultInterface');
     $unused_access_result_due_to_lazy_evaluation->expects($this->never())
       ->method($this->anything());
 
     // ALLOW || ALLOW === ALLOW.
-    $access = clone $allowed;
-    $access->orIf($allowed);
+    $access = $allowed->orIf($allowed);
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // ALLOW || DENY === ALLOW.
-    $access = clone $allowed;
-    $access->orIf($no_opinion);
+    $access = $allowed->orIf($no_opinion);
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // ALLOW || KILL === KILL.
-    $access = clone $allowed;
-    $access->orIf($forbidden);
+    $access = $allowed->orIf($forbidden);
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // DENY || DENY === DENY.
-    $access = clone $no_opinion;
-    $access->orIf($no_opinion);
+    $access = $no_opinion->orIf($no_opinion);
     $this->assertFalse($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // DENY || ALLOW === ALLOW.
-    $access = clone $no_opinion;
-    $access->orIf($allowed);
+    $access = $no_opinion->orIf($allowed);
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // DENY || KILL === KILL.
-    $access = clone $no_opinion;
-    $access->orIf($forbidden);
+    $access = $no_opinion->orIf($forbidden);
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertDefaultCacheability($access);
 
     // KILL || * === KILL.
-    $access = clone $forbidden;
-    $access->orIf($unused_access_result_due_to_lazy_evaluation);
+    $access = $forbidden->orIf($unused_access_result_due_to_lazy_evaluation);
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertDefaultCacheability($access);
@@ -302,9 +264,9 @@ public function testOrIf() {
    * @covers ::isCacheable
    */
   public function testCacheable() {
-    $this->assertTrue(AccessResult::create()->isCacheable());
-    $this->assertTrue(AccessResult::create()->setCacheable(TRUE)->isCacheable());
-    $this->assertFalse(AccessResult::create()->setCacheable(FALSE)->isCacheable());
+    $this->assertTrue(AccessResult::createNeutral()->isCacheable());
+    $this->assertTrue(AccessResult::createNeutral()->setCacheable(TRUE)->isCacheable());
+    $this->assertFalse(AccessResult::createNeutral()->setCacheable(FALSE)->isCacheable());
   }
 
   /**
@@ -312,8 +274,8 @@ public function testCacheable() {
    * @covers ::getCacheMaxAge
    */
   public function testCacheMaxAge() {
-    $this->assertSame(Cache::PERMANENT, AccessResult::create()->getCacheMaxAge());
-    $this->assertSame(1337, AccessResult::create()->setCacheMaxAge(1337)->getCacheMaxAge());
+    $this->assertSame(Cache::PERMANENT, AccessResult::createNeutral()->getCacheMaxAge());
+    $this->assertSame(1337, AccessResult::createNeutral()->setCacheMaxAge(1337)->getCacheMaxAge());
   }
 
   /**
@@ -336,7 +298,7 @@ public function testCacheContexts() {
       $this->assertSame([], $access->getCacheTags());
     };
 
-    $access = AccessResult::create()->addCacheContexts(['cache_context.foo']);
+    $access = AccessResult::createNeutral()->addCacheContexts(['cache_context.foo']);
     $verify($access, ['cache_context.foo']);
     // Verify resetting works.
     $access->resetCacheContexts();
@@ -357,27 +319,27 @@ public function testCacheContexts() {
 
     // ::cachePerRole() convenience method.
     $contexts = array('cache_context.user.roles');
-    $a = AccessResult::create()->addCacheContexts($contexts);
+    $a = AccessResult::createNeutral()->addCacheContexts($contexts);
     $verify($a, $contexts);
-    $b = AccessResult::create()->cachePerRole();
+    $b = AccessResult::createNeutral()->cachePerRole();
     $verify($b, $contexts);
     $this->assertEquals($a, $b);
 
     // ::cachePerUser() convenience method.
     $contexts = array('cache_context.user');
-    $a = AccessResult::create()->addCacheContexts($contexts);
+    $a = AccessResult::createNeutral()->addCacheContexts($contexts);
     $verify($a, $contexts);
-    $b = AccessResult::create()->cachePerUser();
+    $b = AccessResult::createNeutral()->cachePerUser();
     $verify($b, $contexts);
     $this->assertEquals($a, $b);
 
     // Both.
     $contexts = array('cache_context.user', 'cache_context.user.roles');
-    $a = AccessResult::create()->addCacheContexts($contexts);
+    $a = AccessResult::createNeutral()->addCacheContexts($contexts);
     $verify($a, $contexts);
-    $b = AccessResult::create()->cachePerRole()->cachePerUser();
+    $b = AccessResult::createNeutral()->cachePerRole()->cachePerUser();
     $verify($b, $contexts);
-    $c = AccessResult::create()->cachePerUser()->cachePerRole();
+    $c = AccessResult::createNeutral()->cachePerUser()->cachePerRole();
     $verify($c, $contexts);
     $this->assertEquals($a, $b);
     $this->assertEquals($a, $c);
@@ -390,17 +352,10 @@ public function testCacheContexts() {
       ->will($this->returnValue(FALSE));
     $contexts = array('cache_context.user.roles');
 
-    // Verify the object when using the ::allowIfHasPermission() convenience
-    // instance method.
-    $a = AccessResult::create()->allowIfHasPermission($account, 'may herd llamas');
-    $verify($a, $contexts);
-
     // Verify the object when using the ::allowedIfHasPermission() convenience
     // static method.
     $b = AccessResult::allowedIfHasPermission($account, 'may herd llamas');
     $verify($b, $contexts);
-
-    $this->assertEquals($a, $b);
   }
 
   /**
@@ -420,7 +375,7 @@ public function testCacheTags() {
       $this->assertSame($tags, $access->getCacheTags());
     };
 
-    $access = AccessResult::create()->addCacheTags(['foo' => ['bar']]);
+    $access = AccessResult::createNeutral()->addCacheTags(['foo' => ['bar']]);
     $verify($access, ['foo' => ['bar' => 'bar']]);
     // Verify resetting works.
     $access->resetCacheTags();
@@ -458,9 +413,9 @@ public function testCacheTags() {
       ->method('getCacheTag')
       ->will($this->returnValue(array('node' => array(20011988))));
     $tags = array('node' => array(20011988 => 20011988));
-    $a = AccessResult::create()->addCacheTags($tags);
+    $a = AccessResult::createNeutral()->addCacheTags($tags);
     $verify($a, $tags);
-    $b = AccessResult::create()->cacheUntilEntityChanges($node);
+    $b = AccessResult::createNeutral()->cacheUntilEntityChanges($node);
     $verify($b, $tags);
     $this->assertEquals($a, $b);
   }
@@ -483,8 +438,8 @@ public function testCacheabilityMerging() {
       ->will($this->returnSelf());
 
     // andIf(); 1st has defaults, 2nd has custom tags, contexts and max-age.
-    $access = AccessResult::allowed()
-      ->andIf(AccessResult::allowed()->setCacheMaxAge(1500)->cachePerRole()->addCacheTags(['node' => [20011988]]));
+    $access = AccessResult::createAllowed()
+      ->andIf(AccessResult::createAllowed()->setCacheMaxAge(1500)->cachePerRole()->addCacheTags(['node' => [20011988]]));
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertTrue($access->isCacheable());
@@ -494,8 +449,8 @@ public function testCacheabilityMerging() {
     $this->assertSame(1500, $access->getCacheMaxAge());
 
     // andIf(); 1st has custom tags, max-age, 2nd has custom contexts and max-age.
-    $access = AccessResult::allowed()->cachePerUser()->setCacheMaxAge(43200)
-      ->andIf(AccessResult::forbidden()->addCacheTags(['node' => [14031991]])->setCacheMaxAge(86400));
+    $access = AccessResult::createAllowed()->cachePerUser()->setCacheMaxAge(43200)
+      ->andIf(AccessResult::createForbidden()->addCacheTags(['node' => [14031991]])->setCacheMaxAge(86400));
     $this->assertFalse($access->isAllowed());
     $this->assertTrue($access->isForbidden());
     $this->assertTrue($access->isCacheable());
@@ -505,25 +460,25 @@ public function testCacheabilityMerging() {
     $this->assertSame(43200, $access->getCacheMaxAge());
 
     // orIf(); 1st is cacheable, 2nd isn't.
-    $access = AccessResult::allowed()->orIf(AccessResult::allowed()->setCacheable(FALSE));
+    $access = AccessResult::createAllowed()->orIf(AccessResult::createAllowed()->setCacheable(FALSE));
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertFalse($access->isCacheable());
 
     // andIf(); 1st is cacheable, 2nd isn't.
-    $access = AccessResult::allowed()->andIf(AccessResult::allowed()->setCacheable(FALSE));
+    $access = AccessResult::createAllowed()->andIf(AccessResult::createAllowed()->setCacheable(FALSE));
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertFalse($access->isCacheable());
 
     // andIf(); 1st implements CacheableInterface, 2nd doesn't.
-    $access = AccessResult::allowed()->andIf($access_without_cacheability);
+    $access = AccessResult::createAllowed()->andIf($access_without_cacheability);
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertFalse($access->isCacheable());
 
     // andIf(); 1st doesn't implement CacheableInterface, 2nd does.
-    $access = $access_without_cacheability->andIf(AccessResult::allowed());
+    $access = $access_without_cacheability->andIf(AccessResult::createAllowed());
     $this->assertTrue($access->isAllowed());
     $this->assertFalse($access->isForbidden());
     $this->assertFalse(method_exists($access, 'isCacheable'));
diff --git a/core/tests/Drupal/Tests/Core/Access/CsrfAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Access/CsrfAccessCheckTest.php
index 46e62cf..ebdad93 100644
--- a/core/tests/Drupal/Tests/Core/Access/CsrfAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/CsrfAccessCheckTest.php
@@ -63,7 +63,7 @@ public function testAccessTokenPass() {
     $request = Request::create('/test-path?token=test_query');
     $request->attributes->set('_system_path', '/test-path');
 
-    $this->assertEquals(AccessResult::allowed()->setCacheable(FALSE), $this->accessCheck->access($route, $request, $this->account));
+    $this->assertEquals(AccessResult::createAllowed()->setCacheable(FALSE), $this->accessCheck->access($route, $request, $this->account));
   }
 
   /**
@@ -79,7 +79,7 @@ public function testAccessTokenFail() {
     $request = Request::create('/test-path?token=test_query');
     $request->attributes->set('_system_path', '/test-path');
 
-    $this->assertEquals(AccessResult::forbidden()->setCacheable(FALSE), $this->accessCheck->access($route, $request, $this->account));
+    $this->assertEquals(AccessResult::createForbidden()->setCacheable(FALSE), $this->accessCheck->access($route, $request, $this->account));
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
index bea19c0..5e12f8e 100644
--- a/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
@@ -97,13 +97,13 @@ public function testAccess() {
 
     $route = new Route('/test-route', array(), array('_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessDeny'));
     $account = $this->getMock('Drupal\Core\Session\AccountInterface');
-    $this->assertEquals(AccessResult::create(), $this->accessChecker->access($route, $route_match, $account));
+    $this->assertEquals(AccessResult::createNeutral(), $this->accessChecker->access($route, $route_match, $account));
 
     $route = new Route('/test-route', array(), array('_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessAllow'));
-    $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessChecker->access($route, $route_match, $account));
 
     $route = new Route('/test-route', array('parameter' => 'TRUE'), array('_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessParameter'));
-    $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessChecker->access($route, $route_match, $account));
   }
 
 }
@@ -111,11 +111,11 @@ public function testAccess() {
 class TestController {
 
   public function accessAllow() {
-    return AccessResult::allowed();
+    return AccessResult::createAllowed();
   }
 
   public function accessDeny() {
-    return AccessResult::create();
+    return AccessResult::createNeutral();
   }
 
   public function accessParameter($parameter) {
diff --git a/core/tests/Drupal/Tests/Core/Access/DefaultAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Access/DefaultAccessCheckTest.php
index c7bc1df..767200b 100644
--- a/core/tests/Drupal/Tests/Core/Access/DefaultAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/DefaultAccessCheckTest.php
@@ -50,13 +50,13 @@ public function testAccess() {
     $request = new Request(array());
 
     $route = new Route('/test-route', array(), array('_access' => 'NULL'));
-    $this->assertEquals(AccessResult::create(), $this->accessChecker->access($route, $request, $this->account));
+    $this->assertEquals(AccessResult::createNeutral(), $this->accessChecker->access($route, $request, $this->account));
 
     $route = new Route('/test-route', array(), array('_access' => 'FALSE'));
-    $this->assertEquals(AccessResult::forbidden(), $this->accessChecker->access($route, $request, $this->account));
+    $this->assertEquals(AccessResult::createForbidden(), $this->accessChecker->access($route, $request, $this->account));
 
     $route = new Route('/test-route', array(), array('_access' => 'TRUE'));
-    $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $request, $this->account));
+    $this->assertEquals(AccessResult::createAllowed(), $this->accessChecker->access($route, $request, $this->account));
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
index 60d5838..00ee254 100644
--- a/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
@@ -413,20 +413,20 @@ public function testAccess() {
     $access->expects($this->at(1))
       ->method('access')
       ->with($this->entity, $operation)
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $access->expects($this->at(2))
       ->method('createAccess')
       ->will($this->returnValue(TRUE));
     $access->expects($this->at(3))
       ->method('createAccess')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $this->entityManager->expects($this->exactly(4))
       ->method('getAccessControlHandler')
       ->will($this->returnValue($access));
     $this->assertTrue($this->entity->access($operation));
-    $this->assertEquals(AccessResult::allowed(), $this->entity->access($operation, NULL, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->entity->access($operation, NULL, TRUE));
     $this->assertTrue($this->entity->access('create'));
-    $this->assertEquals(AccessResult::allowed(), $this->entity->access('create', NULL, TRUE));
+    $this->assertEquals(AccessResult::createAllowed(), $this->entity->access('create', NULL, TRUE));
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
index 2b53bb2..615674d 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
@@ -36,12 +36,12 @@ public function testAccess() {
       ->getMock();
     $node->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::allowed()->cachePerRole()));
+      ->will($this->returnValue(AccessResult::createAllowed()->cachePerRole()));
     $access_check = new EntityAccessCheck();
     $upcasted_arguments->set('node', $node);
     $account = $this->getMock('Drupal\Core\Session\AccountInterface');
     $access = $access_check->access($route, $route_match, $account);
-    $this->assertEquals(AccessResult::allowed()->cachePerRole(), $access);
+    $this->assertEquals(AccessResult::createAllowed()->cachePerRole(), $access);
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php
index da04fdd..498d595 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityCreateAccessCheckTest.php
@@ -40,9 +40,9 @@ protected function setUp() {
    * @return array
    */
   public function providerTestAccess() {
-    $no_access = AccessResult::create()->cachePerRole();
-    $access = AccessResult::allowed()->cachePerRole();
-    $no_access_due_to_errors = AccessResult::create();
+    $no_access = AccessResult::createNeutral()->cachePerRole();
+    $access = AccessResult::createAllowed()->cachePerRole();
+    $no_access_due_to_errors = AccessResult::createNeutral();
 
     return array(
       array('', 'entity_test', $no_access, $no_access),
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
index 7e2fce4..39b8eb7 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityListBuilderTest.php
@@ -107,7 +107,7 @@ public function testGetOperations() {
 
     $this->role->expects($this->any())
       ->method('access')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $this->role->expects($this->any())
       ->method('hasLinkTemplate')
       ->will($this->returnValue(TRUE));
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
index 4913446..8070445 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityUnitTest.php
@@ -215,15 +215,15 @@ public function testAccess() {
     $access->expects($this->at(0))
       ->method('access')
       ->with($this->entity, $operation)
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $access->expects($this->at(1))
       ->method('createAccess')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
     $this->entityManager->expects($this->exactly(2))
       ->method('getAccessControlHandler')
       ->will($this->returnValue($access));
-    $this->assertEquals(AccessResult::allowed(), $this->entity->access($operation));
-    $this->assertEquals(AccessResult::allowed(), $this->entity->access('create'));
+    $this->assertEquals(AccessResult::createAllowed(), $this->entity->access($operation));
+    $this->assertEquals(AccessResult::createAllowed(), $this->entity->access('create'));
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
index 396741b..5d582ec 100644
--- a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
@@ -271,7 +271,7 @@ public function testGetContextualLinksArrayByGroup() {
 
     $this->accessManager->expects($this->any())
       ->method('checkNamedRoute')
-      ->will($this->returnValue(AccessResult::allowed()));
+      ->will($this->returnValue(AccessResult::createAllowed()));
 
     // Set up mocking of the plugin factory.
     $map = array();
diff --git a/core/tests/Drupal/Tests/Core/Route/RoleAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Route/RoleAccessCheckTest.php
index 5fc7123..89aa874 100644
--- a/core/tests/Drupal/Tests/Core/Route/RoleAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Route/RoleAccessCheckTest.php
@@ -148,14 +148,14 @@ public function testRoleAccess($path, $grant_accounts, $deny_accounts) {
 
     foreach ($grant_accounts as $account) {
       $message = sprintf('Access granted for user with the roles %s on path: %s', implode(', ', $account->getRoles()), $path);
-      $this->assertEquals(AccessResult::allowed()->cachePerRole(), $role_access_check->access($collection->get($path), $account), $message);
+      $this->assertEquals(AccessResult::createAllowed()->cachePerRole(), $role_access_check->access($collection->get($path), $account), $message);
     }
 
     // Check all users which don't have access.
     foreach ($deny_accounts as $account) {
       $message = sprintf('Access denied for user %s with the roles %s on path: %s', $account->id(), implode(', ', $account->getRoles()), $path);
       $has_access = $role_access_check->access($collection->get($path), $account);
-      $this->assertEquals(AccessResult::create()->cachePerRole(), $has_access, $message);
+      $this->assertEquals(AccessResult::createNeutral()->cachePerRole(), $has_access, $message);
     }
   }
 
