diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index 8daea6ca3fe8373f72b946ea08a92c625e553f13..19129e9de1112f345fa2c12cae93242e0686cca5 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -45,10 +45,32 @@ try {
 
 	$sortAttribute = isset($_GET['sort']) ? (string)$_GET['sort'] : 'name';
 	$sortDirection = isset($_GET['sortdirection']) ? ($_GET['sortdirection'] === 'desc') : false;
+	$mimetypeFilters = isset($_GET['mimetypes']) ? json_decode($_GET['mimetypes']) : '';
 
-	// make filelist
+	$files = [];
+	// Clean up duplicates from array
+	if (is_array($mimetypeFilters) && count($mimetypeFilters)) {
+		$mimetypeFilters = array_unique($mimetypeFilters);
+
+		if (!in_array('httpd/unix-directory', $mimetypeFilters)) {
+			// append folder filter to be able to browse folders
+			$mimetypeFilters[] = 'httpd/unix-directory';
+		}
+
+		// create filelist with mimetype filter - as getFiles only supports on
+		// mimetype filter at once we will filter this folder for each
+		// mimetypeFilter
+		foreach ($mimetypeFilters as $mimetypeFilter) {
+			$files = array_merge($files, \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection, $mimetypeFilter));
+		}
+
+		// sort the files accordingly
+		$files = \OCA\Files\Helper::sortFiles($files, $sortAttribute, $sortDirection);
+	} else {
+		// create file list without mimetype filter
+		$files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection);
+	}
 
-	$files = \OCA\Files\Helper::getFiles($dir, $sortAttribute, $sortDirection);
 	$files = \OCA\Files\Helper::populateTags($files);
 	$data['directory'] = $dir;
 	$data['files'] = \OCA\Files\Helper::formatFileInfos($files);
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index cc1b2d3cfbe8e851724c529810816d86c89a27d1..e966e60d00a24a1a2fac79aaba226468949405fa 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -196,10 +196,11 @@ class Helper {
 	 * @param string $dir path to the directory
 	 * @param string $sortAttribute attribute to sort on
 	 * @param bool $sortDescending true for descending sort, false otherwise
+	 * @param string $mimetypeFilter limit returned content to this mimetype or mimepart
 	 * @return \OCP\Files\FileInfo[] files
 	 */
-	public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false) {
-		$content = \OC\Files\Filesystem::getDirectoryContent($dir);
+	public static function getFiles($dir, $sortAttribute = 'name', $sortDescending = false, $mimetypeFilter = '') {
+		$content = \OC\Files\Filesystem::getDirectoryContent($dir, $mimetypeFilter);
 
 		return self::sortFiles($content, $sortAttribute, $sortDescending);
 	}
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index df139ed979729a6db7cb37cd2d3cece8669e6d67..afd7debb6958fb85034867dda29b6e9fc33643ad 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -138,7 +138,7 @@ var OCdialogs = {
 	 * @param title dialog title
 	 * @param callback which will be triggered when user presses Choose
 	 * @param multiselect whether it should be possible to select multiple files
-	 * @param mimetypeFilter mimetype to filter by
+	 * @param mimetypeFilter mimetype to filter by - directories will always be included
 	 * @param modal make the dialog modal
 	*/
 	filepicker:function(title, callback, multiselect, mimetypeFilter, modal) {