diff --git a/pom.xml b/pom.xml
index ac7886f018e5de2d5dc9a4ac79564edd7eb2956f..6665c43951e0e78902f71b4bafe69257a4a4418d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,7 +71,7 @@
 		<org.mysql.version>5.1.29</org.mysql.version>
 		<org.postgresql.version>9.3-1100-jdbc41</org.postgresql.version>
 		<org.infinispan.version>6.0.1.Final</org.infinispan.version>
-		<lucene.version>4.5.1</lucene.version>
+		<lucene.version>4.8.0</lucene.version>
 
 	    <!-- properties for testing and Q&A -->
 	    <!-- by default no tests are executed so far (April 2011). Use appropriate profiles and properties on the command line -->
@@ -1095,7 +1095,7 @@
 			<id>central</id>
 			<name>Maven Repository Switchboard</name>
 			<layout>default</layout>
-			<url>http://repo1.maven.org/maven2</url>
+			<url>http://central.maven.org/maven2</url>
 			<snapshots>
 				<enabled>false</enabled>
 			</snapshots>
@@ -1683,7 +1683,7 @@
 		<dependency>
 			<groupId>org.apache.pdfbox</groupId>
 			<artifactId>pdfbox</artifactId>
-			<version>1.8.4</version>
+			<version>1.8.5</version>
 			<exclusions>
 				<exclusion>
 					<groupId>commons-logging</groupId>
@@ -2174,13 +2174,13 @@
 		<dependency>
 		    <groupId>io.undertow</groupId>
 		    <artifactId>undertow-core</artifactId>
-		    <version>1.0.0.Final</version>
+		    <version>1.0.9.Final</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 		    <groupId>io.undertow</groupId>
 		    <artifactId>undertow-servlet</artifactId>
-		    <version>1.0.0.Final</version>
+		    <version>1.0.9.Final</version>
 			<scope>test</scope>
 		</dependency>
     
@@ -2273,17 +2273,15 @@
 				<version>2.9</version>
 			</plugin>
 			<!-- Javadoc -->
-
-
 			<!-- <reportSets> <reportSet> <reports> <report>javadoc</report> -->
 			<!-- Note: leave this line commented out if unit tests are not to be documented 
 				<report>test-javadoc</report>report> -->
 			<!-- </reports> </reportSet> </reportSets> </plugin> -->
 			<plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <version>2.3</version>
-      </plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jxr-plugin</artifactId>
+				<version>2.3</version>
+			</plugin>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>cobertura-maven-plugin</artifactId>
diff --git a/src/main/java/org/olat/commons/servlets/RSSServlet.java b/src/main/java/org/olat/commons/servlets/RSSServlet.java
index 196cedb6e5f205de7db7df62e4585053a46a3d32..5b874f0efac567c38893014fe10a55e67bc8dc1c 100644
--- a/src/main/java/org/olat/commons/servlets/RSSServlet.java
+++ b/src/main/java/org/olat/commons/servlets/RSSServlet.java
@@ -212,8 +212,6 @@ public class RSSServlet extends HttpServlet {
 		}
 
 		// create rss feed for user notifications
-		SyndFeed feed = new PersonalRSSFeed(identity, idToken);
-		//TODO implements some caching
-		return feed;
+		return new PersonalRSSFeed(identity);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java
index 42444297165767b14b19145e7ace2474aaf93b17..caa011ddf5b8104f399a44615860dfb5fbadb469 100644
--- a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java
+++ b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/UserCommentsAndRatingsController.java
@@ -168,7 +168,7 @@ public class UserCommentsAndRatingsController extends BasicController implements
 	 * 
 	 * @param ureq
 	 */
