diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index be0992b19854b967f7a9b7f0db7f6084813b2169..50b4e8338a85bd2ccce023e1803a9da1ddf1e70f 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -31,7 +31,7 @@ class Helper
 	/**
 	 * Determine icon for a given file
 	 *
-	 * @param \OC\Files\FileInfo $file file info
+	 * @param \OCP\Files\FileInfo $file file info
 	 * @return string icon URL
 	 */
 	public static function determineIcon($file) {
@@ -111,7 +111,7 @@ class Helper
 		$entry['mtime'] = $i['mtime'] * 1000;
 		// only pick out the needed attributes
 		$entry['icon'] = \OCA\Files\Helper::determineIcon($i);
-		if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) {
+		if (\OC::$server->getPreviewManager()->isAvailable($i)) {
 			$entry['isPreviewAvailable'] = true;
 		}
 		$entry['name'] = $i->getName();
diff --git a/core/ajax/preview.php b/core/ajax/preview.php
index edbd41d2db45c3b43883430c55ea350daf0fa56f..d2811f39dd6a89bcf0500846721cff51847081cc 100644
--- a/core/ajax/preview.php
+++ b/core/ajax/preview.php
@@ -30,7 +30,8 @@ if ($maxX === 0 || $maxY === 0) {
 
 try {
 	$preview = new \OC\Preview(\OC_User::getUser(), 'files');
-	if (!$always and !$preview->isMimeSupported(\OC\Files\Filesystem::getMimeType($file))) {
+	$info = \OC\Files\Filesystem::getFileInfo($file);
+	if (!$always and !$preview->isAvailable($info)) {
 		\OC_Response::setStatus(404);
 	} else {
 		$preview->setFile($file);
diff --git a/lib/private/preview.php b/lib/private/preview.php
index 6172519c7d19cafaaa05e99f6e8552fe14fb8172..aeb9806904a7b04680ed3e16ac01777e4588492c 100755
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -13,6 +13,7 @@
  */
 namespace OC;
 
+use OC\Files\Filesystem;
 use OC\Preview\Provider;
 
 require_once 'preview/image.php';
@@ -731,6 +732,35 @@ class Preview {
 		$preview->deleteAllPreviews();
 	}
 
+	/**
+	 * Check if a preview can be generated for a file
+	 *
+	 * @param \OC\Files\FileInfo $file
+	 * @return bool
+	 */
+	public static function isAvailable($file) {
+		if (!\OC_Config::getValue('enable_previews', true)) {
+			return false;
+		}
+
+		//check if there are preview backends
+		if (empty(self::$providers)) {
+			self::initProviders();
+		}
+
+		//remove last element because it has the mimetype *
+		$providers = array_slice(self::$providers, 0, -1);
+		foreach ($providers as $supportedMimeType => $provider) {
+			/**
+			 * @var \OC\Preview\Provider $provider
+			 */
+			if (preg_match($supportedMimeType, $file->getMimetype())) {
+				return $provider->isAvailable($file);
+			}
+		}
+		return false;
+	}
+
 	/**
 	 * @param string $mimeType
 	 * @return bool
diff --git a/lib/private/preview/provider.php b/lib/private/preview/provider.php
index f769823f6e6359bdd57107ee4e46597adffa7cf4..f544c2c4b133a36c2ab2ebbc4b9edeb52b555e79 100644
--- a/lib/private/preview/provider.php
+++ b/lib/private/preview/provider.php
@@ -10,6 +10,16 @@ abstract class Provider {
 
 	abstract public function getMimeType();
 
+	/**
+	 * Check if a preview can be generated for $path
+	 *
+	 * @param string $path
+	 * @return bool
+	 */
+	public function isAvailable($path) {
+		return true;
+	}
+
 	/**
 	 * get thumbnail for file at path $path
 	 * @param string $path Path of file
diff --git a/lib/private/preview/txt.php b/lib/private/preview/txt.php
index 063543c6279ae62a0f53c5d84d943393408b198f..b81436baa068e48f9fed495bc1ae74e9529ed22c 100644
--- a/lib/private/preview/txt.php
+++ b/lib/private/preview/txt.php
@@ -13,6 +13,16 @@ class TXT extends Provider {
 		return '/text\/plain/';
 	}
 
+	/**
+	 * Check if a preview can be generated for $path
+	 *
+	 * @param \OC\Files\FileInfo $file
+	 * @return bool
+	 */
+	public function isAvailable($file) {
+		return $file->getSize() > 5;
+	}
+
 	/**
 	 * @param string $path
 	 * @param int $maxX
diff --git a/lib/private/previewmanager.php b/lib/private/previewmanager.php
index 23dbee13c7d465d6d8b6f1d906a3b188ddc4287a..85bf609743d23c79e7ef57a72bed8cbf9359ac56 100755
--- a/lib/private/previewmanager.php
+++ b/lib/private/previewmanager.php
@@ -14,25 +14,35 @@ use OCP\IPreview;
 class PreviewManager implements IPreview {
 	/**
 	 * return a preview of a file
+	 *
 	 * @param string $file The path to the file where you want a thumbnail from
 	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
 	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
 	 * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
 	 * @return \OCP\Image
 	 */
-	function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false)
-	{
+	function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) {
 		$preview = new \OC\Preview('', '/', $file, $maxX, $maxY, $scaleUp);
 		return $preview->getPreview();
 	}
 
 	/**
 	 * returns true if the passed mime type is supported
+	 *
 	 * @param string $mimeType
 	 * @return boolean
 	 */
-	function isMimeSupported($mimeType = '*')
-	{
+	function isMimeSupported($mimeType = '*') {
 		return \OC\Preview::isMimeSupported($mimeType);
 	}
+
+	/**
+	 * Check if a preview can be generated for a file
+	 *
+	 * @param \OC\Files\FileInfo $file
+	 * @return bool
+	 */
+	function isAvailable($file) {
+		return \OC\Preview::isAvailable($file);
+	}
 }
diff --git a/lib/public/ipreview.php b/lib/public/ipreview.php
index f74472ad368e9980d3e1f323ca44ae7c3fa4bdce..cc756ef80d368926bf1e7edb2803113020016212 100644
--- a/lib/public/ipreview.php
+++ b/lib/public/ipreview.php
@@ -57,4 +57,11 @@ interface IPreview
 	 */
 	function isMimeSupported($mimeType = '*');
 
+	/**
+	 * Check if a preview can be generated for a file
+	 *
+	 * @param \OCP\Files\FileInfo $file
+	 * @return bool
+	 */
+	function isAvailable($file);
 }