diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
index a327e916bea1072ed9b1858844061677b5d4dc5c..7f8cbbcc3760a16d8bd840f384181d156f2ac11c 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
@@ -38,6 +38,7 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.io.SystemFilenameFilter;
 import org.olat.core.util.mail.ContactList;
 import org.olat.core.util.mail.ContactMessage;
 import org.olat.core.util.vfs.VFSContainer;
@@ -45,6 +46,7 @@ import org.olat.course.nodes.GTACourseNode;
 import org.olat.course.nodes.gta.GTAType;
 import org.olat.course.nodes.gta.Task;
 import org.olat.course.nodes.gta.TaskHelper;
+import org.olat.course.nodes.gta.TaskHelper.FilesLocked;
 import org.olat.course.nodes.gta.TaskProcess;
 import org.olat.course.nodes.gta.model.TaskDefinition;
 import org.olat.course.nodes.gta.ui.events.SubmitEvent;
@@ -357,10 +359,10 @@ public class GTACoachController extends GTAAbstractController {
 			if(GTAType.individual.name().equals(config.getStringValue(GTACourseNode.GTASK_TYPE))) {
 				UserCourseEnvironment assessedUserCourseEnv = getAssessedUserCourseEnvironment();
 				revisionDocumentsCtrl = new GTACoachRevisionAndCorrectionsController(ureq, getWindowControl(),
-					courseEnv, assignedTask, gtaNode, assessedGroup, assessedIdentity, assessedUserCourseEnv);
+					courseEnv, assignedTask, gtaNode, assessedGroup, assessedIdentity, assessedUserCourseEnv, taskListEventResource);
 			} else {
 				revisionDocumentsCtrl = new GTACoachRevisionAndCorrectionsController(ureq, getWindowControl(),
-					courseEnv, assignedTask, gtaNode, assessedGroup, null, null);
+					courseEnv, assignedTask, gtaNode, assessedGroup, null, null, taskListEventResource);
 			}
 			listenTo(revisionDocumentsCtrl);
 			mainVC.put("revisionDocs", revisionDocumentsCtrl.getInitialComponent());
@@ -594,13 +596,30 @@ public class GTACoachController extends GTAAbstractController {
 		} else if (assessedIdentity != null) {
 			toName = userManager.getUserDisplayName(assessedIdentity);			
 		}
