diff --git a/src/main/java/org/olat/course/nodes/GTACourseNode.java b/src/main/java/org/olat/course/nodes/GTACourseNode.java
index 859320d2dc7d61879d3f51abd814267e36882bda..183a262f1a96f6e940d41f5efc73e354144d1162 100644
--- a/src/main/java/org/olat/course/nodes/GTACourseNode.java
+++ b/src/main/java/org/olat/course/nodes/GTACourseNode.java
@@ -152,6 +152,8 @@ public class GTACourseNode extends AbstractAccessableCourseNode implements Persi
 	public static final String GTASK_SUBMISSION_TEXT = "grouptask.submission.text";
 	public static final String GTASK_SUBMISSION_MAIL_CONFIRMATION = "grouptask.submission.mail.confirmation";
 	
+	public static final String GTASK_MAX_REVISED_DOCS = "grouptask.max.revised.docs";
+	
 	public static final String GTASK_SOLUTIONS = "grouptask.solutions";
 	
 
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAEditController.java
index 64a4512a35fe1759a55fd534af7818bb4a09c62b..4eccde43d93e70ef4330bde872470402258f1619 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAEditController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAEditController.java
@@ -52,17 +52,20 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
 	public static final String PANE_TAB_WORKLOW = "pane.tab.workflow";
 	public static final String PANE_TAB_ASSIGNMENT = "pane.tab.assignment";
 	public static final String PANE_TAB_SUBMISSION = "pane.tab.submission";
+	public static final String PANE_TAB_REVIEW_AND_CORRECTIONS = "pane.tab.review";
 	public static final String PANE_TAB_GRADING = "pane.tab.grading";
 	public static final String PANE_TAB_SOLUTIONS = "pane.tab.solutions";
 	public static final String PANE_TAB_HIGHSCORE = "pane.tab.highscore";
 	public static final String[] paneKeys = {
 		PANE_TAB_ACCESSIBILITY, PANE_TAB_WORKLOW, PANE_TAB_ASSIGNMENT,
-		PANE_TAB_SUBMISSION, PANE_TAB_GRADING, PANE_TAB_SOLUTIONS
+		PANE_TAB_SUBMISSION, PANE_TAB_REVIEW_AND_CORRECTIONS, PANE_TAB_GRADING,
+		PANE_TAB_SOLUTIONS
 	};
-	private int workflowPos, assignmentPos, submissionPos, gradingPos, solutionsPos, highScoreTabPosition;
+	private int workflowPos, assignmentPos, submissionPos, revisionPos, gradingPos, solutionsPos, highScoreTabPosition;
 	
 	private TabbedPane myTabbedPane;
 	private GTAWorkflowEditController workflowCtrl;
+	private GTARevisionAndCorrectionEditController revisionCtrl;
 	private GTAAssignmentEditController assignmentCtrl;
 	private GTASubmissionEditController submissionCtrl;
 	private MSEditFormController manualAssessmentCtrl;
@@ -99,6 +102,9 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
 		//submission
 		submissionCtrl = new GTASubmissionEditController(ureq, getWindowControl(), config);
 		listenTo(submissionCtrl);
+		//revision
+		revisionCtrl = new GTARevisionAndCorrectionEditController(ureq, getWindowControl(), config);
+		listenTo(revisionCtrl);
 		//grading
 		manualAssessmentCtrl = new MSEditFormController(ureq, getWindowControl(), config);
 		listenTo(manualAssessmentCtrl);
@@ -125,6 +131,7 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
 		workflowPos = tabbedPane.addTab(translate(PANE_TAB_WORKLOW), workflowCtrl.getInitialComponent());
 		assignmentPos = tabbedPane.addTab(translate(PANE_TAB_ASSIGNMENT), assignmentCtrl.getInitialComponent());
 		submissionPos = tabbedPane.addTab(translate(PANE_TAB_SUBMISSION), submissionCtrl.getInitialComponent());
