Index: rules/ui/ui.controller.inc
===================================================================
--- rules/ui/ui.controller.inc	(saved version)
+++ rules/ui/ui.controller.inc	(working copy)
@@ -181,6 +181,10 @@
    *   - 'base path': Optionally, a different base path to use instead of the
    *     currently set RulesPluginUI::$basePath. If no base path has been set
    *     yet, the current path is used by default.
+   *   - 'sort': Provide a key by which to sort table rows. Valid keys are:
+   *       "weight" (default)
+   *       "label"
+   *       "id"
    *
    * @return Array
    *   A renderable array.
@@ -191,6 +195,7 @@
       'show plugin' => TRUE,
       'show events' => isset($conditions['plugin']) && $conditions['plugin'] == 'reaction rule',
       'show execution op' => !(isset($conditions['plugin']) && $conditions['plugin'] == 'reaction rule'),
+      'sort' => 'weight',
     );
     // By default show only configurations owned by rules.
     $conditions += array(
@@ -204,6 +209,18 @@
       RulesPluginUI::$basePath = current_path();
     }
 
+    $entities = entity_load('rules_config', FALSE, $conditions);
+
+    if ($options['sort'] == 'id') { // legacy sort by id
+      ksort($entities);
+    }
+    elseif ($options['sort'] == 'label') {
+      uasort($entities, array('self', 'sortObjectsByLabel'));
+    }
+    else { // default sort by weight
+      uasort($entities, array('self', 'sortObjectsByWeight'));
+    }
+
     // Prepare some variables used by overviewTableRow().
     $this->event_info = rules_fetch_data('event_info');
     $this->cache = rules_get_cache();
@@ -241,6 +258,27 @@
 
     // TODO: hide configs where access() is FALSE.
     return $table;
+  }
+
+  /**
+   * Helper function for sorting Rules Overview table rows by rule weight.
+   */
+  public static function sortByWeight($a, $b) {
+    $a_weight = (is_object($a) && isset($a->weight)) ? $a->weight : 0;
+    $b_weight = (is_object($b) && isset($b->weight)) ? $b->weight : 0;
+    if ($a_weight == $b_weight) {
+      return 0;
+    }
+    return ($a_weight < $b_weight) ? -1 : 1;
+  }
+
+  /**
+   * Helper function for sorting Rules Overview table rows by rule label.
+   */
+  public static function sortByLabel($a, $b) {
+    $a_label = (is_object($a) && isset($a->label)) ? $a->label : '';
+    $b_label = (is_object($b) && isset($b->label)) ? $b->label : '';
+    return strcmp($a_label, $b_label);
   }
 
   /**
