diff --git a/SAS/DataManagement/StorageQueryService/cache.py b/SAS/DataManagement/StorageQueryService/cache.py
index 0cbfe5ad1d63c707487f9fa62d508e79cfadc15b..a796298f8289cd125c914f9760f2cfe645475c10 100644
--- a/SAS/DataManagement/StorageQueryService/cache.py
+++ b/SAS/DataManagement/StorageQueryService/cache.py
@@ -373,7 +373,7 @@ class CacheManager:
                 subdir_paths = [sdp for sdp in all_dirs
                                 if sdp.startswith(path) and sdp.count('/') == path_depth+1]
 
-                subdir_du_results = [self.getDiskUsageForPath(sd, force_update=force_update) for sd in subdir_paths]
+                subdir_du_results = self.getDiskUsageForPaths(subdir_paths, force_update=force_update).values()
                 valid_subdir_du_results = [du for du in subdir_du_results if du.get('disk_usage')]
                 sum_du = sum([du['disk_usage'] for du in valid_subdir_du_results])
 
@@ -500,19 +500,27 @@ class CacheManager:
         path_result = self.disk_usage.path_resolver.getPathForTask(radb_id=radb_id, mom_id=mom_id, otdb_id=otdb_id, include_scratch_paths=include_scratch_paths)
 
         if path_result['found']:
-            path_du_result = self.getDiskUsageForPath(path_result['path'], force_update=force_update)
-            path_du_result['radb_id'] = path_result.get('radb_id')
-            path_du_result['mom_id'] = path_result.get('mom_id')
-            path_du_result['otdb_id'] = path_result.get('otdb_id')
+            task_path = path_result['path']
+            scratch_paths = path_result.get('scratch_paths', [])
 
-            if 'scratch_paths' in path_result:
-                path_du_result['scratch_paths'] = {}
+            # get all du's in parallel over all paths
+            paths = [task_path] + scratch_paths
+            paths_du_result = self.getDiskUsageForPaths(paths, force_update=force_update)
+
+            # split into project and subdir
+            path_du_result = paths_du_result.pop(task_path)
+            scratch_du_result = paths_du_result
+
+            task_du_result = dict(path_du_result)
+
+            # yield id's for if available, or None
+            for id in ['radb_id', 'otdb_id', 'mom_id']:
+                task_du_result[id] = path_result.get(id)
 
-                for scratch_path in path_result['scratch_paths']:
-                    scratch_path_du_result = self.getDiskUsageForPath(scratch_path, force_update=force_update)
-                    path_du_result['scratch_paths'][scratch_path] = scratch_path_du_result
+            if scratch_du_result:
+                task_du_result['scratch_paths'] = scratch_du_result
 
-            return path_du_result
+            return task_du_result
 
         return {'found': False, 'path': path_result['path']}