diff --git a/core/core.services.yml b/core/core.services.yml
index 5cd3422..e54d56a 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -7,6 +7,7 @@ parameters:
     default: keyvalue.database
   factory.keyvalue.expirable:
     default: keyvalue.expirable.database
+  filter_protocols: {}
 services:
   # Simple cache contexts, directly derived from the request context.
   cache_context.ip:
@@ -691,7 +692,7 @@ services:
       - { name: event_subscriber }
   url_generator:
     class: Drupal\Core\Routing\UrlGenerator
-    arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@config.factory', '@request_stack']
+    arguments: ['@router.route_provider', '@path_processor_manager', '@route_processor_manager', '@request_stack', '%filter_protocols%']
     calls:
       - [setContext, ['@?router.request_context']]
   redirect.destination:
@@ -699,7 +700,7 @@ services:
     arguments: ['@request_stack', '@url_generator']
   unrouted_url_assembler:
     class: Drupal\Core\Utility\UnroutedUrlAssembler
-    arguments: ['@request_stack', '@config.factory', '@path_processor_manager']
+    arguments: ['@request_stack', '@config.factory', '@path_processor_manager', '%filter_protocols%']
   link_generator:
     class: Drupal\Core\Utility\LinkGenerator
     arguments: ['@url_generator', '@module_handler', '@renderer']
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 6a5ce77..47dc211 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -466,8 +466,8 @@ public function preHandle(Request $request) {
     $this->container->get('request_stack')->push($request);
 
     // Set the allowed protocols once we have the config available.
-    $allowed_protocols = $this->container->get('config.factory')->get('system.filter')->get('protocols');
-    if (!isset($allowed_protocols)) {
+    $allowed_protocols = $this->container->getParameter('filter_protocols');
+    if (!$allowed_protocols) {
       // \Drupal\Component\Utility\UrlHelper::filterBadProtocol() is called by
       // the installer and update.php, in which case the configuration may not
       // exist (yet). Provide a minimal default set of allowed protocols for
diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php
index bd3c1a0..9158dbe 100644
--- a/core/lib/Drupal/Core/Routing/UrlGenerator.php
+++ b/core/lib/Drupal/Core/Routing/UrlGenerator.php
@@ -72,19 +72,18 @@ class UrlGenerator implements UrlGeneratorInterface {
    *   The path processor to convert the system path to one suitable for urls.
    * @param \Drupal\Core\RouteProcessor\OutboundRouteProcessorInterface $route_processor
    *   The route processor.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config
-   *    The config factory.
    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
    *   A request stack object.
+   * @param string[] $filter_protocols
+   *   An array of protocols allowed for url generation.
    */
-  public function __construct(RouteProviderInterface $provider, OutboundPathProcessorInterface $path_processor, OutboundRouteProcessorInterface $route_processor, ConfigFactoryInterface $config, RequestStack $request_stack) {
+  public function __construct(RouteProviderInterface $provider, OutboundPathProcessorInterface $path_processor, OutboundRouteProcessorInterface $route_processor, RequestStack $request_stack, $filter_protocols = ['http', 'https']) {
     $this->provider = $provider;
     $this->context = new RequestContext();
 
     $this->pathProcessor = $path_processor;
     $this->routeProcessor = $route_processor;
-    $allowed_protocols = $config->get('system.filter')->get('protocols') ?: array('http', 'https');
-    UrlHelper::setAllowedProtocols($allowed_protocols);
+    UrlHelper::setAllowedProtocols($filter_protocols);
     $this->requestStack = $request_stack;
   }
 
diff --git a/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php b/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
index 9556808..e257169 100644
--- a/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
+++ b/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
@@ -40,14 +40,13 @@ class UnroutedUrlAssembler implements UnroutedUrlAssemblerInterface {
    *
    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
    *   A request stack object.
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config
-   *    The config factory.
    * @param \Drupal\Core\PathProcessor\OutboundPathProcessorInterface $path_processor
    *   The output path processor.
+   * @param string[] $filter_protocols
+   *   An array of protocols allowed for url generation.
    */
-  public function __construct(RequestStack $request_stack, ConfigFactoryInterface $config, OutboundPathProcessorInterface $path_processor) {
-    $allowed_protocols = $config->get('system.filter')->get('protocols') ?: ['http', 'https'];
-    UrlHelper::setAllowedProtocols($allowed_protocols);
+  public function __construct(RequestStack $request_stack, OutboundPathProcessorInterface $path_processor, $filter_protocols = ['http', 'https']) {
+    UrlHelper::setAllowedProtocols($filter_protocols);
     $this->requestStack = $request_stack;
     $this->pathProcessor = $path_processor;
   }
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 77b2794..cd23207 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -501,7 +501,7 @@ function _filter_url($text, $filter) {
   // we cannot cleanly differ between protocols here without hard-coding MAILTO,
   // so '//' is optional for all protocols.
   // @see \Drupal\Component\Utility\UrlHelper::filterBadProtocol()
-  $protocols = \Drupal::config('system.filter')->get('protocols');
+  $protocols = \Drupal::getContainer()->getParameter('filter_protocols');
   $protocols = implode(':(?://)?|', $protocols) . ':(?://)?';
 
   $valid_url_path_characters = "[\p{L}\p{M}\p{N}!\*\';:=\+,\.\$\/%#\[\]\-_~@&]";
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemFilterTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemFilterTest.php
index c82bcc1..30d4ed7 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemFilterTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemFilterTest.php
@@ -36,8 +36,8 @@ protected function setUp() {
    * Tests migration of system (filter) variables to system.filter.yml.
    */
   public function testSystemFilter() {
-    $config = $this->config('system.filter');
-    $this->assertIdentical(array('http', 'https', 'ftp', 'news', 'nntp', 'tel', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal', 'rtsp'), $config->get('protocols'));
+    $filter_parameters = \Drupal::getContainer()->getParameter('filter_protocols');
+    $this->assertIdentical(array('http', 'https', 'ftp', 'news', 'nntp', 'tel', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal', 'rtsp'), $filter_parameters);
   }
 
 }
diff --git a/core/modules/system/config/install/system.filter.yml b/core/modules/system/config/install/system.filter.yml
deleted file mode 100644
index 12ce55a..0000000
--- a/core/modules/system/config/install/system.filter.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-protocols:
-  - http
-  - https
-  - ftp
-  - news
-  - nntp
-  - tel
-  - telnet
-  - mailto
-  - irc
-  - ssh
-  - sftp
-  - webcal
-  - rtsp
diff --git a/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml
index 7cde50d..12b0e6c 100644
--- a/core/modules/system/config/schema/system.schema.yml
+++ b/core/modules/system/config/schema/system.schema.yml
@@ -126,17 +126,6 @@ system.diff:
           type: integer
           label: 'Number of trailing lines in a diff'
 
-system.filter:
-  type: config_object
-  label: 'Filter settings'
-  mapping:
-    protocols:
-      type: sequence
-      label: 'Allowed protocols'
-      sequence:
-        type: string
-        label: 'Protocol'
-
 system.logging:
   type: config_object
   label: 'Logging settings'
diff --git a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
index 57edd51..8ff18e6 100644
--- a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
@@ -139,9 +139,7 @@ protected function setUp() {
       ->disableOriginalConstructor()
       ->getMock();
 
-    $config_factory_stub = $this->getConfigFactoryStub(array('system.filter' => array('protocols' => array('http', 'https'))));
-
-    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $config_factory_stub, $this->requestStack);
+    $generator = new UrlGenerator($provider, $processor_manager, $this->routeProcessorManager, $this->requestStack, ['http', 'https']);
     $generator->setContext($context);
     $this->generator = $generator;
   }
diff --git a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
index 98fab07..7b8404f 100644
--- a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
@@ -55,9 +55,8 @@ protected function setUp() {
     parent::setUp();
 
     $this->requestStack = new RequestStack();
-    $this->configFactory = $this->getConfigFactoryStub(['system.filter' => []]);
     $this->pathProcessor = $this->getMock('Drupal\Core\PathProcessor\OutboundPathProcessorInterface');
-    $this->unroutedUrlAssembler = new UnroutedUrlAssembler($this->requestStack, $this->configFactory, $this->pathProcessor);
+    $this->unroutedUrlAssembler = new UnroutedUrlAssembler($this->requestStack, $this->pathProcessor);
   }
 
   /**
diff --git a/sites/default/default.services.yml b/sites/default/default.services.yml
old mode 100644
new mode 100755
index ecb1c43..c0c4f54
--- a/sites/default/default.services.yml
+++ b/sites/default/default.services.yml
@@ -96,3 +96,18 @@ parameters:
     # Default key/value expirable storage service to use.
     # @default keyvalue.database.expirable
     # default: keyvalue.database.expirable
+  # Allowed protocols for URL generation.
+  filter_protocols:
+    - http
+    - https
+    - ftp
+    - news
+    - nntp
+    - tel
+    - telnet
+    - mailto
+    - irc
+    - ssh
+    - sftp
+    - webcal
+    - rtsp
