diff --git a/core/lib/Drupal/Core/Access/CustomAccessCheck.php b/core/lib/Drupal/Core/Access/CustomAccessCheck.php
index e7a3b08..8e59c61 100644
--- a/core/lib/Drupal/Core/Access/CustomAccessCheck.php
+++ b/core/lib/Drupal/Core/Access/CustomAccessCheck.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Routing\Access\AccessInterface as RoutingAccessInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
 
 /**
@@ -56,13 +57,15 @@ public function __construct(ControllerResolverInterface $controller_resolver, Ac
    *   The route match object to be checked.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The account being checked.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request.
    *
    * @return \Drupal\Core\Access\AccessResultInterface
    *   The access result.
    */
-  public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
+  public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account, Request $request) {
     $callable = $this->controllerResolver->getControllerFromDefinition($route->getRequirement('_custom_access'));
-    $arguments_resolver = $this->argumentsResolverFactory->getArgumentsResolver($route_match, $account);
+    $arguments_resolver = $this->argumentsResolverFactory->getArgumentsResolver($route_match, $account, $request);
     $arguments = $arguments_resolver->getArguments($callable);
 
     return call_user_func_array($callable, $arguments);
diff --git a/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
index 36d330d..2d53725 100644
--- a/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/CustomAccessCheckTest.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Access\CustomAccessCheck;
 use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
 
 /**
@@ -95,15 +96,32 @@ public function testAccess() {
       ->method('getArgumentsResolver')
       ->will($this->returnValue($resolver2));
 
+    $this->controllerResolver->expects($this->at(3))
+      ->method('getControllerFromDefinition')
+      ->with('\Drupal\Tests\Core\Access\TestController::accessRequest')
+      ->will($this->returnValue(array(new TestController(), 'accessRequest')));
+
+    $request = Request::create('/foo?example=muh');
+    $resolver3 = $this->getMock('Drupal\Component\Utility\ArgumentsResolverInterface');
+    $resolver3->expects($this->once())
+      ->method('getArguments')
+      ->will($this->returnValue(array('request' => $request)));
+    $this->argumentsResolverFactory->expects($this->at(3))
+      ->method('getArgumentsResolver')
+      ->will($this->returnValue($resolver3));
+
     $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::neutral(), $this->accessChecker->access($route, $route_match, $account));
+    $this->assertEquals(AccessResult::neutral(), $this->accessChecker->access($route, $route_match, $account, $request));
 
     $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::allowed(), $this->accessChecker->access($route, $route_match, $account, $request));
 
     $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::allowed(), $this->accessChecker->access($route, $route_match, $account, $request));
+
+    $route = new Route('/test-route', array('parameter' => 'TRUE'), array('_custom_access' => '\Drupal\Tests\Core\Access\TestController::accessRequest'));
+    $this->assertEquals(AccessResult::allowed(), $this->accessChecker->access($route, $route_match, $account, $request));
   }
 
 }
@@ -122,4 +140,8 @@ public function accessParameter($parameter) {
     return AccessResult::allowedIf($parameter == 'TRUE');
   }
 
+  public function accessRequest(Request $request) {
+    return AccessResult::allowedIf($request->query->get('example') === 'muh');
+  }
+
 }
