diff --git a/core/modules/contact/lib/Drupal/contact/Plugin/Block/ContactNavigationBlock.php b/core/modules/contact/lib/Drupal/contact/Plugin/Block/ContactNavigationBlock.php
new file mode 100644
index 0000000..e7ee696
--- /dev/null
+++ b/core/modules/contact/lib/Drupal/contact/Plugin/Block/ContactNavigationBlock.php
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\contact\Plugin\Block\ContactNavigationBlock.
+ */
+
+namespace Drupal\contact\Plugin\Block;
+
+use Drupal\block\BlockBase;
+use Drupal\Core\Entity\EntityStorageControllerInterface;
+use Drupal\Core\Form\FormBuilderInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Session\AccountInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a 'Contact categories' block.
+ *
+ * @Block(
+ *   id = "contact_navigation",
+ *   admin_label = @Translation("Contact categories"),
+ *   category = @Translation("Menus")
+ * )
+ */
+class ContactNavigationBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The contact category storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $storage;
+
+  /**
+   * The form builder.
+   *
+   * @var \Drupal\Core\Form\FormBuilderInterface
+   */
+  protected $formBuilder;
+
+  /**
+   * Constructs a new ContactNavigationBlock instance.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityStorageControllerInterface $storage
+   *   The contact category storage.
+   * @param $form_builder \Drupal\Core\Form\FormBuilderInterface
+   *   The form builder.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityStorageControllerInterface $storage, FormBuilderInterface $form_builder) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->storage = $storage;
+    $this->formBuilder = $form_builder;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity.manager')->getStorageController('contact_category'),
+      $container->get('form_builder')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return array(
+      'cache' => DRUPAL_CACHE_PER_ROLE,
+      'categories' => array(),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access(AccountInterface $account) {
+    // Only grant access to users with the 'access site-wide contact form'
+    // permission.
+    return $account->hasPermission('access site-wide contact form');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  function blockForm($form, &$form_state) {
+    $options = array();
+    /** @var $category \Drupal\contact\CategoryInterface */
+    foreach ($this->storage->loadMultiple() as $id => $category) {
+      // Do not list personal category.
+      if ($id != 'personal') {
+        $options[$id] = $category->label();
+      }
+    }
+    $form['categories'] = array(
+      '#type' => 'checkboxes',
+      '#title' => $this->t('Categories to display'),
+      '#options' => $options,
+      '#default_value' => $this->configuration['categories'],
+    );
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function blockValidate($form, &$form_state) {
+    $categories = array_filter($form_state['values']['categories']);
+    if (empty($categories)) {
+      $this->formBuilder->setErrorByName('categories', $form_state, $this->t('At least one category should be selected.'));
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function blockSubmit($form, &$form_state) {
+    $this->configuration['categories'] = $form_state['values']['categories'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $links = array();
+    foreach ($this->storage->loadMultiple($this->configuration['categories']) as $id => $category) {
+      $links[$id] = array(
+        '#type' => 'link',
+        '#title' => $category->label(),
+        '#route_name' => 'contact.site_page_category',
+        '#route_parameters' => array('contact_category' => $id),
+      );
+    }
+    return array(
+      '#theme' => 'item_list',
+      '#items' => $links,
+    );
+  }
+
+}
