diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
index 1c9d3ba8e1f344ef8a0ac132155cb95088d85f27..f4497c4fbaa439261c7dcd42160295abe10d0176 100755
--- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
@@ -41,6 +41,7 @@ import org.olat.basesecurity.SecurityGroupMembershipImpl;
 import org.olat.basesecurity.manager.GroupDAO;
 import org.olat.core.CoreSpringFactory;
 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.commons.persistence.PersistentObject;
 import org.olat.core.commons.services.commentAndRating.CommentAndRatingService;
@@ -961,22 +962,17 @@ public class EPStructureManager extends BasicManager {
 			return;//nothing to delete
 		}
 
-		//already delete in removeStructureRecursively: deletePortfolioMapTemplateRecursively((EPStructureElement)map);
+		if(map instanceof EPAbstractMap) {
+			//owner group has its constraints shared beetwen the repository entry and the template
+			((EPAbstractMap)map).getGroups().clear();
+			map = DBFactory.getInstance().getCurrentEntityManager().merge(map);
+		}
+		
 		removeStructureRecursively(map);
-		//already delete in removeStructureRecursively: dbInstance.deleteObject(map);
+		
+		dbInstance.commit();
 	}
 	
-	/*private void deletePortfolioMapTemplateRecursively(EPStructureElement element) {
-		element.getInternalArtefacts().clear();
-		element.setRoot(null);
-		element.setRootMap(null);
-		List<EPStructureToStructureLink> links = element.getInternalChildren();
-		for(EPStructureToStructureLink subLink:links) {
-			deletePortfolioMapTemplateRecursively((EPStructureElement)subLink.getChild());
-		}
-		links.clear();
-	}*/
-	
 	public void removeStructureRecursively(PortfolioStructure struct){
 		List<PortfolioStructure> children = loadStructureChildren(struct); 
 		for (PortfolioStructure childstruct : children) {
diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
index 8e640d14c0d24ade4629e3f9013954aed99fd212..af811b7e78eb227ee91b2dc21e6f8533a1ac47cb 100644
--- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
@@ -180,30 +180,28 @@ public class PortfolioHandler implements RepositoryHandler {
 
 	@Override
 	public boolean readyToDelete(OLATResourceable res, Identity identity, Roles roles, Locale locale, ErrorList errors) {
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
+		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
 		PortfolioStructure map = ePFMgr.loadPortfolioStructure(res);
-		if(map != null) {
-			//owner group has its constraints shared beetwen the repository entry and the template
-			((EPAbstractMap)map).setGroups(null);
-		}
 		if(map instanceof EPStructuredMapTemplate) {
 			EPStructuredMapTemplate exercise = (EPStructuredMapTemplate)map;
-			if (ePFMgr.isTemplateInUse(exercise, null, null, null)) return false;
+			if (ePFMgr.isTemplateInUse(exercise, null, null, null)) {
+				return false;
+			}
 		}
+
 		ReferenceManager refM = ReferenceManager.getInstance();
 		String referencesSummary = refM.getReferencesToSummary(res, locale);
 		if (referencesSummary != null) {
 			Translator translator = Util.createPackageTranslator(RepositoryManager.class, locale);
 			errors.setError(translator.translate("details.delete.error.references", new String[] { referencesSummary }));
 			return false;
-		}		
+		}
 		return true;
 	}
 
 	@Override
 	public boolean cleanupOnDelete(OLATResourceable res) {
-		EPFrontendManager ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
-		ePFMgr.deletePortfolioMapTemplate(res);
+		CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res);
 		return true;
 	}
 
@@ -215,7 +213,7 @@ public class PortfolioHandler implements RepositoryHandler {
 	public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) {
 		MediaResource mr = null;
 
-		EPFrontendManager ePFMgr = (EPFrontendManager)CoreSpringFactory.getBean("epFrontendManager");
+		EPFrontendManager ePFMgr = CoreSpringFactory.getImpl(EPFrontendManager.class);
 		PortfolioStructure structure = ePFMgr.loadPortfolioStructure(res);
 		try {
 			InputStream inOut = EPXStreamHandler.toStream(structure);
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index ac23400c22e7c43bcc7e0f1b9d466b1f53cd03e2..a1143b4a693b61b6bdcfeb365fe2c225fa025502 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -277,7 +277,7 @@ public class RepositoryServiceImpl implements RepositoryService {
 	public void deleteRepositoryEntryAndBaseGroups(RepositoryEntry entry) {
 		RepositoryEntry reloadedEntry = dbInstance.getCurrentEntityManager()
 				.getReference(RepositoryEntry.class, entry.getKey());
-		OLATResource resource = reloadedEntry.getOlatResource();
+		Long resourceKey = reloadedEntry.getOlatResource().getKey();
 
 		Group defaultGroup = reToGroupDao.getDefaultGroup(reloadedEntry);
 		groupDao.removeMemberships(defaultGroup);
@@ -286,8 +286,11 @@ public class RepositoryServiceImpl implements RepositoryService {
 		dbInstance.getCurrentEntityManager().remove(reloadedEntry);
 		groupDao.removeGroup(defaultGroup);
 		dbInstance.commit();
-
-		dbInstance.getCurrentEntityManager().remove(resource);
+		
+		OLATResource reloadedResource = resourceManager.findResourceById(resourceKey);
+		if(reloadedResource != null) {
+			dbInstance.getCurrentEntityManager().remove(reloadedResource);
+		}
 		dbInstance.commit();
 	}
 
diff --git a/src/main/java/org/olat/resource/OLATResourceManager.java b/src/main/java/org/olat/resource/OLATResourceManager.java
index d5d5f7c9af45e92a0ba4fbb2ded8701c59d3a88f..5ae7dd1e60da7f54128609aa3e4eade7b7917488 100644
--- a/src/main/java/org/olat/resource/OLATResourceManager.java
+++ b/src/main/java/org/olat/resource/OLATResourceManager.java
@@ -200,7 +200,7 @@ public class OLATResourceManager extends BasicManager {
 		List<OLATResource> resources = dbInstance.getCurrentEntityManager()
 				.createQuery(s, OLATResource.class)
 				.setParameter("resname", type)
-				.setParameter("resid", resourceableId.longValue())
+				.setParameter("resid", resourceableId)
 				.setHint("org.hibernate.cacheable", Boolean.TRUE)
 				.getResultList();
 
@@ -210,4 +210,15 @@ public class OLATResourceManager extends BasicManager {
 		}
 		return resources.get(0);
 	}
+	
+	public OLATResource findResourceById(Long key) {
+		if (key == null) return null;
+
+		String s = "select ori from org.olat.resource.OLATResourceImpl ori where ori.key=:resourceKey";
+		List<OLATResource> resources = dbInstance.getCurrentEntityManager()
+				.createQuery(s, OLATResource.class)
+				.setParameter("resourceKey", key)
+				.getResultList();
+		return resources.isEmpty() ? null : resources.get(0);
+	}
 }
\ No newline at end of file