diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index ebe0dcb7f8adf7dede37457a43e7a138e441f7e2..0aca12db49039a08ea2808687fa96249b44c5672 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -594,12 +594,12 @@ public class BaseSecurityManager implements BaseSecurity, UserDataDeletable {
 	public List<IdentityShort> searchIdentityShort(String search,
 			List<? extends OrganisationRef> searcheableOrgnisations, GroupRoles repositoryEntryRole, int maxResults) {
 		String[] searchArr = search.split(" ");
-		String[] attributes = new String[]{ "name", "firstName", "lastName", "email" };
+		String[] attributes = new String[]{ "name", "nickName", "firstName", "lastName", "email" };
 		
 		StringBuilder sb = new StringBuilder();
 		sb.append("select ident from bidentityshort as ident ")
 		  .append(" where ident.status<").append(Identity.STATUS_VISIBLE_LIMIT).append(" and (");
-		
+
 		boolean start = true;
 		for(int i=0; i<searchArr.length; i++) {
 			for(String attribute:attributes) {
@@ -608,16 +608,13 @@ public class BaseSecurityManager implements BaseSecurity, UserDataDeletable {
 				} else {
 					sb.append(" or ");
 				}
-				
-				if (searchArr[i].contains("_") && dbInstance.isOracle()) {
-					//oracle needs special ESCAPE sequence to search for escaped strings
-					sb.append(" lower(ident.").append(attribute).append(") like :search").append(i).append(" ESCAPE '\\'");
-				} else if (dbInstance.isMySQL()) {
-					sb.append(" ident.").append(attribute).append(" like :search").append(i);
-				} else {
-					sb.append(" lower(ident.").append(attribute).append(") like :search").append(i);
-				}
+				PersistenceHelper.appendFuzzyLike(sb, "ident." + attribute, "search" + i, dbInstance.getDbVendor());
 			}
+			
+			sb.append(" or exists (select auth from ").append(AuthenticationImpl.class.getName()).append(" as auth")
+			  .append("  where ident.key=auth.identity.key and");
+			PersistenceHelper.appendFuzzyLike(sb, "auth.authusername", "search" + i, dbInstance.getDbVendor());
+			sb.append(")");
 		}
 		sb.append(")");
 		if(searcheableOrgnisations != null && !searcheableOrgnisations.isEmpty()) {
diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
index c83ec0d3c85828857159a384da22dc60c1a582d3..b82161d3e80a0777e1299af46b328b9408d02927 100644
--- a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
+++ b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java
@@ -283,6 +283,74 @@ public class BaseSecurityManagerTest extends OlatTestCase {
 		Assert.assertTrue(identities.contains(id2));
 	}
 	
+	@Test
+	public void testLoadIdentityByKey() {
+		//create a security group with 2 identities
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("load-1-sec-");
+		dbInstance.commitAndCloseSession();
+
+		Identity identity = securityManager.loadIdentityByKey(id1.getKey());
+		Assert.assertNotNull(identity);
+		Assert.assertEquals(id1, identity);
+	}
+	
+	@Test
+	public void searchIdentityShort() {
+		//create a security group with 2 identities
+		IdentityWithLogin id = JunitTestHelper.createAndPersistRndUser("short-1-search-");
+		dbInstance.commitAndCloseSession();
+
+		String login = id.getLogin().substring(0, 12);
+		List<IdentityShort> identities = securityManager.searchIdentityShort(login, 32000);
+		Assert.assertNotNull(identities);
+		
+		boolean found = false;
+		for(IdentityShort identity:identities) {
+			if(identity.getKey().equals(id.getKey())) {
+				found = true;
+			}
+		}
+		Assert.assertTrue(found);
+	}
+	
+	@Test
+	public void searchIdentityShort_multiWords() {
+		//create a security group with 2 identities
+		IdentityWithLogin id = JunitTestHelper.createAndPersistRndUser("short-2-search-");
+		dbInstance.commitAndCloseSession();
+
+		String login = id.getLogin().substring(0, 12);
+		List<IdentityShort> identities = securityManager.searchIdentityShort(login + " hello world", 32000);
+		Assert.assertNotNull(identities);
+		
+		boolean found = false;
+		for(IdentityShort identity:identities) {
+			if(identity.getKey().equals(id.getKey())) {
+				found = true;
+			}
+		}
+		Assert.assertTrue(found);
+	}
+	
+	/**
+	 * The test checks only if the query is valid.
+	 * 
+	 */
+	@Test
+	public void searchIdentityShortLongAllParameters() {
+		//create a security group with 2 identities
+		IdentityWithLogin id = JunitTestHelper.createAndPersistRndUser("short-2-search-");
+		dbInstance.commitAndCloseSession();
+
+		Organisation defOrganisation = organisationService.getDefaultOrganisation();
+
+		String login = id.getLogin().substring(0, 12);
+		List<IdentityShort> identities = securityManager.searchIdentityShort(login + " hello world",
+				Collections.singletonList(defOrganisation), GroupRoles.participant,  32000);
+		Assert.assertNotNull(identities);
+	}
+	
+	
 	/**
 	 * Update roles
 	 */