diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index a4402464481876b0ba5f8dd7589ed25fcf537e83..82588df42d2a8e4a29a5f75178f88576bfe37017 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -230,15 +230,7 @@ class Shared_Cache extends Cache {
 		// normalize pattern
 		$pattern = $this->normalize($pattern);
 
-		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
-		foreach ($ids as $file) {
-			$folderBackend = \OCP\Share::getBackend('folder');
-			$children = $folderBackend->getChildren($file);
-			foreach ($children as $child) {
-				$ids[] = (int)$child['source'];
-			}
-			
-		}
+		$ids = $this->getAll();
 
 		$files = array();
 		
@@ -248,7 +240,8 @@ class Shared_Cache extends Cache {
 		foreach ($chunks as $chunk) {
 			$placeholders = join(',', array_fill(0, count($chunk), '?'));
 
-			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`
+			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
+					`encrypted`, `unencrypted_size`, `etag`
 					FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `fileid` IN (' . $placeholders . ')';
 			
 			$result = \OC_DB::executeAudited($sql, array_merge(array($pattern), $chunk));
@@ -280,13 +273,30 @@ class Shared_Cache extends Cache {
 		}
 		$mimetype = $this->getMimetypeId($mimetype);
 		$ids = $this->getAll();
-		$placeholders = join(',', array_fill(0, count($ids), '?'));
-		$query = \OC_DB::prepare('
-			SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`
-			FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')'
-		);
-		$result = $query->execute(array_merge(array($mimetype), $ids));
-		return $result->fetchAll();
+
+		$files = array();
+		
+		// divide into 1k chunks
+		$chunks = array_chunk($ids, 1000);
+		
+		foreach ($chunks as $chunk) {
+			$placeholders = join(',', array_fill(0, count($ids), '?'));
+			$sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`,
+					`encrypted`, `unencrypted_size`, `etag`
+					FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `fileid` IN (' . $placeholders . ')';
+			
+			$result = \OC_DB::executeAudited($sql, array_merge(array($mimetype), $chunk));
+
+			while ($row = $result->fetchRow()) {
+				if (substr($row['path'], 0, 6)==='files/') {
+					$row['path'] = substr($row['path'],6); // remove 'files/' from path as it's relative to '/Shared'
+					$row['mimetype'] = $this->getMimetype($row['mimetype']);
+					$row['mimepart'] = $this->getMimetype($row['mimepart']);
+					$files[] = $row;
+				} // else skip results out of the files folder
+			}
+		}
+		return $files;
 	}
 
 	/**
@@ -308,7 +318,16 @@ class Shared_Cache extends Cache {
 	 * @return int[]
 	 */
 	public function getAll() {
-		return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		$ids = \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_GET_ALL);
+		$folderBackend = \OCP\Share::getBackend('folder');
+		foreach ($ids as $file) {
+			$children = $folderBackend->getChildren($file);
+			foreach ($children as $child) {
+				$ids[] = (int)$child['source'];
+			}
+			
+		}
+		return $ids;
 	}
 
 	/**