diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
index 34339154b5c54b102e2e21e40950de4ebd168f96..cdcf3bbdc372dee2674be32adf1bc5b5512d3518 100644
--- a/apps/files_sharing/lib/controllers/sharecontroller.php
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -230,26 +230,48 @@ class ShareController extends Controller {
 			}
 		}
 
+		$files_list = null;
+		if (!is_null($files)) { // download selected files
+			$files_list = json_decode($files);
+			// in case we get only a single file
+			if ($files_list === null) {
+				$files_list = array($files);
+			}
+		}
+
 		$originalSharePath = self::getPath($token);
 
+		// Create the activities
 		if (isset($originalSharePath) && Filesystem::isReadable($originalSharePath . $path)) {
 			$originalSharePath = Filesystem::normalizePath($originalSharePath . $path);
-			$type = \OC\Files\Filesystem::is_dir($originalSharePath) ? 'folder' : 'file';
-			$args = $type === 'folder' ? array('dir' => $originalSharePath) : array('dir' => dirname($originalSharePath), 'scrollto' => basename($originalSharePath));
-			$linkToFile = \OCP\Util::linkToAbsolute('files', 'index.php', $args);
-			$subject = $type === 'folder' ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
-			$this->activityManager->publishActivity(
-					'files_sharing', $subject, array($originalSharePath), '', array(), $originalSharePath,
-					$linkToFile, $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM);
-		}
+			$isDir = \OC\Files\Filesystem::is_dir($originalSharePath);
 
-		if (!is_null($files)) { // download selected files
-			$files_list = json_decode($files);
-			// in case we get only a single file
-			if ($files_list === NULL) {
-				$files_list = array($files);
+			$activities = [];
+			if (!$isDir) {
+				// Single file public share
+				$activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+			} else if (!empty($files_list)) {
+				// Only some files are downloaded
+				foreach ($files_list as $file) {
+					$filePath = Filesystem::normalizePath($originalSharePath . '/' . $file);
+					$isDir = \OC\Files\Filesystem::is_dir($filePath);
+					$activities[$filePath] = ($isDir) ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+				}
+			} else {
+				// The folder is downloaded
+				$activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
 			}
 
+			foreach ($activities as $filePath => $subject) {
+				$this->activityManager->publishActivity(
+					'files_sharing', $subject, array($filePath), '', array(),
+					$filePath, '', $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM
+				);
+			}
+		}
+
+		// download selected files
+		if (!is_null($files)) {
 			// FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
 			// after dispatching the request which results in a "Cannot modify header information" notice.
 			OC_Files::get($originalSharePath, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');