diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index f5d967e4756c53d182775e42b4f55f1654152295..586465ef88693e8f1dc5abd2dca73becc400f024 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -111,6 +111,7 @@ import org.olat.course.nodes.BCCourseNode;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.nodes.STCourseNode;
 import org.olat.course.nodes.TACourseNode;
+import org.olat.course.nodes.gta.GTAManager;
 import org.olat.course.properties.CoursePropertyManager;
 import org.olat.course.properties.PersistingCoursePropertyManager;
 import org.olat.course.run.RunMainController;
@@ -323,7 +324,7 @@ public class CourseFactory extends BasicManager {
 	 * 
 	 * @param res
 	 */
-	public static void deleteCourse(OLATResource res) {
+	public static void deleteCourse(RepositoryEntry entry, OLATResource res) {
 		final long start = System.currentTimeMillis();
 		log.info("deleteCourse: starting to delete course. res="+res);
 
@@ -346,6 +347,7 @@ public class CourseFactory extends BasicManager {
 			TreeVisitor tv = new TreeVisitor(visitor, course.getRunStructure().getRootNode(), true);
 			tv.visitAll();
 		}
+		
 
 		// delete assessment notifications
 		OLATResourceable assessmentOres = OresHelper.createOLATResourceableInstance(CourseModule.ORES_COURSE_ASSESSMENT, res.getResourceableId());
@@ -373,6 +375,8 @@ public class CourseFactory extends BasicManager {
 		calManager.deleteCourseCalendar(res);
 		// delete IM messages
 		CoreSpringFactory.getImpl(InstantMessagingService.class).deleteMessages(res);
+		//delete tasks
+		CoreSpringFactory.getImpl(GTAManager.class).deleteAllTaskLists(entry);
 
 		// cleanup cache
 		removeFromCache(res.getResourceableId());
diff --git a/src/main/java/org/olat/course/CourseModule.java b/src/main/java/org/olat/course/CourseModule.java
index 1bcb4acee2c6dae66fdd41c746f4cc45cadb6625..1cb412da1604d9b5e49777da249f6f6c0745c11b 100644
--- a/src/main/java/org/olat/course/CourseModule.java
+++ b/src/main/java/org/olat/course/CourseModule.java
@@ -270,7 +270,7 @@ public class CourseModule extends AbstractOLATModule {
 		try {
 			propertyManager.deleteProperty(prop);
 			repositoryService.deleteRepositoryEntryAndBaseGroups(re);
-			CourseFactory.deleteCourse(re.getOlatResource());
+			CourseFactory.deleteCourse(re, re.getOlatResource());
 			OLATResource ores = olatResourceManager.findResourceable(re.getOlatResource());
 			olatResourceManager.deleteOLATResource(ores);
 		} catch (Exception e) {
diff --git a/src/main/java/org/olat/course/nodes/gta/GTAManager.java b/src/main/java/org/olat/course/nodes/gta/GTAManager.java
index c6eae46524ef1f69ca984a2f35fa96177235bfc6..41dd51f6d8cf0951b465de0996c965c2a213388a 100644
--- a/src/main/java/org/olat/course/nodes/gta/GTAManager.java
+++ b/src/main/java/org/olat/course/nodes/gta/GTAManager.java
@@ -164,8 +164,21 @@ public interface GTAManager {
 	
 	public int updateTaskName(TaskList taskList, String currentTaskName, String newTaskName);
 	
+	/**
+	 * Delete the task list and the tasks of the specified course element of the course.
+	 * @param entry The repository entry of the course
+	 * @param cNode The course element
+	 * @return
+	 */
 	public int deleteTaskList(RepositoryEntryRef entry, GTACourseNode cNode);
 	
+	/**
+	 * Delete all the task list and tasks of a course specified by its repository entry.
+	 * @param entry
+	 * @return
+	 */
+	public int deleteAllTaskLists(RepositoryEntryRef entry);
+	
 	
 	public Membership getMembership(IdentityRef identity, RepositoryEntryRef entry, GTACourseNode cNode);
 	
diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
index c7756d8529aa5a4e1320d0bfad42a038127623d8..342cc27f43eda50406bf9c502fe690f8493d1487 100644
--- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
+++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java
@@ -30,6 +30,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import javax.persistence.Query;
 import javax.persistence.LockModeType;
 
 import org.olat.basesecurity.GroupRoles;
@@ -483,6 +484,30 @@ public class GTAManagerImpl implements GTAManager {
 		return numOfDeletedObjects;
 	}
 
+	@Override
+	public int deleteAllTaskLists(RepositoryEntryRef entry) {
+		String q = "select tasks from gtatasklist tasks where tasks.entry.key=:entryKey";
+		List<TaskList> taskLists = dbInstance.getCurrentEntityManager().createQuery(q, TaskList.class)
+			.setParameter("entryKey", entry.getKey())
+			.getResultList();
+		
+		String deleteTasks = "delete from gtatask as task where task.taskList.key=:taskListKey";
+		Query deleteTaskQuery = dbInstance.getCurrentEntityManager().createQuery(deleteTasks);
+		
+		int numOfDeletedObjects = 0;
+		for(TaskList taskList:taskLists) {
+			int numOfTasks = deleteTaskQuery.setParameter("taskListKey", taskList.getKey()).executeUpdate();
+			numOfDeletedObjects += numOfTasks;
+		}
+		
+		String deleteTaskLists = "delete from gtatasklist as tasks where tasks.entry.key=:entryKey";
+		numOfDeletedObjects +=  dbInstance.getCurrentEntityManager()
+				.createQuery(deleteTaskLists)
+				.setParameter("entryKey", entry.getKey())
+				.executeUpdate();
+		return numOfDeletedObjects;	
+	}
+
 	@Override
 	public List<Task> getTasks(TaskList taskList, GTACourseNode cNode) {
 		StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/org/olat/login/auth/OLATAuthManager.java b/src/main/java/org/olat/login/auth/OLATAuthManager.java
index 5c9bc1a9aa6350e06fb54641d32bcc7b5472acd3..0161c09c15e0a8e959a108a40310f1a59dad7297 100644
--- a/src/main/java/org/olat/login/auth/OLATAuthManager.java
+++ b/src/main/java/org/olat/login/auth/OLATAuthManager.java
@@ -106,8 +106,14 @@ public class OLATAuthManager extends BasicManager implements AuthenticationSPI {
 			// check for email instead of username if ident is null
 			if(loginModule.isAllowLoginUsingEmail()) {
 				if (MailHelper.isValidEmailAddress(login)){
-					ident = userManager.findIdentityByEmail(login);
+					List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(login));
 					// check for email changed with verification workflow
+					if(identities.size() == 1) {
+						ident = identities.get(0);
+					} else if(identities.size() > 1) {
+						logError("more than one identity found with email::" + login, null);
+					}
+					
 					if (ident == null) {
 						ident = findIdentInChangingEmailWorkflow(login);
 					}
diff --git a/src/main/java/org/olat/registration/PwChangeController.java b/src/main/java/org/olat/registration/PwChangeController.java
index 41a9b972c1506e4536d772621b9fdf13158cfcb4..744f4cb05d210a7eb2bde0390ac6e3c550cfb666 100644
--- a/src/main/java/org/olat/registration/PwChangeController.java
+++ b/src/main/java/org/olat/registration/PwChangeController.java
@@ -26,7 +26,9 @@
 package org.olat.registration;
 
 import java.text.DateFormat;
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 
 import org.olat.basesecurity.Authentication;
@@ -83,6 +85,8 @@ public class PwChangeController extends BasicController {
 	
 	@Autowired
 	private RegistrationManager rm;
+	@Autowired
+	private UserManager userManager;
 	
 	/**
 	 * Controller to change a user's password.
@@ -167,6 +171,7 @@ public class PwChangeController 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) {
 		if (source == pwf) {
 			// pwchange Form was clicked
@@ -179,9 +184,14 @@ public class PwChangeController extends BasicController {
 				pwchangeHomelink.setCustomEnabledLinkCSS("btn btn-primary");
 				//pwf.setVisible(false);
 				pwarea.setVisible(false);
-				Identity identToChange = UserManager.getInstance().findIdentityByEmail(tempKey.getEmailAddress());
-				if(identToChange == null || !pwf.saveFormData(identToChange)) {
+				List<Identity> identToChanges = userManager.findIdentitiesByEmail(Collections.singletonList(tempKey.getEmailAddress()));
+				if(identToChanges == null || identToChanges.size() == 0 || identToChanges.size() > 1) {
 					getWindowControl().setError(translate("pwchange.failed"));
+				} else {
+					Identity identToChange = identToChanges.get(0);
+					if(!pwf.saveFormData(identToChange)) {
+						getWindowControl().setError(translate("pwchange.failed"));
+					}
 				}
 				rm.deleteTemporaryKeyWithId(tempKey.getRegistrationKey());				
 			} else if (event == Event.CANCELLED_EVENT) {
@@ -213,7 +223,10 @@ public class PwChangeController extends BasicController {
 					// Try fallback with email, maybe user used his email address instead
 					// only do this, if its really an email, may lead to multiple results else.
 					if (MailHelper.isValidEmailAddress(emailOrUsername)) {
-						identity = UserManager.getInstance().findIdentityByEmail(emailOrUsername);
+						List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(emailOrUsername));
+						if(identities.size() == 1) {
+							identity = identities.get(0);
+						}
 					}
 				}
 				if (identity != null) {
diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java
index b68e7742a7b8abcc24e30f73555f9dbe92a55c17..70b19e49ad7c383bf90ac0cf5f7b4999953c9c30 100644
--- a/src/main/java/org/olat/repository/handlers/BlogHandler.java
+++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java
@@ -131,7 +131,7 @@ public class BlogHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
 		// For now, notifications are not implemented since a blog feed is meant
 		// to be subscriped to anyway.
diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java
index 812d5e832d5b513e63b928c24dffc008880ae330..4560823d42422c4669148412f7c971b5ade629a8 100644
--- a/src/main/java/org/olat/repository/handlers/CourseHandler.java
+++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java
@@ -561,13 +561,13 @@ public class CourseHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		// notify all current users of this resource (course) that it will be deleted now.
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
 		//archiving is done within readyToDelete		
 		OLATResourceManager rm = OLATResourceManager.getInstance();
 		OLATResource resource = rm.findResourceable(res);
-		CourseFactory.deleteCourse(resource);
+		CourseFactory.deleteCourse(entry, resource);
 		return true;
 	}
 
diff --git a/src/main/java/org/olat/repository/handlers/FileHandler.java b/src/main/java/org/olat/repository/handlers/FileHandler.java
index 9b448249d7c3e2596e397efb65369e78b694a4f1..b33db570ade3d68157d1af0409f67bb4bc7ed863 100644
--- a/src/main/java/org/olat/repository/handlers/FileHandler.java
+++ b/src/main/java/org/olat/repository/handlers/FileHandler.java
@@ -60,7 +60,7 @@ public abstract class FileHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry,  OLATResourceable res) {
 		// notify all current users of this resource (content packaging file resource) that it will be deleted now.
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
 		FileResourceManager.getInstance().deleteFileResource(res);
diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
index 60018eab6c9ce2bd0b571c0c62dcaa30581d08eb..a0b69f8fa48d11ff6e43dbc44a1edc8f98e430db 100644
--- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java
@@ -221,7 +221,7 @@ public class GlossaryHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		// FIXME fg
 		// do not need to notify all current users of this resource, since the only
 		// way to access this resource
diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
index 38de9b2689583f0f6877b052f70ae8ef73ed96be..32dc081eeef4bb0267c94004db71f7d74db12b5e 100644
--- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
@@ -131,7 +131,7 @@ public class PodcastHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
 		// For now, notifications are not implemented since a podcast feed is meant
 		// to be subscriped to anyway.
diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
index 3f0e4fee411650887ba3067441c213037daa76b5..feec8099319bb84c6c5a400ace73bb8d912605ee 100644
--- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java
@@ -189,7 +189,7 @@ public class PortfolioHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res);
 		return true;
 	}
diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
index 18dd35bb594220a66f2a54f1e610aa0c0deb5d55..952005bef92bf7e78f07afdc1d58ec8687917e02 100644
--- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
+++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java
@@ -176,7 +176,7 @@ public interface RepositoryHandler {
 	 * @param wControl
 	 * @return true if delete successfull, false if not.
 	 */
-	public boolean cleanupOnDelete(OLATResourceable res);
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res);
 
 	/**
 	 * Called if the repository entry referencing the given Resourceable will be deleted
diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
index f98f6f4b776eda7cd5e4b58c1a11d485534859c5..61433267fb00a0d84ca8c8db4180369c76936621 100644
--- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java
@@ -209,7 +209,7 @@ public class SharedFolderHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		// do not need to notify all current users of this resource, since the only
 		// way to access this resource
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java
index 929e748ddddbfcac66e1819bfad9143a31cb6818..6e6292a81c3868bc28f67fcadc4919c6f7ae1a61 100644
--- a/src/main/java/org/olat/repository/handlers/WikiHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java
@@ -267,7 +267,7 @@ public class WikiHandler implements RepositoryHandler {
 	}
 
 	@Override
-	public boolean cleanupOnDelete(OLATResourceable res) {
+	public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) {
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res);
 		//delete also notifications
 		NotificationsManager.getInstance().deletePublishersOf(res);
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index a183b4ad66078c6fb9d50f9e2a37c907f24ecbfe..c7e34902061a9c45e2e733c9f4bf9154d4fadfed 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -327,7 +327,7 @@ public class RepositoryServiceImpl implements RepositoryService {
 		
 		// inform handler to do any cleanup work... handler must delete the
 		// referenced resourceable a swell.
-		handler.cleanupOnDelete(resource);
+		handler.cleanupOnDelete(entry, resource);
 		
 		dbInstance.commit();
 
diff --git a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java
index db1cfc1066d12f3c12f3e606467abb886d4b5c42..91eb3470a0007e6da262471151204cbc6eeb1190 100644
--- a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java
+++ b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java
@@ -25,6 +25,7 @@ import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.GroupRoles;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.course.nodes.GTACourseNode;
@@ -39,6 +40,7 @@ import org.olat.group.manager.BusinessGroupDAO;
 import org.olat.group.manager.BusinessGroupRelationDAO;
 import org.olat.modules.vitero.model.GroupRole;
 import org.olat.repository.RepositoryEntry;
+import org.olat.repository.manager.RepositoryEntryRelationDAO;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +61,8 @@ public class GTAManagerTest extends OlatTestCase {
 	private BusinessGroupDAO businessGroupDao;
 	@Autowired
 	private BusinessGroupRelationDAO businessGroupRelationDao;
+	@Autowired
+	private RepositoryEntryRelationDAO repositoryEntryRelationDao;
 	
 	@Test
 	public void createIfNotExists() {
@@ -467,6 +471,123 @@ public class GTAManagerTest extends OlatTestCase {
 		Assert.assertEquals(1, notDeletedAssignedTasks2.size());
 	}
 	
+	@Test
+	public void deleteAllTaskLists() {
+		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-9");
+		Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-10");
+		dbInstance.commit();
+		RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry("", false);
+		repositoryEntryRelationDao.addRole(coach, re, GroupRoles.coach.name());
+		repositoryEntryRelationDao.addRole(participant, re, GroupRoles.participant.name());
+
+		GTACourseNode node = new GTACourseNode();
+		node.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name());
+		TaskList tasks = gtaManager.createIfNotExists(re, node);
+		File taskFile = new File("bg.txt");
+		Assert.assertNotNull(tasks);
+		dbInstance.commit();
+		
+		//select
+		AssignmentResponse response = gtaManager.selectTask(participant, tasks, node, taskFile);
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(response);
+		
+		//check that there is tasks
+		List<Task> assignedTasks = gtaManager.getTasks(participant, re, node);
+		Assert.assertNotNull(assignedTasks);
+		Assert.assertEquals(1, assignedTasks.size());
+		
+		//delete
+		int numOfDeletedObjects = gtaManager.deleteAllTaskLists(re);
+		Assert.assertEquals(2, numOfDeletedObjects);
+		dbInstance.commitAndCloseSession();
+		
+		//check that there isn't any tasks
+		List<Task> deletedAssignedTasks = gtaManager.getTasks(participant, re, node);
+		Assert.assertNotNull(deletedAssignedTasks);
+		Assert.assertEquals(0, deletedAssignedTasks.size());
+	}
+	
+	/**
+	 * Create 2 pseudo courses in a course, and delete the task of the first course
+	 * and check that the task of second are always there.
+	 * 
+	 */
+	@Test
+	public void deleteAllTaskLists_parano() {
+		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-20");
+		Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-21");
+		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-22");
+		
+		RepositoryEntry re1 = JunitTestHelper.createAndPersistRepositoryEntry("", false);
+		repositoryEntryRelationDao.addRole(coach, re1, GroupRoles.coach.name());
+		repositoryEntryRelationDao.addRole(participant1, re1, GroupRoles.participant.name());
+		repositoryEntryRelationDao.addRole(participant2, re1, GroupRoles.participant.name());
+		
+		//course 1
+		GTACourseNode node1 = new GTACourseNode();
+		node1.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name());
+		TaskList tasks1 = gtaManager.createIfNotExists(re1, node1);
+		File taskFile = new File("bg.txt");
+		Assert.assertNotNull(tasks1);
+		dbInstance.commit();
+
+		RepositoryEntry re2 = JunitTestHelper.createAndPersistRepositoryEntry("", false);
+		repositoryEntryRelationDao.addRole(coach, re2, GroupRoles.coach.name());
+		repositoryEntryRelationDao.addRole(participant1, re2, GroupRoles.participant.name());
+
+		//participant 2 course 2
+		GTACourseNode node2 = new GTACourseNode();
+		node2.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name());
+		TaskList tasks2 = gtaManager.createIfNotExists(re2, node2);
+		Assert.assertNotNull(tasks2);
+		dbInstance.commit();
+		
+		//participant 1 and 2 select course 1
+		AssignmentResponse response1_1 = gtaManager.selectTask(participant1, tasks1, node1, taskFile);
+		AssignmentResponse response1_2 = gtaManager.selectTask(participant2, tasks1, node1, taskFile);
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(response1_1);
+		Assert.assertNotNull(response1_2);
+
+		//participant 2 select node 2
+		AssignmentResponse response2_2 = gtaManager.selectTask(participant2, tasks2, node2, taskFile);
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(response2_2);
+		
+		//check that there is tasks
+		List<Task> assignedTasks1_1 = gtaManager.getTasks(participant1, re1, node1);
+		Assert.assertNotNull(assignedTasks1_1);
+		Assert.assertEquals(1, assignedTasks1_1.size());
+		
+		List<Task> assignedTasks1_2 = gtaManager.getTasks(participant2, re1, node1);
+		Assert.assertNotNull(assignedTasks1_2);
+		Assert.assertEquals(1, assignedTasks1_2.size());
+		
+		List<Task> assignedTasks2_2 = gtaManager.getTasks(participant2, re2, node2);
+		Assert.assertNotNull(assignedTasks2_2);
+		Assert.assertEquals(1, assignedTasks2_2.size());
+		
+		//delete
+		int numOfDeletedObjects = gtaManager.deleteAllTaskLists(re1);
+		Assert.assertEquals(3, numOfDeletedObjects);
+		dbInstance.commitAndCloseSession();
+		
+		//check that there isn't any tasks in node 1
+		List<Task> deletedAssignedTasks1_1 = gtaManager.getTasks(participant1, re1, node1);
+		Assert.assertNotNull(deletedAssignedTasks1_1);
+		Assert.assertEquals(0, deletedAssignedTasks1_1.size());
+		
+		List<Task> deletedAssignedTasks1_2 = gtaManager.getTasks(participant2, re1, node1);
+		Assert.assertNotNull(deletedAssignedTasks1_2);
+		Assert.assertEquals(0, deletedAssignedTasks1_2.size());
+		
+		//but always in node 2
+		List<Task> notDeletedAssignedTasks2_2 = gtaManager.getTasks(participant2, re2, node2);
+		Assert.assertNotNull(notDeletedAssignedTasks2_2);
+		Assert.assertEquals(1, notDeletedAssignedTasks2_2.size());
+	}
+	
 	@Test
 	public void roundRobin() {
 		String[] slots = new String[]{ "A", "B", "C" };