diff --git a/core/modules/contact/lib/Drupal/contact/CategoryListController.php b/core/modules/contact/lib/Drupal/contact/CategoryListController.php
index a3ec886..b7d9091 100644
--- a/core/modules/contact/lib/Drupal/contact/CategoryListController.php
+++ b/core/modules/contact/lib/Drupal/contact/CategoryListController.php
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Definition of Drupal\contact\CategoryListController.
+ * Contains \Drupal\contact\CategoryListController.
  */
 
 namespace Drupal\contact;
@@ -15,7 +15,7 @@
 class CategoryListController extends ConfigEntityListController {
 
   /**
-   * Overrides Drupal\Core\Entity\EntityListController::getOperations().
+   * Overrides \Drupal\Core\Entity\EntityListController::getOperations().
    */
   public function getOperations(EntityInterface $entity) {
     $operations = parent::getOperations($entity);
@@ -38,26 +38,142 @@ public function getOperations(EntityInterface $entity) {
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityListController::buildHeader().
+   * Overrides \Drupal\Core\Entity\EntityListController::buildHeader().
    */
   public function buildHeader() {
     $row['category'] = t('Category');
     $row['recipients'] = t('Recipients');
-    $row['selected'] = t('Selected');
+    $row['default'] = t('Default');
     $row['operations'] = t('Operations');
     return $row;
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityListController::buildRow().
+   * Overrides \Drupal\Core\Entity\EntityListController::buildRow().
    */
   public function buildRow(EntityInterface $entity) {
     $row['category'] = check_plain($entity->label());
-    $row['recipients'] = check_plain(implode(', ', $entity->recipients));
+    $row['recipients'] = check_plain(implode(', ', $entity->get('recipients')));
     $default_category = config('contact.settings')->get('default_category');
-    $row['selected'] = ($default_category == $entity->id() ? t('Yes') : t('No'));
+    $row['default'] = ($default_category == $entity->id() ? t('Yes') : t('No'));
     $row['operations']['data'] = $this->buildOperations($entity);
     return $row;
   }
 
+  /**
+   * Overrides \Drupal\Core\Entity\EntityListController::render().
+   */
+  public function render() {
+    $entities = $this->load();
+    if (count($entities) > 1) {
+      $form_state = array();
+      $form_state['build_info']['args'] = array();
+      $form_state['build_info']['callback'] = array($this, 'form');
+
+      return drupal_build_form($this->entityType . '_list_form', $form_state);
+    }
+
+    return parent::render();
+  }
+
+  /**
+   * Creates a tabledrag form for manipulating contact category form weights.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param array $form_state
+   *   A reference to a keyed array containing the current state of the form.
+   *
+   * @return array
+   *   The array containing the complete form.
+   */
+  function form($form, $form_state) {
+    $form['entities'] = array(
+      '#type' => 'table',
+      '#header' => $this->buildHeader() + array('weight' => t('Weight')),
+      '#empty' => t('There is no @label yet.', array('@label' => $this->entityInfo['label'])),
+      '#tabledrag' => array(
+        array('order', 'sibling', 'weight'),
+      ),
+    );
+    $default_category = config('contact.settings')->get('default_category');
+    foreach ($this->load() as $entity) {
+      $row = $this->buildRow($entity);
+      // Override default values to markup elements.
+      $uri = $entity->uri();
+      $row['category'] = array('data' => array(
+        '#type' => 'link',
+        '#title' => $entity->label(),
+        '#href' => $uri['path'],
+        '#options' => $uri['options'],
+      ));
+      $row['recipients'] = array(
+        '#markup' => $row['recipients'],
+      );
+      // Allow to change default contact category.
+      $row['default'] = array(
+        '#type' => 'radio',
+        '#title' => t('Set @title as default', array('@title' => $entity->label())),
+        '#title_display' => 'invisible',
+        '#return_value' => $entity->id(),
+        '#default_value' => ($default_category == $entity->id() ? $entity->id() : NULL),
+        '#parents' => array('default_category'),
+        '#id' => 'edit-entities-default',
+      );
+      // Add weight column and ordering.
+      $row['#weight'] = $entity->get('weight');
+      $row['#attributes']['class'][] = 'draggable';
+      $row['weight'] = array(
+        '#type' => 'weight',
+        '#title' => t('Weight for @title', array('@title' => $entity->label())),
+        '#title_display' => 'invisible',
+        '#default_value' => $entity->get('weight'),
+        '#attributes' => array('class' => array('weight')),
+      );
+
+      $form['entities'][$entity->id()] = $row;
+    }
+
+    $form['actions']['#type'] = 'actions';
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Save changes'),
+      '#submit' => array(array($this, 'submit')),
+      '#button_type' => 'primary',
+    );
+
+    return $form;
+  }
+
+  /**
+   * Submit handler for the overview form.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param array $form_state
+   *   A reference to a keyed array containing the current state of the form.
+   */
+  public function submit($form, &$form_state) {
+    $values = $form_state['values']['entities'];
+
+    $entities = entity_load_multiple($this->entityType, array_keys($values));
+    foreach ($values as $id => $value) {
+      if (isset($entities[$id]) && $value['weight'] != $entities[$id]->get('weight')) {
+        // Update changed weight.
+        $entities[$id]->set('weight', $value['weight']);
+        $entities[$id]->save();
+      }
+    }
+    // Update the site's default contact category.
+    $contact_config = config('contact.settings');
+    $default_category = $form_state['values']['default_category'];
+    if (isset($entities[$default_category]) && $default_category != $contact_config->get('default_category')) {
+      $contact_config
+        ->set('default_category', $default_category)
+        ->save();
+    }
+
+    drupal_set_message(t('Changes have been saved.'));
+  }
+
 }