-	public void collapseComments(UserRequest ureq) {
+	void collapseComments() {
 		if (!canExpandToFullView) { throw new AssertException("Can not collapse messages when controller initialized as not expandable"); }
 		userCommentsAndRatingsVC.remove(commentsCtr.getInitialComponent());
 		removeAsListenerAndDispose(commentsCtr);
@@ -236,7 +236,7 @@ public class UserCommentsAndRatingsController extends BasicController implements
 			if (canExpandToFullView) {
 				if (isExpanded) {
 					// Collapse
-					collapseComments(ureq);
+					collapseComments();
 				} else {
 					// Expand now
 					expandComments(ureq);
diff --git a/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java b/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java
index c443b19c619ba9cba45ca07e90d6aab559ca7ff7..a4079f26009028933a109013dce9401ac15ebed1 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/PersonalRSSFeed.java
@@ -63,7 +63,7 @@ public class PersonalRSSFeed extends SyndFeedImpl {
 	 * @param identity The users identity
 	 * @param token The users RSS-authentication token
 	 */
-	public PersonalRSSFeed(Identity identity, String token) {
+	public PersonalRSSFeed(Identity identity) {
 		super();
 		setFeedType("rss_2.0");
 		setEncoding(RSSServlet.DEFAULT_ENCODING);
diff --git a/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java b/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java
index 858de5333c1fb0c4bfa47fa505c93b78569e6065..eaf8d3f66a54cfcf732c19ef0949b8661ba05645 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/model/NoSubscriptionInfo.java
@@ -25,6 +25,8 @@
 
 package org.olat.core.commons.services.notifications.model;
 
+import java.util.Locale;
+
 import org.olat.core.commons.services.notifications.SubscriptionInfo;
 
 /**
@@ -38,23 +40,16 @@ import org.olat.core.commons.services.notifications.SubscriptionInfo;
  */
 public class NoSubscriptionInfo extends SubscriptionInfo {
 
-	/**
-	 * 
-	 */
 	public NoSubscriptionInfo() {
 		super(null, null, null, null);
 	}
 
-	/**
-	 * @see org.olat.core.commons.services.notifications.SubscriptionInfo#getSpecificInfo(java.lang.String)
-	 */
-	public String getSpecificInfo(String mimeType) {
+	@Override
+	public String getSpecificInfo(String mimeType, Locale locale) {
 		return "";
 	}
 
-	/**
-	 * @see org.olat.core.commons.services.notifications.SubscriptionInfo#hasNews()
-	 */
+	@Override
 	public boolean hasNews() {
 		return false;
 	}
@@ -68,6 +63,5 @@ public class NoSubscriptionInfo extends SubscriptionInfo {
 	public String getCustomUrl() {
 		return null;
 	}
-
 }
 
diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
index 3abe3cedee1f87d44925ee8c0c76e4c9206d70f9..adec8f63db5d0e90a675e43dcd49e5480d035a66 100644
--- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
+++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
@@ -76,7 +76,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre
 		// Add back link before the bread crumbs, when pressed delegates click to current bread-crumb - 1
 		closeLink = LinkFactory.createCustomLink("close", "close", null, Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS, null, this);
 		closeLink.setIconLeftCSS("o_icon o_icon_close_tab");
-		closeLink.setCustomDisplayText(translator.translate("doclose"));
+		closeLink.setCustomDisplayText(translator.translate("close"));
 		closeLink.setAccessKey("x"); // allow navigation using keyboard
 	}
 	
diff --git a/src/main/java/org/olat/core/id/context/HistoryManager.java b/src/main/java/org/olat/core/id/context/HistoryManager.java
index 583e5793b56e4e52e36b3d6ab797cf55cb0a8653..fd641af6c7e3c09ba596bf240c14f9d3af385de5 100644
--- a/src/main/java/org/olat/core/id/context/HistoryManager.java
+++ b/src/main/java/org/olat/core/id/context/HistoryManager.java
@@ -65,6 +65,7 @@ public class HistoryManager extends BasicManager {
 		historyReadStream.omitField(RepositoryEntry.class, "participantGroup");
 		historyReadStream.omitField(RepositoryEntry.class, "tutorGroup");
 		historyReadStream.omitField(RepositoryEntry.class, "metaDataElements");
+		
 		historyReadStream.alias("org.olat.core.util.resource.OresHelper$1", Resourceable.class);
 		historyReadStream.alias("org.olat.core.util.resource.OresHelper$2", Resourceable.class);
 		historyReadStream.alias("org.olat.core.util.resource.OresHelper$3", Resourceable.class);
diff --git a/src/main/java/org/olat/core/util/mail/MailHelper.java b/src/main/java/org/olat/core/util/mail/MailHelper.java
index 4726711c64074493078382fce23e79f05a7731fd..440cda4f91fb08bb6795dce3ba68a12da6100b4e 100644
--- a/src/main/java/org/olat/core/util/mail/MailHelper.java
+++ b/src/main/java/org/olat/core/util/mail/MailHelper.java
@@ -71,7 +71,10 @@ public class MailHelper {
 	}
 	
 	public static String getMailFooter(MailBundle bundle) {
-		return getMailFooter(bundle.getFromId());
+		if(bundle.getFromId() != null) {
+			return getMailFooter(bundle.getFromId());
+		}
+		return getMailFooter(I18nModule.getDefaultLocale());
 	}
 	
 
diff --git a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
index d5ec81d572b9b75e033c99f9d21b9db627ddbcc3..994aee976cd4fe80390cd0ee9ebfc5c7674fd360 100644
--- a/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
+++ b/src/main/java/org/olat/core/util/prefs/db/DbStorage.java
@@ -116,7 +116,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{
 	private DbPrefs getPreferencesForProperty(Identity identity, Property guiProperty) {
 		DbPrefs prefs;
 		try {
-			prefs = createDbPrefsFrom(identity, guiProperty, guiProperty.getTextValue());
+			prefs = createDbPrefsFrom(identity, guiProperty.getTextValue());
 		} catch (Exception e) {
 			prefs = doGuiPrefsMigration( guiProperty, identity);
 		}
@@ -130,7 +130,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{
 		return prefs;
 	}
 
-	private DbPrefs createDbPrefsFrom(Identity identity, Property guiProperty, String textValue) {
+	private DbPrefs createDbPrefsFrom(Identity identity, String textValue) {
 		DbPrefs prefs = (DbPrefs) xstream.fromXML(textValue);
 		prefs.setIdentity(identity); // reset transient value
 		return prefs;
@@ -140,7 +140,7 @@ public class DbStorage extends LogDelegator implements PreferencesStorage{
 		String migratedTextValue = doCalendarRefactoringMigration(guiProperty.getTextValue());
 		// add new migration methode here 
 		try {
-			return createDbPrefsFrom(identity, guiProperty, migratedTextValue);
+			return createDbPrefsFrom(identity, migratedTextValue);
 		} catch (Exception e) {
 			// Migration failed => return empty db-prefs
 			return createEmptyDbPrefs(identity,false);
diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index e82f4c620edf9f5b80bec75da0611015b5fda8c7..ff3a7d6d91d7be27ea01d3191d0b4d170c52fa7a 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -294,19 +294,11 @@ public class CourseFactory extends BasicManager {
 			OLATResourceable courseResourceable = OresHelper.createOLATResourceableInstance(PersistingCourseImpl.class, resourceableId);
 			course = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseResourceable, new SyncerCallback<PersistingCourseImpl>() {
 				public PersistingCourseImpl execute() {
-					PersistingCourseImpl theCourse = null;
-					theCourse = getCourseFromCache(resourceableId);
+					PersistingCourseImpl theCourse = getCourseFromCache(resourceableId);
 					if (theCourse == null) {
-						long startTime = 0;
-						long endTime = 0;
-						if (log.isDebug()) startTime = System.currentTimeMillis();
 						theCourse = new PersistingCourseImpl(resourceableId);
 						theCourse.load();
-						if (log.isDebug()) endTime = System.currentTimeMillis();
 						putCourseInCache(resourceableId, theCourse);
-						long diff = 0;
-						if (log.isDebug()) diff = Long.valueOf(endTime - startTime);
-						if (log.isDebug()) 	log.debug("[[" + resourceableId + "[[" + diff + "[[" + theCourse.getCourseTitle());
 					}
 					return theCourse;
 				}
diff --git a/src/main/java/org/olat/course/PersistingCourseImpl.java b/src/main/java/org/olat/course/PersistingCourseImpl.java
index 656700a9f86c33070009270035a6ec2fef4b5390..26c9f60dcbff4acc4bc1c40e49e2d609a46f2779 100644
--- a/src/main/java/org/olat/course/PersistingCourseImpl.java
+++ b/src/main/java/org/olat/course/PersistingCourseImpl.java
@@ -126,7 +126,7 @@ public class PersistingCourseImpl implements ICourse, OLATResourceable, Serializ
 		// prepare filesystem and set course base path and course folder paths
 		prepareFilesystem();
 		courseConfig = CourseConfigManagerImpl.getInstance().loadConfigFor(this); // load or init defaults
-		courseEnvironment = new CourseEnvironmentImpl(this);		
+		courseEnvironment = new CourseEnvironmentImpl(this);
 	}
 	
 
diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java
index c03e1e59ba2947acd3405e70a2faa289cfc858da..0329bc61641b901fd7e2831adb2dbe544a0ab3cc 100644
--- a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java
+++ b/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java
@@ -34,8 +34,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.olat.core.commons.persistence.DB;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.commons.persistence.DBQuery;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.manager.BasicManager;
@@ -281,10 +279,11 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 			sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ")
 			  .append(" where statement.identity.key=:identityKey and statement.courseRepoKey=:repoKey");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("identityKey", identity.getKey());
-			query.setLong("repoKey", courseRepoEntryKey);
-			List<UserEfficiencyStatementImpl> statement = query.list();
+			List<UserEfficiencyStatementImpl> statement = dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), UserEfficiencyStatementImpl.class)
+					.setParameter("identityKey", identity.getKey())
+					.setParameter("repoKey", courseRepoEntryKey)
+					.getResultList();
 			if(statement.isEmpty()) {
 				return null;
 			}
@@ -301,10 +300,11 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 			sb.append("select statement from ").append(UserEfficiencyStatementLight.class.getName()).append(" as statement ")
 			  .append(" where statement.identity.key=:identityKey and statement.courseRepoKey=:repoKey");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("identityKey", identity.getKey());
-			query.setLong("repoKey", courseRepoEntryKey);
-			List<UserEfficiencyStatement> statement = query.list();
+			List<UserEfficiencyStatement> statement = dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), UserEfficiencyStatement.class)
+					.setParameter("identityKey", identity.getKey())
+					.setParameter("repoKey", courseRepoEntryKey)
+					.getResultList();
 			if(statement.isEmpty()) {
 				return null;
 			}
@@ -321,9 +321,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 			sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ")
 			  .append(" where statement.key=:key");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("key", key);
-			List<UserEfficiencyStatementImpl> statement = query.list();
+			List<UserEfficiencyStatementImpl> statement = dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), UserEfficiencyStatementImpl.class)
+					.setParameter("key", key)
+					.getResultList();
 			if(statement.isEmpty()) {
 				return null;
 			}
@@ -426,15 +427,14 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 	protected List<EfficiencyStatement> findEfficiencyStatements(Identity identity) {
 		List<EfficiencyStatement> efficiencyStatements = new ArrayList<EfficiencyStatement>();
 		try {
-			dbInstance = DBFactory.getInstance();
-
 			StringBuilder sb = new StringBuilder();
 			sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ")
 			  .append(" where statement.identity.key=:identityKey");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("identityKey", identity.getKey());
-			List<UserEfficiencyStatementImpl> statements = query.list();
+			List<UserEfficiencyStatementImpl> statements = dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), UserEfficiencyStatementImpl.class)
+					.setParameter("identityKey", identity.getKey())
+					.getResultList();
 			for(UserEfficiencyStatementImpl statement:statements) {
 				EfficiencyStatement s = (EfficiencyStatement)xstream.fromXML(statement.getStatementXml());
 				efficiencyStatements.add(s);
@@ -474,10 +474,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 			sb.append("select distinct(statement.identity) from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ")
 			  .append(" where statement.courseRepoKey=:repoKey");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("repoKey", courseRepoEntryKey);
-			List<Identity> identities = query.list();
-			return identities;
+			return dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), Identity.class)
+					.setParameter("repoKey", courseRepoEntryKey)
+					.getResultList();
 		} catch (Exception e) {
 			logError("findIdentitiesWithEfficiencyStatements: " + courseRepoEntryKey, e);
 			return Collections.emptyList();
@@ -495,9 +495,10 @@ public class EfficiencyStatementManager extends BasicManager implements UserData
 			sb.append("select statement from ").append(UserEfficiencyStatementImpl.class.getName()).append(" as statement ")
 			  .append(" where statement.courseRepoKey=:repoKey");
 
-			DBQuery query = dbInstance.createQuery(sb.toString());
-			query.setLong("repoKey", courseRepoEntryKey);
-			List<UserEfficiencyStatementImpl> statements = query.list();
+			List<UserEfficiencyStatementImpl> statements = dbInstance.getCurrentEntityManager()
+					.createQuery(sb.toString(), UserEfficiencyStatementImpl.class)
+					.setParameter("repoKey", courseRepoEntryKey)
+					.getResultList();
 			for(UserEfficiencyStatementImpl statement:statements) {
 				dbInstance.deleteObject(statement);
 			}
diff --git a/src/main/java/org/olat/course/editor/PublishStep01.java b/src/main/java/org/olat/course/editor/PublishStep01.java
index 7e212089cd1250e41b3334a7187c8bc4f26b765d..740ebfc551ba2d253bd6e5fd2d1923c83543d400 100644
--- a/src/main/java/org/olat/course/editor/PublishStep01.java
+++ b/src/main/java/org/olat/course/editor/PublishStep01.java
@@ -48,7 +48,7 @@ import org.olat.course.ICourse;
 import org.olat.login.LoginModule;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryModule;
-import org.olat.repository.ui.author.PropPupForm;
+import org.olat.repository.RepositoryService;
 
 /**
  * Description:<br>
@@ -129,9 +129,9 @@ class PublishStep01 extends BasicStep {
 
 		@Override
 		protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-			Translator pt = Util.createPackageTranslator(PropPupForm.class, getLocale(), getTranslator());
+			Translator pt = Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator());
 			
-			FormItemContainer fic = FormLayoutContainer.createCustomFormLayout("access", pt, this.velocity_root+"/publish_courseaccess.html");
+			FormItemContainer fic = FormLayoutContainer.createCustomFormLayout("access", pt, velocity_root + "/publish_courseaccess.html");
 			formLayout.add(fic);
 
 			List<String> keyList = new ArrayList<String>();
diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
index cfb3478500adb266d5b23e6df2daf2ebf566ce8b..0497e41d0d330e70c9009befc8879fd33ea64dd0 100644
--- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
@@ -56,7 +56,9 @@ import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.portfolio.EPTemplateMapResource;
+import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.portfolio.manager.EPStructureManager;
+import org.olat.portfolio.model.structel.PortfolioStructure;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryImportExport;
 import org.olat.repository.RepositoryManager;
@@ -426,8 +428,11 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode implements
 			RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(EPTemplateMapResource.TYPE_NAME);
 			RepositoryEntry re = handler.importResource(owner, rie.getDisplayName(), rie.getDescription(),
 					false, locale, rie.importGetExportedFile(), null);
-			//TODO missing map
-			PortfolioCourseNodeEditController.setReference(re, null, getModuleConfiguration());
+			if(re != null) {
+				EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
+				PortfolioStructure map = ePFMgr.loadPortfolioStructure(re.getOlatResource());
+				PortfolioCourseNodeEditController.setReference(re, map, getModuleConfiguration());
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java
index cad6852aa4aeeb0577bc8b09cf3e52f3b5611e72..1726e0620784f752f8bb770bcfb152ff2fcbe6fe 100644
--- a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java
+++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java
@@ -26,7 +26,6 @@
 package org.olat.ims.qti.repository.handlers;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
@@ -68,18 +67,6 @@ import de.bps.onyx.plugin.run.OnyxRunController;
  * 
  */
 public class QTISurveyHandler extends QTIHandler {
-	private static final boolean LAUNCHEABLE = true;
-	private static final boolean DOWNLOADEABLE = true;
-	private static final boolean EDITABLE = true;
-
-	static List<String> supportedTypes;
-
-	/**
-	 * Default constructor.
-	 */
-	public QTISurveyHandler() {
-		super();
-	}
 	
 	@Override
 	public boolean isCreate() {
@@ -108,43 +95,30 @@ public class QTISurveyHandler extends QTIHandler {
 		return super.importResource(initialAuthor, displayname, description, new SurveyFileResource(), file, filename);
 	}
 
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#getSupportedTypes()
-	 */
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	@Override
+	public String getSupportedType() {
+		return SurveyFileResource.TYPE_NAME;
 	}
 
-	static { // initialize supported types
-		supportedTypes = new ArrayList<String>(1);
-		supportedTypes.add(SurveyFileResource.TYPE_NAME);
-	}
-	
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#supportsLaunch()
-	 */
+	@Override
 	public boolean supportsLaunch(RepositoryEntry repoEntry) {
-		return LAUNCHEABLE;
+		return true;
 	}
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#supportsDownload()
-	 */
+
+	@Override
 	public boolean supportsDownload(RepositoryEntry repoEntry) {
-		return DOWNLOADEABLE;
+		return true;
 	}
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#supportsEdit()
-	 */
+
+	@Override
 	public boolean supportsEdit(RepositoryEntry repoEntry) {
 		if (OnyxModule.isOnyxTest(repoEntry.getOlatResource())) {
 			return false;
 		}
-		return EDITABLE;
+		return true;
 	}
 
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#getCreateWizardController(org.olat.core.id.OLATResourceable, org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
-	 */
+	@Override
 	public StepsMainRunController createWizardController(OLATResourceable res, UserRequest ureq, WindowControl wControl) {
 		throw new AssertException("Trying to get wizard where no creation wizard is provided for this type.");
 	}
@@ -174,9 +148,6 @@ public class QTISurveyHandler extends QTIHandler {
 		return layoutCtr;
 	}
 
-	/**
-	 * @see org.olat.repository.handlers.RepositoryHandler#getEditorController(org.olat.core.id.OLATResourceable org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
-	 */
 	@Override
 	public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) {
 		OLATResource res = re.getOlatResource();
@@ -199,11 +170,13 @@ public class QTISurveyHandler extends QTIHandler {
 			return null;
 		}
 	}
-	
+
+	@Override
 	protected String getDeletedFilePrefix() {
 		return "del_qtisurvey_"; 
 	}
-	
+
+	@Override
 	public WizardCloseResourceController createCloseResourceController(UserRequest ureq, WindowControl wControl, RepositoryEntry repositoryEntry) {
 		throw new AssertException("not implemented");
 	}
diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java
index 785f7e81ab543a4c695552f1c651681b1b2df4ca..5837e7b100da544333ae57f37dcb852342451e8f 100644
--- a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java
+++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java
@@ -26,7 +26,6 @@
 package org.olat.ims.qti.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 
@@ -68,13 +67,6 @@ import de.bps.onyx.plugin.run.OnyxRunController;
  * 
  */
 public class QTITestHandler extends QTIHandler {
-
-	private static List<String> supportedTypes = Collections.singletonList(TestFileResource.TYPE_NAME);
-
-	/**
-	 * Default construcotr.
-	 */
-	public QTITestHandler() { super(); } 
 	
 	@Override
 	public boolean isCreate() {
@@ -104,8 +96,8 @@ public class QTITestHandler extends QTIHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return TestFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/login/AfterLoginInterceptionController.java b/src/main/java/org/olat/login/AfterLoginInterceptionController.java
index d87eafb5a31e7f45d95ec2c5662d73bd1b6de60a..3170b4acf34083f73bf6224647bc6b399e7a0354 100644
--- a/src/main/java/org/olat/login/AfterLoginInterceptionController.java
+++ b/src/main/java/org/olat/login/AfterLoginInterceptionController.java
@@ -153,7 +153,7 @@ public class AfterLoginInterceptionController extends BasicController {
 		listenTo(wiz);
 
 		// get first Ctrl into Wizard
-		putControllerToPanel(ureq, wControl, 0);
+		putControllerToPanel(0);
 		vC.put("actualPanel", actualPanel);
 
 		cmc = new CloseableModalController(getWindowControl(), translate("close"), vC, true, translate("runonce.title"), false);	
@@ -201,7 +201,7 @@ public class AfterLoginInterceptionController extends BasicController {
 	 * @param wControl
 	 * @param ctrNr
 	 */
-	private void putControllerToPanel(UserRequest ureq, WindowControl wControl, int ctrNr) {
+	private void putControllerToPanel(int ctrNr) {
 		if (aftctrls.get(ctrNr) == null) return;
 		actualCtrNr = ctrNr;
 		wiz.setCurStep(ctrNr + 1);
@@ -277,7 +277,7 @@ public class AfterLoginInterceptionController extends BasicController {
 	 */
 	private void activateNextOrCloseModal(UserRequest ureq){
 		if ((actualCtrNr + 1) < aftctrls.size()) {
-			putControllerToPanel(ureq, getWindowControl(), actualCtrNr + 1);
+			putControllerToPanel(actualCtrNr + 1);
 		} else {
 			removeAsListenerAndDispose(actCtrl);
 			cmc.deactivate();
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 1a6baf9138f3e1ed893e2c47fa28e5091b0c699c..e47f6973dfcb9267fd6a7a1c7536f21a954c07f6 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -80,6 +80,7 @@ import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.repository.ui.author.CreateRepositoryEntryController;
 import org.olat.search.service.indexer.LifeFullIndexer;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -122,15 +123,16 @@ public class QuestionListController extends AbstractItemListController implement
 	private ReferencableEntriesSearchController importTestCtrl;
 	
 	private QuestionItemCollection itemCollection;
-	
-	private final LifeFullIndexer lifeFullIndexer;
-	private final RepositoryManager repositoryManager;
+
+	@Autowired
+	private LifeFullIndexer lifeFullIndexer;
+	@Autowired
+	private RepositoryManager repositoryManager;
+	@Autowired
+	private RepositoryHandlerFactory repositoryHandlerFactory;
 	
 	public QuestionListController(UserRequest ureq, WindowControl wControl, QuestionItemsSource source, String key) {
 		super(ureq, wControl, source, key);
-
-		lifeFullIndexer = CoreSpringFactory.getImpl(LifeFullIndexer.class);
-		repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
 	}
 
 	@Override
@@ -639,8 +641,8 @@ public class QuestionListController extends AbstractItemListController implement
 		removeAsListenerAndDispose(addController);
 		
 		String type = TestFileResource.TYPE_NAME;
-		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(type);
-		addController = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler);
+		RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type);
+		addController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
 		addController.setUserObject(new QItemList(items));
 		listenTo(addController);
 		cmc = new CloseableModalController(getWindowControl(), translate("close"), addController.getInitialComponent());
diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
index 96c2bc52dfb4d3735fee37acfcd12668e2c7c3a2..38ff0314b2571e473deb7c8fcce343ca478c5c2d 100755
--- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
@@ -1541,13 +1541,13 @@ public class EPStructureManager extends BasicManager {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select element from ").append(EPStructureElement.class.getName()).append(" element")
 		  .append(" left join fetch element.olatResource as oRes")
-		  .append(" left join fetch element.group as baseGroup");
+		  .append(" left join fetch element.group as baseGroup")
+		  .append(" where element.key=:key");;
 		
-		DBQuery query = dbInstance.createQuery(sb.toString());
-		query.setLong("key", key);
-		
-		@SuppressWarnings("unchecked")
-		List<PortfolioStructure> resources = query.list();
+		List<PortfolioStructure> resources = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), PortfolioStructure.class)
+				.setParameter("key", key)
+				.getResultList();
 		// if not found, it is an empty list
 		if (resources.isEmpty()) return null;
 		return resources.get(0);
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties
index f02902fad10fc21b948f1758bf71af3bc364f819..e20b126fdd2d691ee5923bd1c3a70c7affac92a3 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_ar.properties
@@ -40,6 +40,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
 portfolio.intro=\u0645\u0646 \u062E\u0644\u0627\u0644 \u0647\u0630\u0647 \u064A\u0645\u0643\u0646\u0643 \u062A\u0646\u0634\u064A\u0637 \u0623\u0648 \u0625\u064A\u0642\u0627\u0641 \u062A\u0646\u0634\u064A\u0637 \u0648\u0638\u064A\u0641\u0629 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648 \u0641\u0649 \u0623\u0648\u0644\u0627\u062A
 portfolio.module.enabled=\u062A\u0646\u0634\u064A\u0637 \u0627\u0644\u0628\u0648\u0631\u062A\u0641\u0648\u0644\u064A\u0648
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=\u0639\u0631\u0636\:
 view.mode.details=\u062A\u0641\u0627\u0635\u064A\u0644
 view.mode.table=\u062C\u062F\u0648\u0644
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties
index dbf9c0c338f7829abf9e9c7f7638315a8f847258..c3ac415340a47cd11a377bda729bd0785e83e49d 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_de.properties
@@ -69,8 +69,8 @@ othermaps.intro=$\:othermaps.menu.title.alt
 
 othermap.title=$\:admin.menu.title - Mappe
 othermap.intro=$\:othermaps.menu.title.alt
-site.title=ePortfolio
-
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 viewTab.all=Artefakte
 viewTab.browse=Tag-Browser
 viewTab.search=Suche
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties
index 72602daad4c4cb317b2bab3dbf850482f05da19c..c0aa0f9757f2b05674087cde987eae4cc7d33153 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_en.properties
@@ -56,6 +56,8 @@ portfolio.intro=With this you can (de)activate the entire ePortfolio functionali
 portfolio.module.change.warning=OLAT needs to be restarted to activate your changes throughout the system.
 portfolio.module.enabled=Activate ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=View\:
 view.mode.details=Details
 view.mode.table=Table
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties
index dd810faf63eae4bb3ac05ffbfb5e0b9f6787d48e..e2f741614a2c93f4e710bdfd8097d73e9631a0d4 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_fr.properties
@@ -56,6 +56,8 @@ portfolio.intro=Toutes les fonctions de l'ePortfolio peuvent \u00EAtre activ\u00
 portfolio.module.change.warning=Afin que les changements soient activ\u00E9s, vous devez red\u00E9marrer OpenOLAT.
 portfolio.module.enabled=Activer ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=Affichage\:
 view.mode.details=D\u00E9tails
 view.mode.table=Tableau
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties
index 122fce4a45d7509f5bfa8d2ea950b6ac8d31b7bb..3210b87fc8cdae3e19653c7cbdfac6c478ab9fbc 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_it.properties
@@ -55,6 +55,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
 portfolio.intro=Tutte le funzioni dell'ePortfolio possono essere attivate o disattivate.
 portfolio.module.enabled=Attivare ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=Visualizzazione\:
 view.mode.details=Dettagli
 view.mode.table=Tabella
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties
index 0be404ee7f6b450d89af69679b4626b88eb07bec..4bbd61c25f583696c0e4e50d9a238c2b1444f198 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_jp.properties
@@ -54,6 +54,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
 portfolio.intro=\u3053\u308C\u306B\u3088\u308A\u3001\u3042\u306A\u305F\u306FOLAT\u5185\u306Ee\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u6A5F\u80FD\u3092\u6709\u52B9\u307E\u305F\u306F\u7121\u52B9\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002
 portfolio.module.enabled=e\u30DD\u30FC\u30C8\u30D5\u30A9\u30EA\u30AA\u3092\u6709\u52B9\u5316\u3059\u308B
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=\u30D3\u30E5\u30FC\:
 view.mode.details=\u8A73\u7D30
 view.mode.table=\u30C6\u30FC\u30D6\u30EB
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
index 5f6be12a537561d880a3bde81109b9675a653716..0cae4c495d481f09675d796879433d85643d40bf 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_nl_NL.properties
@@ -55,6 +55,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
 portfolio.intro=Hiermee kunt u de gehele ePortfolio functionaliteit in OLAT (de)activeren.
 portfolio.module.enabled=Activeer ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=View\:
 view.mode.details=Details
 view.mode.table=Tabel
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties
index 89ae0816b4d9c304f67f62f90e2e586cad94c4e3..faf58a361d0fc934cbcdcc132d637ac999f1cb21 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pl.properties
@@ -41,6 +41,8 @@ portfolio.intro=Mo\u017Cesz tu w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u010
 portfolio.module.change.warning=Nale\u017Cy zrestartowa\u0107 OLAT, \u017Ceby aktywowa\u0107 zmiany w systemie.
 portfolio.module.enabled=W\u0142\u0105cz ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=Widok\:
 view.mode.details=Szczeg\u00F3\u0142y
 view.mode.table=Tabela
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
index 74e18e6a5b597cd1301a8c2d4c60736979d1088a..b2eef955edfbd5fc9a21be5010194e7ffeb1aa8d 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_pt_BR.properties
@@ -56,6 +56,8 @@ portfolio.intro=Com isso voc\u00EA pode (des)ativar a funcionalidade ePortfolio
 portfolio.module.change.warning=OLAT precisa ser reiniciado para ativar as suas altera\u00E7\u00F5es ao longo do sistema.
 portfolio.module.enabled=Ativar ePortfolio
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=Visualizar\:
 view.mode.details=Detalhes
 view.mode.table=Tabela
diff --git a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
index f8ffff39529cc1fddfe5619f167608511b7af095..2fc9658334e476ee6bbbdf5ec3395215dd49baac 100644
--- a/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/portfolio/ui/_i18n/LocalStrings_zh_CN.properties
@@ -55,6 +55,8 @@ othermaps.title=$\:admin.menu.title - $\:othermaps.menu.title
 portfolio.intro=\u901A\u8FC7\u6B64\u529F\u80FD\uFF0C\u60A8\u53EF\u4EE5\uFF08\u64A4\u9500\uFF09\u6FC0\u6D3BOLAT\u4E2D\u7684\u6574\u4E2A\u7535\u5B50\u6587\u6863\u7684\u529F\u80FD\u3002
 portfolio.module.enabled=\u6FC0\u6D3B\u7535\u5B50\u6863\u6848
 portfolio.title=$\:admin.menu.title
+site.title=$\:admin.menu.title
+site.title.alt=$\:admin.menu.title
 view.mode=\u67E5\u770B\u65B9\u5F0F\uFF1A
 view.mode.details=\u8BE6\u7EC6\u5185\u5BB9
 view.mode.table=\u8868\u683C\u663E\u793A
diff --git a/src/main/java/org/olat/repository/RepositoryEntry.java b/src/main/java/org/olat/repository/RepositoryEntry.java
index 87787bab5c2f79957cd77a03b9051876504d30b8..a340c04b1c21d40534c413b519088af3f4c0151e 100644
--- a/src/main/java/org/olat/repository/RepositoryEntry.java
+++ b/src/main/java/org/olat/repository/RepositoryEntry.java
@@ -197,8 +197,9 @@ public class RepositoryEntry implements CreateInfo, Persistable , RepositoryEntr
 	 * @param softkey
 	 */
 	public void setSoftkey(String softkey) {
-		if (softkey.length() > 36)
+		if (softkey.length() > 36) {
 			throw new AssertException("Trying to set a softkey which is too long...");
+		}
 		this.softkey = softkey;
 	}
 	
diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index 11d22005b96746e7857e97dec8ab14650f11a029..d0873bf20f2a5eefaaca52cd6c48cfac98ce3423 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -36,9 +36,9 @@ import java.util.List;
 import java.util.Map;
 
 import javax.persistence.LockModeType;
+import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 
-import org.hibernate.type.StandardBasicTypes;
 import org.olat.admin.securitygroup.gui.IdentitiesAddEvent;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.Group;
@@ -1168,23 +1168,23 @@ public class RepositoryManager extends BasicManager {
 	}
 	
 	public int countGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params) {
-		DBQuery dbQuery = createGenericANDQueryWithRolesRestriction(params, false, true);
-		Number count = (Number)dbQuery.uniqueResult();
+		Query dbQuery = createGenericANDQueryWithRolesRestriction(params, false, true);
+		Number count = (Number)dbQuery.getSingleResult();
 		return count.intValue();
 	}
 	
 	public List<RepositoryEntry> genericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, int firstResult, int maxResults, boolean orderBy) {
 		
-		DBQuery dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, false);
+		Query dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, false);
 		dbQuery.setFirstResult(firstResult);
 		if(maxResults > 0) {
 			dbQuery.setMaxResults(maxResults);
 		}
-		List<RepositoryEntry> res = dbQuery.list();
+		List<RepositoryEntry> res = dbQuery.getResultList();
 		return res;
 	}
 	
-	private DBQuery createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, boolean count) {
+	private Query createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, boolean count) {
 		String displayName = params.getDisplayName();
 		String author = params.getAuthor();
 		String desc = params.getDesc();
@@ -1241,20 +1241,20 @@ public class RepositoryManager extends BasicManager {
 	             .append(")))");
 			
 		} else if (params.isOnlyOwnedResources()) {
-			query.append(" where v.access>0 and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership  ")
+			query.append(" where (v.access>0 and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership  ")
 		         .append("    where rel.entry=v and rel.group=baseGroup and membership.group=baseGroup")
 		         .append("      and membership.identity.key=:identityKey and membership.role='").append(GroupRoles.owner.name()).append("'")
-		         .append("  )");
+		         .append("  ))");
 			setIdentity = true;
 		} else if (params.isOnlyExplicitMember()) {
-			query.append(" where  v.access>=").append(RepositoryEntry.ACC_USERS)
+			query.append(" where  (v.access>=").append(RepositoryEntry.ACC_USERS)
 			     .append(" or (")
 			     .append("  v.access=").append(RepositoryEntry.ACC_OWNERS).append(" and v.membersOnly=true")
 			     .append("  and exists (select rel from repoentrytogroup as rel, bgroup as baseGroup, bgroupmember as membership  ")
 			     .append("    where rel.entry=v and rel.group=baseGroup and membership.group=baseGroup and membership.identity.key=:identityKey ")
 			     .append("      and membership.role in ('").append(GroupRoles.owner.name()).append("','").append(GroupRoles.coach.name()).append("','").append(GroupRoles.participant.name()).append("')")
 			     .append("  )")
-			     .append(" )");
+			     .append(" ))");
 			
 			setIdentity = true;
 		} else {
@@ -1333,8 +1333,8 @@ public class RepositoryManager extends BasicManager {
 		if(!count && orderBy) {
 			query.append(" order by v.displayname, v.key ASC");
 		}
-
-		DBQuery dbQuery = dbInstance.createQuery(query.toString());
+		
+		Query dbQuery = dbInstance.getCurrentEntityManager().createQuery(query.toString());
 		if(institut) {
 			dbQuery.setParameter("institution", institution);
 		}
@@ -1351,10 +1351,10 @@ public class RepositoryManager extends BasicManager {
 			dbQuery.setParameter("desc", desc);
 		}
 		if (var_resourcetypes) {
-			dbQuery.setParameterList("resourcetypes", resourceTypes, StandardBasicTypes.STRING);
+			dbQuery.setParameter("resourcetypes", resourceTypes);
 		}
 		if(params.getRepositoryEntryKeys() != null && !params.getRepositoryEntryKeys().isEmpty()) {
-			dbQuery.setParameterList("entryKeys", params.getRepositoryEntryKeys());
+			dbQuery.setParameter("entryKeys", params.getRepositoryEntryKeys());
 		}
 		if(StringHelper.containsNonWhitespace(params.getExternalId())) {
 			dbQuery.setParameter("externalId", params.getExternalId());
diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
index 4979f0e9ed0033866a3b9eb7b57945b3ed4099b3..ef7851879a41d2aed9cde16300e79bba578b4929 100644
--- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
+++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java
@@ -32,6 +32,7 @@ import java.util.List;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.dropdown.Dropdown;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.segmentedview.SegmentViewComponent;
@@ -55,13 +56,14 @@ import org.olat.ims.qti.fileresource.SurveyFileResource;
 import org.olat.ims.qti.fileresource.TestFileResource;
 import org.olat.portfolio.EPTemplateMapResource;
 import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
+import org.olat.repository.RepositoryService;
 import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.repository.ui.RepositoryTableModel;
 import org.olat.repository.ui.author.CreateRepositoryEntryController;
 import org.olat.repository.ui.author.ImportRepositoryEntryController;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -91,7 +93,10 @@ public class ReferencableEntriesSearchController extends BasicController {
 
 	private SegmentViewComponent segmentView;
 	private Link myEntriesLink, allEntriesLink, searchEntriesLink, adminEntriesLink;
-	private Link createRessourceButton, importRessourceButton;
+	private Link importRessourceButton;
+	private Component createRessourceCmp;
+	private List<Link> createRessourceButtons;
+	
 	private CreateRepositoryEntryController createController;
 	private ImportRepositoryEntryController importController;
 	private CloseableModalController cmc;
@@ -104,10 +109,12 @@ public class ReferencableEntriesSearchController extends BasicController {
 	private final Can canBe;
 	
 	private Object userObject;
+	
+	@Autowired
+	private RepositoryHandlerFactory repositoryHandlerFactory;
 
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String limitType, String commandLabel) {
-		this(wControl, ureq, new String[]{limitType}, null, commandLabel, true, true, true, false, false, Can.referenceable);
-		setBasePackage(RepositoryManager.class);
+		this(wControl, ureq, new String[]{ limitType }, null, commandLabel, true, true, true, false, false, Can.referenceable);
 	}
 	
 	public ReferencableEntriesSearchController(WindowControl wControl, UserRequest ureq, String[] limitTypes, String commandLabel) {
@@ -129,7 +136,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 		this.canImport = canImport;
 		this.canCreate = canCreate;
 		this.limitTypes = limitTypes;
-		setBasePackage(RepositoryManager.class);
+		setBasePackage(RepositoryService.class);
 		mainVC = createVelocityContainer("referencableSearch");
 		
 		if(limitTypes != null && limitTypes.length == 1 && limitTypes[0] != null) {
@@ -142,8 +149,21 @@ public class ReferencableEntriesSearchController extends BasicController {
 		
 		// do instantiate buttons
 		if (canCreate && isCreateButtonVisible()) {
-			createRessourceButton = LinkFactory.createButtonSmall("cmd.create.ressource", mainVC, this);
-			createRessourceButton.setElementCssClass("o_sel_repo_popup_create_resource");
+			if(limitTypes != null && limitTypes.length == 1) {
+				Link createButton = LinkFactory.createButtonSmall("cmd.create.ressource", mainVC, this);
+				createButton.setElementCssClass("o_sel_repo_popup_create_resource");
+				RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(limitTypes[0]);
+				createButton.setUserObject(handler);
+				createRessourceCmp = createButton;
+			} else if(limitTypes != null && limitTypes.length > 1) {
+				Dropdown dropdown = new Dropdown("cmd.create.ressource", "cmd.create.ressource", false, getTranslator());
+				for(String limitType:limitTypes) {
+					RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(limitType);
+					Link createLink = LinkFactory.createLink(handler.getSupportedType(), getTranslator(), this);
+					dropdown.addComponent(createLink);
+				}
+				createRessourceCmp = dropdown;
+			}
 		}
 		if (canImport && isImportButtonVisible()) {
 			importRessourceButton = LinkFactory.createButtonSmall("cmd.import.ressource", mainVC, this);
@@ -263,11 +283,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 		return selectedRepositoryEntries;
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
+	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
 		if(source == segmentView) {
 			if(event instanceof SegmentViewEvent) {
@@ -294,11 +310,10 @@ public class ReferencableEntriesSearchController extends BasicController {
 					searchCtr.displayAdminSearchForm();
 				}
 			}
-		} else if(source == createRessourceButton) {
+		} else if(source == createRessourceCmp || createRessourceButtons.contains(source)) {
 			removeAsListenerAndDispose(createController);
-			String type = null;
-			RepositoryHandler handler = null;
-			createController = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler);
+			RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject();
+			createController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
 			listenTo(createController);
 			
 			removeAsListenerAndDispose(cmc);
@@ -322,11 +337,7 @@ public class ReferencableEntriesSearchController extends BasicController {
 		}
 	}
 
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
+	@Override
 	public void event(UserRequest ureq, Controller source, Event event) {
 		String cmd = event.getCommand();
 		if (source == searchCtr) {
diff --git a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
index e8d0ea0d436bf18306a5bc71ff6aace3c6b4cc77..b9c84435e5199261b4c01f1bc81bd9f2b83dc6df 100644
--- a/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositorySearchController.java
@@ -50,7 +50,6 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.Roles;
 import org.olat.core.id.UserConstants;
@@ -59,6 +58,7 @@ import org.olat.core.id.context.StateEntry;
 import org.olat.core.util.Util;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
+import org.olat.repository.RepositoryService;
 import org.olat.repository.model.SearchRepositoryEntryParameters;
 import org.olat.repository.ui.RepositoryTableModel;
 
@@ -79,10 +79,9 @@ import org.olat.repository.ui.RepositoryTableModel;
 */
 public class RepositorySearchController extends BasicController implements Activateable2 {
 
-	private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(RepositoryManager.class);
+	private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(RepositorySearchController.class);
 
 	protected VelocityContainer vc;
-	protected Translator translator;
 	protected RepositoryTableModel repoTableModel;
 	protected SearchForm searchForm;
 	protected TableController tableCtr;
@@ -106,8 +105,7 @@ public class RepositorySearchController extends BasicController implements Activ
 	 */
 	public RepositorySearchController(String selectButtonLabel, UserRequest ureq, WindowControl myWControl,
 			boolean withCancel, boolean enableDirectLaunch, boolean multiSelect) {
-		//fxdiff VCRP-10: repository search with type filter
-		super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()));
+		super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale()));
 		init(selectButtonLabel, ureq, withCancel, enableDirectLaunch, multiSelect, new String[]{}, null);
 	}
 	
@@ -127,8 +125,7 @@ public class RepositorySearchController extends BasicController implements Activ
 
 	public RepositorySearchController(String selectButtonLabel, UserRequest ureq, WindowControl myWControl,
 			boolean withCancel, boolean enableDirectLaunch, boolean multiSelect, String[] limitTypes, RepositoryEntryFilter filter) {
-		//fxdiff VCRP-10: repository search with type filter
-		super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()));
+		super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale()));
 		init(selectButtonLabel, ureq, withCancel, enableDirectLaunch, multiSelect, limitTypes, filter);
 	}
 	
@@ -136,18 +133,16 @@ public class RepositorySearchController extends BasicController implements Activ
 	 * @param myWControl
 	 */
 	public RepositorySearchController(UserRequest ureq, WindowControl myWControl) {
-		//fxdiff VCRP-10: repository search with type filter
-		super(ureq, myWControl, Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale()));
+		super(ureq, myWControl, Util.createPackageTranslator(RepositoryService.class, ureq.getLocale()));
 	}
 
 	private void init(String selectButtonLabel, UserRequest ureq, boolean withCancel, boolean enableDirectLaunch, boolean multiSelect,
 			String[] limitTypes, RepositoryEntryFilter filter) {
 		
 		this.filter = filter;
-		translator = Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale());
 		Roles roles = ureq.getUserSession().getRoles();
 		
-		vc = new VelocityContainer("reposearch", VELOCITY_ROOT + "/search.html", translator, this);
+		vc = new VelocityContainer("reposearch", VELOCITY_ROOT + "/search.html", getTranslator(), this);
 
 		removeAsListenerAndDispose(searchForm);
 		searchForm = new SearchForm(ureq, getWindowControl(), withCancel, roles.isOLATAdmin(), limitTypes);
@@ -161,17 +156,16 @@ public class RepositorySearchController extends BasicController implements Activ
 			tableConfig.setPreferencesOffered(true, "repositorySearchResult_v2");
 		}
 		
-		//fxdiff VCRP-10: repository search with type filter
-		String filterTitle = translator.translate("search.filter.type");
-		String noFilterOption = translator.translate("search.filter.showAll");
-		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), null, null, filterTitle, noFilterOption, true, translator);
+		String filterTitle = translate("search.filter.type");
+		String noFilterOption = translate("search.filter.showAll");
+		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), null, null, filterTitle, noFilterOption, true, getTranslator());
 		if(multiSelect) {
 			tableCtr.setMultiSelect(multiSelect);
 			tableCtr.addLabeledMultiSelectAction(selectButtonLabel, "mselect");
 		}
 		listenTo(tableCtr);
 		
-		repoTableModel = new RepositoryTableModel(translator);
+		repoTableModel = new RepositoryTableModel(getTranslator());
 		ColumnDescriptor sortCol = repoTableModel.addColumnDescriptors(tableCtr, selectButtonLabel, enableDirectLaunch);
 		tableCtr.setTableDataModel(repoTableModel);
 		tableCtr.setSortColumn(sortCol, true);
diff --git a/src/main/java/org/olat/repository/controllers/SearchForm.java b/src/main/java/org/olat/repository/controllers/SearchForm.java
index d9e06e3b529a76dd49bcfdf2fc957c9cc7918301..1eade49a472de95b6066e009a0c23c012ac7e4c9 100644
--- a/src/main/java/org/olat/repository/controllers/SearchForm.java
+++ b/src/main/java/org/olat/repository/controllers/SearchForm.java
@@ -47,6 +47,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.logging.AssertException;
+import org.olat.core.util.Util;
 import org.olat.course.CourseModule;
 import org.olat.fileresource.types.AnimationFileResource;
 import org.olat.fileresource.types.BlogFileResource;
@@ -68,6 +69,7 @@ import org.olat.ims.qti.fileresource.SurveyFileResource;
 import org.olat.ims.qti.fileresource.TestFileResource;
 import org.olat.portfolio.EPTemplateMapResource;
 import org.olat.repository.RepositoryModule;
+import org.olat.repository.RepositoryService;
 
 /**
  * Initial Date:  08.07.2003
@@ -113,6 +115,12 @@ public class SearchForm extends FormBasicController{
 		}
 	}
 
+	public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin, String[] limitTypes) {
+		this(ureq, wControl, withCancel, isAdmin);
+		this.limitTypes = limitTypes;
+		update();
+	}
+	
 	/**
 	 * Generic search form.
 	 * @param name Internal form name.
@@ -121,18 +129,15 @@ public class SearchForm extends FormBasicController{
 	 * @param isAdmin Is calling identity an administrator? If yes, allow search by ID
 	 * @param limitTypes Limit searches to specific types.
 	 */
-	public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin) {
+	private SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin) {
 		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()));		
+		
 		this.withCancel = withCancel;
 		this.isAdmin = isAdmin;
 		managedEnabled = CoreSpringFactory.getImpl(RepositoryModule.class).isManagedRepositoryEntries();
 		initForm(ureq);
 	}
-	public SearchForm(UserRequest ureq, WindowControl wControl, boolean withCancel, boolean isAdmin, String[] limitTypes) {
-		this(ureq, wControl, withCancel, isAdmin);
-		this.limitTypes = limitTypes;
-		update();
-	}
 	
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
@@ -148,7 +153,9 @@ public class SearchForm extends FormBasicController{
 	/**
 	 * @return Is ID field available?
 	 */
-	public boolean hasId() { return (id != null && !id.isEmpty()); }
+	public boolean hasId() {
+		return (id != null && !id.isEmpty());
+	}
 	
 	/**
 	 * @return Return value of ID field.
@@ -182,7 +189,7 @@ public class SearchForm extends FormBasicController{
 	}
 
 	/**
-	 * @return Descritpion field value.
+	 * @return Description field value.
 	 */
 	public String getDescription() {
 		return description.getValue();
diff --git a/src/main/java/org/olat/repository/controllers/_content/results.html b/src/main/java/org/olat/repository/controllers/_content/results.html
new file mode 100644
index 0000000000000000000000000000000000000000..776fa38221e27f8df1305e1a5233f0d8295ae2d7
--- /dev/null
+++ b/src/main/java/org/olat/repository/controllers/_content/results.html
@@ -0,0 +1,24 @@
+#if ($withBack)
+	$r.render("backLink")
+	<br />
+	<br />	
+#end
+#if ($isGuest)
+	<div class="b_warning" >${r.translate("filtered.first")}${r.render("repo.login")}${r.translate("filtered.second")}</div>
+#end
+$r.render("repotable")
+#if ($hasResults)
+	<div class="b_xsmall">$r.translate("table.header.access.desc")</div>
+	#if ($withCancel)
+		<p>
+			$r.render("cancel")
+		<p>
+	#end
+#else
+	<br />
+	#if ($withCancel)
+		<p>
+			$r.render("cancel")
+		<p>
+	#end
+#end
diff --git a/src/main/java/org/olat/repository/_content/search.html b/src/main/java/org/olat/repository/controllers/_content/search.html
similarity index 100%
rename from src/main/java/org/olat/repository/_content/search.html
rename to src/main/java/org/olat/repository/controllers/_content/search.html
diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java
index 7b5a3a370037274b08dceb9312188510d861a209..b0ee44eda8308764e843c2aefcf53995aaf4e59a 100644
--- a/src/main/java/org/olat/repository/handlers/BlogHandler.java
+++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java
@@ -20,8 +20,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.CoreSpringFactory;
@@ -74,8 +72,6 @@ import org.olat.resource.references.ReferenceManager;
 // Loads of parameters are unused
 public class BlogHandler implements RepositoryHandler {
 
-	private static final List<String> supportedTypes = Collections.singletonList(BlogFileResource.TYPE_NAME);
-
 	@Override
 	public boolean isCreate() {
 		return true;
@@ -200,8 +196,8 @@ public class BlogHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return BlogFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java
index 6a578c39cbe20065b834b0f2bf630e306716bc16..e2aee84ad9aededd32778b8bc0774397c471cb51 100644
--- a/src/main/java/org/olat/repository/handlers/CourseHandler.java
+++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java
@@ -33,8 +33,6 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 import java.util.UUID;
 
@@ -132,8 +130,6 @@ public class CourseHandler implements RepositoryHandler {
 
 	public static final String EDITOR_XML = "editortreemodel.xml";
 	private static final OLog log = Tracing.createLoggerFor(CourseHandler.class);
-
-	private static final List<String> supportedTypes = Collections.singletonList(CourseModule.getCourseTypeName());
 	
 	@Override
 	public boolean isCreate() {
@@ -445,8 +441,8 @@ public class CourseHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return CourseModule.getCourseTypeName();
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
index 80e5f9f3c7269f7d994df34c94ddeea9819ac64b..a88f97e7d3af27cbe9c01b2be89f5749aab09268 100644
--- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
@@ -26,8 +26,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 import java.util.Properties;
 
@@ -82,7 +80,6 @@ import org.olat.resource.references.ReferenceManager;
  */
 public class GlossaryHandler implements RepositoryHandler {
 
-	private static final List<String> supportedTypes = Collections.singletonList(GlossaryResource.TYPE_NAME);
 	
 	public static final String PROCESS_CREATENEW = "cn";
 	public static final String PROCESS_UPLOAD = "pu";
@@ -154,8 +151,8 @@ public class GlossaryHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return GlossaryResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
index 282f9440f8feee9a431e581086264fedf740b348..45b0fb268c60808552f88062d8fdf1e521686fb3 100644
--- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
@@ -26,8 +26,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.admin.quota.QuotaConstants;
@@ -90,11 +88,6 @@ public class ImsCPHandler extends FileHandler {
 	
 	private static final OLog log = Tracing.createLoggerFor(ImsCPHandler.class);
 	
-	public static final String PROCESS_CREATENEW = "new";
-	public static final String PROCESS_IMPORT = "add";
-	
-	private static final List<String> supportedTypes = Collections.singletonList(ImsCPFileResource.TYPE_NAME);
-	
 	@Override
 	public boolean isCreate() {
 		return true;
@@ -204,8 +197,8 @@ public class ImsCPHandler extends FileHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return ImsCPFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
index ad7026d1e6a636e0d09ef79f7b303f6b11544858..58d04ea109d91e1df69f78b3eb4bb32f6fe2f504 100644
--- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
@@ -20,8 +20,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.CoreSpringFactory;
@@ -73,10 +71,6 @@ import org.olat.resource.references.ReferenceManager;
  */
 // Loads of parameters are unused
 public class PodcastHandler implements RepositoryHandler {
-	public static final String PROCESS_CREATENEW = "create_new";
-	public static final String PROCESS_UPLOAD = "upload";
-
-	private static final List<String> supportedTypes = Collections.singletonList(PodcastFileResource.TYPE_NAME);
 	
 	@Override
 	public boolean isCreate() {
@@ -200,8 +194,8 @@ public class PodcastHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return PodcastFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
index 1602daf15ae0a3f826825ae3e1a0da9218f6650b..ef3b9cf2493c047d01d4d03ac612df771f2911e6 100644
--- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
@@ -22,8 +22,6 @@ package org.olat.repository.handlers;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.CoreSpringFactory;
@@ -84,11 +82,6 @@ import de.bps.onyx.plugin.StreamMediaResource;
 public class PortfolioHandler implements RepositoryHandler {
 	private static final OLog log = Tracing.createLoggerFor(PortfolioHandler.class);
 	
-	public static final String PROCESS_CREATENEW = "create_new";
-	public static final String PROCESS_UPLOAD = "upload";
-	
-	private static final List<String> supportedTypes = Collections.singletonList(EPTemplateMapResource.TYPE_NAME);
-	
 	@Override
 	public boolean isCreate() {
 		return true;
@@ -133,7 +126,16 @@ public class PortfolioHandler implements RepositoryHandler {
 	@Override
 	public RepositoryEntry importResource(Identity initialAuthor, String displayname, String description, boolean withReferences,
 			Locale locale, File file, String filename) {
-		return null;
+		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
+		EPStructureManager eSTMgr = CoreSpringFactory.getImpl(EPStructureManager.class);
+		
+		PortfolioStructure structure = EPXStreamHandler.getAsObject(file, false);
+		OLATResource resource = eSTMgr.createPortfolioMapTemplateResource();
+		RepositoryEntry re = CoreSpringFactory.getImpl(RepositoryService.class)
+				.create(initialAuthor, "", displayname, description, resource, RepositoryEntry.ACC_OWNERS);
+		
+		ePFMgr.importPortfolioMapTemplate(structure, resource);
+		return re;
 	}
 	
 	@Override
@@ -243,7 +245,7 @@ public class PortfolioHandler implements RepositoryHandler {
 	@Override
 	public MainLayoutController createLaunchController(RepositoryEntry re, UserRequest ureq,
 			WindowControl wControl) {
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
+		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
 		PortfolioStructureMap map = (PortfolioStructureMap)ePFMgr.loadPortfolioStructure(re.getOlatResource());
 		EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, map, ePFMgr);
 		Controller epCtr = EPUIFactory.createPortfolioStructureMapController(ureq, wControl, map, secCallback);
@@ -252,14 +254,12 @@ public class PortfolioHandler implements RepositoryHandler {
 			layoutCtr.addActivateableDelegate((Activateable2)epCtr);
 		}
 		layoutCtr.addDisposableChildController(epCtr);
-		//fxdiff VCRP-1: access control of learn resources
-		RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, re, layoutCtr);
-		return wrapper;
+		return new RepositoryMainAccessControllerWrapper(ureq, wControl, re, layoutCtr);
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return EPTemplateMapResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
index 7a30061a5cd6400b9e1d3d10e04f9e9489f44475..8676234caaf511b4f44fe6d91c02c25263d1abc2 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
@@ -26,7 +26,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.gui.UserRequest;
@@ -58,7 +57,7 @@ public interface RepositoryHandler {
 	/**
 	 * @return Return the typeNames of OLATResourceable this Handler can handle.
 	 */
-	public List<String> getSupportedTypes();
+	public String getSupportedType();
 	
 	/**
 	 * This resource support creation within OpenOLAT.
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
index 95773cdb594f5ceac8834e8fe4adc3ef58863a4a..6f91ecc6abc5e8e4e7b3ffd2ca160af297482b2c 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandlerFactory.java
@@ -32,6 +32,15 @@ import java.util.Set;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.AssertException;
+import org.olat.fileresource.types.AnimationFileResource;
+import org.olat.fileresource.types.DocFileResource;
+import org.olat.fileresource.types.FileResource;
+import org.olat.fileresource.types.ImageFileResource;
+import org.olat.fileresource.types.MovieFileResource;
+import org.olat.fileresource.types.PdfFileResource;
+import org.olat.fileresource.types.PowerpointFileResource;
+import org.olat.fileresource.types.SoundFileResource;
+import org.olat.fileresource.types.XlsFileResource;
 import org.olat.repository.RepositoryEntry;
 import org.springframework.stereotype.Service;
 
@@ -50,7 +59,6 @@ public class RepositoryHandlerFactory {
 	static {
 		handlerMap = new HashMap<String, RepositoryHandler>(21);
 
-		registerHandler(new WebDocumentHandler());
 		registerHandler(new ImsCPHandler());
 		registerHandler(new SCORMCPHandler());
 		registerHandler(new CourseHandler());
@@ -60,12 +68,20 @@ public class RepositoryHandlerFactory {
 		registerHandler(new BlogHandler());
 		registerHandler(new GlossaryHandler());
 		registerHandler(new PortfolioHandler());
+		
+		registerHandler(new WebDocumentHandler(FileResource.GENERIC_TYPE_NAME));
+		registerHandler(new WebDocumentHandler(DocFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(XlsFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(PowerpointFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(PdfFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(SoundFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(MovieFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(AnimationFileResource.TYPE_NAME));
+		registerHandler(new WebDocumentHandler(ImageFileResource.TYPE_NAME));
 	}
 
 	public static void registerHandler(RepositoryHandler handler) {
-		for (String type : handler.getSupportedTypes()) {
-			handlerMap.put(type, handler);
-		}
+		handlerMap.put(handler.getSupportedType(), handler);
 	}
 	
 	public static RepositoryHandlerFactory getInstance() {
diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
index ecbf68b3fa220f4e5656e060729689a72c526a62..425940dd16e59b21637199b4d95497d4cdacd743 100644
--- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
@@ -26,8 +26,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.CoreSpringFactory;
@@ -70,12 +68,6 @@ import org.olat.util.logging.activity.LoggingResourceable;
  * 
  */
 public class SCORMCPHandler extends FileHandler {
-
-	private static final List<String> supportedTypes = Collections.singletonList(ScormCPFileResource.TYPE_NAME);
-
-	public SCORMCPHandler() {
-		//
-	}
 	
 	@Override
 	public boolean isCreate() {
@@ -166,8 +158,8 @@ public class SCORMCPHandler extends FileHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return ScormCPFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
index 28978aa7ee81111d07bb3ffbe3db44ca65cf1dad..29ae4255ea7c55af1225b550ee0fbb3d709e607e 100644
--- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
@@ -26,8 +26,6 @@
 package org.olat.repository.handlers;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.basesecurity.GroupRoles;
@@ -77,13 +75,6 @@ import org.olat.resource.references.ReferenceManager;
  * @author gnaegi
  */
 public class SharedFolderHandler implements RepositoryHandler {
-
-	private static final List<String> supportedTypes = Collections.singletonList(SharedFolderFileResource.TYPE_NAME);
-	
-	/**
-	 * Comment for <code>PROCESS_CREATENEW</code>
-	 */
-	public static final String PROCESS_CREATENEW = "cn";
 	
 	@Override
 	public boolean isCreate() {
@@ -139,8 +130,8 @@ public class SharedFolderHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return SharedFolderFileResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
index 9d515bcd3132b7d8f5400b4f606aee9ca3adf51e..c3e2ba9dccdaa3ef652f0f22eeeb63a89c0b5041 100644
--- a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java
@@ -29,8 +29,6 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.CoreSpringFactory;
@@ -78,18 +76,10 @@ import org.olat.resource.OLATResourceManager;
 public class WebDocumentHandler extends FileHandler {
 	
 	private static final OLog log = Tracing.createLoggerFor(WebDocumentHandler.class);
-	private static final List<String> supportedTypes;
-	static { // initialize supported types
-		supportedTypes = new ArrayList<String>(10);
-		supportedTypes.add(FileResource.GENERIC_TYPE_NAME);
-		supportedTypes.add(DocFileResource.TYPE_NAME);
-		supportedTypes.add(XlsFileResource.TYPE_NAME);
-		supportedTypes.add(PowerpointFileResource.TYPE_NAME);
-		supportedTypes.add(PdfFileResource.TYPE_NAME);
-		supportedTypes.add(SoundFileResource.TYPE_NAME);
-		supportedTypes.add(MovieFileResource.TYPE_NAME);
-		supportedTypes.add(AnimationFileResource.TYPE_NAME);
-		supportedTypes.add(ImageFileResource.TYPE_NAME);
+	private final String supportedType;
+
+	public WebDocumentHandler(String type) {
+		supportedType = type;
 	}
 	
 	@Override
@@ -121,21 +111,21 @@ public class WebDocumentHandler extends FileHandler {
 		ResourceEvaluation eval = new ResourceEvaluation(false);
 		String extension = FileUtils.getFileSuffix(filename);
 		if(StringHelper.containsNonWhitespace(extension)) {
-			if (DocFileResource.validate(filename)) {
+			if (DocFileResource.TYPE_NAME.equals(supportedType) && DocFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (XlsFileResource.validate(filename)) {
+			} else if (XlsFileResource.TYPE_NAME.equals(supportedType) && XlsFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (PowerpointFileResource.validate(filename)) {
+			} else if (PowerpointFileResource.TYPE_NAME.equals(supportedType) && PowerpointFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (PdfFileResource.validate(filename)) {
+			} else if (PdfFileResource.TYPE_NAME.equals(supportedType) && PdfFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (ImageFileResource.validate(filename)) {
+			} else if (ImageFileResource.TYPE_NAME.equals(supportedType) && ImageFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (MovieFileResource.validate(filename)) {
+			} else if (MovieFileResource.TYPE_NAME.equals(supportedType) && MovieFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (SoundFileResource.validate(filename)) {
+			} else if (SoundFileResource.TYPE_NAME.equals(supportedType) && SoundFileResource.validate(filename)) {
 				eval.setValid(true);
-			} else if (AnimationFileResource.validate(filename)) {
+			} else if (AnimationFileResource.TYPE_NAME.equals(supportedType) && AnimationFileResource.validate(filename)) {
 				eval.setValid(true);
 			}
 		}
@@ -147,21 +137,21 @@ public class WebDocumentHandler extends FileHandler {
 			Locale locale, File file, String filename) {
 		
 		FileResource ores;
-		if (DocFileResource.validate(filename)) {
+		if (DocFileResource.TYPE_NAME.equals(supportedType) && DocFileResource.validate(filename)) {
 			ores = new DocFileResource();
-		} else if (XlsFileResource.validate(filename)) {
+		} else if (XlsFileResource.TYPE_NAME.equals(supportedType) && XlsFileResource.validate(filename)) {
 			ores = new XlsFileResource();
-		} else if (PowerpointFileResource.validate(filename)) {
+		} else if (PowerpointFileResource.TYPE_NAME.equals(supportedType) && PowerpointFileResource.validate(filename)) {
 			ores = new PowerpointFileResource();
-		} else if (PdfFileResource.validate(filename)) {
+		} else if (PdfFileResource.TYPE_NAME.equals(supportedType) && PdfFileResource.validate(filename)) {
 			ores = new PdfFileResource();
-		} else if (ImageFileResource.validate(filename)) {
+		} else if (ImageFileResource.TYPE_NAME.equals(supportedType) && ImageFileResource.validate(filename)) {
 			ores = new ImageFileResource();
-		} else if (MovieFileResource.validate(filename)) {
+		} else if (MovieFileResource.TYPE_NAME.equals(supportedType) && MovieFileResource.validate(filename)) {
 			ores = new MovieFileResource();
-		} else if (SoundFileResource.validate(filename)) {
+		} else if (SoundFileResource.TYPE_NAME.equals(supportedType) && SoundFileResource.validate(filename)) {
 			ores = new SoundFileResource();
-		} else if (AnimationFileResource.validate(filename)) {
+		} else if (AnimationFileResource.TYPE_NAME.equals(supportedType) && AnimationFileResource.validate(filename)) {
 			ores = new AnimationFileResource();
 		} else {
 			return null;
@@ -200,8 +190,8 @@ public class WebDocumentHandler extends FileHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return supportedType;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java
index 83cd35fa202f74993a8de260ee094cf3e37272c0..a510ac66ca14e76685705a72e0eee05c450db8a6 100644
--- a/src/main/java/org/olat/repository/handlers/WikiHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java
@@ -29,7 +29,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 
@@ -98,14 +97,7 @@ import org.olat.resource.references.ReferenceManager;
 public class WikiHandler implements RepositoryHandler {
 	
 	private static final OLog log = Tracing.createLoggerFor(WikiHandler.class);
-	private static final List<String> supportedTypes = Collections.singletonList(WikiResource.TYPE_NAME);
 
-	/**
-	 * Comment for <code>PROCESS_CREATENEW</code>
-	 */
-	public static final String PROCESS_CREATENEW = "cn";
-	public static final String PROCESS_UPLOAD = "pu";
-	
 	@Override
 	public boolean isCreate() {
 		return true;
@@ -203,8 +195,8 @@ public class WikiHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public List<String> getSupportedTypes() {
-		return supportedTypes;
+	public String getSupportedType() {
+		return WikiResource.TYPE_NAME;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/handlers/package.html b/src/main/java/org/olat/repository/handlers/package.html
deleted file mode 100644
index 9475ca9fd7576b3c65aacacbe8c379f5fcc70782..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/handlers/package.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>
-<h3>Repository handlers</h3>
-<p></p>
-</body></html>
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java
index 317b21c6f23de631b6502fc9ccd9961b4d553e67..5459cc0992abd0cf46cadbc0897f83b3488dde3f 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryStatisticsDAO.java
@@ -139,6 +139,12 @@ public class RepositoryEntryStatisticsDAO implements UserRatingsDelegate, UserCo
 	}
 	
 	private RepositoryEntryStatistics loadStatisticsForUpdate(OLATResourceable repositoryEntryRes) {
+		if(repositoryEntryRes instanceof RepositoryEntry) {
+			RepositoryEntry re = (RepositoryEntry)repositoryEntryRes;
+			dbInstance.getCurrentEntityManager().detach(re);
+			dbInstance.getCurrentEntityManager().detach(re.getStatistics());
+		}
+		
 		StringBuilder sb = new StringBuilder();
 		sb.append("select stats from ").append(RepositoryEntryStatistics.class.getName()).append(" as stats")
 		  .append(" where stats.key in (select v.statistics.key from ").append(RepositoryEntry.class.getName()).append(" as v where v.key=:key)");
diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
index 7c59346826d82440b837acf2ccff51aa8a3ad5ce..5214df3b0c13f707026d625770346f1195204b60 100644
--- a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
+++ b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
@@ -49,7 +49,6 @@ public class RepositoryEntryAccessColumnDescriptor implements CustomCellRenderer
 	public void render(StringOutput sb, Renderer renderer, Object val, Locale locale, int alignment, String action) {
 		if(val instanceof RepositoryEntry) {
 			RepositoryEntry re = (RepositoryEntry)val;
-		//fxdiff VCRP-1,2: access control of resources
 			if(re.isMembersOnly()) {
 				sb.append(translator.translate("table.header.access.membersonly")); 
 			} else {
@@ -70,8 +69,7 @@ public class RepositoryEntryAccessColumnDescriptor implements CustomCellRenderer
 							sb.append(translator.translate("table.header.access.guest"));
 						}
 						break;
-					}
-					default:						
+					} default:						
 						// OLAT-6272 in case of broken repo entries with no access code
 						// return error instead of nothing
 						sb.append("ERROR");
diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
index ece913a71d1ae6ebd07cd59d65992a17231d722b..b2a4377a3429f5da1537be38452bce2597a365ea 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
@@ -62,6 +62,7 @@ import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
@@ -134,7 +135,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		for(String type:types) {
 			RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type);
 			if(handler != null && handler.isCreate()) {
-				addCreateLink(type, createDropdown);
+				addCreateLink(handler, createDropdown);
 			}
 		}
 		
@@ -154,9 +155,9 @@ public class AuthorListController extends FormBasicController implements Activat
 		return super.getTranslator();
 	}
 
-	private void addCreateLink(String type, Dropdown dropdown) {
-		Link createLink = LinkFactory.createLink(type, getTranslator(), this);
-		createLink.setUserObject(type);
+	private void addCreateLink(RepositoryHandler handler, Dropdown dropdown) {
+		Link createLink = LinkFactory.createLink(handler.getSupportedType(), getTranslator(), this);
+		createLink.setUserObject(handler);
 		dropdown.addComponent(createLink);
 	}
 	
@@ -249,10 +250,9 @@ public class AuthorListController extends FormBasicController implements Activat
 		if(importLink == source) {
 			doImport(ureq);
 		} else if(source instanceof Link && ((Link)source).getUserObject() instanceof String) {
-			String type = (String)((Link)source).getUserObject();
-			RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type);
+			RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject();
 			if(handler != null) {
-				doCreate(ureq, type, handler);
+				doCreate(ureq, handler);
 			}
 		}
 		super.event(ureq, source, event);
@@ -265,7 +265,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		} else if(createCtrl == source) {
 			cmc.deactivate();
 			if(Event.DONE_EVENT.equals(event)) {
-				doOpenDetails(ureq, createCtrl.getAddedEntry());
+				doOpenDetailsSettings(ureq, createCtrl.getAddedEntry());
 				cleanUp();
 			} else if(CreateRepositoryEntryController.CREATION_WIZARD.equals(event)) {
 				doPostCreateWizard(ureq, createCtrl.getAddedEntry(), createCtrl.getHandler());
@@ -275,7 +275,7 @@ public class AuthorListController extends FormBasicController implements Activat
 		}  else if(importCtrl == source) {
 			cmc.deactivate();
 			if(Event.DONE_EVENT.equals(event)) {
-				doOpenDetails(ureq, importCtrl.getImportedEntry());
+				doOpenDetailsSettings(ureq, importCtrl.getImportedEntry());
 				cleanUp();
 			} else {
 				cleanUp();
@@ -285,7 +285,7 @@ public class AuthorListController extends FormBasicController implements Activat
 				getWindowControl().pop();
 				RepositoryEntry newEntry = (RepositoryEntry)wizardCtrl.getRunContext().get("authoringNewEntry");
 				cleanUp();
-				doOpenDetails(ureq, newEntry);
+				doOpenDetailsSettings(ureq, newEntry);
 			}
 		} else if(searchCtrl == source) {
 			if(event instanceof SearchEvent) {
@@ -400,6 +400,18 @@ public class AuthorListController extends FormBasicController implements Activat
 		return detailsCtrl;
 	}
 	
+	private AuthoringEntryDetailsController doOpenDetailsSettings(UserRequest ureq, RepositoryEntryRef entry) {
+		RepositoryEntryAuthorView view = repositoryService.loadAuthorView(getIdentity(), entry);
+		String fullnameAuthor = "";
+		AuthoringEntryRow row = new AuthoringEntryRow(view, fullnameAuthor);
+		detailsCtrl = doOpenDetails(ureq, row);
+		
+		ContextEntry editEntry = BusinessControlFactory.getInstance().createContextEntry(AuthoringEntryDetailsController.EDIT_SETTINGS_ORES);
+		List<ContextEntry> entries = Collections.singletonList(editEntry);
+		detailsCtrl.activate(ureq, entries, null);
+		return detailsCtrl;
+	}
+	
 	private void doImport(UserRequest ureq) {
 		if(importCtrl != null) return;
 
@@ -415,11 +427,11 @@ public class AuthorListController extends FormBasicController implements Activat
 		cmc.activate();
 	}
 	
-	private void doCreate(UserRequest ureq, String type, RepositoryHandler handler) {
+	private void doCreate(UserRequest ureq, RepositoryHandler handler) {
 		if(createCtrl != null) return;
 
 		removeAsListenerAndDispose(createCtrl);
-		createCtrl = new CreateRepositoryEntryController(ureq, getWindowControl(), type, handler);
+		createCtrl = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);
 		listenTo(createCtrl);
 		removeAsListenerAndDispose(cmc);
 		
diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java
index 5c192435914a036f0f56f4e5405b6cf5fd6236fb..1193684ecd5a33cd9bebfadefd9032b0074494dc 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java
@@ -91,7 +91,7 @@ class AuthoringEntryDataModel extends DefaultFlexiTableDataSourceModel<Authoring
 		displayName("cif.displayname"),
 		author("table.header.author"),
 		authors("table.header.author"),
-		access("table.header.author"),
+		access("table.header.access"),
 		creationDate("table.header.date"),
 		lastUsage("table.header.lastusage"),
 		mark("table.header.mark");
diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
index 77ea17e048e7e0660cab160eb90cb12b314291d8..0f4b5a5bb49aae527b13318ce7feb5807d19430a 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
@@ -107,6 +107,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class AuthoringEntryDetailsController extends FormBasicController implements Activateable2 {
 	
+	public static final OLATResourceable EDIT_SETTINGS_ORES = OresHelper.createOLATResourceableInstance("Settings", 0l);
+	
 	private FormLink markLink, startLink;
 	
 	private Link editLink, launchLink,
@@ -423,7 +425,13 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 	
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		//
+		if(entries == null || entries.isEmpty()) return;
+		
+		ContextEntry entry = entries.get(0);
+		String segment = entry.getOLATResourceable().getResourceableTypeName();
+		if(EDIT_SETTINGS_ORES.getResourceableTypeName().equals(segment)) {
+			doEditSettings(ureq);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
index 163346a94ec6c03798cf61f73b6f24eaa1b55754..a503cac69e9963078857be0bd328dd831f279004 100644
--- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
@@ -24,7 +24,6 @@ import org.olat.core.gui.UserRequest;
 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.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
@@ -56,18 +55,15 @@ public class CreateRepositoryEntryController extends FormBasicController {
 	
 	private FormLink wizardButton;
 	private TextElement displaynameEl;
-	private RichTextElement descriptionEl;
 	
 	private RepositoryEntry addedEntry;
-	private final String type;
 	private final RepositoryHandler handler;
 	
 	private Object userObject;
 	
-	public CreateRepositoryEntryController(UserRequest ureq, WindowControl wControl, String type, RepositoryHandler handler) {
+	public CreateRepositoryEntryController(UserRequest ureq, WindowControl wControl, RepositoryHandler handler) {
 		super(ureq, wControl);
 		setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator()));
-		this.type = type;
 		this.handler = handler;
 		initForm(ureq);
 	}
@@ -91,8 +87,8 @@ public class CreateRepositoryEntryController extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		String typeName;
-		if (type != null) {
-			typeName = NewControllerFactory.translateResourceableTypeName(type, getLocale());
+		if (handler != null) {
+			typeName = NewControllerFactory.translateResourceableTypeName(handler.getSupportedType(), getLocale());
 		} else {
 			typeName = translate("cif.type.na");
 		}
@@ -101,11 +97,6 @@ public class CreateRepositoryEntryController extends FormBasicController {
 		displaynameEl = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, "", formLayout);
 		displaynameEl.setDisplaySize(30);
 		displaynameEl.setMandatory(true);
-
-		descriptionEl = uifactory.addRichTextElementForStringData("cif.description", "cif.description",
-				"", 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl());
-		descriptionEl.getEditorConfiguration().setFileBrowserUploadRelPath("media");
-		descriptionEl.setMandatory(true);
 		
 		FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
 		formLayout.add("buttonContainer", buttonContainer);
@@ -137,14 +128,6 @@ public class CreateRepositoryEntryController extends FormBasicController {
 			displaynameEl.clearError();
 		}
 		
-		// Check for empty description
-		if (!StringHelper.containsNonWhitespace(descriptionEl.getValue())) {
-			descriptionEl.setErrorKey("cif.error.description.empty", new String[] {});
-			allOk = false;
-		} else {
-			descriptionEl.clearError();
-		}
-
 		return allOk & super.validateFormLogic(ureq);
 	}
 
@@ -173,9 +156,8 @@ public class CreateRepositoryEntryController extends FormBasicController {
 
 	private void doCreate() {
 		String displayname = displaynameEl.getValue();
-		String description = descriptionEl.getValue();
 		
-		addedEntry = handler.createResource(getIdentity(), displayname, description, getLocale());
+		addedEntry = handler.createResource(getIdentity(), displayname, "", getLocale());
 
 		ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(),
 				LoggingResourceable.wrap(addedEntry, OlatResourceableType.genRepoEntry));
diff --git a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java
index 00303f913ee4cf5d68151e01f29841a56dc604de..298b40d69f0a80c3633efb10c851db108988a2f7 100644
--- a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java
@@ -27,7 +27,6 @@ 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.FileElement;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.elements.RichTextElement;
 import org.olat.core.gui.components.form.flexible.elements.SpacerElement;
 import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
@@ -46,7 +45,6 @@ import org.olat.core.util.Util;
 import org.olat.fileresource.types.ResourceEvaluation;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
-import org.olat.repository.controllers.EntryChangedEvent;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.util.logging.activity.LoggingResourceable;
@@ -68,7 +66,6 @@ public class ImportRepositoryEntryController extends FormBasicController {
 	private FileElement uploadFileEl;
 	private StaticTextElement typeEl;
 	private TextElement displaynameEl;
-	private RichTextElement descriptionEl;
 	private MultipleSelectionElement referencesEl;
 	
 	private final static String[] refKeys = new String[]{ "checked" };
@@ -102,12 +99,6 @@ public class ImportRepositoryEntryController extends FormBasicController {
 		String[] refValues = new String[]{ "" };
 		referencesEl = uifactory.addCheckboxesHorizontal("references", "references", formLayout, refKeys, refValues, null);
 		referencesEl.setVisible(false);
-
-		descriptionEl = uifactory.addRichTextElementForStringData("cif.description", "cif.description",
-				"", 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl());
-		descriptionEl.getEditorConfiguration().setFileBrowserUploadRelPath("media");
-		descriptionEl.setMandatory(true);
-		descriptionEl.setVisible(false);
 		
 		FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
 		formLayout.add("buttonContainer", buttonContainer);
@@ -144,7 +135,6 @@ public class ImportRepositoryEntryController extends FormBasicController {
 		if(handlerForUploadedResource != null) {
 			doImport();
 			fireEvent(ureq, Event.DONE_EVENT);
-			fireEvent(ureq, new EntryChangedEvent(importedEntry, EntryChangedEvent.ADDED));
 		}
 	}
 	
@@ -165,14 +155,6 @@ public class ImportRepositoryEntryController extends FormBasicController {
 		} else {
 			displaynameEl.clearError();
 		}
-		
-		// Check for empty description
-		if (!StringHelper.containsNonWhitespace(descriptionEl.getValue())) {
-			descriptionEl.setErrorKey("cif.error.description.empty", new String[] {});
-			allOk = false;
-		} else {
-			descriptionEl.clearError();
-		}
 
 		return allOk & handlerForUploadedResource != null & super.validateFormLogic(ureq);
 	}
@@ -181,12 +163,11 @@ public class ImportRepositoryEntryController extends FormBasicController {
 		if(handlerForUploadedResource == null) return;
 		
 		String displayname = displaynameEl.getValue();
-		String description = descriptionEl.getValue();
 		File uploadedFile = uploadFileEl.getUploadFile();
 		String uploadedFilename = uploadFileEl.getUploadFileName();
 		boolean withReferences = referencesEl.isAtLeastSelected(1);
 		
-		importedEntry = handlerForUploadedResource.importResource(getIdentity(), displayname, description,
+		importedEntry = handlerForUploadedResource.importResource(getIdentity(), displayname, "",
 				withReferences, getLocale(), uploadedFile, uploadedFilename);
 
 		ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(),
@@ -201,17 +182,17 @@ public class ImportRepositoryEntryController extends FormBasicController {
 			RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type);
 			ResourceEvaluation eval = handler.acceptImport(uploadedFile, uploadedFilename);
 			if(eval != null && eval.isValid()) {
-				updateResourceInfos(eval, type, handler);
+				updateResourceInfos(eval, handler);
 				break;
 			}
 		}
 	}
 	
-	private void updateResourceInfos(ResourceEvaluation eval, String type, RepositoryHandler handler) {
+	private void updateResourceInfos(ResourceEvaluation eval, RepositoryHandler handler) {
 		handlerForUploadedResource = handler;
 		typeEl.setVisible(true);
-		if (type != null) { // add image and typename code
-			String tName = NewControllerFactory.translateResourceableTypeName(type, getLocale());
+		if (handler != null) { // add image and typename code
+			String tName = NewControllerFactory.translateResourceableTypeName(handler.getSupportedType(), getLocale());
 			typeEl.setValue(tName);
 		} else {
 			typeEl.setValue(translate("cif.type.na"));
@@ -222,8 +203,6 @@ public class ImportRepositoryEntryController extends FormBasicController {
 		if(eval.isReferences()) {
 			referencesEl.select(refKeys[0], true);
 		}
-		descriptionEl.setVisible(true);
-		descriptionEl.setValue(eval.getDescription());
 		importButton.setEnabled(handler != null);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/ui/author/PropPupForm.java b/src/main/java/org/olat/repository/ui/author/PropPupForm.java
index 70e279448df38ed5123386d6aabd03d3e406154b..513063cb9474e01a06bcfabc05f403726e3ecdef 100644
--- a/src/main/java/org/olat/repository/ui/author/PropPupForm.java
+++ b/src/main/java/org/olat/repository/ui/author/PropPupForm.java
@@ -38,12 +38,14 @@ 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;
+import org.olat.core.util.Util;
 import org.olat.fileresource.types.ScormCPFileResource;
 import org.olat.ims.qti.fileresource.SurveyFileResource;
 import org.olat.ims.qti.fileresource.TestFileResource;
 import org.olat.login.LoginModule;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryManagedFlag;
+import org.olat.repository.RepositoryService;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 
@@ -76,6 +78,7 @@ public class PropPupForm extends FormBasicController {
 	 */
 	public PropPupForm(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) {
 		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()));
 		this.entry = entry;
 		
 		String typeName = entry.getOlatResource().getResourceableTypeName();
diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
index 21285047c0952edb8cd107fa7e60bd92d2327047..d6ed91a4e81ca54abb1f587f02ac34dd32a91f06 100644
--- a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
+++ b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
@@ -378,9 +378,7 @@ public class RepositoryEditDescriptionController extends FormBasicController {
 				flc.setDirty(true);
 			}
 		} else if (source == deleteImage) {
-
 			VFSLeaf img = repositoryManager.getImage(repositoryEntry);
-			
 			if(fileUpload.getUploadFile() != null) {
 				fileUpload.reset();
 				
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
index e1618ff233eea64566be0405bf719ca68dc54125..b9dd93279fb4b1f1b320bd02841c88814aa8547d 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
@@ -26,7 +26,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -52,6 +51,7 @@ import org.olat.resource.accesscontrol.model.AccessMethod;
 import org.olat.resource.accesscontrol.model.Offer;
 import org.olat.resource.accesscontrol.model.OfferAccess;
 import org.olat.resource.accesscontrol.model.OfferImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -67,8 +67,6 @@ public class AccessConfigurationController extends FormBasicController {
 	private List<FormLink> addMethods = new ArrayList<FormLink>();
 	private final String displayName;
 	private final OLATResource resource;
-	private final AccessControlModule acModule;
-	private final ACService acService;
 
 	private CloseableModalController cmc;
 	private FormLayoutContainer confControllerContainer;
@@ -81,6 +79,11 @@ public class AccessConfigurationController extends FormBasicController {
 	private boolean allowPaymentMethod;
 	private final boolean editable;
 	
+	@Autowired
+	private ACService acService;
+	@Autowired
+	private AccessControlModule acModule;
+	
 	public AccessConfigurationController(UserRequest ureq, WindowControl wControl, OLATResource resource,
 			String displayName, boolean allowPaymentMethod, boolean editable) {
 		super(ureq, wControl, "access_configuration");
@@ -88,8 +91,6 @@ public class AccessConfigurationController extends FormBasicController {
 		this.resource = resource;
 		this.displayName = displayName;
 		this.allowPaymentMethod = allowPaymentMethod;
-		acModule = (AccessControlModule)CoreSpringFactory.getBean("acModule");
-		acService = CoreSpringFactory.getImpl(ACService.class);
 		embbed = false;
 		this.editable = editable;
 		emptyConfigGrantsFullAccess = true; 
@@ -105,8 +106,6 @@ public class AccessConfigurationController extends FormBasicController {
 		this.resource = resource;
 		this.displayName = displayName;
 		this.allowPaymentMethod = allowPaymentMethod;
-		acModule = CoreSpringFactory.getImpl(AccessControlModule.class);
-		acService = CoreSpringFactory.getImpl(ACService.class);
 		embbed = true;
 		emptyConfigGrantsFullAccess = false;
 		
@@ -116,10 +115,6 @@ public class AccessConfigurationController extends FormBasicController {
 	public int getNumOfBookingConfigurations() {
 		return confControllers.size();
 	}
-	
-	public FormItem getInitialFormItem() {
-		return flc;
-	}
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
@@ -134,7 +129,7 @@ public class AccessConfigurationController extends FormBasicController {
 				String title = handler.getMethodName(getLocale());
 				FormLink add = uifactory.addFormLink("create." + handler.getType(), title, null, formLayout, Link.LINK | Link.NONTRANSLATED);
 				add.setUserObject(method);
-				add.setIconLeftCSS((method.getMethodCssClass() + "_icon").intern());
+				add.setIconLeftCSS( ("o_icon " + method.getMethodCssClass() + "_icon o_icon-lg").intern());
 				addMethods.add(add);
 				formLayout.add(add.getName(), add);
 			}
diff --git a/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java b/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java
index 35b41e2f156c55296a599bf06d53e43dccbb4b0f..9960690469f32eb8c1551e435e68052ef037838e 100644
--- a/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java
+++ b/src/main/java/org/olat/restapi/repository/RepositoryEntriesResource.java
@@ -342,7 +342,9 @@ public class RepositoryEntriesResource {
 		RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
 		OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(newResource);
 		RepositoryEntry addedEntry = repositoryService.create(identity, resourcename, displayname, null, ores, 0);
-		addedEntry.setSoftkey(softkey);
+		if(StringHelper.containsNonWhitespace(softkey)) {
+			addedEntry.setSoftkey(softkey);
+		}
 		//TODO repository
 
 		// Do set access for owner at the end, because unfinished course should be invisible
diff --git a/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java b/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java
index cecb97430f33f23e097d425fc499fca5b472c9c1..51b300b075a2b36aad96899008857528b7cddbff 100644
--- a/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java
+++ b/src/main/java/org/olat/search/service/indexer/IndexWriterHolder.java
@@ -82,12 +82,12 @@ public class IndexWriterHolder {
 				int used = counter.decrementAndGet();
 				if(used == 0) {
 					long start = System.currentTimeMillis();
-					indexWriter.commit();
-					indexWriter.close();
-					writerRef = null;
+					//indexWriter.commit();
+					//indexWriter.close();
+					//writerRef = null;
 					log.info("Close writer takes (ms): " + (System.currentTimeMillis() - start));
 				}
-			} catch (IOException e) {
+			} catch (Exception e) {
 				log.error("", e);
 			}
 		}
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 922c672b572023eeb5207b70a2501b14a903904c..746c65f45364dfc996cca5c36ccddd27bc1823a0 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -295,7 +295,7 @@ create table if not exists o_repositoryentry (
    version mediumint unsigned not null,
    lastmodified datetime,
    creationdate datetime,
-   softkey varchar(30) not null unique,
+   softkey varchar(36) not null unique,
    external_id varchar(64),
    external_ref varchar(64),
    managed_flags varchar(255),
diff --git a/src/test/java/org/olat/core/id/context/HistoryManagerTest.java b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java
index 5d2d09e2233bb8b182552952574d92c1cb7d8159..34580a65860bd05098ddb34b19747d1f3987b9c7 100644
--- a/src/test/java/org/olat/core/id/context/HistoryManagerTest.java
+++ b/src/test/java/org/olat/core/id/context/HistoryManagerTest.java
@@ -28,6 +28,7 @@ import java.net.URL;
 
 import junit.framework.Assert;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,7 +104,7 @@ public class HistoryManagerTest extends OlatTestCase {
 	 * @throws IOException
 	 * @throws URISyntaxException
 	 */
-	@Test
+	@Test @Ignore
 	public void testRead_v83_repoMetadaElements() throws IOException, URISyntaxException {
 		URL xmlUrl = HistoryManagerTest.class.getResource("resume_ver83b.xml");
 		assertNotNull(xmlUrl);
diff --git a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
index dce14e941d792f770b813ba1ed2edf56549f6ed7..5c147b5cb123d3b729692854e3bb8d1f1d1716c3 100644
--- a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
+++ b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
@@ -40,6 +40,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.olat.core.commons.persistence.DBFactory;
@@ -51,6 +52,7 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
+import org.olat.course.config.CourseConfig;
 import org.olat.course.nodes.AssessableCourseNode;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.scoring.ScoreEvaluation;
@@ -60,6 +62,7 @@ import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -83,24 +86,33 @@ public class AssessmentManagerTest extends OlatTestCase  {
 	private final Boolean passed = Boolean.TRUE;
 	private final Boolean fullyAssessed = Boolean.TRUE;
 	
+	@Autowired
+	private EfficiencyStatementManager efficiencyStatementManager;
+	
 	@Before
 	public void setUp() throws Exception {		
 		try {
 			log.info("setUp start ------------------------");
 			
-			tutor = JunitTestHelper.createAndPersistIdentityAsUser("junit_tutor_" + UUID.randomUUID().toString().replace("-", ""));
-			student = JunitTestHelper.createAndPersistIdentityAsUser("junit_student_" + UUID.randomUUID().toString().replace("-", ""));
+			Identity author = JunitTestHelper.createAndPersistIdentityAsUser("junit_auth-" + UUID.randomUUID().toString());
+			tutor = JunitTestHelper.createAndPersistIdentityAsUser("junit_tutor-" + UUID.randomUUID().toString());
+			student = JunitTestHelper.createAndPersistIdentityAsUser("junit_student-" + UUID.randomUUID().toString());
 			
-      //import "Demo course" into the bcroot_junittest
-			RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse();
+			//import "Demo course" into the bcroot_junittest
+			RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author);
 			Long resourceableId = repositoryEntry.getOlatResource().getResourceableId();
 			System.out.println("Demo course imported - resourceableId: " + resourceableId);
 		
 			course = CourseFactory.loadCourse(resourceableId);
 			DBFactory.getInstance().closeSession();
 						
-			course.getCourseEnvironment().getCourseConfig().setEfficencyStatementIsEnabled(true);
+			CourseConfig config = course.getCourseEnvironment().getCourseConfig();
+			config.setEfficencyStatementIsEnabled(true);
+			CourseFactory.setCourseConfig(course.getResourceableId(), config);
+			
 			course = CourseFactory.loadCourse(resourceableId);
+			config = course.getCourseEnvironment().getCourseConfig();
+			Assert.assertTrue(config.isEfficencyStatementEnabled());
 			
 			log.info("setUp done ------------------------");					
 		} catch (RuntimeException e) {
@@ -149,39 +161,39 @@ public class AssessmentManagerTest extends OlatTestCase  {
 		UserCourseEnvironment userCourseEnv = new UserCourseEnvironmentImpl(ienv, course.getCourseEnvironment());
 		boolean incrementAttempts = true;
 		//assessableCourseNode.updateUserScoreEvaluation(scoreEvaluation, userCourseEnv, tutor, incrementAttempts); //alternative
-   	assessmentManager.saveScoreEvaluation(assessableCourseNode, tutor, student, scoreEvaluation, userCourseEnv, incrementAttempts);
-   	DBFactory.getInstance().closeSession();
-   	//the attempts mut have been incremented
-   	//assertEquals(attempts, assessableCourseNode.getUserAttempts(userCourseEnv)); //alternative
-   	assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student));
-    				
+		assessmentManager.saveScoreEvaluation(assessableCourseNode, tutor, student, scoreEvaluation, userCourseEnv, incrementAttempts);
+		DBFactory.getInstance().closeSession();
+		//the attempts mut have been incremented
+		//assertEquals(attempts, assessableCourseNode.getUserAttempts(userCourseEnv)); //alternative
+		assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student));
+						
 		assessmentManager.saveNodeCoachComment(assessableCourseNode, student, coachComment);
 		//assessableCourseNode.updateUserCoachComment(coachComment, userCourseEnv); //alternative
 		
-    assessmentManager.saveNodeComment(assessableCourseNode, tutor, student, userComment);
+		assessmentManager.saveNodeComment(assessableCourseNode, tutor, student, userComment);
 		//assessableCourseNode.updateUserUserComment(userComment, userCourseEnv, tutor); //alternative
     
-    attempts++;
-    assessmentManager.saveNodeAttempts(assessableCourseNode, tutor, student, attempts);
-    assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student));    	
+		attempts++;
+		assessmentManager.saveNodeAttempts(assessableCourseNode, tutor, student, attempts);
+		assertEquals(attempts, assessmentManager.getNodeAttempts(assessableCourseNode, student));    	
 		//assessableCourseNode.updateUserAttempts(attempts, userCourseEnv, tutor); //alternative
-            
-    assertEquals(score, assessmentManager.getNodeScore(assessableCourseNode, student));
-    assertEquals(passed, assessmentManager.getNodePassed(assessableCourseNode, student));
-    assertEquals(assessmentID, assessmentManager.getAssessmentID(assessableCourseNode, student));
-    
-    assertEquals(coachComment, assessmentManager.getNodeCoachComment(assessableCourseNode, student));
-    assertEquals(userComment, assessmentManager.getNodeComment(assessableCourseNode, student));
-						
-    System.out.println("Finish testing AssessmentManager read/write methods");
-    
-    checkEfficiencyStatementManager();
-    assertNotNull("no course at the end of test",course);
-    try {
-    	course = CourseFactory.loadCourse(course.getResourceableId());
-    } catch (Exception ex ) {
-    	fail("Could not load course at the end of test Exception=" + ex);
-    }
+		        
+		assertEquals(score, assessmentManager.getNodeScore(assessableCourseNode, student));
+		assertEquals(passed, assessmentManager.getNodePassed(assessableCourseNode, student));
+		assertEquals(assessmentID, assessmentManager.getAssessmentID(assessableCourseNode, student));
+		
+		assertEquals(coachComment, assessmentManager.getNodeCoachComment(assessableCourseNode, student));
+		assertEquals(userComment, assessmentManager.getNodeComment(assessableCourseNode, student));
+							
+		System.out.println("Finish testing AssessmentManager read/write methods");
+
+		checkEfficiencyStatementManager();
+		assertNotNull("no course at the end of test",course);
+		try {
+			course = CourseFactory.loadCourse(course.getResourceableId());
+		} catch (Exception ex ) {
+			fail("Could not load course at the end of test Exception=" + ex);
+		}
 		assertNotNull("no course after loadCourse", course);
 	}
 	
@@ -201,10 +213,8 @@ public class AssessmentManagerTest extends OlatTestCase  {
 		RepositoryEntry courseRepositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(
 				OresHelper.createOLATResourceableInstance(CourseModule.class, courseResId), false);
 		assertNotNull(courseRepositoryEntry);
-    //	check the stored EfficiencyStatement		
+		// check the stored EfficiencyStatement		
 		EfficiencyStatement efficiencyStatement = checkEfficiencyStatement(courseRepositoryEntry);
-		
-		EfficiencyStatementManager efficiencyStatementManager = EfficiencyStatementManager.getInstance();
 		//force the storing of the efficiencyStatement - this is usually done only at Learnresource/modify properties/Efficiency statement (ON)
 		efficiencyStatementManager.updateEfficiencyStatements(course, identitiyList);
 		DBFactory.getInstance().closeSession();
@@ -254,9 +264,9 @@ public class AssessmentManagerTest extends OlatTestCase  {
 	 * @return
 	 */
 	private EfficiencyStatement checkEfficiencyStatement(RepositoryEntry courseRepositoryEntry) {
-		EfficiencyStatementManager efficiencyStatementManager = EfficiencyStatementManager.getInstance();
-    //check the stored EfficiencyStatement		
-		EfficiencyStatement efficiencyStatement = efficiencyStatementManager.getUserEfficiencyStatement(courseRepositoryEntry.getKey(), student);
+		//check the stored EfficiencyStatement		
+		EfficiencyStatement efficiencyStatement = efficiencyStatementManager
+				.getUserEfficiencyStatement(courseRepositoryEntry.getKey(), student);
 		assertNotNull(efficiencyStatement);
 		List<Map<String,Object>> assessmentNodes = efficiencyStatement.getAssessmentNodes();
 		Iterator<Map<String,Object>> listIterator = assessmentNodes.iterator();
@@ -274,5 +284,4 @@ public class AssessmentManagerTest extends OlatTestCase  {
 		assertEquals(passed,efficiencyStatementManager.getPassed(assessableCourseNode.getIdent(), efficiencyStatement));
 		return efficiencyStatement;
 	}
-	
 }
diff --git a/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java b/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java
index b20ca4cfe254f700cf20103aaace9645565d13af..ab237c00e23f97f19c1c6fabca2c740d66dd905e 100644
--- a/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java
+++ b/src/test/java/org/olat/course/auditing/UserNodeAuditManagerTest.java
@@ -30,9 +30,12 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.UUID;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.id.Identity;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.course.CourseFactory;
@@ -56,8 +59,9 @@ public class UserNodeAuditManagerTest extends OlatTestCase  {
 		try {
 			log.info("setUp start ------------------------");
 			
-      //import "Demo course" into the bcroot_junittest
-			RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse();
+			//import "Demo course" into the bcroot_junittest
+			Identity author = JunitTestHelper.createAndPersistIdentityAsUser("auth-" + UUID.randomUUID().toString());
+			RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author);
 			Long resourceableId = repositoryEntry.getOlatResource().getResourceableId();
 			System.out.println("Demo course imported - resourceableId: " + resourceableId);
 					
diff --git a/src/test/java/org/olat/course/condition/ConditionTest.java b/src/test/java/org/olat/course/condition/ConditionTest.java
index 5e6d8bfe2cc91b265645e7bd4534452332c8ef32..49e0aaf819a1370fab18d07d1c907e22dae97e15 100644
--- a/src/test/java/org/olat/course/condition/ConditionTest.java
+++ b/src/test/java/org/olat/course/condition/ConditionTest.java
@@ -20,6 +20,7 @@
 package org.olat.course.condition;
 
 import java.util.Collection;
+import java.util.UUID;
 
 import junit.framework.Assert;
 
@@ -84,9 +85,10 @@ public class ConditionTest extends OlatTestCase {
 	}
 	
 	private UserCourseEnvironment getUserDemoCourseEnvironment() {
+		Identity author = JunitTestHelper.createAndPersistIdentityAsUser("junit_auth-" + UUID.randomUUID().toString());
 		Identity id = JunitTestHelper.createAndPersistIdentityAsUser("condition");
 		Roles roles = new Roles(false, false, false, false, false, false, false);
-		RepositoryEntry re = JunitTestHelper.deployDemoCourse();
+		RepositoryEntry re = JunitTestHelper.deployDemoCourse(author);
 		ICourse course = CourseFactory.loadCourse(re.getOlatResource());
 		IdentityEnvironment identityEnv = new IdentityEnvironment(id, roles);
 		UserCourseEnvironment uce = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment());
diff --git a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java
index 43345f56c7c922385f8b9dafc19352ef25d549de..c28c65ae5dbdfaaa42a1204d0cbccb923aa4a1a2 100644
--- a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java
+++ b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java
@@ -94,7 +94,8 @@ public class ProjectBrokerManagerTest extends OlatTestCase {
 			id2 = JunitTestHelper.createAndPersistIdentityAsUser("project-id2-" + UUID.randomUUID().toString());
 
 			if (resourceableId == null) {
-				RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse();
+				Identity author = JunitTestHelper.createAndPersistIdentityAsUser("project-auth-" + UUID.randomUUID().toString());
+				RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author);
 				resourceableId = repositoryEntry.getOlatResource().getResourceableId();
 				System.out.println("Demo course imported - resourceableId: " + resourceableId);
 			}
diff --git a/src/test/java/org/olat/portfolio/EPImportTest.java b/src/test/java/org/olat/portfolio/EPImportTest.java
index 039953b9ce49f82a15d5ee0173b212d5622f3788..962bc94b852cc16b1c145afb092ca8a28b3dbeb2 100644
--- a/src/test/java/org/olat/portfolio/EPImportTest.java
+++ b/src/test/java/org/olat/portfolio/EPImportTest.java
@@ -29,10 +29,14 @@ import junit.framework.Assert;
 
 import org.junit.Test;
 import org.olat.core.commons.persistence.DB;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.util.resource.OresHelper;
 import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.portfolio.manager.EPXStreamHandler;
 import org.olat.portfolio.model.structel.PortfolioStructure;
 import org.olat.portfolio.model.structel.PortfolioStructureMap;
+import org.olat.resource.OLATResource;
+import org.olat.resource.OLATResourceManager;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -47,6 +51,8 @@ public class EPImportTest extends OlatTestCase {
 	@Autowired
 	private DB dbInstance;
 	@Autowired
+	private OLATResourceManager resourceManager;
+	@Autowired
 	private EPFrontendManager epFrontendManager;
 	
 	
@@ -55,9 +61,12 @@ public class EPImportTest extends OlatTestCase {
 		URL mapUrl = EPImportTest.class.getResource("map_81.xml.zip");
 		assertNotNull(mapUrl);
 		File mapFile = new File(mapUrl.toURI());
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableType("EPMapTemplate");
+		OLATResource resource = resourceManager.createAndPersistOLATResourceInstance(ores);
 		//import the map
 		PortfolioStructure rootStructure = EPXStreamHandler.getAsObject(mapFile, false);
-		PortfolioStructureMap importedMap = epFrontendManager.importPortfolioMapTemplate(rootStructure, null);
+		PortfolioStructureMap importedMap = epFrontendManager.importPortfolioMapTemplate(rootStructure, resource);
 		Assert.assertNotNull(importedMap);
 		dbInstance.commitAndCloseSession();
 	}
diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java
index 162715a85c874b69c3ef95f5e96a96e9cc24e296..a73bcd18ec423f1df8767379da9b89f0d4597c0c 100644
--- a/src/test/java/org/olat/repository/RepositoryManagerTest.java
+++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java
@@ -866,10 +866,12 @@ public class RepositoryManagerTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//check
-		Roles roles = new Roles(false, false, false, false, false, true, false);
-		boolean institutionMgr1 = repositoryManager.isInstitutionalRessourceManagerFor(owner1, roles, re);
-		boolean institutionMgr2 = repositoryManager.isInstitutionalRessourceManagerFor(owner2, roles, re);
-		boolean institutionMgr3 = repositoryManager.isInstitutionalRessourceManagerFor(part3, roles, re);
+		Roles rolesOwner1 = securityManager.getRoles(owner1);
+		Roles rolesOwner2 = securityManager.getRoles(owner2);
+		Roles rolesPart3 = securityManager.getRoles(part3);
+		boolean institutionMgr1 = repositoryManager.isInstitutionalRessourceManagerFor(owner1, rolesOwner1, re);
+		boolean institutionMgr2 = repositoryManager.isInstitutionalRessourceManagerFor(owner2, rolesOwner2, re);
+		boolean institutionMgr3 = repositoryManager.isInstitutionalRessourceManagerFor(part3, rolesPart3, re);
 	
 		Assert.assertTrue(institutionMgr1);
 		Assert.assertFalse(institutionMgr2);
diff --git a/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java b/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java
index 629db4b0eb0de360876e5380538ac4bfc8f0ed9c..d5f664eaa6ad02a561d61762a08c41b3453e9913 100644
--- a/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java
+++ b/src/test/java/org/olat/repository/manager/RepositoryEntryStatisticsDAOTest.java
@@ -209,7 +209,9 @@ public class RepositoryEntryStatisticsDAOTest extends OlatTestCase {
 		log.info("testIncrementDownloadCounter finished");
 	}
 
-	
+	/**
+	 * Test concurrent increment of the launch counter
+	 */
 	@Test
 	public void concurrentIncrementLaunchCounter() {
 		final List<Exception> exceptionHolder = Collections.synchronizedList(new ArrayList<Exception>(1));
diff --git a/src/test/java/org/olat/restapi/UserMgmtTest.java b/src/test/java/org/olat/restapi/UserMgmtTest.java
index 888c7d182e74e349d95f250b080595141ae83bad..3ffe417a110fd7ead52cdaa55ef513975bd4e935 100644
--- a/src/test/java/org/olat/restapi/UserMgmtTest.java
+++ b/src/test/java/org/olat/restapi/UserMgmtTest.java
@@ -241,7 +241,8 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//prepare some courses
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse();
+		Identity author = JunitTestHelper.createAndPersistIdentityAsUser("auth-" + UUID.randomUUID().toString());
+		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(author);
 		if (!repositoryService.hasRole(id1, entry, GroupRoles.participant.name())){
 			repositoryService.addRole(id1, entry, GroupRoles.participant.name());
 		}
diff --git a/src/test/java/org/olat/test/JunitTestHelper.java b/src/test/java/org/olat/test/JunitTestHelper.java
index b88467250a62f949126f1b9b905d8777a0798df9..d40ea03f8e031651344b6867fdb34a4bd1f77a11 100644
--- a/src/test/java/org/olat/test/JunitTestHelper.java
+++ b/src/test/java/org/olat/test/JunitTestHelper.java
@@ -28,7 +28,9 @@
 */
 package org.olat.test;
 
-import java.util.List;
+import java.io.File;
+import java.net.URL;
+import java.util.Locale;
 import java.util.Random;
 import java.util.UUID;
 
@@ -42,20 +44,21 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Roles;
 import org.olat.core.id.User;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseFactory;
-import org.olat.course.DeployableCourseExport;
-import org.olat.properties.Property;
-import org.olat.properties.PropertyManager;
+import org.olat.course.CourseModule;
+import org.olat.course.ICourse;
 import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryService;
+import org.olat.repository.handlers.RepositoryHandler;
+import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
 import org.olat.user.UserManager;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 /**
  * Description:<br>
@@ -70,6 +73,8 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
  */
 public class JunitTestHelper {
 	
+	private static final OLog log = Tracing.createLoggerFor(JunitTestHelper.class);
+	
 	public static final String PWD = "A6B7C8";
 
 	private static final Random randomResId = new Random();
@@ -190,44 +195,24 @@ public class JunitTestHelper {
 	 * Deploys/imports the "Demo Course".
 	 * @return the created RepositoryEntry
 	 */
-	public static RepositoryEntry deployDemoCourse() {
-		
+	public static RepositoryEntry deployDemoCourse(Identity initialAuthor) {		
+		String displayname = "Demo-Kurs-7.1";
+		String description = "";
+
 		RepositoryEntry re = null;
-		PropertyManager propertyManager = PropertyManager.getInstance();
-		List<Property> l = propertyManager.findProperties(null, null, null, "_o3_", "deployedCourses");
-		if (l.size() > 0) {
-			re = RepositoryManager.getInstance().lookupRepositoryEntry(l.get(0).getLongValue());
-			if (re != null) {
-				//try to load it
-				try {
-					CourseFactory.loadCourse(re.getOlatResource());
-					return re;
-				} catch(Exception ex) {
-					propertyManager.deleteProperties(null, null, null, "_o3_", "deployedCourses");
-					RepositoryManager.getInstance().deleteRepositoryEntry(re);
-				}
-			}
-		}
-		
-		ClassPathXmlApplicationContext beanContext = null;
 		try {
-			createAndPersistIdentityAsAdmin("administrator");
-			beanContext = new ClassPathXmlApplicationContext("/org/olat/test/_spring/demoCourseExport.xml");
-			DeployableCourseExport export = (DeployableCourseExport)beanContext.getBean("demoCourse");
-			if (!export.getDeployableCourseZipFile().exists()) {
-				//do not throw exception as users may upload bad file
-				System.out.println("Cannot deploy course from file: " + export.getIdentifier());
-				return null;
-			}
-			re = CourseFactory.deployCourseFromZIP(export.getDeployableCourseZipFile(), 4);	
-			if (re != null) {
-				Property prop = propertyManager.createPropertyInstance(null, null, null, "_o3_", "deployedCourses", export.getVersion(), re.getKey(), export.getIdentifier(), null);
-				propertyManager.saveProperty(prop);
-			}
-		} finally {
-			beanContext.close();
+			URL courseUrl = JunitTestHelper.class.getResource("file_resources/Demo-Kurs-7.1.zip");
+			File courseFile = new File(courseUrl.toURI());
+			
+			RepositoryHandler courseHandler = RepositoryHandlerFactory.getInstance()
+					.getRepositoryHandler(CourseModule.getCourseTypeName());
+			re = courseHandler.importResource(initialAuthor, displayname, description, true, Locale.ENGLISH, courseFile, null);
+			
+			ICourse course = CourseFactory.loadCourse(re.getOlatResource());
+			CourseFactory.publishCourse(course, RepositoryEntry.ACC_USERS, false,  initialAuthor, Locale.ENGLISH);
+		} catch (Exception e) {
+			log.error("", e);
 		}
 		return re;
 	}
-
 }
diff --git a/src/test/java/org/olat/test/_spring/demoCourseExport.xml b/src/test/java/org/olat/test/_spring/demoCourseExport.xml
deleted file mode 100644
index 4de7af91f4ecf87473d21b7b1532e4ac5c353e5b..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/test/_spring/demoCourseExport.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:context="http://www.springframework.org/schema/context" 
-	xsi:schemaLocation="
-  http://www.springframework.org/schema/beans 
-  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
-  http://www.springframework.org/schema/context 
-  http://www.springframework.org/schema/context/spring-context-3.0.xsd">
-  
-  
-<bean id="demoCourse" class="org.olat.course.DeployableCourseExport">
-	<property name="courseUrl" value="http://nexus.openolat.org/nexus/content/repositories/openolat-snapshots/org/openolat/course/Demo-Kurs/7.1-SNAPSHOT/Demo-Kurs-7.1-SNAPSHOT.zip" />
-	<property name="identifier" value="Demo Kurs" />
-	<property name="version" value="1" />
-</bean>
-  
-</beans>
\ No newline at end of file
diff --git a/src/test/java/org/olat/test/_spring/readme b/src/test/java/org/olat/test/_spring/readme
deleted file mode 100644
index 7a7f170f29cb4ecba920c2d53a7bc1372c9dc39d..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/test/_spring/readme
+++ /dev/null
@@ -1,2 +0,0 @@
-Do not name the spring context files xyzContext.xml otherwise they may get loaded when olat starts. See web.xml for all 
-generic names which are searched on the classpath.
\ No newline at end of file
diff --git a/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip b/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip
new file mode 100644
index 0000000000000000000000000000000000000000..74d45cf865e346b5a167012347ea3fcd50d855df
Binary files /dev/null and b/src/test/java/org/olat/test/file_resources/Demo-Kurs-7.1.zip differ