Index: modules/filter/filter.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v
retrieving revision 1.51
diff -u -p -r1.51 filter.admin.inc
--- modules/filter/filter.admin.inc	22 Nov 2009 08:14:27 -0000	1.51
+++ modules/filter/filter.admin.inc	2 Dec 2009 12:38:59 -0000
@@ -135,7 +135,8 @@ function filter_admin_format_form($form,
   }
   // Table with filters
   $filter_info = filter_get_filters();
-  $filters = filter_list_format($format->format);
+  // Load all configured filters for existing text formats.
+  $filters = !empty($format->format) ? filter_list_format($format->format) : array();
 
   $form['filters'] = array('#type' => 'fieldset',
     '#title' => t('Filters'),
Index: modules/filter/filter.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.install,v
retrieving revision 1.24
diff -u -p -r1.24 filter.install
--- modules/filter/filter.install	7 Nov 2009 22:14:58 -0000	1.24
+++ modules/filter/filter.install	2 Dec 2009 12:38:59 -0000
@@ -59,7 +59,7 @@ function filter_schema() {
       'fmn' => array('format', 'module', 'name'),
     ),
     'indexes' => array(
-      'list' => array('format', 'weight', 'module', 'name'),
+      'list' => array('weight', 'module', 'name'),
     ),
   );
   $schema['filter_format'] = array(
@@ -351,6 +351,14 @@ function filter_update_7005() {
 }
 
 /**
+ * Change the 'list' index on {filter}.
+ */
+function filter_update_7008() {
+  db_drop_index('filter', 'list');
+  db_add_index('filter', 'list', array('weight', 'module', 'name'));
+}
+
+/**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
  */
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.303
diff -u -p -r1.303 filter.module
--- modules/filter/filter.module	30 Nov 2009 13:55:55 -0000	1.303
+++ modules/filter/filter.module	2 Dec 2009 12:39:00 -0000
@@ -193,7 +193,7 @@ function filter_format_save(&$format) {
   }
 
   // Get the current filters in the format, to add new filters to the bottom.
-  $current = filter_list_format($format->format);
+  $current = ($return != SAVED_NEW ? filter_list_format($format->format) : array());
   $filter_info = filter_get_filters();
   if (!isset($format->filters)) {
     $format->filters = array();
@@ -556,16 +556,16 @@ function filter_list_format($format_id) 
   $filters = &drupal_static(__FUNCTION__, array());
   $filter_info = filter_get_filters();
 
+  if (!isset($filters['all'])) {
+    $result = db_query('SELECT * FROM {filter} ORDER BY weight, module, name');
+    foreach ($result as $record) {
+      $filters['all'][$record->format][$record->name] = $record;
+    }
+  }
+
   if (!isset($filters[$format_id])) {
     $format_filters = array();
-    $query = db_select('filter', 'filter')
-      ->fields('filter')
-      ->condition('format', $format_id)
-      ->orderBy('weight')
-      ->orderBy('module')
-      ->orderBy('name');
-    $result = $query->execute()->fetchAllAssoc('name');
-    foreach ($result as $name => $filter) {
+    foreach ($filters['all'][$format_id] as $name => $filter) {
       if (isset($filter_info[$name])) {
         $filter->title = $filter_info[$name]['title'];
         // Unpack stored filter settings.
