diff --git a/core/ajax/share.php b/core/ajax/share.php
index 4c5ef310b7fb288e922c2766347ada2bceba9e95..41c9e80fd7522e2eab64364a1b0c1f32ef5c9547 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -49,21 +49,34 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['item']
 			}
 			break;
 	}
-} else if (isset($_GET['fetch']) && isset($_GET['itemType'])) {
+} else if (isset($_GET['fetch'])) {
 	switch ($_GET['fetch']) {
 		case 'getItemsSharedStatuses':
-			$return = OCP\Share::getItemsShared($_GET['itemType'], OCP\Share::FORMAT_STATUSES);
-			($return) ? OC_JSON::success(array('data' => $return)) : OC_JSON::error();
+			if (isset($_GET['itemType'])) {
+				$return = OCP\Share::getItemsShared($_GET['itemType'], OCP\Share::FORMAT_STATUSES);
+				($return) ? OC_JSON::success(array('data' => $return)) : OC_JSON::error();
+			}
 			break;
 		case 'getItem':
 			// TODO Check if the item was shared to the current user
-			if (isset($_GET['item'])) {
+			if (isset($_GET['itemType']) && isset($_GET['item'])) {
 				$return = OCP\Share::getItemShared($_GET['itemType'], $_GET['item']);
 				($return) ? OC_JSON::success(array('data' => $return)) : OC_JSON::error();
 			}
 			break;
 		case 'getShareWith':
-			// TODO Autocomplete for all users, groups, etc.
+			if (isset($_GET['search'])) {
+				$shareWith = array();
+				$users = OC_User::getUsers();
+				foreach ($users as $user) {
+					$shareWith[] = array('label' => $user, 'value' => array('shareType' => OCP\Share::SHARE_TYPE_USER, 'shareWith' => $user));
+				}
+				$groups = OC_Group::getGroups();
+				foreach ($groups as $group) {
+					$shareWith[] = array('label' => $group.' (group)', 'value' => array('shareType' => OCP\Share::SHARE_TYPE_GROUP, 'shareWith' => $group));
+				}
+				OC_JSON::success(array('data' => $shareWith));
+			}
 			break;
 	}
 }
diff --git a/core/js/share.js b/core/js/share.js
index 8ab92c2a85de9ac0e17ddb356d2116cc028e2ea6..64fcb77c0b0472c708c2632f7e6d4fd930d08da8 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -94,6 +94,32 @@ OC.Share={
 			});
 		}
 		$('#dropdown').show('blind');
+		$('#shareWith').autocomplete({minLength: 2, source: function(search, response) {
+// 			if (cache[search.term]) {
+// 				response(cache[search.term]);
+// 			} else {
+				$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term }, function(result) {
+					if (result.status == 'success') {
+						response(result.data);
+					} else {
+						// Suggest sharing via email
+						response();
+					}
+				});
+// 			}
+		}, select: function(event, selected) {
+			var shareType = selected.item.value.shareType;
+			var shareWith = selected.item.value.shareWith;
+			$(this).val(shareWith);
+			// Default permissions are Read and Share
+			var permissions = OC.Share.PERMISSION_READ | OC.Share.PERMISSION_SHARE;
+			OC.Share.share($('#dropdown').data('item-type'), $('#dropdown').data('item'), shareType, shareWith, permissions, function() {
+				OC.Share.addShareWith(shareType, shareWith, permissions, possiblePermissions);
+				$('#shareWith').val('');
+			});
+			return false;
+		}
+		});
 	},
 	hideDropDown:function(callback) {
 		$('#dropdown').hide('blind', function() {
@@ -273,17 +299,6 @@ $(document).ready(function() {
 			$('a.unshare', this).hide();
 		}
 	});
-	
-	$('#shareWith').live('change', function() {
-		var shareType = $(li).data('share-type');
-		var shareWith = $(this).val();
-		// Default permissions are Read and Share
-		var permissions = OC.Share.PERMISSION_READ | OC.Share.PERMISSION_SHARE;
-		OC.Share.share($('#dropdown').data('item-type'), $('#dropdown').data('item'), shareType, shareWith, permissions, function() {
-			OC.Share.addShareWith(shareType, shareWith, permissions);
-			$('#shareWith').val('');
-		});
-	});
 
 	$('.showCruds').live('click', function() {
 		$(this).parent().find('.cruds').toggle();