diff --git a/core/ajax/share.php b/core/ajax/share.php
index 05756fc1c8b6ef48a6e840c98fb965cdfefcd6ac..bc83c41642cdf6397d6755873be3b0d230cfe673 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -255,6 +255,14 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
 					$usergroups = OC_Group::getUserGroups(OC_User::getUser());
 					$groups = array_intersect($groups, $usergroups);
 				}
+
+				$sharedUsers = [];
+				$sharedGroups = [];
+				if (isset($_GET['itemShares'])) {
+					$sharedUsers = isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) ? $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER] : [];
+					$sharedGroups = isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) ? $_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP] : [];
+				}
+
 				$count = 0;
 				$users = array();
 				$limit = 0;
@@ -266,8 +274,13 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
 					} else {
 						$users = OC_User::getDisplayNames((string)$_GET['search'], $limit, $offset);
 					}
+
 					$offset += $limit;
 					foreach ($users as $uid => $displayName) {
+						if (in_array($uid, $sharedUsers)) {
+							continue;
+						}
+
 						if ((!isset($_GET['itemShares'])
 							|| !is_array((string)$_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])
 							|| !in_array($uid, (string)$_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]))
@@ -288,6 +301,10 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
 				$l = \OC::$server->getL10N('core');
 
 				foreach ($groups as $group) {
+					if (in_array($group, $sharedGroups)) {
+						continue;
+					}
+
 					if ($count < 15) {
 						if (!isset($_GET['itemShares'])
 							|| !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])