diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
index 3977310..3dd217e 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
@@ -2,12 +2,14 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Config\Entity\ConfigEntityListController.
+ * Definition of \Drupal\Core\Config\Entity\ConfigEntityListController.
  */
 
 namespace Drupal\Core\Config\Entity;
 
 use Drupal\Core\Entity\EntityListController;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityStorageControllerInterface;
 
 /**
  * Defines the default list controller for ConfigEntity objects.
@@ -15,7 +17,29 @@
 class ConfigEntityListController extends EntityListController {
 
   /**
-   * Overrides Drupal\Core\Entity\EntityListController::load().
+   * Name of the entity's weight field.
+   *
+   * @var string|bool
+   */
+  protected $weightKey;
+
+  /**
+   * Overrides EntityListController::__construct().
+   */
+  public function __construct($entity_type, EntityStorageControllerInterface $storage) {
+    parent::__construct($entity_type, $storage);
+
+    // Check if the entity type supports weighting.
+    if (!empty($this->entityInfo['entity_keys']['weight'])) {
+      $this->weightKey = $this->entityInfo['entity_keys']['weight'];
+    }
+    else {
+      $this->weightKey = FALSE;
+    }
+  }
+
+  /**
+   * Overrides EntityListController::load().
    */
   public function load() {
     $entities = parent::load();
@@ -23,4 +47,122 @@ public function load() {
     return $entities;
   }
 
+  /**
+   * Overrides EntityListController::buildHeader().
+   */
+  public function buildHeader() {
+    $row = parent::buildHeader();
+    if (empty($this->weightKey)) {
+      return $row;
+    }
+    // @see http://drupal.org/node/1876718
+    $row = array_slice($row, 0, 2, TRUE) + array(
+      'weight' => t('Weight'),
+    ) + array_slice($row, 0, NULL, TRUE);
+    return $row;
+  }
+
+  /**
+   * Overrides EntityListController::buildRow().
+   */
+  public function buildRow(EntityInterface $entity) {
+    $row = parent::buildRow($entity);
+    if (empty($this->weightKey)) {
+      return $row;
+    }
+    // Override default values to markup elements.
+    $row['label'] = array(
+      '#markup' => check_plain($row['label']),
+    );
+    $row['id'] = array(
+      '#markup' => check_plain($row['id']),
+    );
+    $row['#attributes']['class'][] = 'draggable';
+    $row['#weight'] = $entity->get($this->weightKey);
+    // @see http://drupal.org/node/1876718
+    $row = array_slice($row, 0, 2, TRUE) + array(
+      'weight' => array(
+        '#type' => 'textfield',
+        '#title' => t('Weight for @title', array('@title' => $entity->label())),
+        '#title_display' => 'invisible',
+        '#default_value' => $entity->get($this->weightKey),
+        '#size' => 4,
+        '#attributes' => array('class' => array('weight')),
+      ),
+    ) + array_slice($row, 0, NULL, TRUE);
+    return $row;
+  }
+
+  /**
+   * Overrides EntityListController::render().
+   */
+  public function render() {
+    if (empty($this->weightKey)) {
+      return parent::render();
+    }
+
+    $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);
+  }
+
+  /**
+   * Creates a tabledrag form for manipulating config entity 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.
+   */
+  public function form($form, &$form_state) {
+    $form['entities'] = array(
+      '#type' => 'table',
+      '#header' => $this->buildHeader(),
+      '#empty' => t('There is no @label yet.', array('@label' => $this->entityInfo['label'])),
+      '#tabledrag' => array(
+        array('order', 'sibling', 'weight'),
+      ),
+    );
+
+    foreach ($this->load() as $entity) {
+      $form['entities'][$entity->id()] = $this->buildRow($entity);
+    }
+
+    $form['actions']['#type'] = 'actions';
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Save'),
+      '#submit' => array(array($this, 'submit')),
+    );
+
+    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])) {
+        $entities[$id]->set($this->weightKey, $value['weight']);
+        $entities[$id]->save();
+      }
+    }
+
+    drupal_set_message(t('Your settings have been saved.'));
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityListController.php b/core/lib/Drupal/Core/Entity/EntityListController.php
index 1fdb4ba..4dae842 100644
--- a/core/lib/Drupal/Core/Entity/EntityListController.php
+++ b/core/lib/Drupal/Core/Entity/EntityListController.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Entity\EntityListController.
+ * Definition of \Drupal\Core\Entity\EntityListController.
  */
 
 namespace Drupal\Core\Entity;
