diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
index f4497c4fbaa439261c7dcd42160295abe10d0176..1536171ab6def8a3fb01439b324f177666e673d2 100755
--- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
+++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java
@@ -41,7 +41,6 @@ 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,19 +960,11 @@ public class EPStructureManager extends BasicManager {
 		if(map == null) {
 			return;//nothing to delete
 		}
-
-		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);
-		
 		dbInstance.commit();
 	}
 	
-	public void removeStructureRecursively(PortfolioStructure struct){
+	public void removeStructureRecursively(PortfolioStructure struct) {
 		List<PortfolioStructure> children = loadStructureChildren(struct); 
 		for (PortfolioStructure childstruct : children) {
 			removeStructureRecursively(childstruct);
@@ -993,9 +984,8 @@ public class EPStructureManager extends BasicManager {
 		struct.getCollectRestrictions().clear();
 		
 		// remove sharings
-		if (struct instanceof EPAbstractMap){
-			List<EPMapPolicy> noMorePol = new ArrayList<EPMapPolicy>();
-			policyManager.updateMapPolicies((PortfolioStructureMap) struct, noMorePol);
+		if (struct instanceof EPAbstractMap) {
+			((EPAbstractMap)struct).getGroups().clear();
 		}
 		
 		// remove comments and ratings
@@ -1015,7 +1005,11 @@ public class EPStructureManager extends BasicManager {
 			removeBaseGroup((EPAbstractMap)struct);
 		}
 		
-		resourceManager.deleteOLATResourceable(struct);
+		//EPStructuredMapTemplates are linked to a repository entry
+		//which need the resource
+		if(!(struct instanceof EPStructuredMapTemplate)) {
+			resourceManager.deleteOLATResourceable(struct);
+		}
 	}
 	
 	private void removeBaseGroup(EPAbstractMap map) {
diff --git a/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java b/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java
index 7ca021872078365a1acdcf9ddcb1d8171e1eff72..5c216a23fb9bb653ca403bcc68b199033f1afcb7 100644
--- a/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java
+++ b/src/test/java/org/olat/portfolio/EPFrontendManagerTest.java
@@ -28,13 +28,16 @@ import static org.junit.Assert.assertTrue;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.Invitation;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.portfolio.manager.EPMapPolicy;
 import org.olat.portfolio.manager.EPMapPolicy.Type;
@@ -52,6 +55,7 @@ import org.olat.portfolio.model.structel.StructureStatusEnum;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoryService;
+import org.olat.repository.handlers.RepositoryHandlerFactory;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
 import org.olat.test.JunitTestHelper;
@@ -99,6 +103,8 @@ public class EPFrontendManagerTest extends OlatTestCase {
 	private RepositoryService repositoryService;
 	@Autowired
 	private OLATResourceManager resourceManager;
+	@Autowired
+	private RepositoryHandlerFactory repositoryHandlerFactory;
 	
 	@Before
 	public void setUp() {
@@ -702,4 +708,124 @@ public class EPFrontendManagerTest extends OlatTestCase {
 		assertEquals(1, count2);
 		assertEquals(1, count3);
 	}
+	
+	/**
+	 * Create a map with a page and an artefact. Delete it.
+	 */
+	@Test
+	public void deleteMap_pageAndArtefact() {
+		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-4");
+		
+		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(id, "Delete map", "Description");
+		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(map, "Page while be deleted", "Page description");
+		assertNotNull(page);
+		dbInstance.commitAndCloseSession();
+		//create artefact
+		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(id, "Forum");
+		dbInstance.commitAndCloseSession();		
+		//create the link
+		epFrontendManager.addArtefactToStructure(id, artefact, page);
+		dbInstance.commitAndCloseSession();
+		
+		//reload and check
+		PortfolioStructure reloadedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
+		Assert.assertNotNull(reloadedMap);
+		Assert.assertEquals(map, reloadedMap);
+		List<PortfolioStructure> reloadedPages = epFrontendManager.loadStructureChildren(reloadedMap);
+		Assert.assertNotNull(reloadedPages);
+		Assert.assertEquals(1, reloadedPages.size());
+		PortfolioStructure reloadedPage = reloadedPages.get(0);
+		Assert.assertEquals(page, reloadedPage);
+		List<AbstractArtefact> reloadedArtefacts = epFrontendManager.getArtefacts(reloadedPage);
+		Assert.assertNotNull(reloadedArtefacts);
+		Assert.assertEquals(1, reloadedArtefacts.size());
+		AbstractArtefact reloadedArtefact = reloadedArtefacts.get(0);
+		Assert.assertEquals(artefact, reloadedArtefact);
+		dbInstance.commitAndCloseSession();
+		
+		//delete the map
+		epFrontendManager.deletePortfolioStructure(reloadedMap);
+		dbInstance.commit();
+		
+		//what is deleted?
+		AbstractArtefact notDeletedArtefact = epFrontendManager.loadArtefactByKey(artefact.getKey());
+		Assert.assertNotNull(notDeletedArtefact);
+		PortfolioStructure deletedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
+		Assert.assertNull(deletedMap);
+		PortfolioStructure deletedPage = epFrontendManager.loadPortfolioStructureByKey(page.getKey());
+		Assert.assertNull(deletedPage);
+	}
+	
+	/**
+	 * Delete a map with policies
+	 */
+	@Test
+	public void deleteMap_pageAndPolicy() {
+		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-5");
+		PortfolioStructureMap map = epFrontendManager.createAndPersistPortfolioDefaultMap(id, "Delete map", "Description");
+		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(map, "Page while be deleted", "Page description");
+		AbstractArtefact artefact = epFrontendManager.createAndPersistArtefact(id, "Forum");
+		epFrontendManager.addArtefactToStructure(id, artefact, page);
+		dbInstance.commitAndCloseSession();
+		//add policy
+		List<EPMapPolicy> policies = new ArrayList<EPMapPolicy>();
+		EPMapPolicy userPolicy = new EPMapPolicy();
+		userPolicy.setType(Type.user);
+		userPolicy.getIdentities().add(ident2);
+		userPolicy.getIdentities().add(ident3);
+		policies.add(userPolicy);
+		epFrontendManager.updateMapPolicies(map, policies);
+		dbInstance.commitAndCloseSession();
+
+		//reload and check
+		PortfolioStructure reloadedMap = epFrontendManager.loadPortfolioStructureByKey(map.getKey());
+		Assert.assertNotNull(reloadedMap);
+		OLATResource reloadedResource = reloadedMap.getOlatResource();
+		Assert.assertNotNull(reloadedResource);		
+		Assert.assertEquals(map, reloadedMap);
+		boolean shared = epFrontendManager.isMapShared(reloadedResource);
+		Assert.assertTrue(shared);
+		boolean visibleToIdent2 = epFrontendManager.isMapVisible(ident2, reloadedResource);
+		Assert.assertTrue(visibleToIdent2);
+		
+		//delete the map
+		epFrontendManager.deletePortfolioStructure(reloadedMap);
+		dbInstance.commit();
+		boolean deletedShared = epFrontendManager.isMapShared(reloadedResource);
+		Assert.assertFalse(deletedShared);
+		boolean deletedVisibleToIdent2 = epFrontendManager.isMapVisible(ident2, reloadedResource);
+		Assert.assertFalse(deletedVisibleToIdent2);
+	}
+	
+	/**
+	 * Delete a portfolio template
+	 */
+	@Test
+	public void deleteMap_template() {
+		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("frtuse-6");
+		//save parent and 20 children
+		
+		OLATResource resource = epStructureManager.createPortfolioMapTemplateResource();
+		RepositoryEntry re = repositoryService.create(id, null, "", "Template to delete", "", resource, RepositoryEntry.ACC_OWNERS);
+		PortfolioStructureMap template = epStructureManager.createAndPersistPortfolioMapTemplateFromEntry(id, re);
+		PortfolioStructure page = epFrontendManager.createAndPersistPortfolioPage(template, "Page while be deleted", "Page description");
+		dbInstance.commitAndCloseSession();
+		
+		//reload and check
+		PortfolioStructure reloadedTemplate = epFrontendManager.loadPortfolioStructureByKey(template.getKey());
+		Assert.assertNotNull(reloadedTemplate);
+		OLATResource reloadedResource = reloadedTemplate.getOlatResource();
+		Assert.assertNotNull(reloadedResource);		
+		Assert.assertEquals(template, reloadedTemplate);
+		List<PortfolioStructure> reloadedPages = epFrontendManager.loadStructureChildren(reloadedTemplate);
+		Assert.assertNotNull(reloadedPages);
+		Assert.assertEquals(1, reloadedPages.size());
+		Assert.assertEquals(page, reloadedPages.get(0));
+
+		//delete
+		RepositoryEntry reloadedRe = repositoryService.loadByKey(re.getKey());
+		Roles roles = new Roles(true, false, false, false, false, false, false);
+		repositoryService.delete(reloadedRe, id, roles, Locale.GERMAN);
+		dbInstance.commit();	
+	}
 }