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 7236d850f1e5ca0f34a58505aff10ac6c9fe44bf..06278cc82af80ce78ed2745ac4f9882a9e410a31 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
@@ -33,7 +33,11 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 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.util.StringHelper;
+import org.olat.core.util.io.SystemFilenameFilter;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.CourseFactory;
 import org.olat.course.ICourse;
@@ -61,9 +65,10 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
 	
 	private Link submitRevisionButton;
 	private final VelocityContainer mainVC;
-	
-	private DirectoryController correctionsCtrl, revisionsCtrl;
+
+	private DialogBoxController confirmSubmitDialog;
 	private SubmitDocumentsController uploadRevisionsCtrl;
+	private DirectoryController correctionsCtrl, revisionsCtrl;
 	
 	private Task assignedTask;
 	private final boolean businessGroupTask;
@@ -210,16 +215,50 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
 				Task aTask = uploadRevisionsCtrl.getAssignedTask();
 				gtaManager.log("Revision", (SubmitEvent)event, aTask, getIdentity(), getIdentity(), assessedGroup, courseEnv, gtaNode);				
 			}
+		} else if(confirmSubmitDialog == source) {
+			if(DialogBoxUIFactory.isOkEvent(event) || DialogBoxUIFactory.isYesEvent(event)) {
+				doSubmitRevisions();
+				fireEvent(ureq, Event.DONE_EVENT);
+			}
+			cleanUp();
 		}
 		super.event(ureq, source, event);
 	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(confirmSubmitDialog);
+		confirmSubmitDialog = null;
+	}
 
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if(submitRevisionButton == source) {
-			doSubmitRevisions();
-			fireEvent(ureq, Event.DONE_EVENT);
+			doConfirmSubmit(ureq);
+		}
+	}
+	
+	private void doConfirmSubmit(UserRequest ureq) {
+		int iteration = assignedTask.getRevisionLoop();
+		String title = translate("run.submit.revision.button");
+		String text;
+		if(GTAType.group.name().equals(gtaNode.getModuleConfiguration().getStringValue(GTACourseNode.GTASK_TYPE))) {
+			File documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, assessedGroup);
+			File[] submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+			if(submittedDocuments.length == 0) {
+				text = "<div class='o_warning'>" + translate("run.submit.revision.confirm.warning.group", new String[]{ StringHelper.escapeHtml(assessedGroup.getName()) }) + "</div>";
+			} else {
+				text = translate("run.submit.revision.confirm.group", new String[]{ StringHelper.escapeHtml(assessedGroup.getName()) });
+			}
+		} else {
+			File documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, getIdentity());
+			File[] submittedDocuments = documentsDir.listFiles(new SystemFilenameFilter(true, false));
+			if(submittedDocuments.length == 0) {
+				text = "<div class='o_warning'>" + translate("run.submit.revision.confirm.warning") + "</div>";
+			} else {
+				text = translate("run.submit.revision.confirm");
+			}
 		}
