diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index ffdcbf05109aa70f57ed02c75cb006a7576f061a..bdaea64bb90bf326b6c0545a8f216228e7380e20 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -8,6 +8,7 @@ OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'files_sharing/lib/permiss
 OC::$CLASSPATH['OC\Files\Cache\Shared_Updater'] = 'files_sharing/lib/updater.php';
 OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'files_sharing/lib/watcher.php';
 OC::$CLASSPATH['OCA\Files\Share\Api'] = 'files_sharing/lib/api.php';
+OC::$CLASSPATH['OCA\Files\Share\Maintainer'] = 'files_sharing/lib/maintainer.php';
 OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
 OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
 OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
@@ -17,3 +18,4 @@ OCP\Util::addScript('files_sharing', 'share');
 \OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
 \OC_Hook::connect('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'shareHook');
 \OC_Hook::connect('OCP\Share', 'pre_unshare', '\OC\Files\Cache\Shared_Updater', 'shareHook');
+\OC_Hook::connect('OC_Appconfig', 'post_set_value', '\OCA\Files\Share\Maintainer', 'configChangeHook');
diff --git a/apps/files_sharing/lib/maintainer.php b/apps/files_sharing/lib/maintainer.php
new file mode 100644
index 0000000000000000000000000000000000000000..bbb3268410e641a9309edf7e0f828b2ceb530976
--- /dev/null
+++ b/apps/files_sharing/lib/maintainer.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Morris Jobke
+ * @copyright 2013 Morris Jobke morris.jobke@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Files\Share;
+
+/**
+ * Maintains stuff around the sharing functionality
+ *
+ * for example: on disable of "allow links" it removes all link shares
+ */
+
+class Maintainer {
+
+	/**
+	 * Keeps track of the "allow links" config setting
+	 * and removes all link shares if the config option is set to "no"
+	 *
+	 * @param array with app, key, value as named values
+	 */
+	static public function configChangeHook($params) {
+		if($params['app'] === 'core' && $params['key'] === 'shareapi_allow_links' && $params['value'] === 'no') {
+			\OCP\Share::removeAllLinkShares();
+		}
+	}
+
+}
diff --git a/core/js/share.js b/core/js/share.js
index 270eab356e1fceadf607934842147e0d98d12e45..25126d3c23080cca6e1cf0e270d29eae29d81ad5 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -203,7 +203,19 @@ OC.Share={
 			html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Share with')+'" />';
 			html += '<ul id="shareWithList">';
 			html += '</ul>';
-			if (link) {
+			var linksAllowed = false;
+			$.ajax({
+				type: 'GET',
+				url: OC.filePath('core', 'ajax', 'appconfig.php'),
+				data: { action:'getValue', app:'core', key:'shareapi_allow_links', defaultValue:'yes' },
+				async: false,
+				success: function(result) {
+					if (result && result.status === 'success' && result.data === 'yes') {
+						linksAllowed = true;
+					}
+				}
+			});
+			if (link && linksAllowed) {
 				html += '<div id="link">';
 				html += '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">'+t('core', 'Share with link')+'</label>';
 				html += '<br />';
diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php
index e615d838173e9a182d2397be10a9d5cad98577f9..4f170e054e9bd0148586d3f9eb6a4eb60edb5149 100644
--- a/lib/private/appconfig.php
+++ b/lib/private/appconfig.php
@@ -134,6 +134,12 @@ class OC_Appconfig{
 				.' WHERE `appid` = ? AND `configkey` = ?' );
 			$query->execute( array( $value, $app, $key ));
 		}
+		// TODO where should this be documented?
+		\OC_Hook::emit('OC_Appconfig', 'post_set_value', array(
+			'app' => $app,
+			'key' => $key,
+			'value' => $value
+		));
 	}
 
 	/**
diff --git a/lib/public/share.php b/lib/public/share.php
index 1b6f5d05f10979d16a404151f00a0d8a811cefd4..59150e1964fbba857625bbac7f4594508879961b 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -960,6 +960,10 @@ class Share {
 				$queryArgs = array($itemType);
 			}
 		}
+		if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
+			$where .= ' AND `share_type` != ?';
+			$queryArgs[] = self::SHARE_TYPE_LINK;
+		}
 		if (isset($shareType)) {
 			// Include all user and group items
 			if ($shareType == self::$shareTypeUserAndGroups && isset($shareWith)) {
@@ -1717,6 +1721,18 @@ class Share {
 		}
 	}
 
+	/**
+	 * Delete all shares with type SHARE_TYPE_LINK
+	 */
+	public static function removeAllLinkShares() {
+		// Delete any link shares
+		$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `share_type` = ?');
+		$result = $query->execute(array(self::SHARE_TYPE_LINK));
+		while ($item = $result->fetchRow()) {
+			self::delete($item['id']);
+		}
+	}
+
 	/**
 	* Hook Listeners
 	*/