diff --git a/src/main/java/de/bps/olat/repository/controllers/RepositorySearchMultiSelectController.java b/src/main/java/de/bps/olat/repository/controllers/RepositorySearchMultiSelectController.java
index bf887d029319fe1b1072587b2bb7a16a1f0239f1..2a151ce634154a57a81443b5f8d0f1c7abf38d2d 100644
--- a/src/main/java/de/bps/olat/repository/controllers/RepositorySearchMultiSelectController.java
+++ b/src/main/java/de/bps/olat/repository/controllers/RepositorySearchMultiSelectController.java
@@ -109,7 +109,7 @@ public class RepositorySearchMultiSelectController extends RepositorySearchContr
 		vc.contextPut("withCancel", Boolean.valueOf(withCancel));
 		
 		enableBackToSearchFormLink(false); // default, must be enabled explicitly
-		enableSearchforAllReferencalbeInSearchForm(false); // default
+		enableSearchforAllXXAbleInSearchForm(null); // default
 		
 		putInitialPanel(vc);
 	}
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
index 706343fc261f762a4887a57e067017d5c03d9fcb..ac8b8fe76e438f85a72c394847363a175e2d70f1 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
@@ -59,6 +59,7 @@ import org.olat.repository.RepositoryEntryManagedFlag;
 import org.olat.repository.RepositoryTableModel;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
 import org.olat.repository.controllers.RepositoryEntryFilter;
