diff --git a/includes/media.filter.inc b/includes/media.filter.inc
index 697912f..461ac7d 100644
--- a/includes/media.filter.inc
+++ b/includes/media.filter.inc
@@ -159,7 +159,18 @@ function media_token_to_markup($match, $wysiwyg = FALSE) {
       // Do we need to validate the view mode for fields API?
       $tag_info['view_mode'] = media_variable_get('wysiwyg_default_view_mode');
     }
-    $file = file_load($tag_info['fid']);
+    // Load the file, preventing infinite recursion in case the media entity
+    // contains a reference to itself.
+    static $current_fids = array();
+    if (!isset($current_fids[$tag_info['fid']])) {
+      $current_fids[$tag_info['fid']] = TRUE;
+      $file = file_load($tag_info['fid']);
+    }
+    else {
+      $file = FALSE;
+    }
+    unset($current_fids[$tag_info['fid']]);
+
     if (!$file) {
       throw new Exception('Could not load media object');
     }
