diff --git a/includes/common.inc b/includes/common.inc
index c6303ef..7e33236 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -5518,7 +5518,14 @@ function drupal_system_listing($mask, $directory, $key = 'name', $min_depth = 1)
     require_once DRUPAL_ROOT . '/includes/file.inc';
   }
   foreach ($searchdir as $dir) {
-    $files_to_add = file_scan_directory($dir, $mask, array('key' => $key, 'min_depth' => $min_depth));
+    $cid = "$dir-$mask-$key-$min_depth";
+    if ($cache = cache_get("file:$cid")) {
+      $files_to_add = $cache->data;
+    }
+    else {
+      $files_to_add = file_scan_directory($dir, $mask, array('key' => $key, 'min_depth' => $min_depth));
+      cache_set("file:$cid", $files_to_add);
+    }
 
     // Duplicate files found in later search directories take precedence over
     // earlier ones, so we want them to overwrite keys in our resulting