+import org.olat.repository.controllers.RepositorySearchController.Can;
 
 /**
  * Description:<BR>
@@ -137,7 +138,7 @@ public class BusinessGroupEditResourceController extends BasicController impleme
 			RepositoryEntryFilter filter = new ManagedEntryfilter();
 			repoSearchCtr = new ReferencableEntriesSearchController(getWindowControl(), ureq,
 					new String[]{ CourseModule.getCourseTypeName() }, filter,
-					translate("resources.add"), true, true, true, true, true);
+					translate("resources.add"), true, true, true, true, true, Can.referenceable);
 			listenTo(repoSearchCtr);
 			cmc = new CloseableModalController(getWindowControl(), translate("close"), repoSearchCtr.getInitialComponent(), true, translate("resources.add.title"));
 			listenTo(cmc);
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index bfcc0b76ab89536aff42a164420660b2b8b993a1..41ca142f0fd2c9f9cfe6e5a1f5803a4f54fdfe1a 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -71,6 +71,7 @@ import org.olat.repository.controllers.EntryChangedEvent;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
 import org.olat.repository.controllers.RepositoryAddController;
 import org.olat.repository.controllers.RepositoryDetailsController;
+import org.olat.repository.controllers.RepositorySearchController.Can;
 
 /**
  * 
@@ -530,7 +531,7 @@ public class QuestionListController extends AbstractItemListController implement
 		removeAsListenerAndDispose(importTestCtrl);
 		String[] allowed = new String[]{ TestFileResource.TYPE_NAME, SurveyFileResource.TYPE_NAME };
 		importTestCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq, allowed,
-				translate("import.repository"), false, false, false, false, true);
+				null, translate("import.repository"), false, false, false, false, true, Can.copyable);
 		listenTo(importTestCtrl);
 		
 		cmc = new CloseableModalController(getWindowControl(), translate("close"),
diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index 1b84b52097b1b7b5f49efc219b4489d944a10287..7bc715693f9dc6cb5aa054f41bd0d8c7e3431fb4 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -1175,11 +1175,36 @@ public class RepositoryManager extends BasicManager {
 			// if user has no author right he can not reference to any resource at all
 			return new ArrayList<RepositoryEntry>();
 		}
-		return queryResourcesLimitType(identity, resourceTypes, displayName, author, desc);
+		return queryResourcesLimitType(identity, resourceTypes, displayName, author, desc, true, false);
+	}
+	
+	/**
+	 * Search for resources that can be copied by an author. This is the case:
+	 * 1) the user is the owner of the resource
+	 * 2) the user is author and the resource is at least visible to authors (BA) 
+	 *    and the resource is set to canCopy
+	 * @param identity The user initiating the query
+	 * @param roles The current users role set
+	 * @param resourceTypes Limit search result to this list of repo types. Can be NULL
+	 * @param displayName Limit search to this repo title. Can be NULL
+	 * @param author Limit search to this user (Name, firstname, loginname). Can be NULL
+	 * @param desc Limit search to description. Can be NULL
+	 * @return List of repository entries
+	 */	
+	public List<RepositoryEntry> queryCopyableResourcesLimitType(Identity identity, Roles roles, List<String> resourceTypes,
+			String displayName, String author, String desc) {
+		if (identity == null) {
+			throw new AssertException("identity can not be null!");
+		}
+		if (!roles.isAuthor()) {
+			// if user has no author right he can not reference to any resource at all
+			return new ArrayList<RepositoryEntry>();
+		}
+		return queryResourcesLimitType(identity, resourceTypes, displayName, author, desc, false, true);
 	}
 		
 	public List<RepositoryEntry> queryResourcesLimitType(Identity identity, List<String> resourceTypes,
-			String displayName, String author, String desc) {
+			String displayName, String author, String desc, boolean checkCanReference, boolean checkCanCopy) {
 			
 		// cleanup some data: use null values if emtpy
 		if (resourceTypes != null && resourceTypes.size() == 0) resourceTypes = null;
@@ -1214,7 +1239,15 @@ public class RepositoryManager extends BasicManager {
 		int access;
 		if(identity != null) {
 			access = RepositoryEntry.ACC_OWNERS_AUTHORS;
-			query.append(" sgmsi.identity = :identity  or (v.access>=:access and v.canReference = true) ");
+			
+			query.append(" sgmsi.identity = :identity  or (v.access>=:access  ");
+			if(checkCanReference) {
+				query.append(" and v.canReference = true ");
+			}
+			if(checkCanCopy) {
+				query.append(" and v.canCopy = true ");
+			}
+			query.append(")");
 		} else {
 			access = RepositoryEntry.ACC_OWNERS;
 			query.append(" v.access>=:access ");
diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
index d561a53f783cddf9b2439a912e1d1f6f9a34d715..ed7b88411fd165223c0667d8aaa88516315da198 100644
--- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
+++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
@@ -58,6 +58,7 @@ import org.olat.portfolio.EPTemplateMapResource;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryTableModel;
+import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 
@@ -100,26 +101,29 @@ public class ReferencableEntriesSearchController extends BasicController {
 	
 	private final boolean canImport;
 	private final boolean canCreate;
+	private final Can canBe;
 
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String limitType, String commandLabel) {
-		this(wControl, ureq, new String[]{limitType}, null, commandLabel, true, true, true, false, false);
+		this(wControl, ureq, new String[]{limitType}, null, commandLabel, true, true, true, false, false, Can.referenceable);
 		setBasePackage(RepositoryManager.class);
 	}
 	
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String[] limitTypes, String commandLabel) {
-		this(wControl, ureq, limitTypes, null, commandLabel, true, true, true, false, false);
+		this(wControl, ureq, limitTypes, null, commandLabel, true, true, true, false, false, Can.referenceable);
 	}
 	
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String[] limitTypes, String commandLabel,
 			boolean canImport, boolean canCreate, boolean canDirectLaunch, boolean multiSelect, boolean adminSearch) {
-		this(wControl, ureq, limitTypes, null, commandLabel, canImport, canCreate, canDirectLaunch, multiSelect, adminSearch);
+		this(wControl, ureq, limitTypes, null, commandLabel, canImport, canCreate, canDirectLaunch, multiSelect, adminSearch, Can.referenceable);
 	}
 
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq,
 			String[] limitTypes, RepositoryEntryFilter filter, String commandLabel,
-			boolean canImport, boolean canCreate, boolean canDirectLaunch, boolean multiSelect, boolean adminSearch) {
+			boolean canImport, boolean canCreate, boolean canDirectLaunch, boolean multiSelect, boolean adminSearch,
+			Can canBe) {
 
 		super(ureq, wControl);
+		this.canBe = canBe;
 		this.canImport = canImport;
 		this.canCreate = canCreate;
 		this.limitTypes = limitTypes;
@@ -162,7 +166,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 		}
 
 		searchCtr.doSearchByOwnerLimitType(ureq.getIdentity(), limitTypes);
