diff --git a/config/config.sample.php b/config/config.sample.php
index 879ba9e9d01668283a90432e1ded8984941529b6..3a2f3308e130b26ed91284cd2d4595b68bbcdf69 100755
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -284,6 +284,29 @@ $CONFIG = array(
 /* cl parameters for libreoffice / openoffice */
 'preview_office_cl_parameters' => '',
 
+/**
+ * Only register providers that have been explicitly enabled
+ *
+ * The following providers are enabled by default:
+ *  - OC\Preview\Image
+ *  - OC\Preview\MP3
+ *  - OC\Preview\TXT
+ *  - OC\Preview\MarkDown
+ *
+ * The following providers are disabled by default due to performance or privacy concerns:
+ *  - OC\Preview\Office
+ *  - OC\Preview\SVG
+ *  - OC\Preview\Movies
+ *  - OC\Preview\PDF
+ *  - OC\Preview\Tiff
+ */
+'enabledPreviewProviders' => array(
+	'OC\Preview\Image',
+	'OC\Preview\MP3',
+	'OC\Preview\TXT',
+	'OC\Preview\MarkDown'
+),
+
 /* whether avatars should be enabled */
 'enable_avatars' => true,
 
diff --git a/lib/private/preview.php b/lib/private/preview.php
index b04cc2b85644e2a4b9cc96e2d94b054713a86edc..9d44d00e6867effd0f5a0829e910af2f73fe71a6 100755
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -13,7 +13,6 @@
  */
 namespace OC;
 
-use OC\Files\Filesystem;
 use OC\Preview\Provider;
 use OCP\Files\NotFoundException;
 
@@ -23,7 +22,6 @@ require_once 'preview/mp3.php';
 require_once 'preview/pdf.php';
 require_once 'preview/svg.php';
 require_once 'preview/txt.php';
-require_once 'preview/unknown.php';
 require_once 'preview/office.php';
 require_once 'preview/tiff.php';
 
@@ -62,6 +60,7 @@ class Preview {
 	//preview providers
 	static private $providers = array();
 	static private $registeredProviders = array();
+	static private $enabledProviders = array();
 
 	/**
 	 * @var \OCP\Files\FileInfo
@@ -669,12 +668,39 @@ class Preview {
 	}
 
 	/**
-	 * register a new preview provider to be used
+	 * Register a new preview provider to be used
+	 * @param $class
 	 * @param array $options
-	 * @return void
 	 */
 	public static function registerProvider($class, $options = array()) {
-		self::$registeredProviders[] = array('class' => $class, 'options' => $options);
+		/**
+		 * Only register providers that have been explicitly enabled
+		 *
+		 * The following providers are enabled by default:
+		 *  - OC\Preview\Image
+		 *  - OC\Preview\MP3
+		 *  - OC\Preview\TXT
+		 *  - OC\Preview\MarkDown
+		 *
+		 * The following providers are disabled by default due to performance or privacy concerns:
+		 *  - OC\Preview\Office
+		 *  - OC\Preview\SVG
+		 *  - OC\Preview\Movies
+		 *  - OC\Preview\PDF
+		 *  - OC\Preview\Tiff
+		 */
+		if(empty(self::$enabledProviders)) {
+			self::$enabledProviders = \OC::$server->getConfig()->getSystemValue('enabledPreviewProviders', array(
+				'OC\Preview\Image',
+				'OC\Preview\MP3',
+				'OC\Preview\TXT',
+				'OC\Preview\MarkDown',
+			));
+		}
+
+		if(in_array($class, self::$enabledProviders)) {
+			self::$registeredProviders[] = array('class' => $class, 'options' => $options);
+		}
 	}
 
 	/**
@@ -682,9 +708,8 @@ class Preview {
 	 * @return void
 	 */
 	private static function initProviders() {
-		if (!\OC_Config::getValue('enable_previews', true)) {
-			$provider = new Preview\Unknown(array());
-			self::$providers = array($provider->getMimeType() => $provider);
+		if (!\OC::$server->getConfig()->getSystemValue('enable_previews', true)) {
+			self::$providers = array();
 			return;
 		}
 
@@ -698,12 +723,12 @@ class Preview {
 
 			/** @var $object Provider */
 			$object = new $class($options);
-
 			self::$providers[$object->getMimeType()] = $object;
 		}
 
 		$keys = array_map('strlen', array_keys(self::$providers));
 		array_multisort($keys, SORT_DESC, self::$providers);
+
 	}
 
 	public static function post_write($args) {
@@ -758,9 +783,7 @@ class Preview {
 			self::initProviders();
 		}
 
-		//remove last element because it has the mimetype *
-		$providers = array_slice(self::$providers, 0, -1);
-		foreach ($providers as $supportedMimeType => $provider) {
+		foreach (self::$providers as $supportedMimeType => $provider) {
 			/**
 			 * @var \OC\Preview\Provider $provider
 			 */
diff --git a/lib/private/preview/svg.php b/lib/private/preview/svg.php
index 82ef3cdebf649c5b35cf95c741e1855f42949c00..0b5dbc9716fc87ee2293ffcb8520ce1cf22890b5 100644
--- a/lib/private/preview/svg.php
+++ b/lib/private/preview/svg.php
@@ -31,6 +31,11 @@ if (extension_loaded('imagick')) {
 						$content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
 					}
 
+					// Do not parse SVG files with references
+					if(stripos($content, 'xlink:href') !== false) {
+						return false;
+					}
+
 					$svg->readImageBlob($content);
 					$svg->setImageFormat('png32');
 				} catch (\Exception $e) {
diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php
deleted file mode 100644
index 2d3b5c5655e6bafdc13b94a0997fc7d13c4b119d..0000000000000000000000000000000000000000
--- a/lib/private/preview/unknown.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
- * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-namespace OC\Preview;
-
-class Unknown extends Provider {
-
-	public function getMimeType() {
-		return '/.*/';
-	}
-
-	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
-		$mimetype = $fileview->getMimeType($path);
-
-		$path = \OC_Helper::mimetypeIcon($mimetype);
-		$path = \OC::$SERVERROOT . substr($path, strlen(\OC::$WEBROOT));
-
-		$svgPath = substr_replace($path, 'svg', -3);
-
-		if (extension_loaded('imagick') && file_exists($svgPath) && count(@\Imagick::queryFormats("SVG")) === 1) {
-
-			// http://www.php.net/manual/de/imagick.setresolution.php#85284
-			$svg = new \Imagick();
-			$svg->readImage($svgPath);
-			$res = $svg->getImageResolution();
-			$x_ratio = $res['x'] / $svg->getImageWidth();
-			$y_ratio = $res['y'] / $svg->getImageHeight();
-			$svg->removeImage();
-			$svg->setResolution($maxX * $x_ratio, $maxY * $y_ratio);
-			$svg->setBackgroundColor(new \ImagickPixel('transparent'));
-			$svg->readImage($svgPath);
-			$svg->setImageFormat('png32');
-
-			$image = new \OC_Image();
-			$image->loadFromData($svg);
-		} else {
-			$image = new \OC_Image($path);
-		}
-
-		return $image;
-	}
-}
-
-\OC\Preview::registerProvider('OC\Preview\Unknown');
diff --git a/tests/data/testcal.ics b/tests/data/testcal.ics
deleted file mode 100644
index e05f01ba1c2755e9c7f02a6959e107fc2d97c61a..0000000000000000000000000000000000000000
--- a/tests/data/testcal.ics
+++ /dev/null
@@ -1,13 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:-//some random cal software//EN
-VERSION:2.0
-BEGIN:VEVENT
-CREATED:20130102T120000Z
-LAST-MODIFIED:20130102T120000Z
-DTSTAMP:20130102T120000Z
-UID:f106ecdf-c716-43ef-9d94-4e6f19f2fcfb
-SUMMARY:a test cal file
-DTSTART;VALUE=DATE:20130101
-DTEND;VALUE=DATE:20130102
-END:VEVENT
-END:VCALENDAR
\ No newline at end of file
diff --git a/tests/data/testcontact.vcf b/tests/data/testcontact.vcf
deleted file mode 100644
index 2af963d6916eecf7d2ee39a2c3018f64b171c6e6..0000000000000000000000000000000000000000
--- a/tests/data/testcontact.vcf
+++ /dev/null
@@ -1,6 +0,0 @@
-BEGIN:VCARD
-VERSION:3.0
-PRODID:-//some random contact software//EN
-N:def;abc;;;
-FN:abc def
-END:VCARD
\ No newline at end of file
diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index 4ef61fb82570cdfa39ed66e7a05a127f15549787..2febe524cba92a5fdcc78839e6ab318949c67605 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -97,13 +97,9 @@ class Preview extends \PHPUnit_Framework_TestCase {
 
 	public function txtBlacklist() {
 		$txt = 'random text file';
-		$ics = file_get_contents(__DIR__ . '/../data/testcal.ics');
-		$vcf = file_get_contents(__DIR__ . '/../data/testcontact.vcf');
 
 		return array(
 			array('txt', $txt, false),
-			array('ics', $ics, true),
-			array('vcf', $vcf, true),
 		);
 	}