diff --git a/core/authorize.php b/core/authorize.php
index 4b0f249..2548354 100644
--- a/core/authorize.php
+++ b/core/authorize.php
@@ -112,8 +112,8 @@ function authorize_access_allowed() {
     }
     else {
       $links = array_merge($links, array(
-        \Drupal::l(t('Administration pages'), new Url('system.admin')),
-        \Drupal::l(t('Front page'), new Url('<front>')),
+        \Drupal::l(t('Administration pages'), Url::fromRoute('system.admin')),
+        \Drupal::l(t('Front page'), Url::fromRoute('<front>')),
       ));
     }
 
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index fa9626a..b0a5e67 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -165,7 +165,7 @@ public function urlInfo($rel = 'canonical', array $options = []) {
 
     if (isset($link_templates[$rel])) {
       // If there is a template for the given relationship type, generate the path.
-      $uri = new Url($link_templates[$rel], $this->urlRouteParameters($rel));
+      $uri = Url::fromRoute($link_templates[$rel], $this->urlRouteParameters($rel));
     }
     else {
       $bundle = $this->bundle();
diff --git a/core/lib/Drupal/Core/Form/FormState.php b/core/lib/Drupal/Core/Form/FormState.php
index b204d77..68d28f8 100644
--- a/core/lib/Drupal/Core/Form/FormState.php
+++ b/core/lib/Drupal/Core/Form/FormState.php
@@ -965,7 +965,7 @@ public function getResponse() {
    * {@inheritdoc}
    */
   public function setRedirect($route_name, array $route_parameters = array(), array $options = array()) {
-    $url = new Url($route_name, $route_parameters, $options);
+    $url = Url::fromRoute($route_name, $route_parameters, $options);
     return $this->setRedirectUrl($url);
   }
 
diff --git a/core/lib/Drupal/Core/Link.php b/core/lib/Drupal/Core/Link.php
index 35dddee..b534a18 100644
--- a/core/lib/Drupal/Core/Link.php
+++ b/core/lib/Drupal/Core/Link.php
@@ -73,7 +73,7 @@ public function __construct($text, Url $url) {
    * @return static
    */
   public static function createFromRoute($text, $route_name, $route_parameters = array(), $options = array()) {
-    return new static($text, new Url($route_name, $route_parameters, $options));
+    return new static($text, Url::fromRoute($route_name, $route_parameters, $options));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkBase.php b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
index c82bef3..cdc9626 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkBase.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
@@ -138,7 +138,7 @@ public function getUrlObject($title_attribute = TRUE) {
       $options['attributes']['title'] = $description;
     }
     if (empty($this->pluginDefinition['url'])) {
-      return new Url($this->pluginDefinition['route_name'], $this->pluginDefinition['route_parameters'], $options);
+      return Url::fromRoute($this->pluginDefinition['route_name'], $this->pluginDefinition['route_parameters'], $options);
     }
     else {
       return Url::fromUri($this->pluginDefinition['url'], $options);
diff --git a/core/lib/Drupal/Core/Path/PathValidator.php b/core/lib/Drupal/Core/Path/PathValidator.php
index 51cdc2f..784671d 100644
--- a/core/lib/Drupal/Core/Path/PathValidator.php
+++ b/core/lib/Drupal/Core/Path/PathValidator.php
@@ -107,7 +107,7 @@ protected function getUrl($path, $access_check) {
     }
 
     if ($parsed_url['path'] == '<front>') {
-      return new Url('<front>', [], $options);
+      return Url::fromRoute('<front>', [], $options);
     }
     elseif (UrlHelper::isExternal($path) && UrlHelper::isValid($path)) {
       if (empty($parsed_url['path'])) {
@@ -127,7 +127,7 @@ protected function getUrl($path, $access_check) {
     $route_name = $attributes[RouteObjectInterface::ROUTE_NAME];
     $route_parameters = $attributes['_raw_variables']->all();
 
-    return new Url($route_name, $route_parameters, $options + ['query' => $request->query->all()]);
+    return Url::fromRoute($route_name, $route_parameters, $options + ['query' => $request->query->all()]);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Updater/Module.php b/core/lib/Drupal/Core/Updater/Module.php
index 06e1c1e..9b68904 100644
--- a/core/lib/Drupal/Core/Updater/Module.php
+++ b/core/lib/Drupal/Core/Updater/Module.php
@@ -100,9 +100,9 @@ public function getSchemaUpdates() {
    */
   public function postInstallTasks() {
     return array(
-      \Drupal::l(t('Install another module'), new Url('update.module_install')),
-      \Drupal::l(t('Enable newly added modules'), new Url('system.modules_list')),
-      \Drupal::l(t('Administration pages'), new Url('system.admin')),
+      \Drupal::l(t('Install another module'), Url::fromRoute('update.module_install')),
+      \Drupal::l(t('Enable newly added modules'), Url::fromRoute('system.modules_list')),
+      \Drupal::l(t('Administration pages'), Url::fromRoute('system.admin')),
     );
   }
 
diff --git a/core/lib/Drupal/Core/Updater/Theme.php b/core/lib/Drupal/Core/Updater/Theme.php
index b379325..26fa7f7 100644
--- a/core/lib/Drupal/Core/Updater/Theme.php
+++ b/core/lib/Drupal/Core/Updater/Theme.php
@@ -84,8 +84,8 @@ public function postInstall() {
    */
   public function postInstallTasks() {
     return array(
-      \Drupal::l(t('Install newly added themes'), new Url('system.themes_page')),
-      \Drupal::l(t('Administration pages'), new Url('system.admin')),
+      \Drupal::l(t('Install newly added themes'), Url::fromRoute('system.themes_page')),
+      \Drupal::l(t('Administration pages'), Url::fromRoute('system.admin')),
     );
   }
 }
diff --git a/core/lib/Drupal/Core/Url.php b/core/lib/Drupal/Core/Url.php
index 9ea38b2..a54bc05 100644
--- a/core/lib/Drupal/Core/Url.php
+++ b/core/lib/Drupal/Core/Url.php
@@ -121,7 +121,7 @@ class Url {
    * @todo Update this documentation for non-routed URIs in
    *   https://www.drupal.org/node/2346787
    */
-  public function __construct($route_name, $route_parameters = array(), $options = array()) {
+  protected function __construct($route_name, $route_parameters = array(), $options = array()) {
     $this->routeName = $route_name;
     $this->routeParameters = $route_parameters;
     $this->options = $options;
diff --git a/core/modules/action/src/Form/ActionDeleteForm.php b/core/modules/action/src/Form/ActionDeleteForm.php
index 86e5eef..1b607a5 100644
--- a/core/modules/action/src/Form/ActionDeleteForm.php
+++ b/core/modules/action/src/Form/ActionDeleteForm.php
@@ -34,7 +34,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('action.admin');
+    return Url::fromRoute('action.admin');
   }
 
   /**
diff --git a/core/modules/aggregator/src/FeedForm.php b/core/modules/aggregator/src/FeedForm.php
index 251bb44..d824e77 100644
--- a/core/modules/aggregator/src/FeedForm.php
+++ b/core/modules/aggregator/src/FeedForm.php
@@ -71,7 +71,7 @@ public function save(array $form, FormStateInterface $form_state) {
       $form_state->setRedirectUrl($feed->urlInfo('canonical'));
     }
     else {
-      $this->logger('aggregator')->notice('Feed %feed added.', array('%feed' => $feed->label(), 'link' => $this->l($this->t('View'), new Url('aggregator.admin_overview'))));
+      $this->logger('aggregator')->notice('Feed %feed added.', array('%feed' => $feed->label(), 'link' => $this->l($this->t('View'), Url::fromRoute('aggregator.admin_overview'))));
       drupal_set_message($this->t('The feed %feed has been added.', array('%feed' => $feed->label())));
     }
   }
diff --git a/core/modules/aggregator/src/Form/FeedDeleteForm.php b/core/modules/aggregator/src/Form/FeedDeleteForm.php
index 2f31bb0..f215622 100644
--- a/core/modules/aggregator/src/Form/FeedDeleteForm.php
+++ b/core/modules/aggregator/src/Form/FeedDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('aggregator.admin_overview');
+    return Url::fromRoute('aggregator.admin_overview');
   }
 
   /**
diff --git a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
index 494ae8f..071babc 100644
--- a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
+++ b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('aggregator.admin_overview');
+    return Url::fromRoute('aggregator.admin_overview');
   }
 
   /**
diff --git a/core/modules/ban/src/Form/BanDelete.php b/core/modules/ban/src/Form/BanDelete.php
index 08ca9a3..5519415 100644
--- a/core/modules/ban/src/Form/BanDelete.php
+++ b/core/modules/ban/src/Form/BanDelete.php
@@ -70,7 +70,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('ban.admin_page');
+    return Url::fromRoute('ban.admin_page');
   }
 
   /**
diff --git a/core/modules/block/src/Form/BlockDeleteForm.php b/core/modules/block/src/Form/BlockDeleteForm.php
index d797cf0..451ac68 100644
--- a/core/modules/block/src/Form/BlockDeleteForm.php
+++ b/core/modules/block/src/Form/BlockDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('block.admin_display');
+    return Url::fromRoute('block.admin_display');
   }
 
   /**
diff --git a/core/modules/block_content/src/Form/BlockContentDeleteForm.php b/core/modules/block_content/src/Form/BlockContentDeleteForm.php
index 1d7724d..345bf8d 100644
--- a/core/modules/block_content/src/Form/BlockContentDeleteForm.php
+++ b/core/modules/block_content/src/Form/BlockContentDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('block.admin_display');
+    return Url::fromRoute('block.admin_display');
   }
 
   /**
diff --git a/core/modules/block_content/src/Form/BlockContentTypeDeleteForm.php b/core/modules/block_content/src/Form/BlockContentTypeDeleteForm.php
index 65fe352..2b799c9 100644
--- a/core/modules/block_content/src/Form/BlockContentTypeDeleteForm.php
+++ b/core/modules/block_content/src/Form/BlockContentTypeDeleteForm.php
@@ -55,7 +55,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('block_content.type_list');
+    return Url::fromRoute('block_content.type_list');
   }
 
   /**
diff --git a/core/modules/comment/src/Form/CommentTypeDeleteForm.php b/core/modules/comment/src/Form/CommentTypeDeleteForm.php
index 7ac7ce7..2ebd502 100644
--- a/core/modules/comment/src/Form/CommentTypeDeleteForm.php
+++ b/core/modules/comment/src/Form/CommentTypeDeleteForm.php
@@ -99,7 +99,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('comment.type_list');
+    return Url::fromRoute('comment.type_list');
   }
 
   /**
diff --git a/core/modules/comment/src/Form/ConfirmDeleteMultiple.php b/core/modules/comment/src/Form/ConfirmDeleteMultiple.php
index f6c8a6e..525cf61 100644
--- a/core/modules/comment/src/Form/ConfirmDeleteMultiple.php
+++ b/core/modules/comment/src/Form/ConfirmDeleteMultiple.php
@@ -70,7 +70,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('comment.admin');
+    return Url::fromRoute('comment.admin');
   }
 
   /**
diff --git a/core/modules/config/src/Form/ConfigSingleImportForm.php b/core/modules/config/src/Form/ConfigSingleImportForm.php
index 58156b0..95d20cf 100644
--- a/core/modules/config/src/Form/ConfigSingleImportForm.php
+++ b/core/modules/config/src/Form/ConfigSingleImportForm.php
@@ -82,7 +82,7 @@ public function getFormID() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('config.import_single');
+    return Url::fromRoute('config.import_single');
   }
 
   /**
diff --git a/core/modules/config/tests/config_test/src/Form/ConfigTestDeleteForm.php b/core/modules/config/tests/config_test/src/Form/ConfigTestDeleteForm.php
index 76fc67e..9ede691 100644
--- a/core/modules/config/tests/config_test/src/Form/ConfigTestDeleteForm.php
+++ b/core/modules/config/tests/config_test/src/Form/ConfigTestDeleteForm.php
@@ -34,7 +34,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('config_test.list_page');
+    return Url::fromRoute('config_test.list_page');
   }
 
   /**
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
index b7146a3..c90a52d 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
@@ -103,7 +103,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url($this->mapper->getOverviewRouteName(), $this->mapper->getOverviewRouteParameters());
+    return Url::fromRoute($this->mapper->getOverviewRouteName(), $this->mapper->getOverviewRouteParameters());
   }
 
   /**
diff --git a/core/modules/contact/src/Form/ContactFormDeleteForm.php b/core/modules/contact/src/Form/ContactFormDeleteForm.php
index a036f2e..d40555c 100644
--- a/core/modules/contact/src/Form/ContactFormDeleteForm.php
+++ b/core/modules/contact/src/Form/ContactFormDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('contact.form_list');
+    return Url::fromRoute('contact.form_list');
   }
 
   /**
diff --git a/core/modules/content_translation/src/Controller/ContentTranslationController.php b/core/modules/content_translation/src/Controller/ContentTranslationController.php
index e3622dc..b8e29ed 100644
--- a/core/modules/content_translation/src/Controller/ContentTranslationController.php
+++ b/core/modules/content_translation/src/Controller/ContentTranslationController.php
@@ -78,7 +78,7 @@ public function overview(Request $request, $entity_type_id = NULL) {
         $language_name = $language->getName();
         $langcode = $language->getId();
 
-        $add_url = new Url(
+        $add_url = Url::fromRoute(
           'content_translation.translation_add_' . $entity_type_id,
           array(
             'source' => $original,
@@ -89,7 +89,7 @@ public function overview(Request $request, $entity_type_id = NULL) {
             'language' => $language,
           )
         );
-        $edit_url = new Url(
+        $edit_url = Url::fromRoute(
           'content_translation.translation_edit_' . $entity_type_id,
           array(
             'language' => $language->getId(),
@@ -99,7 +99,7 @@ public function overview(Request $request, $entity_type_id = NULL) {
             'language' => $language,
           )
         );
-        $delete_url = new Url(
+        $delete_url = Url::fromRoute(
           'content_translation.translation_delete_' . $entity_type_id,
           array(
             'language' => $language->getId(),
@@ -183,7 +183,7 @@ public function overview(Request $request, $entity_type_id = NULL) {
               );
             }
             elseif ($field_ui) {
-              $url = new Url('language.content_settings_page');
+              $url = Url::fromRoute('language.content_settings_page');
 
               // Link directly to the fields tab to make it easier to find the
               // setting to enable translation on fields.
diff --git a/core/modules/dblog/src/Controller/DbLogController.php b/core/modules/dblog/src/Controller/DbLogController.php
index 2ef2d06..3b18249 100644
--- a/core/modules/dblog/src/Controller/DbLogController.php
+++ b/core/modules/dblog/src/Controller/DbLogController.php
@@ -176,7 +176,7 @@ public function overview() {
       if ($message && isset($dblog->wid)) {
         // Truncate link_text to 56 chars of message.
         $log_text = Unicode::truncate(Xss::filter($message, array()), 56, TRUE, TRUE);
-        $message = $this->l($log_text, new Url('dblog.event', array('event_id' => $dblog->wid), array(
+        $message = $this->l($log_text, Url::fromRoute('dblog.event', array('event_id' => $dblog->wid), array(
           'attributes' => array(
             // Provide a title for the link for useful hover hints.
             'title' => Unicode::truncate(strip_tags($message), 256, TRUE, TRUE),
diff --git a/core/modules/dblog/src/Form/DblogClearLogConfirmForm.php b/core/modules/dblog/src/Form/DblogClearLogConfirmForm.php
index 1f43ef1..f958945 100644
--- a/core/modules/dblog/src/Form/DblogClearLogConfirmForm.php
+++ b/core/modules/dblog/src/Form/DblogClearLogConfirmForm.php
@@ -62,7 +62,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('dblog.overview');
+    return Url::fromRoute('dblog.overview');
   }
 
   /**
diff --git a/core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php b/core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php
index a8fcb5b..68d3d2d 100644
--- a/core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php
+++ b/core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php
@@ -62,12 +62,12 @@ public function testIntegration() {
     // Setup a watchdog entry without tokens.
     $entries[] = array(
       'message' => $this->randomMachineName(),
-      'variables' => array('link' => \Drupal::l('Link', new Url('<front>'))),
+      'variables' => array('link' => \Drupal::l('Link', Url::fromRoute('<front>'))),
     );
     // Setup a watchdog entry with one token.
     $entries[] = array(
       'message' => '@token1',
-      'variables' => array('@token1' => $this->randomMachineName(), 'link' => \Drupal::l('Link', new Url('<front>'))),
+      'variables' => array('@token1' => $this->randomMachineName(), 'link' => \Drupal::l('Link', Url::fromRoute('<front>'))),
     );
     // Setup a watchdog entry with two tokens.
     $entries[] = array(
@@ -77,7 +77,7 @@ public function testIntegration() {
       'variables' => array(
         '@token1' => $this->randomMachineName(),
         '!token2' => $this->randomMachineName(),
-        'link' => \Drupal::l('<object>Link</object>', new Url('<front>')),
+        'link' => \Drupal::l('<object>Link</object>', Url::fromRoute('<front>')),
       ),
     );
     $logger_factory = $this->container->get('logger.factory');
diff --git a/core/modules/field_ui/src/Controller/EntityDisplayModeController.php b/core/modules/field_ui/src/Controller/EntityDisplayModeController.php
index 88ffd4e..5b7f404 100644
--- a/core/modules/field_ui/src/Controller/EntityDisplayModeController.php
+++ b/core/modules/field_ui/src/Controller/EntityDisplayModeController.php
@@ -27,7 +27,7 @@ public function viewModeTypeSelection() {
       if ($entity_type->get('field_ui_base_route') && $entity_type->hasViewBuilderClass()) {
         $entity_types[$entity_type_id] = array(
           'title' => $entity_type->getLabel(),
-          'url' => new Url('field_ui.entity_view_mode_add_type', array('entity_type_id' => $entity_type_id)),
+          'url' => Url::fromRoute('field_ui.entity_view_mode_add_type', array('entity_type_id' => $entity_type_id)),
           'localized_options' => array(),
         );
       }
@@ -50,7 +50,7 @@ public function formModeTypeSelection() {
       if ($entity_type->get('field_ui_base_route') && $entity_type->hasFormClasses()) {
         $entity_types[$entity_type_id] = array(
           'title' => $entity_type->getLabel(),
-          'url' => new Url('field_ui.entity_form_mode_add_type', array('entity_type_id' => $entity_type_id)),
+          'url' => Url::fromRoute('field_ui.entity_form_mode_add_type', array('entity_type_id' => $entity_type_id)),
           'localized_options' => array(),
         );
       }
diff --git a/core/modules/field_ui/src/FieldUI.php b/core/modules/field_ui/src/FieldUI.php
index 1658c79..b301216 100644
--- a/core/modules/field_ui/src/FieldUI.php
+++ b/core/modules/field_ui/src/FieldUI.php
@@ -29,7 +29,7 @@ class FieldUI {
   public static function getOverviewRouteInfo($entity_type_id, $bundle) {
     $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
     if ($entity_type->get('field_ui_base_route')) {
-      return new Url("field_ui.overview_$entity_type_id", array(
+      return Url::fromRoute("field_ui.overview_$entity_type_id", array(
         $entity_type->getBundleEntityType() => $bundle,
       ));
     }
diff --git a/core/modules/field_ui/src/Form/EntityDisplayModeDeleteForm.php b/core/modules/field_ui/src/Form/EntityDisplayModeDeleteForm.php
index 315c918..f469311 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayModeDeleteForm.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayModeDeleteForm.php
@@ -20,7 +20,7 @@ class EntityDisplayModeDeleteForm extends EntityConfirmFormBase {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('field_ui.' . $this->entity->getEntityTypeId() . '_list');
+    return Url::fromRoute('field_ui.' . $this->entity->getEntityTypeId() . '_list');
   }
 
   /**
diff --git a/core/modules/filter/src/Element/TextFormat.php b/core/modules/filter/src/Element/TextFormat.php
index 000984a..101cc19 100644
--- a/core/modules/filter/src/Element/TextFormat.php
+++ b/core/modules/filter/src/Element/TextFormat.php
@@ -179,7 +179,7 @@ public static function processFormat(&$element, FormStateInterface $form_state,
     $element['format']['help'] = array(
       '#type' => 'container',
       '#attributes' => array('class' => array('filter-help')),
-      '#markup' => \Drupal::l(t('About text formats'), new Url('filter.tips_all', array(), array('attributes' => array('target' => '_blank')))),
+      '#markup' => \Drupal::l(t('About text formats'), Url::fromRoute('filter.tips_all', array(), array('attributes' => array('target' => '_blank')))),
       '#weight' => 0,
     );
 
diff --git a/core/modules/filter/src/Form/FilterDisableForm.php b/core/modules/filter/src/Form/FilterDisableForm.php
index 5795d8f..ce986dd 100644
--- a/core/modules/filter/src/Form/FilterDisableForm.php
+++ b/core/modules/filter/src/Form/FilterDisableForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('filter.admin_overview');
+    return Url::fromRoute('filter.admin_overview');
   }
 
   /**
diff --git a/core/modules/forum/src/Form/DeleteForm.php b/core/modules/forum/src/Form/DeleteForm.php
index 1c73319..3255549 100644
--- a/core/modules/forum/src/Form/DeleteForm.php
+++ b/core/modules/forum/src/Form/DeleteForm.php
@@ -42,7 +42,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('forum.overview');
+    return Url::fromRoute('forum.overview');
   }
 
   /**
diff --git a/core/modules/forum/src/Form/ForumForm.php b/core/modules/forum/src/Form/ForumForm.php
index 4641781..d647ad6 100644
--- a/core/modules/forum/src/Form/ForumForm.php
+++ b/core/modules/forum/src/Form/ForumForm.php
@@ -82,7 +82,7 @@ public function save(array $form, FormStateInterface $form_state) {
 
     $route_name = $this->urlStub == 'container' ? 'entity.taxonomy_term.forum_edit_container_form' : 'entity.taxonomy_term.forum_edit_form';
     $route_parameters  = ['taxonomy_term' => $term->id()];
-    $link = $this->l($this->t('Edit'), new Url($route_name, $route_parameters));
+    $link = $this->l($this->t('Edit'), Url::fromRoute($route_name, $route_parameters));
     switch ($status) {
       case SAVED_NEW:
         drupal_set_message($this->t('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
diff --git a/core/modules/help/src/Controller/HelpController.php b/core/modules/help/src/Controller/HelpController.php
index 2de0a53..9935f1c 100644
--- a/core/modules/help/src/Controller/HelpController.php
+++ b/core/modules/help/src/Controller/HelpController.php
@@ -84,7 +84,7 @@ protected function helpLinksAsList() {
     $output = '<div class="clearfix"><div class="help-items"><ul>';
     $i = 0;
     foreach ($modules as $module => $name) {
-      $output .= '<li>' . $this->l($name, new Url('help.page', array('name' => $module))) . '</li>';
+      $output .= '<li>' . $this->l($name, Url::fromRoute('help.page', array('name' => $module))) . '</li>';
       if (($i + 1) % $break == 0 && ($i + 1) != $count) {
         $output .= '</ul></div><div class="help-items' . ($i + 1 == $break * 3 ? ' help-items-last' : '') . '"><ul>';
       }
diff --git a/core/modules/image/src/Form/ImageStyleDeleteForm.php b/core/modules/image/src/Form/ImageStyleDeleteForm.php
index 65dddac..747d429 100644
--- a/core/modules/image/src/Form/ImageStyleDeleteForm.php
+++ b/core/modules/image/src/Form/ImageStyleDeleteForm.php
@@ -34,7 +34,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('image.style_list');
+    return Url::fromRoute('image.style_list');
   }
 
   /**
diff --git a/core/modules/image/src/Form/ImageStyleFlushForm.php b/core/modules/image/src/Form/ImageStyleFlushForm.php
index d5f0ea5..0aa3b71 100644
--- a/core/modules/image/src/Form/ImageStyleFlushForm.php
+++ b/core/modules/image/src/Form/ImageStyleFlushForm.php
@@ -41,7 +41,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('image.style_list');
+    return Url::fromRoute('image.style_list');
   }
 
   /**
diff --git a/core/modules/language/src/Form/LanguageDeleteForm.php b/core/modules/language/src/Form/LanguageDeleteForm.php
index 32fb889..2284723 100644
--- a/core/modules/language/src/Form/LanguageDeleteForm.php
+++ b/core/modules/language/src/Form/LanguageDeleteForm.php
@@ -58,7 +58,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('language.admin_overview');
+    return Url::fromRoute('language.admin_overview');
   }
 
   /**
diff --git a/core/modules/language/src/Form/NegotiationBrowserDeleteForm.php b/core/modules/language/src/Form/NegotiationBrowserDeleteForm.php
index aa8fbea..2abe733 100644
--- a/core/modules/language/src/Form/NegotiationBrowserDeleteForm.php
+++ b/core/modules/language/src/Form/NegotiationBrowserDeleteForm.php
@@ -35,7 +35,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('language.negotiation_browser');
+    return Url::fromRoute('language.negotiation_browser');
   }
 
   /**
diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
index 9b44af0..5d02f87 100644
--- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
@@ -102,7 +102,7 @@ public function getUrl() {
    */
   public function getUrlObject() {
     if ($route_name = $this->getRouteName()) {
-      $url = new Url($route_name, $this->getRouteParameters(), $this->getOptions());
+      $url = Url::fromRoute($route_name, $this->getRouteParameters(), $this->getOptions());
     }
     else {
       $path = $this->getUrl();
@@ -110,7 +110,7 @@ public function getUrlObject() {
         $url = Url::fromUri($path);
       }
       else {
-        $url = new Url('<front>');
+        $url = Url::fromRoute('<front>');
       }
     }
 
diff --git a/core/modules/menu_link_content/src/Form/MenuLinkContentDeleteForm.php b/core/modules/menu_link_content/src/Form/MenuLinkContentDeleteForm.php
index 882fdc9..bf8ac29 100644
--- a/core/modules/menu_link_content/src/Form/MenuLinkContentDeleteForm.php
+++ b/core/modules/menu_link_content/src/Form/MenuLinkContentDeleteForm.php
@@ -60,7 +60,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('entity.menu.edit_form', array('menu' => $this->entity->getMenuName()));
+    return Url::fromRoute('entity.menu.edit_form', array('menu' => $this->entity->getMenuName()));
   }
 
   /**
diff --git a/core/modules/menu_ui/src/Form/MenuLinkResetForm.php b/core/modules/menu_ui/src/Form/MenuLinkResetForm.php
index 9c4c63b..37031e5 100644
--- a/core/modules/menu_ui/src/Form/MenuLinkResetForm.php
+++ b/core/modules/menu_ui/src/Form/MenuLinkResetForm.php
@@ -71,7 +71,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('entity.menu.edit_form', array(
+    return Url::fromRoute('entity.menu.edit_form', array(
       'menu' => $this->link->getMenuName(),
     ));
   }
diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php
index 33c5989..ce795f6 100644
--- a/core/modules/node/src/Controller/NodeController.php
+++ b/core/modules/node/src/Controller/NodeController.php
@@ -178,7 +178,7 @@ public function revisionOverview(NodeInterface $node) {
             '#theme' => 'username',
             '#account' => $revision_author,
           );
-          $row[] = $this->t('!date by !username', array('!date' => $this->l($this->dateFormatter->format($revision->revision_timestamp->value, 'short'), new Url('node.revision_show', array('node' => $node->id(), 'node_revision' => $vid))), '!username' => drupal_render($username)))
+          $row[] = $this->t('!date by !username', array('!date' => $this->l($this->dateFormatter->format($revision->revision_timestamp->value, 'short'), Url::fromRoute('node.revision_show', array('node' => $node->id(), 'node_revision' => $vid))), '!username' => drupal_render($username)))
             . (($revision->revision_log->value != '') ? '<p class="revision-log">' . Xss::filter($revision->revision_log->value) . '</p>' : '');
 
           if ($revert_permission) {
diff --git a/core/modules/node/src/Form/DeleteMultiple.php b/core/modules/node/src/Form/DeleteMultiple.php
index 7b2aced..639ba50 100644
--- a/core/modules/node/src/Form/DeleteMultiple.php
+++ b/core/modules/node/src/Form/DeleteMultiple.php
@@ -83,7 +83,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('system.admin_content');
+    return Url::fromRoute('system.admin_content');
   }
 
   /**
diff --git a/core/modules/node/src/Form/NodeRevisionDeleteForm.php b/core/modules/node/src/Form/NodeRevisionDeleteForm.php
index 352cef0..71a4b65 100644
--- a/core/modules/node/src/Form/NodeRevisionDeleteForm.php
+++ b/core/modules/node/src/Form/NodeRevisionDeleteForm.php
@@ -94,7 +94,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('entity.node.version_history', array('node' => $this->revision->id()));
+    return Url::fromRoute('entity.node.version_history', array('node' => $this->revision->id()));
   }
 
   /**
diff --git a/core/modules/node/src/Form/NodeRevisionRevertForm.php b/core/modules/node/src/Form/NodeRevisionRevertForm.php
index d6e748e..7d07739 100644
--- a/core/modules/node/src/Form/NodeRevisionRevertForm.php
+++ b/core/modules/node/src/Form/NodeRevisionRevertForm.php
@@ -70,7 +70,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('entity.node.version_history', array('node' => $this->revision->id()));
+    return Url::fromRoute('entity.node.version_history', array('node' => $this->revision->id()));
   }
 
   /**
diff --git a/core/modules/node/src/Form/NodeTypeDeleteConfirm.php b/core/modules/node/src/Form/NodeTypeDeleteConfirm.php
index 0242301..cdee938 100644
--- a/core/modules/node/src/Form/NodeTypeDeleteConfirm.php
+++ b/core/modules/node/src/Form/NodeTypeDeleteConfirm.php
@@ -55,7 +55,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('node.overview_types');
+    return Url::fromRoute('node.overview_types');
   }
 
   /**
diff --git a/core/modules/node/src/Form/RebuildPermissionsForm.php b/core/modules/node/src/Form/RebuildPermissionsForm.php
index 9b8246a..64f076f 100644
--- a/core/modules/node/src/Form/RebuildPermissionsForm.php
+++ b/core/modules/node/src/Form/RebuildPermissionsForm.php
@@ -31,7 +31,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('system.status');
+    return Url::fromRoute('system.status');
   }
 
   /**
diff --git a/core/modules/node/src/NodeTypeForm.php b/core/modules/node/src/NodeTypeForm.php
index 087409c..50990d3 100644
--- a/core/modules/node/src/NodeTypeForm.php
+++ b/core/modules/node/src/NodeTypeForm.php
@@ -231,7 +231,7 @@ public function save(array $form, FormStateInterface $form_state) {
     }
     elseif ($status == SAVED_NEW) {
       drupal_set_message(t('The content type %name has been added.', $t_args));
-      $context = array_merge($t_args, array('link' => $this->l(t('View'), new Url('node.overview_types'))));
+      $context = array_merge($t_args, array('link' => $this->l(t('View'), Url::fromRoute('node.overview_types'))));
       $this->logger('node')->notice('Added content type %name.', $context);
     }
 
diff --git a/core/modules/path/src/Form/DeleteForm.php b/core/modules/path/src/Form/DeleteForm.php
index 80251dc..c71d249 100644
--- a/core/modules/path/src/Form/DeleteForm.php
+++ b/core/modules/path/src/Form/DeleteForm.php
@@ -69,7 +69,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('path.admin_overview');
+    return Url::fromRoute('path.admin_overview');
   }
 
   /**
diff --git a/core/modules/path/src/Form/EditForm.php b/core/modules/path/src/Form/EditForm.php
index 95d5e20..31e2d54 100644
--- a/core/modules/path/src/Form/EditForm.php
+++ b/core/modules/path/src/Form/EditForm.php
@@ -53,7 +53,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $pid = NU
    * Submits the delete form.
    */
   public function deleteSubmit(array &$form, FormStateInterface $form_state) {
-    $url = new Url('path.delete', array(
+    $url = Url::fromRoute('path.delete', array(
       'pid' => $form_state->getValue('pid'),
     ));
 
diff --git a/core/modules/responsive_image/src/Form/ResponsiveImageMappingDeleteForm.php b/core/modules/responsive_image/src/Form/ResponsiveImageMappingDeleteForm.php
index d5526b5..6ec7b2c 100644
--- a/core/modules/responsive_image/src/Form/ResponsiveImageMappingDeleteForm.php
+++ b/core/modules/responsive_image/src/Form/ResponsiveImageMappingDeleteForm.php
@@ -24,7 +24,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('responsive_image.mapping_page');
+    return Url::fromRoute('responsive_image.mapping_page');
   }
 
   /**
diff --git a/core/modules/search/src/Form/ReindexConfirm.php b/core/modules/search/src/Form/ReindexConfirm.php
index 3136559..b73d46f 100644
--- a/core/modules/search/src/Form/ReindexConfirm.php
+++ b/core/modules/search/src/Form/ReindexConfirm.php
@@ -55,7 +55,7 @@ public function getCancelText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('search.settings');
+    return Url::fromRoute('search.settings');
   }
 
   /**
diff --git a/core/modules/search/src/Form/SearchPageDeleteForm.php b/core/modules/search/src/Form/SearchPageDeleteForm.php
index 5518d59..64dadb4 100644
--- a/core/modules/search/src/Form/SearchPageDeleteForm.php
+++ b/core/modules/search/src/Form/SearchPageDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('search.settings');
+    return Url::fromRoute('search.settings');
   }
 
   /**
diff --git a/core/modules/search/src/Tests/SearchRankingTest.php b/core/modules/search/src/Tests/SearchRankingTest.php
index 669e6c4..d4e731d 100644
--- a/core/modules/search/src/Tests/SearchRankingTest.php
+++ b/core/modules/search/src/Tests/SearchRankingTest.php
@@ -219,7 +219,7 @@ public function testHTMLRankings() {
     foreach ($shuffled_tags as $tag) {
       switch ($tag) {
         case 'a':
-          $settings['body'] = array(array('value' => \Drupal::l('Drupal Rocks', new Url('<front>')), 'format' => 'full_html'));
+          $settings['body'] = array(array('value' => \Drupal::l('Drupal Rocks', Url::fromRoute('<front>')), 'format' => 'full_html'));
           break;
         case 'notag':
           $settings['body'] = array(array('value' => 'Drupal Rocks'));
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index 770406a..f86aa46 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -86,7 +86,7 @@ public function setWeight($weight) {
    * {@inheritdoc}
    */
   public function getUrl() {
-    return new Url($this->getRouteName(), $this->getRouteParameters());
+    return Url::fromRoute($this->getRouteName(), $this->getRouteParameters());
   }
 
   /**
@@ -140,7 +140,7 @@ public function preSave(EntityStorageInterface $storage) {
     //   here. The problem is that we need an exception, not a FALSE
     //   return value. https://www.drupal.org/node/2346695
     if ($this->path->value == '<front>') {
-      $url = new Url($this->path->value);
+      $url = Url::fromRoute($this->path->value);
     }
     else {
       $url = Url::createFromRequest(Request::create("/{$this->path->value}"));
diff --git a/core/modules/shortcut/src/Form/ShortcutDeleteForm.php b/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
index 6d8ec7c..dfb293c 100644
--- a/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
+++ b/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
@@ -34,7 +34,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('entity.shortcut_set.customize_form', array(
+    return Url::fromRoute('entity.shortcut_set.customize_form', array(
       'shortcut_set' => $this->entity->bundle(),
     ));
   }
diff --git a/core/modules/system/module.api.php b/core/modules/system/module.api.php
index 29a9bf3..e78444a 100644
--- a/core/modules/system/module.api.php
+++ b/core/modules/system/module.api.php
@@ -740,7 +740,7 @@ function hook_requirements($phase) {
   // Test PHP version
   $requirements['php'] = array(
     'title' => t('PHP'),
-    'value' => ($phase == 'runtime') ? \Drupal::l(phpversion(), new Url('system.php')) : phpversion(),
+    'value' => ($phase == 'runtime') ? \Drupal::l(phpversion(), Url::fromRoute('system.php')) : phpversion(),
   );
   if (version_compare(phpversion(), DRUPAL_MINIMUM_PHP) < 0) {
     $requirements['php']['description'] = t('Your PHP installation is too old. Drupal requires at least PHP %version.', array('%version' => DRUPAL_MINIMUM_PHP));
diff --git a/core/modules/system/src/Controller/DbUpdateController.php b/core/modules/system/src/Controller/DbUpdateController.php
index 7dff04a..4377e28 100644
--- a/core/modules/system/src/Controller/DbUpdateController.php
+++ b/core/modules/system/src/Controller/DbUpdateController.php
@@ -211,7 +211,7 @@ protected function info() {
       '#markup' => '<p>' . $this->t('When you have performed the steps above, you may proceed.') . '</p>',
     );
 
-    $url = new Url('system.db_update', array('op' => 'selection'));
+    $url = Url::fromRoute('system.db_update', array('op' => 'selection'));
     $build['link'] = array(
       '#type' => 'link',
       '#title' => $this->t('Continue'),
@@ -342,7 +342,7 @@ protected function selection() {
       else {
         $build['start']['#title'] = $this->formatPlural($count, '1 pending update', '@count pending updates');
       }
-      $url = new Url('system.db_update', array('op' => 'run'));
+      $url = Url::fromRoute('system.db_update', array('op' => 'run'));
       $build['link'] = array(
         '#type' => 'link',
         '#title' => $this->t('Apply pending updates'),
diff --git a/core/modules/system/src/Form/DateFormatDeleteForm.php b/core/modules/system/src/Form/DateFormatDeleteForm.php
index 0cb8729..12a2e45 100644
--- a/core/modules/system/src/Form/DateFormatDeleteForm.php
+++ b/core/modules/system/src/Form/DateFormatDeleteForm.php
@@ -65,7 +65,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('system.date_format_list');
+    return Url::fromRoute('system.date_format_list');
   }
 
   /**
diff --git a/core/modules/system/src/Form/ModulesListConfirmForm.php b/core/modules/system/src/Form/ModulesListConfirmForm.php
index c04a030..a8fc6a7 100644
--- a/core/modules/system/src/Form/ModulesListConfirmForm.php
+++ b/core/modules/system/src/Form/ModulesListConfirmForm.php
@@ -74,7 +74,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('system.modules_list');
+    return Url::fromRoute('system.modules_list');
   }
 
   /**
diff --git a/core/modules/system/src/Form/ModulesUninstallConfirmForm.php b/core/modules/system/src/Form/ModulesUninstallConfirmForm.php
index 5a0e0fe..b47e269 100644
--- a/core/modules/system/src/Form/ModulesUninstallConfirmForm.php
+++ b/core/modules/system/src/Form/ModulesUninstallConfirmForm.php
@@ -106,7 +106,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('system.modules_uninstall');
+    return Url::fromRoute('system.modules_uninstall');
   }
 
   /**
diff --git a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
index 6d10aff..f8f267b 100644
--- a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
@@ -87,8 +87,8 @@ public function blockForm($form, FormStateInterface $form_state) {
     $theme = $form_state->get('block_theme');
 
     // Get permissions.
-    $url_system_theme_settings = new Url('system.theme_settings');
-    $url_system_theme_settings_theme = new Url('system.theme_settings_theme', array('theme' => $theme));
+    $url_system_theme_settings = Url::fromRoute('system.theme_settings');
+    $url_system_theme_settings_theme = Url::fromRoute('system.theme_settings_theme', array('theme' => $theme));
 
     if ($url_system_theme_settings->access() && $url_system_theme_settings_theme->access()) {
       // Provide links to the Appearance Settings and Theme Settings pages
@@ -103,7 +103,7 @@ public function blockForm($form, FormStateInterface $form_state) {
       // Settings pages.
       $site_logo_description = $this->t('Defined on the Appearance or Theme Settings page. You do not have the appropriate permissions to change the site logo.');
     }
-    $url_system_site_information_settings = new Url('system.site_information_settings');
+    $url_system_site_information_settings = Url::fromRoute('system.site_information_settings');
     if ($url_system_site_information_settings->access()) {
       // Get paths to settings pages.
       $site_information_url = $url_system_site_information_settings->toString();
diff --git a/core/modules/system/src/Tests/Common/UrlTest.php b/core/modules/system/src/Tests/Common/UrlTest.php
index 92342d2..3635bc6 100644
--- a/core/modules/system/src/Tests/Common/UrlTest.php
+++ b/core/modules/system/src/Tests/Common/UrlTest.php
@@ -110,7 +110,7 @@ function testLinkAttributes() {
     // Test adding a custom class in links produced by _l() and #type 'link'.
     // Test _l().
     $class_l = $this->randomMachineName();
-    $link_l = \Drupal::l($this->randomMachineName(), new Url('<current>', [], ['attributes' => ['class' => [$class_l]]]));
+    $link_l = \Drupal::l($this->randomMachineName(), Url::fromRoute('<current>', [], ['attributes' => ['class' => [$class_l]]]));
     $this->assertTrue($this->hasAttribute('class', $link_l, $class_l), format_string('Custom class @class is present on link when requested by l()', array('@class' => $class_l)));
 
     // Test #type.
diff --git a/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php b/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
index 6018122..d98398e 100644
--- a/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
+++ b/core/modules/system/src/Tests/HttpKernel/StackKernelIntegrationTest.php
@@ -40,7 +40,7 @@ protected function setUp() {
    * Tests a request.
    */
   public function testRequest() {
-    $request = Request::create((new Url('httpkernel_test.empty'))->toString());
+    $request = Request::create((Url::fromRoute('httpkernel_test.empty'))->toString());
     /** @var \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel */
     $http_kernel = \Drupal::service('http_kernel');
     $http_kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, FALSE);
diff --git a/core/modules/system/src/Tests/Routing/UrlIntegrationTest.php b/core/modules/system/src/Tests/Routing/UrlIntegrationTest.php
index 66239c9..209e6e9 100644
--- a/core/modules/system/src/Tests/Routing/UrlIntegrationTest.php
+++ b/core/modules/system/src/Tests/Routing/UrlIntegrationTest.php
@@ -52,15 +52,15 @@ public function testAccess() {
     $user_with_access = User::create(['roles' => ['role_with_access']]);
     $user_without_access = User::create(['roles' => ['role_without_access']]);
 
-    $url_always_access = new Url('router_test.1');
+    $url_always_access = Url::fromRoute('router_test.1');
     $this->assertTrue($url_always_access->access($user_with_access));
     $this->assertTrue($url_always_access->access($user_without_access));
 
-    $url_none_access = new Url('router_test.15');
+    $url_none_access = Url::fromRoute('router_test.15');
     $this->assertFalse($url_none_access->access($user_with_access));
     $this->assertFalse($url_none_access->access($user_without_access));
 
-    $url_access = new Url('router_test.16');
+    $url_access = Url::fromRoute('router_test.16');
     $this->assertTrue($url_access->access($user_with_access));
     $this->assertFalse($url_access->access($user_without_access));
   }
diff --git a/core/modules/system/src/Tests/Theme/EngineTwigTest.php b/core/modules/system/src/Tests/Theme/EngineTwigTest.php
index acfd1d1..8394883 100644
--- a/core/modules/system/src/Tests/Theme/EngineTwigTest.php
+++ b/core/modules/system/src/Tests/Theme/EngineTwigTest.php
@@ -73,7 +73,7 @@ public function testTwigLinkGenerator() {
     $link_generator = $this->container->get('link_generator');
 
     $expected = [
-      'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register')),
+      'link via the linkgenerator: ' . $link_generator->generate('register', Url::fromRoute('user.register')),
     ];
 
     $content = $this->getRawContent();
diff --git a/core/modules/system/tests/modules/entity_test/src/EntityTestDeleteForm.php b/core/modules/system/tests/modules/entity_test/src/EntityTestDeleteForm.php
index f71f3e1..8584665 100644
--- a/core/modules/system/tests/modules/entity_test/src/EntityTestDeleteForm.php
+++ b/core/modules/system/tests/modules/entity_test/src/EntityTestDeleteForm.php
@@ -20,7 +20,7 @@ class EntityTestDeleteForm extends ContentEntityConfirmFormBase {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('<front>');
+    return Url::fromRoute('<front>');
   }
 
   /**
diff --git a/core/modules/system/tests/modules/form_test/src/ConfirmFormArrayPathTestForm.php b/core/modules/system/tests/modules/form_test/src/ConfirmFormArrayPathTestForm.php
index 6cd8c2f..d70ccec 100644
--- a/core/modules/system/tests/modules/form_test/src/ConfirmFormArrayPathTestForm.php
+++ b/core/modules/system/tests/modules/form_test/src/ConfirmFormArrayPathTestForm.php
@@ -25,7 +25,7 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('form_test.route6', array(), array(
+    return Url::fromRoute('form_test.route6', array(), array(
       'query' => array(
         'destination' => 'admin/config',
       ),
diff --git a/core/modules/system/tests/modules/form_test/src/ConfirmFormTestForm.php b/core/modules/system/tests/modules/form_test/src/ConfirmFormTestForm.php
index fd74f3b..548a9db 100644
--- a/core/modules/system/tests/modules/form_test/src/ConfirmFormTestForm.php
+++ b/core/modules/system/tests/modules/form_test/src/ConfirmFormTestForm.php
@@ -34,7 +34,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('form_test.route8');
+    return Url::fromRoute('form_test.route8');
   }
 
   /**
diff --git a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
index f657c4d..86c2f1a 100644
--- a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
+++ b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
@@ -45,7 +45,7 @@ public function urlGeneratorRender() {
   public function linkGeneratorRender() {
     return array(
       '#theme' => 'twig_theme_test_link_generator',
-      '#test_url' => new Url('user.register'),
+      '#test_url' => Url::fromRoute('user.register'),
     );
   }
 
diff --git a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
index 62488f4..a2d3747 100644
--- a/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
+++ b/core/modules/system/tests/src/Unit/Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
@@ -132,7 +132,7 @@ public function testBuildWithOnePathElement() {
       ->will($this->returnValue('/example'));
 
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
-    $this->assertEquals(array(0 => new Link('Home', new Url('<front>'))), $links);
+    $this->assertEquals(array(0 => new Link('Home', Url::fromRoute('<front>'))), $links);
   }
 
   /**
@@ -164,7 +164,7 @@ public function testBuildWithTwoPathElements() {
     $this->setupAccessManagerToAllow();
 
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
-    $this->assertEquals(array(0 => new Link('Home', new Url('<front>')), 1 => new Link('Example', new Url('example'))), $links);
+    $this->assertEquals(array(0 => new Link('Home', Url::fromRoute('<front>')), 1 => new Link('Example', Url::fromRoute('example'))), $links);
   }
 
   /**
@@ -205,9 +205,9 @@ public function testBuildWithThreePathElements() {
 
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
     $this->assertEquals(array(
-      new Link('Home', new Url('<front>')),
-      new Link('Example', new Url('example')),
-      new Link('Bar', new Url('example_bar')),
+      new Link('Home', Url::fromRoute('<front>')),
+      new Link('Example', Url::fromRoute('example')),
+      new Link('Bar', Url::fromRoute('example_bar')),
     ), $links);
   }
 
@@ -232,7 +232,7 @@ public function testBuildWithException($exception_class, $exception_argument) {
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
 
     // No path matched, though at least the frontpage is displayed.
-    $this->assertEquals(array(0 => new Link('Home', new Url('<front>'))), $links);
+    $this->assertEquals(array(0 => new Link('Home', Url::fromRoute('<front>'))), $links);
   }
 
   /**
@@ -273,7 +273,7 @@ public function testBuildWithNonProcessedPath() {
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
 
     // No path matched, though at least the frontpage is displayed.
-    $this->assertEquals(array(0 => new Link('Home', new Url('<front>'))), $links);
+    $this->assertEquals(array(0 => new Link('Home', Url::fromRoute('<front>'))), $links);
   }
 
   /**
@@ -318,7 +318,7 @@ public function testBuildWithUserPath() {
       ->will($this->returnValue('Admin'));
 
     $links = $this->builder->build($this->getMock('Drupal\Core\Routing\RouteMatchInterface'));
-    $this->assertEquals(array(0 => new Link('Home', new Url('<front>')), 1 => new Link('Admin', new Url('user_page'))), $links);
+    $this->assertEquals(array(0 => new Link('Home', Url::fromRoute('<front>')), 1 => new Link('Admin', Url::fromRoute('user_page'))), $links);
   }
 
   /**
diff --git a/core/modules/taxonomy/src/Form/TermDeleteForm.php b/core/modules/taxonomy/src/Form/TermDeleteForm.php
index 77a3644..c7697b2 100644
--- a/core/modules/taxonomy/src/Form/TermDeleteForm.php
+++ b/core/modules/taxonomy/src/Form/TermDeleteForm.php
@@ -36,7 +36,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('taxonomy.vocabulary_list');
+    return Url::fromRoute('taxonomy.vocabulary_list');
   }
 
   /**
diff --git a/core/modules/taxonomy/src/Form/VocabularyDeleteForm.php b/core/modules/taxonomy/src/Form/VocabularyDeleteForm.php
index 16ae285..dff836e 100644
--- a/core/modules/taxonomy/src/Form/VocabularyDeleteForm.php
+++ b/core/modules/taxonomy/src/Form/VocabularyDeleteForm.php
@@ -34,7 +34,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('taxonomy.vocabulary_list');
+    return Url::fromRoute('taxonomy.vocabulary_list');
   }
 
   /**
diff --git a/core/modules/taxonomy/src/Plugin/views/field/LinkEdit.php b/core/modules/taxonomy/src/Plugin/views/field/LinkEdit.php
index 1b22649..44b93c5 100644
--- a/core/modules/taxonomy/src/Plugin/views/field/LinkEdit.php
+++ b/core/modules/taxonomy/src/Plugin/views/field/LinkEdit.php
@@ -69,7 +69,7 @@ public function render(ResultRow $values) {
       ));
       if ($term->access('update')) {
         $text = !empty($this->options['text']) ? $this->options['text'] : $this->t('Edit');
-        return \Drupal::l($text, new Url('entity.taxonomy.edit_form', ['taxonomy_term' => $tid], array('query' => drupal_get_destination())));
+        return \Drupal::l($text, Url::fromRoute('entity.taxonomy.edit_form', ['taxonomy_term' => $tid], array('query' => drupal_get_destination())));
       }
     }
   }
diff --git a/core/modules/user/src/AccountForm.php b/core/modules/user/src/AccountForm.php
index 602f0e7..bbeeb58 100644
--- a/core/modules/user/src/AccountForm.php
+++ b/core/modules/user/src/AccountForm.php
@@ -134,7 +134,7 @@ public function form(array $form, FormStateInterface $form_state) {
       if (!$pass_reset) {
         $protected_values['mail'] = $form['account']['mail']['#title'];
         $protected_values['pass'] = $this->t('Password');
-        $request_new = $this->l($this->t('Request new password'), new Url('user.pass', array(), array('attributes' => array('title' => $this->t('Request new password via email.')))));
+        $request_new = $this->l($this->t('Request new password'), Url::fromRoute('user.pass', array(), array('attributes' => array('title' => $this->t('Request new password via email.')))));
         $current_pass_description = $this->t('Required if you want to change the %mail or %pass below. !request_new.', array('%mail' => $protected_values['mail'], '%pass' => $protected_values['pass'], '!request_new' => $request_new));
       }
 
diff --git a/core/modules/user/src/Form/UserMultipleCancelConfirm.php b/core/modules/user/src/Form/UserMultipleCancelConfirm.php
index 45f340f..2109d21 100644
--- a/core/modules/user/src/Form/UserMultipleCancelConfirm.php
+++ b/core/modules/user/src/Form/UserMultipleCancelConfirm.php
@@ -87,7 +87,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('user.admin_account');
+    return Url::fromRoute('user.admin_account');
   }
 
   /**
diff --git a/core/modules/user/src/Form/UserRoleDelete.php b/core/modules/user/src/Form/UserRoleDelete.php
index 12d9662..779db76 100644
--- a/core/modules/user/src/Form/UserRoleDelete.php
+++ b/core/modules/user/src/Form/UserRoleDelete.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('user.role_list');
+    return Url::fromRoute('user.role_list');
   }
 
   /**
diff --git a/core/modules/user/src/Plugin/Block/UserLoginBlock.php b/core/modules/user/src/Plugin/Block/UserLoginBlock.php
index a2111cc..a285287 100644
--- a/core/modules/user/src/Plugin/Block/UserLoginBlock.php
+++ b/core/modules/user/src/Plugin/Block/UserLoginBlock.php
@@ -45,14 +45,14 @@ public function build() {
     // Build action links.
     $items = array();
     if (\Drupal::config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) {
-      $items['create_account'] = \Drupal::l(t('Create new account'), new Url('user.register', array(), array(
+      $items['create_account'] = \Drupal::l(t('Create new account'), Url::fromRoute('user.register', array(), array(
         'attributes' => array(
           'title' => t('Create a new user account.'),
           'class' => array('create-account-link'),
         ),
       )));
     }
-    $items['request_password'] = \Drupal::l(t('Request new password'), new Url('user.pass', array(), array(
+    $items['request_password'] = \Drupal::l(t('Request new password'), Url::fromRoute('user.pass', array(), array(
       'attributes' => array(
         'title' => t('Request new password via email.'),
         'class' => array('request-password-link'),
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index c5a8d37..026992f 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -1038,7 +1038,7 @@ public function optionLink($text, $section, $class = '', $title = '') {
       $title = $text;
     }
 
-    return \Drupal::l($text, new Url('views_ui.form_display', ['js' => 'nojs', 'view' => $this->view->storage->id(), 'display_id' => $this->display['id'], 'type' => $section], array('attributes' => array('class' => array('views-ajax-link', $class), 'title' => $title, 'id' => drupal_html_id('views-' . $this->display['id'] . '-' . $section)), 'html' => TRUE)));
+    return \Drupal::l($text, Url::fromRoute('views_ui.form_display', ['js' => 'nojs', 'view' => $this->view->storage->id(), 'display_id' => $this->display['id'], 'type' => $section], array('attributes' => array('class' => array('views-ajax-link', $class), 'title' => $title, 'id' => drupal_html_id('views-' . $this->display['id'] . '-' . $section)), 'html' => TRUE)));
   }
 
   /**
diff --git a/core/modules/views/src/Tests/DefaultViewsTest.php b/core/modules/views/src/Tests/DefaultViewsTest.php
index 15b49a4..e4f2b42 100644
--- a/core/modules/views/src/Tests/DefaultViewsTest.php
+++ b/core/modules/views/src/Tests/DefaultViewsTest.php
@@ -96,7 +96,7 @@ protected function setUp() {
       if ($i % 2) {
         $values['promote'] = TRUE;
       }
-      $values['body'][]['value'] = \Drupal::l('Node ' . 1, new Url('entity.node.canonical', ['node' => 1]));
+      $values['body'][]['value'] = \Drupal::l('Node ' . 1, Url::fromRoute('entity.node.canonical', ['node' => 1]));
 
       $node = $this->drupalCreateNode($values);
 
diff --git a/core/modules/views_ui/src/Controller/ViewsUIController.php b/core/modules/views_ui/src/Controller/ViewsUIController.php
index 0cfc3dc..407356b 100644
--- a/core/modules/views_ui/src/Controller/ViewsUIController.php
+++ b/core/modules/views_ui/src/Controller/ViewsUIController.php
@@ -92,7 +92,7 @@ public function reportFields() {
     foreach ($fields as $field_name => $views) {
       $rows[$field_name]['data'][0] = String::checkPlain($field_name);
       foreach ($views as $view) {
-        $rows[$field_name]['data'][1][] = $this->l($view, new Url('entity.view.edit_form', array('view' => $view)));
+        $rows[$field_name]['data'][1][] = $this->l($view, Url::fromRoute('entity.view.edit_form', array('view' => $view)));
       }
       $rows[$field_name]['data'][1] = SafeMarkup::set(implode(', ', $rows[$field_name]['data'][1]));
     }
@@ -120,7 +120,7 @@ public function reportPlugins() {
     foreach ($rows as &$row) {
       // Link each view name to the view itself.
       foreach ($row['views'] as $row_name => $view) {
-        $row['views'][$row_name] = $this->l($view, new Url('entity.view.edit_form', array('view' => $view)));
+        $row['views'][$row_name] = $this->l($view, Url::fromRoute('entity.view.edit_form', array('view' => $view)));
       }
       $row['views'] = SafeMarkup::set(implode(', ', $row['views']));
     }
diff --git a/core/modules/views_ui/src/ViewDeleteForm.php b/core/modules/views_ui/src/ViewDeleteForm.php
index 918b2ef..9fda24d 100644
--- a/core/modules/views_ui/src/ViewDeleteForm.php
+++ b/core/modules/views_ui/src/ViewDeleteForm.php
@@ -27,7 +27,7 @@ public function getQuestion() {
    * {@inheritdoc}
    */
   public function getCancelUrl() {
-    return new Url('views_ui.list');
+    return Url::fromRoute('views_ui.list');
   }
 
   /**
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 8b1e4a2..ebf82da 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -1064,7 +1064,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
       if ($handler->broken()) {
         $build['fields'][$id]['#class'][] = 'broken';
         $field_name = $handler->adminLabel();
-        $build['fields'][$id]['#link'] = $this->l($field_name, new Url('views_ui.form_handler', array(
+        $build['fields'][$id]['#link'] = $this->l($field_name, Url::fromRoute('views_ui.form_handler', array(
           'js' => 'nojs',
           'view' => $view->id(),
           'display_id' => $display['id'],
@@ -1087,7 +1087,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
         // Add a [hidden] marker, if the field is excluded.
         $link_text .= ' [' . $this->t('hidden') . ']';
       }
-      $build['fields'][$id]['#link'] = $this->l($link_text, new Url('views_ui.form_handler', array(
+      $build['fields'][$id]['#link'] = $this->l($link_text, Url::fromRoute('views_ui.form_handler', array(
         'js' => 'nojs',
         'view' => $view->id(),
         'display_id' => $display['id'],
@@ -1097,7 +1097,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
       $build['fields'][$id]['#class'][] = drupal_clean_css_identifier($display['id']. '-' . $type . '-' . $id);
 
       if ($executable->display_handler->useGroupBy() && $handler->usesGroupBy()) {
-        $build['fields'][$id]['#settings_links'][] = $this->l('<span class="label">' . $this->t('Aggregation settings') . '</span>', new Url('views_ui.form_handler_group', array(
+        $build['fields'][$id]['#settings_links'][] = $this->l('<span class="label">' . $this->t('Aggregation settings') . '</span>', Url::fromRoute('views_ui.form_handler_group', array(
           'js' => 'nojs',
           'view' => $view->id(),
           'display_id' => $display['id'],
@@ -1107,7 +1107,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
       }
 
       if ($handler->hasExtraOptions()) {
-        $build['fields'][$id]['#settings_links'][] = $this->l('<span class="label">' . $this->t('Settings') . '</span>', new Url('views_ui.form_handler_extra', array(
+        $build['fields'][$id]['#settings_links'][] = $this->l('<span class="label">' . $this->t('Settings') . '</span>', Url::fromRoute('views_ui.form_handler_extra', array(
           'js' => 'nojs',
           'view' => $view->id(),
           'display_id' => $display['id'],
diff --git a/core/tests/Drupal/Tests/Core/DrupalTest.php b/core/tests/Drupal/Tests/Core/DrupalTest.php
index b281eef..80abf0c 100644
--- a/core/tests/Drupal/Tests/Core/DrupalTest.php
+++ b/core/tests/Drupal/Tests/Core/DrupalTest.php
@@ -285,7 +285,7 @@ public function testL() {
     $route_parameters = array('test_parameter' => 'test');
     $options = array('test_option' => 'test');
     $generator = $this->getMock('Drupal\Core\Utility\LinkGeneratorInterface');
-    $url = new Url('test_route', $route_parameters, $options);
+    $url = Url::fromRoute('test_route', $route_parameters, $options);
     $generator->expects($this->once())
       ->method('generate')
       ->with('Test title', $url)
diff --git a/core/tests/Drupal/Tests/Core/Form/ConfirmFormHelperTest.php b/core/tests/Drupal/Tests/Core/Form/ConfirmFormHelperTest.php
index b80567f..bad2030 100644
--- a/core/tests/Drupal/Tests/Core/Form/ConfirmFormHelperTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/ConfirmFormHelperTest.php
@@ -41,7 +41,7 @@ public function testCancelLinkTitle() {
    */
   public function testCancelLinkRoute() {
     $route_name = 'foo_bar';
-    $cancel_route = new Url($route_name);
+    $cancel_route = Url::fromRoute($route_name);
     $form = $this->getMock('Drupal\Core\Form\ConfirmFormInterface');
     $form->expects($this->any())
       ->method('getCancelUrl')
@@ -71,7 +71,7 @@ public function testCancelLinkRouteWithParams() {
    * Tests a cancel link route with a URL object.
    */
   public function testCancelLinkRouteWithUrl() {
-    $cancel_route = new Url(
+    $cancel_route = Url::fromRoute(
       'foo_bar.baz', array(
         'baz' => 'banana',
       ),
diff --git a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
index 83e2518..e26d9d0 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
@@ -47,7 +47,7 @@ public function providerTestGetRedirect() {
     $redirect = new RedirectResponse('/example');
     $data[] = array(array('redirect' => $redirect), $redirect);
 
-    $data[] = array(array('redirect' => new Url('test_route_b', array('key' => 'value'))), new Url('test_route_b', array('key' => 'value')));
+    $data[] = array(array('redirect' => Url::fromRoute('test_route_b', array('key' => 'value'))), Url::fromRoute('test_route_b', array('key' => 'value')));
 
     $data[] = array(array('programmed' => TRUE), NULL);
     $data[] = array(array('rebuild' => TRUE), NULL);
diff --git a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
index ff2b2cd..ed5be2a 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
@@ -153,8 +153,8 @@ public function testRedirectWithUrl(Url $redirect_value, $result, $status = 303)
    */
   public function providerTestRedirectWithUrl() {
     return array(
-      array(new Url('test_route_a', array(), array('absolute' => TRUE)), 'test-route'),
-      array(new Url('test_route_b', array('key' => 'value'), array('absolute' => TRUE)), 'test-route/value'),
+      array(Url::fromRoute('test_route_a', array(), array('absolute' => TRUE)), 'test-route'),
+      array(Url::fromRoute('test_route_b', array('key' => 'value'), array('absolute' => TRUE)), 'test-route/value'),
     );
   }
 
diff --git a/core/tests/Drupal/Tests/Core/UrlTest.php b/core/tests/Drupal/Tests/Core/UrlTest.php
index 119eee6..717a4e4 100644
--- a/core/tests/Drupal/Tests/Core/UrlTest.php
+++ b/core/tests/Drupal/Tests/Core/UrlTest.php
@@ -154,7 +154,7 @@ public function testCreateFromRequest() {
       ->will($this->returnValue($attributes));
 
     $url = Url::createFromRequest($request);
-    $expected = new Url('the_route_name', array('color' => 'chartreuse'));
+    $expected = Url::fromRoute('the_route_name', array('color' => 'chartreuse'));
     $this->assertEquals($expected, $url);
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php b/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
index 5721010..70dbc2a 100644
--- a/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
@@ -106,7 +106,7 @@ public function testGenerateHrefs($route_name, array $parameters, $absolute, $ex
     $this->moduleHandler->expects($this->once())
       ->method('alter');
 
-    $url = new Url($route_name, $parameters, array('absolute' => $absolute));
+    $url = Url::fromRoute($route_name, $parameters, array('absolute' => $absolute));
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('Test', $url);
     $this->assertTag(array(
@@ -130,7 +130,7 @@ public function testGenerate() {
       ->method('alter')
       ->with('link', $this->isType('array'));
 
-    $url = new Url('test_route_1', array(), array('fragment' => 'the-fragment'));
+    $url = Url::fromRoute('test_route_1', array(), array('fragment' => 'the-fragment'));
     $url->setUrlGenerator($this->urlGenerator);
 
     $result = $this->linkGenerator->generate('Test', $url);
@@ -195,7 +195,7 @@ public function testGenerateAttributes() {
       ));
 
     // Test that HTML attributes are added to the anchor.
-    $url = new Url('test_route_1', array(), array(
+    $url = Url::fromRoute('test_route_1', array(), array(
       'attributes' => array('title' => 'Tooltip'),
     ));
     $url->setUrlGenerator($this->urlGenerator);
@@ -222,7 +222,7 @@ public function testGenerateQuery() {
         '/test-route-1?test=value'
       ));
 
-    $url = new Url('test_route_1', array(), array(
+    $url = Url::fromRoute('test_route_1', array(), array(
       'query' => array('test' => 'value'),
     ));
     $url->setUrlGenerator($this->urlGenerator);
@@ -248,7 +248,7 @@ public function testGenerateParametersAsQuery() {
         '/test-route-1?test=value'
       ));
 
-    $url = new Url('test_route_1', array('test' => 'value'), array());
+    $url = Url::fromRoute('test_route_1', array('test' => 'value'), array());
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('Test', $url);
     $this->assertTag(array(
@@ -272,7 +272,7 @@ public function testGenerateOptions() {
         '/test-route-1?test=value'
       ));
 
-    $url = new Url('test_route_1', array(), array(
+    $url = Url::fromRoute('test_route_1', array(), array(
       'key' => 'value',
     ));
     $url->setUrlGenerator($this->urlGenerator);
@@ -299,7 +299,7 @@ public function testGenerateXss() {
       ));
 
     // Test that HTML link text is escaped by default.
-    $url = new Url('test_route_4');
+    $url = Url::fromRoute('test_route_4');
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate("<script>alert('XSS!')</script>", $url);
     $this->assertNotTag(array(
@@ -331,7 +331,7 @@ public function testGenerateWithHtml() {
       ));
 
     // Test that HTML tags are stripped from the 'title' attribute.
-    $url = new Url('test_route_5', array(), array(
+    $url = Url::fromRoute('test_route_5', array(), array(
       'attributes' => array('title' => '<em>HTML Tooltip</em>'),
     ));
     $url->setUrlGenerator($this->urlGenerator);
@@ -345,7 +345,7 @@ public function testGenerateWithHtml() {
     ), $result);
 
     // Test that the 'html' option allows unsanitized HTML link text.
-    $url = new Url('test_route_5', array(), array('html' => TRUE));
+    $url = Url::fromRoute('test_route_5', array(), array('html' => TRUE));
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('<em>HTML output</em>', $url);
     $this->assertTag(array(
@@ -387,7 +387,7 @@ public function testGenerateActive() {
       ->method('alter');
 
     // Render a link.
-    $url = new Url('test_route_1', array(), array('set_active_class' => TRUE));
+    $url = Url::fromRoute('test_route_1', array(), array('set_active_class' => TRUE));
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('Test', $url);
     $this->assertTag(array(
@@ -396,7 +396,7 @@ public function testGenerateActive() {
     ), $result);
 
     // Render a link with the set_active_class option disabled.
-    $url = new Url('test_route_1', array(), array('set_active_class' => FALSE));
+    $url = Url::fromRoute('test_route_1', array(), array('set_active_class' => FALSE));
     $url->setUrlGenerator($this->urlGenerator);
     $result = $this->linkGenerator->generate('Test', $url);
     $this->assertNotTag(array(
@@ -405,7 +405,7 @@ public function testGenerateActive() {
     ), $result);
 
     // Render a link with an associated language.
-    $url = new Url('test_route_1', array(), array(
+    $url = Url::fromRoute('test_route_1', array(), array(
       'language' => new Language(array('id' => 'de')),
       'set_active_class' => TRUE,
     ));
@@ -420,7 +420,7 @@ public function testGenerateActive() {
     ), $result);
 
     // Render a link with a query parameter.
-    $url = new Url('test_route_3', array(), array(
+    $url = Url::fromRoute('test_route_3', array(), array(
       'query' => array('value' => 'example_1'),
       'set_active_class' => TRUE,
     ));
@@ -435,7 +435,7 @@ public function testGenerateActive() {
     ), $result);
 
     // Render a link with route parameters and a query parameter.
-    $url = new Url('test_route_4', array('object' => '1'), array(
+    $url = Url::fromRoute('test_route_4', array('object' => '1'), array(
       'query' => array('value' => 'example_1'),
       'set_active_class' => TRUE,
     ));
