diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index 81f91b60d30e4065ee84aa3f9ce47693af250c27..d44c652dd980809be1d476192d3ad18c07444b59 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -44,3 +44,12 @@ OC_FileProxy::register(new OCA\Files\Share\Proxy());
 		"name" => $l->t('Shared with others')
 	)
 );
+\OCA\Files\App::getNavigationManager()->add(
+	array(
+		"id" => 'sharinglinks',
+		"appname" => 'files_sharing',
+		"script" => 'list.php',
+		"order" => 20,
+		"name" => $l->t('Shared by link')
+	)
+);
diff --git a/apps/files_sharing/js/app.js b/apps/files_sharing/js/app.js
index 800873cd63827a8f4595f202f9463aa5e0a90630..1fc13d00382bb45af2b0d69255485c114bf3adaa 100644
--- a/apps/files_sharing/js/app.js
+++ b/apps/files_sharing/js/app.js
@@ -55,6 +55,25 @@ OCA.Sharing.App = {
 		return this._outFileList;
 	},
 
+	initSharingLinks: function($el) {
+		if (this._linkFileList) {
+			return this._linkFileList;
+		}
+		this._linkFileList = new OCA.Sharing.FileList(
+			$el,
+			{
+				scrollContainer: $('#app-content'),
+				linksOnly: true,
+				fileActions: this._createFileActions()
+			}
+		);
+
+		this._extendFileList(this._linkFileList);
+		this._linkFileList.appName = t('files_sharing', 'Shared by link');
+		this._linkFileList.$el.find('#emptycontent').text(t('files_sharing', 'You haven\'t shared any files by link yet.'));
+		return this._linkFileList;
+	},
+
 	removeSharingIn: function() {
 		if (this._inFileList) {
 			this._inFileList.$fileList.empty();
@@ -67,6 +86,12 @@ OCA.Sharing.App = {
 		}
 	},
 
+	removeSharingLinks: function() {
+		if (this._linkFileList) {
+			this._linkFileList.$fileList.empty();
+		}
+	},
+
 	_createFileActions: function() {
 		// inherit file actions from the files app
 		var fileActions = new OCA.Files.FileActions();
@@ -104,5 +129,11 @@ $(document).ready(function() {
 	$('#app-content-sharingout').on('hide', function() {
 		OCA.Sharing.App.removeSharingOut();
 	});
+	$('#app-content-sharinglinks').on('show', function(e) {
+		OCA.Sharing.App.initSharingLinks($(e.target));
+	});
+	$('#app-content-sharinglinks').on('hide', function() {
+		OCA.Sharing.App.removeSharingLinks();
+	});
 });
 
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index 97fabf87131d119d3445c6ddc781bea90e9c8bfd..304f77a8d772fe5de79c48a717548c6ec508173a 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -26,6 +26,7 @@
 		 * the files that the user shared with others (false).
 		 */
 		_sharedWithUser: false,
+		_linksOnly: false,
 
 		initialize: function($el, options) {
 			OCA.Files.FileList.prototype.initialize.apply(this, arguments);
@@ -33,9 +34,13 @@
 				return;
 			}
 
+			// TODO: consolidate both options
 			if (options && options.sharedWithUser) {
 				this._sharedWithUser = true;
 			}
+			if (options && options.linksOnly) {
+				this._linksOnly = true;
+			}
 		},
 
 		_renderRow: function() {
@@ -137,12 +142,20 @@
 		 * @return array of file info maps
 		 */
 		_makeFilesFromShares: function(data) {
+			/* jshint camelcase: false */
 			var self = this;
+			var files = data;
+
+			if (this._linksOnly) {
+				files = _.filter(data, function(share) {
+					return share.share_type === OC.Share.SHARE_TYPE_LINK;
+				});
+			}
+
 			// OCS API uses non-camelcased names
-			var files = _.chain(data)
+			files = _.chain(files)
 				// convert share data to file data
 				.map(function(share) {
-					/* jshint camelcase: false */
 					var file = {
 						id: share.file_source,
 						mimetype: share.mimetype
diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js
index f53e79e277f73f2eb2bfe5e683adbd96464bd224..0f6d0a0ba49a2b6d23c131ca145484c6f24e5c4e 100644
--- a/apps/files_sharing/tests/js/sharedfilelistSpec.js
+++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js
@@ -417,4 +417,95 @@ describe('OCA.Sharing.FileList tests', function() {
 			expect($tr.find('.nametext').text().trim()).toEqual('local name.txt');
 		});
 	});
+	describe('loading file list for link shares', function() {
+		var ocsResponse;
+
+		beforeEach(function() {
+			fileList = new OCA.Sharing.FileList(
+				$('#app-content-container'), {
+					linksOnly: true
+				}
+			);
+
+			fileList.reload();
+
+			ocsResponse = {
+				ocs: {
+					meta: {
+						status: 'ok',
+						statuscode: 100,
+						message: null
+					},
+					data: [{
+						id: 7,
+						item_type: 'file',
+						item_source: 49,
+						file_source: 49,
+						path: '/local path/local name.txt',
+						permissions: 1,
+						stime: 11111,
+						share_type: OC.Share.SHARE_TYPE_LINK,
+						share_with: null,
+						token: 'abc',
+						mimetype: 'text/plain',
+						uid_owner: 'user1',
+						displayname_owner: 'User One'
+					}]
+				}
+			};
+		});
+		it('render only link shares', function() {
+			/* jshint camelcase: false */
+			var request;
+			ocsResponse.ocs.data.push({
+				// non-link share
+				id: 8,
+				item_type: 'file',
+				item_source: 49,
+				file_source: 49,
+				path: '/local path/local name.txt',
+				permissions: 27,
+				stime: 11111,
+				share_type: OC.Share.SHARE_TYPE_USER,
+				share_with: 'user2',
+				share_with_displayname: 'User Two',
+				mimetype: 'text/plain',
+				uid_owner: 'user1',
+				displayname_owner: 'User One'
+			});
+			expect(fakeServer.requests.length).toEqual(1);
+			request = fakeServer.requests[0];
+			expect(request.url).toEqual(
+				OC.linkToOCS('apps/files_sharing/api/v1') +
+				'shares?format=json&shared_with_me=false'
+			);
+
+			fakeServer.requests[0].respond(
+				200,
+				{ 'Content-Type': 'application/json' },
+				JSON.stringify(ocsResponse)
+			);
+
+			// only renders the link share entry
+			var $rows = fileList.$el.find('tbody tr');
+			var $tr = $rows.eq(0);
+			expect($rows.length).toEqual(1);
+			expect($tr.attr('data-id')).toEqual('49');
+			expect($tr.attr('data-type')).toEqual('file');
+			expect($tr.attr('data-file')).toEqual('local name.txt');
+			expect($tr.attr('data-path')).toEqual('/local path');
+			expect($tr.attr('data-size')).not.toBeDefined();
+			expect($tr.attr('data-permissions')).toEqual('31'); // read and delete
+			expect($tr.attr('data-mime')).toEqual('text/plain');
+			expect($tr.attr('data-mtime')).toEqual('11111000');
+			expect($tr.attr('data-share-owner')).not.toBeDefined();
+			expect($tr.attr('data-share-id')).toEqual('7');
+			expect($tr.find('a.name').attr('href')).toEqual(
+					OC.webroot +
+					'/index.php/apps/files/ajax/download.php' +
+					'?dir=%2Flocal%20path&files=local%20name.txt');
+
+			expect($tr.find('.nametext').text().trim()).toEqual('local name.txt');
+		});
+	});
 });