diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 0d51fc511437de05e4d5ee2de65ac49d953b410b..3a118891f4053bd0b63ec80c068d34a6c40da8f9 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -887,8 +887,10 @@ class Access extends LDAPUtility implements user\IUserTools {
 	private function count($filter, $base, $attr = null, $limit = null, $offset = null, $skipHandling = false) {
 		\OCP\Util::writeLog('user_ldap', 'Count filter:  '.print_r($filter, true), \OCP\Util::DEBUG);
 
+		$limitPerPage = (intval($limit) < intval($this->connection->ldapPagingSize)) ?
+			intval($limit) : intval($this->connection->ldapPagingSize);
 		if(is_null($limit) || $limit <= 0) {
-			$limit = intval($this->connection->ldapPagingSize);
+			$limitPerPage = intval($this->connection->ldapPagingSize);
 		}
 
 		$counter = 0;
@@ -898,19 +900,19 @@ class Access extends LDAPUtility implements user\IUserTools {
 		do {
 			$continue = false;
 			$search = $this->executeSearch($filter, $base, $attr,
-										   $limit, $offset);
+										   $limitPerPage, $offset);
 			if($search === false) {
 				return $counter > 0 ? $counter : false;
 			}
 			list($sr, $pagedSearchOK) = $search;
 
-			$count = $this->countEntriesInSearchResults($sr, $limit, $continue);
+			$count = $this->countEntriesInSearchResults($sr, $limitPerPage, $continue);
 			$counter += $count;
 
-			$this->processPagedSearchStatus($sr, $filter, $base, $count, $limit,
+			$this->processPagedSearchStatus($sr, $filter, $base, $count, $limitPerPage,
 										$offset, $pagedSearchOK, $skipHandling);
-			$offset += $limit;
-		} while($continue);
+			$offset += $limitPerPage;
+		} while($continue && (is_null($limit) || $limit <= 0 || $limit > $counter));
 
 		return $counter;
 	}
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 59911fe77d1683267a495db29a9678a2b5b8fe66..63b7e22ce8cafc6b09dea3a2df5e89004b470233 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -132,9 +132,10 @@ class Wizard extends LDAPUtility {
 	/**
 	 * counts users with a specified attribute
 	 * @param string $attr
+	 * @param bool $existsCheck
 	 * @return int|bool
 	 */
-	public function countUsersWithAttribute($attr) {
+	public function countUsersWithAttribute($attr, $existsCheck = false) {
 		if(!$this->checkRequirements(array('ldapHost',
 										   'ldapPort',
 										   'ldapBase',
@@ -148,7 +149,9 @@ class Wizard extends LDAPUtility {
 			$attr . '=*'
 		));
 
-		return $this->access->countUsers($filter);
+		$limit = ($existsCheck === false) ? null : 1;
+
+		return $this->access->countUsers($filter, array('dn'), $limit);
 	}
 
 	/**
@@ -169,7 +172,7 @@ class Wizard extends LDAPUtility {
 		if($attr !== 'displayName' && !empty($attr)) {
 			// most likely not the default value with upper case N,
 			// verify it still produces a result
-			$count = intval($this->countUsersWithAttribute($attr));
+			$count = intval($this->countUsersWithAttribute($attr, true));
 			if($count > 0) {
 				//no change, but we sent it back to make sure the user interface
 				//is still correct, even if the ajax call was cancelled inbetween
@@ -181,7 +184,7 @@ class Wizard extends LDAPUtility {
 		// first attribute that has at least one result wins
 		$displayNameAttrs = array('displayname', 'cn');
 		foreach ($displayNameAttrs as $attr) {
-			$count = intval($this->countUsersWithAttribute($attr));
+			$count = intval($this->countUsersWithAttribute($attr, true));
 
 			if($count > 0) {
 				$this->applyFind('ldap_display_name', $attr);
@@ -209,7 +212,7 @@ class Wizard extends LDAPUtility {
 
 		$attr = $this->configuration->ldapEmailAttribute;
 		if(!empty($attr)) {
-			$count = intval($this->countUsersWithAttribute($attr));
+			$count = intval($this->countUsersWithAttribute($attr, true));
 			if($count > 0) {
 				return false;
 			}