+		revisionPos = tabbedPane.addTab(translate(PANE_TAB_REVIEW_AND_CORRECTIONS), revisionCtrl.getInitialComponent());
 		gradingPos = tabbedPane.addTab(translate(PANE_TAB_GRADING), manualAssessmentCtrl.getInitialComponent());
 		solutionsPos = tabbedPane.addTab(translate(PANE_TAB_SOLUTIONS), solutionsCtrl.getInitialComponent());
 		highScoreTabPosition = myTabbedPane.addTab(translate(PANE_TAB_HIGHSCORE), highScoreNodeConfigController.getInitialComponent());
@@ -134,6 +141,7 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
 	private void updateEnabledDisabledTabs() {
 		myTabbedPane.setEnabled(assignmentPos, config.getBooleanSafe(GTACourseNode.GTASK_ASSIGNMENT));
 		myTabbedPane.setEnabled(submissionPos, config.getBooleanSafe(GTACourseNode.GTASK_SUBMIT));
+		myTabbedPane.setEnabled(revisionPos, config.getBooleanSafe(GTACourseNode.GTASK_REVIEW_AND_CORRECTION));
 		myTabbedPane.setEnabled(gradingPos, config.getBooleanSafe(GTACourseNode.GTASK_GRADING));
 		myTabbedPane.setEnabled(solutionsPos, config.getBooleanSafe(GTACourseNode.GTASK_SAMPLE_SOLUTION));
 		myTabbedPane.setEnabled(highScoreTabPosition, config.getBooleanSafe(MSCourseNode.CONFIG_KEY_HAS_SCORE_FIELD));
@@ -190,6 +198,15 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
 				listenTo(submissionCtrl);
 				myTabbedPane.replaceTab(submissionPos, submissionCtrl.getInitialComponent());
 			}
+		} else if(revisionCtrl == source) {
+			if(event == Event.DONE_EVENT) {
+				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			} else if(event == Event.CANCELLED_EVENT) {
+				removeAsListenerAndDispose(revisionCtrl);
+				revisionCtrl = new GTARevisionAndCorrectionEditController(ureq, getWindowControl(), config);
+				listenTo(revisionCtrl);
+				myTabbedPane.replaceTab(revisionPos, revisionCtrl.getInitialComponent());
+			}
 		} else if(manualAssessmentCtrl == source) {
 			if (event == Event.DONE_EVENT){
 				manualAssessmentCtrl.updateModuleConfiguration(config);
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 95b6db4a889e2c2dffea9328092cf37bd232a460..7de126bf68c9b40b9aca58e596c8a7abb3795e0f 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
@@ -167,7 +167,8 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
 			documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, getIdentity());
 			documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, getIdentity());
 		}