-		searchCtr.enableSearchforAllReferencalbeInSearchForm(true);
+		searchCtr.enableSearchforAllXXAbleInSearchForm(canBe);
 		mainVC.put("searchCtr", searchCtr.getInitialComponent());
 		
 		putInitialPanel(mainVC);
@@ -335,7 +339,14 @@ public class ReferencableEntriesSearchController extends BasicController {
 				if (clickedLink == myEntriesLink) {
 					searchCtr.doSearchByOwnerLimitType(ureq.getIdentity(), limitTypes);
 				} else if (clickedLink == allEntriesLink){
-					searchCtr.doSearchForReferencableResourcesLimitType(ureq.getIdentity(), limitTypes, ureq.getUserSession().getRoles());
+					switch(canBe) {
+						case referenceable:
+							searchCtr.doSearchForReferencableResourcesLimitType(ureq.getIdentity(), limitTypes, ureq.getUserSession().getRoles());
+							break;
+						case copyable:
+							searchCtr.doSearchForCopyableResourcesLimitType(ureq.getIdentity(), limitTypes, ureq.getUserSession().getRoles());
+							break;
+					}
 				} else if (clickedLink == searchEntriesLink){
 					searchCtr.displaySearchForm();
 				} else if (clickedLink == adminEntriesLink) {
@@ -440,5 +451,4 @@ public class ReferencableEntriesSearchController extends BasicController {
 	protected void doDispose() {
 		//
 	}
-
 }
diff --git a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
index b5e52a9f0f97dfb6fa9881de207b1cc94dfd40f0..655b1826008dc6e9a4d90e6bde0f1421a133cac1 100644
--- a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
@@ -91,7 +91,7 @@ public class RepositorySearchController extends BasicController implements Activ
 	private Link backLink, cancelButton;
 	private RepositoryEntry selectedEntry;
 	private List<RepositoryEntry> selectedEntries;
-	private boolean enableSearchforAllReferencalbeInSearchForm = false;
+	private Can enableSearchforAllInSearchForm;
 	private Link loginLink;
 	private SearchType searchType;
 	private RepositoryEntryFilter filter;
@@ -181,7 +181,7 @@ public class RepositorySearchController extends BasicController implements Activ
 		vc.contextPut("isAuthor", Boolean.valueOf(roles.isAuthor()));
 		vc.contextPut("withCancel", new Boolean(withCancel));
 		enableBackToSearchFormLink(false); // default, must be enabled explicitly
-		enableSearchforAllReferencalbeInSearchForm(false); // default
+		enableSearchforAllXXAbleInSearchForm(null); // default
 		putInitialPanel(vc);
 	}
 
@@ -208,12 +208,12 @@ public class RepositorySearchController extends BasicController implements Activ
 
 	/**
 	 * @param enable true: searches done by the search form will find all resources
-	 * that are referencable by the current user; false: searches done by the search 
+	 * that are referencable/copyable by the current user; false: searches done by the search 
 	 * form will find all resources that have at least BAR setting in the BARG configuration
 	 * list
 	 */
-	public void enableSearchforAllReferencalbeInSearchForm(boolean enable) {
-		enableSearchforAllReferencalbeInSearchForm = enable;
+	public void enableSearchforAllXXAbleInSearchForm(Can enable) {
+		enableSearchforAllInSearchForm = enable;
 	}
 	
 	/**
@@ -297,13 +297,16 @@ public class RepositorySearchController extends BasicController implements Activ
 		
 		List<RepositoryEntry> entries;
 		if(searchForm.isAdminSearch()) {
-			entries = rm.queryResourcesLimitType(null, restrictedTypes, name, author, desc);
-		} else {
+			entries = rm.queryResourcesLimitType(null, restrictedTypes, name, author, desc, true, false);
+		} else if(enableSearchforAllInSearchForm == Can.referenceable){
 			entries = rm.queryReferencableResourcesLimitType(ident, roles, restrictedTypes, name, author, desc);
+		} else if(enableSearchforAllInSearchForm == Can.copyable){
+			entries = rm.queryCopyableResourcesLimitType(ident, roles, restrictedTypes, name, author, desc);
+		} else {
+			entries = new ArrayList<RepositoryEntry>();
 		}
 		filterRepositoryEntries(entries);
 		repoTableModel.setObjects(entries);
-		//fxdiff VCRP-10: repository search with type filter
 		if(updateFilters) {
 			updateFilters(entries, null);
 		}
@@ -346,7 +349,32 @@ public class RepositorySearchController extends BasicController implements Activ
 		List<RepositoryEntry> entries = rm.queryReferencableResourcesLimitType(owner, roles, restrictedTypes, null, null, null);
 		filterRepositoryEntries(entries);
 		repoTableModel.setObjects(entries);
-		//fxdiff VCRP-10: repository search with type filter
+		tableCtr.setFilters(null, null);
+		tableCtr.modelChanged();
+		displaySearchResults(null);
+	}
+	
+	/**
+	 * Do search for all resources that the user can copy either because he 
+	 * is the owner of the resource or because he has author rights and the resource
+	 * is set to at least BA in the BARG settings and the resource has the flag
+	 * 'canCopy' set to true.
+	 * @param owner The current identity
+	 * @param limitTypes List of Types to limit the search
+	 * @param roles The users roles
+	 */
+	public void doSearchForCopyableResourcesLimitType(Identity owner, String[] limitTypes, Roles roles) {
+		RepositoryManager rm = RepositoryManager.getInstance();
+		List<String> restrictedTypes = new ArrayList<String>();
+		if(limitTypes == null) {
+			restrictedTypes = null;
+		}
+		else {
+			restrictedTypes.addAll(Arrays.asList(limitTypes));
+		}
+		List<RepositoryEntry> entries = rm.queryCopyableResourcesLimitType(owner, roles, restrictedTypes, null, null, null);
+		filterRepositoryEntries(entries);
+		repoTableModel.setObjects(entries);
 		tableCtr.setFilters(null, null);
 		tableCtr.modelChanged();
 		displaySearchResults(null);
@@ -579,7 +607,7 @@ public class RepositorySearchController extends BasicController implements Activ
 				} else if(searchType == SearchType.myAsTeacher) {
 					doSearchMyCoursesTeacher(urequest, typeFilter.getType(), false);
 				} else if(searchType == SearchType.searchForm) {
-					if(enableSearchforAllReferencalbeInSearchForm) {
+					if(enableSearchforAllInSearchForm != null) {
 						doSearchAllReferencables(urequest, typeFilter.getType(), false);
 					} else {
 						doSearch(urequest, typeFilter.getType(), false);
@@ -593,7 +621,7 @@ public class RepositorySearchController extends BasicController implements Activ
 				} else if(searchType == SearchType.myAsTeacher) {
 					doSearchMyCoursesTeacher(urequest);
 				} else if(searchType == SearchType.searchForm) {
-					if(enableSearchforAllReferencalbeInSearchForm) {
+					if(enableSearchforAllInSearchForm != null) {
 						doSearchAllReferencables(urequest, null, false);
 					} else {
 						doSearch(urequest, null, false);
@@ -619,7 +647,7 @@ public class RepositorySearchController extends BasicController implements Activ
 			if (event == Event.DONE_EVENT) {
 				if (searchForm.hasId())	{
 					doSearchById(searchForm.getId());
-				} else if (enableSearchforAllReferencalbeInSearchForm) {
+				} else if (enableSearchforAllInSearchForm != null) {
 					doSearchAllReferencables(urequest, null, true);
 				} else {
 					doSearch(urequest, null, true);
@@ -688,4 +716,9 @@ public class RepositorySearchController extends BasicController implements Activ
 		myAsTeacher,
 		searchForm,
 	}
+	
+	public enum Can {
+		referenceable,
+		copyable
+	}
 }
\ No newline at end of file