diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php
new file mode 100644
index 0000000000000000000000000000000000000000..a73b69962435b0cbfd63fc79eecfeddc195d1569
--- /dev/null
+++ b/settings/ajax/userlist.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once '../../lib/base.php';
+
+OC_JSON::callCheck();
+OC_JSON::checkSubAdminUser();
+if (isset($_GET['offset'])) {
+	$offset = $_GET['offset'];
+} else {
+	$offset = 0;
+}
+$users = array();
+if (OC_Group::inGroup(OC_User::getUser(), 'admin')) {
+	$batch = OC_User::getUsers('', 10, $offset);
+	foreach ($batch as $user) {
+		$users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'subadmin' => implode(', ',OC_SubAdmin::getSubAdminsGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
+	}
+} else {
+	$groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
+	$batch = OC_Group::usersInGroups($groups);
+	foreach ($batch as $user) {
+		$users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
+	}
+}
+OC_JSON::success(array('data' => $users));
\ No newline at end of file
diff --git a/settings/js/users.js b/settings/js/users.js
index 91d24adafc10f4b0ee4a6acad272c6c67d22ed20..29f70f24dff87ec0cc3e60fff03b0b4b3212c427 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -22,10 +22,6 @@ UserList={
 		// Set undo flag
 		UserList.deleteCanceled = false;
 		
-		// Hide user in table to reflect deletion
-		$(this).parent().parent().hide();
-		$('tr').filterAttr( 'data-uid', UserList.deleteUid ).hide();
-		
 		// Provide user with option to undo
 		$('#notification').html(t('users', 'deleted')+' '+uid+'<span class="undo">'+t('users', 'undo')+'</span>');
 		$('#notification').data('deleteuser',true);
@@ -66,26 +62,92 @@ UserList={
 				}
 			});
  		}
-	}
-}
+	},
 
