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 6579ff826a7f8539185e8be003a61f1edd17e4d4..424b147f78b972231163e64ca03e1a9e60bdee2c 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
@@ -286,7 +286,7 @@ public class GTACoachController extends GTAAbstractController implements Assessm
 		}
 		
 		submitCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "coach.document");
+				gtaNode, courseEnv, null, "coach.document");
 		listenTo(submitCorrectionsCtrl);
 		mainVC.put("corrections", submitCorrectionsCtrl.getInitialComponent());
 		
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 16e3e975a18ca60bca2e5f9da42a8c8347f9db16..05a638c2a6d6e2bca3c396c366cca717d28e9108 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
@@ -236,7 +236,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 		}
 		
 		uploadCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "coach.document");
+				gtaNode, courseEnv, null, "coach.document");
 		listenTo(uploadCorrectionsCtrl);
 		mainVC.put("uploadCorrections", uploadCorrectionsCtrl.getInitialComponent());
 
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
index 4b5758fdd0c61d4ef96f13d185d21c16f4a1690c..5e3d1c11ba929be6ca85e05d8f1b3e1d61802911 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
@@ -243,9 +243,11 @@ public class GTAParticipantController extends GTAAbstractController {
 			documentsContainer = gtaManager.getSubmitContainer(courseEnv, gtaNode, getIdentity());
 		}
 		
+		DueDate dueDate = getSubmissionDueDate(task);
+		Date deadline = dueDate == null ? null : dueDate.getDueDate();
 		int maxDocs = config.getIntegerSafe(GTACourseNode.GTASK_MAX_SUBMITTED_DOCS, -1);
 		submitDocCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, maxDocs,
-				gtaNode, courseEnv, "document");
+				gtaNode, courseEnv, deadline, "document");
 		listenTo(submitDocCtrl);
 		mainVC.put("submitDocs", submitDocCtrl.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
index ca7df5075e42393dd9bc9e02597b3605d7adaf0b..c7365a4205ea263bfdc7e9e0c7af87fd21c08b0d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
@@ -168,7 +168,7 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
 			documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, getIdentity());
 		}
 		uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "document");
+				gtaNode, courseEnv, null, "document");
 		listenTo(uploadRevisionsCtrl);
 		mainVC.put("uploadRevisions", uploadRevisionsCtrl.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
index c0914a1cc3812a5557819d3b8935b2ed4c1bd972..8b8181b5294c187f85e7c727db07336a42eb6d5d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
@@ -26,6 +26,7 @@ import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import org.olat.core.commons.editor.htmleditor.HTMLEditorController;
@@ -98,6 +99,7 @@ class SubmitDocumentsController extends FormBasicController {
 	private final SubscriptionContext subscriptionContext;
 	
 	private boolean open = true;
+	private final Date deadline;
 	
 	@Autowired
 	private UserManager userManager;
@@ -108,13 +110,14 @@ class SubmitDocumentsController extends FormBasicController {
 	
 	public SubmitDocumentsController(UserRequest ureq, WindowControl wControl, Task assignedTask,
 			File documentsDir, VFSContainer documentsContainer, int maxDocs, GTACourseNode cNode,
-			CourseEnvironment courseEnv, String docI18nKey) {
+			CourseEnvironment courseEnv, Date deadline, String docI18nKey) {
 		super(ureq, wControl, "documents");
 		this.assignedTask = assignedTask;
 		this.documentsDir = documentsDir;
 		this.documentsContainer = documentsContainer;
 		this.maxDocs = maxDocs;
 		this.docI18nKey = docI18nKey;
+		this.deadline = deadline;
 		this.config = cNode.getModuleConfiguration();
 		subscriptionContext = gtaManager.getSubscriptionContext(courseEnv, cNode);
 		initForm(ureq);
@@ -230,6 +233,7 @@ class SubmitDocumentsController extends FormBasicController {
 				notificationsManager.markPublisherNews(subscriptionContext, null, false);
 			}
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(uploadCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				String filename = uploadCtrl.getUploadedFilename();
@@ -239,6 +243,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(replaceCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				String filename = replaceCtrl.getUploadedFilename();
@@ -248,6 +253,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(newDocCtrl == source) {
 			String filename = newDocCtrl.getFilename();
 			cmc.deactivate();
@@ -257,6 +263,7 @@ class SubmitDocumentsController extends FormBasicController {
 				doCreateDocumentEditor(ureq, filename);
 				updateModel();
 			} 
+			checkDeadline(ureq);
 		} else if(newDocumentEditorCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				updateModel();
@@ -265,6 +272,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(editDocumentEditorCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				updateModel();
@@ -273,6 +281,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(cmc == source) {
 			cleanUp();
 		}
@@ -302,15 +311,15 @@ class SubmitDocumentsController extends FormBasicController {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(uploadDocButton == source) {
-			if(checkOpen(ureq)) {
+			if(checkOpen(ureq) && checkDeadline(ureq)) {
 				doOpenDocumentUpload(ureq);
 			}
 		} else if(createDocButton == source) {
-			if(checkOpen(ureq)) {
+			if(checkOpen(ureq) && checkDeadline(ureq)) {
 				doChooseFilename(ureq);
 			}
 		} else if(tableEl == source) {
-			if(checkOpen(ureq) && event instanceof SelectionEvent) {
+			if(checkOpen(ureq) && checkDeadline(ureq) && event instanceof SelectionEvent) {
 				SelectionEvent se = (SelectionEvent)event;
 				SubmittedSolution row = model.getObject(se.getIndex());
 				if("delete".equals(se.getCommand())) {
@@ -328,6 +337,13 @@ class SubmitDocumentsController extends FormBasicController {
 		super.formInnerEvent(ureq, source, event);
 	}
 	
+	private boolean checkDeadline(UserRequest ureq) {
+		if(deadline == null || deadline.after(new Date())) return true;
+		showWarning("warning.tasks.submitted");
+		fireEvent(ureq, Event.DONE_EVENT);
+		return false;
+	}
+	
 	private boolean checkOpen(UserRequest ureq) {
 		if(open) return true;
 		showWarning("warning.tasks.submitted");