diff --git a/includes/media.filter.inc b/includes/media.filter.inc
index 4be5e1a..7a808e0 100644
--- a/includes/media.filter.inc
+++ b/includes/media.filter.inc
@@ -309,9 +309,6 @@ function media_token_to_markup($match, $wysiwyg = FALSE) {
       $tag_info['attributes']['class'] = explode(" ", $tag_info['attributes']['class']);
     }
 
-    // Track the fid of this file in the {media_filter_usage} table.
-    media_filter_track_usage($file->fid);
-
     // Grab the potentially overrided fields from the file.
     $fields = media_filter_field_parser($tag_info);
 
@@ -690,70 +687,6 @@ function media_get_file_without_label($file, $view_mode, $settings = array()) {
 }
 
 /**
- * Clears caches that may be affected by the media filter.
- *
- * The media filter calls file_load(). This means that if a file object
- * is updated, the check_markup() and field caches could return stale content.
- * There are several possible approaches to deal with this:
- *  - Disable filter caching in media_filter_info(), this was found to cause a
- *    30% performance hit from profiling four node teasers, due to both the
- *    media filter itself, and other filters that can't be cached.
- *  - Clear the filter and field caches whenever any media node is updated, this
- *    would ensure cache coherency but would reduce the effectiveness of those
- *    caches on high traffic sites with lots of media content updates.
- *  - The approach taken here: Record the fid of all media objects that are
- *    referenced by the media filter. Only clear the filter and field caches
- *    when one of these is updated, as opposed to all media objects.
- *  - @todo: consider an EntityFieldQuery to limit cache clearing to only those
- *    entities that use a text format with the media filter, possibly checking
- *    the contents of those fields to further limit this to fields referencing
- *    the media object being updated. This would need to be implemented
- *    carefully to avoid scalability issues with large result sets, and may
- *    not be worth the effort.
- *
- * @param int $fid
- *   Optional media fid being updated. If not given, the cache will be cleared
- *   as long as any file is referenced.
- */
-function media_filter_invalidate_caches($fid = FALSE) {
-  // If fid is passed, confirm that it has previously been referenced by the
-  // media filter. If not, clear the cache if the {media_filter_usage} has any
-  // valid records.
-  if (($fid && db_query('SELECT fid FROM {media_filter_usage} WHERE fid = :fid', array(':fid' => $fid))->fetchField()) || (!$fid && media_filter_usage_has_records())) {
-    // @todo: support entity cache, either via a hook, or using module_exists().
-    cache_clear_all('*', 'cache_filter', TRUE);
-    cache_clear_all('*', 'cache_field', TRUE);
-  }
-}
-
-/**
- * Determines if the {media_filter_usage} table has any entries.
- */
-function media_filter_usage_has_records() {
-  return (bool) db_query_range('SELECT 1 FROM {media_filter_usage} WHERE fid > :fid', 0, 1, array(':fid' => 0))->fetchField();
-}
-
-/**
- * Tracks usage of media fids by the media filter.
- *
- * @param int $fid
- *   The media fid.
- */
-function media_filter_track_usage($fid) {
-  // This function only tracks when fids are found by the media filter.
-  // It would be impractical to check when formatted text is edited to remove
-  // references to fids, however by keeping a timestamp, we can implement
-  // rudimentary garbage collection in hook_flush_caches().
-  // However we only need to track that an fid has ever been referenced,
-  // not every time, so avoid updating this table more than once per month,
-  // per fid.
-  $timestamp = db_query('SELECT timestamp FROM {media_filter_usage} WHERE fid = :fid', array(':fid' => $fid))->fetchField();
-  if (!$timestamp || $timestamp <= REQUEST_TIME - 86400 * 30) {
-    db_merge('media_filter_usage')->key(array('fid' => $fid))->fields(array('fid' => $fid, 'timestamp' => REQUEST_TIME))->execute();
-  }
-}
-
-/**
  * Implements hook_entity_dependencies().
  */
 function media_entity_dependencies($entity, $entity_type) {
diff --git a/media.install b/media.install
index 6fde047..95e3b09 100644
--- a/media.install
+++ b/media.install
@@ -9,35 +9,6 @@
  * Implements hook_schema().
  */
 function media_schema() {
-  $schema['media_filter_usage'] = array(
-    'description' => 'Stores fids that have been included in the media tag in formatted textareas.',
-    'fields' => array(
-      'fid' => array(
-        'description' => 'The media {file_managed}.fid.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'timestamp' => array(
-        'description' => 'The timestamp the fid was last recorded by media_filter()',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'primary key' => array('fid'),
-    'indexes' => array(
-      'timestamp' => array('timestamp'),
-    ),
-    'foreign keys' => array(
-      'file_managed' => array(
-        'table' => 'file_managed',
-        'columns' => array('fid' => 'fid'),
-      ),
-    ),
-  );
-
   $schema['cache_media_xml'] = drupal_get_schema_unprocessed('system', 'cache');
   $schema['cache_media_xml']['description'] = 'Cache table for the the results of retreived XML documents for remote streams.';
 
@@ -293,38 +264,9 @@ function media_update_7011() {
 }
 
 /**
- * Create the media_filter_usage table.
+ * Empty update function.
  */
 function media_update_7012() {
-  $schema['media_filter_usage'] = array(
-    'description' => 'Stores fids that have been included in the media tag in formatted textareas.',
-    'fields' => array(
-      'fid' => array(
-        'description' => 'The media {file_managed}.fid.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'timestamp' => array(
-        'description' => 'The timestamp the fid was last recorded by media_filter()',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'foreign keys' => array(
-      'file_managed' => array(
-        'table' => 'file_managed',
-        'columns' => array('fid' => 'fid'),
-      ),
-    ),
-    'primary key' => array('fid'),
-    'indexes' => array(
-      'timestamp' => array('timestamp'),
-    ),
-  );
-  db_create_table('media_filter_usage', $schema['media_filter_usage']);
 }
 
 /**
@@ -1039,3 +981,12 @@ function media_update_7213() {
 
   variable_del('media__file_extensions');
 }
+
+/**
+ * Drop the legacy {media_filter_usage} table.
+ */
+function media_update_7214() {
+  if (db_table_exists('media_filter_usage')) {
+    db_drop_table('media_filter_usage');
+  }
+}
diff --git a/media.module b/media.module
index 84efe78..0baa691 100644
--- a/media.module
+++ b/media.module
@@ -327,34 +327,6 @@ function media_image_default_styles() {
 }
 
 /**
- * Implements hook_file_update().
- */
-function media_file_update($file) {
-  media_filter_invalidate_caches($file->fid);
-}
-
-/**
- * Implements hook_file_delete().
- */
-function media_file_delete($file) {
-  db_delete('media_filter_usage')->condition('fid', $file->fid)->execute();
-}
-
-/**
- * Implements hook_image_style_flush().
- *
- * This hook is invoked by Drupal core when cached image derivatives are no
- * longer valid.
- *
- * @see media_styles_style_flush()
- * @see media_file_style_flush()
- */
-function media_image_style_flush($style) {
-  // When a image style is flushed, clear the filter and field caches.
-  media_filter_invalidate_caches();
-}
-
-/**
  * Implements hook_page_alter().
  *
  * This is used to use our alternate template when ?render=media-popup is passed
@@ -1003,15 +975,6 @@ function media_element_validate(&$element, &$form_state) {
 
 /**
  * Implements hook_filter_info().
- *
- * For performance, the media filter is allowed to be cached by default. See
- * media_filter_invalidate_caches() for details. Some sites may use advanced
- * media styles with rendering implentations that differs per theme or based on
- * other runtime information. For these sites, it may be necessary to implement
- * a module with a hook_filter_info_alter() implementation that sets
- * $info['media_filter']['cache'] to FALSE.
- *
- * @see media_filter_invalidate_caches()
  */
 function media_filter_info() {
   $filters['media_filter'] = array(
@@ -1147,20 +1110,6 @@ function media_file_default_displays_alter(&$file_displays) {
 }
 
 /**
- * Implements hook_flush_caches().
- */
-function media_flush_caches() {
-  // Garbage collection for the {media_filter_usage} table. If an fid was last
-  // recorded four months ago (minimum three months due to logic in
-  // media_filter_track_usage()), remove it from this table while the filter
-  // and field caches are being cleared. If the fid is still in use, it will
-  // be added back to the table the next time check_markup() runs on that
-  // content. This prevents fids from staying in this table indefinitely,
-  // even if the post that references them is edited or deleted.
-  db_delete('media_filter_usage')->condition('timestamp', REQUEST_TIME - 86400 * 120, '<')->execute();
-}
-
-/**
  * Implements hook_ctools_plugin_api().
  *
  * Lets CTools know which plugin APIs are implemented by Media module.
diff --git a/modules/mediafield/mediafield.module b/modules/mediafield/mediafield.module
index 6d2b602..2dd77f3 100644
--- a/modules/mediafield/mediafield.module
+++ b/modules/mediafield/mediafield.module
@@ -314,16 +314,6 @@ function mediafield_field_delete_revision($entity_type, $entity, $field, $instan
 }
 
 /**
- * Implements hook_field_instance_update().
- */
-function mediafield_field_update_instance($instance, $prior_instance) {
-  // Clear the filter cache when updating instance settings for a media entity.
-  if ($instance['entity_type'] == 'media') {
-    media_filter_invalidate_caches();
-  }
-}
-
-/**
  * Implements hook_views_api().
  */
 function mediafield_views_api() {
