diff --git a/file_entity.file_api.inc b/file_entity.file_api.inc
index 431b416..39d643c 100644
--- a/file_entity.file_api.inc
+++ b/file_entity.file_api.inc
@@ -75,19 +75,25 @@ function file_info_cache_clear() {
  *   An array in the format expected by drupal_render().
  */
 function file_view_multiple($files, $view_mode = 'full', $weight = 0, $langcode = NULL) {
-  if (empty($files)) {
-    return array();
-  }
-
-  field_attach_prepare_view('file', $files, $view_mode, $langcode);
-  entity_prepare_view('file', $files, $langcode);
-
   $build = array();
+
+  $entities_by_view_mode = entity_view_mode_prepare('file', $files, $view_mode, $langcode);
+  foreach ($entities_by_view_mode as $entity_view_mode => $entities) {
+    field_attach_prepare_view('file', $entities, $entity_view_mode, $langcode);
+    entity_prepare_view('file', $entities, $langcode);
+
+    foreach ($entities as $entity) {
+      $build['files'][$entity->fid] = file_view($entity, $entity_view_mode, $langcode);
+    }
+  }
+
   foreach ($files as $file) {
-    $build['files'][$file->fid] = file_view($file, $view_mode, $langcode);
     $build['files'][$file->fid]['#weight'] = $weight;
     $weight++;
   }
+  // Sort here, to preserve the input order of the entities that were passed to
+  // this function.
+  uasort($build['files'], 'element_sort');
   $build['files']['#sorted'] = TRUE;
 
   return $build;
@@ -160,8 +166,13 @@ function file_build_content($file, $view_mode = 'full', $langcode = NULL) {
   // Remove previously built content, if exists.
   $file->content = array();
 
+  // In case of a multiple view, file_view_multiple() already ran the
+  // 'prepare_view' step. An internal flag prevents the operation from running
+  // twice.
   // Allow modules to change the view mode.
   $view_mode = key(entity_view_mode_prepare('file', array($file->fid => $file), $view_mode, $langcode));
+  field_attach_prepare_view('file', array($file->fid => $file), $view_mode, $langcode);
+  entity_prepare_view('file', array($file->fid => $file), $langcode);
 
   // Build the actual file display.
   // @todo Figure out how to clean this crap up.
@@ -178,11 +189,6 @@ function file_build_content($file, $view_mode = 'full', $langcode = NULL) {
   }
 
   // Build fields content.
-  // In case of a multiple view, file_view_multiple() already ran the
-  // 'prepare_view' step. An internal flag prevents the operation from running
-  // twice.
-  field_attach_prepare_view('file', array($file->fid => $file), $view_mode, $langcode);
-  entity_prepare_view('file', array($file->fid => $file), $langcode);
   $file->content += field_attach_view('file', $file, $view_mode, $langcode);
 
   $links = array();
diff --git a/file_entity.info b/file_entity.info
index 4149b3f..19c97b6 100644
--- a/file_entity.info
+++ b/file_entity.info
@@ -6,7 +6,7 @@ core = 7.x
 dependencies[] = field
 dependencies[] = file
 dependencies[] = ctools
-dependencies[] = system (>=7.9)
+dependencies[] = system (>=7.33)
 
 test_dependencies[] = token
 
