diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
index 3977310..19eebb4 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityListController.php
@@ -8,6 +8,8 @@
 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,119 @@ public function load() {
     return $entities;
   }
 
+  /**
+   * Overrides EntityListController::buildHeader().
+   */
+  public function buildHeader() {
+    if (!isset($this->weightKey)) {
+      return parent::buildHeader();
+    }
+
+    $header['label'] = t('Label');
+    $header['id'] = t('Machine name');
+    $header['weight'] = t('Weight');
+    $header['operations'] = t('Operations');
+
+    return $header;
+  }
+
+  /**
+   * Overrides EntityListController::buildRow().
+   */
+  public function buildRow(EntityInterface $entity) {
+    if (!isset($this->weightKey)) {
+      return parent::buildRow($entity);
+    }
+
+    $row['label']['#markup'] = $entity->label();
+    $row['id']['#markup'] = $entity->id();
+    $row['operations']['data'] = $this->buildOperations($entity);
+
+    $row['weight'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Weight for @title', array('@title' => $entity->label())),
+      '#title_display' => 'invisible',
+      '#default_value' => $entity->{$this->weightKey},
+      '#size' => 4,
+      '#attributes' => array('class' => array('weight')),
+    );
+
+    $row['#attributes']['class'][] = 'draggable';
+    $row['#weight'] = $entity->{$this->weightKey};
+
+    return $row;
+  }
+
+  /**
+   * Overrides EntityListController::render().
+   */
+  public function render() {
+    if (!isset($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]->{$this->weightKey} = $value['weight'];
+        $entities[$id]->save();
+      }
+    }
+
+    drupal_set_message(t('Your settings have been saved.'));
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
index 6d0a3f4..01457fc 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
@@ -66,6 +66,14 @@ public function __construct($entityType) {
     $this->entityInfo = entity_get_info($entityType);
     $this->hookLoadArguments = array();
     $this->idKey = $this->entityInfo['entity_keys']['id'];
+
+    // 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;
+    }
   }
 
   /**
