diff --git a/core/modules/block/custom_block/custom_block.module b/core/modules/block/custom_block/custom_block.module
index a3ce18c..e1b0292 100644
--- a/core/modules/block/custom_block/custom_block.module
+++ b/core/modules/block/custom_block/custom_block.module
@@ -121,29 +121,15 @@ function custom_block_menu() {
  */
 function custom_block_theme($existing, $type, $theme, $path) {
   return array(
-    'custom_block_block' => array(
-      'variables' => array('body' => NULL, 'format' => NULL),
-    ),
     'custom_block_add_list' => array(
       'variables' => array('content' => NULL),
       'file' => 'custom_block.pages.inc',
+      'template' => 'custom-block-add-list',
     ),
   );
 }
 
 /**
- * Returns HTML for a custom block.
- *
- * @ingroup themeable
- */
-function theme_custom_block_block($variables) {
-  $body = $variables['body'];
-  $format = $variables['format'];
-
-  return check_markup($body, $format);
-}
-
-/**
  * Loads a custom block type.
  *
  * @param int $id
diff --git a/core/modules/block/custom_block/custom_block.pages.inc b/core/modules/block/custom_block/custom_block.pages.inc
index 439030e..db9b54c 100644
--- a/core/modules/block/custom_block/custom_block.pages.inc
+++ b/core/modules/block/custom_block/custom_block.pages.inc
@@ -40,32 +40,25 @@ function custom_block_add_page() {
 }
 
 /**
- * Returns HTML for a list of available custom block types for block creation.
+ * Prepares variables for a list of custom block types for block creation.
  *
- * @param $variables
+ * Default template: custom-block-add-list.html.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - content: An array of block types.
  *
  * @see custom_block_add_page()
- *
- * @ingroup themeable
  */
-function theme_custom_block_add_list($variables) {
-  $content = $variables['content'];
-  $output = '';
-
-  if ($content) {
-    $output = '<dl class="node-type-list">';
-    foreach ($content as $type) {
-      $output .= '<dt>' . l($type->label(), 'block/add/' . $type->id()) . '</dt>';
-      $output .= '<dd>' . filter_xss_admin($type->description) . '</dd>';
-    }
-    $output .= '</dl>';
+function template_preprocess_custom_block_add_list(&$variables) {
+  $variables['types'] = array();
+  foreach ($variables['content'] as $type) {
+    $variables['types'][$type->id] = array();
+    $variables['types'][$type->id]['link'] = l($type->label(), 'block/add/' . $type->id());
+    $variables['types'][$type->id]['description'] = filter_xss_admin($type->description);
   }
-  return $output;
 }
 
-
 /**
  * Page callback: Presents the custom block creation form.
  *
diff --git a/core/modules/block/custom_block/templates/custom-block-add-list.html.twig b/core/modules/block/custom_block/templates/custom-block-add-list.html.twig
new file mode 100644
index 0000000..0b8a5a3
--- /dev/null
+++ b/core/modules/block/custom_block/templates/custom-block-add-list.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Default theme implementation to present a list of custom block types.
+ *
+ * Available variables:
+ * - types: A collection of all the available custom block types.
+ *   - type: The custom block type, containing all the items below.
+ *   - type.link: A link to add a block of this type.
+ *   - type.description: A description of this custom block type.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_custom_block_add_list()
+ *
+ * @ingroup themeable
+ */
+#}
+<dl class="node-type-list">
+  {% for type in types %}
+    <dt>{{ type.link }}</dt>
+    <dd>{{ type.description }}</dd>
+  {% endfor %}
+</dl>
diff --git a/core/themes/seven/template.php b/core/themes/seven/template.php
index fa7124c..a53cfd5 100644
--- a/core/themes/seven/template.php
+++ b/core/themes/seven/template.php
@@ -63,26 +63,16 @@ function seven_node_add_list($variables) {
 }
 
 /**
- * Overrides theme_custom_block_add_list().
+ * Overrides variables for custom-block-add-list.html.twig.
  *
- * Displays the list of available custom block types for creation.
+ * Displays the list of available custom block types for creation, adding
+ * separate variables for the label and the path.
  */
-function seven_custom_block_add_list($variables) {
-  $content = $variables['content'];
-  $output = '';
-  if ($content) {
-    $output = '<ul class="admin-list">';
-    foreach ($content as $type) {
-      $output .= '<li class="clearfix">';
-      $content = '<span class="label">' . check_plain($type->label()) . '</span>';
-      $content .= '<div class="description">' . filter_xss_admin($type->description) . '</div>';
-      $options['html'] = TRUE;
-      $output .= l($content, 'block/add/' . $type->id(), $options);
-      $output .= '</li>';
-    }
-    $output .= '</ul>';
+function seven_preprocess_custom_block_add_list(&$variables) {
+  foreach ($variables['content'] as $type) {
+    $variables['types'][$type->id]['label'] = check_plain($type->label());
+    $variables['types'][$type->id]['path'] = url('block/add/' . $type->id);
   }
-  return $output;
 }
 
 /**
diff --git a/core/themes/seven/templates/custom-block-add-list.html.twig b/core/themes/seven/templates/custom-block-add-list.html.twig
new file mode 100644
index 0000000..b5b2b66
--- /dev/null
+++ b/core/themes/seven/templates/custom-block-add-list.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Overrides custom-block-add-list.html.twig.
+ *
+ * Displays the list of available custom block types for creation.
+
+ * Available variables:
+ * - types: A collection of all the available custom block types.
+ *   - type: The custom block type, containing all the items below.
+ *   - type.link: A link to add a block of this type.
+ *   - type.description: A description of this custom block type.
+ *   - type.label: The title of the custom block type.
+ *   - type.path: A path for the link to add a block of this type.
+ */
+ #}
+<ul class="admin-list">
+  {% for type in content %}
+    <li class="clearfix">
+      <a href="{{ type.path }}"><span class="label">{{ type.label }}</span><div class="description">{{ type.description }}</div></a>
+    </li>
+  {% endfor %}
+</ul>
