diff --git a/video_filter.module b/video_filter.module
index 7a91b47..783c424 100644
--- a/video_filter.module
+++ b/video_filter.module
@@ -246,7 +246,7 @@ function _video_filter_instructions() {
   // Include codecs
   module_load_include('inc', 'video_filter', 'video_filter.codecs');
 
-  $codecs = module_invoke_all('codec_info');
+  $codecs = video_filter_get_codec_info();
   $output = '<ul>';
   foreach ($codecs AS $codec) {
     $output .= '<li><strong>' . $codec['name'] . '</strong><br />' . $codec['sample_url'] . '</li>';
@@ -288,7 +288,7 @@ function video_filter_filter($op, $delta = 0, $format = -1, $text = '') {
  */
 function video_filter_filter_tips($delta, $format, $long = FALSE) {
   if ($long) {
-    $codecs = module_invoke_all('codec_info');
+    $codecs = video_filter_get_codec_info();
     $supported = array();
     $instructions = array();
     foreach ($codecs AS $codec) {
@@ -334,7 +334,7 @@ function video_filter_process($text, $format = -1) {
       }
 
       // Load all codecs
-      $codecs = module_invoke_all('codec_info');
+      $codecs = video_filter_get_codec_info();
 
       // Find codec
       foreach ($codecs AS $codec_name => $codec) {
@@ -503,6 +503,15 @@ function video_filter_flash($video, $params = array()) {
   return theme('video_filter_flash', $video, $params);
 }
 
+function video_filter_get_codec_info() {
+  static $codecs;
+  if (!isset($codecs)) {
+    $codecs = module_invoke_all('codec_info');
+    drupal_alter('codec_info', $codecs);
+  }
+  return $codecs;
+}
+
 /**
  * Function that outputs the <object> element.
  *