-		
-		String title = translate("coach.collect.confirm.title");
-		String text = translate("coach.collect.confirm.text", new String[]{ toName });
-		text = "<div class='o_warning'>" + text + "</div>";
-		confirmCollectCtrl = activateOkCancelDialog(ureq, title, text, confirmCollectCtrl);
-		confirmCollectCtrl.setUserObject(assignedTask);
-		listenTo(confirmCollectCtrl);
+
+		File[] submittedDocuments;
+		VFSContainer documentsContainer;
+		if(GTAType.group.name().equals(config.getStringValue(GTACourseNode.GTASK_TYPE))) {
+			documentsContainer = gtaManager.getSubmitContainer(courseEnv, gtaNode, assessedGroup);
+			File documentsDir = gtaManager.getSubmitDirectory(courseEnv, gtaNode, assessedGroup);
+			submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+		} else {
+			documentsContainer = gtaManager.getSubmitContainer(courseEnv, gtaNode, getIdentity());
+			File documentsDir = gtaManager.getSubmitDirectory(courseEnv, gtaNode, getIdentity());
+			submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+		}
+
+		FilesLocked lockedBy = TaskHelper.getDocumentsLocked(documentsContainer, submittedDocuments);
+		if(lockedBy != null) {
+			showWarning("warning.submit.documents.edited", new String[]{ lockedBy.getLockedBy(), lockedBy.getLockedFiles() });
+		} else {
+			String title = translate("coach.collect.confirm.title");
+			String text = translate("coach.collect.confirm.text", new String[]{ toName });
+			text = "<div class='o_warning'>" + text + "</div>";
+			confirmCollectCtrl = activateOkCancelDialog(ureq, title, text, confirmCollectCtrl);
+			confirmCollectCtrl.setUserObject(assignedTask);
+			listenTo(confirmCollectCtrl);
+		}
 	}
 	
 	private void doCollectTask(UserRequest ureq, Task task) {
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
index 575e39e83844dc23d6037614034c2601630802d6..e7ada489bfcb2e07c4f80ce441520ee4f78d69d1 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
@@ -37,6 +37,9 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.Identity;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.io.SystemFilenameFilter;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
@@ -47,8 +50,10 @@ import org.olat.course.nodes.gta.GTAManager;
 import org.olat.course.nodes.gta.GTAType;
 import org.olat.course.nodes.gta.Task;
 import org.olat.course.nodes.gta.TaskHelper;
+import org.olat.course.nodes.gta.TaskHelper.FilesLocked;
 import org.olat.course.nodes.gta.TaskProcess;
 import org.olat.course.nodes.gta.ui.events.SubmitEvent;
+import org.olat.course.nodes.gta.ui.events.TaskMultiUserEvent;
 import org.olat.course.run.environment.CourseEnvironment;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.group.BusinessGroup;
@@ -77,6 +82,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 	private final Identity assessedIdentity;
 	private final BusinessGroup assessedGroup;
 	private final CourseEnvironment courseEnv;
+	private final OLATResourceable taskListEventResource;
 	private final UserCourseEnvironment assessedUserCourseEnv;
 	
 	@Autowired
@@ -88,7 +94,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 	
 	public GTACoachRevisionAndCorrectionsController(UserRequest ureq, WindowControl wControl, CourseEnvironment courseEnv,
 			Task assignedTask, GTACourseNode gtaNode, BusinessGroup assessedGroup,
-			Identity assessedIdentity, UserCourseEnvironment assessedUserCourseEnv) {
+			Identity assessedIdentity, UserCourseEnvironment assessedUserCourseEnv, OLATResourceable taskListEventResource) {
 		super(ureq, wControl);
 		this.gtaNode = gtaNode;
 		this.courseEnv = courseEnv;
@@ -96,6 +102,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 		this.assessedGroup = assessedGroup;
 		this.assessedIdentity = assessedIdentity;
 		this.assessedUserCourseEnv = assessedUserCourseEnv;
+		this.taskListEventResource = taskListEventResource;
 		this.businessGroupTask = GTAType.group.name().equals(gtaNode.getModuleConfiguration().getStringValue(GTACourseNode.GTASK_TYPE));
 		currentIteration = assignedTask.getRevisionLoop();
 		
@@ -312,11 +319,29 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 			toName = userManager.getUserDisplayName(assessedIdentity);			
 		}
 		
-		String title = translate("coach.collect.revisions.confirm.title");
-		String text = translate("coach.collect.revisions.confirm.text", new String[]{ toName });
-		text = "<div class='o_warning'>" + text + "</div>";
-		confirmCollectCtrl = activateOkCancelDialog(ureq, title, text, confirmCollectCtrl);
-		listenTo(confirmCollectCtrl);
+		File[] submittedDocuments;
+		VFSContainer documentsContainer;
+		int iteration = assignedTask.getRevisionLoop();
+		if(GTAType.group.name().equals(gtaNode.getModuleConfiguration().getStringValue(GTACourseNode.GTASK_TYPE))) {
+			documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, assessedGroup);
+			File documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, assessedGroup);
+			submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+		} else {
+			documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, getIdentity());
+			File documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, getIdentity());
+			submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+		}
+		
+		FilesLocked lockedBy = TaskHelper.getDocumentsLocked(documentsContainer, submittedDocuments);
+		if(lockedBy != null) {
+			showWarning("warning.submit.documents.edited", new String[]{ lockedBy.getLockedBy(), lockedBy.getLockedFiles() });
+		} else {
+			String title = translate("coach.collect.revisions.confirm.title");
+			String text = translate("coach.collect.revisions.confirm.text", new String[]{ toName });
+			text = "<div class='o_warning'>" + text + "</div>";
+			confirmCollectCtrl = activateOkCancelDialog(ureq, title, text, confirmCollectCtrl);
+			listenTo(confirmCollectCtrl);
+		}
 	}
 	
 	private void doCollect() {
@@ -335,6 +360,11 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 		} else {
 			gtaNode.incrementUserAttempts(assessedUserCourseEnv);
 		}
+		
+		TaskMultiUserEvent event = new TaskMultiUserEvent(TaskMultiUserEvent.SUBMIT_REVISION,
+				assessedGroup == null ? getIdentity() : null, assessedGroup, getIdentity());
+		CoordinatorManager.getInstance().getCoordinator().getEventBus()
+			.fireEventToListenersOf(event, taskListEventResource);
 	}
 	
 	private void doReturnToRevisions() {