diff --git a/src/main/java/org/olat/admin/user/UserSearchController.java b/src/main/java/org/olat/admin/user/UserSearchController.java
index 726518f5f12666e2b73eee05fb34acf6c6d8f4db..20e0f1170c770a6a37ffa248fa2ebd78ab984853 100644
--- a/src/main/java/org/olat/admin/user/UserSearchController.java
+++ b/src/main/java/org/olat/admin/user/UserSearchController.java
@@ -27,10 +27,12 @@ import java.util.Map;
 
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.basesecurity.Organisation;
+import org.olat.basesecurity.OrganisationService;
+import org.olat.basesecurity.SearchIdentityParams;
 import org.olat.basesecurity.events.MultiIdentityChosenEvent;
 import org.olat.basesecurity.events.SingleIdentityChosenEvent;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.link.Link;
@@ -55,6 +57,7 @@ import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.Roles;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.UserSession;
 import org.olat.core.util.Util;
 import org.olat.user.UserManager;
 import org.olat.user.propertyhandlers.UserPropertyHandler;
@@ -99,6 +102,9 @@ public class UserSearchController extends BasicController {
 	private static final String ACTION_SINGLESELECT_CHOOSE = "ssc";
 	private static final String ACTION_MULTISELECT_CHOOSE = "msc";
 	
+	public static final String ACTION_KEY_CHOOSE = "action.choose";
+	public static final String ACTION_KEY_CHOOSE_FINISH = "action.choose.finish";
+	
 	private VelocityContainer myContent;
 	private StackedPanel searchPanel;
 	private UserSearchForm searchform;
@@ -108,6 +114,7 @@ public class UserSearchController extends BasicController {
 	private List<Identity> foundIdentities = new ArrayList<>();
 	private boolean useMultiSelect = false;
 	private Object userObject;
+	public final List<Organisation> searchableOrganisations;
 	
 	private AutoCompleterController autocompleterC;
 	private String actionKeyChoose;
@@ -118,13 +125,10 @@ public class UserSearchController extends BasicController {
 	protected BaseSecurity securityManager;
 	@Autowired
 	protected BaseSecurityModule securityModule;
-
-	public static final String ACTION_KEY_CHOOSE = "action.choose";
-	public static final String ACTION_KEY_CHOOSE_FINISH = "action.choose.finish";
-	
+	@Autowired
+	protected OrganisationService organisationService;
 	
 	/**
-	 * fxdiff: FXOLAT-250   we need standard-constructor for use in genericMainController
 	 * 
 	 * @param ureq
 	 * @param wControl
@@ -176,13 +180,14 @@ public class UserSearchController extends BasicController {
 		searchPanel.addListener(this);
 		myContent.put("usersearchPanel", searchPanel);
 
-		if (ureq.getUserSession()==null) {
-			logError("UserSearchController<init>: session is null!", null);
-		} else if (ureq.getUserSession().getRoles()==null) {
-			logError("UserSearchController<init>: roles is null!", null);
+		UserSession usess = ureq.getUserSession();
+		if(usess.getRoles().isOLATAdmin()) {
+			searchableOrganisations = null;//null mean all
+		} else {
+			searchableOrganisations = organisationService.getSearchableOrganisations(getIdentity(), usess.getRoles());
 		}
 		
-		Roles roles = ureq.getUserSession().getRoles();
+		Roles roles = usess.getRoles();
 		isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
 		searchform = new UserSearchForm(ureq, wControl, isAdministrativeUser, cancelbutton, allowReturnKey);
 		listenTo(searchform);
@@ -192,10 +197,9 @@ public class UserSearchController extends BasicController {
 		myContent.contextPut("showButton","false");
 		
 		boolean autoCompleteAllowed = securityModule.isUserAllowedAutoComplete(roles);
-		boolean ajax = Windows.getWindows(ureq).getWindowManager().isAjaxEnabled();
-		if (ajax && autoCompleteAllowed) {
+		if (autoCompleteAllowed) {
 			// insert a autocompleter search
-			ListProvider provider = new UserSearchListProvider();
+			ListProvider provider = new UserSearchListProvider(searchableOrganisations);
 			autocompleterC = new AutoCompleterController(ureq, getWindowControl(), provider, null, isAdministrativeUser, 60, 3, null);
 			listenTo(autocompleterC);
 			myContent.put("autocompletionsearch", autocompleterC.getInitialComponent());
@@ -348,8 +352,9 @@ public class UserSearchController extends BasicController {
 	protected List<Identity> searchUsers(String login, Map<String, String> userPropertiesSearch, boolean userPropertiesAsIntersectionSearch) {
 		int maxResults = securityModule.getUserSearchMaxResultsValue() > 0 ? securityModule.getUserSearchMaxResultsValue() + 1 : -1;
 		login = (login.equals("") ? null : login);
-		return securityManager.getVisibleIdentitiesByPowerSearch(login ,
-			userPropertiesSearch, userPropertiesAsIntersectionSearch,	// in normal search fields are intersected
-			null, null, null, null, 0, maxResults);
+		SearchIdentityParams params = new SearchIdentityParams(login, userPropertiesSearch, userPropertiesAsIntersectionSearch, null, 
+				null, null, null, null, null, Identity.STATUS_VISIBLE_LIMIT);
+		params.setOrganisations(searchableOrganisations);
+		return securityManager.getIdentitiesByPowerSearch(params, 0, maxResults);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
index a81d8453ba502679f68b09702653c79db10a693f..c00a8fae84b18e7af12ffbe2efa5bd7f109de1ee 100644
--- a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
+++ b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
@@ -29,13 +29,17 @@ import java.util.Set;
 
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.basesecurity.Organisation;
+import org.olat.basesecurity.OrganisationService;
+import org.olat.basesecurity.SearchIdentityParams;
 import org.olat.basesecurity.events.SingleIdentityChosenEvent;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
-import org.olat.core.gui.components.form.flexible.elements.*;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.Form;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
@@ -55,6 +59,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.Roles;
 import org.olat.core.id.UserConstants;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.UserSession;
 import org.olat.core.util.Util;
 import org.olat.user.UserManager;
 import org.olat.user.propertyhandlers.EmailProperty;
@@ -65,25 +70,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 /**
  * Initial Date:  Jul 29, 2003
  *
- * @author Felix Jost, Florian Gnaegi
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  * 
- * <pre>
  * Comment:  
  * Subworkflow that allows the user to search for a user and choose the user from 
  * the list of users that match the search criteria. Users can be searched by
  * <ul>
- * <li />
- * Username
- * <li />
- * First name
- * <li />
- * Last name
- * <li />
- * Email address
+ *  <li>Username
+ *  <li>First name
+ *  <li>Last name
+ *  <li>Email address
  * </ul>
  * 
- * </pre>
  * 
  * Events:<br>
  *         Fires a SingleIdentityChoosenEvent when an identity has been chosen
@@ -93,6 +90,10 @@ import org.springframework.beans.factory.annotation.Autowired;
  *         <p>
  *         Optionally set the useMultiSelect boolean to true which allows to
  *         select multiple identities from within the search results.
+ *         
+ *         
+ * @author Felix Jost, Florian Gnaegi
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class UserSearchFlexiController extends FlexiAutoCompleterController {
 
@@ -104,10 +105,10 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	private FlexiTableElement tableEl;
 	private UserSearchFlexiTableModel userTableModel;
 	private FormLayoutContainer autoCompleterContainer;
-	private FormLayoutContainer searchFormContainer;
 	
 	private final boolean isAdministrativeUser;
 	private final List<UserPropertyHandler> userSearchFormPropertyHandlers;
+	private final List<Organisation> searchableOrganisations;
 
 	@Autowired
 	private UserManager userManager;
@@ -115,6 +116,8 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	private BaseSecurity securityManager;
 	@Autowired
 	private BaseSecurityModule securityModule;
+	@Autowired
+	private OrganisationService organisationService;
 
 	/**
 	 * @param ureq
@@ -131,8 +134,15 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		Roles roles = ureq.getUserSession().getRoles();
 		isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
 		userSearchFormPropertyHandlers = userManager.getUserPropertyHandlersFor(UserSearchForm.class.getCanonicalName(), isAdministrativeUser);
+		
+		UserSession usess = ureq.getUserSession();
+		if(usess.getRoles().isOLATAdmin()) {
+			searchableOrganisations = null;//null mean all
+		} else {
+			searchableOrganisations = organisationService.getSearchableOrganisations(getIdentity(), usess.getRoles());
+		}
 
-		ListProvider provider = new UserSearchListProvider();
+		ListProvider provider = new UserSearchListProvider(searchableOrganisations);
 		setListProvider(provider);
 		setAllowNewValues(false);
 
@@ -147,8 +157,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 			// insert a autocompleter search
 			Roles roles = ureq.getUserSession().getRoles();
 			boolean autoCompleteAllowed = securityModule.isUserAllowedAutoComplete(roles);
-			boolean ajax = Windows.getWindows(ureq).getWindowManager().isAjaxEnabled();
-			if (ajax && autoCompleteAllowed) {
+			if (autoCompleteAllowed) {
 				//auto complete
 				String velocityAutoCRoot = Util.getPackageVelocityRoot(FlexiAutoCompleterController.class);
 				String autoCPage = velocityAutoCRoot + "/autocomplete.html";
@@ -163,7 +172,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 			backLink = uifactory.addFormLink("btn.back", formLayout);
 			backLink.setIconLeftCSS("o_icon o_icon_back");
 
-			searchFormContainer = FormLayoutContainer.createDefaultFormLayout("usersearchPanel", getTranslator());
+			FormLayoutContainer searchFormContainer = FormLayoutContainer.createDefaultFormLayout("usersearchPanel", getTranslator());
 			searchFormContainer.setRootForm(mainForm);
 			searchFormContainer.setElementCssClass("o_sel_usersearch_searchform");
 			searchFormContainer.setFormTitle(translate("header.normal"));
@@ -303,9 +312,6 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 			if (StringHelper.containsNonWhitespace(uiValue)) {
 				full.append(uiValue.trim());
 				filled = true;
-			} else {
-				//its an empty field
-				filled = filled || false;
 			}
 
 			lastFormElement = ui;
@@ -325,7 +331,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 			lastFormElement.setErrorKey("error.search.form.no.wildcard.dublicates", null);
 			return false;
 		}		
-		if ( fullString.length() < 4) {
+		if (fullString.length() < 4) {
 			lastFormElement.setErrorKey("error.search.form.to.short", null);
 			return false;
 		}
@@ -436,9 +442,6 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
 	@Override
 	protected void doDispose() {
 		// Child controllers auto-disposed by basic controller
@@ -451,9 +454,10 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	 * @return
 	 */
 	private List<Identity> searchUsers(String login, Map<String, String> userPropertiesSearch, boolean userPropertiesAsIntersectionSearch) {
-	  return securityManager.getVisibleIdentitiesByPowerSearch(
-			(login.equals("") ? null : login),
-			userPropertiesSearch, userPropertiesAsIntersectionSearch,	// in normal search fields are intersected
-			null, null, null, null);
+		SearchIdentityParams params = new SearchIdentityParams(login,
+				userPropertiesSearch, userPropertiesAsIntersectionSearch, null, 
+				null, null, null, null, null, Identity.STATUS_VISIBLE_LIMIT);
+		params.setOrganisations(searchableOrganisations);
+		return securityManager.getIdentitiesByPowerSearch(params, 0, -1);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/user/UserSearchListProvider.java b/src/main/java/org/olat/admin/user/UserSearchListProvider.java
index da91a24e6a651d64cb1e80cefcc1f214d6cda1de..782742adc2fe3af254928a2b61ebeca51a556f34 100644
--- a/src/main/java/org/olat/admin/user/UserSearchListProvider.java
+++ b/src/main/java/org/olat/admin/user/UserSearchListProvider.java
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.IdentityShort;
+import org.olat.basesecurity.Organisation;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.control.generic.ajax.autocompletion.ListProvider;
 import org.olat.core.gui.control.generic.ajax.autocompletion.ListReceiver;
@@ -42,8 +43,10 @@ public class UserSearchListProvider implements ListProvider {
 	
 	private final BaseSecurity securityManager;
 	private final UserManager userManager;
+	public final List<Organisation> searchableOrganisations;
 	
-	public UserSearchListProvider() {
+	public UserSearchListProvider(List<Organisation> searchableOrganisations) {
+		this.searchableOrganisations = searchableOrganisations;
 		securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
 		userManager = CoreSpringFactory.getImpl(UserManager.class);
 	}
@@ -60,7 +63,7 @@ public class UserSearchListProvider implements ListProvider {
 		// Search in all fileds -> non intersection search
 
 		int maxEntries = MAX_ENTRIES;
-		List<IdentityShort> res = securityManager.searchIdentityShort(searchValue, maxEntries);
+		List<IdentityShort> res = securityManager.searchIdentityShort(searchValue, searchableOrganisations, maxEntries);
 
 		boolean hasMore = false;
 		for (Iterator<IdentityShort> it_res = res.iterator(); (hasMore=it_res.hasNext()) && maxEntries > 0;) {
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index 9f8e013e2056340c8277fdad47a988c16fbecdac..c09c75bc60366ebbfd32dcf20231774224dd71b0 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -154,10 +154,17 @@ public interface BaseSecurity {
 	
 	/**
 	 * 
-	 * @param search
+	 * @param search The search
 	 * @return
 	 */
 	public List<IdentityShort> searchIdentityShort(String search, int maxResults);
+	
+	/**
+	 * 
+	 * @param search The search
+	 * @return
+	 */
+	public List<IdentityShort> searchIdentityShort(String search, List<? extends OrganisationRef> searchableOrganisations, int maxResults);
 
 	public IdentityShort loadIdentityShortByKey(Long identityKey);
 	
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index d52314fb7ab65493ee4ab9fb1a254de2696c8e29..1ddd9a2bbb77a81bb2e60cef2ed6ab3078d1d298 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -601,9 +601,15 @@ public class BaseSecurityManager implements BaseSecurity {
 				.getResultList();
 		return identities.size() == 1 ? identities.get(0) : null;
 	}
+	
 
 	@Override
 	public List<IdentityShort> searchIdentityShort(String search, int maxResults) {
+		return searchIdentityShort(search, null, maxResults);
+	}
+
+	@Override
+	public List<IdentityShort> searchIdentityShort(String search, List<? extends OrganisationRef> searcheableOrgnisations, int maxResults) {
 		String[] searchArr = search.split(" ");
 		String[] attributes = new String[]{ "name", "firstName", "lastName", "email" };
 		
@@ -631,12 +637,23 @@ public class BaseSecurityManager implements BaseSecurity {
 			}
 		}
 		sb.append(")");
+		if(searcheableOrgnisations != null && !searcheableOrgnisations.isEmpty()) {
+			sb.append(" and exists (select orgtomember.key from bgroupmember as orgtomember ")
+			  .append("  inner join organisation as org on (org.group.key=orgtomember.group.key)")
+			  .append("  where orgtomember.identity.key=ident.key and org.key in (:organisationKey))");
+		}
 		
 		TypedQuery<IdentityShort> searchQuery = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), IdentityShort.class);
 		for(int i=searchArr.length; i-->0; ) {
 			searchQuery.setParameter("search" + i, PersistenceHelper.makeFuzzyQueryString(searchArr[i]));
 		}
+		
+		if(searcheableOrgnisations != null && !searcheableOrgnisations.isEmpty()) {
+			List<Long> organisationKeys = searcheableOrgnisations.stream()
+					.map(OrganisationRef::getKey).collect(Collectors.toList());
+			searchQuery.setParameter("organisationKey", organisationKeys);
+		}
 
 		return searchQuery
 				.setFirstResult(0)
diff --git a/src/main/java/org/olat/basesecurity/OrganisationService.java b/src/main/java/org/olat/basesecurity/OrganisationService.java
index 8fa6e2c0a2501dcd296c63dbba2f78481cd32b81..eede6e5d53897be9d8b40894803564e4664295ba 100644
--- a/src/main/java/org/olat/basesecurity/OrganisationService.java
+++ b/src/main/java/org/olat/basesecurity/OrganisationService.java
@@ -23,6 +23,7 @@ import java.util.List;
 
 import org.olat.basesecurity.model.OrganisationMember;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 
 /**
  * 
@@ -62,6 +63,14 @@ public interface OrganisationService {
 	 */
 	public List<Organisation> getOrganisations(IdentityRef member, OrganisationRoles... role);
 	
+	/**
+	 * 
+	 * @param member
+	 * @param roles
+	 * @return
+	 */
+	public List<Organisation> getSearchableOrganisations(IdentityRef member, Roles roles);
+	
 	public Organisation getDefaultOrganisation();
 
 	public void addMember(Organisation organisation, Identity member, OrganisationRoles role);
diff --git a/src/main/java/org/olat/basesecurity/SearchIdentityParams.java b/src/main/java/org/olat/basesecurity/SearchIdentityParams.java
index 057ef90cdae2030da8d9a91f62c83e0c44f1ec11..d5348be1eccbbdd5f9eaf4dbf9f8ca6d499d8591 100644
--- a/src/main/java/org/olat/basesecurity/SearchIdentityParams.java
+++ b/src/main/java/org/olat/basesecurity/SearchIdentityParams.java
@@ -19,7 +19,9 @@
  */
 package org.olat.basesecurity;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -50,8 +52,8 @@ public class SearchIdentityParams {
 	private Collection<Long> identityKeys;
 	private Boolean managed;
 	
-	private OrganisationRef organisation;
 	private List<Organisation> organisationParents;
+	private List<OrganisationRef> organisations;
 	
 	public SearchIdentityParams() {
 		//
@@ -101,7 +103,7 @@ public class SearchIdentityParams {
 	
 	public static SearchIdentityParams organisation(Organisation organisation, Integer status) {
 		SearchIdentityParams params = new SearchIdentityParams();
-		params.setOrganisation(organisation);
+		params.setOrganisations(Collections.singletonList(organisation));
 		params.setStatus(status);
 		return params;
 	}
@@ -129,13 +131,21 @@ public class SearchIdentityParams {
 	public void setOrganisationParents(List<Organisation> organisationParents) {
 		this.organisationParents = organisationParents;
 	}
+	
+	public boolean hasOrganisations() {
+		return organisations != null && !organisations.isEmpty();
+	}
 
-	public OrganisationRef getOrganisation() {
-		return organisation;
+	public List<OrganisationRef> getOrganisations() {
+		return organisations;
 	}
 
-	public void setOrganisation(OrganisationRef organisation) {
-		this.organisation = organisation;
+	public void setOrganisations(List<? extends OrganisationRef> organisations) {
+		if(organisations == null) {
+			this.organisations = null;
+		} else {
+			this.organisations = new ArrayList<>(organisations);
+		}
 	}
 
 	public String getLogin() {
diff --git a/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java b/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java
index 22f4ba8dfc54ddbda92c008131c696c0e927db73..3f4f24344b43c6bd90df028b203b40aa5a502e17 100644
--- a/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java
+++ b/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java
@@ -19,12 +19,13 @@
  */
 package org.olat.basesecurity.manager;
 
-import java.util.Date;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.persistence.TemporalType;
 import javax.persistence.TypedQuery;
@@ -32,6 +33,7 @@ import javax.persistence.TypedQuery;
 import org.olat.basesecurity.AuthenticationImpl;
 import org.olat.basesecurity.IdentityImpl;
 import org.olat.basesecurity.IdentityPowerSearchQueries;
+import org.olat.basesecurity.OrganisationRef;
 import org.olat.basesecurity.OrganisationRoles;
 import org.olat.basesecurity.SearchIdentityParams;
 import org.olat.basesecurity.model.IdentityPropertiesRow;
@@ -165,7 +167,7 @@ public class IdentityPowerSearchQueriesImpl implements IdentityPowerSearchQuerie
 				|| params.hasAuthProviders() || params.getStatus() != null || params.getManaged() != null
 				|| params.hasRoles() || params.hasExcludedRoles() || params.isAuthorAndCoAuthor()
 				|| params.getRepositoryEntryRole() != null || params.getBusinessGroupRole() != null
-				|| params.getOrganisation() != null || params.hasOrganisationParents();
+				|| params.hasOrganisations() || params.hasOrganisationParents();
 	}
 	
 	private boolean createQueryPart(SearchIdentityParams params, StringBuilder sb, boolean needsAnd) {	
@@ -201,11 +203,11 @@ public class IdentityPowerSearchQueriesImpl implements IdentityPowerSearchQuerie
 			sb.append("))");
 		}
 		
-		if(params.getOrganisation() != null) {
+		if(params.hasOrganisations()) {
 			needsAnd = checkAnd(sb, needsAnd);
 			sb.append(" exists (select orgtomember.key from bgroupmember as orgtomember ")
 			  .append("  inner join organisation as org on (org.group.key=orgtomember.group.key)")
-			  .append("  where orgtomember.identity.key=ident.key and org.key=:organisationKey)");
+			  .append("  where orgtomember.identity.key=ident.key and org.key in (:organisationKey))");
 		}
 		
 		if(params.getBusinessGroupRole() != null) {
@@ -490,8 +492,10 @@ public class IdentityPowerSearchQueriesImpl implements IdentityPowerSearchQuerie
 			}
 		}
 		
-		if(params.getOrganisation() != null) {
-			dbq.setParameter("organisationKey", params.getOrganisation().getKey());
+		if(params.hasOrganisations()) {
+			List<Long> organisationKeys = params.getOrganisations()
+					.stream().map(OrganisationRef::getKey).collect(Collectors.toList());
+			dbq.setParameter("organisationKey", organisationKeys);
 		}
 		
 		// add date restrictions
diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
index 2d4285dc58073c4f3bcc2d0f887a6e1b20e17f26..87616ecbcb18a32d378cf13fc86aaf1382de03cc 100644
--- a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
+++ b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java
@@ -217,11 +217,11 @@ public class OrganisationDAO {
 		sb.append("select org from organisation org")
 		  .append(" inner join fetch org.group baseGroup")
 		  .append(" inner join baseGroup.members membership")
-		  .append(" where membership.identity.key=:identityKey and membership.role=:role");
+		  .append(" where membership.identity.key=:identityKey and membership.role in (:roles)");
 		return dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Organisation.class)
 				.setParameter("identityKey", identity.getKey())
-				.setParameter("role", roleList)
+				.setParameter("roles", roleList)
 				.getResultList();
 	}
 	
diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
index 5b0e36b30f11bab47981315c7115844523493b94..a02928be2c06594b70e2d6a16922c3a974c32f18 100644
--- a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
+++ b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java
@@ -33,6 +33,7 @@ import org.olat.basesecurity.model.OrganisationImpl;
 import org.olat.basesecurity.model.OrganisationMember;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.springframework.beans.factory.InitializingBean;
@@ -114,6 +115,19 @@ public class OrganisationServiceImpl implements OrganisationService, Initializin
 		return organisationDao.getOrganisations(member, roleList);
 	}
 
+	@Override
+	public List<Organisation> getSearchableOrganisations(IdentityRef member, Roles roles) {
+		List<String> roleList = new ArrayList<>();// if user manager, descent organization tree
+		for(OrganisationRoles r:OrganisationRoles.values()) {
+			if(r !=  OrganisationRoles.guest) {
+				roleList.add(r.name());
+			}
+		}
+		List<Organisation> organisations = organisationDao.getOrganisations(member, roleList);
+		
+		return organisations;
+	}
+
 	@Override
 	public List<OrganisationMember> getMembers(Organisation organisation) {
 		return organisationDao.getMembers(organisation);
diff --git a/src/main/java/org/olat/core/util/mail/ui/EMailCalloutCtrl.java b/src/main/java/org/olat/core/util/mail/ui/EMailCalloutCtrl.java
index 81db611ccfde3169d8fc7d7cb978c16709c50ca0..262155c93992334aa060ca2e25aef3707f30921b 100644
--- a/src/main/java/org/olat/core/util/mail/ui/EMailCalloutCtrl.java
+++ b/src/main/java/org/olat/core/util/mail/ui/EMailCalloutCtrl.java
@@ -24,6 +24,8 @@ import java.util.List;
 import org.olat.admin.user.UserSearchListProvider;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.basesecurity.Organisation;
+import org.olat.basesecurity.OrganisationService;
 import org.olat.basesecurity.events.SingleIdentityChosenEvent;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -63,6 +65,8 @@ public class EMailCalloutCtrl extends FormBasicController {
 	private BaseSecurity securityManager;
 	@Autowired
 	private BaseSecurityModule securityModule;
+	@Autowired
+	private OrganisationService organisationService;
 	
 	public EMailCalloutCtrl(UserRequest ureq, WindowControl wControl, boolean allowExternalAddress) {
 		super(ureq, wControl, LAYOUT_VERTICAL);
@@ -78,7 +82,13 @@ public class EMailCalloutCtrl extends FormBasicController {
 		boolean autoCompleteAllowed = securityModule.isUserAllowedAutoComplete(roles);
 		boolean isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
 		if (autoCompleteAllowed) {
-			ListProvider provider = new UserSearchListProvider();
+			List<Organisation> searcheableOrganisations;
+			if(roles.isOLATAdmin()) {
+				searcheableOrganisations = null;
+			} else {
+				searcheableOrganisations = organisationService.getSearchableOrganisations(getIdentity(), roles);
+			}
+			ListProvider provider = new UserSearchListProvider(searcheableOrganisations);
 			autocompleterC = new FlexiAutoCompleterController(ureq, getWindowControl(), provider, null, isAdministrativeUser, allowExternalAddress, 60, 3, null, mainForm);
 			autocompleterC.setFormElement(false);
 			listenTo(autocompleterC);
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
index 34c987cf6349fcd55b7a16be1a1a5ebfcc94daf8..725501200bba375d56eb4a7059c662d8f3f39efc 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
@@ -48,7 +48,6 @@ public class ImportMember_1b_ChooseMemberStep extends BasicStep {
 
 	@Override
 	public StepFormController getStepController(UserRequest ureq, WindowControl wControl, StepsRunContext runContext, Form form) {
-		ImportMemberBySearchController controller = new ImportMemberBySearchController(ureq, wControl, form, runContext);
-		return controller;
+		return new ImportMemberBySearchController(ureq, wControl, form, runContext);
 	}
 }
\ No newline at end of file