diff --git a/core/modules/field_ui/src/FieldUI.php b/core/modules/field_ui/src/FieldUI.php
index 5983817..42107d3 100644
--- a/core/modules/field_ui/src/FieldUI.php
+++ b/core/modules/field_ui/src/FieldUI.php
@@ -40,10 +40,15 @@ public static function getOverviewRouteInfo($entity_type_id, $bundle) {
    * @param array $destinations
    *   An array of destinations to redirect to.
    *
-   * @return \Drupal\Core\Url
+   * @return \Drupal\Core\Url|null
    *   The next destination to redirect to.
    */
   public static function getNextDestination(array $destinations) {
+    // If there are no valid destinations left, return here.
+    if (empty($destinations)) {
+      return NULL;
+    }
+
     $next_destination = array_shift($destinations);
     if (is_array($next_destination)) {
       $next_destination['options']['query']['destinations'] = $destinations;
@@ -59,7 +64,7 @@ public static function getNextDestination(array $destinations) {
       }
       // Redirect to any given path within the same domain.
       // @todo Revisit this in https://www.drupal.org/node/2418219.
-      $next_destination = Url::fromUserInput('/' . $options['path']);
+      $next_destination = Url::fromUserInput('/' . $options['path'], $options);
     }
     return $next_destination;
   }
diff --git a/core/modules/field_ui/tests/src/Unit/FieldUiTest.php b/core/modules/field_ui/tests/src/Unit/FieldUiTest.php
new file mode 100644
index 0000000..fc055bf
--- /dev/null
+++ b/core/modules/field_ui/tests/src/Unit/FieldUiTest.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\field_ui\Unit\FieldUiTest.
+ */
+
+namespace Drupal\Tests\field_ui\Unit;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\field_ui\FieldUI;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\field_ui\FieldUI
+ *
+ * @group field_ui
+ */
+class FieldUiTest extends UnitTestCase {
+
+  /**
+   * The path validator.
+   *
+   * @var \Drupal\Core\Path\PathValidatorInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $pathValidator;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->pathValidator = $this->getMock('Drupal\Core\Path\PathValidatorInterface');
+    $container = new ContainerBuilder();
+    $container->set('path.validator', $this->pathValidator);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * @covers ::getNextDestination
+   */
+  public function testGetNextDestination() {
+    $destinations = ['admin', 'admin/content'];
+    $expected_uri = 'base:admin';
+    $expected_query = [
+      'destinations' => ['admin/content'],
+    ];
+    $actual = FieldUI::getNextDestination($destinations);
+    $this->assertSame($expected_uri, $actual->getUri());
+    $this->assertSame($expected_query, $actual->getOption('query'));
+  }
+
+  /**
+   * @covers ::getNextDestination
+   */
+  public function testGetNextDestinationEmpty() {
+    $destinations = [];
+    $actual = FieldUI::getNextDestination($destinations);
+    $this->assertNull($actual);
+  }
+
+  /**
+   * @covers ::getNextDestination
+   */
+  public function testGetNextDestinationRouteName() {
+    $destinations = [['route_name' => 'system.admin'], ['route_name' => 'system.admin_content']];
+    $expected_route_name = 'system.admin';
+    $expected_query = [
+      'destinations' => [['route_name' => 'system.admin_content']],
+    ];
+    $actual = FieldUI::getNextDestination($destinations);
+    $this->assertSame($expected_route_name, $actual->getRouteName());
+    $this->assertSame($expected_query, $actual->getOption('query'));
+  }
+
+}
