diff --git a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
index 348eca9ef640d216d8880376510b8df8fa192d82..aa1348f2f20a5c3f534e13fc4f1bcfff4b0e42be 100644
--- a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
+++ b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
@@ -29,6 +29,7 @@ import java.util.Set;
 
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityPowerSearchQueries;
 import org.olat.basesecurity.OrganisationRoles;
 import org.olat.basesecurity.OrganisationService;
@@ -111,6 +112,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	private final boolean isAdministrativeUser;
 	private final List<UserPropertyHandler> userSearchFormPropertyHandlers;
 	private final List<Organisation> searchableOrganisations;
+	private final GroupRoles repositoryEntryRole;
 
 	@Autowired
 	private UserManager userManager;
@@ -123,14 +125,11 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	@Autowired
 	private IdentityPowerSearchQueries identitySearchQueries;
 
-	/**
-	 * @param ureq
-	 * @param wControl
-	 * @param cancelbutton
-	 * @param userMultiSelect
-	 * @param statusEnabled
-	 */
 	public UserSearchFlexiController(UserRequest ureq, WindowControl wControl, Form rootForm) {
+		this(ureq, wControl, rootForm, null);
+	}
+	
+	public UserSearchFlexiController(UserRequest ureq, WindowControl wControl, Form rootForm, GroupRoles repositoryEntryRole) {
 		super(ureq, wControl, LAYOUT_CUSTOM, "usersearchext", rootForm);
 		setTranslator(Util.createPackageTranslator(UserPropertyHandler.class, getLocale(), getTranslator()));
 		setTranslator(Util.createPackageTranslator(UserSearchFlexiController.class, getLocale(), getTranslator()));
@@ -142,8 +141,9 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		UserSession usess = ureq.getUserSession();
 		searchableOrganisations = organisationService.getOrganisations(getIdentity(), usess.getRoles(),
 				OrganisationRoles.valuesWithoutGuestAndInvitee());
+		this.repositoryEntryRole = repositoryEntryRole;
 
-		ListProvider provider = new UserSearchListProvider(searchableOrganisations);
+		ListProvider provider = new UserSearchListProvider(searchableOrganisations, repositoryEntryRole);
 		setListProvider(provider);
 		setAllowNewValues(false);
 
@@ -249,7 +249,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 
 	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
-		if (source == backLink) {				
+		if (source == backLink) {
 			flc.contextPut("showButton","false");
 		} else if(autoCompleterContainer != null && source == autoCompleterContainer.getComponent()) {
 			if (event.getCommand().equals(COMMAND_SELECT)) {
@@ -278,7 +278,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 					}
 				}
 			} catch (NumberFormatException e) {
-				getWindowControl().setWarning(translate("error.no.user.found"));								
+				getWindowControl().setWarning(translate("error.no.user.found"));
 			}
 		} else {
 			getWindowControl().setWarning(translate("error.search.form.notempty"));
@@ -299,7 +299,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		}
 		
 		boolean filled = !loginEl.isEmpty();
-		StringBuilder  full = new StringBuilder(loginEl.getValue().trim());  
+		StringBuilder  full = new StringBuilder(loginEl.getValue().trim());
 		FormItem lastFormElement = loginEl;
 		
 		// DO NOT validate each user field => see OLAT-3324
@@ -460,6 +460,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 				userPropertiesSearch, userPropertiesAsIntersectionSearch, null, 
 				null, null, null, null, null, Identity.STATUS_VISIBLE_LIMIT);
 		params.setOrganisations(searchableOrganisations);
+		params.setRepositoryEntryRole(repositoryEntryRole);
 		return identitySearchQueries.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 6b4209996a04a36c89015bebe1623dc6a1720c9f..85bd3eb292fb709e2521eee0ba5fc94cd465c1f9 100644