+		confirmSubmitDialog = activateOkCancelDialog(ureq, title, text, confirmSubmitDialog);
 	}
 	
 	private void doSubmitRevisions() {
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
index 9889a36f57df6b6bea3fe6828a9b96178824beee..78d965d71c4912ffed41eace906c40972a84a2c8 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
@@ -187,6 +187,10 @@ run.submit.individual.description.all=Geben Sie Ihre L\u00F6sung ab indem Sie en
 run.submit.individual.description.editor=Schreiben Sie Ihre L\u00F6sung direkt im Editor.
 run.submit.individual.description.upload=Laden Sie Ihre L\u00F6sung als fertiges Dokument hoch.
 run.submit.revision.button=\u00DCberarbeitung abgeben
+run.submit.revision.confirm=Bitte best\u00E4tigen Sie die Abgabe der \u00DCberarbeitung. Die Abgabe der \u00DCberarbeitung ist endg\u00FCltig und kann nicht zur\u00FCckgezogen werden.
+run.submit.revision.confirm.group=$\:run.submit.revision.confirm<br/>Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\!
+run.submit.revision.confirm.warning=Sie haben noch kein Dokument hochgeladen bzw. erstellt. M\u00F6chten Sie trotzdem die \u00FCberarbeitende Aufgabe abgeben? Die \u00DCberarbeitung ist endg\u00FCltig und kann nicht widerrufen werden. <br/><br/> Sie k\u00F6nnen danach keine Dokumente mehr hochladen.<br/>
+run.submit.revision.confirm.warning.group=$\:run.submit.revision.confirm.warning<br/>Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\!
 run.submitted.description=Die folgenden L\u00F6sungen wurden von Ihnen abgegeben\:
 run.submitted.nofiles=Die Abgabe erfolgte ohne Dokumente.
 sample.solution=Musterl\u00F6sungen
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
index b2672131ea980fb20e230f20e0cdb841685ebfc3..63e9ac34dec6ecdada2dc9a56c10b33e33f36b92 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
@@ -187,6 +187,10 @@ run.submit.individual.description.all=Submit your solution by either uploading a
 run.submit.individual.description.editor=Submit your solution by using the editor to write your solution right here.
 run.submit.individual.description.upload=Submit your solution by uploading a document you created on your computer.
 run.submit.revision.button=Submit revision
+run.submit.revision.confirm=Please confirm the submission for this revision. The submission of the revision is final and can not be undone. 
+run.submit.revision.confirm.group=$\:run.submit.revision.confirm<br/>This is a group task\! The submitted document is valid for all members of the group "{0}"\!
+run.submit.revision.confirm.warning=You have not yet uploaded / created a document. Do you still wish to submit? The submission of the revised task is final and can not be undone. <br/> The drop box is closed. You will not be able to upload any documents.
+run.submit.revision.confirm.warning.group=$\:run.submit.revision.confirm.warning<br/>This is a group task\! The submitted document is valid for all members of the group "{0}"\!
 run.submitted.description=The following solutions have been submitted by you\:
 run.submitted.nofiles=The submission was done without documents
 sample.solution=Sample solution
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
index 5656b4eeb8c01700b650fe9caf7b5392d47d4c88..0cdab105201f8e5d0d4a27c49475b772f546dea0 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
@@ -180,12 +180,16 @@ run.submit.button=Transmettre le devoir
 run.submit.confirm=Le d\u00E9p\u00F4t de votre devoir est d\u00E9finitif.
 run.submit.confirm.group=$\:run.submit.confirm<br/>C'est un devoir de groupe\! La s\u00E9lection effectu\u00E9e ici est valable pour tous les participants du groupe "{0}"\!
 run.submit.confirm.warning=Vous n'avez pas t\u00E9l\u00E9charger ou cr\u00E9er de document. Souhaitez toujours soumettre votre devoir? La remise du devoir est d\u00E9finitive et ne peut \u00EAtre r\u00E9voqu\u00E9e. Vous ne pourrez plus t\u00E9l\u00E9charger  de documents ensuite.
-run.submit.confirm.warning.group=$\:run.submit.confirm.warning<br/>C'ist un de vor de groupe\! Les actions effectu\u00E9es ici le sont au nom de tous les membres du groupe "{0}"\!
+run.submit.confirm.warning.group=$\:run.submit.confirm.warning<br/>C'est un devoir de groupe\! Les actions effectu\u00E9es ici le sont au nom de tous les membres du groupe "{0}"\!
 run.submit.due.date=D\u00E9lai de d\u00E9p\u00F4t\: {0}
 run.submit.individual.description.all=Entrez votre solution soit en t\u00E9l\u00E9chargeant un document ou en utilisant l'\u00E9diteur int\u00E9gr\u00E9 mis \u00E0 votre disposition.
 run.submit.individual.description.editor=Ecrivez directement votre solution dans l'\u00E9diteur.
 run.submit.individual.description.upload=T\u00E9l\u00E9chargez un document termin\u00E9 en tant que solution.
 run.submit.revision.button=Soumettre les remaniements
+run.submit.revision.confirm=Le d\u00E9p\u00F4t de votre ou vos documents remani\u00E9s est d\u00E9finitif.
+run.submit.revision.confirm.group=$\:run.submit.revision.confirm<br/>C'est un devoir de groupe\! La s\u00E9lection effectu\u00E9e ici est valable pour tous les participants du groupe "{0}"\!
+run.submit.revision.confirm.warning=Vous n'avez pas t\u00E9l\u00E9charger ou cr\u00E9er de document. Souhaitez toujours soumettre votre devoir remani\u00E9? La remise du devoir est d\u00E9finitive et ne peut \u00EAtre r\u00E9voqu\u00E9e. Vous ne pourrez plus t\u00E9l\u00E9charger  de documents ensuite.
+run.submit.revision.confirm.warning.group=$\:run.submit.revision.confirm.warning<br/>C'est un devoir de groupe\! Les actions effectu\u00E9es ici le sont au nom de tous les membres du groupe "{0}"\!
 run.submitted.description=Vous avez rendus les solutions suivantes\:
 run.submitted.nofiles=Le devoir a \u00E9t\u00E9 soumis sans le moindre document.
 sample.solution=Solutions
diff --git a/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java b/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
index 0a3639b4490e8826d0b5bfad47b89fa83b4a1f77..1811add270f25eb8de81a0a7e345a92523d0a10a 100644
--- a/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
+++ b/src/test/java/org/olat/selenium/page/course/GroupTaskPage.java
@@ -128,10 +128,7 @@ public class GroupTaskPage {
 		OOGraphene.waitBusy(browser);
 		
 		//confirm
-		By confirmButtonBy = By.cssSelector("div.modal-dialog div.modal-footer a");
-		List<WebElement> buttonsEl = browser.findElements(confirmButtonBy);
-		buttonsEl.get(0).click();
-		OOGraphene.waitBusy(browser);
+		confirmDialog();
 		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		return this;
 	}
@@ -140,6 +137,17 @@ public class GroupTaskPage {
 		By submitBy = By.cssSelector("#o_step_revision_content .o_sel_course_gta_submit_revisions");
 		browser.findElement(submitBy).click();
 		OOGraphene.waitBusy(browser);
+		return confirmDialog();
+	}
+	
+	/**
+	 * Confirm a yes / no dialog box
+	 */
+	private GroupTaskPage confirmDialog() {
+		By confirmButtonBy = By.cssSelector("div.modal-dialog div.modal-footer a");
+		OOGraphene.waitElement(confirmButtonBy, 5, browser);
+		browser.findElement(confirmButtonBy).click();
+		OOGraphene.waitBusy(browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
index 794a140364726a4d78adf74c85b5f982a437363e..b13e0c4e5d4f2845c369fd8eb5a987efdd7df5c5 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -44,7 +44,8 @@ import org.openqa.selenium.WebElement;
  */
 public class OOGraphene {
 
-	private static final long poolingDuration = 25;
+	private static final long poolingDuration = 25;//ms
+	private static final long waitTinyDuration = 15;//seconds
 
 	private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close");
 	private static final By closeModalDialogButtonBy = By.cssSelector("div.modal-dialog div.modal-header button.close");
@@ -84,7 +85,7 @@ public class OOGraphene {
 	// top.tinymce.get('o_fi1000000416').setContent('<p>Hacked</p>');
 	// <div id="o_fi1000000416_diw" class="o_richtext_mce"> <iframe id="o_fi1000000416_ifr">
 	public static final void tinymce(String content, WebDriver browser) {
-		Graphene.waitModel(browser).withTimeout(5, TimeUnit.SECONDS)
+		Graphene.waitModel(browser).withTimeout(waitTinyDuration, TimeUnit.SECONDS)
 			.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until(new TinyMCELoadedPredicate());
 		((JavascriptExecutor)browser).executeScript("top.tinymce.activeEditor.setContent('" + content + "')");
 	}