diff --git a/core/modules/block/block.routing.yml b/core/modules/block/block.routing.yml
index 2f26a38..92d198e 100644
--- a/core/modules/block/block.routing.yml
+++ b/core/modules/block/block.routing.yml
@@ -42,6 +42,14 @@ block.admin_display_theme:
     _access_theme: 'TRUE'
     _permission: 'administer blocks'
 
+block.admin_place_instance:
+  path: '/admin/structure/block/place'
+  defaults:
+    _controller: '\Drupal\block\Controller\BlockListController::placement'
+    _title: 'Place block'
+  requirements:
+    _permission: 'administer blocks'
+
 block.admin_add:
   path: '/admin/structure/block/add/{plugin_id}/{theme}'
   defaults:
diff --git a/core/modules/block/src/BlockListBuilder.php b/core/modules/block/src/BlockListBuilder.php
index aa669fa..d538851 100644
--- a/core/modules/block/src/BlockListBuilder.php
+++ b/core/modules/block/src/BlockListBuilder.php
@@ -143,7 +143,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       $form['#attached']['drupalSettings']['blockPlacement'] = $placement;
     }
     $entities = $this->load();
-    $form['#theme'] = array('block_list');
     $form['#attached']['library'][] = 'core/drupal.tableheader';
     $form['#attached']['library'][] = 'block/drupal.block';
     $form['#attached']['library'][] = 'block/drupal.block.admin';
@@ -306,69 +305,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#button_type' => 'primary',
     );
 
-    $form['place_blocks']['title'] = array(
-      '#type' => 'container',
-      '#markup' => '<h3>' . t('Place blocks') . '</h3>',
-      '#attributes' => array(
-        'class' => array(
-          'entity-meta__header',
-        ),
-      ),
-    );
-
-    $form['place_blocks']['filter'] = array(
-      '#type' => 'search',
-      '#title' => t('Filter'),
-      '#title_display' => 'invisible',
-      '#size' => 30,
-      '#placeholder' => t('Filter by block name'),
-      '#attributes' => array(
-        'class' => array('block-filter-text'),
-        'data-element' => '.entity-meta',
-        'title' => t('Enter a part of the block name to filter by.'),
-      ),
-    );
-
-    $form['place_blocks']['list']['#type'] = 'container';
-    $form['place_blocks']['list']['#attributes']['class'][] = 'entity-meta';
-
-    // Only add blocks which work without any available context.
-    $definitions = $this->blockManager->getDefinitionsForContexts();
-    $sorted_definitions = $this->blockManager->getSortedDefinitions($definitions);
-    foreach ($sorted_definitions as $plugin_id => $plugin_definition) {
-      $category = SafeMarkup::checkPlain($plugin_definition['category']);
-      $category_key = 'category-' . $category;
-      if (!isset($form['place_blocks']['list'][$category_key])) {
-        $form['place_blocks']['list'][$category_key] = array(
-          '#type' => 'details',
-          '#title' => $category,
-          '#open' => TRUE,
-          'content' => array(
-            '#theme' => 'links',
-            '#links' => array(),
-            '#attributes' => array(
-              'class' => array(
-                'block-list',
-              ),
-            ),
-          ),
-        );
-      }
-      $form['place_blocks']['list'][$category_key]['content']['#links'][$plugin_id] = array(
-        'title' => $plugin_definition['admin_label'],
-        'url' => Url::fromRoute('block.admin_add', [
-          'plugin_id' => $plugin_id,
-          'theme' => $this->theme
-        ]),
-        'attributes' => array(
-          'class' => array('use-ajax', 'block-filter-text-source'),
-          'data-dialog-type' => 'modal',
-          'data-dialog-options' => Json::encode(array(
-            'width' => 700,
-          )),
-        ),
-      );
-    }
     return $form;
   }
 
diff --git a/core/modules/block/src/Controller/BlockListController.php b/core/modules/block/src/Controller/BlockListController.php
index 72aa445..ee505d9 100644
--- a/core/modules/block/src/Controller/BlockListController.php
+++ b/core/modules/block/src/Controller/BlockListController.php
@@ -7,7 +7,10 @@
 
 namespace Drupal\block\Controller;
 
