diff --git a/modules/filter/filter.admin.inc b/modules/filter/filter.admin.inc
index 4bc204c5cd9f1df7ddb07d202c568cf99ff0bf32..218273a047a70afe86aee8d8373f531708cb88eb 100644
--- a/modules/filter/filter.admin.inc
+++ b/modules/filter/filter.admin.inc
@@ -118,7 +118,8 @@ function filter_admin_format_form(&$form_state, $format) {
     $form['default_format'] = array('#type' => 'hidden', '#value' => 1);
   }
 
-  $form['name'] = array('#type' => 'textfield',
+  $form['name'] = array(
+    '#type' => 'textfield',
     '#title' => t('Name'),
     '#default_value' => $format->name,
     '#description' => t('Specify a unique name for this text format.'),
@@ -144,7 +145,7 @@ function filter_admin_format_form(&$form_state, $format) {
   }
   // Table with filters
   $filter_info = filter_get_filters();
-  $filters = filter_list_format($format->format);
+  $filters = filter_list_format($format->format, TRUE);
 
   $form['filters'] = array('#type' => 'fieldset',
     '#title' => t('Filters'),
@@ -152,10 +153,10 @@ function filter_admin_format_form(&$form_state, $format) {
     '#tree' => TRUE,
   );
   foreach ($filter_info as $name => $filter) {
-    $form['filters'][$name] = array(
+    $form['filters'][$name]['status'] = array(
       '#type' => 'checkbox',
       '#title' => $filter['title'],
-      '#default_value' => isset($filters[$name]),
+      '#default_value' => !empty($filters[$name]->status),
       '#description' => $filter['description'],
     );
   }
diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index 0eecb3083b44c98c07f45d7351769e35edfc2519..c98db9ff9d88a9e0f3c117c04ee50318c174e914 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -70,6 +70,13 @@ function filter_theme() {
  * Implement hook_menu().
  */
 function filter_menu() {
+  $items['filter/tips'] = array(
+    'title' => 'Compose tips',
+    'page callback' => 'filter_tips_long',
+    'access callback' => TRUE,
+    'type' => MENU_SUGGESTED_ITEM,
+    'file' => 'filter.pages.inc',
+  );
   $items['admin/config/content/formats'] = array(
     'title' => 'Text formats',
     'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.',
@@ -90,13 +97,6 @@ function filter_menu() {
     'weight' => 1,
     'file' => 'filter.admin.inc',
   );
-  $items['filter/tips'] = array(
-    'title' => 'Compose tips',
-    'page callback' => 'filter_tips_long',
-    'access callback' => TRUE,
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'filter.pages.inc',
-  );
   $items['admin/config/content/formats/%filter_format'] = array(
     'type' => MENU_CALLBACK,
     'title callback' => 'filter_admin_format_title',
@@ -185,15 +185,14 @@ function filter_format_save($format) {
   // to the bottom.
   $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]);
+    if (!empty($filter['settings'])) {
+      $fields['settings'] = serialize($filter['settings']);
     }
     db_merge('filter')
       ->key(array(
@@ -211,6 +210,8 @@ function filter_format_save($format) {
     module_invoke_all('filter_format_update', $format);
   }
 
+  // Clear the filter cache whenever a text format is saved.
+  drupal_static_reset('filter_list_format');
   cache_clear_all($format->format . ':', 'cache_filter', TRUE);
 
   return $return;
@@ -386,6 +387,7 @@ function _filter_html_escape_tips($filter, $format, $long = FALSE) {
 /**
  * @} End of "Tips callback for filters".
  */
+
 /**
  * Retrieve a list of text formats.
  */
@@ -472,47 +474,52 @@ function filter_format_allowcache($format) {
 }
 
 /**
- * Retrieve a list of filters for a certain format.
+ * Retrieve a list of filters for a given text format.
  *
  * @param $format
  *   The format ID.
+ * @param $include_disabled
+ *   (optional) Boolean whether to retrieve all filters associated with the
+ *   given format, including those that are disabled. Defaults to FALSE.
  * @return
  *   An array of filter objects assosiated to the given format.
  */
-function filter_list_format($format) {
-  static $filters = array();
+function filter_list_format($format, $include_disabled = FALSE) {
+  $filters = &drupal_static(__FUNCTION__, array());
   $filter_info = filter_get_filters();
 
-  if (!isset($filters[$format])) {
-    $filters[$format] = array();
-    $result = db_select('filter', 'filter')
+  if (!isset($filters[$format]) || $include_disabled) {
+    $format_filters = array();
+    $query = db_select('filter', 'filter')
       ->fields('filter')
       ->condition('format', $format)
-      ->condition('status', 1)
       ->orderBy('weight')
       ->orderBy('module')
-      ->orderBy('name')
-      ->execute();
-    foreach ($result as $filter) {
-      if (isset($filter_info[$filter->name])) {
-        $filter->title = $filter_info[$filter->name]['title'];
+      ->orderBy('name');
+    if (!$include_disabled) {
+      $query->condition('status', 1);
+    }
+    $result = $query->execute()->fetchAllAssoc('name');
+    foreach ($result as $name => $filter) {
+      if (isset($filter_info[$name])) {
+        $filter->title = $filter_info[$name]['title'];
         // Unpack stored filter settings.
-        if (isset($filter->settings)) {
-          $filter->settings = unserialize($filter->settings);
-        }
-        else {
-          $filter->settings = array();
-        }
+        $filter->settings = (isset($filter->settings) ? unserialize($filter->settings) : array());
         // Apply default filter settings.
-        if (isset($filter_info[$filter->name]['default settings'])) {
-          $filter->settings = array_merge($filter_info[$filter->name]['default settings'], $filter->settings);
+        if (isset($filter_info[$name]['default settings'])) {
+          $filter->settings = array_merge($filter_info[$name]['default settings'], $filter->settings);
         }
-        $filters[$format][$filter->name] = $filter;
+        $format_filters[$name] = $filter;
       }
     }
+    // Prevent statically caching of disabled filters.
+    if ($include_disabled) {
+      return $format_filters;
+    }
+    $filters[$format] = $format_filters;
   }
 
-  return $filters[$format];
+  return isset($filters[$format]) ? $filters[$format] : array();
 }
 
 /**
diff --git a/modules/filter/filter.test b/modules/filter/filter.test
index 5acfd610fba7244fc00d0d7b8b4125500a1e6704..4747495d574079528294cd656aa65aad3a80b1db 100644
--- a/modules/filter/filter.test
+++ b/modules/filter/filter.test
@@ -65,8 +65,8 @@ class FilterAdminTestCase extends DrupalWebTestCase {
     $edit = array();
     $edit['name'] = $this->randomName();
     $edit['roles[2]'] = 1;
-    $edit['filters[' . $second_filter . ']'] = TRUE;
-    $edit['filters[' . $first_filter . ']'] = TRUE;
+    $edit['filters[' . $second_filter . '][status]'] = TRUE;
+    $edit['filters[' . $first_filter . '][status]'] = TRUE;
     $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
     $this->assertRaw(t('Added text format %format.', array('%format' => $edit['name'])), t('New filter created.'));
 
@@ -75,8 +75,8 @@ class FilterAdminTestCase extends DrupalWebTestCase {
 
     if ($format !== NULL) {
       $this->assertFieldByName('roles[2]', '', t('Role found.'));
-      $this->assertFieldByName('filters[' . $second_filter . ']', '', t('Line break filter found.'));
-      $this->assertFieldByName('filters[' . $first_filter . ']', '', t('Url filter found.'));
+      $this->assertFieldByName('filters[' . $second_filter . '][status]', '', t('Line break filter found.'));
+      $this->assertFieldByName('filters[' . $first_filter . '][status]', '', t('Url filter found.'));
 
       // Delete new filter.
       $this->drupalPost('admin/config/content/formats/' . $format->format . '/delete', array(), t('Delete'));
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index 5bedba1f26e349b9d0d82643adae95ba61826e81..e61d47be764146361b43aa75b524514078a423ef 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -538,14 +538,13 @@ function forum_block_view($delta = '') {
       break;
   }
 
-   $cache_keys[] = 'forum';
-   $cache_keys[] = $delta;
-   // Cache based on the altered query. Enables us to cache with node access enabled.
-   $query->preExecute();
-   $cache_keys[] = md5(serialize(array((string) $query, $query->getArguments())));
-
-   $block['subject'] = $title;
-   $block['content'] = array(
+  $cache_keys = array_merge(array('forum', $delta), drupal_render_cid_parts());
+  // Cache based on the altered query. Enables us to cache with node access enabled.
+  $query->preExecute();
+  $cache_keys[] = md5(serialize(array((string) $query, $query->getArguments())));
+
+  $block['subject'] = $title;
+  $block['content'] = array(
      '#access' => user_access('access content'),
      '#pre_render' => array('forum_block_view_pre_render'),
      '#cache' => array(
@@ -553,8 +552,8 @@ function forum_block_view($delta = '') {
         'expire' => CACHE_TEMPORARY,
      ),
      '#query' => $query,
-   );
-   return $block;
+  );
+  return $block;
 }
 
 /**
diff --git a/modules/search/search.test b/modules/search/search.test
index f16517e3b9e7c8b0bae0805def036a72771745e4..e0fae433d7905bd65e3e6c76dc9cda6d9886720a 100644
--- a/modules/search/search.test
+++ b/modules/search/search.test
@@ -471,7 +471,7 @@ class SearchCommentTestCase extends DrupalWebTestCase {
     variable_set('comment_preview_article', COMMENT_PREVIEW_OPTIONAL);
     // Enable check_plain() for 'Filtered HTML' text format.
     $edit = array(
-      'filters[filter_html_escape]' => 1,
+      'filters[filter_html_escape][status]' => 1,
     );
     $this->drupalPost('admin/config/content/formats/1', $edit, t('Save configuration'));
     // Allow anonymous users to search content.