-$(document).ready(function(){
-	function setQuota(uid,quota,ready){
-		$.post(
-			OC.filePath('settings','ajax','setquota.php'),
-			{username:uid,quota:quota},
-			function(result){
-				if(ready){
-					ready(result.data.quota);
+	add:function(username, groups, subadmin, quota, sort) {
+		var tr = $('tbody tr').first().clone();
+		tr.data('uid', username);
+		tr.find('td.name').text(username);
+		var groupsSelect = $('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="Groups">');
+		groupsSelect.data('username', username);
+		groupsSelect.data('userGroups', groups);
+		tr.find('td.groups').empty();
+		if (tr.find('td.subadmins').length > 0) {
+			var subadminSelect = $('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('files', 'SubAdmin') + '">');
+			subadminSelect.data('username', username);
+			subadminSelect.data('userGroups', groups);
+			subadminSelect.data('subadmin', subadmin);
+			tr.find('td.subadmins').empty();
+		}
+		var allGroups = String($('#content table').data('groups')).split(', ');
+		$.each(allGroups, function(i, group) {
+			groupsSelect.append($('<option value="'+group+'">'+group+'</option>'));
+			if (typeof subadminSelect !== 'undefined' && group != 'admin') {
+				subadminSelect.append($('<option value="'+group+'">'+group+'</option>'));
+			}
+		});
+		tr.find('td.groups').append(groupsSelect);
+		UserList.applyMultiplySelect(groupsSelect);
+		tr.find('td.subadmins').append(subadminSelect);
+		UserList.applyMultiplySelect(subadminSelect);
+		if (tr.find('td.remove img').length == 0 && OC.currentUser != username) {
+			tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
+		} else if (OC.currentUser == username) {
+			tr.find('td.remove a').remove();
+		}
+		var quotaSelect = tr.find('select.quota-user');
+		if (quota == 'default') {
+			quotaSelect.find('option').attr('selected', null);
+			quotaSelect.find('option').first().attr('selected', 'selected');
+			quotaSelect.data('previous', 'default');
+		} else {
+			if (quotaSelect.find('option[value="'+quota+'"]').length > 0) {
+				quotaSelect.find('option[value="'+quota+'"]').attr('selected', 'selected');
+			} else {
+				quotaSelect.append('<option value="'+quota+'" selected="selected">'+quota+'</option>');
+			}
+		}
+		var added = false;
+		if (sort) {
+			username = username.toLowerCase();
+			$('tbody tr').each(function() {
+				if (username < $(this).data('uid').toLowerCase()) {
+					$(tr).insertBefore($(this));
+					added = true;
+					return false;
 				}
+			});
+		} 
+		if (!added) {
+			$(tr).appendTo('tbody');
+		}
+		return tr;
+	},
+
+	update:function() {
+		if (typeof UserList.offset === 'undefined') {
+			UserList.offset = $('tbody tr').length;
+		}
+		$.get(OC.filePath('settings', 'ajax', 'userlist.php'), { offset: UserList.offset }, function(result) {
+			if (result.status === 'success') {
+				$.each(result.data, function(index, user) {
+					var tr = UserList.add(user.name, user.groups, user.subadmin, user.quota, false);
+					UserList.offset++;
+					if (index == 9) {
+						$(tr).bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
+							$(this).unbind(event);
+							UserList.update();
+						});
+					}
+				});
 			}
-		);
-	}
-	
-	function applyMultiplySelect(element){
+		});
+	},
+
+	applyMultiplySelect:function(element) {
 		var checked=[];
 		var user=element.data('username');
-		if($(element).attr('class') == 'groupsselect'){		
+		if($(element).attr('class') == 'groupsselect'){
 			if(element.data('userGroups')){
 				checked=String(element.data('userGroups')).split(', ');
 			}
@@ -131,7 +193,7 @@ $(document).ready(function(){
 				minWidth: 100,
 			});
 		}
-		if($(element).attr('class') == 'subadminsselect'){	
+		if($(element).attr('class') == 'subadminsselect'){
 			if(element.data('subadmin')){
 				checked=String(element.data('subadmin')).split(', ');
 			}
@@ -166,17 +228,37 @@ $(document).ready(function(){
 			});
 		}
 	}
+}
+
+$(document).ready(function(){
+
+	$('tbody tr:last').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
+		UserList.update();
+	});
+
+	function setQuota(uid,quota,ready){
+		$.post(
+			OC.filePath('settings','ajax','setquota.php'),
+			{username:uid,quota:quota},
+			function(result){
+				if(ready){
+					ready(result.data.quota);
+				}
+			}
+		);
+	}
+	
+	
 	$('select[multiple]').each(function(index,element){
-		applyMultiplySelect($(element));
+		UserList.applyMultiplySelect($(element));
 	});
 	
 	$('td.remove>a').live('click',function(event){
-		
-		var uid = $(this).parent().parent().data('uid');
-		
+		var row = $(this).parent().parent();
+		var uid = $(row).data('uid');
+		$(row).hide();
 		// Call function for handling delete/undo
-		UserList.do_delete( uid );
-		
+		UserList.do_delete(uid);
 	});
 	
 	$('td.password>img').live('click',function(event){
@@ -297,45 +379,8 @@ $(document).ready(function(){
 			function(result){
 				if(result.status!='success'){
 					OC.dialogs.alert(result.data.message, 'Error creating user');
-				}
-				else {
-					groups = result.data.groups;
-					var tr=$('#content table tbody tr').first().clone();
-					tr.attr('data-uid',username);
-					tr.find('td.name').text(username);
-					var select=$('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="Groups">');
-					var subadminselect=$('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('files', 'SubAdmin') + '">');
-					select.data('username',username);
-					select.data('userGroups',groups);
-					subadminselect.data('username',username);
-					subadminselect.data('userGroups',groups);
-					tr.find('td.groups').empty();
-					tr.find('td.subadmins').empty();
-					var allGroups=$('#content table').data('groups').split(', ');
-					for(var i=0;i<groups.length;i++){
-						if(allGroups.indexOf(groups[i])==-1){
-							allGroups.push(groups[i]);
-						}
-					}
-					$.each(allGroups,function(i,group){
-						select.append($('<option value="'+group+'">'+group+'</option>'));
-						if(group != 'admin'){
-							subadminselect.append($('<option value="'+group+'">'+group+'</option>'));
-						}
-					});
-					tr.find('td.groups').append(select);
-					tr.find('td.subadmins').append(subadminselect);
-					if(tr.find('td.remove img').length==0){
-						tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
-					}
-					applyMultiplySelect(select);
-					applyMultiplySelect(subadminselect);
-					
-					$('#content table tbody').last().append(tr);
-
-					tr.find('select.quota-user option').attr('selected',null);
-					tr.find('select.quota-user option').first().attr('selected','selected');
-					tr.find('select.quota-user').data('previous','default');
+				} else {
+					UserList.add(username, result.data.groups, null, 'default', true);
 				}
 			}
 		);
@@ -343,9 +388,12 @@ $(document).ready(function(){
 	// Handle undo notifications
 	$('#notification').hide();
 	$('#notification .undo').live('click', function() {
-		if($('#notification').data('deleteuser'))
-		{
-			$( 'tr' ).filterAttr( 'data-uid', UserList.deleteUid ).show();
+		if($('#notification').data('deleteuser')) {
+			$('tbody tr').each(function(index, row) {
+				if ($(row).data('uid') == UserList.deleteUid) {
+					$(row).show();
+				}
+			});
 			UserList.deleteCanceled=true;
 			UserList.deleteFiles=null;
 		}
diff --git a/settings/users.php b/settings/users.php
index e88c4d1d9cee45e20202fb3a7864fb74b90daad2..e5f01bbbfb2dfbedbd9adc4470967bdc491f79d2 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -11,6 +11,8 @@ OC_Util::checkSubAdminUser();
 // We have some javascript foo!
 OC_Util::addScript( 'settings', 'users' );
 OC_Util::addScript( 'core', 'multiselect' );
+// TODO Move script to core
+OC_Util::addScript('contacts', 'jquery.inview');
 OC_Util::addStyle( 'settings', 'settings' );
 OC_App::setActiveNavigationEntry( 'core_users' );