diff --git a/settings/js/users/filter.js b/settings/js/users/filter.js
index 72f2cfc6d24d02ce1f97ab3c5b2e12a99c5380d8..339d6ad5ec7ffe0ac3a506897ebd61a190768488 100644
--- a/settings/js/users/filter.js
+++ b/settings/js/users/filter.js
@@ -7,16 +7,13 @@
 /**
  * @brief this object takes care of the filter functionality on the user
  * management page
- * @param jQuery input element that works as the user text input field
- * @param object the UserList object
+ * @param {UserList} userList the UserList object
+ * @param {GroupList} groupList the GroupList object
  */
-function UserManagementFilter(filterInput, userList, groupList) {
-	this.filterInput = filterInput;
+function UserManagementFilter (userList, groupList) {
 	this.userList = userList;
 	this.groupList = groupList;
-	this.filterGroups = false;
-	this.thread = undefined;
-	this.oldval = this.filterInput.val();
+	this.oldFilter = '';
 
 	this.init();
 }
@@ -24,39 +21,23 @@ function UserManagementFilter(filterInput, userList, groupList) {
 /**
  * @brief sets up when the filter action shall be triggered
  */
-UserManagementFilter.prototype.init = function() {
-	var umf = this;
-	this.filterInput.keyup(function(e) {
-		//we want to react on any printable letter, plus on modifying stuff like
-		//Backspace and Delete. extended https://stackoverflow.com/a/12467610
-		var valid =
-			e.keyCode ===  0 || e.keyCode ===  8  || // like ö or ж; backspace
-			e.keyCode ===  9 || e.keyCode === 46  || // tab; delete
-			e.keyCode === 32                      || // space
-			(e.keyCode >  47 && e.keyCode <   58) || // number keys
-			(e.keyCode >  64 && e.keyCode <   91) || // letter keys
-			(e.keyCode >  95 && e.keyCode <  112) || // numpad keys
-			(e.keyCode > 185 && e.keyCode <  193) || // ;=,-./` (in order)
-			(e.keyCode > 218 && e.keyCode <  223);   // [\]' (in order)
-
-		//besides the keys, the value must have been changed compared to last
-		//time
-		if(valid && umf.oldVal !== umf.getPattern()) {
-			umf.run();
-		}
-
-		umf.oldVal = umf.getPattern();
-	});
+UserManagementFilter.prototype.init = function () {
+	OC.Plugins.register('OCA.Search', this);
 };
 
 /**
  * @brief the filter action needs to be done, here the accurate steps are being
  * taken care of
  */
-UserManagementFilter.prototype.run = _.debounce(function() {
+UserManagementFilter.prototype.run = _.debounce(function (filter) {
+		if (filter === this.oldFilter) {
+			return;
+		}
+		this.oldFilter = filter;
+		this.userList.filter = filter;
 		this.userList.empty();
 		this.userList.update(GroupList.getCurrentGID());
-		if(this.filterGroups) {
+		if (this.groupList.filterGroups) {
 			// user counts are being updated nevertheless
 			this.groupList.empty();
 		}
@@ -69,12 +50,12 @@ UserManagementFilter.prototype.run = _.debounce(function() {
  * @brief returns the filter String
  * @returns string
  */
-UserManagementFilter.prototype.getPattern = function() {
+UserManagementFilter.prototype.getPattern = function () {
 	var input = this.filterInput.val(),
 		html = $('html'),
 		isIE8or9 = html.hasClass('lte9');
 	// FIXME - TODO - once support for IE8 and IE9 is dropped
-	if(isIE8or9 && input == this.filterInput.attr('placeholder')) {
+	if (isIE8or9 && input == this.filterInput.attr('placeholder')) {
 		input = '';
 	}
 	return input;
@@ -84,10 +65,14 @@ UserManagementFilter.prototype.getPattern = function() {
  * @brief adds reset functionality to an HTML element
  * @param jQuery the jQuery representation of that element
  */
-UserManagementFilter.prototype.addResetButton = function(button) {
+UserManagementFilter.prototype.addResetButton = function (button) {
 	var umf = this;
-	button.click(function(){
+	button.click(function () {
 		umf.filterInput.val('');
 		umf.run();
 	});
 };
+
+UserManagementFilter.prototype.attach = function (search) {
+	search.setFilter('settings', this.run.bind(this));
+};
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index d205e91550853e5276bb9fcc48d70a501cdd788e..322db6c1b45e88ad2f9d9fd0ddda2ea278d9d79d 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -12,6 +12,8 @@ var GroupList;
 GroupList = {
 	activeGID: '',
 	everyoneGID: '_everyone',
+	filter: '',
+	filterGroups: false,
 
 	addGroup: function (gid, usercount) {
 		var $li = $userGroupList.find('.isgroup:last-child').clone();
@@ -145,8 +147,8 @@ GroupList = {
 		$.get(
 			OC.generateUrl('/settings/users/groups'),
 			{
-				pattern: filter.getPattern(),
-				filterGroups: filter.filterGroups ? 1 : 0,
+				pattern: this.filter,
+				filterGroups: this.filterGroups ? 1 : 0,
 				sortGroups: $sortGroupBy
 			},
 			function (result) {
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 3b25bcd5b5f7e7c1391b99123687a8247470731b..6f29d6fe25b9a83b78c2ab355683586221b2e4c6 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -8,13 +8,13 @@
 
 var $userList;
 var $userListBody;
-var filter;
 
 var UserList = {
 	availableGroups: [],
 	offset: 0,
 	usersToLoad: 10, //So many users will be loaded when user scrolls down
 	currentGid: '',
+	filter: '',
 
 	/**
 	 * Initializes the user list
@@ -229,7 +229,7 @@ var UserList = {
 		return aa.length - bb.length;
 	},
 	preSortSearchString: function(a, b) {
-		var pattern = filter.getPattern();
+		var pattern = this.filter;
 		if(typeof pattern === 'undefined') {
 			return undefined;
 		}
@@ -398,7 +398,7 @@ var UserList = {
 			gid = '';
 		}
 		UserList.currentGid = gid;
-		var pattern = filter.getPattern();
+		var pattern = this.filter;
 		$.get(
 			OC.generateUrl('/settings/users/users'),
 			{ offset: UserList.offset, limit: limit, gid: gid, pattern: pattern },
@@ -612,7 +612,7 @@ $(document).ready(function () {
 	UserList.initDeleteHandling();
 
 	// Implements User Search
-	filter = new UserManagementFilter($('#usersearchform input'), UserList, GroupList);
+	OCA.Search.users= new UserManagementFilter(UserList, GroupList);
 
 	UserList.doSort();
 	UserList.availableGroups = $userList.data('groups');
diff --git a/settings/templates/users/part.createuser.php b/settings/templates/users/part.createuser.php
index 9d9886f694ca28a77ebd334fdfaaa653a9b5f831..0fc5a2bdeaaea11cd78788c0bd272a3bff65c185 100644
--- a/settings/templates/users/part.createuser.php
+++ b/settings/templates/users/part.createuser.php
@@ -31,7 +31,4 @@
 		   alt="<?php p($l->t('Enter the recovery password in order to recover the users files during password change'))?>"/>
 	</div>
 	<?php endif; ?>
-	<form autocomplete="off" id="usersearchform">
-		<input type="text" class="input userFilter" placeholder="<?php p($l->t('Search Users')); ?>" />
-	</form>
 </div>