@@ -15,7 +15,7 @@ class EntityListController implements EntityListControllerInterface {
   /**
    * The entity storage controller class.
    *
-   * @var Drupal\Core\Entity\EntityStorageControllerInterface
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
    */
   protected $storage;
 
@@ -40,7 +40,7 @@ class EntityListController implements EntityListControllerInterface {
    *
    * @param string $entity_type.
    *   The type of entity to be listed.
-   * @param Drupal\Core\Entity\EntityStorageControllerInterface $storage.
+   * @param \Drupal\Core\Entity\EntityStorageControllerInterface $storage.
    *   The entity storage controller class.
    */
   public function __construct($entity_type, EntityStorageControllerInterface $storage) {
@@ -50,21 +50,21 @@ public function __construct($entity_type, EntityStorageControllerInterface $stor
   }
 
   /**
-   * Implements Drupal\Core\Entity\EntityListControllerInterface::getStorageController().
+   * Implements EntityListControllerInterface::getStorageController().
    */
   public function getStorageController() {
     return $this->storage;
   }
 
   /**
-   * Implements Drupal\Core\Entity\EntityListControllerInterface::load().
+   * Implements EntityListControllerInterface::load().
    */
   public function load() {
     return $this->storage->load();
   }
 
   /**
-   * Implements Drupal\Core\Entity\EntityListControllerInterface::getOperations().
+   * Implements EntityListControllerInterface::getOperations().
    */
   public function getOperations(EntityInterface $entity) {
     $uri = $entity->uri();
@@ -89,7 +89,7 @@ public function getOperations(EntityInterface $entity) {
    * @return array
    *   A render array structure of header strings.
    *
-   * @see Drupal\Core\Entity\EntityListController::render()
+   * @see \Drupal\Core\Entity\EntityListController::render()
    */
   public function buildHeader() {
     $row['label'] = t('Label');
@@ -101,32 +101,31 @@ public function buildHeader() {
   /**
    * Builds a row for an entity in the entity listing.
    *
-   * @param Drupal\Core\Entity\EntityInterface $entity
+   * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity for this row of the list.
    *
    * @return array
    *   A render array structure of fields for this entity.
    *
-   * @see Drupal\Core\Entity\EntityListController::render()
+   * @see \Drupal\Core\Entity\EntityListController::render()
    */
   public function buildRow(EntityInterface $entity) {
     $row['label'] = $entity->label();
     $row['id'] = $entity->id();
-    $operations = $this->buildOperations($entity);
-    $row['operations']['data'] = $operations;
+    $row['operations']['data'] = $this->buildOperations($entity);
     return $row;
   }
 
   /**
    * Builds a renderable list of operation links for the entity.
    *
-   * @param Drupal\Core\Entity\EntityInterface $entity
+   * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity on which the linked operations will be performed.
    *
    * @return array
    *   A renderable array of operation links.
    *
-   * @see Drupal\Core\Entity\EntityListController::render()
+   * @see \Drupal\Core\Entity\EntityListController::render()
    */
   public function buildOperations(EntityInterface $entity) {
     // Retrieve and sort operations.
@@ -140,7 +139,7 @@ public function buildOperations(EntityInterface $entity) {
   }
 
   /**
-   * Implements Drupal\Core\Entity\EntityListControllerInterface::render().
+   * Implements EntityListControllerInterface::render().
    *
    * Builds the entity list as renderable array for theme_table().
    *
diff --git a/core/modules/contact/lib/Drupal/contact/CategoryListController.php b/core/modules/contact/lib/Drupal/contact/CategoryListController.php
index a3ec886..3829551 100644
--- a/core/modules/contact/lib/Drupal/contact/CategoryListController.php
+++ b/core/modules/contact/lib/Drupal/contact/CategoryListController.php
@@ -41,10 +41,12 @@ public function getOperations(EntityInterface $entity) {
    * Overrides Drupal\Core\Entity\EntityListController::buildHeader().
    */
   public function buildHeader() {
-    $row['category'] = t('Category');
-    $row['recipients'] = t('Recipients');
-    $row['selected'] = t('Selected');
-    $row['operations'] = t('Operations');
+    $row = parent::buildHeader();
+    // @see http://drupal.org/node/1876718
+    $row = array_slice($row, 0, 2, TRUE) + array(
+      'default' => t('Default'),
+      'recipients' => t('Recipients'),
+    ) + array_slice($row, 0, NULL, TRUE);
     return $row;
   }
 
@@ -52,11 +54,17 @@ public function buildHeader() {
    * Overrides Drupal\Core\Entity\EntityListController::buildRow().
    */
   public function buildRow(EntityInterface $entity) {
-    $row['category'] = check_plain($entity->label());
-    $row['recipients'] = check_plain(implode(', ', $entity->recipients));
     $default_category = config('contact.settings')->get('default_category');
-    $row['selected'] = ($default_category == $entity->id() ? t('Yes') : t('No'));
-    $row['operations']['data'] = $this->buildOperations($entity);
+    $row = parent::buildRow($entity);
+    // @see http://drupal.org/node/1876718
+    $row = array_slice($row, 0, 2, TRUE) + array(
+      'default' => array(
+        '#markup' => ($default_category == $entity->id() ? t('Yes') : t('No')),
+      ),
+      'recipients' => array(
+        '#markup' => check_plain(implode(', ', $entity->recipients)),
+      ),
+    ) + array_slice($row, 0, NULL, TRUE);
     return $row;
   }
 
diff --git a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
index 0004b00..89cd767 100644
--- a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
@@ -28,7 +28,8 @@
  *   entity_keys = {
  *     "id" = "id",
  *     "label" = "label",
- *     "uuid" = "uuid"
+ *     "uuid" = "uuid",
+ *     "weight" = "weight"
  *   }
  * )
  */
