diff --git a/core/lib/Drupal/Core/Form/FormSubmitter.php b/core/lib/Drupal/Core/Form/FormSubmitter.php
index 78aca72..271af07 100644
--- a/core/lib/Drupal/Core/Form/FormSubmitter.php
+++ b/core/lib/Drupal/Core/Form/FormSubmitter.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Form;
 
+use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -33,15 +34,26 @@ class FormSubmitter implements FormSubmitterInterface {
   protected $requestStack;
 
   /**
+   * The route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
+  /**
    * Constructs a new FormValidator.
    *
    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
    *   The request stack.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
+   *   The URL generator.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $current_route_match
+   *   The route match.
    */
-  public function __construct(RequestStack $request_stack, UrlGeneratorInterface $url_generator) {
+  public function __construct(RequestStack $request_stack, UrlGeneratorInterface $url_generator, RouteMatchInterface $current_route_match) {
     $this->requestStack = $request_stack;
     $this->urlGenerator = $url_generator;
+    $this->routeMatch = $current_route_match;
   }
 
   /**
@@ -208,9 +220,7 @@ public function redirectForm($form_state) {
         }
       }
       $request = $this->requestStack->getCurrentRequest();
-      // @todo Remove dependency on the internal _system_path attribute:
-      //   https://www.drupal.org/node/2293521.
-      $url = $this->urlGenerator->generateFromPath($request->attributes->get('_system_path'), array(
+      $url = $this->urlGenerator->generateFromRoute($this->routeMatch->getRouteName(), $this->routeMatch->getRawParameters()->all(), array(
         'query' => $request->query->all(),
         'absolute' => TRUE,
       ));
diff --git a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
index 1d65e50..a83a850 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
@@ -10,6 +10,7 @@
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Url;
 use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\ParameterBag;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -32,6 +33,13 @@ class FormSubmitterTest extends UnitTestCase {
   protected $urlGenerator;
 
   /**
+   * The route match.
+   *
+   * @var \PHPUnit_Framework_MockObject_MockObject|\Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
+  /**
    * {@inheritdoc}
    */
   public static function getInfo() {
@@ -48,6 +56,7 @@ public static function getInfo() {
   public function setUp() {
     parent::setUp();
     $this->urlGenerator = $this->getMock('Drupal\Core\Routing\UrlGeneratorInterface');
+    $this->routeMatch = $this->getMock('Drupal\Core\Routing\RouteMatchInterface');
   }
 
   /**
@@ -121,7 +130,6 @@ public function testRedirectWithResult($form_state, $result, $status = 303) {
     $this->urlGenerator->expects($this->once())
       ->method('generateFromPath')
       ->will($this->returnValueMap(array(
-          array(NULL, array('query' => array(), 'absolute' => TRUE), '<front>'),
           array('foo', array('absolute' => TRUE), 'foo'),
           array('bar', array('query' => array('foo' => 'baz'), 'absolute' => TRUE), 'bar'),
           array('baz', array('absolute' => TRUE), 'baz'),
@@ -135,6 +143,32 @@ public function testRedirectWithResult($form_state, $result, $status = 303) {
   }
 
   /**
+   * Tests the redirectForm() method when no redirect was set.
+   *
+   * @covers ::redirectForm
+   */
+  public function testRedirectWithResultWithoutSpecifiedRedirect() {
+    $form_submitter = $this->getFormSubmitter();
+
+    $this->routeMatch->expects($this->once())
+      ->method('getRouteName')
+      ->will($this->returnValue('test_route'));
+    $this->routeMatch->expects($this->once())
+      ->method('getRawParameters')
+      ->will($this->returnValue(new ParameterBag(array('key' => 'value'))));
+
+    $this->urlGenerator->expects($this->once())
+      ->method('generateFromRoute')
+      ->with($this->equalTo('test_route'), $this->equalTo(array('key' => 'value')))
+      ->will($this->returnValue('test-route'));
+
+    $form_state = $this->getFormStateDefaults();
+    $redirect = $form_submitter->redirectForm($form_state);
+    $this->assertSame('test-route', $redirect->getTargetUrl());
+    $this->assertSame(303, $redirect->getStatusCode());
+  }
+
+  /**
    * Tests the redirectForm() with redirect_route when a redirect is expected.
    *
    * @covers ::redirectForm
@@ -202,7 +236,6 @@ public function testRedirectWithoutResult($form_state) {
    */
   public function providerTestRedirectWithResult() {
     return array(
-      array(array(), '<front>'),
       array(array('redirect' => 'foo'), 'foo'),
       array(array('redirect' => array('foo')), 'foo'),
       array(array('redirect' => array('foo')), 'foo'),
@@ -277,13 +310,17 @@ protected function getFormStateDefaults() {
   }
 
   /**
+   * Sets up a form submitter for the test.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   (optional) The request object.
    * @return \Drupal\Core\Form\FormSubmitterInterface
    */
-  protected function getFormSubmitter() {
+  protected function getFormSubmitter(Request $request = NULL) {
     $request_stack = new RequestStack();
-    $request_stack->push(new Request());
+    $request_stack->push($request ?: new Request());
     return $this->getMockBuilder('Drupal\Core\Form\FormSubmitter')
-      ->setConstructorArgs(array($request_stack, $this->urlGenerator))
+      ->setConstructorArgs(array($request_stack, $this->urlGenerator, $this->routeMatch))
       ->setMethods(array('batchGet', 'drupalInstallationAttempted'))
       ->getMock();
   }
