Index: modules/filter/filter.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v
retrieving revision 1.43
diff -u -p -r1.43 filter.admin.inc
--- modules/filter/filter.admin.inc	5 Sep 2009 13:22:13 -0000	1.43
+++ modules/filter/filter.admin.inc	7 Sep 2009 20:43:14 -0000
@@ -199,6 +199,9 @@ function filter_admin_format_form_valida
 function filter_admin_format_form_submit($form, &$form_state) {
   $format = (object) $form_state['values'];
   $format->format = isset($form_state['values']['format']) ? $form_state['values']['format'] : NULL;
+  foreach ($format->filters as $name => $status) {
+    $format->filters[$name] = array('status' => $status);
+  }
   $status = filter_format_save($format);
 
   switch ($status) {
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.287
diff -u -p -r1.287 filter.module
--- modules/filter/filter.module	30 Aug 2009 06:04:09 -0000	1.287
+++ modules/filter/filter.module	7 Sep 2009 20:49:46 -0000
@@ -186,11 +186,11 @@ function filter_format_save($format) {
   $current = filter_list_format($format->format);
   $filters = $format->filters;
 
-  foreach ($filters as $name => $status) {
+  foreach ($filters as $name => $filter) {
     $fields = array();
     // Add new filters to the bottom.
     $fields['weight'] = isset($current[$name]->weight) ? $current[$name]->weight : 10;
-    $fields['status'] = $status;
+    $fields['status'] = $filter['status'];
     // Only update settings if there are any.
     if (!empty($format->settings[$name])) {
       $fields['settings'] = serialize($format->settings[$name]);
@@ -211,6 +211,7 @@ function filter_format_save($format) {
     module_invoke_all('filter_format_update', $format);
   }
 
+  // Clear the filter cache whenever a text format is saved.
   cache_clear_all($format->format . ':', 'cache_filter', TRUE);
 
   return $return;
@@ -476,23 +477,28 @@ function filter_format_allowcache($forma
  *
  * @param $format
  *   The format ID.
+ * @param $all
+ *   (optional) Whether to retrieve all or only the enabled filters for the
+ *   given format. Defaults to FALSE; omitting disabled filters.
  * @return
  *   An array of filter objects assosiated to the given format.
  */
-function filter_list_format($format) {
+function filter_list_format($format, $all = FALSE) {
   static $filters = array();
   $filter_info = filter_get_filters();
 
-  if (!isset($filters[$format])) {
+  if (!isset($filters[$format]) || $all) {
     $filters[$format] = array();
-    $result = db_select('filter', 'filter')
+    $query = db_select('filter', 'filter')
       ->fields('filter')
       ->condition('format', $format)
-      ->condition('status', 1)
       ->orderBy('weight')
       ->orderBy('module')
-      ->orderBy('name')
-      ->execute();
+      ->orderBy('name');
+    if (!$all) {
+      $query->condition('status', 1);
+    }
+    $result = $query->execute();
     foreach ($result as $filter) {
       if (isset($filter_info[$filter->name])) {
         $filter->title = $filter_info[$filter->name]['title'];
