diff --git a/file_entity.field.inc b/file_entity.field.inc
index 1701c88..3f3b529 100644
--- a/file_entity.field.inc
+++ b/file_entity.field.inc
@@ -273,6 +273,18 @@ function file_entity_field_formatter_settings_summary($field, $instance, $view_m
 }
 
 /**
+ * Implements hook_field_formatter_prepare_view().
+ */
+function file_entity_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
+  // File and image fields set item values to NULL if a file cannot be loaded.
+  // Remove those empty items so we can simply iterate through $items normally
+  // in file_entity_field_formatter_view().
+  foreach (array_keys($entities) as $id) {
+    $items[$id] = array_filter($items[$id]);
+  }
+}
+
+/**
  * Implements hook_field_formatter_view().
  */
 function file_entity_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
@@ -335,9 +347,6 @@ function file_entity_field_formatter_view($entity_type, $entity, $field, $instan
     case 'file_audio':
       $multiple_file_behavior = $settings['multiple_file_behavior'];
 
-      // Prevent 'empty' fields from causing a WSOD.
-      $items = array_filter($items);
-
       // Build an array of sources for each <audio> element.
       $source_lists = array();
       if ($multiple_file_behavior == 'tags') {
@@ -371,9 +380,6 @@ function file_entity_field_formatter_view($entity_type, $entity, $field, $instan
     case 'file_video':
       $multiple_file_behavior = $settings['multiple_file_behavior'];
 
-      // Prevent 'empty' fields from causing a WSOD.
-      $items = array_filter($items);
-
       // Build an array of sources for each <video> element.
       $source_lists = array();
       if ($multiple_file_behavior == 'tags') {