+use Drupal\Component\Serialization\Json;
+use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\Controller\EntityListController;
+use Drupal\Core\Url;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -31,4 +34,66 @@ public function listing($theme = NULL, Request $request = NULL) {
     return $this->entityManager()->getListBuilder('block')->render($theme, $request);
   }
 
+  public function placement($theme = NULL, Request $request = NULL) {
+    $theme = $theme ?: $this->config('system.theme')->get('default');
+    $block_manager = \Drupal::service('plugin.manager.block');
+
+    $page['place_blocks']['filter'] = array(
+      '#type' => 'search',
+      '#title' => t('Filter'),
+      '#title_display' => 'invisible',
+      '#size' => 30,
+      '#placeholder' => t('Filter by block name'),
+      '#attributes' => array(
+        'class' => array('block-filter-text'),
+        'data-element' => '.entity-meta',
+        'title' => t('Enter a part of the block name to filter by.'),
+      ),
+    );
+
+    $page['place_blocks']['list']['#type'] = 'container';
+    $page['place_blocks']['list']['#attributes']['class'][] = 'entity-meta';
+
+    // Only add blocks which work without any available context.
+    $definitions = $block_manager->getDefinitionsForContexts();
+    $sorted_definitions = $block_manager->getSortedDefinitions($definitions);
+    foreach ($sorted_definitions as $plugin_id => $plugin_definition) {
+      $category = SafeMarkup::checkPlain($plugin_definition['category']);
+      $category_key = 'category-' . $category;
+      if (!isset($page['place_blocks']['list'][$category_key])) {
+        $page['place_blocks']['list'][$category_key] = array(
+          '#type' => 'details',
+          '#title' => $category,
+          '#open' => TRUE,
+          'content' => array(
+            '#theme' => 'links',
+            '#links' => array(),
+            '#attributes' => array(
+              'class' => array(
+                'block-list',
+              ),
+            ),
+          ),
+        );
+      }
+      $page['place_blocks']['list'][$category_key]['content']['#links'][$plugin_id] = array(
+        'title' => $plugin_definition['admin_label'],
+        'url' => Url::fromRoute('block.admin_add', [
+          'plugin_id' => $plugin_id,
+          'theme' => $theme
+        ]),
+        'attributes' => array(
+          'class' => array('use-ajax', 'block-filter-text-source'),
+          'data-dialog-type' => 'modal',
+          'data-dialog-options' => Json::encode(array(
+            'width' => 700,
+          )),
+        ),
+      );
+    }
+
+    $page['#attached']['library'][] = 'block/drupal.block.admin';
+
+    return $page;
+  }
 }
diff --git a/core/modules/block/templates/block-list.html.twig b/core/modules/block/templates/block-list.html.twig
deleted file mode 100644
index 854d3ce..0000000
--- a/core/modules/block/templates/block-list.html.twig
+++ /dev/null
@@ -1,23 +0,0 @@
-{#
-/**
- * @file
- * Two column template for the block add/edit form.
- *
- * This template will be used when a block edit form specifies 'block_edit_form'
- * as its #theme callback.  Otherwise, by default, block add/edit forms will be
- * themed by form.html.twig.
- *
- * Available variables:
- * - form: The block add/edit form.
- *
- * @ingroup themeable
- */
-#}
-<div class="layout-block-list clearfix">
-  <div class="layout-region block-list-primary">
-    {{ form|without('place_blocks') }}
-  </div>
-  <div class="layout-region block-list-secondary">
-    {{ form.place_blocks }}
-  </div>
-</div>
diff --git a/core/modules/block_content/block_content.links.action.yml b/core/modules/block_content/block_content.links.action.yml
index d94ca3f..6875623 100644
--- a/core/modules/block_content/block_content.links.action.yml
+++ b/core/modules/block_content/block_content.links.action.yml
@@ -8,7 +8,6 @@ block_content_add_action:
   route_name: block_content.add_page
   title: 'Add custom block'
   appears_on:
-    - block.admin_display
-    - block.admin_display_theme
+    - block.admin_place_instance
     - entity.block_content.collection
   class: \Drupal\block_content\Plugin\Menu\LocalAction\BlockContentAddLocalAction
