diff --git a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java
index 61ccbfb883545eedd216fab5fdf1e140edfc99d7..83697a9050394780655d23dc6d231cfa8804ba7c 100644
--- a/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java
+++ b/src/main/java/org/olat/admin/user/delete/service/UserDeletionManager.java
@@ -58,7 +58,7 @@ import org.olat.core.util.mail.MailBundle;
 import org.olat.core.util.mail.MailManager;
 import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
 import org.olat.registration.RegistrationManager;
@@ -297,7 +297,7 @@ public class UserDeletionManager extends BasicManager {
 		}
 		
 		logInfo("Start EfficiencyStatementManager.archiveUserData for identity=" + identity);
-		EfficiencyStatementManager.getInstance().archiveUserData(identity, getArchivFilePath(identity) );
+		CoreSpringFactory.getImpl(EfficiencyStatementManager.class).archiveUserData(identity, getArchivFilePath(identity) );
 
 		logInfo("Start Deleting user=" + identity);
 		Map<String,UserDataDeletable> userDataDeletableResources = CoreSpringFactory.getBeansOfType(UserDataDeletable.class);
diff --git a/src/main/java/org/olat/course/assessment/AssessmentHelper.java b/src/main/java/org/olat/course/assessment/AssessmentHelper.java
index e2de2a74b674386194a128589bc00191cf322b95..ce91abac23f8e68dfd8490e905d5e2c43290fd85 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentHelper.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentHelper.java
@@ -310,7 +310,7 @@ public class AssessmentHelper {
 	 * @param discardComments
 	 * @return list of object arrays or null if empty
 	 */
-	static List<Map<String,Object>> addAssessableNodeAndDataToList(int recursionLevel, CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean discardEmptyNodes, boolean discardComments) {
+	public static List<Map<String,Object>> addAssessableNodeAndDataToList(int recursionLevel, CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean discardEmptyNodes, boolean discardComments) {
 		// 1) Get list of children data using recursion of this method
 		List<Map<String, Object>> childrenData = new ArrayList<Map<String, Object>>(50);
 		for (int i = 0; i < courseNode.getChildCount(); i++) {
diff --git a/src/main/java/org/olat/course/assessment/AssessmentModule.java b/src/main/java/org/olat/course/assessment/AssessmentModule.java
index c6a0cb84ced9d44b7d49d73848058f3e1ecf13c2..662b5d47b948aabedd0cb6cf8f0e30c5e03ad739 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentModule.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentModule.java
@@ -42,6 +42,7 @@ import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.Structure;
+import org.olat.course.assessment.manager.UpdateEfficiencyStatementsWorker;
 import org.olat.course.editor.PublishEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementsPortletRunController.java b/src/main/java/org/olat/course/assessment/EfficiencyStatementsPortletRunController.java
index c25a05c424155878e39870c4432aba5ef40ace50..21f14d0340d668ef08ad00bdafa8fcccb28de3ff 100644
--- a/src/main/java/org/olat/course/assessment/EfficiencyStatementsPortletRunController.java
+++ b/src/main/java/org/olat/course/assessment/EfficiencyStatementsPortletRunController.java
@@ -60,8 +60,10 @@ import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.event.GenericEventListener;
 import org.olat.course.CourseModule;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
 import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementController;
+import org.springframework.beans.factory.annotation.Autowired;
 
 
 /**
@@ -81,6 +83,9 @@ public class EfficiencyStatementsPortletRunController extends AbstractPortletRun
 	private boolean needReloadModel;
 	private Identity cOwner;
 	private Link showAllLink;
+	
+	@Autowired
+	private EfficiencyStatementManager esm;
 
 	/**
 	 * Constructor
@@ -132,7 +137,7 @@ public class EfficiencyStatementsPortletRunController extends AbstractPortletRun
 	 * @return the PortletEntry list.
 	 */
 	private List<PortletEntry<UserEfficiencyStatementLight>> getAllPortletEntries() {
-		List<UserEfficiencyStatementLight> efficiencyStatementsList = EfficiencyStatementManager.getInstance().findEfficiencyStatementsLight(getIdentity());	
+		List<UserEfficiencyStatementLight> efficiencyStatementsList = esm.findEfficiencyStatementsLight(getIdentity());	
 		List<PortletEntry<UserEfficiencyStatementLight>> portletEntryList = convertEfficiencyStatementToPortletEntryList(efficiencyStatementsList);
 		return portletEntryList;
 	}
@@ -158,7 +163,6 @@ public class EfficiencyStatementsPortletRunController extends AbstractPortletRun
 	 */
 	protected void reloadModel(SortingCriteria sortingCriteria) {
 		if (sortingCriteria.getSortingType() == SortingCriteria.AUTO_SORTING) {
-			EfficiencyStatementManager esm = EfficiencyStatementManager.getInstance();
 			List<UserEfficiencyStatementLight> efficiencyStatementsList = esm.findEfficiencyStatementsLight(getIdentity());
 
 			efficiencyStatementsList = getSortedList(efficiencyStatementsList, sortingCriteria);  		
diff --git a/src/main/java/org/olat/course/assessment/_spring/assessmentContext.xml b/src/main/java/org/olat/course/assessment/_spring/assessmentContext.xml
index 3d1a18c13dd43a9134b2a9dcd1778e99a5505188..95cedcd772ae719f834159d590a29914d9ed1179 100644
--- a/src/main/java/org/olat/course/assessment/_spring/assessmentContext.xml
+++ b/src/main/java/org/olat/course/assessment/_spring/assessmentContext.xml
@@ -9,12 +9,6 @@
   http://www.springframework.org/schema/context/spring-context.xsd">
 
 	<context:component-scan base-package="org.olat.course.assessment" />
-
-	<bean id="org.olat.course.assessment.EfficiencyStatementManager" class="org.olat.course.assessment.EfficiencyStatementManager">
-		<property name="dbInstance" ref="database"/>
-		<property name="userManager" ref="userManager"/>
-		<property name="repositoryManager" ref="repositoryManager"/>
-	</bean>
 	
 	<bean id="assessmentNotificationsTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
 	    <property name="jobDetail" ref="assessmentNotificationsJob" />
diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
index 2a1ca90f12f0b349d9622b781928179695fee8f5..20339a0f1fbe715ccc634fc47484b838e041ef7e 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
@@ -38,7 +38,6 @@ import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentChangedEvent;
 import org.olat.course.assessment.AssessmentLoggingAction;
 import org.olat.course.assessment.AssessmentManager;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.auditing.UserNodeAuditManager;
 import org.olat.course.certificate.CertificateTemplate;
 import org.olat.course.certificate.CertificatesManager;
diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
similarity index 97%
rename from src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java
rename to src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
index 14be0f81eea0b479bf65238b284e1ac5b8decbf0..6f1799999e0b8ae1a07bca9f9dcb0f2250896666 100644
--- a/src/main/java/org/olat/course/assessment/EfficiencyStatementManager.java
+++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
@@ -23,7 +23,7 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.course.assessment;
+package org.olat.course.assessment.manager;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -45,6 +45,12 @@ import org.olat.core.util.xml.XStreamHelper;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
+import org.olat.course.assessment.AssessmentChangedEvent;
+import org.olat.course.assessment.AssessmentHelper;
+import org.olat.course.assessment.AssessmentManager;
+import org.olat.course.assessment.EfficiencyStatement;
+import org.olat.course.assessment.EfficiencyStatementArchiver;
+import org.olat.course.assessment.UserEfficiencyStatement;
 import org.olat.course.assessment.model.UserEfficiencyStatementImpl;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
 import org.olat.course.assessment.model.UserEfficiencyStatementStandalone;
@@ -58,6 +64,8 @@ import org.olat.repository.model.RepositoryEntryRefImpl;
 import org.olat.resource.OLATResource;
 import org.olat.user.UserDataDeletable;
 import org.olat.user.UserManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 import com.thoughtworks.xstream.XStream;
 
@@ -70,58 +78,21 @@ import com.thoughtworks.xstream.XStream;
  * Initial Date:  11.08.2005 <br>
  * @author gnaegi
  */
+@Service
 public class EfficiencyStatementManager extends BasicManager implements UserDataDeletable {
 
 	public static final String KEY_ASSESSMENT_NODES = "assessmentNodes";
 	public static final String KEY_COURSE_TITLE = "courseTitle";
 	public static final String PROPERTY_CATEGORY = "efficiencyStatement";
-	
-	private static EfficiencyStatementManager INSTANCE;
 
+	@Autowired
 	private DB dbInstance;
+	@Autowired
 	private UserManager userManager;
+	@Autowired
 	private RepositoryManager repositoryManager;
-	private final XStream xstream = XStreamHelper.createXStreamInstance();
-
-	
-	/**
-	 * Constructor
-	 */
-	private EfficiencyStatementManager() {
-		INSTANCE = this;
-	}
-	
-	/**
-	 * Factory method
-	 * @return
-	 */
-	public static EfficiencyStatementManager getInstance() {
-		return INSTANCE;
-	}
 	
-	/**
-	 * [used by Spring]
-	 * @param dbInstance
-	 */
-	public void setDbInstance(DB dbInstance) {
-		this.dbInstance = dbInstance;
-	}
-	
-	/**
-	 * [used by Spring]
-	 * @param repositoryManager
-	 */
-	public void setRepositoryManager(RepositoryManager repositoryManager) {
-		this.repositoryManager = repositoryManager;
-	}
-	
-	/**
-	 * [used by Spring]
-	 * @param userManager
-	 */
-	public void setUserManager(UserManager userManager) {
-		this.userManager = userManager;
-	}
+	private final XStream xstream = XStreamHelper.createXStreamInstance();
 
 	/**
 	 * Updates the users efficiency statement for this course. <p>
diff --git a/src/main/java/org/olat/course/assessment/UpdateEfficiencyStatementsWorker.java b/src/main/java/org/olat/course/assessment/manager/UpdateEfficiencyStatementsWorker.java
similarity index 86%
rename from src/main/java/org/olat/course/assessment/UpdateEfficiencyStatementsWorker.java
rename to src/main/java/org/olat/course/assessment/manager/UpdateEfficiencyStatementsWorker.java
index feff25fbf0fd879bb34cb6527617893874425525..14587334c1fea6deda5557c4a24b823f255fb554 100644
--- a/src/main/java/org/olat/course/assessment/UpdateEfficiencyStatementsWorker.java
+++ b/src/main/java/org/olat/course/assessment/manager/UpdateEfficiencyStatementsWorker.java
@@ -23,16 +23,18 @@
 * under the Apache 2.0 license as the original file.
 */
 
-package org.olat.course.assessment;
+package org.olat.course.assessment.manager;
 
 import java.util.List;
 
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.course.assessment.EfficiencyStatementEvent;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 
@@ -59,11 +61,11 @@ public class UpdateEfficiencyStatementsWorker implements Runnable {
 	public void run() {
 		boolean success = false;
 		try{
-			RepositoryManager rm = RepositoryManager.getInstance();
-			EfficiencyStatementManager esm = EfficiencyStatementManager.getInstance();
+			RepositoryManager rm = CoreSpringFactory.getImpl(RepositoryManager.class);
+			EfficiencyStatementManager esm = CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 			RepositoryEntry re = rm.lookupRepositoryEntry(ores, false);
 			
-			List<Identity> identities = EfficiencyStatementManager.getInstance().findIdentitiesWithEfficiencyStatements(re.getKey());
+			List<Identity> identities = esm.findIdentitiesWithEfficiencyStatements(re.getKey());
 			esm.updateEfficiencyStatements(ores, identities);
 			// close db session in this thread
 			DBFactory.getInstance(false).commitAndCloseSession();
diff --git a/src/main/java/org/olat/course/assessment/restapi/EfficiencyStatementWebService.java b/src/main/java/org/olat/course/assessment/restapi/EfficiencyStatementWebService.java
index f1e30ae5a012c7f1c865d22742e077bd6a617db6..9bd08f73bd376e4195acefac28282feecded6193 100644
--- a/src/main/java/org/olat/course/assessment/restapi/EfficiencyStatementWebService.java
+++ b/src/main/java/org/olat/course/assessment/restapi/EfficiencyStatementWebService.java
@@ -39,8 +39,8 @@ import org.olat.basesecurity.BaseSecurity;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.EfficiencyStatementVO;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
index ce5df2ab913279b7e8cbf4aba27a3632d24bfb6d..1140926ef61727ea1d92c454fd26eef4815b7e44 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementController.java
@@ -57,9 +57,9 @@ import org.olat.core.util.mail.ContactMessage;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.IdentityAssessmentEditController;
 import org.olat.course.assessment.IdentityAssessmentOverviewController;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact;
 import org.olat.course.certificate.Certificate;
 import org.olat.course.certificate.CertificatesManager;
@@ -133,14 +133,14 @@ public class CertificateAndEfficiencyStatementController extends BasicController
 	public CertificateAndEfficiencyStatementController(WindowControl wControl, UserRequest ureq, Long resourceKey) {
 		this(wControl, ureq, 
 				ureq.getIdentity(), null, resourceKey, CoreSpringFactory.getImpl(RepositoryService.class).loadByResourceKey(resourceKey),
-				EfficiencyStatementManager.getInstance().getUserEfficiencyStatementByResourceKey(resourceKey, ureq.getIdentity()),
+				CoreSpringFactory.getImpl(EfficiencyStatementManager.class).getUserEfficiencyStatementByResourceKey(resourceKey, ureq.getIdentity()),
 				false);
 	}
 	
 	public CertificateAndEfficiencyStatementController(WindowControl wControl, UserRequest ureq, RepositoryEntry entry) {
 		this(wControl, ureq, 
 				ureq.getIdentity(), null, entry.getOlatResource().getKey(), entry,
-				EfficiencyStatementManager.getInstance().getUserEfficiencyStatementByResourceKey(entry.getOlatResource().getKey(), ureq.getIdentity()),
+				CoreSpringFactory.getImpl(EfficiencyStatementManager.class).getUserEfficiencyStatementByResourceKey(entry.getOlatResource().getKey(), ureq.getIdentity()),
 				false);
 	}
 	
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
index baac00e0fda18fafca2f679aa5fb41dda92831e0..1e4025cec97eb4c3ae6a377e5c3673162fcb129a 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
@@ -59,9 +59,9 @@ import org.olat.core.util.event.GenericEventListener;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.IdentityAssessmentEditController;
 import org.olat.course.assessment.bulk.PassedCellRenderer;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
 import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact;
 import org.olat.course.certificate.CertificateEvent;
@@ -334,7 +334,7 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 			//no business path becouse we cannot launch an efficiency statement
 			artefact.setCollectionDate(new Date());
 			artefact.setTitle(translate("artefact.title", new String[]{ title }));
-			EfficiencyStatement fullStatement = EfficiencyStatementManager.getInstance().getUserEfficiencyStatementByKey(efficiencyStatementKey);
+			EfficiencyStatement fullStatement = esm.getUserEfficiencyStatementByKey(efficiencyStatementKey);
 			artHandler.prefillArtefactAccordingToSource(artefact, fullStatement);
 			ePFCollCtrl = new ArtefactWizzardStepsController(ureq, getWindowControl(), artefact, (VFSContainer)null);
 			listenTo(ePFCollCtrl);
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
index 605ed22a392eb0d3b38ca01d35dd53e6a00a9c09..48dd9cce6471042f2a89787257c792aa4b1e680c 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
@@ -66,7 +66,7 @@ import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSMediaResource;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.certificate.CertificateTemplate;
 import org.olat.course.certificate.CertificatesManager;
 import org.olat.course.certificate.PDFCertificatesOptions;
@@ -122,6 +122,8 @@ public class CertificatesOptionsController extends FormBasicController {
 
 	@Autowired
 	private CertificatesManager certificatesManager;
+	@Autowired
+	private EfficiencyStatementManager efficiencyStatementManager;
 	
 	/**
 	 * @param name
@@ -395,11 +397,11 @@ public class CertificatesOptionsController extends FormBasicController {
 			if(enableEfficiencyStatment) {
 	            // first create the efficiencies, send event to agency (all courses add link)
 				List<Identity> identitiesWithData = course.getCourseEnvironment().getCoursePropertyManager().getAllIdentitiesWithCourseAssessmentData(null);
-				EfficiencyStatementManager.getInstance().updateEfficiencyStatements(course, identitiesWithData);							
+				efficiencyStatementManager.updateEfficiencyStatements(course, identitiesWithData);							
 			} else {
 	            // delete really the efficiencies of the users.
 				RepositoryEntry courseRepoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(course, true);
-				EfficiencyStatementManager.getInstance().deleteEfficiencyStatementsFromCourse(courseRepoEntry.getKey());						
+				efficiencyStatementManager.deleteEfficiencyStatementsFromCourse(courseRepoEntry.getKey());						
 			}
 			
 			//inform everybody else		
diff --git a/src/main/java/org/olat/course/condition/interpreter/score/GetPassedWithCourseIdFunction.java b/src/main/java/org/olat/course/condition/interpreter/score/GetPassedWithCourseIdFunction.java
index 755e6f22bdccaee54eb8c20c30f0a173d2c2f247..1bdcbf647f8eebdc218550eb4aa8e66c06f3f40b 100644
--- a/src/main/java/org/olat/course/condition/interpreter/score/GetPassedWithCourseIdFunction.java
+++ b/src/main/java/org/olat/course/condition/interpreter/score/GetPassedWithCourseIdFunction.java
@@ -25,8 +25,9 @@
 
 package org.olat.course.condition.interpreter.score;
 
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.core.CoreSpringFactory;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.condition.interpreter.AbstractFunction;
 import org.olat.course.condition.interpreter.ArgumentParseException;
 import org.olat.course.condition.interpreter.ConditionInterpreter;
@@ -94,7 +95,7 @@ public class GetPassedWithCourseIdFunction extends AbstractFunction {
 		/*
 		 * the real function evaluation which is used during run time
 		 */
-		EfficiencyStatementManager esm = EfficiencyStatementManager.getInstance();
+		EfficiencyStatementManager esm = CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 		RepositoryEntryRef courseRef = new RepositoryEntryRefImpl(courseRepoEntryKey);
 		UserEfficiencyStatement es = esm.getUserEfficiencyStatementLightByRepositoryEntry(courseRef, getUserCourseEnv().getIdentityEnvironment().getIdentity());
 		if (es == null) return defaultValue();
diff --git a/src/main/java/org/olat/course/condition/interpreter/score/GetScoreWithCourseIdFunction.java b/src/main/java/org/olat/course/condition/interpreter/score/GetScoreWithCourseIdFunction.java
index 648a743f729adb5bfc730327574964c56ad574fa..ddc710c31ad0ecac89b5eb1390ae25d54cdd6414 100644
--- a/src/main/java/org/olat/course/condition/interpreter/score/GetScoreWithCourseIdFunction.java
+++ b/src/main/java/org/olat/course/condition/interpreter/score/GetScoreWithCourseIdFunction.java
@@ -25,8 +25,9 @@
 
 package org.olat.course.condition.interpreter.score;
 
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.core.CoreSpringFactory;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.condition.interpreter.AbstractFunction;
 import org.olat.course.condition.interpreter.ArgumentParseException;
 import org.olat.course.editor.CourseEditorEnv;
@@ -75,7 +76,7 @@ public class GetScoreWithCourseIdFunction extends AbstractFunction {
 		if (cev != null) { return defaultValue(); }
 
 		// the real function evaluation which is used during run time
-		EfficiencyStatementManager esm = EfficiencyStatementManager.getInstance();
+		EfficiencyStatementManager esm = CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 		RepositoryEntryRef courseRef = new RepositoryEntryRefImpl(courseRepoEntryKey);
 		UserEfficiencyStatement es = esm.getUserEfficiencyStatementLightByRepositoryEntry(courseRef, getUserCourseEnv().getIdentityEnvironment().getIdentity());
 		if (es == null) return defaultValue();
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAWorkflowEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAWorkflowEditController.java
index 179d3f54196cc81e051c0794ec120ca3aed67373..2d708db8eef6515f3ebde983096a5333d6a24dc5 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAWorkflowEditController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAWorkflowEditController.java
@@ -618,9 +618,9 @@ public class GTAWorkflowEditController extends FormBasicController {
 				} else {
 					chooseGroupButton.setI18nKey("create.groups");
 				}
-				groupListEl.getRootForm().submit(ureq);
 				cmc.deactivate();
 				cleanUp();
+				groupListEl.getRootForm().submit(ureq);
 			} else if(event == Event.CANCELLED_EVENT) {
 				cmc.deactivate();
 				cleanUp();
diff --git a/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java b/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java
index 364d14f22186f8274851b7b3d3e3dc168498e112..25e5624ad3e53d761d3d38e9135fa20ba1b8f3a8 100644
--- a/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java
+++ b/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java
@@ -33,7 +33,7 @@ import org.olat.basesecurity.Group;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.id.IdentityEnvironment;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.certificate.CertificatesManager;
 import org.olat.course.condition.interpreter.ConditionInterpreter;
 import org.olat.course.editor.CourseEditorEnv;
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
index 4c5733ee49ab7124280a4b27c6c9ce905f51e164..fdf21cbe47a18bb6eb66b04c19deb2edf7f6cb7b 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
@@ -488,15 +488,17 @@ public class BusinessGroupDAO {
 
 		//inner joins
 		if(BusinessGroup.class.equals(resultClass)) {
-			query.append("inner join fetch bgi.resource bgResource ");
+			query.append("inner join fetch bgi.resource bgResource ")
+			     .append("inner join fetch bgi.baseGroup as baseGroup");
 		} else {
 			query.append("inner join bgi.resource bgResource ");
+			if(StringHelper.containsNonWhitespace(params.getOwnerName()) || params.getResources() != null ||
+					resource != null || params.isOwner() || params.isAttendee() || params.isWaiting()) {
+				query.append(" inner join bgi.baseGroup as baseGroup");
+			}
 		}
 
-		if(StringHelper.containsNonWhitespace(params.getOwnerName()) || params.getResources() != null ||
-				resource != null || params.isOwner() || params.isAttendee() || params.isWaiting()) {
-			query.append(" inner join bgi.baseGroup as baseGroup");
-		}
+		
 
 		boolean where = false;
 		if(StringHelper.containsNonWhitespace(params.getOwnerName())) {
diff --git a/src/main/java/org/olat/modules/coach/ui/EfficiencyStatementDetailsController.java b/src/main/java/org/olat/modules/coach/ui/EfficiencyStatementDetailsController.java
index 0de9ad93cc80d18cc340a958ad112ef3616c865a..6ba9a66b521a6a1f1594b5647405d53473e60db9 100644
--- a/src/main/java/org/olat/modules/coach/ui/EfficiencyStatementDetailsController.java
+++ b/src/main/java/org/olat/modules/coach/ui/EfficiencyStatementDetailsController.java
@@ -43,9 +43,9 @@ import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.IdentityAssessmentEditController;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementController;
 import org.olat.modules.coach.model.EfficiencyStatementEntry;
 import org.olat.repository.RepositoryEntry;
@@ -164,7 +164,7 @@ public class EfficiencyStatementDetailsController extends BasicController implem
 		UserEfficiencyStatement statement = statementEntry.getUserEfficencyStatement();
 		EfficiencyStatement efficiencyStatement = null;
 		if(statement != null) {
-			efficiencyStatement = EfficiencyStatementManager.getInstance().getUserEfficiencyStatementByCourseRepoKey(statement.getCourseRepoKey(), assessedIdentity);
+			efficiencyStatement = efficiencyStatementManager.getUserEfficiencyStatementByCourseRepoKey(statement.getCourseRepoKey(), assessedIdentity);
 		}
 		return new CertificateAndEfficiencyStatementController(getWindowControl(), ureq, assessedIdentity, null, entry.getOlatResource().getKey(), entry, efficiencyStatement, true);
 	}
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
index d58bae782c1c14813e1837d4692b735ee6333701..96b10bb46c30fb2f556a643e5f2c01d7032aea27 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java
@@ -38,7 +38,7 @@ import org.olat.core.id.Roles;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.UserEfficiencyStatementImpl;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
 import org.olat.repository.RepositoryEntry;
diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
index 9e84e11ab2d0367ac886a11ce3865a48b666d2f5..360a2a78a19f8ff2c5df5a8b8ca332f2e7252913 100644
--- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
+++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
@@ -68,8 +68,8 @@ import org.olat.core.util.vfs.VFSContainerMapper;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.assessment.AssessmentHelper;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.run.RunMainController;
 import org.olat.group.BusinessGroup;
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_8_1_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_8_1_0.java
index 950584bb3e5fb5cb4442ba2211b757fa2a9a674c..195b696961a9d29cf93b3daa760df8f0cfabc18d 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_8_1_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_8_1_0.java
@@ -33,7 +33,7 @@ import org.olat.core.commons.services.notifications.Publisher;
 import org.olat.core.id.Identity;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.course.assessment.EfficiencyStatement;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManagerImpl;
 import org.olat.course.assessment.model.UserCourseInfosImpl;
diff --git a/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java b/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
index 472f747e5c1cc6b3e360689c25eb822b07e1baca..120e7b73d5b617beffc720a2152553ab8e2465d6 100644
--- a/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
+++ b/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
@@ -58,7 +58,7 @@ import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentChangedEvent;
 import org.olat.course.assessment.AssessmentLoggingAction;
 import org.olat.course.assessment.AssessmentManager;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.auditing.UserNodeAuditManager;
 import org.olat.course.certificate.CertificateTemplate;
 import org.olat.course.certificate.CertificatesManager;
@@ -584,7 +584,7 @@ public class NewCachePersistingAssessmentManager {
 				long attempts = incrementNodeAttemptsProperty(courseNode, identity, cpm);
 				if(courseNode instanceof AssessableCourseNode) {
           // Update users efficiency statement
-				  EfficiencyStatementManager esm =	EfficiencyStatementManager.getInstance();
+				  EfficiencyStatementManager esm =	CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 				  esm.updateUserEfficiencyStatement(userCourseEnv);
 				}
 				return attempts;
@@ -879,7 +879,7 @@ public class NewCachePersistingAssessmentManager {
 				if(courseNode instanceof AssessableCourseNode) {
 				  userCourseEnv.getScoreAccounting().scoreInfoChanged((AssessableCourseNode)courseNode, scoreEvaluation);
 				  // Update users efficiency statement
-				  EfficiencyStatementManager esm =	EfficiencyStatementManager.getInstance();
+				  EfficiencyStatementManager esm =	CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 				  esm.updateUserEfficiencyStatement(userCourseEnv);
 				}
 				
@@ -971,7 +971,7 @@ public class NewCachePersistingAssessmentManager {
 		DBFactory.getInstance().commitAndCloseSession();
 		if (courseNode instanceof AssessableCourseNode) {
 			userCourseEnv.getScoreAccounting().scoreInfoChanged((AssessableCourseNode) courseNode, scoreEvaluation);
-			EfficiencyStatementManager esm = EfficiencyStatementManager.getInstance();
+			EfficiencyStatementManager esm = CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 			esm.updateUserEfficiencyStatement(userCourseEnv);
 		}
 		return attempts;
diff --git a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
index 200b734c98a13465d86885e5910e84f0cc5667a5..5971d496bec3e957a23885f8d8f67fe79a48ca5c 100644
--- a/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
+++ b/src/test/java/org/olat/course/assessment/AssessmentManagerTest.java
@@ -52,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.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.config.CourseConfig;
 import org.olat.course.nodes.AssessableCourseNode;
 import org.olat.course.nodes.CourseNode;
diff --git a/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java b/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java
index a584dddafdfe0633858a5a79c279592d8586fa43..dafb8334fa2a30ee3e29d5065f91186e71c2f968 100644
--- a/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java
+++ b/src/test/java/org/olat/course/assessment/manager/EfficiencyStatementManagerTest.java
@@ -31,7 +31,6 @@ import org.olat.core.id.Roles;
 import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.config.CourseConfig;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
@@ -53,6 +52,8 @@ public class EfficiencyStatementManagerTest extends OlatTestCase {
 	private BaseSecurity securityManager;
 	@Autowired
 	private RepositoryManager repositoryManager;
+	@Autowired
+	private EfficiencyStatementManager efficiencyStatementManager;
 	
 	@Test
 	public void testBigDatas() {
@@ -63,7 +64,6 @@ public class EfficiencyStatementManagerTest extends OlatTestCase {
 		
 		List<Identity> loadIdentities = securityManager
 				.getVisibleIdentitiesByPowerSearch(null, null, false, null, null, null, null, null, 0, 10000);
-		EfficiencyStatementManager efficiencyStatementManager = EfficiencyStatementManager.getInstance();
 		
 		int count = 0;
 		for(RepositoryEntry entry:entries) {
diff --git a/src/test/java/org/olat/modules/coach/manager/CoachingDAOTest.java b/src/test/java/org/olat/modules/coach/manager/CoachingDAOTest.java
index 9609cf432f255128533286a26e15c537f825c0a2..19ffcb76a719db4e13778ad3db5cba09669091bb 100644
--- a/src/test/java/org/olat/modules/coach/manager/CoachingDAOTest.java
+++ b/src/test/java/org/olat/modules/coach/manager/CoachingDAOTest.java
@@ -41,7 +41,7 @@ import org.olat.core.id.UserConstants;
 import org.olat.core.util.CodeHelper;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
-import org.olat.course.assessment.EfficiencyStatementManager;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupRef;
diff --git a/src/test/java/org/olat/restapi/EfficiencyStatementTest.java b/src/test/java/org/olat/restapi/EfficiencyStatementTest.java
index bc9380bc3147beb5b3bbfe1136a6c9f75ee4b720..f2d367c8078a646d1b16f54f8a6217cd3feb1245 100644
--- a/src/test/java/org/olat/restapi/EfficiencyStatementTest.java
+++ b/src/test/java/org/olat/restapi/EfficiencyStatementTest.java
@@ -39,8 +39,8 @@ import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.course.ICourse;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.UserEfficiencyStatement;
+import org.olat.course.assessment.manager.EfficiencyStatementManager;
 import org.olat.course.assessment.model.EfficiencyStatementVO;
 import org.olat.repository.RepositoryEntry;
 import org.olat.resource.OLATResource;