-		uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
+		int maxDocs = gtaNode.getModuleConfiguration().getIntegerSafe(GTACourseNode.GTASK_MAX_REVISED_DOCS, -1);
+		uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, maxDocs,
 				gtaNode, courseEnv, assessedUserCourseEnv.isCourseReadOnly(), null, "document");
 		listenTo(uploadRevisionsCtrl);
 		mainVC.put("uploadRevisions", uploadRevisionsCtrl.getInitialComponent());
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTARevisionAndCorrectionEditController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTARevisionAndCorrectionEditController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7cd0a39c40d483ca6cb7c891e77072fdf0e9d42
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTARevisionAndCorrectionEditController.java
@@ -0,0 +1,122 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.course.nodes.gta.ui;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.TextElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+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.util.StringHelper;
+import org.olat.course.nodes.GTACourseNode;
+import org.olat.modules.ModuleConfiguration;
+
+/**
+ * 
+ * Initial date: 4 août 2017<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class GTARevisionAndCorrectionEditController extends FormBasicController {
+	
+	private TextElement maxNumberOfDocsEl;
+	
+	private final ModuleConfiguration config;
+	
+	public GTARevisionAndCorrectionEditController(UserRequest ureq, WindowControl wControl, ModuleConfiguration config) {
+		super(ureq, wControl, LAYOUT_BAREBONE);
+		
+		this.config = config;
+		
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		//configuration
+		FormLayoutContainer configCont = FormLayoutContainer.createDefaultFormLayout("config", getTranslator());
+		configCont.setRootForm(mainForm);
+		configCont.setFormTitle(translate("editor.revisions.title"));
+		configCont.setFormContextHelp("Assessment#_task_abgabe");
+		formLayout.add(configCont);
+
+		int maxDocs = config.getIntegerSafe(GTACourseNode.GTASK_MAX_REVISED_DOCS, -1);
+		String maxVal = "";
+		if(maxDocs > 0) {
+			maxVal = Integer.toString(maxDocs);
+		}
+		maxNumberOfDocsEl = uifactory.addTextElement("max.documents", "max.documents", 5, maxVal, configCont);
+
+		//save
+		FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
+		buttonsCont.setRootForm(mainForm);
+		configCont.add(buttonsCont);
+		uifactory.addFormSubmitButton("save", buttonsCont);
+		uifactory.addFormCancelButton("cancel", buttonsCont, ureq, getWindowControl());
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = true;
+		
+		maxNumberOfDocsEl.clearError();
+		String maxVal = maxNumberOfDocsEl.getValue();
+		if(StringHelper.containsNonWhitespace(maxVal)) {
+			try {
+				int val = Integer.parseInt(maxVal);
+				if(val <= 0 || val > 12) {
+					maxNumberOfDocsEl.setErrorKey("error.number.format", null);
+					allOk &= false;
+				}
+			} catch (NumberFormatException e) {
+				//can happen
+				allOk &= false;
+				maxNumberOfDocsEl.setErrorKey("error.number.format", null);
+			}
+		}
+		
+		return allOk & super.validateFormLogic(ureq);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		String maxVal = maxNumberOfDocsEl.getValue();
+		if(StringHelper.isLong(maxVal)) {
+			try {
+				int val = Integer.parseInt(maxVal);
+				config.setIntValue(GTACourseNode.GTASK_MAX_REVISED_DOCS, val);
+			} catch (NumberFormatException e) {
+				//can happen
+			}
+		} else {
+			config.remove(GTACourseNode.GTASK_MAX_REVISED_DOCS);
+		}
+
+		fireEvent(ureq, Event.DONE_EVENT);
+	}
+}
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 4e512a6b539edd826d736f8e52f4ea4f9d4a8fbf..bf94c85a03f6a2675daa23a5ba02e74c38e66b57 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
@@ -78,6 +78,7 @@ download.task=Aufgabe herunterladen
 download.task.infos={0} ({1} MB)
 edit.task=Aufgabe bearbeiten
 editor.title=Abgabe Konfiguration
+editor.revisions.title=R\u00FCckgabe Konfiguration
 embedded.editor=Abgabe mit OpenOLAT Texteditor
 enabled=eingeschaltet
 error.assignment.closed=Zuweisung ist geschlossen.
@@ -129,6 +130,7 @@ open.group=Gruppe \u00F6ffnen
 pane.tab.accessibility=Zugang
 pane.tab.assignment=Aufgabenstellung
 pane.tab.grading=Bewertung
+pane.tab.review=R\u00FCckgabe und Feedback
 pane.tab.solutions=Musterl\u00F6sung
 pane.tab.submission=Abgabe
 pane.tab.workflow=Workflow
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 cf6f93144b0492b382a6aa6513508fffac47b7ae..659c57eb909053c16f77e2551ee0d23b3820df64 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
@@ -78,6 +78,7 @@ download.task=Download task
 download.task.infos={0} ({1} MB)
 edit.task=Edit task
 editor.title=Submission configuration
+editor.revisions.title=Revision configuration
 embedded.editor=Submit with OpenOLAT text editor
 enabled=enabled
 error.assignment.closed=Assignment is closed
@@ -129,6 +130,7 @@ open.group=Open group
 pane.tab.accessibility=Access
 pane.tab.assignment=Assignment
 pane.tab.grading=Grading
+pane.tab.review=Revisions and feedback
 pane.tab.solutions=Sample solutions
 pane.tab.submission=Submission
 pane.tab.workflow=Workflow