--- a/src/main/java/org/olat/admin/user/UserSearchListProvider.java
+++ b/src/main/java/org/olat/admin/user/UserSearchListProvider.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.olat.basesecurity.BaseSecurity;
+import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityShort;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.control.generic.ajax.autocompletion.ListProvider;
@@ -43,15 +44,20 @@ public class UserSearchListProvider implements ListProvider {
 	
 	private final BaseSecurity securityManager;
 	private final UserManager userManager;
-	public final List<Organisation> searchableOrganisations;
+	private final List<Organisation> searchableOrganisations;
+	private final GroupRoles repositoryEntryRole;
 	
 	public UserSearchListProvider(List<Organisation> searchableOrganisations) {
+		this(searchableOrganisations, null);
+	}
+	
+	public UserSearchListProvider(List<Organisation> searchableOrganisations, GroupRoles repositoryEntryRole) {
 		this.searchableOrganisations = searchableOrganisations;
+		this.repositoryEntryRole = repositoryEntryRole;
 		securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
 		userManager = CoreSpringFactory.getImpl(UserManager.class);
 	}
 	
-	
 	@Override
 	public void getResult(String searchValue, ListReceiver receiver) {
 		Map<String, String> userProperties = new HashMap<>();
@@ -63,7 +69,7 @@ public class UserSearchListProvider implements ListProvider {
 		// Search in all fileds -> non intersection search
 
 		int maxEntries = MAX_ENTRIES;
-		List<IdentityShort> res = securityManager.searchIdentityShort(searchValue, searchableOrganisations, maxEntries);
+		List<IdentityShort> res = securityManager.searchIdentityShort(searchValue, searchableOrganisations, repositoryEntryRole, maxEntries);
 
 		boolean hasMore = false;
 		for (Iterator<IdentityShort> it_res = res.iterator(); (hasMore=it_res.hasNext()) && maxEntries > 0;) {
@@ -73,7 +79,7 @@ public class UserSearchListProvider implements ListProvider {
 			String displayKey = ident.getName();
 			String displayText = userManager.getUserDisplayName(ident);
 			receiver.addEntry(key, displayKey, displayText, null);
-		}					
+		}
 		if(hasMore){
 			receiver.addEntry(".....",".....");
 		}
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index 1c52d4fce107c7e19f88291b9bb55aee8f0eda0e..7703b432b1432a12f29490fb3a85bde172f22643 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -173,10 +173,12 @@ public interface BaseSecurity {
 	 * 
 	 * @param search Search string
 	 * @param searchableOrganisations The organisations where the identities are
+	 * @param repositoryEntryRole restrict to role
 	 * @param maxResults The max results or -1
 	 * @return A list of identities (short version)
 	 */
-	public List<IdentityShort> searchIdentityShort(String search, List<? extends OrganisationRef> searchableOrganisations, int maxResults);
+	public List<IdentityShort> searchIdentityShort(String search,
+			List<? extends OrganisationRef> searchableOrganisations, GroupRoles repositoryEntryRole, 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 33de84d86732f0cc07d01d6fbd864f49d601e457..3e973f57ea2763766ed4326a796c6f4bb84df21b 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -638,11 +638,12 @@ public class BaseSecurityManager implements BaseSecurity, UserDataDeletable {
 
 	@Override
 	public List<IdentityShort> searchIdentityShort(String search, int maxResults) {
-		return searchIdentityShort(search, null, maxResults);
+		return searchIdentityShort(search, null, null, maxResults);
 	}
 
 	@Override
-	public List<IdentityShort> searchIdentityShort(String search, List<? extends OrganisationRef> searcheableOrgnisations, int maxResults) {
+	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" };
 		
@@ -675,6 +676,12 @@ public class BaseSecurityManager implements BaseSecurity, UserDataDeletable {
 			  .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))");
 		}
+		if (repositoryEntryRole != null) {
+			sb.append(" and exists (select rmember.key from repoentrytogroup as relGroup")
+			  .append("  inner join relGroup.group as rGroup")
+			  .append("  inner join rGroup.members as rmember")
+			  .append("  where rmember.identity.key=ident.key and rmember.role=:repositoryEntryRole)");
+		}
 		
 		TypedQuery<IdentityShort> searchQuery = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), IdentityShort.class);
@@ -687,6 +694,9 @@ public class BaseSecurityManager implements BaseSecurity, UserDataDeletable {
 					.map(OrganisationRef::getKey).collect(Collectors.toList());
 			searchQuery.setParameter("organisationKey", organisationKeys);
 		}
+		if (repositoryEntryRole != null) {
+			searchQuery.setParameter("repositoryEntryRole", repositoryEntryRole.name());
+		}
 
 		return searchQuery
 				.setFirstResult(0)
diff --git a/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java b/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
index 556bb7e539040b7e0a88c53b2a9bf348fd624fbf..606f8f8db851b05372c111aabd05e068e7a5afd8 100644
--- a/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
+++ b/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
@@ -30,7 +30,6 @@ import java.util.Date;
 import java.util.List;
 
 import org.olat.NewControllerFactory;
-import org.olat.admin.user.UserSearchController;
 import org.olat.basesecurity.OrganisationService;
 import org.olat.basesecurity.events.SingleIdentityChosenEvent;
 import org.olat.core.gui.UserRequest;
@@ -121,7 +120,7 @@ public class DataCollectionConfigurationController extends FormBasicController i
 	private final TooledStackedPanel stackPanel;
 	private CloseableModalController cmc;
 	private ReferencableEntriesSearchController formSearchCtrl;
-	private UserSearchController topicIdentitySearchCtrl;
+	private TopicIdentitySearchController topicIdentitySearchCtrl;
 	private ReferencableEntriesSearchController topicRepositorySearchCtrl;
 	private DataCollectionStartConfirmationController startConfirmationController;
 	private DataCollectionFinishConfirmationController finishConfirmationController;
@@ -687,7 +686,7 @@ public class DataCollectionConfigurationController extends FormBasicController i
 	}
 	
 	private void doSelectTopicIdentity(UserRequest ureq) {
-		topicIdentitySearchCtrl = new UserSearchController(ureq, getWindowControl(), true, false, true);
+		topicIdentitySearchCtrl = new TopicIdentitySearchController(ureq, getWindowControl());
 		listenTo(topicIdentitySearchCtrl);
 		
 		String title = translate("data.collection.topic.identity.select");
diff --git a/src/main/java/org/olat/modules/quality/ui/TopicIdentitySearchController.java b/src/main/java/org/olat/modules/quality/ui/TopicIdentitySearchController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c743905844fe493ff5e33f290d6ca6b23387e749
--- /dev/null
+++ b/src/main/java/org/olat/modules/quality/ui/TopicIdentitySearchController.java
@@ -0,0 +1,72 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.quality.ui;
+
+import org.olat.admin.user.UserSearchFlexiController;
+import org.olat.basesecurity.GroupRoles;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+
+/**
+ * 
+ * Initial date: 17.07.2018<br>
+ * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
+ *
+ */
+public class TopicIdentitySearchController extends FormBasicController {
+
+	private UserSearchFlexiController searchController;
+
+	public TopicIdentitySearchController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl, LAYOUT_BAREBONE);
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		searchController = new UserSearchFlexiController(ureq, getWindowControl(),
+				formLayout.getRootForm(), GroupRoles.coach);
+		listenTo(searchController);
+		formLayout.add(searchController.getInitialFormItem());
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if (source == searchController) {
+			fireEvent(ureq, event);
+		}
+		super.event(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+}
diff --git a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_de.properties
index b82c8c4b28e76ed4bfbac502a23c0330764cbd13..e85dbcdcb7ca3a2d3dcae1dfef85f1bbed3941a9 100644
--- a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_de.properties
@@ -36,10 +36,10 @@ data.collection.topic.curriculum.element=Curriculumelement
 data.collection.topic.curriculum=Curriculum
 data.collection.topic.custom.text=Gegenstand
 data.collection.topic.custom=weiteres
-data.collection.topic.identity.name=Benutzer
-data.collection.topic.identity.none=Kein Benutzer ausgew\u00E4lt
+data.collection.topic.identity.name=Betreuer
+data.collection.topic.identity.none=Kein Betreuer ausgew\u00E4lt
 data.collection.topic.identity.select=Select
-data.collection.topic.identity=Benutzer
+data.collection.topic.identity=Betreuer
 data.collection.topic.organisation=Organisation
 data.collection.topic.repository.name=Kurs
 data.collection.topic.repository.none=Kein Kurs ausgew\u00E4lt
diff --git a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties
index 9d88cf6150567f8c6a92efce83a41337d12db017..cc6054647393b8f1e2ced40ee878d991bed58720 100644
--- a/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/quality/ui/_i18n/LocalStrings_en.properties
@@ -12,7 +12,7 @@ data.collection.delete=Delete
 data.collection.edit=Edit
 data.collection.finish.confirm.button=Finish
 data.collection.finish.confirm.title=Finish data collection now
-data.collection.finish.confirm=Do you really want to finish the data collection now? 
+data.collection.finish.confirm=Do you really want to finish the data collection now?
 data.collection.form.edit=Edit
 data.collection.form.preview.title=Preview
 data.collection.form.preview=
@@ -24,7 +24,7 @@ data.collection.participations=Participants
 data.collection.reminders=Reminders
 data.collection.start.confirm.button=Start
 data.collection.start.confirm.title=Start data collection now
-data.collection.start.confirm=Do you really want to start the data collection now? The "from" date will be changed to today. Afterwards you can not change the configuration anymore. 
+data.collection.start.confirm=Do you really want to start the data collection now? The "from" date will be changed to today. Afterwards you can not change the configuration anymore.
 data.collection.start=From
 data.collection.status.finished=Execution done
 data.collection.status.preparation=Preparation
@@ -36,10 +36,10 @@ data.collection.topic.curriculum.element=Curriculum element
 data.collection.topic.curriculum=Curriculum
 data.collection.topic.custom.text=Topic
 data.collection.topic.custom=Custom
-data.collection.topic.identity.name=User
-data.collection.topic.identity.none=No user selected
+data.collection.topic.identity.name=Coach
+data.collection.topic.identity.none=No coach selected
 data.collection.topic.identity.select=Select
-data.collection.topic.identity=User
+data.collection.topic.identity=Coach
 data.collection.topic.organisation=Organisation
 data.collection.topic.repository.name=Course
 data.collection.topic.repository.none=No course selected